[
  {
    "path": ".obsidian/app.json",
    "content": "{\n  \"attachmentFolderPath\": \"./media\",\n  \"defaultViewMode\": \"preview\",\n  \"promptDelete\": false,\n  \"showInlineTitle\": false,\n  \"pdfExportSettings\": {\n    \"includeName\": true,\n    \"pageSize\": \"Letter\",\n    \"landscape\": false,\n    \"margin\": \"0\",\n    \"downscalePercent\": 100\n  }\n}"
  },
  {
    "path": ".obsidian/appearance.json",
    "content": "{\n  \"cssTheme\": \"Blue Topaz\",\n  \"accentColor\": \"\",\n  \"showViewHeader\": true,\n  \"showRibbon\": true\n}"
  },
  {
    "path": ".obsidian/community-plugins.json",
    "content": "[\n  \"obsidian-custom-attachment-location\",\n  \"i18n\",\n  \"awesome-image\",\n  \"obsidian-style-settings\"\n]"
  },
  {
    "path": ".obsidian/core-plugins.json",
    "content": "{\n  \"file-explorer\": true,\n  \"global-search\": true,\n  \"switcher\": true,\n  \"graph\": true,\n  \"backlink\": false,\n  \"canvas\": true,\n  \"outgoing-link\": true,\n  \"tag-pane\": true,\n  \"properties\": false,\n  \"page-preview\": true,\n  \"daily-notes\": false,\n  \"templates\": true,\n  \"note-composer\": false,\n  \"command-palette\": true,\n  \"slash-command\": false,\n  \"editor-status\": true,\n  \"bookmarks\": true,\n  \"markdown-importer\": false,\n  \"zk-prefixer\": false,\n  \"random-note\": false,\n  \"outline\": true,\n  \"word-count\": true,\n  \"slides\": false,\n  \"audio-recorder\": false,\n  \"workspaces\": false,\n  \"file-recovery\": true,\n  \"publish\": false,\n  \"sync\": true,\n  \"webviewer\": false,\n  \"footnotes\": false,\n  \"bases\": true\n}"
  },
  {
    "path": ".obsidian/graph.json",
    "content": "{\n  \"collapse-filter\": true,\n  \"search\": \"\",\n  \"showTags\": false,\n  \"showAttachments\": false,\n  \"hideUnresolved\": false,\n  \"showOrphans\": true,\n  \"collapse-color-groups\": true,\n  \"colorGroups\": [],\n  \"collapse-display\": true,\n  \"showArrow\": false,\n  \"textFadeMultiplier\": 0,\n  \"nodeSizeMultiplier\": 1,\n  \"lineSizeMultiplier\": 1,\n  \"collapse-forces\": true,\n  \"centerStrength\": 0.518713248970312,\n  \"repelStrength\": 10,\n  \"linkStrength\": 1,\n  \"linkDistance\": 250,\n  \"scale\": 0.36288736930121335,\n  \"close\": true\n}"
  },
  {
    "path": ".obsidian/hotkeys.json",
    "content": "{\n  \"editor:set-heading-1\": [\n    {\n      \"modifiers\": [\n        \"Mod\"\n      ],\n      \"key\": \"1\"\n    }\n  ],\n  \"editor:set-heading-2\": [\n    {\n      \"modifiers\": [\n        \"Mod\"\n      ],\n      \"key\": \"2\"\n    }\n  ],\n  \"editor:set-heading-3\": [\n    {\n      \"modifiers\": [\n        \"Mod\"\n      ],\n      \"key\": \"3\"\n    }\n  ],\n  \"editor:set-heading-4\": [\n    {\n      \"modifiers\": [\n        \"Mod\"\n      ],\n      \"key\": \"4\"\n    }\n  ],\n  \"editor:set-heading-5\": [\n    {\n      \"modifiers\": [\n        \"Mod\"\n      ],\n      \"key\": \"5\"\n    }\n  ],\n  \"editor:set-heading-6\": [\n    {\n      \"modifiers\": [\n        \"Mod\"\n      ],\n      \"key\": \"6\"\n    }\n  ],\n  \"editor:insert-codeblock\": [\n    {\n      \"modifiers\": [\n        \"Mod\",\n        \"Shift\"\n      ],\n      \"key\": \"K\"\n    }\n  ]\n}"
  },
  {
    "path": ".obsidian/plugins/awesome-image/data.json",
    "content": "{\n  \"viewImageEditor\": true,\n  \"viewImageInCPB\": true,\n  \"viewImageWithALink\": true,\n  \"viewImageOther\": true,\n  \"pinMode\": false,\n  \"pinMaximum\": 3,\n  \"pinCoverMode\": true,\n  \"imageMoveSpeed\": 10,\n  \"imgTipToggle\": true,\n  \"imgFullScreenMode\": \"FIT\",\n  \"imgViewBackgroundColor\": \"#00000000\",\n  \"imageBorderToggle\": false,\n  \"imageBorderWidth\": \"medium\",\n  \"imageBorderStyle\": \"solid\",\n  \"imageBorderColor\": \"red\",\n  \"galleryNavbarToggle\": true,\n  \"galleryNavbarDefaultColor\": \"#0000001A\",\n  \"galleryNavbarHoverColor\": \"#0000004D\",\n  \"galleryImgBorderActive\": true,\n  \"galleryImgBorderActiveColor\": \"#FF0000\",\n  \"moveTheImageHotkey\": \"NONE\",\n  \"switchTheImageHotkey\": \"CTRL\",\n  \"doubleClickToolbar\": \"toolbar_full_screen\",\n  \"viewTriggerHotkey\": \"NONE\",\n  \"realTimeUpdate\": false,\n  \"excludedFolders\": [\n    \".git/\",\n    \".obsidian/\",\n    \".trash/\"\n  ],\n  \"includedFileRegex\": \".*\\\\.md\",\n  \"mediaRootDirectory\": \"assets/img\"\n}"
  },
  {
    "path": ".obsidian/plugins/awesome-image/main.js",
    "content": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ROLLUP\nif you want to view the source visit the plugins github repository\n*/\n\n'use strict';\n\nvar obsidian = require('obsidian');\nvar path = require('path');\nvar node_buffer = require('node:buffer');\nvar require$$0$1 = require('stream');\nvar require$$0$3 = require('events');\nvar require$$0$2 = require('buffer');\nvar require$$1 = require('util');\nvar EventEmitter$2 = require('node:events');\nvar process$1 = require('node:process');\nvar stream$3 = require('node:stream');\nvar urlLib = require('node:url');\nvar http$3 = require('node:http');\nvar crypto = require('node:crypto');\nvar require$$1$1 = require('zlib');\nvar node_util = require('node:util');\nvar net = require('node:net');\nvar node_tls = require('node:tls');\nvar https$3 = require('node:https');\nvar node_dns = require('node:dns');\nvar os = require('node:os');\nvar require$$3 = require('http2');\nvar require$$0$4 = require('url');\nvar require$$0$5 = require('tls');\nvar require$$1$3 = require('http');\nvar require$$2 = require('https');\nvar require$$0$6 = require('net');\nvar require$$1$2 = require('assert');\nrequire('node:path');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar path__default = /*#__PURE__*/_interopDefaultLegacy(path);\nvar require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);\nvar require$$0__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$0$3);\nvar require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$2);\nvar require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);\nvar EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter$2);\nvar process__default = /*#__PURE__*/_interopDefaultLegacy(process$1);\nvar stream__default = /*#__PURE__*/_interopDefaultLegacy(stream$3);\nvar urlLib__default = /*#__PURE__*/_interopDefaultLegacy(urlLib);\nvar http__default = /*#__PURE__*/_interopDefaultLegacy(http$3);\nvar crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);\nvar require$$1__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$1$1);\nvar net__default = /*#__PURE__*/_interopDefaultLegacy(net);\nvar https__default = /*#__PURE__*/_interopDefaultLegacy(https$3);\nvar os__default = /*#__PURE__*/_interopDefaultLegacy(os);\nvar require$$3__default = /*#__PURE__*/_interopDefaultLegacy(require$$3);\nvar require$$0__default$3 = /*#__PURE__*/_interopDefaultLegacy(require$$0$4);\nvar require$$0__default$4 = /*#__PURE__*/_interopDefaultLegacy(require$$0$5);\nvar require$$1__default$3 = /*#__PURE__*/_interopDefaultLegacy(require$$1$3);\nvar require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2);\nvar require$$0__default$5 = /*#__PURE__*/_interopDefaultLegacy(require$$0$6);\nvar require$$1__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$1$2);\n\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n}\n\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n    var e = new Error(message);\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\n// العربية\nvar ar = {};\n\n// čeština\nvar cz = {};\n\n// Dansk\nvar da = {};\n\n// Deutsch\nvar de = {};\n\n// English\nvar en = {\n    // settings\n    IMAGE_TOOLKIT_SETTINGS_TITLE: \"Image Toolkit Settings\",\n    // >>>View Trigger Settings:\n    VIEW_TRIGGER_SETTINGS: 'View Trigger Settings:',\n    VIEW_IMAGE_GLOBAL_NAME: 'Click and view an image globally',\n    VIEW_IMAGE_GLOBAL_DESC: 'You can zoom, rotate, drag, and invert it on the popup layer when clicking an image.',\n    VIEW_IMAGE_EDITOR_NAME: 'Click and view an image in the Editor Area',\n    VIEW_IMAGE_EDITOR_DESC: 'Turn on this option if you want to click and view an image in the Editor Area.',\n    // CPB = COMMUNITY_PLUGINS_BROWSER\n    VIEW_IMAGE_IN_CPB_NAME: 'Click and view an image in the Community Plugins browser',\n    VIEW_IMAGE_IN_CPB_DESC: 'Turn on this option if you want to click and view an image in the Community Plugins browser.',\n    VIEW_IMAGE_WITH_A_LINK_NAME: 'Click and view an image with a link',\n    VIEW_IMAGE_WITH_A_LINK_DESC: 'Turn on this option if you want to click and view an image with a link. (NOTE: The browser will be opened for you to visit the link and the image will be popped up for being viewed at the same time when you click the image.)',\n    VIEW_IMAGE_OTHER_NAME: 'Click and view in the other areas except the above',\n    VIEW_IMAGE_OTHER_DESC: 'Except for the above mentioned, it also supports other areas, e.g. flashcards.',\n    // >>> PIN_MODE_SETTINGS\n    PIN_MODE_SETTINGS: \"Pin Mode Settings:\",\n    PIN_MODE_NAME: \"📌 Pin an image\",\n    PIN_MODE_DESC: \"You can pin an image onto the top of the screen. And have more options by right click. (press Esc to close the image where your mouse cursor is hovering)\",\n    PIN_MAXIMUM_NAME: \"The maximum image you can pin\",\n    PIN_COVER_NAME: \"Cover mode\",\n    PIN_COVER_DESC: \"After those pinned images reach maximum, you can cover the earliest pinned image when you click an image once again.\",\n    // >>>View Detail Settings:\n    VIEW_DETAILS_SETTINGS: 'View Detail Settings:',\n    IMAGE_MOVE_SPEED_NAME: 'Set the moving speed of the image',\n    IMAGE_MOVE_SPEED_DESC: 'When you move an image on the popup layer by keyboard (up, down, left, right), the moving speed of the image can be set here.',\n    IMAGE_TIP_TOGGLE_NAME: \"Display the image's zoom number\",\n    IMAGE_TIP_TOGGLE_DESC: \"Turn on this option if you want to display the zoom number when you zoom the image.\",\n    IMG_FULL_SCREEN_MODE_NAME: 'Full-screen preview mode',\n    // preview mode options:\n    FIT: 'Fit',\n    FILL: 'Fill',\n    STRETCH: 'Stretch',\n    IMG_VIEW_BACKGROUND_COLOR_NAME: \"Set the background color of the previewed image (Only support the image with transparent background)\",\n    // >>>Image Border Settings:\n    IMAGE_BORDER_SETTINGS: 'Image Border Settings:',\n    IMAGE_BORDER_TOGGLE_NAME: \"Display the image's border\",\n    IMAGE_BORDER_TOGGLE_DESC: \"The clicked image's border can be displayed after you exit previewing and close the popup layer.\",\n    IMAGE_BORDER_WIDTH_NAME: \"Set the image's border width\",\n    IMAGE_BORDER_STYLE_NAME: \"Set the image's border style\",\n    IMAGE_BORDER_COLOR_NAME: \"Set the image's border color\",\n    // IMG_BORDER_WIDTH options:\n    THIN: 'thin',\n    MEDIUM: 'medium',\n    THICK: 'thick',\n    // IMG_BORDER_STYLE options:\n    //HIDDEN: 'hidden',\n    DOTTED: 'dotted',\n    DASHED: 'dashed',\n    SOLID: 'solid',\n    DOUBLE: 'double',\n    GROOVE: 'groove',\n    RIDGE: 'ridge',\n    INSET: 'inset',\n    OUTSET: 'outset',\n    // IMAGE_BORDER_COLOR_NAME options:\n    BLACK: 'black',\n    BLUE: 'blue',\n    DARK_GREEN: 'dark green',\n    GREEN: 'green',\n    LIME: 'lime',\n    STEEL_BLUE: 'steel blue',\n    INDIGO: 'indigo',\n    PURPLE: 'purple',\n    GRAY: 'gray',\n    DARK_RED: 'dark red',\n    LIGHT_GREEN: 'light green',\n    BROWN: 'brown',\n    LIGHT_BLUE: 'light blue',\n    SILVER: 'silver',\n    RED: 'red',\n    PINK: 'pink',\n    ORANGE: 'orange',\n    GOLD: 'gold',\n    YELLOW: 'yellow',\n    // >>>Gallery Navbar Settings:\n    GALLERY_NAVBAR_SETTINGS: 'Gallery Navbar Settings (Experimental):',\n    GALLERY_NAVBAR_TOGGLE_NAME: \"Display gallery navbar\",\n    GALLERY_NAVBAR_TOGGLE_DESC: \"All of the images in the current pane view can be displayed at the bottom of the popup layer.\",\n    GALLERY_NAVBAR_DEFAULT_COLOR_NAME: \"Set the background color of the gallery navbar (default state)\",\n    GALLERY_NAVBAR_HOVER_COLOR_NAME: \"Set the background color of the gallery navbar (hovering state)\",\n    GALLERY_IMG_BORDER_TOGGLE_NAME: \"Display the selected image on the gallery navbar\",\n    GALLERY_IMG_BORDER_TOGGLE_DESC: \"When you select an image, the image's border will be displayed, so you can know which image is currently active.\",\n    GALLERY_IMG_BORDER_ACTIVE_COLOR_NAME: 'Set the border color of the selected image',\n    // >>>HOTKEYS_SETTINGS:\n    HOTKEY_SETTINGS: \"Hotkey Settings:\",\n    HOTKEY_SETTINGS_DESC: \"📢 You cannot set the same hotkey for 'Move the image' and 'Switch the image' at the same time. (NOT SUPPORT in Pin Mode)\",\n    MOVE_THE_IMAGE_NAME: \"Set the hotkey for moving the image\",\n    MOVE_THE_IMAGE_DESC: \"You can move the image on the popup layer by hotkey.\",\n    SWITCH_THE_IMAGE_NAME: \"Set the hotkey for switching the image\",\n    SWITCH_THE_IMAGE_DESC: \"You can switch to the previous/next image on the gallery navbar by hotkey. (NOTE: You need to turn on 'Display gallery navbar' first, if you wanna use this hotkey.)\",\n    DOUBLE_CLICK_TOOLBAR_NAME: \"Double click\",\n    VIEW_TRIGGER_HOTKEY_NAME: \"Set the hotkey for triggering viewing an image\",\n    VIEW_TRIGGER_HOTKEY_DESC: \"When you set 'None', you can directly click and preview an image without holding any modifier keys; otherwise, you must hold the configured modifier keys to click and preview an image.\",\n    // MODIFIER_HOTKEYS\n    NONE: \"None\",\n    CTRL: \"Ctrl\",\n    ALT: \"Alt\",\n    SHIFT: \"Shift\",\n    CTRL_ALT: \"Ctrl+Alt\",\n    CTRL_SHIFT: \"Ctrl+Shift\",\n    SHIFT_ALT: \"Shift+Alt\",\n    CTRL_SHIFT_ALT: \"Ctrl+Shift+Alt\",\n    // toolbar icon title\n    ZOOM_TO_100: \"zoom to 100%\",\n    ZOOM_IN: \"zoom in\",\n    ZOOM_OUT: \"zoom out\",\n    FULL_SCREEN: 'full screen',\n    REFRESH: \"refresh\",\n    ROTATE_LEFT: \"rotate left\",\n    ROTATE_RIGHT: \"rotate right\",\n    SCALE_X: 'flip along x-axis',\n    SCALE_Y: 'flip along y-axis',\n    INVERT_COLOR: 'invert color',\n    COPY: 'copy',\n    CLOSE: 'close',\n    // tip:\n    COPY_IMAGE_SUCCESS: 'Copy the image successfully!',\n    COPY_IMAGE_ERROR: 'Fail to copy the image!'\n};\n\n// British English\nvar enGB = {};\n\n// Español\nvar es = {};\n\n// français\nvar fr = {};\n\n// हिन्दी\nvar hi = {};\n\n// Bahasa Indonesia\nvar id = {};\n\n// Italiano\nvar it = {};\n\n// 日本語\nvar ja = {};\n\n// 한국어\nvar ko = {};\n\n// Nederlands\nvar nl = {};\n\n// Norsk\nvar no = {};\n\n// język polski\t\nvar pl = {};\n\n// Português\nvar pt = {};\n\n// Português do Brasil\n// Brazilian Portuguese\nvar ptBR = {};\n\n// Română\nvar ro = {};\n\n// русский\nvar ru = {};\n\n// Türkçe\nvar tr = {};\n\n// 简体中文\nvar zhCN = {\n    // settings\n    IMAGE_TOOLKIT_SETTINGS_TITLE: \"Image Toolkit 插件设置\",\n    // >>> 预览触发配置：\n    VIEW_TRIGGER_SETTINGS: '预览触发配置：',\n    VIEW_IMAGE_GLOBAL_NAME: '支持全局预览图片',\n    VIEW_IMAGE_GLOBAL_DESC: '开启后，在任何地方点击图片都可以弹出预览界面，可对图片进行缩放、旋转、拖动、和反色等。',\n    VIEW_IMAGE_EDITOR_NAME: '支持在编辑区域预览图片',\n    VIEW_IMAGE_EDITOR_DESC: '开启后，支持在编辑区域，点击图片预览。',\n    // CPB = COMMUNITY_PLUGINS_BROWSER\n    VIEW_IMAGE_IN_CPB_NAME: '支持在社区插件页面预览图片',\n    VIEW_IMAGE_IN_CPB_DESC: '开启后，支持在社区插件页面，点击图片预览。',\n    VIEW_IMAGE_WITH_A_LINK_NAME: '支持预览带链接的图片',\n    VIEW_IMAGE_WITH_A_LINK_DESC: '开启后，支持点击带链接的图片（注意：点击该图片，会同时打开浏览器访问指定地址和弹出预览图片）',\n    VIEW_IMAGE_OTHER_NAME: '支持除上述其他地方来预览图片',\n    VIEW_IMAGE_OTHER_DESC: '除上述支持范围外，还支持一些其他区域，如flashcards。',\n    // >>> PIN_MODE_SETTINGS\n    PIN_MODE_SETTINGS: \"贴图模式设置：\",\n    PIN_MODE_NAME: \"📌 将所点击的图片贴到屏幕上\",\n    PIN_MODE_DESC: \"你可以将当前所点击的图片贴到屏幕上，并且可以通过右击图片选择更多操作（按 Esc 关闭已贴图片的展示）\",\n    PIN_MAXIMUM_NAME: \"最大贴图数量\",\n    PIN_COVER_NAME: \"覆盖模式\",\n    PIN_COVER_DESC: \"当贴图数量达到最大值后，此时再次点击图片，该图片会覆盖最早弹出的那个贴图。\",\n    // >>>查看细节设置：\n    VIEW_DETAILS_SETTINGS: '查看细节设置：',\n    IMAGE_MOVE_SPEED_NAME: '图片移动速度设置',\n    IMAGE_MOVE_SPEED_DESC: '当使用键盘（上、下、左、右）移动图片时，可对图片移动速度进行设置。',\n    IMAGE_TIP_TOGGLE_NAME: \"展示缩放比例提示\",\n    IMAGE_TIP_TOGGLE_DESC: \"开启后，当你缩放图片时会展示当前缩放的比例。\",\n    IMG_FULL_SCREEN_MODE_NAME: '全屏预览模式',\n    // 全屏预览模式 下拉：\n    FIT: '自适应',\n    FILL: '填充',\n    STRETCH: '拉伸',\n    IMG_VIEW_BACKGROUND_COLOR_NAME: \"设置预览图片的背景色（仅对透明背景的图片生效）\",\n    // >>>图片边框设置：\n    IMAGE_BORDER_SETTINGS: '图片边框设置：',\n    IMAGE_BORDER_TOGGLE_NAME: \"展示被点击图片的边框\",\n    IMAGE_BORDER_TOGGLE_DESC: \"当离开图片预览和关闭弹出层后，突出展示被点击图片的边框。\",\n    IMAGE_BORDER_WIDTH_NAME: \"设置图片边框宽度\",\n    IMAGE_BORDER_STYLE_NAME: \"设置图片边框样式\",\n    IMAGE_BORDER_COLOR_NAME: \"设置图片边框颜色\",\n    // IMG_BORDER_WIDTH 下拉：\n    THIN: '较细',\n    MEDIUM: '正常',\n    THICK: '较粗',\n    // IMG_BORDER_STYLE  下拉：\n    //HIDDEN: '隐藏',\n    DOTTED: '点状',\n    DASHED: '虚线',\n    SOLID: '实线',\n    DOUBLE: '双线',\n    GROOVE: '凹槽',\n    RIDGE: ' 垄状',\n    INSET: '凹边',\n    OUTSET: '凸边',\n    // IMAGE_BORDER_COLOR_NAME  下拉：\n    BLACK: '黑色',\n    BLUE: '蓝色',\n    DARK_GREEN: '深绿色',\n    GREEN: '绿色',\n    LIME: '淡黄绿色',\n    STEEL_BLUE: '钢青色',\n    INDIGO: '靛蓝色',\n    PURPLE: '紫色',\n    GRAY: '灰色',\n    DARK_RED: '深红色',\n    LIGHT_GREEN: '浅绿色',\n    BROWN: '棕色',\n    LIGHT_BLUE: '浅蓝色',\n    SILVER: '银色',\n    RED: '红色',\n    PINK: '粉红色',\n    ORANGE: '橘黄色',\n    GOLD: '金色',\n    YELLOW: '黄色',\n    // >>>Gallery Navbar Settings:\n    GALLERY_NAVBAR_SETTINGS: '图片导航设置 (体验版):',\n    GALLERY_NAVBAR_TOGGLE_NAME: \"展示图片导航\",\n    GALLERY_NAVBAR_TOGGLE_DESC: \"当前文档的所有图片会展示在弹出层的底部，可随意切换展示不同图片。\",\n    GALLERY_NAVBAR_DEFAULT_COLOR_NAME: \"设置图片导航底栏背景色（默认展示）\",\n    GALLERY_NAVBAR_HOVER_COLOR_NAME: \"设置图片导航底栏背景色（鼠标悬浮时）\",\n    GALLERY_IMG_BORDER_TOGGLE_NAME: \"展示图片导航上被选中的图片\",\n    GALLERY_IMG_BORDER_TOGGLE_DESC: \"当你选中正查看某一图片，对应图片导航底栏上将突出显示该缩略图片的边框。\",\n    GALLERY_IMG_BORDER_ACTIVE_COLOR_NAME: '设置被选中图片的边框色',\n    // >>>HOTKEYS_SETTINGS:\n    HOTKEY_SETTINGS: \"快捷键设置:\",\n    HOTKEY_SETTINGS_DESC: \"📢  你无法为'移动图片'和'切换图片'设置相同的快捷键。（不支持贴图模式）\",\n    MOVE_THE_IMAGE_NAME: \"为移动图片设置快捷键\",\n    MOVE_THE_IMAGE_DESC: \"你可以利用快捷键来移动弹出层上的图片。\",\n    SWITCH_THE_IMAGE_NAME: \"为切换图片设置快捷键\",\n    SWITCH_THE_IMAGE_DESC: \"你可以利用快捷键来切换在图片导航栏上的图片至上一张/下一张。(注意: 仅当开启“展示图片导航”后，才能使用该快捷键来控制切换图片。)\",\n    DOUBLE_CLICK_TOOLBAR_NAME: \"双击\",\n    VIEW_TRIGGER_HOTKEY_NAME: \"为触发弹出查看图片设置快捷键\",\n    VIEW_TRIGGER_HOTKEY_DESC: \"当你设置为“无”，你可以直接点击预览图片；否则，须按住已配置的修改键（Ctrl、Alt、Shift）才能点击查看某个图片。\",\n    // MODIFIER_HOTKEYS\n    NONE: \"无\",\n    // toolbar icon title\n    ZOOM_TO_100: \"缩放至100%\",\n    ZOOM_IN: \"放大\",\n    ZOOM_OUT: \"缩小\",\n    FULL_SCREEN: \"全屏\",\n    REFRESH: \"刷新\",\n    ROTATE_LEFT: \"左旋\",\n    ROTATE_RIGHT: \"右旋\",\n    SCALE_X: 'x轴翻转',\n    SCALE_Y: 'y轴翻转',\n    INVERT_COLOR: '反色',\n    COPY: '复制',\n    CLOSE: '关闭',\n    // tip:\n    COPY_IMAGE_SUCCESS: '拷贝图片成功！',\n    COPY_IMAGE_ERROR: '拷贝图片失败！'\n};\n\n// 繁體中文\nvar zhTW = {\n    // settings\n    IMAGE_TOOLKIT_SETTINGS_TITLE: \"image toolkit 設定\",\n    // toolbar icon title\n    ZOOM_IN: \"放大\",\n    ZOOM_OUT: \"縮小\",\n    FULL_SCREEN: '全螢幕',\n    REFRESH: \"重整\",\n    ROTATE_LEFT: \"向左旋轉\",\n    ROTATE_RIGHT: \"向右旋轉\",\n    SCALE_X: 'x 軸縮放',\n    SCALE_Y: 'y 軸縮放',\n    INVERT_COLOR: '色彩反轉',\n    COPY: '複製',\n    COPY_IMAGE_SUCCESS: '成功複製圖片！'\n};\n\nconst localeMap = {\n    ar,\n    cs: cz,\n    da,\n    de,\n    en,\n    \"en-gb\": enGB,\n    es,\n    fr,\n    hi,\n    id,\n    it,\n    ja,\n    ko,\n    nl,\n    nn: no,\n    pl,\n    pt,\n    \"pt-br\": ptBR,\n    ro,\n    ru,\n    tr,\n    \"zh-cn\": zhCN,\n    \"zh-tw\": zhTW,\n};\nconst locale = localeMap[obsidian.moment.locale()];\nfunction t(str) {\n    if (!locale) {\n        console.error(\"Error: Image toolkit locale not found\", obsidian.moment.locale());\n    }\n    return (locale && locale[str]) || en[str];\n}\n\nconst ZOOM_FACTOR = 0.8;\nconst IMG_VIEW_MIN = 30;\nconst ICONS = [{\n        id: 'zoom-to-100',\n        svg: `<g> <path id=\"svg_1\" d=\"m42,6c-18.8,0 -34,15.2 -34,34s15.2,34 34,34c7.4,0 14.3,-2.4 19.9,-6.4l26.3,26.3l5.6,-5.6l-26,-26.1c5.1,-6 8.2,-13.7 8.2,-22.1c0,-18.9 -15.2,-34.1 -34,-34.1zm0,4c16.6,0 30,13.4 30,30s-13.4,30 -30,30s-30,-13.4 -30,-30s13.4,-30 30,-30z\" stroke-width=\"2\" stroke=\"currentColor\" fill=\"currentColor\"/> <text font-weight=\"bold\" xml:space=\"preserve\" text-anchor=\"start\" font-family=\"Noto Sans JP\" font-size=\"24\" id=\"svg_2\" y=\"48.5\" x=\"24\" stroke-width=\"0\" stroke=\"#000\" fill=\"#000000\">1:1</text> </g>`\n    }];\nconst SEPARATOR_SYMBOL = \"---\";\nconst TOOLBAR_CONF = [{\n        title: \"ZOOM_TO_100\",\n        class: 'toolbar_zoom_to_100',\n        icon: 'zoom-to-100',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: \"ZOOM_IN\",\n        class: 'toolbar_zoom_in',\n        icon: 'zoom-in',\n        enableToolbarIcon: true,\n        enableMenu: false,\n        enableHotKey: true\n    }, {\n        title: \"ZOOM_OUT\",\n        class: 'toolbar_zoom_out',\n        icon: 'zoom-out',\n        enableToolbarIcon: true,\n        enableMenu: false,\n        enableHotKey: true\n    }, {\n        title: \"FULL_SCREEN\",\n        class: 'toolbar_full_screen',\n        icon: 'expand',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: \"REFRESH\",\n        class: 'toolbar_refresh',\n        icon: 'refresh-ccw',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: \"ROTATE_LEFT\",\n        class: 'toolbar_rotate_left',\n        icon: 'rotate-ccw',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: \"ROTATE_RIGHT\",\n        class: 'toolbar_rotate_right',\n        icon: 'rotate-cw',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: \"SCALE_X\",\n        class: 'toolbar_scale_x',\n        icon: 'move-horizontal',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: \"SCALE_Y\",\n        class: 'toolbar_scale_y',\n        icon: 'move-vertical',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: \"INVERT_COLOR\",\n        class: 'toolbar_invert_color',\n        icon: 'droplet',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: \"COPY\",\n        class: 'toolbar_copy',\n        icon: 'copy',\n        enableToolbarIcon: true,\n        enableMenu: true,\n        enableHotKey: true\n    }, {\n        title: SEPARATOR_SYMBOL,\n        enableToolbarIcon: false,\n        enableMenu: true,\n        enableHotKey: false\n    }, {\n        title: \"CLOSE\",\n        class: 'toolbar_close',\n        icon: 'trash',\n        enableToolbarIcon: false,\n        enableMenu: true,\n        enableHotKey: true\n    }];\nconst IMG_FULL_SCREEN_MODE = {\n    FIT: 'FIT',\n    FILL: 'FILL',\n    STRETCH: 'STRETCH'\n};\nconst VIEW_IMG_SELECTOR = {\n    EDITOR_AREAS: `.workspace-leaf-content[data-type='markdown'] img,.workspace-leaf-content[data-type='image'] img`,\n    EDITOR_AREAS_NO_LINK: `.workspace-leaf-content[data-type='markdown'] img:not(a img),.workspace-leaf-content[data-type='image'] img:not(a img)`,\n    CPB: `.community-plugin-readme img`,\n    CPB_NO_LINK: `.community-plugin-readme img:not(a img)`,\n    OTHER: `#sr-flashcard-view img`,\n    OTHER_NO_LINK: `#sr-flashcard-view img:not(a img)`,\n};\nconst IMG_BORDER_WIDTH = {\n    THIN: 'thin',\n    MEDIUM: 'medium',\n    THICK: 'thick'\n};\nconst IMG_BORDER_STYLE = {\n    // HIDDEN: 'hidden',\n    DOTTED: 'dotted',\n    DASHED: 'dashed',\n    SOLID: 'solid',\n    DOUBLE: 'double',\n    GROOVE: 'groove',\n    RIDGE: 'ridge',\n    INSET: 'inset',\n    OUTSET: 'outset'\n};\n// https://www.runoob.com/cssref/css-colorsfull.html\nconst IMG_BORDER_COLOR = {\n    BLACK: 'black',\n    BLUE: 'blue',\n    DARK_GREEN: 'darkgreen',\n    GREEN: 'green',\n    LIME: 'lime',\n    STEEL_BLUE: 'steelblue',\n    INDIGO: 'indigo',\n    PURPLE: 'purple',\n    GRAY: 'gray',\n    DARK_RED: 'darkred',\n    LIGHT_GREEN: 'lightgreen',\n    BROWN: 'brown',\n    LIGHT_BLUE: 'lightblue',\n    SILVER: 'silver',\n    RED: 'red',\n    PINK: 'pink',\n    ORANGE: 'orange',\n    GOLD: 'gold',\n    YELLOW: 'yellow'\n};\nconst GALLERY_NAVBAR_DEFAULT_COLOR = '#0000001A'; // rgba(0, 0, 0, 0.1)\nconst GALLERY_NAVBAR_HOVER_COLOR = '#0000004D'; // rgba(0, 0, 0, 0.3)\nconst GALLERY_IMG_BORDER_ACTIVE_COLOR = '#FF0000'; // red\nconst MODIFIER_HOTKEYS = {\n    NONE: \"NONE\",\n    CTRL: \"CTRL\",\n    ALT: \"ALT\",\n    SHIFT: \"SHIFT\",\n    CTRL_ALT: \"CTRL_ALT\",\n    CTRL_SHIFT: \"CTRL_SHIFT\",\n    SHIFT_ALT: \"SHIFT_ALT\",\n    CTRL_SHIFT_ALT: \"CTRL_SHIFT_ALT\"\n};\nconst MOVE_THE_IMAGE = {\n    CODE: \"MOVE_THE_IMAGE\",\n    DEFAULT_HOTKEY: MODIFIER_HOTKEYS.NONE,\n    SVG: `<svg width=\"56\" height=\"37\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon\"><path fill=\"none\" d=\"M-1 -1H57V38H-1z\"/><g><path stroke=\"null\" fill=\"#707070\" d=\"M19.001 16.067V1.928C19.001.864 19.865 0 20.93 0h14.142c1.064 0 1.928.864 1.928 1.928v14.14a1.929 1.929 0 01-1.928 1.927H20.929a1.929 1.929 0 01-1.928-1.928zm4.805-5.909l2.908-3.032v7.334c0 .535.43.964.965.964h.642c.535 0 .965-.43.965-.964V7.126l2.908 3.032a.965.965 0 001.378.017l.438-.442a.96.96 0 000-1.362l-5.327-5.33a.96.96 0 00-1.362 0l-5.335 5.33a.96.96 0 000 1.362l.438.441a.97.97 0 001.382-.016zM36.999 20.933v14.139A1.929 1.929 0 0135.07 37H20.929a1.929 1.929 0 01-1.928-1.928v-14.14c0-1.064.864-1.927 1.928-1.927h14.142c1.064 0 1.928.863 1.928 1.928zm-4.805 5.909l-2.908 3.032V22.54a.962.962 0 00-.965-.964h-.642a.962.962 0 00-.965.964v7.334l-2.908-3.032a.965.965 0 00-1.378-.016l-.438.441a.96.96 0 000 1.362l5.327 5.33a.96.96 0 001.362 0l5.335-5.33a.96.96 0 000-1.362l-.438-.441a.97.97 0 00-1.382.016zM16.068 37.001H1.93a1.929 1.929 0 01-1.928-1.928V20.932c0-1.065.864-1.928 1.928-1.928h14.14c1.064 0 1.927.863 1.927 1.928v14.14a1.929 1.929 0 01-1.928 1.93zm-5.908-4.804l-3.033-2.909h7.335c.534 0 .964-.43.964-.964v-.643a.962.962 0 00-.964-.964H7.127l3.033-2.909a.965.965 0 00.016-1.378l-.442-.438a.96.96 0 00-1.362 0l-5.33 5.327a.96.96 0 000 1.362l5.33 5.335a.96.96 0 001.362 0l.442-.438a.97.97 0 00-.016-1.381zM39.932 19.004H54.07c1.064 0 1.928.863 1.928 1.928v14.14a1.929 1.929 0 01-1.928 1.93H39.93a1.929 1.929 0 01-1.927-1.93v-14.14c0-1.065.863-1.928 1.928-1.928zm5.908 4.804l3.033 2.909h-7.335a.962.962 0 00-.964.964v.643c0 .534.43.964.964.964h7.335l-3.033 2.909a.965.965 0 00-.016 1.377l.442.438a.96.96 0 001.362 0l5.33-5.327a.96.96 0 000-1.362l-5.33-5.335a.96.96 0 00-1.362 0l-.442.438a.97.97 0 00.016 1.382z\"/></g></svg>`\n};\nconst SWITCH_THE_IMAGE = {\n    CODE: \"SWITCH_THE_IMAGE\",\n    DEFAULT_HOTKEY: MODIFIER_HOTKEYS.CTRL,\n    SVG: `<svg width=\"37\" height=\"18\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon\"><path fill=\"none\" d=\"M-1 -1H38V19H-1z\"/><g><path stroke=\"null\" fill=\"#707070\" d=\"M16.068 17.999H1.93A1.929 1.929 0 01.001 16.07V1.929C.001.865.865.001 1.93.001h14.14c1.064 0 1.927.864 1.927 1.928v14.142a1.929 1.929 0 01-1.928 1.928zm-5.908-4.805l-3.033-2.908h7.335c.534 0 .964-.43.964-.965V8.68a.962.962 0 00-.964-.965H7.127l3.033-2.908a.965.965 0 00.016-1.378l-.442-.438a.96.96 0 00-1.362 0l-5.33 5.327a.96.96 0 000 1.362l5.33 5.335a.96.96 0 001.362 0l.442-.438a.97.97 0 00-.016-1.382zM20.932.001H35.07c1.064 0 1.928.864 1.928 1.928v14.142a1.929 1.929 0 01-1.928 1.928H20.93a1.929 1.929 0 01-1.927-1.928V1.929c0-1.064.863-1.928 1.928-1.928zm5.908 4.805l3.033 2.908h-7.335a.962.962 0 00-.964.965v.642c0 .535.43.965.964.965h7.335l-3.033 2.908a.965.965 0 00-.016 1.378l.442.438a.96.96 0 001.362 0l5.33-5.327a.96.96 0 000-1.362l-5.33-5.335a.96.96 0 00-1.362 0l-.442.438a.97.97 0 00.016 1.382z\"/></g></svg>`\n};\nconst IMG_DEFAULT_BACKGROUND_COLOR = '#00000000';\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction getAugmentedNamespace(n) {\n  var f = n.default;\n\tif (typeof f == \"function\") {\n\t\tvar a = function () {\n\t\t\treturn f.apply(this, arguments);\n\t\t};\n\t\ta.prototype = f.prototype;\n  } else a = {};\n  Object.defineProperty(a, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n\nvar pickr_min = {exports: {}};\n\n/*! Pickr 1.9.0 MIT | https://github.com/Simonwep/pickr */\n\n(function (module, exports) {\n\t!function(t,e){module.exports=e();}(self,(()=>(()=>{var t={d:(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]});},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0});}},e={};t.d(e,{default:()=>E});var o={};function n(t,e,o,n,i={}){e instanceof HTMLCollection||e instanceof NodeList?e=Array.from(e):Array.isArray(e)||(e=[e]),Array.isArray(o)||(o=[o]);for(const s of e)for(const e of o)s[t](e,n,{capture:!1,...i});return Array.prototype.slice.call(arguments,1)}t.r(o),t.d(o,{adjustableInputNumbers:()=>p,createElementFromString:()=>r,createFromTemplate:()=>a,eventPath:()=>l,off:()=>s,on:()=>i,resolveElement:()=>c});const i=n.bind(null,\"addEventListener\"),s=n.bind(null,\"removeEventListener\");function r(t){const e=document.createElement(\"div\");return e.innerHTML=t.trim(),e.firstElementChild}function a(t){const e=(t,e)=>{const o=t.getAttribute(e);return t.removeAttribute(e),o},o=(t,n={})=>{const i=e(t,\":obj\"),s=e(t,\":ref\"),r=i?n[i]={}:n;s&&(n[s]=t);for(const n of Array.from(t.children)){const t=e(n,\":arr\"),i=o(n,t?{}:r);t&&(r[t]||(r[t]=[])).push(Object.keys(i).length?i:n);}return n};return o(r(t))}function l(t){let e=t.path||t.composedPath&&t.composedPath();if(e)return e;let o=t.target.parentElement;for(e=[t.target,o];o=o.parentElement;)e.push(o);return e.push(document,window),e}function c(t){return t instanceof Element?t:\"string\"==typeof t?t.split(/>>/g).reduce(((t,e,o,n)=>(t=t.querySelector(e),o<n.length-1?t.shadowRoot:t)),document):null}function p(t,e=(t=>t)){function o(o){const n=[.001,.01,.1][Number(o.shiftKey||2*o.ctrlKey)]*(o.deltaY<0?1:-1);let i=0,s=t.selectionStart;t.value=t.value.replace(/[\\d.]+/g,((t,o)=>o<=s&&o+t.length>=s?(s=o,e(Number(t),n,i)):(i++,t))),t.focus(),t.setSelectionRange(s,s),o.preventDefault(),t.dispatchEvent(new Event(\"input\"));}i(t,\"focus\",(()=>i(window,\"wheel\",o,{passive:!1}))),i(t,\"blur\",(()=>s(window,\"wheel\",o)));}const{min:u,max:h,floor:d,round:m}=Math;function f(t,e,o){e/=100,o/=100;const n=d(t=t/360*6),i=t-n,s=o*(1-e),r=o*(1-i*e),a=o*(1-(1-i)*e),l=n%6;return [255*[o,r,s,s,a,o][l],255*[a,o,o,r,s,s][l],255*[s,s,a,o,o,r][l]]}function v(t,e,o){const n=(2-(e/=100))*(o/=100)/2;return 0!==n&&(e=1===n?0:n<.5?e*o/(2*n):e*o/(2-2*n)),[t,100*e,100*n]}function b(t,e,o){const n=u(t/=255,e/=255,o/=255),i=h(t,e,o),s=i-n;let r,a;if(0===s)r=a=0;else {a=s/i;const n=((i-t)/6+s/2)/s,l=((i-e)/6+s/2)/s,c=((i-o)/6+s/2)/s;t===i?r=c-l:e===i?r=1/3+n-c:o===i&&(r=2/3+l-n),r<0?r+=1:r>1&&(r-=1);}return [360*r,100*a,100*i]}function y(t,e,o,n){e/=100,o/=100;return [...b(255*(1-u(1,(t/=100)*(1-(n/=100))+n)),255*(1-u(1,e*(1-n)+n)),255*(1-u(1,o*(1-n)+n)))]}function g(t,e,o){e/=100;const n=2*(e*=(o/=100)<.5?o:1-o)/(o+e)*100,i=100*(o+e);return [t,isNaN(n)?0:n,i]}function _(t){return b(...t.match(/.{2}/g).map((t=>parseInt(t,16))))}function w(t){t=t.match(/^[a-zA-Z]+$/)?function(t){if(\"black\"===t.toLowerCase())return \"#000\";const e=document.createElement(\"canvas\").getContext(\"2d\");return e.fillStyle=t,\"#000\"===e.fillStyle?null:e.fillStyle}(t):t;const e={cmyk:/^cmyk\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)/i,rgba:/^rgba?\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D*?(([\\d.]+)(%?)|$)/i,hsla:/^hsla?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i,hsva:/^hsva?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i,hexa:/^#?(([\\dA-Fa-f]{3,4})|([\\dA-Fa-f]{6})|([\\dA-Fa-f]{8}))$/i},o=t=>t.map((t=>/^(|\\d+)\\.\\d+|\\d+$/.test(t)?Number(t):void 0));let n;t:for(const i in e)if(n=e[i].exec(t))switch(i){case\"cmyk\":{const[,t,e,s,r]=o(n);if(t>100||e>100||s>100||r>100)break t;return {values:y(t,e,s,r),type:i}}case\"rgba\":{let[,t,,e,,s,,,r]=o(n);if(t=\"%\"===n[2]?t/100*255:t,e=\"%\"===n[4]?e/100*255:e,s=\"%\"===n[6]?s/100*255:s,r=\"%\"===n[9]?r/100:r,t>255||e>255||s>255||r<0||r>1)break t;return {values:[...b(t,e,s),r],a:r,type:i}}case\"hexa\":{let[,t]=n;4!==t.length&&3!==t.length||(t=t.split(\"\").map((t=>t+t)).join(\"\"));const e=t.substring(0,6);let o=t.substring(6);return o=o?parseInt(o,16)/255:void 0,{values:[..._(e),o],a:o,type:i}}case\"hsla\":{let[,t,e,s,,r]=o(n);if(r=\"%\"===n[6]?r/100:r,t>360||e>100||s>100||r<0||r>1)break t;return {values:[...g(t,e,s),r],a:r,type:i}}case\"hsva\":{let[,t,e,s,,r]=o(n);if(r=\"%\"===n[6]?r/100:r,t>360||e>100||s>100||r<0||r>1)break t;return {values:[t,e,s,r],a:r,type:i}}}return {values:null,type:null}}function A(t=0,e=0,o=0,n=1){const i=(t,e)=>(o=-1)=>e(~o?t.map((t=>Number(t.toFixed(o)))):t),s={h:t,s:e,v:o,a:n,toHSVA(){const t=[s.h,s.s,s.v,s.a];return t.toString=i(t,(t=>`hsva(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toHSLA(){const t=[...v(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`hsla(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toRGBA(){const t=[...f(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`rgba(${t[0]}, ${t[1]}, ${t[2]}, ${s.a})`)),t},toCMYK(){const t=function(t,e,o){const n=f(t,e,o),i=n[0]/255,s=n[1]/255,r=n[2]/255,a=u(1-i,1-s,1-r);return [100*(1===a?0:(1-i-a)/(1-a)),100*(1===a?0:(1-s-a)/(1-a)),100*(1===a?0:(1-r-a)/(1-a)),100*a]}(s.h,s.s,s.v);return t.toString=i(t,(t=>`cmyk(${t[0]}%, ${t[1]}%, ${t[2]}%, ${t[3]}%)`)),t},toHEXA(){const t=function(t,e,o){return f(t,e,o).map((t=>m(t).toString(16).padStart(2,\"0\")))}(s.h,s.s,s.v),e=s.a>=1?\"\":Number((255*s.a).toFixed(0)).toString(16).toUpperCase().padStart(2,\"0\");return e&&t.push(e),t.toString=()=>`#${t.join(\"\").toUpperCase()}`,t},clone:()=>A(s.h,s.s,s.v,s.a)};return s}const $=t=>Math.max(Math.min(t,1),0);function C(t){const e={options:Object.assign({lock:null,onchange:()=>0,onstop:()=>0},t),_keyboard(t){const{options:o}=e,{type:n,key:i}=t;if(document.activeElement===o.wrapper){const{lock:o}=e.options,s=\"ArrowUp\"===i,r=\"ArrowRight\"===i,a=\"ArrowDown\"===i,l=\"ArrowLeft\"===i;if(\"keydown\"===n&&(s||r||a||l)){let n=0,i=0;\"v\"===o?n=s||r?1:-1:\"h\"===o?n=s||r?-1:1:(i=s?-1:a?1:0,n=l?-1:r?1:0),e.update($(e.cache.x+.01*n),$(e.cache.y+.01*i)),t.preventDefault();}else i.startsWith(\"Arrow\")&&(e.options.onstop(),t.preventDefault());}},_tapstart(t){i(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),i(document,[\"mousemove\",\"touchmove\"],e._tapmove),t.cancelable&&t.preventDefault(),e._tapmove(t);},_tapmove(t){const{options:o,cache:n}=e,{lock:i,element:s,wrapper:r}=o,a=r.getBoundingClientRect();let l=0,c=0;if(t){const e=t&&t.touches&&t.touches[0];l=t?(e||t).clientX:0,c=t?(e||t).clientY:0,l<a.left?l=a.left:l>a.left+a.width&&(l=a.left+a.width),c<a.top?c=a.top:c>a.top+a.height&&(c=a.top+a.height),l-=a.left,c-=a.top;}else n&&(l=n.x*a.width,c=n.y*a.height);\"h\"!==i&&(s.style.left=`calc(${l/a.width*100}% - ${s.offsetWidth/2}px)`),\"v\"!==i&&(s.style.top=`calc(${c/a.height*100}% - ${s.offsetHeight/2}px)`),e.cache={x:l/a.width,y:c/a.height};const p=$(l/a.width),u=$(c/a.height);switch(i){case\"v\":return o.onchange(p);case\"h\":return o.onchange(u);default:return o.onchange(p,u)}},_tapstop(){e.options.onstop(),s(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),s(document,[\"mousemove\",\"touchmove\"],e._tapmove);},trigger(){e._tapmove();},update(t=0,o=0){const{left:n,top:i,width:s,height:r}=e.options.wrapper.getBoundingClientRect();\"h\"===e.options.lock&&(o=t),e._tapmove({clientX:n+s*t,clientY:i+r*o});},destroy(){const{options:t,_tapstart:o,_keyboard:n}=e;s(document,[\"keydown\",\"keyup\"],n),s([t.wrapper,t.element],\"mousedown\",o),s([t.wrapper,t.element],\"touchstart\",o,{passive:!1});}},{options:o,_tapstart:n,_keyboard:r}=e;return i([o.wrapper,o.element],\"mousedown\",n),i([o.wrapper,o.element],\"touchstart\",n,{passive:!1}),i(document,[\"keydown\",\"keyup\"],r),e}function k(t={}){t=Object.assign({onchange:()=>0,className:\"\",elements:[]},t);const e=i(t.elements,\"click\",(e=>{t.elements.forEach((o=>o.classList[e.target===o?\"add\":\"remove\"](t.className))),t.onchange(e),e.stopPropagation();}));return {destroy:()=>s(...e)}}const S={variantFlipOrder:{start:\"sme\",middle:\"mse\",end:\"ems\"},positionFlipOrder:{top:\"tbrl\",right:\"rltb\",bottom:\"btrl\",left:\"lrbt\"},position:\"bottom\",margin:8,padding:0},O=(t,e,o)=>{const n=\"object\"!=typeof t||t instanceof HTMLElement?{reference:t,popper:e,...o}:t;return {update(t=n){const{reference:e,popper:o}=Object.assign(n,t);if(!o||!e)throw new Error(\"Popper- or reference-element missing.\");return ((t,e,o)=>{const{container:n,arrow:i,margin:s,padding:r,position:a,variantFlipOrder:l,positionFlipOrder:c}={container:document.documentElement.getBoundingClientRect(),...S,...o},{left:p,top:u}=e.style;e.style.left=\"0\",e.style.top=\"0\";const h=t.getBoundingClientRect(),d=e.getBoundingClientRect(),m={t:h.top-d.height-s,b:h.bottom+s,r:h.right+s,l:h.left-d.width-s},f={vs:h.left,vm:h.left+h.width/2-d.width/2,ve:h.left+h.width-d.width,hs:h.top,hm:h.bottom-h.height/2-d.height/2,he:h.bottom-d.height},[v,b=\"middle\"]=a.split(\"-\"),y=c[v],g=l[b],{top:_,left:w,bottom:A,right:$}=n;for(const t of y){const o=\"t\"===t||\"b\"===t;let n=m[t];const[s,a]=o?[\"top\",\"left\"]:[\"left\",\"top\"],[l,c]=o?[d.height,d.width]:[d.width,d.height],[p,u]=o?[A,$]:[$,A],[v,b]=o?[_,w]:[w,_];if(!(n<v||n+l+r>p))for(const p of g){let m=f[(o?\"v\":\"h\")+p];if(!(m<b||m+c+r>u)){if(m-=d[a],n-=d[s],e.style[a]=`${m}px`,e.style[s]=`${n}px`,i){const t=o?h.width/2:h.height/2,e=2*t<c?h[a]+t:m+c/2;n<h[s]&&(n+=l),i.style[a]=`${e}px`,i.style[s]=`${n}px`;}return t+p}}}return e.style.left=p,e.style.top=u,null})(e,o,n)}}};class E{static utils=o;static version=\"1.9.0\";static I18N_DEFAULTS={\"ui:dialog\":\"color picker dialog\",\"btn:toggle\":\"toggle color picker dialog\",\"btn:swatch\":\"color swatch\",\"btn:last-color\":\"use previous color\",\"btn:save\":\"Save\",\"btn:cancel\":\"Cancel\",\"btn:clear\":\"Clear\",\"aria:btn:save\":\"save and close\",\"aria:btn:cancel\":\"cancel and close\",\"aria:btn:clear\":\"clear and close\",\"aria:input\":\"color input field\",\"aria:palette\":\"color selection area\",\"aria:hue\":\"hue selection slider\",\"aria:opacity\":\"selection slider\"};static DEFAULT_OPTIONS={appClass:null,theme:\"classic\",useAsButton:!1,padding:8,disabled:!1,comparison:!0,closeOnScroll:!1,outputPrecision:0,lockOpacity:!1,autoReposition:!0,container:\"body\",components:{interaction:{}},i18n:{},swatches:null,inline:!1,sliders:null,default:\"#42445a\",defaultRepresentation:null,position:\"bottom-middle\",adjustableNumbers:!0,showAlways:!1,closeWithKey:\"Escape\"};_initializingActive=!0;_recalc=!0;_nanopop=null;_root=null;_color=A();_lastColor=A();_swatchColors=[];_setupAnimationFrame=null;_eventListener={init:[],save:[],hide:[],show:[],clear:[],change:[],changestop:[],cancel:[],swatchselect:[]};constructor(t){this.options=t=Object.assign({...E.DEFAULT_OPTIONS},t);const{swatches:e,components:o,theme:n,sliders:i,lockOpacity:s,padding:r}=t;[\"nano\",\"monolith\"].includes(n)&&!i&&(t.sliders=\"h\"),o.interaction||(o.interaction={});const{preview:a,opacity:l,hue:c,palette:p}=o;o.opacity=!s&&l,o.palette=p||a||l||c,this._preBuild(),this._buildComponents(),this._bindEvents(),this._finalBuild(),e&&e.length&&e.forEach((t=>this.addSwatch(t)));const{button:u,app:h}=this._root;this._nanopop=O(u,h,{margin:r}),u.setAttribute(\"role\",\"button\"),u.setAttribute(\"aria-label\",this._t(\"btn:toggle\"));const d=this;this._setupAnimationFrame=requestAnimationFrame((function e(){if(!h.offsetWidth)return requestAnimationFrame(e);d.setColor(t.default),d._rePositioningPicker(),t.defaultRepresentation&&(d._representation=t.defaultRepresentation,d.setColorRepresentation(d._representation)),t.showAlways&&d.show(),d._initializingActive=!1,d._emit(\"init\");}));}static create=t=>new E(t);_preBuild(){const{options:t}=this;for(const e of [\"el\",\"container\"])t[e]=c(t[e]);this._root=(t=>{const{components:e,useAsButton:o,inline:n,appClass:i,theme:s,lockOpacity:r}=t.options,l=t=>t?\"\":'style=\"display:none\" hidden',c=e=>t._t(e),p=a(`\\n      <div :ref=\"root\" class=\"pickr\">\\n\\n        ${o?\"\":'<button type=\"button\" :ref=\"button\" class=\"pcr-button\"></button>'}\\n\\n        <div :ref=\"app\" class=\"pcr-app ${i||\"\"}\" data-theme=\"${s}\" ${n?'style=\"position: unset\"':\"\"} aria-label=\"${c(\"ui:dialog\")}\" role=\"window\">\\n          <div class=\"pcr-selection\" ${l(e.palette)}>\\n            <div :obj=\"preview\" class=\"pcr-color-preview\" ${l(e.preview)}>\\n              <button type=\"button\" :ref=\"lastColor\" class=\"pcr-last-color\" aria-label=\"${c(\"btn:last-color\")}\"></button>\\n              <div :ref=\"currentColor\" class=\"pcr-current-color\"></div>\\n            </div>\\n\\n            <div :obj=\"palette\" class=\"pcr-color-palette\">\\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n              <div :ref=\"palette\" class=\"pcr-palette\" tabindex=\"0\" aria-label=\"${c(\"aria:palette\")}\" role=\"listbox\"></div>\\n            </div>\\n\\n            <div :obj=\"hue\" class=\"pcr-color-chooser\" ${l(e.hue)}>\\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n              <div :ref=\"slider\" class=\"pcr-hue pcr-slider\" tabindex=\"0\" aria-label=\"${c(\"aria:hue\")}\" role=\"slider\"></div>\\n            </div>\\n\\n            <div :obj=\"opacity\" class=\"pcr-color-opacity\" ${l(e.opacity)}>\\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n              <div :ref=\"slider\" class=\"pcr-opacity pcr-slider\" tabindex=\"0\" aria-label=\"${c(\"aria:opacity\")}\" role=\"slider\"></div>\\n            </div>\\n          </div>\\n\\n          <div class=\"pcr-swatches ${e.palette?\"\":\"pcr-last\"}\" :ref=\"swatches\"></div>\\n\\n          <div :obj=\"interaction\" class=\"pcr-interaction\" ${l(Object.keys(e.interaction).length)}>\\n            <input :ref=\"result\" class=\"pcr-result\" type=\"text\" spellcheck=\"false\" ${l(e.interaction.input)} aria-label=\"${c(\"aria:input\")}\">\\n\\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HEXA\" value=\"${r?\"HEX\":\"HEXA\"}\" type=\"button\" ${l(e.interaction.hex)}>\\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"RGBA\" value=\"${r?\"RGB\":\"RGBA\"}\" type=\"button\" ${l(e.interaction.rgba)}>\\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSLA\" value=\"${r?\"HSL\":\"HSLA\"}\" type=\"button\" ${l(e.interaction.hsla)}>\\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSVA\" value=\"${r?\"HSV\":\"HSVA\"}\" type=\"button\" ${l(e.interaction.hsva)}>\\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"CMYK\" value=\"CMYK\" type=\"button\" ${l(e.interaction.cmyk)}>\\n\\n            <input :ref=\"save\" class=\"pcr-save\" value=\"${c(\"btn:save\")}\" type=\"button\" ${l(e.interaction.save)} aria-label=\"${c(\"aria:btn:save\")}\">\\n            <input :ref=\"cancel\" class=\"pcr-cancel\" value=\"${c(\"btn:cancel\")}\" type=\"button\" ${l(e.interaction.cancel)} aria-label=\"${c(\"aria:btn:cancel\")}\">\\n            <input :ref=\"clear\" class=\"pcr-clear\" value=\"${c(\"btn:clear\")}\" type=\"button\" ${l(e.interaction.clear)} aria-label=\"${c(\"aria:btn:clear\")}\">\\n          </div>\\n        </div>\\n      </div>\\n    `),u=p.interaction;return u.options.find((t=>!t.hidden&&!t.classList.add(\"active\"))),u.type=()=>u.options.find((t=>t.classList.contains(\"active\"))),p})(this),t.useAsButton&&(this._root.button=t.el),t.container.appendChild(this._root.root);}_finalBuild(){const t=this.options,e=this._root;if(t.container.removeChild(e.root),t.inline){const o=t.el.parentElement;t.el.nextSibling?o.insertBefore(e.app,t.el.nextSibling):o.appendChild(e.app);}else t.container.appendChild(e.app);t.useAsButton?t.inline&&t.el.remove():t.el.parentNode.replaceChild(e.root,t.el),t.disabled&&this.disable(),t.comparison||(e.button.style.transition=\"none\",t.useAsButton||(e.preview.lastColor.style.transition=\"none\")),this.hide();}_buildComponents(){const t=this,e=this.options.components,o=(t.options.sliders||\"v\").repeat(2),[n,i]=o.match(/^[vh]+$/g)?o:[],s=()=>this._color||(this._color=this._lastColor.clone()),r={palette:C({element:t._root.palette.picker,wrapper:t._root.palette.palette,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o,n){if(!e.palette)return;const i=s(),{_root:r,options:a}=t,{lastColor:l,currentColor:c}=r.preview;t._recalc&&(i.s=100*o,i.v=100-100*n,i.v<0&&(i.v=0),t._updateOutput(\"slider\"));const p=i.toRGBA().toString(0);this.element.style.background=p,this.wrapper.style.background=`\\n                        linear-gradient(to top, rgba(0, 0, 0, ${i.a}), transparent),\\n                        linear-gradient(to left, hsla(${i.h}, 100%, 50%, ${i.a}), rgba(255, 255, 255, ${i.a}))\\n                    `,a.comparison?a.useAsButton||t._lastColor||l.style.setProperty(\"--pcr-color\",p):(r.button.style.setProperty(\"--pcr-color\",p),r.button.classList.remove(\"clear\"));const u=i.toHEXA().toString();for(const{el:e,color:o}of t._swatchColors)e.classList[u===o.toHEXA().toString()?\"add\":\"remove\"](\"pcr-active\");c.style.setProperty(\"--pcr-color\",p);}}),hue:C({lock:\"v\"===i?\"h\":\"v\",element:t._root.hue.picker,wrapper:t._root.hue.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.hue||!e.palette)return;const n=s();t._recalc&&(n.h=360*o),this.element.style.backgroundColor=`hsl(${n.h}, 100%, 50%)`,r.palette.trigger();}}),opacity:C({lock:\"v\"===n?\"h\":\"v\",element:t._root.opacity.picker,wrapper:t._root.opacity.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.opacity||!e.palette)return;const n=s();t._recalc&&(n.a=Math.round(100*o)/100),this.element.style.background=`rgba(0, 0, 0, ${n.a})`,r.palette.trigger();}}),selectable:k({elements:t._root.interaction.options,className:\"active\",onchange(e){t._representation=e.target.getAttribute(\"data-type\").toUpperCase(),t._recalc&&t._updateOutput(\"swatch\");}})};this._components=r;}_bindEvents(){const{_root:t,options:e}=this,o=[i(t.interaction.clear,\"click\",(()=>this._clearColor())),i([t.interaction.cancel,t.preview.lastColor],\"click\",(()=>{this.setHSVA(...(this._lastColor||this._color).toHSVA(),!0),this._emit(\"cancel\");})),i(t.interaction.save,\"click\",(()=>{!this.applyColor()&&!e.showAlways&&this.hide();})),i(t.interaction.result,[\"keyup\",\"input\"],(t=>{this.setColor(t.target.value,!0)&&!this._initializingActive&&(this._emit(\"change\",this._color,\"input\",this),this._emit(\"changestop\",\"input\",this)),t.stopImmediatePropagation();})),i(t.interaction.result,[\"focus\",\"blur\"],(t=>{this._recalc=\"blur\"===t.type,this._recalc&&this._updateOutput(null);})),i([t.palette.palette,t.palette.picker,t.hue.slider,t.hue.picker,t.opacity.slider,t.opacity.picker],[\"mousedown\",\"touchstart\"],(()=>this._recalc=!0),{passive:!0})];if(!e.showAlways){const n=e.closeWithKey;o.push(i(t.button,\"click\",(()=>this.isOpen()?this.hide():this.show())),i(document,\"keyup\",(t=>this.isOpen()&&(t.key===n||t.code===n)&&this.hide())),i(document,[\"touchstart\",\"mousedown\"],(e=>{this.isOpen()&&!l(e).some((e=>e===t.app||e===t.button))&&this.hide();}),{capture:!0}));}if(e.adjustableNumbers){const e={rgba:[255,255,255,1],hsva:[360,100,100,1],hsla:[360,100,100,1],cmyk:[100,100,100,100]};p(t.interaction.result,((t,o,n)=>{const i=e[this.getColorRepresentation().toLowerCase()];if(i){const e=i[n],s=t+(e>=100?1e3*o:o);return s<=0?0:Number((s<e?s:e).toPrecision(3))}return t}));}if(e.autoReposition&&!e.inline){let t=null;const n=this;o.push(i(window,[\"scroll\",\"resize\"],(()=>{n.isOpen()&&(e.closeOnScroll&&n.hide(),null===t?(t=setTimeout((()=>t=null),100),requestAnimationFrame((function e(){n._rePositioningPicker(),null!==t&&requestAnimationFrame(e);}))):(clearTimeout(t),t=setTimeout((()=>t=null),100)));}),{capture:!0}));}this._eventBindings=o;}_rePositioningPicker(){const{options:t}=this;if(!t.inline){if(!this._nanopop.update({container:document.body.getBoundingClientRect(),position:t.position})){const t=this._root.app,e=t.getBoundingClientRect();t.style.top=(window.innerHeight-e.height)/2+\"px\",t.style.left=(window.innerWidth-e.width)/2+\"px\";}}}_updateOutput(t){const{_root:e,_color:o,options:n}=this;if(e.interaction.type()){const t=`to${e.interaction.type().getAttribute(\"data-type\")}`;e.interaction.result.value=\"function\"==typeof o[t]?o[t]().toString(n.outputPrecision):\"\";}!this._initializingActive&&this._recalc&&this._emit(\"change\",o,t,this);}_clearColor(t=!1){const{_root:e,options:o}=this;o.useAsButton||e.button.style.setProperty(\"--pcr-color\",\"rgba(0, 0, 0, 0.15)\"),e.button.classList.add(\"clear\"),o.showAlways||this.hide(),this._lastColor=null,this._initializingActive||t||(this._emit(\"save\",null),this._emit(\"clear\"));}_parseLocalColor(t){const{values:e,type:o,a:n}=w(t),{lockOpacity:i}=this.options,s=void 0!==n&&1!==n;return e&&3===e.length&&(e[3]=void 0),{values:!e||i&&s?null:e,type:o}}_t(t){return this.options.i18n[t]||E.I18N_DEFAULTS[t]}_emit(t,...e){this._eventListener[t].forEach((t=>t(...e,this)));}on(t,e){return this._eventListener[t].push(e),this}off(t,e){const o=this._eventListener[t]||[],n=o.indexOf(e);return ~n&&o.splice(n,1),this}addSwatch(t){const{values:e}=this._parseLocalColor(t);if(e){const{_swatchColors:t,_root:o}=this,n=A(...e),s=r(`<button type=\"button\" style=\"--pcr-color: ${n.toRGBA().toString(0)}\" aria-label=\"${this._t(\"btn:swatch\")}\"/>`);return o.swatches.appendChild(s),t.push({el:s,color:n}),this._eventBindings.push(i(s,\"click\",(()=>{this.setHSVA(...n.toHSVA(),!0),this._emit(\"swatchselect\",n),this._emit(\"change\",n,\"swatch\",this);}))),!0}return !1}removeSwatch(t){const e=this._swatchColors[t];if(e){const{el:o}=e;return this._root.swatches.removeChild(o),this._swatchColors.splice(t,1),!0}return !1}applyColor(t=!1){const{preview:e,button:o}=this._root,n=this._color.toRGBA().toString(0);return e.lastColor.style.setProperty(\"--pcr-color\",n),this.options.useAsButton||o.style.setProperty(\"--pcr-color\",n),o.classList.remove(\"clear\"),this._lastColor=this._color.clone(),this._initializingActive||t||this._emit(\"save\",this._color),this}destroy(){cancelAnimationFrame(this._setupAnimationFrame),this._eventBindings.forEach((t=>s(...t))),Object.keys(this._components).forEach((t=>this._components[t].destroy()));}destroyAndRemove(){this.destroy();const{root:t,app:e}=this._root;t.parentElement&&t.parentElement.removeChild(t),e.parentElement.removeChild(e),Object.keys(this).forEach((t=>this[t]=null));}hide(){return !!this.isOpen()&&(this._root.app.classList.remove(\"visible\"),this._emit(\"hide\"),!0)}show(){return !this.options.disabled&&!this.isOpen()&&(this._root.app.classList.add(\"visible\"),this._rePositioningPicker(),this._emit(\"show\",this._color),this)}isOpen(){return this._root.app.classList.contains(\"visible\")}setHSVA(t=360,e=0,o=0,n=1,i=!1){const s=this._recalc;if(this._recalc=!1,t<0||t>360||e<0||e>100||o<0||o>100||n<0||n>1)return !1;this._color=A(t,e,o,n);const{hue:r,opacity:a,palette:l}=this._components;return r.update(t/360),a.update(n),l.update(e/100,1-o/100),i||this.applyColor(),s&&this._updateOutput(),this._recalc=s,!0}setColor(t,e=!1){if(null===t)return this._clearColor(e),!0;const{values:o,type:n}=this._parseLocalColor(t);if(o){const t=n.toUpperCase(),{options:i}=this._root.interaction,s=i.find((e=>e.getAttribute(\"data-type\")===t));if(s&&!s.hidden)for(const t of i)t.classList[t===s?\"add\":\"remove\"](\"active\");return !!this.setHSVA(...o,e)&&this.setColorRepresentation(t)}return !1}setColorRepresentation(t){return t=t.toUpperCase(),!!this._root.interaction.options.find((e=>e.getAttribute(\"data-type\").startsWith(t)&&!e.click()))}getColorRepresentation(){return this._representation}getColor(){return this._color}getSelectedColor(){return this._lastColor}getRoot(){return this._root}disable(){return this.hide(),this.options.disabled=!0,this._root.button.classList.add(\"disabled\"),this}enable(){return this.options.disabled=!1,this._root.button.classList.remove(\"disabled\"),this}}return e=e.default})()));\n\t\n} (pickr_min));\n\nvar Pickr = /*@__PURE__*/getDefaultExportFromCjs(pickr_min.exports);\n\n// Generic options\nclass AnalyzerOptions {\n  constructor(heuristic_replimit) {\n    this.heuristic_replimit = heuristic_replimit;\n  }\n}\n\n// Abstract class\nclass Analyzer {\n  constructor(analyzerOptions) {\n    this.options = analyzerOptions;\n  }\n\n  // Subclasser must implement\n  // Return boolean\n  isVulnerable(regExp) {\n    return false;\n  }\n\n  // Subclass must implement\n  // Returns an AttackString or null\n  genAttackString(regExp) {\n    return null;\n  }\n}\n\nvar analyzer$2 = function(re, replimit) {\n  // Build an AST\n  let myRegExp = null;\n  let ast = null;\n  try {\n    // Construct a RegExp object\n    if (re instanceof RegExp) {\n      myRegExp = re;\n    } else if (typeof re === \"string\") {\n      myRegExp = new RegExp(re);\n    } else {\n      myRegExp = new RegExp(String(re));\n    }\n\n    // Build an AST\n    ast = regexpTree.parse(myRegExp);\n  } catch (err) {\n    // Invalid or unparseable input\n    return false;\n  }\n\n  let currentStarHeight = 0;\n  let maxObservedStarHeight = 0;\n\n  let repetitionCount = 0;\n\n  regexpTree.traverse(ast, {\n    Repetition: {\n      pre({ node }) {\n        repetitionCount++;\n\n        currentStarHeight++;\n        if (maxObservedStarHeight < currentStarHeight) {\n          maxObservedStarHeight = currentStarHeight;\n        }\n      },\n\n      post({ node }) {\n        currentStarHeight--;\n      }\n    }\n  });\n\n  return maxObservedStarHeight <= 1 && repetitionCount <= replimit;\n};\n\nanalyzer$2 = {\n  \"AnalyzerOptions\": AnalyzerOptions,\n  \"Analyzer\": Analyzer,\n};\n\nvar regexpTree$4 = {exports: {}};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to translate `/./s` to `/[\\0-\\uFFFF]/`.\n */\n\nvar compatDotallSTransform = {\n\n  // Whether `u` flag present. In which case we transform to\n  // \\u{10FFFF} instead of \\uFFFF.\n  _hasUFlag: false,\n\n  // Only run this plugin if we have `s` flag.\n  shouldRun: function shouldRun(ast) {\n    var shouldRun = ast.flags.includes('s');\n\n    if (!shouldRun) {\n      return false;\n    }\n\n    // Strip the `s` flag.\n    ast.flags = ast.flags.replace('s', '');\n\n    // Whether we have also `u`.\n    this._hasUFlag = ast.flags.includes('u');\n\n    return true;\n  },\n  Char: function Char(path) {\n    var node = path.node;\n\n\n    if (node.kind !== 'meta' || node.value !== '.') {\n      return;\n    }\n\n    var toValue = '\\\\uFFFF';\n    var toSymbol = '\\uFFFF';\n\n    if (this._hasUFlag) {\n      toValue = '\\\\u{10FFFF}';\n      toSymbol = '\\uDBFF\\uDFFF';\n    }\n\n    path.replace({\n      type: 'CharacterClass',\n      expressions: [{\n        type: 'ClassRange',\n        from: {\n          type: 'Char',\n          value: '\\\\0',\n          kind: 'decimal',\n          symbol: '\\0'\n        },\n        to: {\n          type: 'Char',\n          value: toValue,\n          kind: 'unicode',\n          symbol: toSymbol\n        }\n      }]\n    });\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to translate `/(?<name>a)\\k<name>/` to `/(a)\\1/`.\n */\n\nvar compatNamedCapturingGroupsTransform = {\n  // To track the names of the groups, and return them\n  // in the transform result state.\n  //\n  // A map from name to number: {foo: 2, bar: 4}\n  _groupNames: {},\n\n  /**\n   * Initialises the trasnform.\n   */\n  init: function init() {\n    this._groupNames = {};\n  },\n\n\n  /**\n   * Returns extra state, which eventually is returned to\n   */\n  getExtra: function getExtra() {\n    return this._groupNames;\n  },\n  Group: function Group(path) {\n    var node = path.node;\n\n\n    if (!node.name) {\n      return;\n    }\n\n    // Record group name.\n    this._groupNames[node.name] = node.number;\n\n    delete node.name;\n    delete node.nameRaw;\n  },\n  Backreference: function Backreference(path) {\n    var node = path.node;\n\n\n    if (node.kind !== 'name') {\n      return;\n    }\n\n    node.kind = 'number';\n    node.reference = node.number;\n    delete node.referenceRaw;\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to remove `x` flag `/foo/x` to `/foo/`.\n *\n * Note: other features of `x` flags (whitespace, comments) are\n * already removed at parsing stage.\n */\n\nvar compatXFlagTransform = {\n  RegExp: function RegExp(_ref) {\n    var node = _ref.node;\n\n    if (node.flags.includes('x')) {\n      node.flags = node.flags.replace('x', '');\n    }\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar transforms$1 = {\n  // \"dotAll\" `s` flag\n  dotAll: compatDotallSTransform,\n\n  // Named capturing groups.\n  namedCapturingGroups: compatNamedCapturingGroupsTransform,\n\n  // `x` flag\n  xFlag: compatXFlagTransform\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * Helper `gen` function calls node type handler.\n */\n\nfunction gen$1(node) {\n  return node ? generator$3[node.type](node) : '';\n}\n\n/**\n * AST handler.\n */\nvar generator$3 = {\n  RegExp: function RegExp(node) {\n    return '/' + gen$1(node.body) + '/' + node.flags;\n  },\n  Alternative: function Alternative(node) {\n    return (node.expressions || []).map(gen$1).join('');\n  },\n  Disjunction: function Disjunction(node) {\n    return gen$1(node.left) + '|' + gen$1(node.right);\n  },\n  Group: function Group(node) {\n    var expression = gen$1(node.expression);\n\n    if (node.capturing) {\n      // A named group.\n      if (node.name) {\n        return '(?<' + (node.nameRaw || node.name) + '>' + expression + ')';\n      }\n\n      return '(' + expression + ')';\n    }\n\n    return '(?:' + expression + ')';\n  },\n  Backreference: function Backreference(node) {\n    switch (node.kind) {\n      case 'number':\n        return '\\\\' + node.reference;\n      case 'name':\n        return '\\\\k<' + (node.referenceRaw || node.reference) + '>';\n      default:\n        throw new TypeError('Unknown Backreference kind: ' + node.kind);\n    }\n  },\n  Assertion: function Assertion(node) {\n    switch (node.kind) {\n      case '^':\n      case '$':\n      case '\\\\b':\n      case '\\\\B':\n        return node.kind;\n\n      case 'Lookahead':\n        {\n          var assertion = gen$1(node.assertion);\n\n          if (node.negative) {\n            return '(?!' + assertion + ')';\n          }\n\n          return '(?=' + assertion + ')';\n        }\n\n      case 'Lookbehind':\n        {\n          var _assertion = gen$1(node.assertion);\n\n          if (node.negative) {\n            return '(?<!' + _assertion + ')';\n          }\n\n          return '(?<=' + _assertion + ')';\n        }\n\n      default:\n        throw new TypeError('Unknown Assertion kind: ' + node.kind);\n    }\n  },\n  CharacterClass: function CharacterClass(node) {\n    var expressions = node.expressions.map(gen$1).join('');\n\n    if (node.negative) {\n      return '[^' + expressions + ']';\n    }\n\n    return '[' + expressions + ']';\n  },\n  ClassRange: function ClassRange(node) {\n    return gen$1(node.from) + '-' + gen$1(node.to);\n  },\n  Repetition: function Repetition(node) {\n    return '' + gen$1(node.expression) + gen$1(node.quantifier);\n  },\n  Quantifier: function Quantifier(node) {\n    var quantifier = void 0;\n    var greedy = node.greedy ? '' : '?';\n\n    switch (node.kind) {\n      case '+':\n      case '?':\n      case '*':\n        quantifier = node.kind;\n        break;\n      case 'Range':\n        // Exact: {1}\n        if (node.from === node.to) {\n          quantifier = '{' + node.from + '}';\n        }\n        // Open: {1,}\n        else if (!node.to) {\n            quantifier = '{' + node.from + ',}';\n          }\n          // Closed: {1,3}\n          else {\n              quantifier = '{' + node.from + ',' + node.to + '}';\n            }\n        break;\n      default:\n        throw new TypeError('Unknown Quantifier kind: ' + node.kind);\n    }\n\n    return '' + quantifier + greedy;\n  },\n  Char: function Char(node) {\n    var value = node.value;\n\n    switch (node.kind) {\n      case 'simple':\n        {\n          if (node.escaped) {\n            return '\\\\' + value;\n          }\n          return value;\n        }\n\n      case 'hex':\n      case 'unicode':\n      case 'oct':\n      case 'decimal':\n      case 'control':\n      case 'meta':\n        return value;\n\n      default:\n        throw new TypeError('Unknown Char kind: ' + node.kind);\n    }\n  },\n  UnicodeProperty: function UnicodeProperty(node) {\n    var escapeChar = node.negative ? 'P' : 'p';\n    var namePart = void 0;\n\n    if (!node.shorthand && !node.binary) {\n      namePart = node.name + '=';\n    } else {\n      namePart = '';\n    }\n\n    return '\\\\' + escapeChar + '{' + namePart + node.value + '}';\n  }\n};\n\nvar generator_1 = {\n  /**\n   * Generates a regexp string from an AST.\n   *\n   * @param Object ast - an AST node\n   */\n  generate: gen$1\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar NON_BINARY_PROP_NAMES_TO_ALIASES = {\n  General_Category: 'gc',\n  Script: 'sc',\n  Script_Extensions: 'scx'\n};\n\nvar NON_BINARY_ALIASES_TO_PROP_NAMES = inverseMap(NON_BINARY_PROP_NAMES_TO_ALIASES);\n\nvar BINARY_PROP_NAMES_TO_ALIASES = {\n  ASCII: 'ASCII',\n  ASCII_Hex_Digit: 'AHex',\n  Alphabetic: 'Alpha',\n  Any: 'Any',\n  Assigned: 'Assigned',\n  Bidi_Control: 'Bidi_C',\n  Bidi_Mirrored: 'Bidi_M',\n  Case_Ignorable: 'CI',\n  Cased: 'Cased',\n  Changes_When_Casefolded: 'CWCF',\n  Changes_When_Casemapped: 'CWCM',\n  Changes_When_Lowercased: 'CWL',\n  Changes_When_NFKC_Casefolded: 'CWKCF',\n  Changes_When_Titlecased: 'CWT',\n  Changes_When_Uppercased: 'CWU',\n  Dash: 'Dash',\n  Default_Ignorable_Code_Point: 'DI',\n  Deprecated: 'Dep',\n  Diacritic: 'Dia',\n  Emoji: 'Emoji',\n  Emoji_Component: 'Emoji_Component',\n  Emoji_Modifier: 'Emoji_Modifier',\n  Emoji_Modifier_Base: 'Emoji_Modifier_Base',\n  Emoji_Presentation: 'Emoji_Presentation',\n  Extended_Pictographic: 'Extended_Pictographic',\n  Extender: 'Ext',\n  Grapheme_Base: 'Gr_Base',\n  Grapheme_Extend: 'Gr_Ext',\n  Hex_Digit: 'Hex',\n  IDS_Binary_Operator: 'IDSB',\n  IDS_Trinary_Operator: 'IDST',\n  ID_Continue: 'IDC',\n  ID_Start: 'IDS',\n  Ideographic: 'Ideo',\n  Join_Control: 'Join_C',\n  Logical_Order_Exception: 'LOE',\n  Lowercase: 'Lower',\n  Math: 'Math',\n  Noncharacter_Code_Point: 'NChar',\n  Pattern_Syntax: 'Pat_Syn',\n  Pattern_White_Space: 'Pat_WS',\n  Quotation_Mark: 'QMark',\n  Radical: 'Radical',\n  Regional_Indicator: 'RI',\n  Sentence_Terminal: 'STerm',\n  Soft_Dotted: 'SD',\n  Terminal_Punctuation: 'Term',\n  Unified_Ideograph: 'UIdeo',\n  Uppercase: 'Upper',\n  Variation_Selector: 'VS',\n  White_Space: 'space',\n  XID_Continue: 'XIDC',\n  XID_Start: 'XIDS'\n};\n\nvar BINARY_ALIASES_TO_PROP_NAMES = inverseMap(BINARY_PROP_NAMES_TO_ALIASES);\n\nvar GENERAL_CATEGORY_VALUE_TO_ALIASES = {\n  Cased_Letter: 'LC',\n  Close_Punctuation: 'Pe',\n  Connector_Punctuation: 'Pc',\n  Control: ['Cc', 'cntrl'],\n  Currency_Symbol: 'Sc',\n  Dash_Punctuation: 'Pd',\n  Decimal_Number: ['Nd', 'digit'],\n  Enclosing_Mark: 'Me',\n  Final_Punctuation: 'Pf',\n  Format: 'Cf',\n  Initial_Punctuation: 'Pi',\n  Letter: 'L',\n  Letter_Number: 'Nl',\n  Line_Separator: 'Zl',\n  Lowercase_Letter: 'Ll',\n  Mark: ['M', 'Combining_Mark'],\n  Math_Symbol: 'Sm',\n  Modifier_Letter: 'Lm',\n  Modifier_Symbol: 'Sk',\n  Nonspacing_Mark: 'Mn',\n  Number: 'N',\n  Open_Punctuation: 'Ps',\n  Other: 'C',\n  Other_Letter: 'Lo',\n  Other_Number: 'No',\n  Other_Punctuation: 'Po',\n  Other_Symbol: 'So',\n  Paragraph_Separator: 'Zp',\n  Private_Use: 'Co',\n  Punctuation: ['P', 'punct'],\n  Separator: 'Z',\n  Space_Separator: 'Zs',\n  Spacing_Mark: 'Mc',\n  Surrogate: 'Cs',\n  Symbol: 'S',\n  Titlecase_Letter: 'Lt',\n  Unassigned: 'Cn',\n  Uppercase_Letter: 'Lu'\n};\n\nvar GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES = inverseMap(GENERAL_CATEGORY_VALUE_TO_ALIASES);\n\nvar SCRIPT_VALUE_TO_ALIASES = {\n  Adlam: 'Adlm',\n  Ahom: 'Ahom',\n  Anatolian_Hieroglyphs: 'Hluw',\n  Arabic: 'Arab',\n  Armenian: 'Armn',\n  Avestan: 'Avst',\n  Balinese: 'Bali',\n  Bamum: 'Bamu',\n  Bassa_Vah: 'Bass',\n  Batak: 'Batk',\n  Bengali: 'Beng',\n  Bhaiksuki: 'Bhks',\n  Bopomofo: 'Bopo',\n  Brahmi: 'Brah',\n  Braille: 'Brai',\n  Buginese: 'Bugi',\n  Buhid: 'Buhd',\n  Canadian_Aboriginal: 'Cans',\n  Carian: 'Cari',\n  Caucasian_Albanian: 'Aghb',\n  Chakma: 'Cakm',\n  Cham: 'Cham',\n  Cherokee: 'Cher',\n  Common: 'Zyyy',\n  Coptic: ['Copt', 'Qaac'],\n  Cuneiform: 'Xsux',\n  Cypriot: 'Cprt',\n  Cyrillic: 'Cyrl',\n  Deseret: 'Dsrt',\n  Devanagari: 'Deva',\n  Dogra: 'Dogr',\n  Duployan: 'Dupl',\n  Egyptian_Hieroglyphs: 'Egyp',\n  Elbasan: 'Elba',\n  Ethiopic: 'Ethi',\n  Georgian: 'Geor',\n  Glagolitic: 'Glag',\n  Gothic: 'Goth',\n  Grantha: 'Gran',\n  Greek: 'Grek',\n  Gujarati: 'Gujr',\n  Gunjala_Gondi: 'Gong',\n  Gurmukhi: 'Guru',\n  Han: 'Hani',\n  Hangul: 'Hang',\n  Hanifi_Rohingya: 'Rohg',\n  Hanunoo: 'Hano',\n  Hatran: 'Hatr',\n  Hebrew: 'Hebr',\n  Hiragana: 'Hira',\n  Imperial_Aramaic: 'Armi',\n  Inherited: ['Zinh', 'Qaai'],\n  Inscriptional_Pahlavi: 'Phli',\n  Inscriptional_Parthian: 'Prti',\n  Javanese: 'Java',\n  Kaithi: 'Kthi',\n  Kannada: 'Knda',\n  Katakana: 'Kana',\n  Kayah_Li: 'Kali',\n  Kharoshthi: 'Khar',\n  Khmer: 'Khmr',\n  Khojki: 'Khoj',\n  Khudawadi: 'Sind',\n  Lao: 'Laoo',\n  Latin: 'Latn',\n  Lepcha: 'Lepc',\n  Limbu: 'Limb',\n  Linear_A: 'Lina',\n  Linear_B: 'Linb',\n  Lisu: 'Lisu',\n  Lycian: 'Lyci',\n  Lydian: 'Lydi',\n  Mahajani: 'Mahj',\n  Makasar: 'Maka',\n  Malayalam: 'Mlym',\n  Mandaic: 'Mand',\n  Manichaean: 'Mani',\n  Marchen: 'Marc',\n  Medefaidrin: 'Medf',\n  Masaram_Gondi: 'Gonm',\n  Meetei_Mayek: 'Mtei',\n  Mende_Kikakui: 'Mend',\n  Meroitic_Cursive: 'Merc',\n  Meroitic_Hieroglyphs: 'Mero',\n  Miao: 'Plrd',\n  Modi: 'Modi',\n  Mongolian: 'Mong',\n  Mro: 'Mroo',\n  Multani: 'Mult',\n  Myanmar: 'Mymr',\n  Nabataean: 'Nbat',\n  New_Tai_Lue: 'Talu',\n  Newa: 'Newa',\n  Nko: 'Nkoo',\n  Nushu: 'Nshu',\n  Ogham: 'Ogam',\n  Ol_Chiki: 'Olck',\n  Old_Hungarian: 'Hung',\n  Old_Italic: 'Ital',\n  Old_North_Arabian: 'Narb',\n  Old_Permic: 'Perm',\n  Old_Persian: 'Xpeo',\n  Old_Sogdian: 'Sogo',\n  Old_South_Arabian: 'Sarb',\n  Old_Turkic: 'Orkh',\n  Oriya: 'Orya',\n  Osage: 'Osge',\n  Osmanya: 'Osma',\n  Pahawh_Hmong: 'Hmng',\n  Palmyrene: 'Palm',\n  Pau_Cin_Hau: 'Pauc',\n  Phags_Pa: 'Phag',\n  Phoenician: 'Phnx',\n  Psalter_Pahlavi: 'Phlp',\n  Rejang: 'Rjng',\n  Runic: 'Runr',\n  Samaritan: 'Samr',\n  Saurashtra: 'Saur',\n  Sharada: 'Shrd',\n  Shavian: 'Shaw',\n  Siddham: 'Sidd',\n  SignWriting: 'Sgnw',\n  Sinhala: 'Sinh',\n  Sogdian: 'Sogd',\n  Sora_Sompeng: 'Sora',\n  Soyombo: 'Soyo',\n  Sundanese: 'Sund',\n  Syloti_Nagri: 'Sylo',\n  Syriac: 'Syrc',\n  Tagalog: 'Tglg',\n  Tagbanwa: 'Tagb',\n  Tai_Le: 'Tale',\n  Tai_Tham: 'Lana',\n  Tai_Viet: 'Tavt',\n  Takri: 'Takr',\n  Tamil: 'Taml',\n  Tangut: 'Tang',\n  Telugu: 'Telu',\n  Thaana: 'Thaa',\n  Thai: 'Thai',\n  Tibetan: 'Tibt',\n  Tifinagh: 'Tfng',\n  Tirhuta: 'Tirh',\n  Ugaritic: 'Ugar',\n  Vai: 'Vaii',\n  Warang_Citi: 'Wara',\n  Yi: 'Yiii',\n  Zanabazar_Square: 'Zanb'\n};\n\nvar SCRIPT_VALUE_ALIASES_TO_VALUE = inverseMap(SCRIPT_VALUE_TO_ALIASES);\n\nfunction inverseMap(data) {\n  var inverse = {};\n\n  for (var name in data) {\n    if (!data.hasOwnProperty(name)) {\n      continue;\n    }\n    var value = data[name];\n    if (Array.isArray(value)) {\n      for (var i = 0; i < value.length; i++) {\n        inverse[value[i]] = name;\n      }\n    } else {\n      inverse[value] = name;\n    }\n  }\n\n  return inverse;\n}\n\nfunction isValidName(name) {\n  return NON_BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction isValidValue(name, value) {\n  if (isGeneralCategoryName(name)) {\n    return isGeneralCategoryValue(value);\n  }\n\n  if (isScriptCategoryName(name)) {\n    return isScriptCategoryValue(value);\n  }\n\n  return false;\n}\n\nfunction isAlias(name) {\n  return NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction isGeneralCategoryName(name) {\n  return name === 'General_Category' || name == 'gc';\n}\n\nfunction isScriptCategoryName(name) {\n  return name === 'Script' || name === 'Script_Extensions' || name === 'sc' || name === 'scx';\n}\n\nfunction isGeneralCategoryValue(value) {\n  return GENERAL_CATEGORY_VALUE_TO_ALIASES.hasOwnProperty(value) || GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value);\n}\n\nfunction isScriptCategoryValue(value) {\n  return SCRIPT_VALUE_TO_ALIASES.hasOwnProperty(value) || SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value);\n}\n\nfunction isBinaryPropertyName(name) {\n  return BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction getCanonicalName(name) {\n  if (NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {\n    return NON_BINARY_ALIASES_TO_PROP_NAMES[name];\n  }\n\n  if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {\n    return BINARY_ALIASES_TO_PROP_NAMES[name];\n  }\n\n  return null;\n}\n\nfunction getCanonicalValue(value) {\n  if (GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value)) {\n    return GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES[value];\n  }\n\n  if (SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value)) {\n    return SCRIPT_VALUE_ALIASES_TO_VALUE[value];\n  }\n\n  if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(value)) {\n    return BINARY_ALIASES_TO_PROP_NAMES[value];\n  }\n\n  return null;\n}\n\nvar parserUnicodeProperties = {\n  isAlias: isAlias,\n  isValidName: isValidName,\n  isValidValue: isValidValue,\n  isGeneralCategoryValue: isGeneralCategoryValue,\n  isScriptCategoryValue: isScriptCategoryValue,\n  isBinaryPropertyName: isBinaryPropertyName,\n  getCanonicalName: getCanonicalName,\n  getCanonicalValue: getCanonicalValue,\n\n  NON_BINARY_PROP_NAMES_TO_ALIASES: NON_BINARY_PROP_NAMES_TO_ALIASES,\n  NON_BINARY_ALIASES_TO_PROP_NAMES: NON_BINARY_ALIASES_TO_PROP_NAMES,\n\n  BINARY_PROP_NAMES_TO_ALIASES: BINARY_PROP_NAMES_TO_ALIASES,\n  BINARY_ALIASES_TO_PROP_NAMES: BINARY_ALIASES_TO_PROP_NAMES,\n\n  GENERAL_CATEGORY_VALUE_TO_ALIASES: GENERAL_CATEGORY_VALUE_TO_ALIASES,\n  GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES: GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES,\n\n  SCRIPT_VALUE_TO_ALIASES: SCRIPT_VALUE_TO_ALIASES,\n  SCRIPT_VALUE_ALIASES_TO_VALUE: SCRIPT_VALUE_ALIASES_TO_VALUE\n};\n\n/**\n * LR parser generated by the Syntax tool.\n *\n * https://www.npmjs.com/package/syntax-cli\n *\n *   npm install -g syntax-cli\n *\n *   syntax-cli --help\n *\n * To regenerate run:\n *\n *   syntax-cli \\\n *     --grammar ~/path-to-grammar-file \\\n *     --mode <parsing-mode> \\\n *     --output ~/path-to-output-parser-file.js\n */\n\n/**\n * Matched token text.\n */\n\nvar _slicedToArray$2 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _toConsumableArray$8(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar yytext = void 0;\n\n/**\n * Storage object.\n */\nvar yy = {};\n\n/**\n * Result of semantic action.\n */\nvar __ = void 0;\n\n/**\n * Result location object.\n */\nvar __loc = void 0;\n\nfunction yyloc(start, end) {\n  if (!yy.options.captureLocations) {\n    return null;\n  }\n\n  // Epsilon doesn't produce location.\n  if (!start || !end) {\n    return start || end;\n  }\n\n  return {\n    startOffset: start.startOffset,\n    endOffset: end.endOffset,\n    startLine: start.startLine,\n    endLine: end.endLine,\n    startColumn: start.startColumn,\n    endColumn: end.endColumn\n  };\n}\n\nvar EOF = '$';\n\n/**\n * List of productions (generated by Syntax tool).\n */\nvar productions = [[-1, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [0, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n  __loc = yyloc(_1loc, _4loc);\n  __ = Node({\n    type: 'RegExp',\n    body: _2,\n    flags: checkFlags(_4)\n  }, loc(_1loc, _4loc || _3loc));\n}], [1, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [1, 0, function () {\n  __loc = null;__ = '';\n}], [2, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [2, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);__ = _1 + _2;\n}], [3, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [4, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [4, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  // Location for empty disjunction: /|/\n  var _loc = null;\n\n  if (_2loc) {\n    _loc = loc(_1loc || _2loc, _3loc || _2loc);\n  }\n  __ = Node({\n    type: 'Disjunction',\n    left: _1,\n    right: _3\n  }, _loc);\n}], [5, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  if (_1.length === 0) {\n    __ = null;\n    return;\n  }\n\n  if (_1.length === 1) {\n    __ = Node(_1[0], __loc);\n  } else {\n    __ = Node({\n      type: 'Alternative',\n      expressions: _1\n    }, __loc);\n  }\n}], [6, 0, function () {\n  __loc = null;__ = [];\n}], [6, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);__ = _1.concat(_2);\n}], [7, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Node(Object.assign({ type: 'Assertion' }, _1), __loc);\n}], [7, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);\n  __ = _1;\n\n  if (_2) {\n    __ = Node({\n      type: 'Repetition',\n      expression: _1,\n      quantifier: _2\n    }, __loc);\n  }\n}], [8, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = { kind: '^' };\n}], [8, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = { kind: '$' };\n}], [8, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = { kind: '\\\\b' };\n}], [8, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = { kind: '\\\\B' };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = {\n    kind: 'Lookahead',\n    assertion: _2\n  };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = {\n    kind: 'Lookahead',\n    negative: true,\n    assertion: _2\n  };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = {\n    kind: 'Lookbehind',\n    assertion: _2\n  };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = {\n    kind: 'Lookbehind',\n    negative: true,\n    assertion: _2\n  };\n}], [9, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [9, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [9, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1.slice(1), 'simple', __loc);__.escaped = true;\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);__.isSurrogatePair = true;\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = UnicodeProperty(_1, __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'control', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'hex', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'oct', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = GroupRefOrDecChar(_1, __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = NamedGroupRefOrChars(_1, _1loc);\n}], [11, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [11, 0], [12, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [12, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);\n  _1.greedy = false;\n  __ = _1;\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  __ = Node({\n    type: 'Quantifier',\n    kind: _1,\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  __ = Node({\n    type: 'Quantifier',\n    kind: _1,\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  __ = Node({\n    type: 'Quantifier',\n    kind: _1,\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  var range = getRange(_1);\n  __ = Node({\n    type: 'Quantifier',\n    kind: 'Range',\n    from: range[0],\n    to: range[0],\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  __ = Node({\n    type: 'Quantifier',\n    kind: 'Range',\n    from: getRange(_1)[0],\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  var range = getRange(_1);\n  __ = Node({\n    type: 'Quantifier',\n    kind: 'Range',\n    from: range[0],\n    to: range[1],\n    greedy: true\n  }, __loc);\n}], [14, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [14, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  var nameRaw = String(_1);\n  var name = decodeUnicodeGroupName(nameRaw);\n  if (!yy.options.allowGroupNameDuplicates && namedGroups.hasOwnProperty(name)) {\n    throw new SyntaxError('Duplicate of the named group \"' + name + '\".');\n  }\n\n  namedGroups[name] = _1.groupNumber;\n\n  __ = Node({\n    type: 'Group',\n    capturing: true,\n    name: name,\n    nameRaw: nameRaw,\n    number: _1.groupNumber,\n    expression: _2\n  }, __loc);\n}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = Node({\n    type: 'Group',\n    capturing: true,\n    number: _1.groupNumber,\n    expression: _2\n  }, __loc);\n}], [16, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = Node({\n    type: 'Group',\n    capturing: false,\n    expression: _2\n  }, __loc);\n}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = Node({\n    type: 'CharacterClass',\n    negative: true,\n    expressions: _2\n  }, __loc);\n}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = Node({\n    type: 'CharacterClass',\n    expressions: _2\n  }, __loc);\n}], [18, 0, function () {\n  __loc = null;__ = [];\n}], [18, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [19, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = [_1];\n}], [19, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);\n}], [19, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n  __loc = yyloc(_1loc, _4loc);\n  checkClassRange(_1, _3);\n\n  __ = [Node({\n    type: 'ClassRange',\n    from: _1,\n    to: _3\n  }, loc(_1loc, _3loc))];\n\n  if (_4) {\n    __ = __.concat(_4);\n  }\n}], [20, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [20, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);\n}], [20, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n  __loc = yyloc(_1loc, _4loc);\n  checkClassRange(_1, _3);\n\n  __ = [Node({\n    type: 'ClassRange',\n    from: _1,\n    to: _3\n  }, loc(_1loc, _3loc))];\n\n  if (_4) {\n    __ = __.concat(_4);\n  }\n}], [21, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);\n}], [21, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [22, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [22, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}]];\n\n/**\n * Encoded tokens map.\n */\nvar tokens = { \"SLASH\": \"23\", \"CHAR\": \"24\", \"BAR\": \"25\", \"BOS\": \"26\", \"EOS\": \"27\", \"ESC_b\": \"28\", \"ESC_B\": \"29\", \"POS_LA_ASSERT\": \"30\", \"R_PAREN\": \"31\", \"NEG_LA_ASSERT\": \"32\", \"POS_LB_ASSERT\": \"33\", \"NEG_LB_ASSERT\": \"34\", \"ESC_CHAR\": \"35\", \"U_CODE_SURROGATE\": \"36\", \"U_CODE\": \"37\", \"U_PROP_VALUE_EXP\": \"38\", \"CTRL_CH\": \"39\", \"HEX_CODE\": \"40\", \"OCT_CODE\": \"41\", \"DEC_CODE\": \"42\", \"META_CHAR\": \"43\", \"ANY\": \"44\", \"NAMED_GROUP_REF\": \"45\", \"Q_MARK\": \"46\", \"STAR\": \"47\", \"PLUS\": \"48\", \"RANGE_EXACT\": \"49\", \"RANGE_OPEN\": \"50\", \"RANGE_CLOSED\": \"51\", \"NAMED_CAPTURE_GROUP\": \"52\", \"L_PAREN\": \"53\", \"NON_CAPTURE_GROUP\": \"54\", \"NEG_CLASS\": \"55\", \"R_BRACKET\": \"56\", \"L_BRACKET\": \"57\", \"DASH\": \"58\", \"$\": \"59\" };\n\n/**\n * Parsing table (generated by Syntax tool).\n */\nvar table = [{ \"0\": 1, \"23\": \"s2\" }, { \"59\": \"acc\" }, { \"3\": 3, \"4\": 4, \"5\": 5, \"6\": 6, \"23\": \"r10\", \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"s7\" }, { \"23\": \"r6\", \"25\": \"s12\" }, { \"23\": \"r7\", \"25\": \"r7\", \"31\": \"r7\" }, { \"7\": 14, \"8\": 15, \"9\": 16, \"10\": 25, \"14\": 27, \"15\": 42, \"16\": 43, \"17\": 26, \"23\": \"r9\", \"24\": \"s28\", \"25\": \"r9\", \"26\": \"s17\", \"27\": \"s18\", \"28\": \"s19\", \"29\": \"s20\", \"30\": \"s21\", \"31\": \"r9\", \"32\": \"s22\", \"33\": \"s23\", \"34\": \"s24\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"52\": \"s44\", \"53\": \"s45\", \"54\": \"s46\", \"55\": \"s40\", \"57\": \"s41\" }, { \"1\": 8, \"2\": 9, \"24\": \"s10\", \"59\": \"r3\" }, { \"59\": \"r1\" }, { \"24\": \"s11\", \"59\": \"r2\" }, { \"24\": \"r4\", \"59\": \"r4\" }, { \"24\": \"r5\", \"59\": \"r5\" }, { \"5\": 13, \"6\": 6, \"23\": \"r10\", \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r8\", \"25\": \"r8\", \"31\": \"r8\" }, { \"23\": \"r11\", \"24\": \"r11\", \"25\": \"r11\", \"26\": \"r11\", \"27\": \"r11\", \"28\": \"r11\", \"29\": \"r11\", \"30\": \"r11\", \"31\": \"r11\", \"32\": \"r11\", \"33\": \"r11\", \"34\": \"r11\", \"35\": \"r11\", \"36\": \"r11\", \"37\": \"r11\", \"38\": \"r11\", \"39\": \"r11\", \"40\": \"r11\", \"41\": \"r11\", \"42\": \"r11\", \"43\": \"r11\", \"44\": \"r11\", \"45\": \"r11\", \"52\": \"r11\", \"53\": \"r11\", \"54\": \"r11\", \"55\": \"r11\", \"57\": \"r11\" }, { \"23\": \"r12\", \"24\": \"r12\", \"25\": \"r12\", \"26\": \"r12\", \"27\": \"r12\", \"28\": \"r12\", \"29\": \"r12\", \"30\": \"r12\", \"31\": \"r12\", \"32\": \"r12\", \"33\": \"r12\", \"34\": \"r12\", \"35\": \"r12\", \"36\": \"r12\", \"37\": \"r12\", \"38\": \"r12\", \"39\": \"r12\", \"40\": \"r12\", \"41\": \"r12\", \"42\": \"r12\", \"43\": \"r12\", \"44\": \"r12\", \"45\": \"r12\", \"52\": \"r12\", \"53\": \"r12\", \"54\": \"r12\", \"55\": \"r12\", \"57\": \"r12\" }, { \"11\": 47, \"12\": 48, \"13\": 49, \"23\": \"r38\", \"24\": \"r38\", \"25\": \"r38\", \"26\": \"r38\", \"27\": \"r38\", \"28\": \"r38\", \"29\": \"r38\", \"30\": \"r38\", \"31\": \"r38\", \"32\": \"r38\", \"33\": \"r38\", \"34\": \"r38\", \"35\": \"r38\", \"36\": \"r38\", \"37\": \"r38\", \"38\": \"r38\", \"39\": \"r38\", \"40\": \"r38\", \"41\": \"r38\", \"42\": \"r38\", \"43\": \"r38\", \"44\": \"r38\", \"45\": \"r38\", \"46\": \"s52\", \"47\": \"s50\", \"48\": \"s51\", \"49\": \"s53\", \"50\": \"s54\", \"51\": \"s55\", \"52\": \"r38\", \"53\": \"r38\", \"54\": \"r38\", \"55\": \"r38\", \"57\": \"r38\" }, { \"23\": \"r14\", \"24\": \"r14\", \"25\": \"r14\", \"26\": \"r14\", \"27\": \"r14\", \"28\": \"r14\", \"29\": \"r14\", \"30\": \"r14\", \"31\": \"r14\", \"32\": \"r14\", \"33\": \"r14\", \"34\": \"r14\", \"35\": \"r14\", \"36\": \"r14\", \"37\": \"r14\", \"38\": \"r14\", \"39\": \"r14\", \"40\": \"r14\", \"41\": \"r14\", \"42\": \"r14\", \"43\": \"r14\", \"44\": \"r14\", \"45\": \"r14\", \"52\": \"r14\", \"53\": \"r14\", \"54\": \"r14\", \"55\": \"r14\", \"57\": \"r14\" }, { \"23\": \"r15\", \"24\": \"r15\", \"25\": \"r15\", \"26\": \"r15\", \"27\": \"r15\", \"28\": \"r15\", \"29\": \"r15\", \"30\": \"r15\", \"31\": \"r15\", \"32\": \"r15\", \"33\": \"r15\", \"34\": \"r15\", \"35\": \"r15\", \"36\": \"r15\", \"37\": \"r15\", \"38\": \"r15\", \"39\": \"r15\", \"40\": \"r15\", \"41\": \"r15\", \"42\": \"r15\", \"43\": \"r15\", \"44\": \"r15\", \"45\": \"r15\", \"52\": \"r15\", \"53\": \"r15\", \"54\": \"r15\", \"55\": \"r15\", \"57\": \"r15\" }, { \"23\": \"r16\", \"24\": \"r16\", \"25\": \"r16\", \"26\": \"r16\", \"27\": \"r16\", \"28\": \"r16\", \"29\": \"r16\", \"30\": \"r16\", \"31\": \"r16\", \"32\": \"r16\", \"33\": \"r16\", \"34\": \"r16\", \"35\": \"r16\", \"36\": \"r16\", \"37\": \"r16\", \"38\": \"r16\", \"39\": \"r16\", \"40\": \"r16\", \"41\": \"r16\", \"42\": \"r16\", \"43\": \"r16\", \"44\": \"r16\", \"45\": \"r16\", \"52\": \"r16\", \"53\": \"r16\", \"54\": \"r16\", \"55\": \"r16\", \"57\": \"r16\" }, { \"23\": \"r17\", \"24\": \"r17\", \"25\": \"r17\", \"26\": \"r17\", \"27\": \"r17\", \"28\": \"r17\", \"29\": \"r17\", \"30\": \"r17\", \"31\": \"r17\", \"32\": \"r17\", \"33\": \"r17\", \"34\": \"r17\", \"35\": \"r17\", \"36\": \"r17\", \"37\": \"r17\", \"38\": \"r17\", \"39\": \"r17\", \"40\": \"r17\", \"41\": \"r17\", \"42\": \"r17\", \"43\": \"r17\", \"44\": \"r17\", \"45\": \"r17\", \"52\": \"r17\", \"53\": \"r17\", \"54\": \"r17\", \"55\": \"r17\", \"57\": \"r17\" }, { \"4\": 57, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 59, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 61, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 63, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r22\", \"24\": \"r22\", \"25\": \"r22\", \"26\": \"r22\", \"27\": \"r22\", \"28\": \"r22\", \"29\": \"r22\", \"30\": \"r22\", \"31\": \"r22\", \"32\": \"r22\", \"33\": \"r22\", \"34\": \"r22\", \"35\": \"r22\", \"36\": \"r22\", \"37\": \"r22\", \"38\": \"r22\", \"39\": \"r22\", \"40\": \"r22\", \"41\": \"r22\", \"42\": \"r22\", \"43\": \"r22\", \"44\": \"r22\", \"45\": \"r22\", \"46\": \"r22\", \"47\": \"r22\", \"48\": \"r22\", \"49\": \"r22\", \"50\": \"r22\", \"51\": \"r22\", \"52\": \"r22\", \"53\": \"r22\", \"54\": \"r22\", \"55\": \"r22\", \"57\": \"r22\" }, { \"23\": \"r23\", \"24\": \"r23\", \"25\": \"r23\", \"26\": \"r23\", \"27\": \"r23\", \"28\": \"r23\", \"29\": \"r23\", \"30\": \"r23\", \"31\": \"r23\", \"32\": \"r23\", \"33\": \"r23\", \"34\": \"r23\", \"35\": \"r23\", \"36\": \"r23\", \"37\": \"r23\", \"38\": \"r23\", \"39\": \"r23\", \"40\": \"r23\", \"41\": \"r23\", \"42\": \"r23\", \"43\": \"r23\", \"44\": \"r23\", \"45\": \"r23\", \"46\": \"r23\", \"47\": \"r23\", \"48\": \"r23\", \"49\": \"r23\", \"50\": \"r23\", \"51\": \"r23\", \"52\": \"r23\", \"53\": \"r23\", \"54\": \"r23\", \"55\": \"r23\", \"57\": \"r23\" }, { \"23\": \"r24\", \"24\": \"r24\", \"25\": \"r24\", \"26\": \"r24\", \"27\": \"r24\", \"28\": \"r24\", \"29\": \"r24\", \"30\": \"r24\", \"31\": \"r24\", \"32\": \"r24\", \"33\": \"r24\", \"34\": \"r24\", \"35\": \"r24\", \"36\": \"r24\", \"37\": \"r24\", \"38\": \"r24\", \"39\": \"r24\", \"40\": \"r24\", \"41\": \"r24\", \"42\": \"r24\", \"43\": \"r24\", \"44\": \"r24\", \"45\": \"r24\", \"46\": \"r24\", \"47\": \"r24\", \"48\": \"r24\", \"49\": \"r24\", \"50\": \"r24\", \"51\": \"r24\", \"52\": \"r24\", \"53\": \"r24\", \"54\": \"r24\", \"55\": \"r24\", \"57\": \"r24\" }, { \"23\": \"r25\", \"24\": \"r25\", \"25\": \"r25\", \"26\": \"r25\", \"27\": \"r25\", \"28\": \"r25\", \"29\": \"r25\", \"30\": \"r25\", \"31\": \"r25\", \"32\": \"r25\", \"33\": \"r25\", \"34\": \"r25\", \"35\": \"r25\", \"36\": \"r25\", \"37\": \"r25\", \"38\": \"r25\", \"39\": \"r25\", \"40\": \"r25\", \"41\": \"r25\", \"42\": \"r25\", \"43\": \"r25\", \"44\": \"r25\", \"45\": \"r25\", \"46\": \"r25\", \"47\": \"r25\", \"48\": \"r25\", \"49\": \"r25\", \"50\": \"r25\", \"51\": \"r25\", \"52\": \"r25\", \"53\": \"r25\", \"54\": \"r25\", \"55\": \"r25\", \"56\": \"r25\", \"57\": \"r25\", \"58\": \"r25\" }, { \"23\": \"r26\", \"24\": \"r26\", \"25\": \"r26\", \"26\": \"r26\", \"27\": \"r26\", \"28\": \"r26\", \"29\": \"r26\", \"30\": \"r26\", \"31\": \"r26\", \"32\": \"r26\", \"33\": \"r26\", \"34\": \"r26\", \"35\": \"r26\", \"36\": \"r26\", \"37\": \"r26\", \"38\": \"r26\", \"39\": \"r26\", \"40\": \"r26\", \"41\": \"r26\", \"42\": \"r26\", \"43\": \"r26\", \"44\": \"r26\", \"45\": \"r26\", \"46\": \"r26\", \"47\": \"r26\", \"48\": \"r26\", \"49\": \"r26\", \"50\": \"r26\", \"51\": \"r26\", \"52\": \"r26\", \"53\": \"r26\", \"54\": \"r26\", \"55\": \"r26\", \"56\": \"r26\", \"57\": \"r26\", \"58\": \"r26\" }, { \"23\": \"r27\", \"24\": \"r27\", \"25\": \"r27\", \"26\": \"r27\", \"27\": \"r27\", \"28\": \"r27\", \"29\": \"r27\", \"30\": \"r27\", \"31\": \"r27\", \"32\": \"r27\", \"33\": \"r27\", \"34\": \"r27\", \"35\": \"r27\", \"36\": \"r27\", \"37\": \"r27\", \"38\": \"r27\", \"39\": \"r27\", \"40\": \"r27\", \"41\": \"r27\", \"42\": \"r27\", \"43\": \"r27\", \"44\": \"r27\", \"45\": \"r27\", \"46\": \"r27\", \"47\": \"r27\", \"48\": \"r27\", \"49\": \"r27\", \"50\": \"r27\", \"51\": \"r27\", \"52\": \"r27\", \"53\": \"r27\", \"54\": \"r27\", \"55\": \"r27\", \"56\": \"r27\", \"57\": \"r27\", \"58\": \"r27\" }, { \"23\": \"r28\", \"24\": \"r28\", \"25\": \"r28\", \"26\": \"r28\", \"27\": \"r28\", \"28\": \"r28\", \"29\": \"r28\", \"30\": \"r28\", \"31\": \"r28\", \"32\": \"r28\", \"33\": \"r28\", \"34\": \"r28\", \"35\": \"r28\", \"36\": \"r28\", \"37\": \"r28\", \"38\": \"r28\", \"39\": \"r28\", \"40\": \"r28\", \"41\": \"r28\", \"42\": \"r28\", \"43\": \"r28\", \"44\": \"r28\", \"45\": \"r28\", \"46\": \"r28\", \"47\": \"r28\", \"48\": \"r28\", \"49\": \"r28\", \"50\": \"r28\", \"51\": \"r28\", \"52\": \"r28\", \"53\": \"r28\", \"54\": \"r28\", \"55\": \"r28\", \"56\": \"r28\", \"57\": \"r28\", \"58\": \"r28\" }, { \"23\": \"r29\", \"24\": \"r29\", \"25\": \"r29\", \"26\": \"r29\", \"27\": \"r29\", \"28\": \"r29\", \"29\": \"r29\", \"30\": \"r29\", \"31\": \"r29\", \"32\": \"r29\", \"33\": \"r29\", \"34\": \"r29\", \"35\": \"r29\", \"36\": \"r29\", \"37\": \"r29\", \"38\": \"r29\", \"39\": \"r29\", \"40\": \"r29\", \"41\": \"r29\", \"42\": \"r29\", \"43\": \"r29\", \"44\": \"r29\", \"45\": \"r29\", \"46\": \"r29\", \"47\": \"r29\", \"48\": \"r29\", \"49\": \"r29\", \"50\": \"r29\", \"51\": \"r29\", \"52\": \"r29\", \"53\": \"r29\", \"54\": \"r29\", \"55\": \"r29\", \"56\": \"r29\", \"57\": \"r29\", \"58\": \"r29\" }, { \"23\": \"r30\", \"24\": \"r30\", \"25\": \"r30\", \"26\": \"r30\", \"27\": \"r30\", \"28\": \"r30\", \"29\": \"r30\", \"30\": \"r30\", \"31\": \"r30\", \"32\": \"r30\", \"33\": \"r30\", \"34\": \"r30\", \"35\": \"r30\", \"36\": \"r30\", \"37\": \"r30\", \"38\": \"r30\", \"39\": \"r30\", \"40\": \"r30\", \"41\": \"r30\", \"42\": \"r30\", \"43\": \"r30\", \"44\": \"r30\", \"45\": \"r30\", \"46\": \"r30\", \"47\": \"r30\", \"48\": \"r30\", \"49\": \"r30\", \"50\": \"r30\", \"51\": \"r30\", \"52\": \"r30\", \"53\": \"r30\", \"54\": \"r30\", \"55\": \"r30\", \"56\": \"r30\", \"57\": \"r30\", \"58\": \"r30\" }, { \"23\": \"r31\", \"24\": \"r31\", \"25\": \"r31\", \"26\": \"r31\", \"27\": \"r31\", \"28\": \"r31\", \"29\": \"r31\", \"30\": \"r31\", \"31\": \"r31\", \"32\": \"r31\", \"33\": \"r31\", \"34\": \"r31\", \"35\": \"r31\", \"36\": \"r31\", \"37\": \"r31\", \"38\": \"r31\", \"39\": \"r31\", \"40\": \"r31\", \"41\": \"r31\", \"42\": \"r31\", \"43\": \"r31\", \"44\": \"r31\", \"45\": \"r31\", \"46\": \"r31\", \"47\": \"r31\", \"48\": \"r31\", \"49\": \"r31\", \"50\": \"r31\", \"51\": \"r31\", \"52\": \"r31\", \"53\": \"r31\", \"54\": \"r31\", \"55\": \"r31\", \"56\": \"r31\", \"57\": \"r31\", \"58\": \"r31\" }, { \"23\": \"r32\", \"24\": \"r32\", \"25\": \"r32\", \"26\": \"r32\", \"27\": \"r32\", \"28\": \"r32\", \"29\": \"r32\", \"30\": \"r32\", \"31\": \"r32\", \"32\": \"r32\", \"33\": \"r32\", \"34\": \"r32\", \"35\": \"r32\", \"36\": \"r32\", \"37\": \"r32\", \"38\": \"r32\", \"39\": \"r32\", \"40\": \"r32\", \"41\": \"r32\", \"42\": \"r32\", \"43\": \"r32\", \"44\": \"r32\", \"45\": \"r32\", \"46\": \"r32\", \"47\": \"r32\", \"48\": \"r32\", \"49\": \"r32\", \"50\": \"r32\", \"51\": \"r32\", \"52\": \"r32\", \"53\": \"r32\", \"54\": \"r32\", \"55\": \"r32\", \"56\": \"r32\", \"57\": \"r32\", \"58\": \"r32\" }, { \"23\": \"r33\", \"24\": \"r33\", \"25\": \"r33\", \"26\": \"r33\", \"27\": \"r33\", \"28\": \"r33\", \"29\": \"r33\", \"30\": \"r33\", \"31\": \"r33\", \"32\": \"r33\", \"33\": \"r33\", \"34\": \"r33\", \"35\": \"r33\", \"36\": \"r33\", \"37\": \"r33\", \"38\": \"r33\", \"39\": \"r33\", \"40\": \"r33\", \"41\": \"r33\", \"42\": \"r33\", \"43\": \"r33\", \"44\": \"r33\", \"45\": \"r33\", \"46\": \"r33\", \"47\": \"r33\", \"48\": \"r33\", \"49\": \"r33\", \"50\": \"r33\", \"51\": \"r33\", \"52\": \"r33\", \"53\": \"r33\", \"54\": \"r33\", \"55\": \"r33\", \"56\": \"r33\", \"57\": \"r33\", \"58\": \"r33\" }, { \"23\": \"r34\", \"24\": \"r34\", \"25\": \"r34\", \"26\": \"r34\", \"27\": \"r34\", \"28\": \"r34\", \"29\": \"r34\", \"30\": \"r34\", \"31\": \"r34\", \"32\": \"r34\", \"33\": \"r34\", \"34\": \"r34\", \"35\": \"r34\", \"36\": \"r34\", \"37\": \"r34\", \"38\": \"r34\", \"39\": \"r34\", \"40\": \"r34\", \"41\": \"r34\", \"42\": \"r34\", \"43\": \"r34\", \"44\": \"r34\", \"45\": \"r34\", \"46\": \"r34\", \"47\": \"r34\", \"48\": \"r34\", \"49\": \"r34\", \"50\": \"r34\", \"51\": \"r34\", \"52\": \"r34\", \"53\": \"r34\", \"54\": \"r34\", \"55\": \"r34\", \"56\": \"r34\", \"57\": \"r34\", \"58\": \"r34\" }, { \"23\": \"r35\", \"24\": \"r35\", \"25\": \"r35\", \"26\": \"r35\", \"27\": \"r35\", \"28\": \"r35\", \"29\": \"r35\", \"30\": \"r35\", \"31\": \"r35\", \"32\": \"r35\", \"33\": \"r35\", \"34\": \"r35\", \"35\": \"r35\", \"36\": \"r35\", \"37\": \"r35\", \"38\": \"r35\", \"39\": \"r35\", \"40\": \"r35\", \"41\": \"r35\", \"42\": \"r35\", \"43\": \"r35\", \"44\": \"r35\", \"45\": \"r35\", \"46\": \"r35\", \"47\": \"r35\", \"48\": \"r35\", \"49\": \"r35\", \"50\": \"r35\", \"51\": \"r35\", \"52\": \"r35\", \"53\": \"r35\", \"54\": \"r35\", \"55\": \"r35\", \"56\": \"r35\", \"57\": \"r35\", \"58\": \"r35\" }, { \"23\": \"r36\", \"24\": \"r36\", \"25\": \"r36\", \"26\": \"r36\", \"27\": \"r36\", \"28\": \"r36\", \"29\": \"r36\", \"30\": \"r36\", \"31\": \"r36\", \"32\": \"r36\", \"33\": \"r36\", \"34\": \"r36\", \"35\": \"r36\", \"36\": \"r36\", \"37\": \"r36\", \"38\": \"r36\", \"39\": \"r36\", \"40\": \"r36\", \"41\": \"r36\", \"42\": \"r36\", \"43\": \"r36\", \"44\": \"r36\", \"45\": \"r36\", \"46\": \"r36\", \"47\": \"r36\", \"48\": \"r36\", \"49\": \"r36\", \"50\": \"r36\", \"51\": \"r36\", \"52\": \"r36\", \"53\": \"r36\", \"54\": \"r36\", \"55\": \"r36\", \"56\": \"r36\", \"57\": \"r36\", \"58\": \"r36\" }, { \"10\": 70, \"18\": 65, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"10\": 70, \"18\": 83, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"23\": \"r47\", \"24\": \"r47\", \"25\": \"r47\", \"26\": \"r47\", \"27\": \"r47\", \"28\": \"r47\", \"29\": \"r47\", \"30\": \"r47\", \"31\": \"r47\", \"32\": \"r47\", \"33\": \"r47\", \"34\": \"r47\", \"35\": \"r47\", \"36\": \"r47\", \"37\": \"r47\", \"38\": \"r47\", \"39\": \"r47\", \"40\": \"r47\", \"41\": \"r47\", \"42\": \"r47\", \"43\": \"r47\", \"44\": \"r47\", \"45\": \"r47\", \"46\": \"r47\", \"47\": \"r47\", \"48\": \"r47\", \"49\": \"r47\", \"50\": \"r47\", \"51\": \"r47\", \"52\": \"r47\", \"53\": \"r47\", \"54\": \"r47\", \"55\": \"r47\", \"57\": \"r47\" }, { \"23\": \"r48\", \"24\": \"r48\", \"25\": \"r48\", \"26\": \"r48\", \"27\": \"r48\", \"28\": \"r48\", \"29\": \"r48\", \"30\": \"r48\", \"31\": \"r48\", \"32\": \"r48\", \"33\": \"r48\", \"34\": \"r48\", \"35\": \"r48\", \"36\": \"r48\", \"37\": \"r48\", \"38\": \"r48\", \"39\": \"r48\", \"40\": \"r48\", \"41\": \"r48\", \"42\": \"r48\", \"43\": \"r48\", \"44\": \"r48\", \"45\": \"r48\", \"46\": \"r48\", \"47\": \"r48\", \"48\": \"r48\", \"49\": \"r48\", \"50\": \"r48\", \"51\": \"r48\", \"52\": \"r48\", \"53\": \"r48\", \"54\": \"r48\", \"55\": \"r48\", \"57\": \"r48\" }, { \"4\": 85, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 87, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 89, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r13\", \"24\": \"r13\", \"25\": \"r13\", \"26\": \"r13\", \"27\": \"r13\", \"28\": \"r13\", \"29\": \"r13\", \"30\": \"r13\", \"31\": \"r13\", \"32\": \"r13\", \"33\": \"r13\", \"34\": \"r13\", \"35\": \"r13\", \"36\": \"r13\", \"37\": \"r13\", \"38\": \"r13\", \"39\": \"r13\", \"40\": \"r13\", \"41\": \"r13\", \"42\": \"r13\", \"43\": \"r13\", \"44\": \"r13\", \"45\": \"r13\", \"52\": \"r13\", \"53\": \"r13\", \"54\": \"r13\", \"55\": \"r13\", \"57\": \"r13\" }, { \"23\": \"r37\", \"24\": \"r37\", \"25\": \"r37\", \"26\": \"r37\", \"27\": \"r37\", \"28\": \"r37\", \"29\": \"r37\", \"30\": \"r37\", \"31\": \"r37\", \"32\": \"r37\", \"33\": \"r37\", \"34\": \"r37\", \"35\": \"r37\", \"36\": \"r37\", \"37\": \"r37\", \"38\": \"r37\", \"39\": \"r37\", \"40\": \"r37\", \"41\": \"r37\", \"42\": \"r37\", \"43\": \"r37\", \"44\": \"r37\", \"45\": \"r37\", \"52\": \"r37\", \"53\": \"r37\", \"54\": \"r37\", \"55\": \"r37\", \"57\": \"r37\" }, { \"23\": \"r39\", \"24\": \"r39\", \"25\": \"r39\", \"26\": \"r39\", \"27\": \"r39\", \"28\": \"r39\", \"29\": \"r39\", \"30\": \"r39\", \"31\": \"r39\", \"32\": \"r39\", \"33\": \"r39\", \"34\": \"r39\", \"35\": \"r39\", \"36\": \"r39\", \"37\": \"r39\", \"38\": \"r39\", \"39\": \"r39\", \"40\": \"r39\", \"41\": \"r39\", \"42\": \"r39\", \"43\": \"r39\", \"44\": \"r39\", \"45\": \"r39\", \"46\": \"s56\", \"52\": \"r39\", \"53\": \"r39\", \"54\": \"r39\", \"55\": \"r39\", \"57\": \"r39\" }, { \"23\": \"r41\", \"24\": \"r41\", \"25\": \"r41\", \"26\": \"r41\", \"27\": \"r41\", \"28\": \"r41\", \"29\": \"r41\", \"30\": \"r41\", \"31\": \"r41\", \"32\": \"r41\", \"33\": \"r41\", \"34\": \"r41\", \"35\": \"r41\", \"36\": \"r41\", \"37\": \"r41\", \"38\": \"r41\", \"39\": \"r41\", \"40\": \"r41\", \"41\": \"r41\", \"42\": \"r41\", \"43\": \"r41\", \"44\": \"r41\", \"45\": \"r41\", \"46\": \"r41\", \"52\": \"r41\", \"53\": \"r41\", \"54\": \"r41\", \"55\": \"r41\", \"57\": \"r41\" }, { \"23\": \"r42\", \"24\": \"r42\", \"25\": \"r42\", \"26\": \"r42\", \"27\": \"r42\", \"28\": \"r42\", \"29\": \"r42\", \"30\": \"r42\", \"31\": \"r42\", \"32\": \"r42\", \"33\": \"r42\", \"34\": \"r42\", \"35\": \"r42\", \"36\": \"r42\", \"37\": \"r42\", \"38\": \"r42\", \"39\": \"r42\", \"40\": \"r42\", \"41\": \"r42\", \"42\": \"r42\", \"43\": \"r42\", \"44\": \"r42\", \"45\": \"r42\", \"46\": \"r42\", \"52\": \"r42\", \"53\": \"r42\", \"54\": \"r42\", \"55\": \"r42\", \"57\": \"r42\" }, { \"23\": \"r43\", \"24\": \"r43\", \"25\": \"r43\", \"26\": \"r43\", \"27\": \"r43\", \"28\": \"r43\", \"29\": \"r43\", \"30\": \"r43\", \"31\": \"r43\", \"32\": \"r43\", \"33\": \"r43\", \"34\": \"r43\", \"35\": \"r43\", \"36\": \"r43\", \"37\": \"r43\", \"38\": \"r43\", \"39\": \"r43\", \"40\": \"r43\", \"41\": \"r43\", \"42\": \"r43\", \"43\": \"r43\", \"44\": \"r43\", \"45\": \"r43\", \"46\": \"r43\", \"52\": \"r43\", \"53\": \"r43\", \"54\": \"r43\", \"55\": \"r43\", \"57\": \"r43\" }, { \"23\": \"r44\", \"24\": \"r44\", \"25\": \"r44\", \"26\": \"r44\", \"27\": \"r44\", \"28\": \"r44\", \"29\": \"r44\", \"30\": \"r44\", \"31\": \"r44\", \"32\": \"r44\", \"33\": \"r44\", \"34\": \"r44\", \"35\": \"r44\", \"36\": \"r44\", \"37\": \"r44\", \"38\": \"r44\", \"39\": \"r44\", \"40\": \"r44\", \"41\": \"r44\", \"42\": \"r44\", \"43\": \"r44\", \"44\": \"r44\", \"45\": \"r44\", \"46\": \"r44\", \"52\": \"r44\", \"53\": \"r44\", \"54\": \"r44\", \"55\": \"r44\", \"57\": \"r44\" }, { \"23\": \"r45\", \"24\": \"r45\", \"25\": \"r45\", \"26\": \"r45\", \"27\": \"r45\", \"28\": \"r45\", \"29\": \"r45\", \"30\": \"r45\", \"31\": \"r45\", \"32\": \"r45\", \"33\": \"r45\", \"34\": \"r45\", \"35\": \"r45\", \"36\": \"r45\", \"37\": \"r45\", \"38\": \"r45\", \"39\": \"r45\", \"40\": \"r45\", \"41\": \"r45\", \"42\": \"r45\", \"43\": \"r45\", \"44\": \"r45\", \"45\": \"r45\", \"46\": \"r45\", \"52\": \"r45\", \"53\": \"r45\", \"54\": \"r45\", \"55\": \"r45\", \"57\": \"r45\" }, { \"23\": \"r46\", \"24\": \"r46\", \"25\": \"r46\", \"26\": \"r46\", \"27\": \"r46\", \"28\": \"r46\", \"29\": \"r46\", \"30\": \"r46\", \"31\": \"r46\", \"32\": \"r46\", \"33\": \"r46\", \"34\": \"r46\", \"35\": \"r46\", \"36\": \"r46\", \"37\": \"r46\", \"38\": \"r46\", \"39\": \"r46\", \"40\": \"r46\", \"41\": \"r46\", \"42\": \"r46\", \"43\": \"r46\", \"44\": \"r46\", \"45\": \"r46\", \"46\": \"r46\", \"52\": \"r46\", \"53\": \"r46\", \"54\": \"r46\", \"55\": \"r46\", \"57\": \"r46\" }, { \"23\": \"r40\", \"24\": \"r40\", \"25\": \"r40\", \"26\": \"r40\", \"27\": \"r40\", \"28\": \"r40\", \"29\": \"r40\", \"30\": \"r40\", \"31\": \"r40\", \"32\": \"r40\", \"33\": \"r40\", \"34\": \"r40\", \"35\": \"r40\", \"36\": \"r40\", \"37\": \"r40\", \"38\": \"r40\", \"39\": \"r40\", \"40\": \"r40\", \"41\": \"r40\", \"42\": \"r40\", \"43\": \"r40\", \"44\": \"r40\", \"45\": \"r40\", \"52\": \"r40\", \"53\": \"r40\", \"54\": \"r40\", \"55\": \"r40\", \"57\": \"r40\" }, { \"25\": \"s12\", \"31\": \"s58\" }, { \"23\": \"r18\", \"24\": \"r18\", \"25\": \"r18\", \"26\": \"r18\", \"27\": \"r18\", \"28\": \"r18\", \"29\": \"r18\", \"30\": \"r18\", \"31\": \"r18\", \"32\": \"r18\", \"33\": \"r18\", \"34\": \"r18\", \"35\": \"r18\", \"36\": \"r18\", \"37\": \"r18\", \"38\": \"r18\", \"39\": \"r18\", \"40\": \"r18\", \"41\": \"r18\", \"42\": \"r18\", \"43\": \"r18\", \"44\": \"r18\", \"45\": \"r18\", \"52\": \"r18\", \"53\": \"r18\", \"54\": \"r18\", \"55\": \"r18\", \"57\": \"r18\" }, { \"25\": \"s12\", \"31\": \"s60\" }, { \"23\": \"r19\", \"24\": \"r19\", \"25\": \"r19\", \"26\": \"r19\", \"27\": \"r19\", \"28\": \"r19\", \"29\": \"r19\", \"30\": \"r19\", \"31\": \"r19\", \"32\": \"r19\", \"33\": \"r19\", \"34\": \"r19\", \"35\": \"r19\", \"36\": \"r19\", \"37\": \"r19\", \"38\": \"r19\", \"39\": \"r19\", \"40\": \"r19\", \"41\": \"r19\", \"42\": \"r19\", \"43\": \"r19\", \"44\": \"r19\", \"45\": \"r19\", \"52\": \"r19\", \"53\": \"r19\", \"54\": \"r19\", \"55\": \"r19\", \"57\": \"r19\" }, { \"25\": \"s12\", \"31\": \"s62\" }, { \"23\": \"r20\", \"24\": \"r20\", \"25\": \"r20\", \"26\": \"r20\", \"27\": \"r20\", \"28\": \"r20\", \"29\": \"r20\", \"30\": \"r20\", \"31\": \"r20\", \"32\": \"r20\", \"33\": \"r20\", \"34\": \"r20\", \"35\": \"r20\", \"36\": \"r20\", \"37\": \"r20\", \"38\": \"r20\", \"39\": \"r20\", \"40\": \"r20\", \"41\": \"r20\", \"42\": \"r20\", \"43\": \"r20\", \"44\": \"r20\", \"45\": \"r20\", \"52\": \"r20\", \"53\": \"r20\", \"54\": \"r20\", \"55\": \"r20\", \"57\": \"r20\" }, { \"25\": \"s12\", \"31\": \"s64\" }, { \"23\": \"r21\", \"24\": \"r21\", \"25\": \"r21\", \"26\": \"r21\", \"27\": \"r21\", \"28\": \"r21\", \"29\": \"r21\", \"30\": \"r21\", \"31\": \"r21\", \"32\": \"r21\", \"33\": \"r21\", \"34\": \"r21\", \"35\": \"r21\", \"36\": \"r21\", \"37\": \"r21\", \"38\": \"r21\", \"39\": \"r21\", \"40\": \"r21\", \"41\": \"r21\", \"42\": \"r21\", \"43\": \"r21\", \"44\": \"r21\", \"45\": \"r21\", \"52\": \"r21\", \"53\": \"r21\", \"54\": \"r21\", \"55\": \"r21\", \"57\": \"r21\" }, { \"56\": \"s72\" }, { \"56\": \"r55\" }, { \"10\": 70, \"20\": 73, \"21\": 75, \"22\": 76, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r56\", \"58\": \"s74\" }, { \"24\": \"r62\", \"28\": \"r62\", \"35\": \"r62\", \"36\": \"r62\", \"37\": \"r62\", \"38\": \"r62\", \"39\": \"r62\", \"40\": \"r62\", \"41\": \"r62\", \"42\": \"r62\", \"43\": \"r62\", \"44\": \"r62\", \"45\": \"r62\", \"56\": \"r62\", \"58\": \"r62\" }, { \"24\": \"r63\", \"28\": \"r63\", \"35\": \"r63\", \"36\": \"r63\", \"37\": \"r63\", \"38\": \"r63\", \"39\": \"r63\", \"40\": \"r63\", \"41\": \"r63\", \"42\": \"r63\", \"43\": \"r63\", \"44\": \"r63\", \"45\": \"r63\", \"56\": \"r63\", \"58\": \"r63\" }, { \"24\": \"r64\", \"28\": \"r64\", \"35\": \"r64\", \"36\": \"r64\", \"37\": \"r64\", \"38\": \"r64\", \"39\": \"r64\", \"40\": \"r64\", \"41\": \"r64\", \"42\": \"r64\", \"43\": \"r64\", \"44\": \"r64\", \"45\": \"r64\", \"56\": \"r64\", \"58\": \"r64\" }, { \"24\": \"r65\", \"28\": \"r65\", \"35\": \"r65\", \"36\": \"r65\", \"37\": \"r65\", \"38\": \"r65\", \"39\": \"r65\", \"40\": \"r65\", \"41\": \"r65\", \"42\": \"r65\", \"43\": \"r65\", \"44\": \"r65\", \"45\": \"r65\", \"56\": \"r65\", \"58\": \"r65\" }, { \"23\": \"r52\", \"24\": \"r52\", \"25\": \"r52\", \"26\": \"r52\", \"27\": \"r52\", \"28\": \"r52\", \"29\": \"r52\", \"30\": \"r52\", \"31\": \"r52\", \"32\": \"r52\", \"33\": \"r52\", \"34\": \"r52\", \"35\": \"r52\", \"36\": \"r52\", \"37\": \"r52\", \"38\": \"r52\", \"39\": \"r52\", \"40\": \"r52\", \"41\": \"r52\", \"42\": \"r52\", \"43\": \"r52\", \"44\": \"r52\", \"45\": \"r52\", \"46\": \"r52\", \"47\": \"r52\", \"48\": \"r52\", \"49\": \"r52\", \"50\": \"r52\", \"51\": \"r52\", \"52\": \"r52\", \"53\": \"r52\", \"54\": \"r52\", \"55\": \"r52\", \"57\": \"r52\" }, { \"56\": \"r57\" }, { \"10\": 70, \"21\": 77, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r62\", \"58\": \"s68\" }, { \"56\": \"r59\" }, { \"10\": 70, \"20\": 79, \"21\": 75, \"22\": 76, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r63\", \"58\": \"s80\" }, { \"10\": 70, \"18\": 78, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"56\": \"r58\" }, { \"56\": \"r60\" }, { \"10\": 70, \"21\": 81, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r62\", \"58\": \"s68\" }, { \"10\": 70, \"18\": 82, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"56\": \"r61\" }, { \"56\": \"s84\" }, { \"23\": \"r53\", \"24\": \"r53\", \"25\": \"r53\", \"26\": \"r53\", \"27\": \"r53\", \"28\": \"r53\", \"29\": \"r53\", \"30\": \"r53\", \"31\": \"r53\", \"32\": \"r53\", \"33\": \"r53\", \"34\": \"r53\", \"35\": \"r53\", \"36\": \"r53\", \"37\": \"r53\", \"38\": \"r53\", \"39\": \"r53\", \"40\": \"r53\", \"41\": \"r53\", \"42\": \"r53\", \"43\": \"r53\", \"44\": \"r53\", \"45\": \"r53\", \"46\": \"r53\", \"47\": \"r53\", \"48\": \"r53\", \"49\": \"r53\", \"50\": \"r53\", \"51\": \"r53\", \"52\": \"r53\", \"53\": \"r53\", \"54\": \"r53\", \"55\": \"r53\", \"57\": \"r53\" }, { \"25\": \"s12\", \"31\": \"s86\" }, { \"23\": \"r49\", \"24\": \"r49\", \"25\": \"r49\", \"26\": \"r49\", \"27\": \"r49\", \"28\": \"r49\", \"29\": \"r49\", \"30\": \"r49\", \"31\": \"r49\", \"32\": \"r49\", \"33\": \"r49\", \"34\": \"r49\", \"35\": \"r49\", \"36\": \"r49\", \"37\": \"r49\", \"38\": \"r49\", \"39\": \"r49\", \"40\": \"r49\", \"41\": \"r49\", \"42\": \"r49\", \"43\": \"r49\", \"44\": \"r49\", \"45\": \"r49\", \"46\": \"r49\", \"47\": \"r49\", \"48\": \"r49\", \"49\": \"r49\", \"50\": \"r49\", \"51\": \"r49\", \"52\": \"r49\", \"53\": \"r49\", \"54\": \"r49\", \"55\": \"r49\", \"57\": \"r49\" }, { \"25\": \"s12\", \"31\": \"s88\" }, { \"23\": \"r50\", \"24\": \"r50\", \"25\": \"r50\", \"26\": \"r50\", \"27\": \"r50\", \"28\": \"r50\", \"29\": \"r50\", \"30\": \"r50\", \"31\": \"r50\", \"32\": \"r50\", \"33\": \"r50\", \"34\": \"r50\", \"35\": \"r50\", \"36\": \"r50\", \"37\": \"r50\", \"38\": \"r50\", \"39\": \"r50\", \"40\": \"r50\", \"41\": \"r50\", \"42\": \"r50\", \"43\": \"r50\", \"44\": \"r50\", \"45\": \"r50\", \"46\": \"r50\", \"47\": \"r50\", \"48\": \"r50\", \"49\": \"r50\", \"50\": \"r50\", \"51\": \"r50\", \"52\": \"r50\", \"53\": \"r50\", \"54\": \"r50\", \"55\": \"r50\", \"57\": \"r50\" }, { \"25\": \"s12\", \"31\": \"s90\" }, { \"23\": \"r51\", \"24\": \"r51\", \"25\": \"r51\", \"26\": \"r51\", \"27\": \"r51\", \"28\": \"r51\", \"29\": \"r51\", \"30\": \"r51\", \"31\": \"r51\", \"32\": \"r51\", \"33\": \"r51\", \"34\": \"r51\", \"35\": \"r51\", \"36\": \"r51\", \"37\": \"r51\", \"38\": \"r51\", \"39\": \"r51\", \"40\": \"r51\", \"41\": \"r51\", \"42\": \"r51\", \"43\": \"r51\", \"44\": \"r51\", \"45\": \"r51\", \"46\": \"r51\", \"47\": \"r51\", \"48\": \"r51\", \"49\": \"r51\", \"50\": \"r51\", \"51\": \"r51\", \"52\": \"r51\", \"53\": \"r51\", \"54\": \"r51\", \"55\": \"r51\", \"57\": \"r51\" }];\n\n/**\n * Parsing stack.\n */\nvar stack = [];\n\n/**\n * Tokenizer instance.\n */\nvar tokenizer = void 0;\n/**\n * Generic tokenizer used by the parser in the Syntax tool.\n *\n * https://www.npmjs.com/package/syntax-cli\n *\n * See `--custom-tokinzer` to skip this generation, and use a custom one.\n */\n\nvar lexRules = [[/^#[^\\n]+/, function () {/* skip comments */}], [/^\\s+/, function () {/* skip whitespace */}], [/^-/, function () {\n  return 'DASH';\n}], [/^\\//, function () {\n  return 'CHAR';\n}], [/^#/, function () {\n  return 'CHAR';\n}], [/^\\|/, function () {\n  return 'CHAR';\n}], [/^\\./, function () {\n  return 'CHAR';\n}], [/^\\{/, function () {\n  return 'CHAR';\n}], [/^\\{\\d+\\}/, function () {\n  return 'RANGE_EXACT';\n}], [/^\\{\\d+,\\}/, function () {\n  return 'RANGE_OPEN';\n}], [/^\\{\\d+,\\d+\\}/, function () {\n  return 'RANGE_CLOSED';\n}], [/^\\\\k<(([\\u0041-\\u005a\\u0061-\\u007a\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e-\\u066f\\u0671-\\u06d3\\u06d5\\u06e5-\\u06e6\\u06ee-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4-\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc-\\u09dd\\u09df-\\u09e1\\u09f0-\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0-\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c-\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60-\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0-\\u0ce1\\u0cf1-\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32-\\u0e33\\u0e40-\\u0e46\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2-\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065-\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae-\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5-\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a-\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd-\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5-\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd23\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udfe0-\\udff6]|\\ud804[\\udc03-\\udc37\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd44\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud805[\\udc00-\\udc34\\udc47-\\udc4a\\udc5f\\udc80-\\udcaf\\udcc4-\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udeb8\\udf00-\\udf1a]|\\ud806[\\udc00-\\udc2b\\udca0-\\udcdf\\udcff\\udda0-\\udda7\\uddaa-\\uddd0\\udde1\\udde3\\ude00\\ude0b-\\ude32\\ude3a\\ude50\\ude5c-\\ude89\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc2e\\udc40\\udc72-\\udc8f\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd30\\udd46\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd89\\udd98\\udee0-\\udef2]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf50\\udf93-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud838[\\udd00-\\udd2c\\udd37-\\udd3d\\udd4e\\udec0-\\udeeb]|\\ud83a[\\udc00-\\udcc4\\udd00-\\udd43\\udd4b]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\}))(([\\u0030-\\u0039\\u0041-\\u005a\\u005f\\u0061-\\u007a\\u00aa\\u00b5\\u00b7\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u07fd\\u0800-\\u082d\\u0840-\\u085b\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u08d3-\\u08e1\\u08e3-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u09fc\\u09fe\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0af9-\\u0aff\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c5a\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c80-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d00-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d54-\\u0d57\\u0d5f-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1369-\\u1371\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19da\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1cd0-\\u1cd2\\u1cd4-\\u1cfa\\u1d00-\\u1df9\\u1dfb-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua8fd-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udca0-\\udca9\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00-\\ude03\\ude05-\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd27\\udd30-\\udd39\\udf00-\\udf1c\\udf27\\udf30-\\udf50\\udfe0-\\udff6]|\\ud804[\\udc00-\\udc46\\udc66-\\udc6f\\udc7f-\\udcba\\udcd0-\\udce8\\udcf0-\\udcf9\\udd00-\\udd34\\udd36-\\udd3f\\udd44-\\udd46\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddc9-\\uddcc\\uddd0-\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude37\\ude3e\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udeea\\udef0-\\udef9\\udf00-\\udf03\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3b-\\udf44\\udf47-\\udf48\\udf4b-\\udf4d\\udf50\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc00-\\udc4a\\udc50-\\udc59\\udc5e-\\udc5f\\udc80-\\udcc5\\udcc7\\udcd0-\\udcd9\\udd80-\\uddb5\\uddb8-\\uddc0\\uddd8-\\udddd\\ude00-\\ude40\\ude44\\ude50-\\ude59\\ude80-\\udeb8\\udec0-\\udec9\\udf00-\\udf1a\\udf1d-\\udf2b\\udf30-\\udf39]|\\ud806[\\udc00-\\udc3a\\udca0-\\udce9\\udcff\\udda0-\\udda7\\uddaa-\\uddd7\\uddda-\\udde1\\udde3-\\udde4\\ude00-\\ude3e\\ude47\\ude50-\\ude99\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc36\\udc38-\\udc40\\udc50-\\udc59\\udc72-\\udc8f\\udc92-\\udca7\\udca9-\\udcb6\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd36\\udd3a\\udd3c-\\udd3d\\udd3f-\\udd47\\udd50-\\udd59\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd8e\\udd90-\\udd91\\udd93-\\udd98\\udda0-\\udda9\\udee0-\\udef6]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude60-\\ude69\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf50-\\udf59\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf4f-\\udf87\\udf8f-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d-\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb\\udfce-\\udfff]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23-\\udc24\\udc26-\\udc2a\\udd00-\\udd2c\\udd30-\\udd3d\\udd40-\\udd49\\udd4e\\udec0-\\udef9]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6\\udd00-\\udd4b\\udd50-\\udd59]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\})|[\\u200c\\u200d])*>/, function () {\n  var groupName = yytext.slice(3, -1);\n  validateUnicodeGroupName(groupName, this.getCurrentState());\n  return 'NAMED_GROUP_REF';\n}], [/^\\\\b/, function () {\n  return 'ESC_b';\n}], [/^\\\\B/, function () {\n  return 'ESC_B';\n}], [/^\\\\c[a-zA-Z]/, function () {\n  return 'CTRL_CH';\n}], [/^\\\\0\\d{1,2}/, function () {\n  return 'OCT_CODE';\n}], [/^\\\\0/, function () {\n  return 'DEC_CODE';\n}], [/^\\\\\\d{1,3}/, function () {\n  return 'DEC_CODE';\n}], [/^\\\\u[dD][89abAB][0-9a-fA-F]{2}\\\\u[dD][c-fC-F][0-9a-fA-F]{2}/, function () {\n  return 'U_CODE_SURROGATE';\n}], [/^\\\\u\\{[0-9a-fA-F]{1,}\\}/, function () {\n  return 'U_CODE';\n}], [/^\\\\u[0-9a-fA-F]{4}/, function () {\n  return 'U_CODE';\n}], [/^\\\\[pP]\\{\\w+(?:=\\w+)?\\}/, function () {\n  return 'U_PROP_VALUE_EXP';\n}], [/^\\\\x[0-9a-fA-F]{2}/, function () {\n  return 'HEX_CODE';\n}], [/^\\\\[tnrdDsSwWvf]/, function () {\n  return 'META_CHAR';\n}], [/^\\\\\\//, function () {\n  return 'ESC_CHAR';\n}], [/^\\\\[ #]/, function () {\n  return 'ESC_CHAR';\n}], [/^\\\\[\\^\\$\\.\\*\\+\\?\\(\\)\\\\\\[\\]\\{\\}\\|\\/]/, function () {\n  return 'ESC_CHAR';\n}], [/^\\\\[^*?+\\[()\\\\|]/, function () {\n  var s = this.getCurrentState();\n  if (s === 'u_class' && yytext === \"\\\\-\") {\n    return 'ESC_CHAR';\n  } else if (s === 'u' || s === 'xu' || s === 'u_class') {\n    throw new SyntaxError('invalid Unicode escape ' + yytext);\n  }\n  return 'ESC_CHAR';\n}], [/^\\(/, function () {\n  return 'CHAR';\n}], [/^\\)/, function () {\n  return 'CHAR';\n}], [/^\\(\\?=/, function () {\n  return 'POS_LA_ASSERT';\n}], [/^\\(\\?!/, function () {\n  return 'NEG_LA_ASSERT';\n}], [/^\\(\\?<=/, function () {\n  return 'POS_LB_ASSERT';\n}], [/^\\(\\?<!/, function () {\n  return 'NEG_LB_ASSERT';\n}], [/^\\(\\?:/, function () {\n  return 'NON_CAPTURE_GROUP';\n}], [/^\\(\\?<(([\\u0041-\\u005a\\u0061-\\u007a\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e-\\u066f\\u0671-\\u06d3\\u06d5\\u06e5-\\u06e6\\u06ee-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4-\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc-\\u09dd\\u09df-\\u09e1\\u09f0-\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0-\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c-\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60-\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0-\\u0ce1\\u0cf1-\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32-\\u0e33\\u0e40-\\u0e46\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2-\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065-\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae-\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5-\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a-\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd-\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5-\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd23\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udfe0-\\udff6]|\\ud804[\\udc03-\\udc37\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd44\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud805[\\udc00-\\udc34\\udc47-\\udc4a\\udc5f\\udc80-\\udcaf\\udcc4-\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udeb8\\udf00-\\udf1a]|\\ud806[\\udc00-\\udc2b\\udca0-\\udcdf\\udcff\\udda0-\\udda7\\uddaa-\\uddd0\\udde1\\udde3\\ude00\\ude0b-\\ude32\\ude3a\\ude50\\ude5c-\\ude89\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc2e\\udc40\\udc72-\\udc8f\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd30\\udd46\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd89\\udd98\\udee0-\\udef2]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf50\\udf93-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud838[\\udd00-\\udd2c\\udd37-\\udd3d\\udd4e\\udec0-\\udeeb]|\\ud83a[\\udc00-\\udcc4\\udd00-\\udd43\\udd4b]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\}))(([\\u0030-\\u0039\\u0041-\\u005a\\u005f\\u0061-\\u007a\\u00aa\\u00b5\\u00b7\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u07fd\\u0800-\\u082d\\u0840-\\u085b\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u08d3-\\u08e1\\u08e3-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u09fc\\u09fe\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0af9-\\u0aff\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c5a\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c80-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d00-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d54-\\u0d57\\u0d5f-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1369-\\u1371\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19da\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1cd0-\\u1cd2\\u1cd4-\\u1cfa\\u1d00-\\u1df9\\u1dfb-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua8fd-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udca0-\\udca9\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00-\\ude03\\ude05-\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd27\\udd30-\\udd39\\udf00-\\udf1c\\udf27\\udf30-\\udf50\\udfe0-\\udff6]|\\ud804[\\udc00-\\udc46\\udc66-\\udc6f\\udc7f-\\udcba\\udcd0-\\udce8\\udcf0-\\udcf9\\udd00-\\udd34\\udd36-\\udd3f\\udd44-\\udd46\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddc9-\\uddcc\\uddd0-\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude37\\ude3e\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udeea\\udef0-\\udef9\\udf00-\\udf03\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3b-\\udf44\\udf47-\\udf48\\udf4b-\\udf4d\\udf50\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc00-\\udc4a\\udc50-\\udc59\\udc5e-\\udc5f\\udc80-\\udcc5\\udcc7\\udcd0-\\udcd9\\udd80-\\uddb5\\uddb8-\\uddc0\\uddd8-\\udddd\\ude00-\\ude40\\ude44\\ude50-\\ude59\\ude80-\\udeb8\\udec0-\\udec9\\udf00-\\udf1a\\udf1d-\\udf2b\\udf30-\\udf39]|\\ud806[\\udc00-\\udc3a\\udca0-\\udce9\\udcff\\udda0-\\udda7\\uddaa-\\uddd7\\uddda-\\udde1\\udde3-\\udde4\\ude00-\\ude3e\\ude47\\ude50-\\ude99\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc36\\udc38-\\udc40\\udc50-\\udc59\\udc72-\\udc8f\\udc92-\\udca7\\udca9-\\udcb6\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd36\\udd3a\\udd3c-\\udd3d\\udd3f-\\udd47\\udd50-\\udd59\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd8e\\udd90-\\udd91\\udd93-\\udd98\\udda0-\\udda9\\udee0-\\udef6]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude60-\\ude69\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf50-\\udf59\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf4f-\\udf87\\udf8f-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d-\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb\\udfce-\\udfff]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23-\\udc24\\udc26-\\udc2a\\udd00-\\udd2c\\udd30-\\udd3d\\udd40-\\udd49\\udd4e\\udec0-\\udef9]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6\\udd00-\\udd4b\\udd50-\\udd59]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\})|[\\u200c\\u200d])*>/, function () {\n  yytext = yytext.slice(3, -1);\n  validateUnicodeGroupName(yytext, this.getCurrentState());\n  return 'NAMED_CAPTURE_GROUP';\n}], [/^\\(/, function () {\n  return 'L_PAREN';\n}], [/^\\)/, function () {\n  return 'R_PAREN';\n}], [/^[*?+[^$]/, function () {\n  return 'CHAR';\n}], [/^\\\\\\]/, function () {\n  return 'ESC_CHAR';\n}], [/^\\]/, function () {\n  this.popState();return 'R_BRACKET';\n}], [/^\\^/, function () {\n  return 'BOS';\n}], [/^\\$/, function () {\n  return 'EOS';\n}], [/^\\*/, function () {\n  return 'STAR';\n}], [/^\\?/, function () {\n  return 'Q_MARK';\n}], [/^\\+/, function () {\n  return 'PLUS';\n}], [/^\\|/, function () {\n  return 'BAR';\n}], [/^\\./, function () {\n  return 'ANY';\n}], [/^\\//, function () {\n  return 'SLASH';\n}], [/^[^*?+\\[()\\\\|]/, function () {\n  return 'CHAR';\n}], [/^\\[\\^/, function () {\n  var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'NEG_CLASS';\n}], [/^\\[/, function () {\n  var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'L_BRACKET';\n}]];\nvar lexRulesByConditions = { \"INITIAL\": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"u\": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"xu\": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"x\": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"u_class\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"class\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51] };\n\nvar EOF_TOKEN = {\n  type: EOF,\n  value: ''\n};\n\ntokenizer = {\n  initString: function initString(string) {\n    this._string = string;\n    this._cursor = 0;\n\n    this._states = ['INITIAL'];\n    this._tokensQueue = [];\n\n    this._currentLine = 1;\n    this._currentColumn = 0;\n    this._currentLineBeginOffset = 0;\n\n    /**\n     * Matched token location data.\n     */\n    this._tokenStartOffset = 0;\n    this._tokenEndOffset = 0;\n    this._tokenStartLine = 1;\n    this._tokenEndLine = 1;\n    this._tokenStartColumn = 0;\n    this._tokenEndColumn = 0;\n\n    return this;\n  },\n\n\n  /**\n   * Returns tokenizer states.\n   */\n  getStates: function getStates() {\n    return this._states;\n  },\n  getCurrentState: function getCurrentState() {\n    return this._states[this._states.length - 1];\n  },\n  pushState: function pushState(state) {\n    this._states.push(state);\n  },\n  begin: function begin(state) {\n    this.pushState(state);\n  },\n  popState: function popState() {\n    if (this._states.length > 1) {\n      return this._states.pop();\n    }\n    return this._states[0];\n  },\n  getNextToken: function getNextToken() {\n    // Something was queued, return it.\n    if (this._tokensQueue.length > 0) {\n      return this.onToken(this._toToken(this._tokensQueue.shift()));\n    }\n\n    if (!this.hasMoreTokens()) {\n      return this.onToken(EOF_TOKEN);\n    }\n\n    var string = this._string.slice(this._cursor);\n    var lexRulesForState = lexRulesByConditions[this.getCurrentState()];\n\n    for (var i = 0; i < lexRulesForState.length; i++) {\n      var lexRuleIndex = lexRulesForState[i];\n      var lexRule = lexRules[lexRuleIndex];\n\n      var matched = this._match(string, lexRule[0]);\n\n      // Manual handling of EOF token (the end of string). Return it\n      // as `EOF` symbol.\n      if (string === '' && matched === '') {\n        this._cursor++;\n      }\n\n      if (matched !== null) {\n        yytext = matched;\n        yytext.length;\n        var token = lexRule[1].call(this);\n\n        if (!token) {\n          return this.getNextToken();\n        }\n\n        // If multiple tokens are returned, save them to return\n        // on next `getNextToken` call.\n\n        if (Array.isArray(token)) {\n          var tokensToQueue = token.slice(1);\n          token = token[0];\n          if (tokensToQueue.length > 0) {\n            var _tokensQueue;\n\n            (_tokensQueue = this._tokensQueue).unshift.apply(_tokensQueue, _toConsumableArray$8(tokensToQueue));\n          }\n        }\n\n        return this.onToken(this._toToken(token, yytext));\n      }\n    }\n\n    if (this.isEOF()) {\n      this._cursor++;\n      return EOF_TOKEN;\n    }\n\n    this.throwUnexpectedToken(string[0], this._currentLine, this._currentColumn);\n  },\n\n\n  /**\n   * Throws default \"Unexpected token\" exception, showing the actual\n   * line from the source, pointing with the ^ marker to the bad token.\n   * In addition, shows `line:column` location.\n   */\n  throwUnexpectedToken: function throwUnexpectedToken(symbol, line, column) {\n    var lineSource = this._string.split('\\n')[line - 1];\n    var lineData = '';\n\n    if (lineSource) {\n      var pad = ' '.repeat(column);\n      lineData = '\\n\\n' + lineSource + '\\n' + pad + '^\\n';\n    }\n\n    throw new SyntaxError(lineData + 'Unexpected token: \"' + symbol + '\" ' + ('at ' + line + ':' + column + '.'));\n  },\n  getCursor: function getCursor() {\n    return this._cursor;\n  },\n  getCurrentLine: function getCurrentLine() {\n    return this._currentLine;\n  },\n  getCurrentColumn: function getCurrentColumn() {\n    return this._currentColumn;\n  },\n  _captureLocation: function _captureLocation(matched) {\n    var nlRe = /\\n/g;\n\n    // Absolute offsets.\n    this._tokenStartOffset = this._cursor;\n\n    // Line-based locations, start.\n    this._tokenStartLine = this._currentLine;\n    this._tokenStartColumn = this._tokenStartOffset - this._currentLineBeginOffset;\n\n    // Extract `\\n` in the matched token.\n    var nlMatch = void 0;\n    while ((nlMatch = nlRe.exec(matched)) !== null) {\n      this._currentLine++;\n      this._currentLineBeginOffset = this._tokenStartOffset + nlMatch.index + 1;\n    }\n\n    this._tokenEndOffset = this._cursor + matched.length;\n\n    // Line-based locations, end.\n    this._tokenEndLine = this._currentLine;\n    this._tokenEndColumn = this._currentColumn = this._tokenEndOffset - this._currentLineBeginOffset;\n  },\n  _toToken: function _toToken(tokenType) {\n    var yytext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n    return {\n      // Basic data.\n      type: tokenType,\n      value: yytext,\n\n      // Location data.\n      startOffset: this._tokenStartOffset,\n      endOffset: this._tokenEndOffset,\n      startLine: this._tokenStartLine,\n      endLine: this._tokenEndLine,\n      startColumn: this._tokenStartColumn,\n      endColumn: this._tokenEndColumn\n    };\n  },\n  isEOF: function isEOF() {\n    return this._cursor === this._string.length;\n  },\n  hasMoreTokens: function hasMoreTokens() {\n    return this._cursor <= this._string.length;\n  },\n  _match: function _match(string, regexp) {\n    var matched = string.match(regexp);\n    if (matched) {\n      // Handle `\\n` in the matched token to track line numbers.\n      this._captureLocation(matched[0]);\n      this._cursor += matched[0].length;\n      return matched[0];\n    }\n    return null;\n  },\n\n\n  /**\n   * Allows analyzing, and transforming token. Default implementation\n   * just passes the token through.\n   */\n  onToken: function onToken(token) {\n    return token;\n  }\n};\n\n/**\n * Expose tokenizer so it can be accessed in semantic actions.\n */\nyy.lexer = tokenizer;\nyy.tokenizer = tokenizer;\n\n/**\n * Global parsing options. Some options can be shadowed per\n * each `parse` call, if the optations are passed.\n *\n * Initalized to the `captureLocations` which is passed\n * from the generator. Other options can be added at runtime.\n */\nyy.options = {\n  captureLocations: true\n};\n\n/**\n * Parsing module.\n */\nvar yyparse = {\n  /**\n   * Sets global parsing options.\n   */\n  setOptions: function setOptions(options) {\n    yy.options = options;\n    return this;\n  },\n\n\n  /**\n   * Returns parsing options.\n   */\n  getOptions: function getOptions() {\n    return yy.options;\n  },\n\n\n  /**\n   * Parses a string.\n   */\n  parse: function parse(string, parseOptions) {\n    if (!tokenizer) {\n      throw new Error('Tokenizer instance wasn\\'t specified.');\n    }\n\n    tokenizer.initString(string);\n\n    /**\n     * If parse options are passed, override global parse options for\n     * this call, and later restore global options.\n     */\n    var globalOptions = yy.options;\n    if (parseOptions) {\n      yy.options = Object.assign({}, yy.options, parseOptions);\n    }\n\n    /**\n     * Allow callers to do setup work based on the\n     * parsing string, and passed options.\n     */\n    yyparse.onParseBegin(string, tokenizer, yy.options);\n\n    stack.length = 0;\n    stack.push(0);\n\n    var token = tokenizer.getNextToken();\n    var shiftedToken = null;\n\n    do {\n      if (!token) {\n        // Restore options.\n        yy.options = globalOptions;\n        unexpectedEndOfInput();\n      }\n\n      var state = stack[stack.length - 1];\n      var column = tokens[token.type];\n\n      if (!table[state].hasOwnProperty(column)) {\n        yy.options = globalOptions;\n        unexpectedToken(token);\n      }\n\n      var entry = table[state][column];\n\n      // Shift action.\n      if (entry[0] === 's') {\n        var _loc2 = null;\n\n        if (yy.options.captureLocations) {\n          _loc2 = {\n            startOffset: token.startOffset,\n            endOffset: token.endOffset,\n            startLine: token.startLine,\n            endLine: token.endLine,\n            startColumn: token.startColumn,\n            endColumn: token.endColumn\n          };\n        }\n\n        shiftedToken = this.onShift(token);\n\n        stack.push({ symbol: tokens[shiftedToken.type], semanticValue: shiftedToken.value, loc: _loc2 }, Number(entry.slice(1)));\n\n        token = tokenizer.getNextToken();\n      }\n\n      // Reduce action.\n      else if (entry[0] === 'r') {\n          var productionNumber = entry.slice(1);\n          var production = productions[productionNumber];\n          var hasSemanticAction = typeof production[2] === 'function';\n          var semanticValueArgs = hasSemanticAction ? [] : null;\n\n          var locationArgs = hasSemanticAction && yy.options.captureLocations ? [] : null;\n\n          if (production[1] !== 0) {\n            var rhsLength = production[1];\n            while (rhsLength-- > 0) {\n              stack.pop();\n              var stackEntry = stack.pop();\n\n              if (hasSemanticAction) {\n                semanticValueArgs.unshift(stackEntry.semanticValue);\n\n                if (locationArgs) {\n                  locationArgs.unshift(stackEntry.loc);\n                }\n              }\n            }\n          }\n\n          var reduceStackEntry = { symbol: production[0] };\n\n          if (hasSemanticAction) {\n            yytext = shiftedToken ? shiftedToken.value : null;\n            shiftedToken ? shiftedToken.value.length : null;\n\n            var semanticActionArgs = locationArgs !== null ? semanticValueArgs.concat(locationArgs) : semanticValueArgs;\n\n            production[2].apply(production, _toConsumableArray$8(semanticActionArgs));\n\n            reduceStackEntry.semanticValue = __;\n\n            if (locationArgs) {\n              reduceStackEntry.loc = __loc;\n            }\n          }\n\n          var nextState = stack[stack.length - 1];\n          var symbolToReduceWith = production[0];\n\n          stack.push(reduceStackEntry, table[nextState][symbolToReduceWith]);\n        }\n\n        // Accept.\n        else if (entry === 'acc') {\n            stack.pop();\n            var parsed = stack.pop();\n\n            if (stack.length !== 1 || stack[0] !== 0 || tokenizer.hasMoreTokens()) {\n              // Restore options.\n              yy.options = globalOptions;\n              unexpectedToken(token);\n            }\n\n            if (parsed.hasOwnProperty('semanticValue')) {\n              yy.options = globalOptions;\n              yyparse.onParseEnd(parsed.semanticValue);\n              return parsed.semanticValue;\n            }\n\n            yyparse.onParseEnd();\n\n            // Restore options.\n            yy.options = globalOptions;\n            return true;\n          }\n    } while (tokenizer.hasMoreTokens() || stack.length > 1);\n  },\n  setTokenizer: function setTokenizer(customTokenizer) {\n    tokenizer = customTokenizer;\n    return yyparse;\n  },\n  getTokenizer: function getTokenizer() {\n    return tokenizer;\n  },\n  onParseBegin: function onParseBegin(string, tokenizer, options) {},\n  onParseEnd: function onParseEnd(parsed) {},\n\n\n  /**\n   * Allows analyzing, and transforming shifted token. Default implementation\n   * just passes the token through.\n   */\n  onShift: function onShift(token) {\n    return token;\n  }\n};\n\n/**\n * Tracks capturing groups.\n */\nvar capturingGroupsCount = 0;\n\n/**\n * Tracks named groups.\n */\nvar namedGroups = {};\n\n/**\n * Parsing string.\n */\nvar parsingString = '';\n\nyyparse.onParseBegin = function (string, lexer) {\n  parsingString = string;\n  capturingGroupsCount = 0;\n  namedGroups = {};\n\n  var lastSlash = string.lastIndexOf('/');\n  var flags = string.slice(lastSlash);\n\n  if (flags.includes('x') && flags.includes('u')) {\n    lexer.pushState('xu');\n  } else {\n    if (flags.includes('x')) {\n      lexer.pushState('x');\n    }\n    if (flags.includes('u')) {\n      lexer.pushState('u');\n    }\n  }\n};\n\n/**\n * On shifting `(` remember its number to used on reduce.\n */\nyyparse.onShift = function (token) {\n  if (token.type === 'L_PAREN' || token.type === 'NAMED_CAPTURE_GROUP') {\n    token.value = new String(token.value);\n    token.value.groupNumber = ++capturingGroupsCount;\n  }\n  return token;\n};\n\n/**\n * Extracts ranges from the range string.\n */\nfunction getRange(text) {\n  var range = text.match(/\\d+/g).map(Number);\n\n  if (Number.isFinite(range[1]) && range[1] < range[0]) {\n    throw new SyntaxError('Numbers out of order in ' + text + ' quantifier');\n  }\n\n  return range;\n}\n\n/**\n * Checks class range\n */\nfunction checkClassRange(from, to) {\n  if (from.kind === 'control' || to.kind === 'control' || !isNaN(from.codePoint) && !isNaN(to.codePoint) && from.codePoint > to.codePoint) {\n    throw new SyntaxError('Range ' + from.value + '-' + to.value + ' out of order in character class');\n  }\n}\n\n// ---------------------- Unicode property -------------------------------------------\n\nvar unicodeProperties = parserUnicodeProperties;\n\n/**\n * Unicode property.\n */\nfunction UnicodeProperty(matched, loc) {\n  var negative = matched[1] === 'P';\n  var separatorIdx = matched.indexOf('=');\n\n  var name = matched.slice(3, separatorIdx !== -1 ? separatorIdx : -1);\n  var value = void 0;\n\n  // General_Category allows using only value as a shorthand.\n  var isShorthand = separatorIdx === -1 && unicodeProperties.isGeneralCategoryValue(name);\n\n  // Binary propery name.\n  var isBinaryProperty = separatorIdx === -1 && unicodeProperties.isBinaryPropertyName(name);\n\n  if (isShorthand) {\n    value = name;\n    name = 'General_Category';\n  } else if (isBinaryProperty) {\n    value = name;\n  } else {\n    if (!unicodeProperties.isValidName(name)) {\n      throw new SyntaxError('Invalid unicode property name: ' + name + '.');\n    }\n\n    value = matched.slice(separatorIdx + 1, -1);\n\n    if (!unicodeProperties.isValidValue(name, value)) {\n      throw new SyntaxError('Invalid ' + name + ' unicode property value: ' + value + '.');\n    }\n  }\n\n  return Node({\n    type: 'UnicodeProperty',\n    name: name,\n    value: value,\n    negative: negative,\n    shorthand: isShorthand,\n    binary: isBinaryProperty,\n    canonicalName: unicodeProperties.getCanonicalName(name) || name,\n    canonicalValue: unicodeProperties.getCanonicalValue(value) || value\n  }, loc);\n}\n\n// ----------------------------------------------------------------------------------\n\n\n/**\n * Creates a character node.\n */\nfunction Char(value, kind, loc) {\n  var symbol = void 0;\n  var codePoint = void 0;\n\n  switch (kind) {\n    case 'decimal':\n      {\n        codePoint = Number(value.slice(1));\n        symbol = String.fromCodePoint(codePoint);\n        break;\n      }\n    case 'oct':\n      {\n        codePoint = parseInt(value.slice(1), 8);\n        symbol = String.fromCodePoint(codePoint);\n        break;\n      }\n    case 'hex':\n    case 'unicode':\n      {\n        if (value.lastIndexOf('\\\\u') > 0) {\n          var _value$split$slice = value.split('\\\\u').slice(1),\n              _value$split$slice2 = _slicedToArray$2(_value$split$slice, 2),\n              lead = _value$split$slice2[0],\n              trail = _value$split$slice2[1];\n\n          lead = parseInt(lead, 16);\n          trail = parseInt(trail, 16);\n          codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;\n\n          symbol = String.fromCodePoint(codePoint);\n        } else {\n          var hex = value.slice(2).replace('{', '');\n          codePoint = parseInt(hex, 16);\n          if (codePoint > 0x10ffff) {\n            throw new SyntaxError('Bad character escape sequence: ' + value);\n          }\n\n          symbol = String.fromCodePoint(codePoint);\n        }\n        break;\n      }\n    case 'meta':\n      {\n        switch (value) {\n          case '\\\\t':\n            symbol = '\\t';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\n':\n            symbol = '\\n';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\r':\n            symbol = '\\r';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\v':\n            symbol = '\\v';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\f':\n            symbol = '\\f';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\b':\n            symbol = '\\b';\n            codePoint = symbol.codePointAt(0);\n          case '\\\\0':\n            symbol = '\\0';\n            codePoint = 0;\n          case '.':\n            symbol = '.';\n            codePoint = NaN;\n            break;\n          default:\n            codePoint = NaN;\n        }\n        break;\n      }\n    case 'simple':\n      {\n        symbol = value;\n        codePoint = symbol.codePointAt(0);\n        break;\n      }\n  }\n\n  return Node({\n    type: 'Char',\n    value: value,\n    kind: kind,\n    symbol: symbol,\n    codePoint: codePoint\n  }, loc);\n}\n\n/**\n * Valid flags per current ECMAScript spec and\n * stage 3+ proposals.\n */\nvar validFlags = 'gimsuxy';\n\n/**\n * Checks the flags are valid, and that\n * we don't duplicate flags.\n */\nfunction checkFlags(flags) {\n  var seen = new Set();\n\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = flags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var flag = _step.value;\n\n      if (seen.has(flag) || !validFlags.includes(flag)) {\n        throw new SyntaxError('Invalid flags: ' + flags);\n      }\n      seen.add(flag);\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  return flags.split('').sort().join('');\n}\n\n/**\n * Parses patterns like \\1, \\2, etc. either as a backreference\n * to a group, or a deciaml char code.\n */\nfunction GroupRefOrDecChar(text, textLoc) {\n  var reference = Number(text.slice(1));\n\n  if (reference > 0 && reference <= capturingGroupsCount) {\n    return Node({\n      type: 'Backreference',\n      kind: 'number',\n      number: reference,\n      reference: reference\n    }, textLoc);\n  }\n\n  return Char(text, 'decimal', textLoc);\n}\n\n/**\n * Unicode names.\n */\nvar uReStart = /^\\\\u[0-9a-fA-F]{4}/; // only matches start of string\nvar ucpReStart = /^\\\\u\\{[0-9a-fA-F]{1,}\\}/; // only matches start of string\nvar ucpReAnywhere = /\\\\u\\{[0-9a-fA-F]{1,}\\}/; // matches anywhere in string\n\n/**\n * Validates Unicode group name.\n */\nfunction validateUnicodeGroupName(name, state) {\n  var isUnicodeName = ucpReAnywhere.test(name);\n  var isUnicodeState = state === 'u' || state === 'xu' || state === 'u_class';\n\n  if (isUnicodeName && !isUnicodeState) {\n    throw new SyntaxError('invalid group Unicode name \"' + name + '\", use `u` flag.');\n  }\n\n  return name;\n}\n\n// Matches the following production: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence\n//\n//  RegExpUnicodeEscapeSequence ::\n//    `u` LeadSurrogate `\\u` TrailSurrogate   # as 'leadSurrogate', 'trailSurrogate'\n//    `u` LeadSurrogate                       # as 'leadSurrogateOnly'\n//    `u` TrailSurrogate                      # as 'trailSurrogateOnly'\n//    `u` NonSurrogate                        # as 'nonSurrogate'\n//    `u` `{` CodePoint `}`                   # as 'codePoint'\n//\n//  LeadSurrogate ::\n//    Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xD800 to 0xDBFF        # [dD][89aAbB][0-9a-fA-F]{2}\n//\n//  TrailSurrogate ::\n//    Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xDC00 to 0xDFFF        # [dD][c-fC-F][0-9a-fA-F]{2}\n//\n//  NonSurrogate ::\n//    Hex4Digits but only if the SV of Hex4Digits is not in the inclusive range 0xD800 to 0xDFFF    # [0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2}\n//\n//  CodePoint ::\n//    HexDigits but only if MV of HexDigits ≤ 0x10FFFF                                              # 0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4})\n//\nvar uidRe = /\\\\u(?:([dD][89aAbB][0-9a-fA-F]{2})\\\\u([dD][c-fC-F][0-9a-fA-F]{2})|([dD][89aAbB][0-9a-fA-F]{2})|([dD][c-fC-F][0-9a-fA-F]{2})|([0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2})|\\{(0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4}))\\})/;\n\nfunction decodeUnicodeGroupName(name) {\n  return name.replace(new RegExp(uidRe, 'g'), function (_, leadSurrogate, trailSurrogate, leadSurrogateOnly, trailSurrogateOnly, nonSurrogate, codePoint) {\n    if (leadSurrogate) {\n      return String.fromCodePoint(parseInt(leadSurrogate, 16), parseInt(trailSurrogate, 16));\n    }\n    if (leadSurrogateOnly) {\n      return String.fromCodePoint(parseInt(leadSurrogateOnly, 16));\n    }\n    if (trailSurrogateOnly) {\n      // TODO: Per the spec: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence\n      // > Each `\\u` TrailSurrogate for which the choice of associated `u` LeadSurrogate is ambiguous shall be associated with the nearest possible `u` LeadSurrogate that would otherwise have no corresponding `\\u` TrailSurrogate.\n      return String.fromCodePoint(parseInt(trailSurrogateOnly, 16));\n    }\n    if (nonSurrogate) {\n      return String.fromCodePoint(parseInt(nonSurrogate, 16));\n    }\n    if (codePoint) {\n      return String.fromCodePoint(parseInt(codePoint, 16));\n    }\n    return _;\n  });\n}\n\n/**\n * Extracts from `\\k<foo>` pattern either a backreference\n * to a named capturing group (if it presents), or parses it\n * as a list of char: `\\k`, `<`, `f`, etc.\n */\nfunction NamedGroupRefOrChars(text, textLoc) {\n  var referenceRaw = text.slice(3, -1);\n  var reference = decodeUnicodeGroupName(referenceRaw);\n\n  if (namedGroups.hasOwnProperty(reference)) {\n    return Node({\n      type: 'Backreference',\n      kind: 'name',\n      number: namedGroups[reference],\n      reference: reference,\n      referenceRaw: referenceRaw\n    }, textLoc);\n  }\n\n  // Else `\\k<foo>` should be parsed as a list of `Char`s.\n  // This is really a 0.01% edge case, but we should handle it.\n\n  var startOffset = null;\n  var startLine = null;\n  var endLine = null;\n  var startColumn = null;\n\n  if (textLoc) {\n    startOffset = textLoc.startOffset;\n    startLine = textLoc.startLine;\n    endLine = textLoc.endLine;\n    startColumn = textLoc.startColumn;\n  }\n\n  var charRe = /^[\\w$<>]/;\n  var loc = void 0;\n\n  var chars = [\n  // Init to first \\k, taking 2 symbols.\n  Char(text.slice(1, 2), 'simple', startOffset ? {\n    startLine: startLine,\n    endLine: endLine,\n    startColumn: startColumn,\n    startOffset: startOffset,\n    endOffset: startOffset += 2,\n    endColumn: startColumn += 2\n  } : null)];\n\n  // For \\k\n  chars[0].escaped = true;\n\n  // Other symbols.\n  text = text.slice(2);\n\n  while (text.length > 0) {\n    var matched = null;\n\n    // Unicode, \\u003B or \\u{003B}\n    if ((matched = text.match(uReStart)) || (matched = text.match(ucpReStart))) {\n      if (startOffset) {\n        loc = {\n          startLine: startLine,\n          endLine: endLine,\n          startColumn: startColumn,\n          startOffset: startOffset,\n          endOffset: startOffset += matched[0].length,\n          endColumn: startColumn += matched[0].length\n        };\n      }\n      chars.push(Char(matched[0], 'unicode', loc));\n      text = text.slice(matched[0].length);\n    }\n\n    // Simple char.\n    else if (matched = text.match(charRe)) {\n        if (startOffset) {\n          loc = {\n            startLine: startLine,\n            endLine: endLine,\n            startColumn: startColumn,\n            startOffset: startOffset,\n            endOffset: ++startOffset,\n            endColumn: ++startColumn\n          };\n        }\n        chars.push(Char(matched[0], 'simple', loc));\n        text = text.slice(1);\n      }\n  }\n\n  return chars;\n}\n\n/**\n * Creates an AST node with a location.\n */\nfunction Node(node, loc) {\n  if (yy.options.captureLocations) {\n    node.loc = {\n      source: parsingString.slice(loc.startOffset, loc.endOffset),\n      start: {\n        line: loc.startLine,\n        column: loc.startColumn,\n        offset: loc.startOffset\n      },\n      end: {\n        line: loc.endLine,\n        column: loc.endColumn,\n        offset: loc.endOffset\n      }\n    };\n  }\n  return node;\n}\n\n/**\n * Creates location node.\n */\nfunction loc(start, end) {\n  if (!yy.options.captureLocations) {\n    return null;\n  }\n\n  return {\n    startOffset: start.startOffset,\n    endOffset: end.endOffset,\n    startLine: start.startLine,\n    endLine: end.endLine,\n    startColumn: start.startColumn,\n    endColumn: end.endColumn\n  };\n}\n\nfunction unexpectedToken(token) {\n  if (token.type === EOF) {\n    unexpectedEndOfInput();\n  }\n\n  tokenizer.throwUnexpectedToken(token.value, token.startLine, token.startColumn);\n}\n\nfunction unexpectedEndOfInput() {\n  parseError('Unexpected end of input.');\n}\n\nfunction parseError(message) {\n  throw new SyntaxError(message);\n}\n\nvar regexpTree$3 = yyparse;\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar regexpTreeParser = regexpTree$3;\n\n/**\n * Original parse function.\n */\nvar generatedParseFn = regexpTreeParser.parse.bind(regexpTreeParser);\n\n/**\n * Parses a regular expression.\n *\n * Override original `regexpTreeParser.parse` to convert a value to a string,\n * since in regexp-tree we may pass strings, and RegExp instance.\n */\nregexpTreeParser.parse = function (regexp, options) {\n  return generatedParseFn('' + regexp, options);\n};\n\n// By default do not capture locations; callers may override.\nregexpTreeParser.setOptions({ captureLocations: false });\n\nvar parser$4 = regexpTreeParser;\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar _createClass$6 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$6(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DEFAULT_COLLECTION_PROP = 'expressions';\nvar DEFAULT_SINGLE_PROP = 'expression';\n\n/**\n * NodePath class encapsulates a traversing node,\n * its parent node, property name in the parent node, and\n * an index (in case if a node is part of a collection).\n * It also provides set of methods for AST manipulation.\n */\n\nvar NodePath$3 = function () {\n  /**\n   * NodePath constructor.\n   *\n   * @param Object node - an AST node\n   * @param NodePath parentPath - a nullable parent path\n   * @param string property - property name of the node in the parent\n   * @param number index - index of the node in a collection.\n   */\n  function NodePath(node) {\n    var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    _classCallCheck$6(this, NodePath);\n\n    this.node = node;\n    this.parentPath = parentPath;\n    this.parent = parentPath ? parentPath.node : null;\n    this.property = property;\n    this.index = index;\n  }\n\n  _createClass$6(NodePath, [{\n    key: '_enforceProp',\n    value: function _enforceProp(property) {\n      if (!this.node.hasOwnProperty(property)) {\n        throw new Error('Node of type ' + this.node.type + ' doesn\\'t have \"' + property + '\" collection.');\n      }\n    }\n\n    /**\n     * Sets a node into a children collection or the single child.\n     * By default child nodes are supposed to be under `expressions` property.\n     * An explicit property can be passed.\n     *\n     * @param Object node - a node to set into a collection or as single child\n     * @param number index - index at which to set\n     * @param string property - name of the collection or single property\n     */\n\n  }, {\n    key: 'setChild',\n    value: function setChild(node) {\n      var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\n      var childPath = void 0;\n      if (index != null) {\n        if (!property) {\n          property = DEFAULT_COLLECTION_PROP;\n        }\n        this._enforceProp(property);\n        this.node[property][index] = node;\n        childPath = NodePath.getForNode(node, this, property, index);\n      } else {\n        if (!property) {\n          property = DEFAULT_SINGLE_PROP;\n        }\n        this._enforceProp(property);\n        this.node[property] = node;\n        childPath = NodePath.getForNode(node, this, property, null);\n      }\n      return childPath;\n    }\n\n    /**\n     * Appends a node to a children collection.\n     * By default child nodes are supposed to be under `expressions` property.\n     * An explicit property can be passed.\n     *\n     * @param Object node - a node to set into a collection or as single child\n     * @param string property - name of the collection or single property\n     */\n\n  }, {\n    key: 'appendChild',\n    value: function appendChild(node) {\n      var property = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\n      if (!property) {\n        property = DEFAULT_COLLECTION_PROP;\n      }\n      this._enforceProp(property);\n      var end = this.node[property].length;\n      return this.setChild(node, end, property);\n    }\n\n    /**\n     * Inserts a node into a collection.\n     * By default child nodes are supposed to be under `expressions` property.\n     * An explicit property can be passed.\n     *\n     * @param Object node - a node to insert into a collection\n     * @param number index - index at which to insert\n     * @param string property - name of the collection property\n     */\n\n  }, {\n    key: 'insertChildAt',\n    value: function insertChildAt(node, index) {\n      var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_COLLECTION_PROP;\n\n      this._enforceProp(property);\n\n      this.node[property].splice(index, 0, node);\n\n      // If we inserted a node before the traversing index,\n      // we should increase the later.\n      if (index <= NodePath.getTraversingIndex()) {\n        NodePath.updateTraversingIndex(+1);\n      }\n\n      this._rebuildIndex(this.node, property);\n    }\n\n    /**\n     * Removes a node.\n     */\n\n  }, {\n    key: 'remove',\n    value: function remove() {\n      if (this.isRemoved()) {\n        return;\n      }\n      NodePath.registry.delete(this.node);\n\n      this.node = null;\n\n      if (!this.parent) {\n        return;\n      }\n\n      // A node is in a collection.\n      if (this.index !== null) {\n        this.parent[this.property].splice(this.index, 1);\n\n        // If we remove a node before the traversing index,\n        // we should increase the later.\n        if (this.index <= NodePath.getTraversingIndex()) {\n          NodePath.updateTraversingIndex(-1);\n        }\n\n        // Rebuild index.\n        this._rebuildIndex(this.parent, this.property);\n\n        this.index = null;\n        this.property = null;\n\n        return;\n      }\n\n      // A simple node.\n      delete this.parent[this.property];\n      this.property = null;\n    }\n\n    /**\n     * Rebuilds child nodes index (used on remove/insert).\n     */\n\n  }, {\n    key: '_rebuildIndex',\n    value: function _rebuildIndex(parent, property) {\n      var parentPath = NodePath.getForNode(parent);\n\n      for (var i = 0; i < parent[property].length; i++) {\n        var path = NodePath.getForNode(parent[property][i], parentPath, property, i);\n        path.index = i;\n      }\n    }\n\n    /**\n     * Whether the path was removed.\n     */\n\n  }, {\n    key: 'isRemoved',\n    value: function isRemoved() {\n      return this.node === null;\n    }\n\n    /**\n     * Replaces a node with the passed one.\n     */\n\n  }, {\n    key: 'replace',\n    value: function replace(newNode) {\n      NodePath.registry.delete(this.node);\n\n      this.node = newNode;\n\n      if (!this.parent) {\n        return null;\n      }\n\n      // A node is in a collection.\n      if (this.index !== null) {\n        this.parent[this.property][this.index] = newNode;\n      }\n\n      // A simple node.\n      else {\n          this.parent[this.property] = newNode;\n        }\n\n      // Rebuild the node path for the new node.\n      return NodePath.getForNode(newNode, this.parentPath, this.property, this.index);\n    }\n\n    /**\n     * Updates a node inline.\n     */\n\n  }, {\n    key: 'update',\n    value: function update(nodeProps) {\n      Object.assign(this.node, nodeProps);\n    }\n\n    /**\n     * Returns parent.\n     */\n\n  }, {\n    key: 'getParent',\n    value: function getParent() {\n      return this.parentPath;\n    }\n\n    /**\n     * Returns nth child.\n     */\n\n  }, {\n    key: 'getChild',\n    value: function getChild() {\n      var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      if (this.node.expressions) {\n        return NodePath.getForNode(this.node.expressions[n], this, DEFAULT_COLLECTION_PROP, n);\n      } else if (this.node.expression && n == 0) {\n        return NodePath.getForNode(this.node.expression, this, DEFAULT_SINGLE_PROP);\n      }\n      return null;\n    }\n\n    /**\n     * Whether a path node is syntactically equal to the passed one.\n     *\n     * NOTE: we don't rely on `source` property from the `loc` data\n     * (which would be the fastest comparison), since it might be unsync\n     * after several modifications. We use here simple `JSON.stringify`\n     * excluding the `loc` data.\n     *\n     * @param NodePath other - path to compare to.\n     * @return boolean\n     */\n\n  }, {\n    key: 'hasEqualSource',\n    value: function hasEqualSource(path) {\n      return JSON.stringify(this.node, jsonSkipLoc) === JSON.stringify(path.node, jsonSkipLoc);\n    }\n\n    /**\n     * JSON-encodes a node skipping location.\n     */\n\n  }, {\n    key: 'jsonEncode',\n    value: function jsonEncode() {\n      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          format = _ref.format,\n          useLoc = _ref.useLoc;\n\n      return JSON.stringify(this.node, useLoc ? null : jsonSkipLoc, format);\n    }\n\n    /**\n     * Returns previous sibling.\n     */\n\n  }, {\n    key: 'getPreviousSibling',\n    value: function getPreviousSibling() {\n      if (!this.parent || this.index == null) {\n        return null;\n      }\n      return NodePath.getForNode(this.parent[this.property][this.index - 1], NodePath.getForNode(this.parent), this.property, this.index - 1);\n    }\n\n    /**\n     * Returns next sibling.\n     */\n\n  }, {\n    key: 'getNextSibling',\n    value: function getNextSibling() {\n      if (!this.parent || this.index == null) {\n        return null;\n      }\n      return NodePath.getForNode(this.parent[this.property][this.index + 1], NodePath.getForNode(this.parent), this.property, this.index + 1);\n    }\n\n    /**\n     * Returns a NodePath instance for a node.\n     *\n     * The same NodePath can be reused in several places, e.g.\n     * a parent node passed for all its children.\n     */\n\n  }], [{\n    key: 'getForNode',\n    value: function getForNode(node) {\n      var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var prop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n\n      if (!node) {\n        return null;\n      }\n\n      if (!NodePath.registry.has(node)) {\n        NodePath.registry.set(node, new NodePath(node, parentPath, prop, index == -1 ? null : index));\n      }\n\n      var path = NodePath.registry.get(node);\n\n      if (parentPath !== null) {\n        path.parentPath = parentPath;\n        path.parent = path.parentPath.node;\n      }\n\n      if (prop !== null) {\n        path.property = prop;\n      }\n\n      if (index >= 0) {\n        path.index = index;\n      }\n\n      return path;\n    }\n\n    /**\n     * Initializes the NodePath registry. The registry is a map from\n     * a node to its NodePath instance.\n     */\n\n  }, {\n    key: 'initRegistry',\n    value: function initRegistry() {\n      if (!NodePath.registry) {\n        NodePath.registry = new Map();\n      }\n      NodePath.registry.clear();\n    }\n\n    /**\n     * Updates index of a currently traversing collection.\n     */\n\n  }, {\n    key: 'updateTraversingIndex',\n    value: function updateTraversingIndex(dx) {\n      return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1] += dx;\n    }\n\n    /**\n     * Returns current traversing index.\n     */\n\n  }, {\n    key: 'getTraversingIndex',\n    value: function getTraversingIndex() {\n      return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1];\n    }\n  }]);\n\n  return NodePath;\n}();\n\nNodePath$3.initRegistry();\n\n/**\n * Index of a currently traversing collection is stored on top of the\n * `NodePath.traversingIndexStack`. Remove/insert methods can adjust\n * this index.\n */\nNodePath$3.traversingIndexStack = [];\n\n// Helper function used to skip `loc` in JSON operations.\nfunction jsonSkipLoc(prop, value) {\n  if (prop === 'loc') {\n    return undefined;\n  }\n  return value;\n}\n\nvar nodePath = NodePath$3;\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar NodePath$2 = nodePath;\n\n/**\n * Does an actual AST traversal, using visitor pattern,\n * and calling set of callbacks.\n *\n * Based on https://github.com/olov/ast-traverse\n *\n * Expects AST in Mozilla Parser API: nodes which are supposed to be\n * handled should have `type` property.\n *\n * @param Object root - a root node to start traversal from.\n *\n * @param Object options - an object with set of callbacks:\n *\n *   - `pre(node, parent, prop, index)` - a hook called on node enter\n *   - `post`(node, parent, prop, index) - a hook called on node exit\n *   - `skipProperty(prop)` - a predicated whether a property should be skipped\n */\nfunction astTraverse(root) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var pre = options.pre;\n  var post = options.post;\n  var skipProperty = options.skipProperty;\n\n  function visit(node, parent, prop, idx) {\n    if (!node || typeof node.type !== 'string') {\n      return;\n    }\n\n    var res = undefined;\n    if (pre) {\n      res = pre(node, parent, prop, idx);\n    }\n\n    if (res !== false) {\n\n      // A node can be replaced during traversal, so we have to\n      // recalculate it from the parent, to avoid traversing \"dead\" nodes.\n      if (parent && parent[prop]) {\n        if (!isNaN(idx)) {\n          node = parent[prop][idx];\n        } else {\n          node = parent[prop];\n        }\n      }\n\n      for (var _prop in node) {\n        if (node.hasOwnProperty(_prop)) {\n          if (skipProperty ? skipProperty(_prop, node) : _prop[0] === '$') {\n            continue;\n          }\n\n          var child = node[_prop];\n\n          // Collection node.\n          //\n          // NOTE: a node (or several nodes) can be removed or inserted\n          // during traversal.\n          //\n          // Current traversing index is stored on top of the\n          // `NodePath.traversingIndexStack`. The stack is used to support\n          // recursive nature of the traversal.\n          //\n          // In this case `NodePath.traversingIndex` (which we use here) is\n          // updated in the NodePath remove/insert methods.\n          //\n          if (Array.isArray(child)) {\n            var index = 0;\n            NodePath$2.traversingIndexStack.push(index);\n            while (index < child.length) {\n              visit(child[index], node, _prop, index);\n              index = NodePath$2.updateTraversingIndex(+1);\n            }\n            NodePath$2.traversingIndexStack.pop();\n          }\n\n          // Simple node.\n          else {\n              visit(child, node, _prop);\n            }\n        }\n      }\n    }\n\n    if (post) {\n      post(node, parent, prop, idx);\n    }\n  }\n\n  visit(root, null);\n}\n\nvar traverse$1 = {\n  /**\n   * Traverses an AST.\n   *\n   * @param Object ast - an AST node\n   *\n   * @param Object | Array<Object> handlers:\n   *\n   *   an object (or an array of objects)\n   *\n   *   Each such object contains a handler function per node.\n   *   In case of an array of handlers, they are applied in order.\n   *   A handler may return a transformed node (or a different type).\n   *\n   *   The per-node function may instead be an object with functions pre and post.\n   *   pre is called before visiting the node, post after.\n   *   If a handler is a function, it is treated as the pre function, with an empty post.\n   *\n   * @param Object options:\n   *\n   *   a config object, specifying traversal options:\n   *\n   *   `asNodes`: boolean - whether handlers should receives raw AST nodes\n   *   (false by default), instead of a `NodePath` wrapper. Note, by default\n   *   `NodePath` wrapper provides a set of convenient method to manipulate\n   *   a traversing AST, and also has access to all parents list. A raw\n   *   nodes traversal should be used in rare cases, when no `NodePath`\n   *   features are needed.\n   *\n   * Special hooks:\n   *\n   *   - `shouldRun(ast)` - a predicate determining whether the handler\n   *                        should be applied.\n   *\n   * NOTE: Multiple handlers are used as an optimization of applying all of\n   * them in one AST traversal pass.\n   */\n  traverse: function traverse(ast, handlers) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { asNodes: false };\n\n\n    if (!Array.isArray(handlers)) {\n      handlers = [handlers];\n    }\n\n    // Filter out handlers by result of `shouldRun`, if the method is present.\n    handlers = handlers.filter(function (handler) {\n      if (typeof handler.shouldRun !== 'function') {\n        return true;\n      }\n      return handler.shouldRun(ast);\n    });\n\n    NodePath$2.initRegistry();\n\n    // Allow handlers to initializer themselves.\n    handlers.forEach(function (handler) {\n      if (typeof handler.init === 'function') {\n        handler.init(ast);\n      }\n    });\n\n    function getPathFor(node, parent, prop, index) {\n      var parentPath = NodePath$2.getForNode(parent);\n      var nodePath = NodePath$2.getForNode(node, parentPath, prop, index);\n\n      return nodePath;\n    }\n\n    // Handle actual nodes.\n    astTraverse(ast, {\n      /**\n       * Handler on node enter.\n       */\n      pre: function pre(node, parent, prop, index) {\n        var nodePath = void 0;\n        if (!options.asNodes) {\n          nodePath = getPathFor(node, parent, prop, index);\n        }\n\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = handlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var handler = _step.value;\n\n            // \"Catch-all\" `*` handler.\n            if (typeof handler['*'] === 'function') {\n              if (nodePath) {\n                // A path/node can be removed by some previous handler.\n                if (!nodePath.isRemoved()) {\n                  var handlerResult = handler['*'](nodePath);\n                  // Explicitly stop traversal.\n                  if (handlerResult === false) {\n                    return false;\n                  }\n                }\n              } else {\n                handler['*'](node, parent, prop, index);\n              }\n            }\n\n            // Per-node handler.\n            var handlerFuncPre = void 0;\n            if (typeof handler[node.type] === 'function') {\n              handlerFuncPre = handler[node.type];\n            } else if (typeof handler[node.type] === 'object' && typeof handler[node.type].pre === 'function') {\n              handlerFuncPre = handler[node.type].pre;\n            }\n\n            if (handlerFuncPre) {\n              if (nodePath) {\n                // A path/node can be removed by some previous handler.\n                if (!nodePath.isRemoved()) {\n                  var _handlerResult = handlerFuncPre.call(handler, nodePath);\n                  // Explicitly stop traversal.\n                  if (_handlerResult === false) {\n                    return false;\n                  }\n                }\n              } else {\n                handlerFuncPre.call(handler, node, parent, prop, index);\n              }\n            }\n          } // Loop over handlers\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      },\n      // pre func\n\n      /**\n       * Handler on node exit.\n       */\n      post: function post(node, parent, prop, index) {\n        if (!node) {\n          return;\n        }\n\n        var nodePath = void 0;\n        if (!options.asNodes) {\n          nodePath = getPathFor(node, parent, prop, index);\n        }\n\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = handlers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var handler = _step2.value;\n\n            // Per-node handler.\n            var handlerFuncPost = void 0;\n            if (typeof handler[node.type] === 'object' && typeof handler[node.type].post === 'function') {\n              handlerFuncPost = handler[node.type].post;\n            }\n\n            if (handlerFuncPost) {\n              if (nodePath) {\n                // A path/node can be removed by some previous handler.\n                if (!nodePath.isRemoved()) {\n                  var handlerResult = handlerFuncPost.call(handler, nodePath);\n                  // Explicitly stop traversal.\n                  if (handlerResult === false) {\n                    return false;\n                  }\n                }\n              } else {\n                handlerFuncPost.call(handler, node, parent, prop, index);\n              }\n            }\n          } // Loop over handlers\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      },\n      // post func\n\n      /**\n       * Skip locations by default.\n       */\n      skipProperty: function skipProperty(prop) {\n        return prop === 'loc';\n      }\n    });\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar _createClass$5 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar generator$2 = generator_1;\nvar parser$3 = parser$4;\nvar traverse = traverse$1;\n\n/**\n * Transform result.\n */\n\nvar TransformResult = function () {\n  /**\n   * Initializes a transform result for an AST.\n   *\n   * @param Object ast - an AST node\n   * @param mixed extra - any extra data a transform may return\n   */\n  function TransformResult(ast) {\n    var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    _classCallCheck$5(this, TransformResult);\n\n    this._ast = ast;\n    this._source = null;\n    this._string = null;\n    this._regexp = null;\n    this._extra = extra;\n  }\n\n  _createClass$5(TransformResult, [{\n    key: 'getAST',\n    value: function getAST() {\n      return this._ast;\n    }\n  }, {\n    key: 'setExtra',\n    value: function setExtra(extra) {\n      this._extra = extra;\n    }\n  }, {\n    key: 'getExtra',\n    value: function getExtra() {\n      return this._extra;\n    }\n  }, {\n    key: 'toRegExp',\n    value: function toRegExp() {\n      if (!this._regexp) {\n        this._regexp = new RegExp(this.getSource(), this._ast.flags);\n      }\n      return this._regexp;\n    }\n  }, {\n    key: 'getSource',\n    value: function getSource() {\n      if (!this._source) {\n        this._source = generator$2.generate(this._ast.body);\n      }\n      return this._source;\n    }\n  }, {\n    key: 'getFlags',\n    value: function getFlags() {\n      return this._ast.flags;\n    }\n  }, {\n    key: 'toString',\n    value: function toString() {\n      if (!this._string) {\n        this._string = generator$2.generate(this._ast);\n      }\n      return this._string;\n    }\n  }]);\n\n  return TransformResult;\n}();\n\nvar transform$1 = {\n  /**\n   * Expose `TransformResult`.\n   */\n  TransformResult: TransformResult,\n\n  /**\n   * Transforms a regular expression applying a set of\n   * transformation handlers.\n   *\n   * @param string | AST | RegExp:\n   *\n   *   a regular expression in different representations: a string,\n   *   a RegExp object, or an AST.\n   *\n   * @param Object | Array<Object>:\n   *\n   *   a handler (or a list of handlers) from `traverse` API.\n   *\n   * @return TransformResult instance.\n   *\n   * Example:\n   *\n   *   transform(/[a-z]/i, {\n   *     onChar(path) {\n   *       const {node} = path;\n   *\n   *       if (...) {\n   *         path.remove();\n   *       }\n   *     }\n   *   });\n   */\n  transform: function transform(regexp, handlers) {\n    var ast = regexp;\n\n    if (regexp instanceof RegExp) {\n      regexp = '' + regexp;\n    }\n\n    if (typeof regexp === 'string') {\n      ast = parser$3.parse(regexp, {\n        captureLocations: true\n      });\n    }\n\n    traverse.traverse(ast, handlers);\n\n    return new TransformResult(ast);\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar compatTransforms = transforms$1;\nvar _transform$1 = transform$1;\n\nvar compatTranspiler$1 = {\n  /**\n   * Translates a regexp in new syntax to equivalent regexp in old syntax.\n   *\n   * @param string|RegExp|AST - regexp\n   * @param Array transformsWhitelist - names of the transforms to apply\n   */\n  transform: function transform(regexp) {\n    var transformsWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n    var transformToApply = transformsWhitelist.length > 0 ? transformsWhitelist : Object.keys(compatTransforms);\n\n    var result = void 0;\n\n    // Collect extra data per transform.\n    var extra = {};\n\n    transformToApply.forEach(function (transformName) {\n\n      if (!compatTransforms.hasOwnProperty(transformName)) {\n        throw new Error('Unknown compat-transform: ' + transformName + '. ' + 'Available transforms are: ' + Object.keys(compatTransforms).join(', '));\n      }\n\n      var handler = compatTransforms[transformName];\n\n      result = _transform$1.transform(regexp, handler);\n      regexp = result.getAST();\n\n      // Collect `extra` transform result.\n      if (typeof handler.getExtra === 'function') {\n        extra[transformName] = handler.getExtra();\n      }\n    });\n\n    // Set the final extras for all transforms.\n    result.setExtra(extra);\n\n    return result;\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * Performs a deep copy of an simple object.\n * Only handles scalar values, arrays and objects.\n *\n * @param obj Object\n */\n\nvar clone$1 = function clone(obj) {\n  if (obj === null || typeof obj !== 'object') {\n    return obj;\n  }\n  var res = void 0;\n  if (Array.isArray(obj)) {\n    res = [];\n  } else {\n    res = {};\n  }\n  for (var i in obj) {\n    res[i] = clone(obj[i]);\n  }\n  return res;\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to transform surrogate pairs into single unicode code point\n *\n * \\ud83d\\ude80 -> \\u{1f680}\n */\n\nvar charSurrogatePairToSingleUnicodeTransform = {\n  shouldRun: function shouldRun(ast) {\n    return ast.flags.includes('u');\n  },\n  Char: function Char(path) {\n    var node = path.node;\n\n    if (node.kind !== 'unicode' || !node.isSurrogatePair || isNaN(node.codePoint)) {\n      return;\n    }\n    node.value = '\\\\u{' + node.codePoint.toString(16) + '}';\n    delete node.isSurrogatePair;\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar UPPER_A_CP$1 = 'A'.codePointAt(0);\nvar UPPER_Z_CP$1 = 'Z'.codePointAt(0);\nvar LOWER_A_CP = 'a'.codePointAt(0);\nvar LOWER_Z_CP = 'z'.codePointAt(0);\nvar DIGIT_0_CP = '0'.codePointAt(0);\nvar DIGIT_9_CP = '9'.codePointAt(0);\n\n/**\n * A regexp-tree plugin to transform coded chars into simple chars.\n *\n * \\u0061 -> a\n */\nvar charCodeToSimpleCharTransform = {\n  Char: function Char(path) {\n    var node = path.node,\n        parent = path.parent;\n\n    if (isNaN(node.codePoint) || node.kind === 'simple') {\n      return;\n    }\n\n    if (parent.type === 'ClassRange') {\n      if (!isSimpleRange(parent)) {\n        return;\n      }\n    }\n\n    if (!isPrintableASCIIChar(node.codePoint)) {\n      return;\n    }\n\n    var symbol = String.fromCodePoint(node.codePoint);\n    var newChar = {\n      type: 'Char',\n      kind: 'simple',\n      value: symbol,\n      symbol: symbol,\n      codePoint: node.codePoint\n    };\n    if (needsEscape(symbol, parent.type)) {\n      newChar.escaped = true;\n    }\n    path.replace(newChar);\n  }\n};\n\n/**\n * Checks if a range is included either in 0-9, a-z or A-Z\n * @param classRange\n * @returns {boolean}\n */\nfunction isSimpleRange(classRange) {\n  var from = classRange.from,\n      to = classRange.to;\n\n  return from.codePoint >= DIGIT_0_CP && from.codePoint <= DIGIT_9_CP && to.codePoint >= DIGIT_0_CP && to.codePoint <= DIGIT_9_CP || from.codePoint >= UPPER_A_CP$1 && from.codePoint <= UPPER_Z_CP$1 && to.codePoint >= UPPER_A_CP$1 && to.codePoint <= UPPER_Z_CP$1 || from.codePoint >= LOWER_A_CP && from.codePoint <= LOWER_Z_CP && to.codePoint >= LOWER_A_CP && to.codePoint <= LOWER_Z_CP;\n}\n\n/**\n * Checks if a code point in the range of printable ASCII chars\n * (DEL char excluded)\n * @param codePoint\n * @returns {boolean}\n */\nfunction isPrintableASCIIChar(codePoint) {\n  return codePoint >= 0x20 && codePoint <= 0x7e;\n}\n\nfunction needsEscape(symbol, parentType) {\n  if (parentType === 'ClassRange' || parentType === 'CharacterClass') {\n    return (/[\\]\\\\^-]/.test(symbol)\n    );\n  }\n\n  return (/[*[()+?^$./\\\\|{}]/.test(symbol)\n  );\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar UPPER_A_CP = 'A'.codePointAt(0);\nvar UPPER_Z_CP = 'Z'.codePointAt(0);\n/**\n * Transforms case-insensitive regexp to lowercase\n *\n * /AaBbÏ/i -> /aabbï/i\n */\nvar charCaseInsensitiveLowercaseTransform = {\n  _AZClassRanges: null,\n  _hasUFlag: false,\n  init: function init(ast) {\n    this._AZClassRanges = new Set();\n    this._hasUFlag = ast.flags.includes('u');\n  },\n  shouldRun: function shouldRun(ast) {\n    return ast.flags.includes('i');\n  },\n  Char: function Char(path) {\n    var node = path.node,\n        parent = path.parent;\n\n    if (isNaN(node.codePoint)) {\n      return;\n    }\n\n    // Engine support for case-insensitive matching without the u flag\n    // for characters above \\u1000 does not seem reliable.\n    if (!this._hasUFlag && node.codePoint >= 0x1000) {\n      return;\n    }\n\n    if (parent.type === 'ClassRange') {\n      // The only class ranges we handle must be inside A-Z.\n      // After the `from` char is processed, the isAZClassRange test\n      // will be false, so we use a Set to keep track of parents and\n      // process the `to` char.\n      if (!this._AZClassRanges.has(parent) && !isAZClassRange(parent)) {\n        return;\n      }\n      this._AZClassRanges.add(parent);\n    }\n\n    var lower = node.symbol.toLowerCase();\n    if (lower !== node.symbol) {\n      node.value = displaySymbolAsValue(lower, node);\n      node.symbol = lower;\n      node.codePoint = lower.codePointAt(0);\n    }\n  }\n};\n\nfunction isAZClassRange(classRange) {\n  var from = classRange.from,\n      to = classRange.to;\n  // A-Z\n\n  return from.codePoint >= UPPER_A_CP && from.codePoint <= UPPER_Z_CP && to.codePoint >= UPPER_A_CP && to.codePoint <= UPPER_Z_CP;\n}\n\nfunction displaySymbolAsValue(symbol, node) {\n  var codePoint = symbol.codePointAt(0);\n  if (node.kind === 'decimal') {\n    return '\\\\' + codePoint;\n  }\n  if (node.kind === 'oct') {\n    return '\\\\0' + codePoint.toString(8);\n  }\n  if (node.kind === 'hex') {\n    return '\\\\x' + codePoint.toString(16);\n  }\n  if (node.kind === 'unicode') {\n    if (node.isSurrogatePair) {\n      var _getSurrogatePairFrom = getSurrogatePairFromCodePoint(codePoint),\n          lead = _getSurrogatePairFrom.lead,\n          trail = _getSurrogatePairFrom.trail;\n\n      return '\\\\u' + '0'.repeat(4 - lead.length) + lead + '\\\\u' + '0'.repeat(4 - trail.length) + trail;\n    } else if (node.value.includes('{')) {\n      return '\\\\u{' + codePoint.toString(16) + '}';\n    } else {\n      var code = codePoint.toString(16);\n      return '\\\\u' + '0'.repeat(4 - code.length) + code;\n    }\n  }\n  // simple\n  return symbol;\n}\n\n/**\n * Converts a code point to a surrogate pair.\n * Conversion algorithm is taken from The Unicode Standard 3.0 Section 3.7\n * (https://www.unicode.org/versions/Unicode3.0.0/ch03.pdf)\n * @param {number} codePoint - Between 0x10000 and 0x10ffff\n * @returns {{lead: string, trail: string}}\n */\nfunction getSurrogatePairFromCodePoint(codePoint) {\n  var lead = Math.floor((codePoint - 0x10000) / 0x400) + 0xd800;\n  var trail = (codePoint - 0x10000) % 0x400 + 0xdc00;\n  return {\n    lead: lead.toString(16),\n    trail: trail.toString(16)\n  };\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to remove duplicates from character classes.\n */\n\nvar charClassRemoveDuplicatesTransform = {\n  CharacterClass: function CharacterClass(path) {\n    var node = path.node;\n\n    var sources = {};\n\n    for (var i = 0; i < node.expressions.length; i++) {\n      var childPath = path.getChild(i);\n      var source = childPath.jsonEncode();\n\n      if (sources.hasOwnProperty(source)) {\n        childPath.remove();\n\n        // Since we remove the current node.\n        // TODO: make it simpler for users with a method.\n        i--;\n      }\n\n      sources[source] = true;\n    }\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * Flattens a nested disjunction node to a list.\n *\n * /a|b|c|d/\n *\n * {{{a, b}, c}, d} -> [a, b, c, d]\n */\n\nfunction _toConsumableArray$7(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction disjunctionToList$1(node) {\n  if (node.type !== 'Disjunction') {\n    throw new TypeError('Expected \"Disjunction\" node, got \"' + node.type + '\"');\n  }\n\n  var list = [];\n\n  if (node.left && node.left.type === 'Disjunction') {\n    list.push.apply(list, _toConsumableArray$7(disjunctionToList$1(node.left)).concat([node.right]));\n  } else {\n    list.push(node.left, node.right);\n  }\n\n  return list;\n}\n\n/**\n * Builds a nested disjunction node from a list.\n *\n * /a|b|c|d/\n *\n * [a, b, c, d] -> {{{a, b}, c}, d}\n */\nfunction listToDisjunction$1(list) {\n  return list.reduce(function (left, right) {\n    return {\n      type: 'Disjunction',\n      left: left,\n      right: right\n    };\n  });\n}\n\n/**\n * Increases a quantifier by one.\n * Does not change greediness.\n * * -> +\n * + -> {2,}\n * ? -> {1,2}\n * {2} -> {3}\n * {2,} -> {3,}\n * {2,3} -> {3,4}\n */\nfunction increaseQuantifierByOne$2(quantifier) {\n  if (quantifier.kind === '*') {\n\n    quantifier.kind = '+';\n  } else if (quantifier.kind === '+') {\n\n    quantifier.kind = 'Range';\n    quantifier.from = 2;\n    delete quantifier.to;\n  } else if (quantifier.kind === '?') {\n\n    quantifier.kind = 'Range';\n    quantifier.from = 1;\n    quantifier.to = 2;\n  } else if (quantifier.kind === 'Range') {\n\n    quantifier.from += 1;\n    if (quantifier.to) {\n      quantifier.to += 1;\n    }\n  }\n}\n\nvar utils = {\n  disjunctionToList: disjunctionToList$1,\n  listToDisjunction: listToDisjunction$1,\n  increaseQuantifierByOne: increaseQuantifierByOne$2\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar _require$8 = utils,\n    increaseQuantifierByOne$1 = _require$8.increaseQuantifierByOne;\n\n/**\n * A regexp-tree plugin to merge quantifiers\n *\n * a+a+ -> a{2,}\n * a{2}a{3} -> a{5}\n * a{1,2}a{2,3} -> a{3,5}\n */\n\n\nvar quantifiersMergeTransform = {\n  Repetition: function Repetition(path) {\n    var node = path.node,\n        parent = path.parent;\n\n\n    if (parent.type !== 'Alternative' || !path.index) {\n      return;\n    }\n\n    var previousSibling = path.getPreviousSibling();\n\n    if (!previousSibling) {\n      return;\n    }\n\n    if (previousSibling.node.type === 'Repetition') {\n      if (!previousSibling.getChild().hasEqualSource(path.getChild())) {\n        return;\n      }\n\n      var _extractFromTo = extractFromTo(previousSibling.node.quantifier),\n          previousSiblingFrom = _extractFromTo.from,\n          previousSiblingTo = _extractFromTo.to;\n\n      var _extractFromTo2 = extractFromTo(node.quantifier),\n          nodeFrom = _extractFromTo2.from,\n          nodeTo = _extractFromTo2.to;\n\n      // It's does not seem reliable to merge quantifiers with different greediness\n      // when none of both is a greedy open range\n\n\n      if (previousSibling.node.quantifier.greedy !== node.quantifier.greedy && !isGreedyOpenRange(previousSibling.node.quantifier) && !isGreedyOpenRange(node.quantifier)) {\n        return;\n      }\n\n      // a*a* -> a*\n      // a*a+ -> a+\n      // a+a+ -> a{2,}\n      // a{2}a{4} -> a{6}\n      // a{1,2}a{2,3} -> a{3,5}\n      // a{1,}a{2,} -> a{3,}\n      // a+a{2,} -> a{3,}\n\n      // a??a{2,} -> a{2,}\n      // a*?a{2,} -> a{2,}\n      // a+?a{2,} -> a{3,}\n\n      node.quantifier.kind = 'Range';\n      node.quantifier.from = previousSiblingFrom + nodeFrom;\n      if (previousSiblingTo && nodeTo) {\n        node.quantifier.to = previousSiblingTo + nodeTo;\n      } else {\n        delete node.quantifier.to;\n      }\n      if (isGreedyOpenRange(previousSibling.node.quantifier) || isGreedyOpenRange(node.quantifier)) {\n        node.quantifier.greedy = true;\n      }\n\n      previousSibling.remove();\n    } else {\n      if (!previousSibling.hasEqualSource(path.getChild())) {\n        return;\n      }\n\n      increaseQuantifierByOne$1(node.quantifier);\n      previousSibling.remove();\n    }\n  }\n};\n\nfunction isGreedyOpenRange(quantifier) {\n  return quantifier.greedy && (quantifier.kind === '+' || quantifier.kind === '*' || quantifier.kind === 'Range' && !quantifier.to);\n}\n\nfunction extractFromTo(quantifier) {\n  var from = void 0,\n      to = void 0;\n  if (quantifier.kind === '*') {\n    from = 0;\n  } else if (quantifier.kind === '+') {\n    from = 1;\n  } else if (quantifier.kind === '?') {\n    from = 0;\n    to = 1;\n  } else {\n    from = quantifier.from;\n    if (quantifier.to) {\n      to = quantifier.to;\n    }\n  }\n  return { from: from, to: to };\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to replace different range-based quantifiers\n * with their symbol equivalents.\n *\n * a{0,} -> a*\n * a{1,} -> a+\n * a{1} -> a\n *\n * NOTE: the following is automatically handled in the generator:\n *\n * a{3,3} -> a{3}\n */\n\nvar quantifierRangeToSymbolTransform = {\n  Quantifier: function Quantifier(path) {\n    var node = path.node;\n\n\n    if (node.kind !== 'Range') {\n      return;\n    }\n\n    // a{0,} -> a*\n    rewriteOpenZero(path);\n\n    // a{1,} -> a+\n    rewriteOpenOne(path);\n\n    // a{1} -> a\n    rewriteExactOne(path);\n  }\n};\n\nfunction rewriteOpenZero(path) {\n  var node = path.node;\n\n\n  if (node.from !== 0 || node.to) {\n    return;\n  }\n\n  node.kind = '*';\n  delete node.from;\n}\n\nfunction rewriteOpenOne(path) {\n  var node = path.node;\n\n\n  if (node.from !== 1 || node.to) {\n    return;\n  }\n\n  node.kind = '+';\n  delete node.from;\n}\n\nfunction rewriteExactOne(path) {\n  var node = path.node;\n\n\n  if (node.from !== 1 || node.to !== 1) {\n    return;\n  }\n\n  path.parentPath.replace(path.parentPath.node.expression);\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to simplify character classes\n * spanning only one or two chars.\n *\n * [a-a] -> [a]\n * [a-b] -> [ab]\n */\n\nvar charClassClassrangesToCharsTransform = {\n  ClassRange: function ClassRange(path) {\n    var node = path.node;\n\n\n    if (node.from.codePoint === node.to.codePoint) {\n\n      path.replace(node.from);\n    } else if (node.from.codePoint === node.to.codePoint - 1) {\n\n      path.getParent().insertChildAt(node.to, path.index + 1);\n      path.replace(node.from);\n    }\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to replace standard character classes with\n * their meta symbols equivalents.\n */\n\nfunction _toConsumableArray$6(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar charClassToMetaTransform = {\n  _hasIFlag: false,\n  _hasUFlag: false,\n  init: function init(ast) {\n    this._hasIFlag = ast.flags.includes('i');\n    this._hasUFlag = ast.flags.includes('u');\n  },\n  CharacterClass: function CharacterClass(path) {\n    // [0-9] -> \\d\n    rewriteNumberRanges(path);\n\n    // [a-zA-Z_0-9] -> \\w\n    rewriteWordRanges(path, this._hasIFlag, this._hasUFlag);\n\n    // [ \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff] -> \\s\n    rewriteWhitespaceRanges(path);\n  }\n};\n\n/**\n * Rewrites number ranges: [0-9] -> \\d\n */\nfunction rewriteNumberRanges(path) {\n  var node = path.node;\n\n\n  node.expressions.forEach(function (expression, i) {\n    if (isFullNumberRange(expression)) {\n      path.getChild(i).replace({\n        type: 'Char',\n        value: '\\\\d',\n        kind: 'meta'\n      });\n    }\n  });\n}\n\n/**\n * Rewrites word ranges: [a-zA-Z_0-9] -> \\w\n * Thus, the ranges may go in any order, and other symbols/ranges\n * are kept untouched, e.g. [a-z_\\dA-Z$] -> [\\w$]\n */\nfunction rewriteWordRanges(path, hasIFlag, hasUFlag) {\n  var node = path.node;\n\n\n  var numberPath = null;\n  var lowerCasePath = null;\n  var upperCasePath = null;\n  var underscorePath = null;\n  var u017fPath = null;\n  var u212aPath = null;\n\n  node.expressions.forEach(function (expression, i) {\n    // \\d\n    if (isMetaChar(expression, '\\\\d')) {\n      numberPath = path.getChild(i);\n    }\n\n    // a-z\n    else if (isLowerCaseRange(expression)) {\n        lowerCasePath = path.getChild(i);\n      }\n\n      // A-Z\n      else if (isUpperCaseRange(expression)) {\n          upperCasePath = path.getChild(i);\n        }\n\n        // _\n        else if (isUnderscore(expression)) {\n            underscorePath = path.getChild(i);\n          } else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x017f)) {\n            u017fPath = path.getChild(i);\n          } else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x212a)) {\n            u212aPath = path.getChild(i);\n          }\n  });\n\n  // If we found the whole pattern, replace it.\n  if (numberPath && (lowerCasePath && upperCasePath || hasIFlag && (lowerCasePath || upperCasePath)) && underscorePath && (!hasUFlag || !hasIFlag || u017fPath && u212aPath)) {\n    // Put \\w in place of \\d.\n    numberPath.replace({\n      type: 'Char',\n      value: '\\\\w',\n      kind: 'meta'\n    });\n\n    // Other paths are removed.\n    if (lowerCasePath) {\n      lowerCasePath.remove();\n    }\n    if (upperCasePath) {\n      upperCasePath.remove();\n    }\n    underscorePath.remove();\n    if (u017fPath) {\n      u017fPath.remove();\n    }\n    if (u212aPath) {\n      u212aPath.remove();\n    }\n  }\n}\n\n/**\n * Rewrites whitespace ranges: [ \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff] -> \\s.\n */\nvar whitespaceRangeTests = [function (node) {\n  return isChar(node, ' ');\n}].concat(_toConsumableArray$6(['\\\\f', '\\\\n', '\\\\r', '\\\\t', '\\\\v'].map(function (char) {\n  return function (node) {\n    return isMetaChar(node, char);\n  };\n})), _toConsumableArray$6([0x00a0, 0x1680, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, 0xfeff].map(function (codePoint) {\n  return function (node) {\n    return isCodePoint(node, codePoint);\n  };\n})), [function (node) {\n  return node.type === 'ClassRange' && isCodePoint(node.from, 0x2000) && isCodePoint(node.to, 0x200a);\n}]);\n\nfunction rewriteWhitespaceRanges(path) {\n  var node = path.node;\n\n\n  if (node.expressions.length < whitespaceRangeTests.length || !whitespaceRangeTests.every(function (test) {\n    return node.expressions.some(function (expression) {\n      return test(expression);\n    });\n  })) {\n    return;\n  }\n\n  // If we found the whole pattern, replace it.\n\n  // Put \\s in place of \\n.\n  var nNode = node.expressions.find(function (expression) {\n    return isMetaChar(expression, '\\\\n');\n  });\n  nNode.value = '\\\\s';\n  nNode.symbol = undefined;\n  nNode.codePoint = NaN;\n\n  // Other paths are removed.\n  node.expressions.map(function (expression, i) {\n    return whitespaceRangeTests.some(function (test) {\n      return test(expression);\n    }) ? path.getChild(i) : undefined;\n  }).filter(Boolean).forEach(function (path) {\n    return path.remove();\n  });\n}\n\nfunction isFullNumberRange(node) {\n  return node.type === 'ClassRange' && node.from.value === '0' && node.to.value === '9';\n}\n\nfunction isChar(node, value) {\n  var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'simple';\n\n  return node.type === 'Char' && node.value === value && node.kind === kind;\n}\n\nfunction isMetaChar(node, value) {\n  return isChar(node, value, 'meta');\n}\n\nfunction isLowerCaseRange(node) {\n  return node.type === 'ClassRange' && node.from.value === 'a' && node.to.value === 'z';\n}\n\nfunction isUpperCaseRange(node) {\n  return node.type === 'ClassRange' && node.from.value === 'A' && node.to.value === 'Z';\n}\n\nfunction isUnderscore(node) {\n  return node.type === 'Char' && node.value === '_' && node.kind === 'simple';\n}\n\nfunction isCodePoint(node, codePoint) {\n  return node.type === 'Char' && node.kind === 'unicode' && node.codePoint === codePoint;\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to replace single char character classes with\n * just that character.\n *\n * [\\d] -> \\d, [^\\w] -> \\W\n */\n\nvar charClassToSingleCharTransform = {\n  CharacterClass: function CharacterClass(path) {\n    var node = path.node;\n\n\n    if (node.expressions.length !== 1 || !hasAppropriateSiblings$1(path) || !isAppropriateChar(node.expressions[0])) {\n      return;\n    }\n\n    var _node$expressions$ = node.expressions[0],\n        value = _node$expressions$.value,\n        kind = _node$expressions$.kind,\n        escaped = _node$expressions$.escaped;\n\n\n    if (node.negative) {\n      // For negative can extract only meta chars like [^\\w] -> \\W\n      // cannot do for [^a] -> a (wrong).\n      if (!isMeta$1(value)) {\n        return;\n      }\n\n      value = getInverseMeta(value);\n    }\n\n    path.replace({\n      type: 'Char',\n      value: value,\n      kind: kind,\n      escaped: escaped || shouldEscape(value)\n    });\n  }\n};\n\nfunction isAppropriateChar(node) {\n  return node.type === 'Char' &&\n  // We don't extract [\\b] (backspace) since \\b has different\n  // semantics (word boundary).\n  node.value !== '\\\\b';\n}\n\nfunction isMeta$1(value) {\n  return (/^\\\\[dwsDWS]$/.test(value)\n  );\n}\n\nfunction getInverseMeta(value) {\n  return (/[dws]/.test(value) ? value.toUpperCase() : value.toLowerCase()\n  );\n}\n\nfunction hasAppropriateSiblings$1(path) {\n  var parent = path.parent,\n      index = path.index;\n\n\n  if (parent.type !== 'Alternative') {\n    return true;\n  }\n\n  var previousNode = parent.expressions[index - 1];\n  if (previousNode == null) {\n    return true;\n  }\n\n  // Don't optimized \\1[0] to \\10\n  if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {\n    return false;\n  }\n\n  // Don't optimized \\2[0] to \\20\n  if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {\n    return false;\n  }\n\n  return true;\n}\n\n// Note: \\{ and \\} are always preserved to avoid `a[{]2[}]` turning\n// into `a{2}`.\nfunction shouldEscape(value) {\n  return (/[*[()+?$./{}|]/.test(value)\n  );\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to remove unnecessary escape.\n *\n * \\e -> e\n *\n * [\\(] -> [(]\n */\n\nvar charEscapeUnescapeTransform = {\n  _hasXFlag: false,\n  init: function init(ast) {\n    this._hasXFlag = ast.flags.includes('x');\n  },\n  Char: function Char(path) {\n    var node = path.node;\n\n\n    if (!node.escaped) {\n      return;\n    }\n\n    if (shouldUnescape(path, this._hasXFlag)) {\n      delete node.escaped;\n    }\n  }\n};\n\nfunction shouldUnescape(path, hasXFlag) {\n  var value = path.node.value,\n      index = path.index,\n      parent = path.parent;\n\n  // In char class (, etc are allowed.\n\n  if (parent.type !== 'CharacterClass' && parent.type !== 'ClassRange') {\n    return !preservesEscape(value, index, parent, hasXFlag);\n  }\n\n  return !preservesInCharClass(value, index, parent);\n}\n\n/**\n * \\], \\\\, \\^, \\-\n */\nfunction preservesInCharClass(value, index, parent) {\n  if (value === '^') {\n    // Avoid [\\^a] turning into [^a]\n    return index === 0 && !parent.negative;\n  }\n  if (value === '-') {\n    // Avoid [a\\-z] turning into [a-z]\n    return true;\n  }\n  return (/[\\]\\\\]/.test(value)\n  );\n}\n\nfunction preservesEscape(value, index, parent, hasXFlag) {\n  if (value === '{') {\n    return preservesOpeningCurlyBraceEscape(index, parent);\n  }\n\n  if (value === '}') {\n    return preservesClosingCurlyBraceEscape(index, parent);\n  }\n\n  if (hasXFlag && /[ #]/.test(value)) {\n    return true;\n  }\n\n  return (/[*[()+?^$./\\\\|]/.test(value)\n  );\n}\n\nfunction consumeNumbers(startIndex, parent, rtl) {\n  var i = startIndex;\n  var siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];\n\n  while (siblingNode && siblingNode.type === 'Char' && siblingNode.kind === 'simple' && !siblingNode.escaped && /\\d/.test(siblingNode.value)) {\n    rtl ? i-- : i++;\n    siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];\n  }\n\n  return Math.abs(startIndex - i);\n}\n\nfunction isSimpleChar(node, value) {\n  return node && node.type === 'Char' && node.kind === 'simple' && !node.escaped && node.value === value;\n}\n\nfunction preservesOpeningCurlyBraceEscape(index, parent) {\n  // (?:\\{) -> (?:{)\n  if (index == null) {\n    return false;\n  }\n\n  var nbFollowingNumbers = consumeNumbers(index + 1, parent);\n  var i = index + nbFollowingNumbers + 1;\n  var nextSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n  if (nbFollowingNumbers) {\n    // Avoid \\{3} turning into {3}\n    if (isSimpleChar(nextSiblingNode, '}')) {\n      return true;\n    }\n\n    if (isSimpleChar(nextSiblingNode, ',')) {\n      nbFollowingNumbers = consumeNumbers(i + 1, parent);\n      i = i + nbFollowingNumbers + 1;\n      nextSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n      // Avoid \\{3,} turning into {3,}\n      return isSimpleChar(nextSiblingNode, '}');\n    }\n  }\n  return false;\n}\n\nfunction preservesClosingCurlyBraceEscape(index, parent) {\n  // (?:\\{) -> (?:{)\n  if (index == null) {\n    return false;\n  }\n\n  var nbPrecedingNumbers = consumeNumbers(index - 1, parent, true);\n  var i = index - nbPrecedingNumbers - 1;\n  var previousSiblingNode = i >= 0 && parent.expressions[i];\n\n  // Avoid {3\\} turning into {3}\n  if (nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{')) {\n    return true;\n  }\n\n  if (isSimpleChar(previousSiblingNode, ',')) {\n    nbPrecedingNumbers = consumeNumbers(i - 1, parent, true);\n    i = i - nbPrecedingNumbers - 1;\n    previousSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n    // Avoid {3,\\} turning into {3,}\n    return nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{');\n  }\n  return false;\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to merge class ranges.\n *\n * [a-ec] -> [a-e]\n * [a-ec-e] -> [a-e]\n * [\\w\\da-f] -> [\\w]\n * [abcdef] -> [a-f]\n */\n\nvar charClassClassrangesMergeTransform = {\n  _hasIUFlags: false,\n  init: function init(ast) {\n    this._hasIUFlags = ast.flags.includes('i') && ast.flags.includes('u');\n  },\n  CharacterClass: function CharacterClass(path) {\n    var node = path.node;\n\n    var expressions = node.expressions;\n\n    var metas = [];\n    // Extract metas\n    expressions.forEach(function (expression) {\n      if (isMeta(expression)) {\n        metas.push(expression.value);\n      }\n    });\n\n    expressions.sort(sortCharClass);\n\n    for (var i = 0; i < expressions.length; i++) {\n      var expression = expressions[i];\n      if (fitsInMetas(expression, metas, this._hasIUFlags) || combinesWithPrecedingClassRange(expression, expressions[i - 1]) || combinesWithFollowingClassRange(expression, expressions[i + 1])) {\n        expressions.splice(i, 1);\n        i--;\n      } else {\n        var nbMergedChars = charCombinesWithPrecedingChars(expression, i, expressions);\n        expressions.splice(i - nbMergedChars + 1, nbMergedChars);\n        i -= nbMergedChars;\n      }\n    }\n  }\n};\n\n/**\n * Sorts expressions in char class in the following order:\n * - meta chars, ordered alphabetically by value\n * - chars (except `control` kind) and class ranges, ordered alphabetically (`from` char is used for class ranges)\n * - if ambiguous, class range comes before char\n * - if ambiguous between two class ranges, orders alphabetically by `to` char\n * - control chars, ordered alphabetically by value\n * @param {Object} a - Left Char or ClassRange node\n * @param {Object} b - Right Char or ClassRange node\n * @returns {number}\n */\nfunction sortCharClass(a, b) {\n  var aValue = getSortValue(a);\n  var bValue = getSortValue(b);\n\n  if (aValue === bValue) {\n    // We want ClassRange before Char\n    // [bb-d] -> [b-db]\n    if (a.type === 'ClassRange' && b.type !== 'ClassRange') {\n      return -1;\n    }\n    if (b.type === 'ClassRange' && a.type !== 'ClassRange') {\n      return 1;\n    }\n    if (a.type === 'ClassRange' && b.type === 'ClassRange') {\n      return getSortValue(a.to) - getSortValue(b.to);\n    }\n    if (isMeta(a) && isMeta(b) || isControl(a) && isControl(b)) {\n      return a.value < b.value ? -1 : 1;\n    }\n  }\n  return aValue - bValue;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @returns {number}\n */\nfunction getSortValue(expression) {\n  if (expression.type === 'Char') {\n    if (expression.value === '-') {\n      return Infinity;\n    }\n    if (expression.kind === 'control') {\n      return Infinity;\n    }\n    if (expression.kind === 'meta' && isNaN(expression.codePoint)) {\n      return -1;\n    }\n    return expression.codePoint;\n  }\n  // ClassRange\n  return expression.from.codePoint;\n}\n\n/**\n * Checks if a node is a meta char from the set \\d\\w\\s\\D\\W\\S\n * @param {Object} expression - Char or ClassRange node\n * @param {?string} value\n * @returns {boolean}\n */\nfunction isMeta(expression) {\n  var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n  return expression.type === 'Char' && expression.kind === 'meta' && (value ? expression.value === value : /^\\\\[dws]$/i.test(expression.value));\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @returns {boolean}\n */\nfunction isControl(expression) {\n  return expression.type === 'Char' && expression.kind === 'control';\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {string[]} metas - Array of meta chars, e.g. [\"\\\\w\", \"\\\\s\"]\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMetas(expression, metas, hasIUFlags) {\n  for (var i = 0; i < metas.length; i++) {\n    if (fitsInMeta(expression, metas[i], hasIUFlags)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {string} meta - e.g. \"\\\\w\"\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMeta(expression, meta, hasIUFlags) {\n  if (expression.type === 'ClassRange') {\n    return fitsInMeta(expression.from, meta, hasIUFlags) && fitsInMeta(expression.to, meta, hasIUFlags);\n  }\n\n  // Special cases:\n  // \\S contains \\w and \\d\n  if (meta === '\\\\S' && (isMeta(expression, '\\\\w') || isMeta(expression, '\\\\d'))) {\n    return true;\n  }\n  // \\D contains \\W and \\s\n  if (meta === '\\\\D' && (isMeta(expression, '\\\\W') || isMeta(expression, '\\\\s'))) {\n    return true;\n  }\n  // \\w contains \\d\n  if (meta === '\\\\w' && isMeta(expression, '\\\\d')) {\n    return true;\n  }\n  // \\W contains \\s\n  if (meta === '\\\\W' && isMeta(expression, '\\\\s')) {\n    return true;\n  }\n\n  if (expression.type !== 'Char' || isNaN(expression.codePoint)) {\n    return false;\n  }\n\n  if (meta === '\\\\s') {\n    return fitsInMetaS(expression);\n  }\n  if (meta === '\\\\S') {\n    return !fitsInMetaS(expression);\n  }\n  if (meta === '\\\\d') {\n    return fitsInMetaD(expression);\n  }\n  if (meta === '\\\\D') {\n    return !fitsInMetaD(expression);\n  }\n  if (meta === '\\\\w') {\n    return fitsInMetaW(expression, hasIUFlags);\n  }\n  if (meta === '\\\\W') {\n    return !fitsInMetaW(expression, hasIUFlags);\n  }\n  return false;\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @returns {boolean}\n */\nfunction fitsInMetaS(expression) {\n  return expression.codePoint === 0x0009 || // \\t\n  expression.codePoint === 0x000a || // \\n\n  expression.codePoint === 0x000b || // \\v\n  expression.codePoint === 0x000c || // \\f\n  expression.codePoint === 0x000d || // \\r\n  expression.codePoint === 0x0020 || // space\n  expression.codePoint === 0x00a0 || // nbsp\n  expression.codePoint === 0x1680 || // part of Zs\n  expression.codePoint >= 0x2000 && expression.codePoint <= 0x200a || // part of Zs\n  expression.codePoint === 0x2028 || // line separator\n  expression.codePoint === 0x2029 || // paragraph separator\n  expression.codePoint === 0x202f || // part of Zs\n  expression.codePoint === 0x205f || // part of Zs\n  expression.codePoint === 0x3000 || // part of Zs\n  expression.codePoint === 0xfeff; // zwnbsp\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @returns {boolean}\n */\nfunction fitsInMetaD(expression) {\n  return expression.codePoint >= 0x30 && expression.codePoint <= 0x39; // 0-9\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMetaW(expression, hasIUFlags) {\n  return fitsInMetaD(expression) || expression.codePoint >= 0x41 && expression.codePoint <= 0x5a || // A-Z\n  expression.codePoint >= 0x61 && expression.codePoint <= 0x7a || // a-z\n  expression.value === '_' || hasIUFlags && (expression.codePoint === 0x017f || expression.codePoint === 0x212a);\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - Char or ClassRange node\n * @returns {boolean}\n */\nfunction combinesWithPrecedingClassRange(expression, classRange) {\n  if (classRange && classRange.type === 'ClassRange') {\n    if (fitsInClassRange(expression, classRange)) {\n      // [a-gc] -> [a-g]\n      // [a-gc-e] -> [a-g]\n      return true;\n    } else if (\n    // We only want \\w chars or char codes to keep readability\n    isMetaWCharOrCode(expression) && classRange.to.codePoint === expression.codePoint - 1) {\n      // [a-de] -> [a-e]\n      classRange.to = expression;\n      return true;\n    } else if (expression.type === 'ClassRange' && expression.from.codePoint <= classRange.to.codePoint + 1 && expression.to.codePoint >= classRange.from.codePoint - 1) {\n      // [a-db-f] -> [a-f]\n      // [b-fa-d] -> [a-f]\n      // [a-cd-f] -> [a-f]\n      if (expression.from.codePoint < classRange.from.codePoint) {\n        classRange.from = expression.from;\n      }\n      if (expression.to.codePoint > classRange.to.codePoint) {\n        classRange.to = expression.to;\n      }\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - Char or ClassRange node\n * @returns {boolean}\n */\nfunction combinesWithFollowingClassRange(expression, classRange) {\n  if (classRange && classRange.type === 'ClassRange') {\n    // Considering the elements were ordered alphabetically,\n    // there is only one case to handle\n    // [ab-e] -> [a-e]\n    if (\n    // We only want \\w chars or char codes to keep readability\n    isMetaWCharOrCode(expression) && classRange.from.codePoint === expression.codePoint + 1) {\n      classRange.from = expression;\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - ClassRange node\n * @returns {boolean}\n */\nfunction fitsInClassRange(expression, classRange) {\n  if (expression.type === 'Char' && isNaN(expression.codePoint)) {\n    return false;\n  }\n  if (expression.type === 'ClassRange') {\n    return fitsInClassRange(expression.from, classRange) && fitsInClassRange(expression.to, classRange);\n  }\n  return expression.codePoint >= classRange.from.codePoint && expression.codePoint <= classRange.to.codePoint;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Number} index\n * @param {Object[]} expressions - expressions in CharClass\n * @returns {number} - Number of characters combined with expression\n */\nfunction charCombinesWithPrecedingChars(expression, index, expressions) {\n  // We only want \\w chars or char codes to keep readability\n  if (!isMetaWCharOrCode(expression)) {\n    return 0;\n  }\n  var nbMergedChars = 0;\n  while (index > 0) {\n    var currentExpression = expressions[index];\n    var precedingExpresion = expressions[index - 1];\n    if (isMetaWCharOrCode(precedingExpresion) && precedingExpresion.codePoint === currentExpression.codePoint - 1) {\n      nbMergedChars++;\n      index--;\n    } else {\n      break;\n    }\n  }\n\n  if (nbMergedChars > 1) {\n    expressions[index] = {\n      type: 'ClassRange',\n      from: expressions[index],\n      to: expression\n    };\n    return nbMergedChars;\n  }\n  return 0;\n}\n\nfunction isMetaWCharOrCode(expression) {\n  return expression && expression.type === 'Char' && !isNaN(expression.codePoint) && (fitsInMetaW(expression, false) || expression.kind === 'unicode' || expression.kind === 'hex' || expression.kind === 'oct' || expression.kind === 'decimal');\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar NodePath$1 = nodePath;\n\nvar _require$7 = utils,\n    disjunctionToList = _require$7.disjunctionToList,\n    listToDisjunction = _require$7.listToDisjunction;\n\n/**\n * Removes duplicates from a disjunction sequence:\n *\n * /(ab|bc|ab)+(xy|xy)+/ -> /(ab|bc)+(xy)+/\n */\n\n\nvar disjunctionRemoveDuplicatesTransform = {\n  Disjunction: function Disjunction(path) {\n    var node = path.node;\n\n    // Make unique nodes.\n\n    var uniqueNodesMap = {};\n\n    var parts = disjunctionToList(node).filter(function (part) {\n      var encoded = part ? NodePath$1.getForNode(part).jsonEncode() : 'null';\n\n      // Already recorded this part, filter out.\n      if (uniqueNodesMap.hasOwnProperty(encoded)) {\n        return false;\n      }\n\n      uniqueNodesMap[encoded] = part;\n      return true;\n    });\n\n    // Replace with the optimized disjunction.\n    path.replace(listToDisjunction(parts));\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to replace single char group disjunction to char group\n *\n * a|b|c -> [abc]\n * [12]|3|4 -> [1234]\n * (a|b|c) -> ([abc])\n * (?:a|b|c) -> [abc]\n */\n\nvar groupSingleCharsToCharClass = {\n  Disjunction: function Disjunction(path) {\n    var node = path.node,\n        parent = path.parent;\n\n\n    if (!handlers[parent.type]) {\n      return;\n    }\n\n    var charset = new Map();\n\n    if (!shouldProcess(node, charset) || !charset.size) {\n      return;\n    }\n\n    var characterClass = {\n      type: 'CharacterClass',\n      expressions: Array.from(charset.keys()).sort().map(function (key) {\n        return charset.get(key);\n      })\n    };\n\n    handlers[parent.type](path.getParent(), characterClass);\n  }\n};\n\nvar handlers = {\n  RegExp: function RegExp(path, characterClass) {\n    var node = path.node;\n\n\n    node.body = characterClass;\n  },\n  Group: function Group(path, characterClass) {\n    var node = path.node;\n\n\n    if (node.capturing) {\n      node.expression = characterClass;\n    } else {\n      path.replace(characterClass);\n    }\n  }\n};\n\nfunction shouldProcess(expression, charset) {\n  if (!expression) {\n    // Abort on empty disjunction part\n    return false;\n  }\n\n  var type = expression.type;\n\n\n  if (type === 'Disjunction') {\n    var left = expression.left,\n        right = expression.right;\n\n\n    return shouldProcess(left, charset) && shouldProcess(right, charset);\n  } else if (type === 'Char') {\n    if (expression.kind === 'meta' && expression.symbol === '.') {\n      return false;\n    }\n\n    var value = expression.value;\n\n\n    charset.set(value, expression);\n\n    return true;\n  } else if (type === 'CharacterClass' && !expression.negative) {\n    return expression.expressions.every(function (expression) {\n      return shouldProcess(expression, charset);\n    });\n  }\n\n  return false;\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to remove non-capturing empty groups.\n *\n * /(?:)a/ -> /a/\n * /a|(?:)/ -> /a|/\n */\n\nvar removeEmptyGroupTransform = {\n  Group: function Group(path) {\n    var node = path.node,\n        parent = path.parent;\n\n    var childPath = path.getChild();\n\n    if (node.capturing || childPath) {\n      return;\n    }\n\n    if (parent.type === 'Repetition') {\n\n      path.getParent().replace(node);\n    } else if (parent.type !== 'RegExp') {\n\n      path.remove();\n    }\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A regexp-tree plugin to remove unnecessary groups.\n *\n * /(?:a)/ -> /a/\n */\n\nfunction _toConsumableArray$5(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar ungroupTransform = {\n  Group: function Group(path) {\n    var node = path.node,\n        parent = path.parent;\n\n    var childPath = path.getChild();\n\n    if (node.capturing || !childPath) {\n      return;\n    }\n\n    // Don't optimize \\1(?:0) to \\10\n    if (!hasAppropriateSiblings(path)) {\n      return;\n    }\n\n    // Don't optimize /a(?:b|c)/ to /ab|c/\n    // but /(?:b|c)/ to /b|c/ is ok\n    if (childPath.node.type === 'Disjunction' && parent.type !== 'RegExp') {\n      return;\n    }\n\n    // Don't optimize /(?:ab)+/ to /ab+/\n    // but /(?:a)+/ to /a+/ is ok\n    // and /(?:[a-d])+/ to /[a-d]+/ is ok too\n    if (parent.type === 'Repetition' && childPath.node.type !== 'Char' && childPath.node.type !== 'CharacterClass') {\n      return;\n    }\n\n    if (childPath.node.type === 'Alternative') {\n      var parentPath = path.getParent();\n      if (parentPath.node.type === 'Alternative') {\n        // /abc(?:def)ghi/ When (?:def) is ungrouped its content must be merged with parent alternative\n\n        parentPath.replace({\n          type: 'Alternative',\n          expressions: [].concat(_toConsumableArray$5(parent.expressions.slice(0, path.index)), _toConsumableArray$5(childPath.node.expressions), _toConsumableArray$5(parent.expressions.slice(path.index + 1)))\n        });\n      }\n    } else {\n      path.replace(childPath.node);\n    }\n  }\n};\n\nfunction hasAppropriateSiblings(path) {\n  var parent = path.parent,\n      index = path.index;\n\n\n  if (parent.type !== 'Alternative') {\n    return true;\n  }\n\n  var previousNode = parent.expressions[index - 1];\n  if (previousNode == null) {\n    return true;\n  }\n\n  // Don't optimized \\1(?:0) to \\10\n  if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {\n    return false;\n  }\n\n  // Don't optimized \\2(?:0) to \\20\n  if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nfunction _toConsumableArray$4(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar NodePath = nodePath;\n\nvar _require$6 = utils,\n    increaseQuantifierByOne = _require$6.increaseQuantifierByOne;\n\n/**\n * A regexp-tree plugin to combine repeating patterns.\n *\n * /^abcabcabc/ -> /^abc{3}/\n * /^(?:abc){2}abc/ -> /^(?:abc){3}/\n * /^abc(?:abc){2}/ -> /^(?:abc){3}/\n */\n\nvar combineRepeatingPatternsTransform = {\n  Alternative: function Alternative(path) {\n    var node = path.node;\n\n    // We can skip the first child\n\n    var index = 1;\n    while (index < node.expressions.length) {\n      var child = path.getChild(index);\n      index = Math.max(1, combineRepeatingPatternLeft(path, child, index));\n\n      if (index >= node.expressions.length) {\n        break;\n      }\n\n      child = path.getChild(index);\n      index = Math.max(1, combineWithPreviousRepetition(path, child, index));\n\n      if (index >= node.expressions.length) {\n        break;\n      }\n\n      child = path.getChild(index);\n      index = Math.max(1, combineRepetitionWithPrevious(path, child, index));\n\n      index++;\n    }\n  }\n};\n\n// abcabc -> (?:abc){2}\nfunction combineRepeatingPatternLeft(alternative, child, index) {\n  var node = alternative.node;\n\n\n  var nbPossibleLengths = Math.ceil(index / 2);\n  var i = 0;\n\n  while (i < nbPossibleLengths) {\n    var startIndex = index - 2 * i - 1;\n    var right = void 0,\n        left = void 0;\n\n    if (i === 0) {\n      right = child;\n      left = alternative.getChild(startIndex);\n    } else {\n      right = NodePath.getForNode({\n        type: 'Alternative',\n        expressions: [].concat(_toConsumableArray$4(node.expressions.slice(index - i, index)), [child.node])\n      });\n\n      left = NodePath.getForNode({\n        type: 'Alternative',\n        expressions: [].concat(_toConsumableArray$4(node.expressions.slice(startIndex, index - i)))\n      });\n    }\n\n    if (right.hasEqualSource(left)) {\n      for (var j = 0; j < 2 * i + 1; j++) {\n        alternative.getChild(startIndex).remove();\n      }\n\n      child.replace({\n        type: 'Repetition',\n        expression: i === 0 && right.node.type !== 'Repetition' ? right.node : {\n          type: 'Group',\n          capturing: false,\n          expression: right.node\n        },\n        quantifier: {\n          type: 'Quantifier',\n          kind: 'Range',\n          from: 2,\n          to: 2,\n          greedy: true\n        }\n      });\n      return startIndex;\n    }\n\n    i++;\n  }\n\n  return index;\n}\n\n// (?:abc){2}abc -> (?:abc){3}\nfunction combineWithPreviousRepetition(alternative, child, index) {\n  var node = alternative.node;\n\n\n  var i = 0;\n  while (i < index) {\n    var previousChild = alternative.getChild(i);\n\n    if (previousChild.node.type === 'Repetition' && previousChild.node.quantifier.greedy) {\n      var left = previousChild.getChild();\n      var right = void 0;\n\n      if (left.node.type === 'Group' && !left.node.capturing) {\n        left = left.getChild();\n      }\n\n      if (i + 1 === index) {\n        right = child;\n        if (right.node.type === 'Group' && !right.node.capturing) {\n          right = right.getChild();\n        }\n      } else {\n        right = NodePath.getForNode({\n          type: 'Alternative',\n          expressions: [].concat(_toConsumableArray$4(node.expressions.slice(i + 1, index + 1)))\n        });\n      }\n\n      if (left.hasEqualSource(right)) {\n        for (var j = i; j < index; j++) {\n          alternative.getChild(i + 1).remove();\n        }\n\n        increaseQuantifierByOne(previousChild.node.quantifier);\n\n        return i;\n      }\n    }\n\n    i++;\n  }\n  return index;\n}\n\n// abc(?:abc){2} -> (?:abc){3}\nfunction combineRepetitionWithPrevious(alternative, child, index) {\n  var node = alternative.node;\n\n\n  if (child.node.type === 'Repetition' && child.node.quantifier.greedy) {\n    var right = child.getChild();\n    var left = void 0;\n\n    if (right.node.type === 'Group' && !right.node.capturing) {\n      right = right.getChild();\n    }\n\n    var rightLength = void 0;\n    if (right.node.type === 'Alternative') {\n      rightLength = right.node.expressions.length;\n      left = NodePath.getForNode({\n        type: 'Alternative',\n        expressions: [].concat(_toConsumableArray$4(node.expressions.slice(index - rightLength, index)))\n      });\n    } else {\n      rightLength = 1;\n      left = alternative.getChild(index - 1);\n      if (left.node.type === 'Group' && !left.node.capturing) {\n        left = left.getChild();\n      }\n    }\n\n    if (left.hasEqualSource(right)) {\n      for (var j = index - rightLength; j < index; j++) {\n        alternative.getChild(index - rightLength).remove();\n      }\n\n      increaseQuantifierByOne(child.node.quantifier);\n\n      return index - rightLength;\n    }\n  }\n  return index;\n}\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar transforms = new Map([\n// \\ud83d\\ude80 -> \\u{1f680}\n['charSurrogatePairToSingleUnicode', charSurrogatePairToSingleUnicodeTransform],\n\n// \\u0061 -> a\n['charCodeToSimpleChar', charCodeToSimpleCharTransform],\n\n// /Aa/i -> /aa/i\n['charCaseInsensitiveLowerCaseTransform', charCaseInsensitiveLowercaseTransform],\n\n// [\\d\\d] -> [\\d]\n['charClassRemoveDuplicates', charClassRemoveDuplicatesTransform],\n\n// a{1,2}a{2,3} -> a{3,5}\n['quantifiersMerge', quantifiersMergeTransform],\n\n// a{1,} -> a+, a{3,3} -> a{3}, a{1} -> a\n['quantifierRangeToSymbol', quantifierRangeToSymbolTransform],\n\n// [a-a] -> [a], [a-b] -> [ab]\n['charClassClassrangesToChars', charClassClassrangesToCharsTransform],\n\n// [0-9] -> [\\d]\n['charClassToMeta', charClassToMetaTransform],\n\n// [\\d] -> \\d, [^\\w] -> \\W\n['charClassToSingleChar', charClassToSingleCharTransform],\n\n// \\e -> e\n['charEscapeUnescape', charEscapeUnescapeTransform],\n\n// [a-de-f] -> [a-f]\n['charClassClassrangesMerge', charClassClassrangesMergeTransform],\n\n// (ab|ab) -> (ab)\n['disjunctionRemoveDuplicates', disjunctionRemoveDuplicatesTransform],\n\n// (a|b|c) -> [abc]\n['groupSingleCharsToCharClass', groupSingleCharsToCharClass],\n\n// (?:)a -> a\n['removeEmptyGroup', removeEmptyGroupTransform],\n\n// (?:a) -> a\n['ungroup', ungroupTransform],\n\n// abcabcabc -> (?:abc){3}\n['combineRepeatingPatterns', combineRepeatingPatternsTransform]]);\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar clone = clone$1;\nvar parser$2 = parser$4;\nvar transform = transform$1;\nvar optimizationTransforms = transforms;\n\nvar optimizer$1 = {\n  /**\n   * Optimizer transforms a regular expression into an optimized version,\n   * replacing some sub-expressions with their idiomatic patterns.\n   *\n   * @param string | RegExp | AST - a regexp to optimize.\n   *\n   * @return TransformResult - an optimized regexp.\n   *\n   * Example:\n   *\n   *   /[a-zA-Z_0-9][a-zA-Z_0-9]*\\e{1,}/\n   *\n   * Optimized to:\n   *\n   *   /\\w+e+/\n   */\n  optimize: function optimize(regexp) {\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n        _ref$whitelist = _ref.whitelist,\n        whitelist = _ref$whitelist === undefined ? [] : _ref$whitelist,\n        _ref$blacklist = _ref.blacklist,\n        blacklist = _ref$blacklist === undefined ? [] : _ref$blacklist;\n\n    var transformsRaw = whitelist.length > 0 ? whitelist : Array.from(optimizationTransforms.keys());\n\n    var transformToApply = transformsRaw.filter(function (transform) {\n      return !blacklist.includes(transform);\n    });\n\n    var ast = regexp;\n    if (regexp instanceof RegExp) {\n      regexp = '' + regexp;\n    }\n\n    if (typeof regexp === 'string') {\n      ast = parser$2.parse(regexp);\n    }\n\n    var result = new transform.TransformResult(ast);\n    var prevResultString = void 0;\n\n    do {\n      // Get a copy of the current state here so\n      // we can compare it with the state at the\n      // end of the loop.\n      prevResultString = result.toString();\n      ast = clone(result.getAST());\n\n      transformToApply.forEach(function (transformName) {\n        if (!optimizationTransforms.has(transformName)) {\n          throw new Error('Unknown optimization-transform: ' + transformName + '. ' + 'Available transforms are: ' + Array.from(optimizationTransforms.keys()).join(', '));\n        }\n\n        var transformer = optimizationTransforms.get(transformName);\n\n        // Don't override result just yet since we\n        // might want to rollback the transform\n        var newResult = transform.transform(ast, transformer);\n\n        if (newResult.toString() !== result.toString()) {\n          if (newResult.toString().length <= result.toString().length) {\n            result = newResult;\n          } else {\n            // Result has changed but is not shorter:\n            // restore ast to its previous state.\n\n            ast = clone(result.getAST());\n          }\n        }\n      });\n\n      // Keep running the optimizer until it stops\n      // making any change to the regexp.\n    } while (result.toString() !== prevResultString);\n\n    return result;\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * Epsilon, the empty string.\n */\n\nvar EPSILON$3 = 'ε';\n\n/**\n * Epsilon-closure.\n */\nvar EPSILON_CLOSURE$2 = EPSILON$3 + '*';\n\nvar specialSymbols = {\n  EPSILON: EPSILON$3,\n  EPSILON_CLOSURE: EPSILON_CLOSURE$2\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar _slicedToArray$1 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass$4 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray$3(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require$5 = specialSymbols,\n    EPSILON$2 = _require$5.EPSILON,\n    EPSILON_CLOSURE$1 = _require$5.EPSILON_CLOSURE;\n\n/**\n * NFA fragment.\n *\n * NFA sub-fragments can be combined to a larger NFAs building\n * the resulting machine. Combining the fragments is done by patching\n * edges of the in- and out-states.\n *\n * 2-states implementation, `in`, and `out`. Eventually all transitions\n * go to the same `out`, which can further be connected via ε-transition\n * with other fragment.\n */\n\n\nvar NFA$2 = function () {\n  function NFA(inState, outState) {\n    _classCallCheck$4(this, NFA);\n\n    this.in = inState;\n    this.out = outState;\n  }\n\n  /**\n   * Tries to recognize a string based on this NFA fragment.\n   */\n\n\n  _createClass$4(NFA, [{\n    key: 'matches',\n    value: function matches(string) {\n      return this.in.matches(string);\n    }\n\n    /**\n     * Returns an alphabet for this NFA.\n     */\n\n  }, {\n    key: 'getAlphabet',\n    value: function getAlphabet() {\n      if (!this._alphabet) {\n        this._alphabet = new Set();\n        var table = this.getTransitionTable();\n        for (var state in table) {\n          var transitions = table[state];\n          for (var symbol in transitions) {\n            if (symbol !== EPSILON_CLOSURE$1) {\n              this._alphabet.add(symbol);\n            }\n          }\n        }\n      }\n      return this._alphabet;\n    }\n\n    /**\n     * Returns set of accepting states.\n     */\n\n  }, {\n    key: 'getAcceptingStates',\n    value: function getAcceptingStates() {\n      if (!this._acceptingStates) {\n        // States are determined during table construction.\n        this.getTransitionTable();\n      }\n      return this._acceptingStates;\n    }\n\n    /**\n     * Returns accepting state numbers.\n     */\n\n  }, {\n    key: 'getAcceptingStateNumbers',\n    value: function getAcceptingStateNumbers() {\n      if (!this._acceptingStateNumbers) {\n        this._acceptingStateNumbers = new Set();\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = this.getAcceptingStates()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var acceptingState = _step.value;\n\n            this._acceptingStateNumbers.add(acceptingState.number);\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      }\n      return this._acceptingStateNumbers;\n    }\n\n    /**\n     * Builds and returns transition table.\n     */\n\n  }, {\n    key: 'getTransitionTable',\n    value: function getTransitionTable() {\n      var _this = this;\n\n      if (!this._transitionTable) {\n        this._transitionTable = {};\n        this._acceptingStates = new Set();\n\n        var visited = new Set();\n        var symbols = new Set();\n\n        var visitState = function visitState(state) {\n          if (visited.has(state)) {\n            return;\n          }\n\n          visited.add(state);\n          state.number = visited.size;\n          _this._transitionTable[state.number] = {};\n\n          if (state.accepting) {\n            _this._acceptingStates.add(state);\n          }\n\n          var transitions = state.getTransitions();\n\n          var _iteratorNormalCompletion2 = true;\n          var _didIteratorError2 = false;\n          var _iteratorError2 = undefined;\n\n          try {\n            for (var _iterator2 = transitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n              var _ref = _step2.value;\n\n              var _ref2 = _slicedToArray$1(_ref, 2);\n\n              var symbol = _ref2[0];\n              var symbolTransitions = _ref2[1];\n\n              var combinedState = [];\n              symbols.add(symbol);\n              var _iteratorNormalCompletion3 = true;\n              var _didIteratorError3 = false;\n              var _iteratorError3 = undefined;\n\n              try {\n                for (var _iterator3 = symbolTransitions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                  var nextState = _step3.value;\n\n                  visitState(nextState);\n                  combinedState.push(nextState.number);\n                }\n              } catch (err) {\n                _didIteratorError3 = true;\n                _iteratorError3 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                    _iterator3.return();\n                  }\n                } finally {\n                  if (_didIteratorError3) {\n                    throw _iteratorError3;\n                  }\n                }\n              }\n\n              _this._transitionTable[state.number][symbol] = combinedState;\n            }\n          } catch (err) {\n            _didIteratorError2 = true;\n            _iteratorError2 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                _iterator2.return();\n              }\n            } finally {\n              if (_didIteratorError2) {\n                throw _iteratorError2;\n              }\n            }\n          }\n        };\n\n        // Traverse the graph starting from the `in`.\n        visitState(this.in);\n\n        // Append epsilon-closure column.\n        visited.forEach(function (state) {\n          delete _this._transitionTable[state.number][EPSILON$2];\n          _this._transitionTable[state.number][EPSILON_CLOSURE$1] = [].concat(_toConsumableArray$3(state.getEpsilonClosure())).map(function (s) {\n            return s.number;\n          });\n        });\n      }\n\n      return this._transitionTable;\n    }\n  }]);\n\n  return NFA;\n}();\n\nvar nfa = NFA$2;\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n// DFA minization.\n\n/**\n * Map from state to current set it goes.\n */\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }\n\nfunction _toConsumableArray$2(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar currentTransitionMap = null;\n\n/**\n * Takes a DFA, and returns a minimized version of it\n * compressing some states to groups (using standard, 0-, 1-,\n * 2-, ... N-equivalence algorithm).\n */\nfunction minimize(dfa) {\n  var table = dfa.getTransitionTable();\n  var allStates = Object.keys(table);\n  var alphabet = dfa.getAlphabet();\n  var accepting = dfa.getAcceptingStateNumbers();\n\n  currentTransitionMap = {};\n\n  var nonAccepting = new Set();\n\n  allStates.forEach(function (state) {\n    state = Number(state);\n    var isAccepting = accepting.has(state);\n\n    if (isAccepting) {\n      currentTransitionMap[state] = accepting;\n    } else {\n      nonAccepting.add(state);\n      currentTransitionMap[state] = nonAccepting;\n    }\n  });\n\n  // ---------------------------------------------------------------------------\n  // Step 1: build equivalent sets.\n\n  // All [1..N] equivalent sets.\n  var all = [\n  // 0-equivalent sets.\n  [nonAccepting, accepting].filter(function (set) {\n    return set.size > 0;\n  })];\n\n  var current = void 0;\n  var previous = void 0;\n\n  // Top of the stack is the current list of sets to analyze.\n  current = all[all.length - 1];\n\n  // Previous set (to check whether we need to stop).\n  previous = all[all.length - 2];\n\n  // Until we'll not have the same N and N-1 equivalent rows.\n\n  var _loop = function _loop() {\n    var newTransitionMap = {};\n\n    var _iteratorNormalCompletion3 = true;\n    var _didIteratorError3 = false;\n    var _iteratorError3 = undefined;\n\n    try {\n      for (var _iterator3 = current[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n        var _set = _step3.value;\n\n        // Handled states for this set.\n        var handledStates = {};\n\n        var _set2 = _toArray(_set),\n            first = _set2[0],\n            rest = _set2.slice(1);\n\n        handledStates[first] = new Set([first]);\n\n        // Have to compare each from the rest states with\n        // the already handled states, and see if they are equivalent.\n        var _iteratorNormalCompletion4 = true;\n        var _didIteratorError4 = false;\n        var _iteratorError4 = undefined;\n\n        try {\n          restSets: for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n            var state = _step4.value;\n            var _iteratorNormalCompletion5 = true;\n            var _didIteratorError5 = false;\n            var _iteratorError5 = undefined;\n\n            try {\n              for (var _iterator5 = Object.keys(handledStates)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                var handledState = _step5.value;\n\n                // This and some previously handled state are equivalent --\n                // just append this state to the same set.\n                if (areEquivalent(state, handledState, table, alphabet)) {\n                  handledStates[handledState].add(state);\n                  handledStates[state] = handledStates[handledState];\n                  continue restSets;\n                }\n              }\n              // Else, this state is not equivalent to any of the\n              // handled states -- allocate a new set for it.\n            } catch (err) {\n              _didIteratorError5 = true;\n              _iteratorError5 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                  _iterator5.return();\n                }\n              } finally {\n                if (_didIteratorError5) {\n                  throw _iteratorError5;\n                }\n              }\n            }\n\n            handledStates[state] = new Set([state]);\n          }\n        } catch (err) {\n          _didIteratorError4 = true;\n          _iteratorError4 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion4 && _iterator4.return) {\n              _iterator4.return();\n            }\n          } finally {\n            if (_didIteratorError4) {\n              throw _iteratorError4;\n            }\n          }\n        }\n\n        // Add these handled states to all states map.\n\n\n        Object.assign(newTransitionMap, handledStates);\n      }\n\n      // Update current transition map for the handled row.\n    } catch (err) {\n      _didIteratorError3 = true;\n      _iteratorError3 = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion3 && _iterator3.return) {\n          _iterator3.return();\n        }\n      } finally {\n        if (_didIteratorError3) {\n          throw _iteratorError3;\n        }\n      }\n    }\n\n    currentTransitionMap = newTransitionMap;\n\n    var newSets = new Set(Object.keys(newTransitionMap).map(function (state) {\n      return newTransitionMap[state];\n    }));\n\n    all.push([].concat(_toConsumableArray$2(newSets)));\n\n    // Top of the stack is the current.\n    current = all[all.length - 1];\n\n    // Previous set.\n    previous = all[all.length - 2];\n  };\n\n  while (!sameRow(current, previous)) {\n    _loop();\n  }\n\n  // ---------------------------------------------------------------------------\n  // Step 2: build minimized table from the equivalent sets.\n\n  // Remap state numbers from sets to index-based.\n  var remaped = new Map();\n  var idx = 1;\n  current.forEach(function (set) {\n    return remaped.set(set, idx++);\n  });\n\n  // Build the minimized table from the calculated equivalent sets.\n  var minimizedTable = {};\n\n  var minimizedAcceptingStates = new Set();\n\n  var updateAcceptingStates = function updateAcceptingStates(set, idx) {\n    var _iteratorNormalCompletion = true;\n    var _didIteratorError = false;\n    var _iteratorError = undefined;\n\n    try {\n      for (var _iterator = set[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n        var state = _step.value;\n\n        if (accepting.has(state)) {\n          minimizedAcceptingStates.add(idx);\n        }\n      }\n    } catch (err) {\n      _didIteratorError = true;\n      _iteratorError = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion && _iterator.return) {\n          _iterator.return();\n        }\n      } finally {\n        if (_didIteratorError) {\n          throw _iteratorError;\n        }\n      }\n    }\n  };\n\n  var _iteratorNormalCompletion2 = true;\n  var _didIteratorError2 = false;\n  var _iteratorError2 = undefined;\n\n  try {\n    for (var _iterator2 = remaped.entries()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n      var _ref = _step2.value;\n\n      var _ref2 = _slicedToArray(_ref, 2);\n\n      var set = _ref2[0];\n      var _idx = _ref2[1];\n\n      minimizedTable[_idx] = {};\n      var _iteratorNormalCompletion6 = true;\n      var _didIteratorError6 = false;\n      var _iteratorError6 = undefined;\n\n      try {\n        for (var _iterator6 = alphabet[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n          var symbol = _step6.value;\n\n          updateAcceptingStates(set, _idx);\n\n          // Determine original transition for this symbol from the set.\n          var originalTransition = void 0;\n          var _iteratorNormalCompletion7 = true;\n          var _didIteratorError7 = false;\n          var _iteratorError7 = undefined;\n\n          try {\n            for (var _iterator7 = set[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n              var originalState = _step7.value;\n\n              originalTransition = table[originalState][symbol];\n              if (originalTransition) {\n                break;\n              }\n            }\n          } catch (err) {\n            _didIteratorError7 = true;\n            _iteratorError7 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                _iterator7.return();\n              }\n            } finally {\n              if (_didIteratorError7) {\n                throw _iteratorError7;\n              }\n            }\n          }\n\n          if (originalTransition) {\n            minimizedTable[_idx][symbol] = remaped.get(currentTransitionMap[originalTransition]);\n          }\n        }\n      } catch (err) {\n        _didIteratorError6 = true;\n        _iteratorError6 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion6 && _iterator6.return) {\n            _iterator6.return();\n          }\n        } finally {\n          if (_didIteratorError6) {\n            throw _iteratorError6;\n          }\n        }\n      }\n    }\n\n    // Update the table, and accepting states on the original DFA.\n  } catch (err) {\n    _didIteratorError2 = true;\n    _iteratorError2 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion2 && _iterator2.return) {\n        _iterator2.return();\n      }\n    } finally {\n      if (_didIteratorError2) {\n        throw _iteratorError2;\n      }\n    }\n  }\n\n  dfa.setTransitionTable(minimizedTable);\n  dfa.setAcceptingStateNumbers(minimizedAcceptingStates);\n\n  return dfa;\n}\n\nfunction sameRow(r1, r2) {\n  if (!r2) {\n    return false;\n  }\n\n  if (r1.length !== r2.length) {\n    return false;\n  }\n\n  for (var i = 0; i < r1.length; i++) {\n    var s1 = r1[i];\n    var s2 = r2[i];\n\n    if (s1.size !== s2.size) {\n      return false;\n    }\n\n    if ([].concat(_toConsumableArray$2(s1)).sort().join(',') !== [].concat(_toConsumableArray$2(s2)).sort().join(',')) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Checks whether two states are N-equivalent, i.e. whether they go\n * to the same set on a symbol.\n */\nfunction areEquivalent(s1, s2, table, alphabet) {\n  var _iteratorNormalCompletion8 = true;\n  var _didIteratorError8 = false;\n  var _iteratorError8 = undefined;\n\n  try {\n    for (var _iterator8 = alphabet[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n      var symbol = _step8.value;\n\n      if (!goToSameSet(s1, s2, table, symbol)) {\n        return false;\n      }\n    }\n  } catch (err) {\n    _didIteratorError8 = true;\n    _iteratorError8 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion8 && _iterator8.return) {\n        _iterator8.return();\n      }\n    } finally {\n      if (_didIteratorError8) {\n        throw _iteratorError8;\n      }\n    }\n  }\n\n  return true;\n}\n\n/**\n * Checks whether states go to the same set.\n */\nfunction goToSameSet(s1, s2, table, symbol) {\n  if (!currentTransitionMap[s1] || !currentTransitionMap[s2]) {\n    return false;\n  }\n\n  var originalTransitionS1 = table[s1][symbol];\n  var originalTransitionS2 = table[s2][symbol];\n\n  // If no actual transition on this symbol, treat it as positive.\n  if (!originalTransitionS1 && !originalTransitionS2) {\n    return true;\n  }\n\n  // Otherwise, check if they are in the same sets.\n  return currentTransitionMap[s1].has(originalTransitionS1) && currentTransitionMap[s2].has(originalTransitionS2);\n}\n\nvar dfaMinimizer = {\n  minimize: minimize\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar _createClass$3 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DFAMinimizer = dfaMinimizer;\n\nvar _require$4 = specialSymbols,\n    EPSILON_CLOSURE = _require$4.EPSILON_CLOSURE;\n\n/**\n * DFA is build by converting from NFA (subset construction).\n */\n\n\nvar DFA$1 = function () {\n  function DFA(nfa) {\n    _classCallCheck$3(this, DFA);\n\n    this._nfa = nfa;\n  }\n\n  /**\n   * Minimizes DFA.\n   */\n\n\n  _createClass$3(DFA, [{\n    key: 'minimize',\n    value: function minimize() {\n      this.getTransitionTable();\n\n      this._originalAcceptingStateNumbers = this._acceptingStateNumbers;\n      this._originalTransitionTable = this._transitionTable;\n\n      DFAMinimizer.minimize(this);\n    }\n\n    /**\n     * Returns alphabet for this DFA.\n     */\n\n  }, {\n    key: 'getAlphabet',\n    value: function getAlphabet() {\n      return this._nfa.getAlphabet();\n    }\n\n    /**\n     * Returns accepting states.\n     */\n\n  }, {\n    key: 'getAcceptingStateNumbers',\n    value: function getAcceptingStateNumbers() {\n      if (!this._acceptingStateNumbers) {\n        // Accepting states are determined during table construction.\n        this.getTransitionTable();\n      }\n\n      return this._acceptingStateNumbers;\n    }\n\n    /**\n     * Returns original accepting states.\n     */\n\n  }, {\n    key: 'getOriginaAcceptingStateNumbers',\n    value: function getOriginaAcceptingStateNumbers() {\n      if (!this._originalAcceptingStateNumbers) {\n        // Accepting states are determined during table construction.\n        this.getTransitionTable();\n      }\n\n      return this._originalAcceptingStateNumbers;\n    }\n\n    /**\n     * Sets transition table.\n     */\n\n  }, {\n    key: 'setTransitionTable',\n    value: function setTransitionTable(table) {\n      this._transitionTable = table;\n    }\n\n    /**\n     * Sets accepting states.\n     */\n\n  }, {\n    key: 'setAcceptingStateNumbers',\n    value: function setAcceptingStateNumbers(stateNumbers) {\n      this._acceptingStateNumbers = stateNumbers;\n    }\n\n    /**\n     * DFA transition table is built from NFA table.\n     */\n\n  }, {\n    key: 'getTransitionTable',\n    value: function getTransitionTable() {\n      var _this = this;\n\n      if (this._transitionTable) {\n        return this._transitionTable;\n      }\n\n      // Calculate from NFA transition table.\n      var nfaTable = this._nfa.getTransitionTable();\n      var nfaStates = Object.keys(nfaTable);\n\n      this._acceptingStateNumbers = new Set();\n\n      // Start state of DFA is E(S[nfa])\n      var startState = nfaTable[nfaStates[0]][EPSILON_CLOSURE];\n\n      // Init the worklist (states which should be in the DFA).\n      var worklist = [startState];\n\n      var alphabet = this.getAlphabet();\n      var nfaAcceptingStates = this._nfa.getAcceptingStateNumbers();\n\n      var dfaTable = {};\n\n      // Determine whether the combined DFA state is accepting.\n      var updateAcceptingStates = function updateAcceptingStates(states) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = nfaAcceptingStates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var nfaAcceptingState = _step.value;\n\n            // If any of the states from NFA is accepting, DFA's\n            // state is accepting as well.\n            if (states.indexOf(nfaAcceptingState) !== -1) {\n              _this._acceptingStateNumbers.add(states.join(','));\n              break;\n            }\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      };\n\n      while (worklist.length > 0) {\n        var states = worklist.shift();\n        var dfaStateLabel = states.join(',');\n        dfaTable[dfaStateLabel] = {};\n\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = alphabet[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var symbol = _step2.value;\n\n            var onSymbol = [];\n\n            // Determine whether the combined state is accepting.\n            updateAcceptingStates(states);\n\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n              for (var _iterator3 = states[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                var state = _step3.value;\n\n                var nfaStatesOnSymbol = nfaTable[state][symbol];\n                if (!nfaStatesOnSymbol) {\n                  continue;\n                }\n\n                var _iteratorNormalCompletion4 = true;\n                var _didIteratorError4 = false;\n                var _iteratorError4 = undefined;\n\n                try {\n                  for (var _iterator4 = nfaStatesOnSymbol[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                    var nfaStateOnSymbol = _step4.value;\n\n                    if (!nfaTable[nfaStateOnSymbol]) {\n                      continue;\n                    }\n                    onSymbol.push.apply(onSymbol, _toConsumableArray$1(nfaTable[nfaStateOnSymbol][EPSILON_CLOSURE]));\n                  }\n                } catch (err) {\n                  _didIteratorError4 = true;\n                  _iteratorError4 = err;\n                } finally {\n                  try {\n                    if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                      _iterator4.return();\n                    }\n                  } finally {\n                    if (_didIteratorError4) {\n                      throw _iteratorError4;\n                    }\n                  }\n                }\n              }\n            } catch (err) {\n              _didIteratorError3 = true;\n              _iteratorError3 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                  _iterator3.return();\n                }\n              } finally {\n                if (_didIteratorError3) {\n                  throw _iteratorError3;\n                }\n              }\n            }\n\n            var dfaStatesOnSymbolSet = new Set(onSymbol);\n            var dfaStatesOnSymbol = [].concat(_toConsumableArray$1(dfaStatesOnSymbolSet));\n\n            if (dfaStatesOnSymbol.length > 0) {\n              var dfaOnSymbolStr = dfaStatesOnSymbol.join(',');\n\n              dfaTable[dfaStateLabel][symbol] = dfaOnSymbolStr;\n\n              if (!dfaTable.hasOwnProperty(dfaOnSymbolStr)) {\n                worklist.unshift(dfaStatesOnSymbol);\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      }\n\n      return this._transitionTable = this._remapStateNumbers(dfaTable);\n    }\n\n    /**\n     * Remaps state numbers in the resulting table:\n     * combined states '1,2,3' -> 1, '3,4' -> 2, etc.\n     */\n\n  }, {\n    key: '_remapStateNumbers',\n    value: function _remapStateNumbers(calculatedDFATable) {\n      var newStatesMap = {};\n\n      this._originalTransitionTable = calculatedDFATable;\n      var transitionTable = {};\n\n      Object.keys(calculatedDFATable).forEach(function (originalNumber, newNumber) {\n        newStatesMap[originalNumber] = newNumber + 1;\n      });\n\n      for (var originalNumber in calculatedDFATable) {\n        var originalRow = calculatedDFATable[originalNumber];\n        var row = {};\n\n        for (var symbol in originalRow) {\n          row[symbol] = newStatesMap[originalRow[symbol]];\n        }\n\n        transitionTable[newStatesMap[originalNumber]] = row;\n      }\n\n      // Remap accepting states.\n      this._originalAcceptingStateNumbers = this._acceptingStateNumbers;\n      this._acceptingStateNumbers = new Set();\n\n      var _iteratorNormalCompletion5 = true;\n      var _didIteratorError5 = false;\n      var _iteratorError5 = undefined;\n\n      try {\n        for (var _iterator5 = this._originalAcceptingStateNumbers[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n          var _originalNumber = _step5.value;\n\n          this._acceptingStateNumbers.add(newStatesMap[_originalNumber]);\n        }\n      } catch (err) {\n        _didIteratorError5 = true;\n        _iteratorError5 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion5 && _iterator5.return) {\n            _iterator5.return();\n          }\n        } finally {\n          if (_didIteratorError5) {\n            throw _iteratorError5;\n          }\n        }\n      }\n\n      return transitionTable;\n    }\n\n    /**\n     * Returns original DFA table, where state numbers\n     * are combined numbers from NFA.\n     */\n\n  }, {\n    key: 'getOriginalTransitionTable',\n    value: function getOriginalTransitionTable() {\n      if (!this._originalTransitionTable) {\n        // Original table is determined during table construction.\n        this.getTransitionTable();\n      }\n      return this._originalTransitionTable;\n    }\n\n    /**\n     * Checks whether this DFA accepts a string.\n     */\n\n  }, {\n    key: 'matches',\n    value: function matches(string) {\n      var state = 1;\n      var i = 0;\n      var table = this.getTransitionTable();\n\n      while (string[i]) {\n        state = table[state][string[i++]];\n        if (!state) {\n          return false;\n        }\n      }\n\n      if (!this.getAcceptingStateNumbers().has(state)) {\n        return false;\n      }\n\n      return true;\n    }\n  }]);\n\n  return DFA;\n}();\n\nvar dfa = DFA$1;\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * A generic FA State class (base for NFA and DFA).\n *\n * Maintains the transition map, and the flag whether\n * the state is accepting.\n */\n\nvar _createClass$2 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar State$1 = function () {\n  function State() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        _ref$accepting = _ref.accepting,\n        accepting = _ref$accepting === undefined ? false : _ref$accepting;\n\n    _classCallCheck$2(this, State);\n\n    /**\n     * Outgoing transitions to other states.\n     */\n    this._transitions = new Map();\n\n    /**\n     * Whether the state is accepting.\n     */\n    this.accepting = accepting;\n  }\n\n  /**\n   * Returns transitions for this state.\n   */\n\n\n  _createClass$2(State, [{\n    key: 'getTransitions',\n    value: function getTransitions() {\n      return this._transitions;\n    }\n\n    /**\n     * Creates a transition on symbol.\n     */\n\n  }, {\n    key: 'addTransition',\n    value: function addTransition(symbol, toState) {\n      this.getTransitionsOnSymbol(symbol).add(toState);\n      return this;\n    }\n\n    /**\n     * Returns transitions set on symbol.\n     */\n\n  }, {\n    key: 'getTransitionsOnSymbol',\n    value: function getTransitionsOnSymbol(symbol) {\n      var transitions = this._transitions.get(symbol);\n\n      if (!transitions) {\n        transitions = new Set();\n        this._transitions.set(symbol, transitions);\n      }\n\n      return transitions;\n    }\n  }]);\n\n  return State;\n}();\n\nvar state$1 = State$1;\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar _createClass$1 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar State = state$1;\n\nvar _require$3 = specialSymbols,\n    EPSILON$1 = _require$3.EPSILON;\n\n/**\n * NFA state.\n *\n * Allows nondeterministic transitions to several states on the\n * same symbol, and also epsilon-transitions.\n */\n\n\nvar NFAState$1 = function (_State) {\n  _inherits(NFAState, _State);\n\n  function NFAState() {\n    _classCallCheck$1(this, NFAState);\n\n    return _possibleConstructorReturn(this, (NFAState.__proto__ || Object.getPrototypeOf(NFAState)).apply(this, arguments));\n  }\n\n  _createClass$1(NFAState, [{\n    key: 'matches',\n\n\n    /**\n     * Whether this state matches a string.\n     *\n     * We maintain set of visited epsilon-states to avoid infinite loops\n     * when an epsilon-transition goes eventually to itself.\n     *\n     * NOTE: this function is rather \"educational\", since we use DFA for strings\n     * matching. DFA is built on top of NFA, and uses fast transition table.\n     */\n    value: function matches(string) {\n      var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();\n\n      // An epsilon-state has been visited, stop to avoid infinite loop.\n      if (visited.has(this)) {\n        return false;\n      }\n\n      visited.add(this);\n\n      // No symbols left..\n      if (string.length === 0) {\n        // .. and we're in the accepting state.\n        if (this.accepting) {\n          return true;\n        }\n\n        // Check if we can reach any accepting state from\n        // on the epsilon transitions.\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = this.getTransitionsOnSymbol(EPSILON$1)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var nextState = _step.value;\n\n            if (nextState.matches('', visited)) {\n              return true;\n            }\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n\n        return false;\n      }\n\n      // Else, we get some symbols.\n      var symbol = string[0];\n      var rest = string.slice(1);\n\n      var symbolTransitions = this.getTransitionsOnSymbol(symbol);\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = symbolTransitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var _nextState = _step2.value;\n\n          if (_nextState.matches(rest)) {\n            return true;\n          }\n        }\n\n        // If we couldn't match on symbol, check still epsilon-transitions\n        // without consuming the symbol (i.e. continue from `string`, not `rest`).\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = this.getTransitionsOnSymbol(EPSILON$1)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var _nextState2 = _step3.value;\n\n          if (_nextState2.matches(string, visited)) {\n            return true;\n          }\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n\n      return false;\n    }\n\n    /**\n     * Returns an ε-closure for this state:\n     * self + all states following ε-transitions.\n     */\n\n  }, {\n    key: 'getEpsilonClosure',\n    value: function getEpsilonClosure() {\n      var _this2 = this;\n\n      if (!this._epsilonClosure) {\n        (function () {\n          var epsilonTransitions = _this2.getTransitionsOnSymbol(EPSILON$1);\n          var closure = _this2._epsilonClosure = new Set();\n          closure.add(_this2);\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = epsilonTransitions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var nextState = _step4.value;\n\n              if (!closure.has(nextState)) {\n                closure.add(nextState);\n                var nextClosure = nextState.getEpsilonClosure();\n                nextClosure.forEach(function (state) {\n                  return closure.add(state);\n                });\n              }\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        })();\n      }\n\n      return this._epsilonClosure;\n    }\n  }]);\n\n  return NFAState;\n}(State);\n\nvar nfaState = NFAState$1;\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar NFA$1 = nfa;\nvar NFAState = nfaState;\n\nvar _require$2 = specialSymbols,\n    EPSILON = _require$2.EPSILON;\n\n// -----------------------------------------------------------------------------\n// Char NFA fragment: `c`\n\n/**\n * Char factory.\n *\n * Creates an NFA fragment for a single char.\n *\n * [in] --c--> [out]\n */\n\n\nfunction char$1(c) {\n  var inState = new NFAState();\n  var outState = new NFAState({\n    accepting: true\n  });\n\n  return new NFA$1(inState.addTransition(c, outState), outState);\n}\n\n// -----------------------------------------------------------------------------\n// Epsilon NFA fragment\n\n/**\n * Epsilon factory.\n *\n * Creates an NFA fragment for ε (recognizes an empty string).\n *\n * [in] --ε--> [out]\n */\nfunction e() {\n  return char$1(EPSILON);\n}\n\n// -----------------------------------------------------------------------------\n// Alteration NFA fragment: `abc`\n\n/**\n * Creates a connection between two NFA fragments on epsilon transition.\n *\n * [in-a] --a--> [out-a] --ε--> [in-b] --b--> [out-b]\n */\nfunction altPair(first, second) {\n  first.out.accepting = false;\n  second.out.accepting = true;\n\n  first.out.addTransition(EPSILON, second.in);\n\n  return new NFA$1(first.in, second.out);\n}\n\n/**\n * Alteration factory.\n *\n * Creates a alteration NFA for (at least) two NFA-fragments.\n */\nfunction alt$1(first) {\n  for (var _len = arguments.length, fragments = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    fragments[_key - 1] = arguments[_key];\n  }\n\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = fragments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var fragment = _step.value;\n\n      first = altPair(first, fragment);\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  return first;\n}\n\n// -----------------------------------------------------------------------------\n// Disjunction NFA fragment: `a|b`\n\n/**\n * Creates a disjunction choice between two fragments.\n */\nfunction orPair(first, second) {\n  var inState = new NFAState();\n  var outState = new NFAState();\n\n  inState.addTransition(EPSILON, first.in);\n  inState.addTransition(EPSILON, second.in);\n\n  outState.accepting = true;\n  first.out.accepting = false;\n  second.out.accepting = false;\n\n  first.out.addTransition(EPSILON, outState);\n  second.out.addTransition(EPSILON, outState);\n\n  return new NFA$1(inState, outState);\n}\n\n/**\n * Disjunction factory.\n *\n * Creates a disjunction NFA for (at least) two NFA-fragments.\n */\nfunction or$1(first) {\n  for (var _len2 = arguments.length, fragments = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    fragments[_key2 - 1] = arguments[_key2];\n  }\n\n  var _iteratorNormalCompletion2 = true;\n  var _didIteratorError2 = false;\n  var _iteratorError2 = undefined;\n\n  try {\n    for (var _iterator2 = fragments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n      var fragment = _step2.value;\n\n      first = orPair(first, fragment);\n    }\n  } catch (err) {\n    _didIteratorError2 = true;\n    _iteratorError2 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion2 && _iterator2.return) {\n        _iterator2.return();\n      }\n    } finally {\n      if (_didIteratorError2) {\n        throw _iteratorError2;\n      }\n    }\n  }\n\n  return first;\n}\n\n// -----------------------------------------------------------------------------\n// Kleene-closure\n\n/**\n * Kleene star/closure.\n *\n * a*\n */\nfunction repExplicit(fragment) {\n  var inState = new NFAState();\n  var outState = new NFAState({\n    accepting: true\n  });\n\n  // 0 or more.\n  inState.addTransition(EPSILON, fragment.in);\n  inState.addTransition(EPSILON, outState);\n\n  fragment.out.accepting = false;\n  fragment.out.addTransition(EPSILON, outState);\n  outState.addTransition(EPSILON, fragment.in);\n\n  return new NFA$1(inState, outState);\n}\n\n/**\n * Optimized Kleene-star: just adds ε-transitions from\n * input to the output, and back.\n */\nfunction rep$1(fragment) {\n  fragment.in.addTransition(EPSILON, fragment.out);\n  fragment.out.addTransition(EPSILON, fragment.in);\n  return fragment;\n}\n\n/**\n * Optimized Plus: just adds ε-transitions from\n * the output to the input.\n */\nfunction plusRep$1(fragment) {\n  fragment.out.addTransition(EPSILON, fragment.in);\n  return fragment;\n}\n\n/**\n * Optimized ? repetition: just adds ε-transitions from\n * the input to the output.\n */\nfunction questionRep$1(fragment) {\n  fragment.in.addTransition(EPSILON, fragment.out);\n  return fragment;\n}\n\nvar builders$1 = {\n  alt: alt$1,\n  char: char$1,\n  e: e,\n  or: or$1,\n  rep: rep$1,\n  repExplicit: repExplicit,\n  plusRep: plusRep$1,\n  questionRep: questionRep$1\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar parser$1 = parser$4;\n\nvar _require$1 = builders$1,\n    alt = _require$1.alt,\n    char = _require$1.char,\n    or = _require$1.or,\n    rep = _require$1.rep,\n    plusRep = _require$1.plusRep,\n    questionRep = _require$1.questionRep;\n\n/**\n * Helper `gen` function calls node type handler.\n */\n\n\nfunction gen(node) {\n  if (node && !generator$1[node.type]) {\n    throw new Error(node.type + ' is not supported in NFA/DFA interpreter.');\n  }\n\n  return node ? generator$1[node.type](node) : '';\n}\n\n/**\n * AST handler.\n */\nvar generator$1 = {\n  RegExp: function RegExp(node) {\n    if (node.flags !== '') {\n      throw new Error('NFA/DFA: Flags are not supported yet.');\n    }\n\n    return gen(node.body);\n  },\n  Alternative: function Alternative(node) {\n    var fragments = (node.expressions || []).map(gen);\n    return alt.apply(undefined, _toConsumableArray(fragments));\n  },\n  Disjunction: function Disjunction(node) {\n    return or(gen(node.left), gen(node.right));\n  },\n  Repetition: function Repetition(node) {\n    switch (node.quantifier.kind) {\n      case '*':\n        return rep(gen(node.expression));\n      case '+':\n        return plusRep(gen(node.expression));\n      case '?':\n        return questionRep(gen(node.expression));\n      default:\n        throw new Error('Unknown repeatition: ' + node.quantifier.kind + '.');\n    }\n  },\n  Char: function Char(node) {\n    if (node.kind !== 'simple') {\n      throw new Error('NFA/DFA: Only simple chars are supported yet.');\n    }\n\n    return char(node.value);\n  },\n  Group: function Group(node) {\n    return gen(node.expression);\n  }\n};\n\nvar nfaFromRegexp = {\n  /**\n   * Builds an NFA from the passed regexp.\n   */\n  build: function build(regexp) {\n    var ast = regexp;\n\n    if (regexp instanceof RegExp) {\n      regexp = '' + regexp;\n    }\n\n    if (typeof regexp === 'string') {\n      ast = parser$1.parse(regexp, {\n        captureLocations: true\n      });\n    }\n\n    return gen(ast);\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar NFA = nfa;\nvar DFA = dfa;\n\nvar nfaFromRegExp = nfaFromRegexp;\nvar builders = builders$1;\n\nvar finiteAutomaton = {\n\n  /**\n   * Export NFA and DFA classes.\n   */\n  NFA: NFA,\n  DFA: DFA,\n\n  /**\n   * Expose builders.\n   */\n  builders: builders,\n\n  /**\n   * Builds an NFA for the passed regexp.\n   *\n   * @param string | AST | RegExp:\n   *\n   *   a regular expression in different representations: a string,\n   *   a RegExp object, or an AST.\n   */\n  toNFA: function toNFA(regexp) {\n    return nfaFromRegExp.build(regexp);\n  },\n\n\n  /**\n   * Builds DFA for the passed regexp.\n   *\n   * @param string | AST | RegExp:\n   *\n   *   a regular expression in different representations: a string,\n   *   a RegExp object, or an AST.\n   */\n  toDFA: function toDFA(regexp) {\n    return new DFA(this.toNFA(regexp));\n  },\n\n\n  /**\n   * Returns true if regexp accepts the string.\n   */\n  test: function test(regexp, string) {\n    return this.toDFA(regexp).matches(string);\n  }\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n/**\n * The `RegExpTree` class provides runtime support for `compat-transpiler`\n * module from `regexp-tree`.\n *\n * E.g. it tracks names of the capturing groups, in order to access the\n * names on the matched result.\n *\n * It's a thin-wrapper on top of original regexp.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RegExpTree$1 = function () {\n  /**\n   * Initializes a `RegExpTree` instance.\n   *\n   * @param RegExp - a regular expression\n   *\n   * @param Object state:\n   *\n   *   An extra state which may store any related to transformation\n   *   data, for example, names of the groups.\n   *\n   *   - flags - original flags\n   *   - groups - names of the groups, and their indices\n   *   - source - original source\n   */\n  function RegExpTree(re, _ref) {\n    var flags = _ref.flags,\n        groups = _ref.groups,\n        source = _ref.source;\n\n    _classCallCheck(this, RegExpTree);\n\n    this._re = re;\n    this._groups = groups;\n\n    // Original props.\n    this.flags = flags;\n    this.source = source || re.source;\n    this.dotAll = flags.includes('s');\n\n    // Inherited directly from `re`.\n    this.global = re.global;\n    this.ignoreCase = re.ignoreCase;\n    this.multiline = re.multiline;\n    this.sticky = re.sticky;\n    this.unicode = re.unicode;\n  }\n\n  /**\n   * Facade wrapper for RegExp `test` method.\n   */\n\n\n  _createClass(RegExpTree, [{\n    key: 'test',\n    value: function test(string) {\n      return this._re.test(string);\n    }\n\n    /**\n     * Facade wrapper for RegExp `compile` method.\n     */\n\n  }, {\n    key: 'compile',\n    value: function compile(string) {\n      return this._re.compile(string);\n    }\n\n    /**\n     * Facade wrapper for RegExp `toString` method.\n     */\n\n  }, {\n    key: 'toString',\n    value: function toString() {\n      if (!this._toStringResult) {\n        this._toStringResult = '/' + this.source + '/' + this.flags;\n      }\n      return this._toStringResult;\n    }\n\n    /**\n     * Facade wrapper for RegExp `exec` method.\n     */\n\n  }, {\n    key: 'exec',\n    value: function exec(string) {\n      var result = this._re.exec(string);\n\n      if (!this._groups || !result) {\n        return result;\n      }\n\n      result.groups = {};\n\n      for (var group in this._groups) {\n        var groupNumber = this._groups[group];\n        result.groups[group] = result[groupNumber];\n      }\n\n      return result;\n    }\n  }]);\n\n  return RegExpTree;\n}();\n\nvar runtime = {\n  RegExpTree: RegExpTree$1\n};\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar compatTranspiler = compatTranspiler$1;\nvar generator = generator_1;\nvar optimizer = optimizer$1;\nvar parser = parser$4;\nvar _transform = transform$1;\nvar _traverse = traverse$1;\nvar fa = finiteAutomaton;\n\nvar _require = runtime,\n    RegExpTree = _require.RegExpTree;\n\n/**\n * An API object for RegExp processing (parsing/transform/generation).\n */\n\n\nvar regexpTree$2 = {\n  /**\n   * Parser module exposed.\n   */\n  parser: parser,\n\n  /**\n   * Expose finite-automaton module.\n   */\n  fa: fa,\n\n  /**\n   * `TransformResult` exposed.\n   */\n  TransformResult: _transform.TransformResult,\n\n  /**\n   * Parses a regexp string, producing an AST.\n   *\n   * @param string regexp\n   *\n   *   a regular expression in different formats: string, AST, RegExp.\n   *\n   * @param Object options\n   *\n   *   parsing options for this parse call. Default are:\n   *\n   *     - captureLocations: boolean\n   *     - any other custom options\n   *\n   * @return Object AST\n   */\n  parse: function parse(regexp, options) {\n    return parser.parse('' + regexp, options);\n  },\n\n\n  /**\n   * Traverses a RegExp AST.\n   *\n   * @param Object ast\n   * @param Object | Array<Object> handlers\n   *\n   * Each `handler` is an object containing handler function for needed\n   * node types. Example:\n   *\n   *   regexpTree.traverse(ast, {\n   *     onChar(node) {\n   *       ...\n   *     },\n   *   });\n   *\n   * The value for a node type may also be an object with functions pre and post.\n   * This enables more context-aware analyses, e.g. measuring star height.\n   */\n  traverse: function traverse(ast, handlers, options) {\n    return _traverse.traverse(ast, handlers, options);\n  },\n\n\n  /**\n   * Transforms a regular expression.\n   *\n   * A regexp can be passed in different formats (string, regexp or AST),\n   * applying a set of transformations. It is a convenient wrapper\n   * on top of \"parse-traverse-generate\" tool chain.\n   *\n   * @param string | AST | RegExp regexp - a regular expression;\n   * @param Object | Array<Object> handlers - a list of handlers.\n   *\n   * @return TransformResult - a transformation result.\n   */\n  transform: function transform(regexp, handlers) {\n    return _transform.transform(regexp, handlers);\n  },\n\n\n  /**\n   * Generates a RegExp string from an AST.\n   *\n   * @param Object ast\n   *\n   * Invariant:\n   *\n   *   regexpTree.generate(regexpTree.parse('/[a-z]+/i')); // '/[a-z]+/i'\n   */\n  generate: function generate(ast) {\n    return generator.generate(ast);\n  },\n\n\n  /**\n   * Creates a RegExp object from a regexp string.\n   *\n   * @param string regexp\n   */\n  toRegExp: function toRegExp(regexp) {\n    var compat = this.compatTranspile(regexp);\n    return new RegExp(compat.getSource(), compat.getFlags());\n  },\n\n\n  /**\n   * Optimizes a regular expression by replacing some\n   * sub-expressions with their idiomatic patterns.\n   *\n   * @param string regexp\n   *\n   * @return TransformResult object\n   */\n  optimize: function optimize(regexp, whitelist) {\n    var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n        blacklist = _ref.blacklist;\n\n    return optimizer.optimize(regexp, { whitelist: whitelist, blacklist: blacklist });\n  },\n\n\n  /**\n   * Translates a regular expression in new syntax or in new format\n   * into equivalent expressions in old syntax.\n   *\n   * @param string regexp\n   *\n   * @return TransformResult object\n   */\n  compatTranspile: function compatTranspile(regexp, whitelist) {\n    return compatTranspiler.transform(regexp, whitelist);\n  },\n\n\n  /**\n   * Executes a regular expression on a string.\n   *\n   * @param RegExp|string re - a regular expression.\n   * @param string string - a testing string.\n   */\n  exec: function exec(re, string) {\n    if (typeof re === 'string') {\n      var compat = this.compatTranspile(re);\n      var extra = compat.getExtra();\n\n      if (extra.namedCapturingGroups) {\n        re = new RegExpTree(compat.toRegExp(), {\n          flags: compat.getFlags(),\n          source: compat.getSource(),\n          groups: extra.namedCapturingGroups\n        });\n      } else {\n        re = compat.toRegExp();\n      }\n    }\n\n    return re.exec(string);\n  }\n};\n\nvar regexpTree_1 = regexpTree$2;\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n(function (module) {\n\n\tmodule.exports = regexpTree_1;\n} (regexpTree$4));\n\n// Exports an Analyzer subclass\n\nconst regexpTree$1 = regexpTree$4.exports;\nconst analyzer$1 = analyzer$2;\n\nclass HeuristicAnalyzer extends analyzer$1.Analyzer {\n  constructor(analyzerOptions) {\n    super(analyzerOptions);\n  }\n\n  isVulnerable(regExp) {\n    // Heuristic #1: Star height > 1\n    const starHeight = this._measureStarHeight(regExp);\n    if (starHeight > 1) {\n      return true;\n    }\n\n    // Heuristic #2: # repetitions > limit\n    // TODO This is a poor heuristic\n    const nRepetitions = this._measureRepetitions(regExp);\n    if (nRepetitions > this.options.heuristic_replimit) {\n      return true;\n    }\n\n    return false;\n  }\n\n  genAttackString(regExp) {\n    return null;\n  }\n\n  _measureStarHeight(regExp) {\n    let currentStarHeight = 0;\n    let maxObservedStarHeight = 0;\n\n    const ast = regexpTree$1.parse(regExp);\n\n    regexpTree$1.traverse(ast, {\n      Repetition: {\n        pre({ node }) {\n          currentStarHeight++;\n          if (maxObservedStarHeight < currentStarHeight) {\n            maxObservedStarHeight = currentStarHeight;\n          }\n        },\n\n        post({ node }) {\n          currentStarHeight--;\n        }\n      }\n    });\n\n    return maxObservedStarHeight;\n  }\n\n  _measureRepetitions(regExp) {\n    let nRepetitions = 0;\n\n    const ast = regexpTree$1.parse(regExp);\n    regexpTree$1.traverse(ast, {\n      Repetition: {\n        pre({ node }) {\n          nRepetitions++;\n        }\n      }\n    });\n\n    return nRepetitions;\n  }\n}\n\nvar heuristicAnalyzer$1 = HeuristicAnalyzer;\n\n// Load the analyzers\nconst heuristicAnalyzer = heuristicAnalyzer$1;\n\nvar analyzerFamily$1 = [heuristicAnalyzer];\n\nconst analyzer = analyzer$2;\nconst analyzerFamily = analyzerFamily$1;\n\nconst DEFAULT_SAFE_REP_LIMIT = 25;\nconst RET_IS_SAFE = true;\nconst RET_IS_VULNERABLE = false;\n\nclass Args {\n  constructor(regExp, analyzerOptions) {\n    this.regExp = regExp;\n    this.analyzerOptions = analyzerOptions;\n  }\n}\n\nfunction safeRegex(re, opts) {\n  try {\n    const args = buildArgs(re, opts);\n    const analyzerResponses = askAnalyzersIfVulnerable(args);\n\n    // Did any analyzer say true?\n    if (analyzerResponses.find((isVulnerable) => isVulnerable)) {\n      return RET_IS_VULNERABLE;\n    } else {\n      return RET_IS_SAFE;\n    }\n  } catch (err) {\n    // Invalid or unparseable input\n    return false;\n  }\n}\n\nfunction buildArgs(re, opts) {\n  // Build AnalyzerOptions\n  if (!opts) opts = {};\n  const heuristic_replimit = opts.limit === undefined ? DEFAULT_SAFE_REP_LIMIT : opts.limit;\n\n  const analyzerOptions = new analyzer.AnalyzerOptions(heuristic_replimit);\n\n  // Build RegExp\n  let regExp = null;\n  // Construct a RegExp object\n  if (re instanceof RegExp) {\n    regExp = re;\n  } else if (typeof re === 'string') {\n    regExp = new RegExp(re);\n  } else {\n    regExp = new RegExp(String(re));\n  }\n\n  return new Args(regExp, analyzerOptions);\n}\n\nfunction askAnalyzersIfVulnerable(args) {\n  let analyzerSaysVulnerable = [];\n\n  // Query the Analyzers\n  let Analyzer;\n  for (Analyzer of analyzerFamily) {\n    try {\n      const analyzer = new Analyzer(args.analyzerOptions);\n      analyzerSaysVulnerable.push(analyzer.isVulnerable(args.regExp));\n    } catch (err) {\n      /* istanbul ignore next */ // No need to worry about code coverage here.\n      analyzerSaysVulnerable.push(false);\n    }\n  }\n\n  return analyzerSaysVulnerable;\n}\n\n// Export\n\nvar safeRegex_1 = safeRegex;\n\nconst DEFAULT_SETTINGS = {\n    viewImageEditor: true,\n    viewImageInCPB: true,\n    viewImageWithALink: true,\n    viewImageOther: true,\n    pinMode: false,\n    pinMaximum: 3,\n    pinCoverMode: true,\n    imageMoveSpeed: 10,\n    imgTipToggle: true,\n    imgFullScreenMode: IMG_FULL_SCREEN_MODE.FIT,\n    imgViewBackgroundColor: IMG_DEFAULT_BACKGROUND_COLOR,\n    imageBorderToggle: false,\n    imageBorderWidth: IMG_BORDER_WIDTH.MEDIUM,\n    imageBorderStyle: IMG_BORDER_STYLE.SOLID,\n    imageBorderColor: IMG_BORDER_COLOR.RED,\n    galleryNavbarToggle: true,\n    galleryNavbarDefaultColor: GALLERY_NAVBAR_DEFAULT_COLOR,\n    galleryNavbarHoverColor: GALLERY_NAVBAR_HOVER_COLOR,\n    galleryImgBorderActive: true,\n    galleryImgBorderActiveColor: GALLERY_IMG_BORDER_ACTIVE_COLOR,\n    // hotkeys conf\n    moveTheImageHotkey: MOVE_THE_IMAGE.DEFAULT_HOTKEY,\n    switchTheImageHotkey: SWITCH_THE_IMAGE.DEFAULT_HOTKEY,\n    doubleClickToolbar: TOOLBAR_CONF[3].class,\n    viewTriggerHotkey: MODIFIER_HOTKEYS.NONE,\n    // for org\n    realTimeUpdate: false,\n    excludedFolders: [\".git/\", \".obsidian/\", \".trash/\"],\n    includedFileRegex: \".*\\\\.md\",\n    mediaRootDirectory: \"assets/img\",\n};\nclass ImageToolkitSettingTab extends obsidian.PluginSettingTab {\n    constructor(app, plugin) {\n        super(app, plugin);\n        this.plugin = plugin;\n    }\n    display() {\n        let { containerEl } = this;\n        containerEl.empty();\n        containerEl.createEl(\"h2\", { text: \"Awesome Image\" });\n        new obsidian.Setting(containerEl)\n            .setName(\"On paste processing\")\n            .setDesc(\"Process active page if image was pasted.\")\n            .addToggle((toggle) => toggle\n            .setValue(this.plugin.settings.realTimeUpdate)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.realTimeUpdate = value;\n            yield this.plugin.saveSettings();\n        })));\n        new obsidian.Setting(containerEl)\n            .setName(\"Ignore folders\")\n            .setDesc(\"Do not search or rename attachments in these folders. Write each folder on a new line.\")\n            .addTextArea(cb => cb\n            .setPlaceholder(\"Example:\\n.git/\\n.obsidian/\")\n            .setValue(this.plugin.settings.excludedFolders.join(\"\\n\"))\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.excludedFolders = value.trim()\n                .split(\"\\n\")\n                .map(path => (path.length == 0 ? path : obsidian.normalizePath(path)) + \"/\");\n            yield this.plugin.saveSettings();\n        })));\n        new obsidian.Setting(containerEl)\n            .setName(\"Include\")\n            .setDesc(\"Include only files matching this regex pattern when running on all notes.\")\n            .addText((text) => text.setValue(this.plugin.settings.includedFileRegex).onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            if (!safeRegex_1(value)) {\n                new obsidian.Notice(\"Unsafe regex! https://www.npmjs.com/package/safe-regex\");\n                return;\n            }\n            this.plugin.settings.includedFileRegex = value;\n            yield this.plugin.saveSettings();\n        })));\n        new obsidian.Setting(containerEl)\n            .setName(\"Media folder\")\n            .setDesc(\"Folder to keep all downloaded media files.\")\n            .addText((text) => text\n            .setValue(this.plugin.settings.mediaRootDirectory)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.mediaRootDirectory = value;\n            yield this.plugin.saveSettings();\n        })));\n        containerEl.createEl('h2', { text: t(\"IMAGE_TOOLKIT_SETTINGS_TITLE\") });\n        //region >>> VIEW_TRIGGER_SETTINGS\n        containerEl.createEl('h3', { text: t(\"VIEW_TRIGGER_SETTINGS\") });\n        new obsidian.Setting(containerEl)\n            .setName(t(\"VIEW_IMAGE_EDITOR_NAME\"))\n            .setDesc(t(\"VIEW_IMAGE_EDITOR_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.viewImageEditor)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.viewImageEditor = value;\n            this.plugin.toggleViewImage();\n            yield this.plugin.saveSettings();\n        })));\n        new obsidian.Setting(containerEl)\n            .setName(t(\"VIEW_IMAGE_IN_CPB_NAME\"))\n            .setDesc(t(\"VIEW_IMAGE_IN_CPB_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.viewImageInCPB)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.viewImageInCPB = value;\n            this.plugin.toggleViewImage();\n            yield this.plugin.saveSettings();\n        })));\n        new obsidian.Setting(containerEl)\n            .setName(t(\"VIEW_IMAGE_WITH_A_LINK_NAME\"))\n            .setDesc(t(\"VIEW_IMAGE_WITH_A_LINK_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.viewImageWithALink)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.viewImageWithALink = value;\n            this.plugin.toggleViewImage();\n            yield this.plugin.saveSettings();\n        })));\n        new obsidian.Setting(containerEl)\n            .setName(t(\"VIEW_IMAGE_OTHER_NAME\"))\n            .setDesc(t(\"VIEW_IMAGE_OTHER_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.viewImageOther)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.viewImageOther = value;\n            this.plugin.toggleViewImage();\n            yield this.plugin.saveSettings();\n        })));\n        //endregion\n        //region >>> PIN_MODE_SETTINGS\n        let pinMaximumSetting, pinCoverSetting;\n        containerEl.createEl('h3', { text: t(\"PIN_MODE_SETTINGS\") });\n        new obsidian.Setting(containerEl)\n            .setName(t(\"PIN_MODE_NAME\"))\n            .setDesc(t(\"PIN_MODE_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.pinMode)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.pinMode = value;\n            this.switchSettingsDisabled(!value, pinMaximumSetting, pinCoverSetting);\n            this.plugin.togglePinMode(value);\n            yield this.plugin.saveSettings();\n        })));\n        let pinMaximumScaleText;\n        pinMaximumSetting = new obsidian.Setting(containerEl)\n            .setName(t(\"PIN_MAXIMUM_NAME\"))\n            .addSlider(slider => slider\n            .setLimits(1, 5, 1)\n            .setValue(this.plugin.settings.pinMaximum)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            var _a;\n            pinMaximumScaleText.innerText = \" \" + value.toString();\n            this.plugin.settings.pinMaximum = value;\n            (_a = this.plugin.containerView) === null || _a === void 0 ? void 0 : _a.setPinMaximum(value);\n            this.plugin.saveSettings();\n        })));\n        pinMaximumSetting.settingEl.createDiv('', (el) => {\n            pinMaximumScaleText = el;\n            el.style.minWidth = \"2.3em\";\n            el.style.textAlign = \"right\";\n            el.innerText = \" \" + this.plugin.settings.pinMaximum.toString();\n        });\n        pinCoverSetting = new obsidian.Setting(containerEl)\n            .setName(t(\"PIN_COVER_NAME\"))\n            .setDesc(t(\"PIN_COVER_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.pinCoverMode)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.pinCoverMode = value;\n            yield this.plugin.saveSettings();\n        })));\n        this.switchSettingsDisabled(!this.plugin.settings.pinMode, pinMaximumSetting, pinCoverSetting);\n        //endregion\n        //region >>> VIEW_DETAILS_SETTINGS\n        containerEl.createEl('h3', { text: t(\"VIEW_DETAILS_SETTINGS\") });\n        let imgMoveSpeedScaleText;\n        new obsidian.Setting(containerEl)\n            .setName(t(\"IMAGE_MOVE_SPEED_NAME\"))\n            .setDesc(t(\"IMAGE_MOVE_SPEED_DESC\"))\n            .addSlider(slider => slider\n            .setLimits(1, 30, 1)\n            .setValue(this.plugin.settings.imageMoveSpeed)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            imgMoveSpeedScaleText.innerText = \" \" + value.toString();\n            this.plugin.settings.imageMoveSpeed = value;\n            this.plugin.saveSettings();\n        })))\n            .settingEl.createDiv('', (el) => {\n            imgMoveSpeedScaleText = el;\n            el.style.minWidth = \"2.3em\";\n            el.style.textAlign = \"right\";\n            el.innerText = \" \" + this.plugin.settings.imageMoveSpeed.toString();\n        });\n        new obsidian.Setting(containerEl)\n            .setName(t(\"IMAGE_TIP_TOGGLE_NAME\"))\n            .setDesc(t(\"IMAGE_TIP_TOGGLE_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.imgTipToggle)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.imgTipToggle = value;\n            yield this.plugin.saveSettings();\n        })));\n        new obsidian.Setting(containerEl)\n            .setName(t(\"IMG_FULL_SCREEN_MODE_NAME\"))\n            .addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {\n            for (const key in IMG_FULL_SCREEN_MODE) {\n                // @ts-ignore\n                dropdown.addOption(key, t(key));\n            }\n            dropdown.setValue(this.plugin.settings.imgFullScreenMode);\n            dropdown.onChange((option) => __awaiter(this, void 0, void 0, function* () {\n                this.plugin.settings.imgFullScreenMode = option;\n                yield this.plugin.saveSettings();\n            }));\n        }));\n        this.createPickrSetting(containerEl, 'IMG_VIEW_BACKGROUND_COLOR_NAME', IMG_DEFAULT_BACKGROUND_COLOR);\n        //endregion\n        //region >>> IMAGE_BORDER_SETTINGS\n        containerEl.createEl('h3', { text: t(\"IMAGE_BORDER_SETTINGS\") });\n        new obsidian.Setting(containerEl)\n            .setName(t(\"IMAGE_BORDER_TOGGLE_NAME\"))\n            .setDesc(t(\"IMAGE_BORDER_TOGGLE_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.imageBorderToggle)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.imageBorderToggle = value;\n            yield this.plugin.saveSettings();\n        })));\n        new obsidian.Setting(containerEl)\n            .setName(t(\"IMAGE_BORDER_WIDTH_NAME\"))\n            .addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {\n            for (const key in IMG_BORDER_WIDTH) {\n                // @ts-ignore\n                dropdown.addOption(IMG_BORDER_WIDTH[key], t(key));\n            }\n            dropdown.setValue(this.plugin.settings.imageBorderWidth);\n            dropdown.onChange((option) => __awaiter(this, void 0, void 0, function* () {\n                this.plugin.settings.imageBorderWidth = option;\n                yield this.plugin.saveSettings();\n            }));\n        }));\n        new obsidian.Setting(containerEl)\n            .setName(t(\"IMAGE_BORDER_STYLE_NAME\"))\n            .addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {\n            for (const key in IMG_BORDER_STYLE) {\n                // @ts-ignore\n                dropdown.addOption(IMG_BORDER_STYLE[key], t(key));\n            }\n            dropdown.setValue(this.plugin.settings.imageBorderStyle);\n            dropdown.onChange((option) => __awaiter(this, void 0, void 0, function* () {\n                this.plugin.settings.imageBorderStyle = option;\n                yield this.plugin.saveSettings();\n            }));\n        }));\n        new obsidian.Setting(containerEl)\n            .setName(t(\"IMAGE_BORDER_COLOR_NAME\"))\n            .addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {\n            for (const key in IMG_BORDER_COLOR) {\n                // @ts-ignore\n                dropdown.addOption(IMG_BORDER_COLOR[key], t(key));\n            }\n            dropdown.setValue(this.plugin.settings.imageBorderColor);\n            dropdown.onChange((option) => __awaiter(this, void 0, void 0, function* () {\n                this.plugin.settings.imageBorderColor = option;\n                yield this.plugin.saveSettings();\n            }));\n        }));\n        //endregion\n        //region >>> GALLERY_NAVBAR_SETTINGS\n        let galleryNavbarDefaultColorSetting, galleryNavbarHoverColorSetting, galleryImgBorderToggleSetting, galleryImgBorderActiveColorSetting;\n        containerEl.createEl('h3', { text: t(\"GALLERY_NAVBAR_SETTINGS\") });\n        new obsidian.Setting(containerEl)\n            .setName(t(\"GALLERY_NAVBAR_TOGGLE_NAME\"))\n            .setDesc(t(\"GALLERY_NAVBAR_TOGGLE_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.galleryNavbarToggle)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.galleryNavbarToggle = value;\n            this.switchSettingsDisabled(!value, galleryNavbarDefaultColorSetting, galleryNavbarHoverColorSetting, galleryImgBorderToggleSetting, galleryImgBorderActiveColorSetting);\n            yield this.plugin.saveSettings();\n        })));\n        galleryNavbarDefaultColorSetting = this.createPickrSetting(containerEl, 'GALLERY_NAVBAR_DEFAULT_COLOR_NAME', GALLERY_NAVBAR_DEFAULT_COLOR);\n        galleryNavbarHoverColorSetting = this.createPickrSetting(containerEl, 'GALLERY_NAVBAR_HOVER_COLOR_NAME', GALLERY_NAVBAR_HOVER_COLOR);\n        galleryImgBorderToggleSetting = new obsidian.Setting(containerEl)\n            .setName(t(\"GALLERY_IMG_BORDER_TOGGLE_NAME\"))\n            .setDesc(t(\"GALLERY_IMG_BORDER_TOGGLE_DESC\"))\n            .addToggle(toggle => toggle\n            .setValue(this.plugin.settings.galleryImgBorderActive)\n            .onChange((value) => __awaiter(this, void 0, void 0, function* () {\n            this.plugin.settings.galleryImgBorderActive = value;\n            yield this.plugin.saveSettings();\n        })));\n        galleryImgBorderActiveColorSetting = this.createPickrSetting(containerEl, 'GALLERY_IMG_BORDER_ACTIVE_COLOR_NAME', GALLERY_IMG_BORDER_ACTIVE_COLOR);\n        this.switchSettingsDisabled(!this.plugin.settings.galleryNavbarToggle, galleryNavbarDefaultColorSetting, galleryNavbarHoverColorSetting, galleryImgBorderToggleSetting, galleryImgBorderActiveColorSetting);\n        //endregion\n        //region >>> HOTKEYS_SETTINGS\n        containerEl.createEl('h3', { text: t(\"HOTKEY_SETTINGS\") });\n        containerEl.createEl('p', { text: t(\"HOTKEY_SETTINGS_DESC\") });\n        if (this.plugin.settings.moveTheImageHotkey === this.plugin.settings.switchTheImageHotkey) {\n            this.plugin.settings.moveTheImageHotkey = MOVE_THE_IMAGE.DEFAULT_HOTKEY;\n        }\n        const moveTheImageSetting = new obsidian.Setting(containerEl)\n            .setName(t(\"MOVE_THE_IMAGE_NAME\"))\n            .setDesc(t(\"MOVE_THE_IMAGE_DESC\"))\n            .addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {\n            dropdown.addOptions(this.getDropdownOptions());\n            dropdown.setValue(this.plugin.settings.moveTheImageHotkey);\n            dropdown.onChange((option) => __awaiter(this, void 0, void 0, function* () {\n                this.plugin.settings.moveTheImageHotkey = option;\n                this.checkDropdownOptions(MOVE_THE_IMAGE.CODE, switchTheImageSetting);\n                yield this.plugin.saveSettings();\n            }));\n        })).then((setting) => {\n            setting.controlEl.appendChild(createDiv('setting-editor-extra-setting-button hotkeys-settings-plus', (el) => {\n                el.innerHTML = \"+\";\n            }));\n            setting.controlEl.appendChild(createDiv('setting-editor-extra-setting-button', (el) => {\n                el.innerHTML = MOVE_THE_IMAGE.SVG;\n            }));\n        });\n        if (this.plugin.settings.switchTheImageHotkey === this.plugin.settings.moveTheImageHotkey) {\n            this.plugin.settings.switchTheImageHotkey = SWITCH_THE_IMAGE.DEFAULT_HOTKEY;\n        }\n        const switchTheImageSetting = new obsidian.Setting(containerEl)\n            .setName(t(\"SWITCH_THE_IMAGE_NAME\"))\n            .setDesc(t(\"SWITCH_THE_IMAGE_DESC\"))\n            .addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {\n            dropdown.addOptions(this.getDropdownOptions());\n            dropdown.setValue(this.plugin.settings.switchTheImageHotkey);\n            dropdown.onChange((option) => __awaiter(this, void 0, void 0, function* () {\n                this.plugin.settings.switchTheImageHotkey = option;\n                this.checkDropdownOptions(SWITCH_THE_IMAGE.CODE, moveTheImageSetting);\n                yield this.plugin.saveSettings();\n            }));\n        })).then((setting) => {\n            setting.controlEl.appendChild(createDiv('setting-editor-extra-setting-button hotkeys-settings-plus', (el) => {\n                el.innerHTML = \"+\";\n            }));\n            setting.controlEl.appendChild(createDiv('setting-editor-extra-setting-button', (el) => {\n                el.innerHTML = SWITCH_THE_IMAGE.SVG;\n            }));\n        });\n        if (switchTheImageSetting) {\n            this.checkDropdownOptions(MOVE_THE_IMAGE.CODE, switchTheImageSetting);\n        }\n        if (moveTheImageSetting) {\n            this.checkDropdownOptions(SWITCH_THE_IMAGE.CODE, moveTheImageSetting);\n        }\n        new obsidian.Setting(containerEl)\n            .setName(t(\"DOUBLE_CLICK_TOOLBAR_NAME\"))\n            .addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {\n            for (const conf of TOOLBAR_CONF) {\n                if (!conf.enableHotKey)\n                    continue;\n                // @ts-ignore\n                dropdown.addOption(conf.class, t(conf.title));\n            }\n            dropdown.setValue(this.plugin.settings.doubleClickToolbar);\n            dropdown.onChange((option) => __awaiter(this, void 0, void 0, function* () {\n                this.plugin.settings.doubleClickToolbar = option;\n                yield this.plugin.saveSettings();\n            }));\n        }));\n        new obsidian.Setting(containerEl)\n            .setName(t(\"VIEW_TRIGGER_HOTKEY_NAME\"))\n            .setDesc(t(\"VIEW_TRIGGER_HOTKEY_DESC\"))\n            .addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {\n            dropdown.addOptions(this.getDropdownOptions());\n            dropdown.setValue(this.plugin.settings.viewTriggerHotkey);\n            dropdown.onChange((option) => __awaiter(this, void 0, void 0, function* () {\n                this.plugin.settings.viewTriggerHotkey = option;\n                yield this.plugin.saveSettings();\n            }));\n        }));\n        //endregion\n    }\n    switchSettingsDisabled(disabled, ...settings) {\n        for (const setting of settings) {\n            setting === null || setting === void 0 ? void 0 : setting.setDisabled(disabled);\n        }\n    }\n    createPickrSetting(containerEl, name, defaultColor) {\n        let pickrDefault;\n        if ('GALLERY_NAVBAR_DEFAULT_COLOR_NAME' === name) {\n            pickrDefault = this.plugin.settings.galleryNavbarDefaultColor;\n        }\n        else if ('GALLERY_NAVBAR_HOVER_COLOR_NAME' === name) {\n            pickrDefault = this.plugin.settings.galleryNavbarHoverColor;\n        }\n        else if ('GALLERY_IMG_BORDER_ACTIVE_COLOR_NAME' === name) {\n            pickrDefault = this.plugin.settings.galleryImgBorderActiveColor;\n        }\n        else if ('IMG_VIEW_BACKGROUND_COLOR_NAME' === name) {\n            pickrDefault = this.plugin.settings.imgViewBackgroundColor;\n        }\n        else {\n            pickrDefault = defaultColor;\n        }\n        let pickr;\n        return new obsidian.Setting(containerEl)\n            // @ts-ignore\n            .setName(t(name))\n            .then((setting) => {\n            pickr = Pickr.create({\n                el: setting.controlEl.createDiv({ cls: \"picker\" }),\n                theme: 'nano',\n                position: \"left-middle\",\n                lockOpacity: false,\n                default: pickrDefault,\n                swatches: [],\n                components: {\n                    preview: true,\n                    hue: true,\n                    opacity: true,\n                    interaction: {\n                        hex: true,\n                        rgba: true,\n                        hsla: false,\n                        input: true,\n                        cancel: true,\n                        save: true,\n                    },\n                }\n            })\n                .on('show', (color, instance) => {\n                if (!this.plugin.settings.galleryNavbarToggle)\n                    pickr === null || pickr === void 0 ? void 0 : pickr.hide();\n                const { result } = pickr.getRoot().interaction;\n                requestAnimationFrame(() => requestAnimationFrame(() => result.select()));\n            })\n                .on('save', (color, instance) => {\n                if (!color)\n                    return;\n                instance.hide();\n                const savedColor = color.toHEXA().toString();\n                instance.addSwatch(savedColor);\n                this.setAndSavePickrSetting(name, savedColor);\n            })\n                .on('cancel', (instance) => {\n                instance.hide();\n            });\n        })\n            .addExtraButton((btn) => {\n            btn.setIcon(\"reset\")\n                .onClick(() => {\n                pickr.setColor(defaultColor);\n                this.setAndSavePickrSetting(name, defaultColor);\n            })\n                .setTooltip('restore default color');\n        });\n    }\n    setAndSavePickrSetting(name, savedColor) {\n        var _a;\n        if ('GALLERY_NAVBAR_DEFAULT_COLOR_NAME' === name) {\n            this.plugin.settings.galleryNavbarDefaultColor = savedColor;\n        }\n        else if ('GALLERY_NAVBAR_HOVER_COLOR_NAME' === name) {\n            this.plugin.settings.galleryNavbarHoverColor = savedColor;\n        }\n        else if ('GALLERY_IMG_BORDER_ACTIVE_COLOR_NAME' === name) {\n            this.plugin.settings.galleryImgBorderActiveColor = savedColor;\n        }\n        else if ('IMG_VIEW_BACKGROUND_COLOR_NAME' === name) {\n            this.plugin.settings.imgViewBackgroundColor = savedColor;\n            (_a = this.plugin.containerView) === null || _a === void 0 ? void 0 : _a.setImgViewDefaultBackgroundForImgList();\n        }\n        this.plugin.saveSettings();\n    }\n    getDropdownOptions() {\n        let options = {};\n        for (const key in MODIFIER_HOTKEYS) {\n            //@ts-ignore\n            options[key] = t(key);\n        }\n        return options;\n    }\n    checkDropdownOptions(code, setting) {\n        if (!setting || !setting.controlEl)\n            return;\n        const optionElList = setting.controlEl.getElementsByClassName('dropdown')[0].getElementsByTagName('option');\n        for (let i = 0, size = optionElList.length; i < size; i++) {\n            if (code === MOVE_THE_IMAGE.CODE) {\n                optionElList[i].disabled = optionElList[i].value === this.plugin.settings.moveTheImageHotkey;\n            }\n            else if (code === SWITCH_THE_IMAGE.CODE) {\n                optionElList[i].disabled = optionElList[i].value === this.plugin.settings.switchTheImageHotkey;\n            }\n        }\n    }\n}\n\n/**\n * typescript class object for defining operating status of the image\n */\nclass ImgStatusCto {\n    constructor() {\n        // true: the popup layer of viewing image is displayed\n        this.popup = false;\n        // whether the image is being dragged\n        this.dragging = false;\n        // keybord pressing status\n        this.arrowUp = false;\n        this.arrowDown = false;\n        this.arrowLeft = false;\n        this.arrowRight = false;\n        this.fullScreen = false;\n        this.activeImgZIndex = 0;\n        this.clickCount = 0;\n    }\n}\nclass ImgInfoCto {\n    constructor() {\n        this.imgList = new Array();\n        this.getPopupImgNum = () => {\n            let num = 0;\n            for (const imgCto of this.imgList) {\n                if (imgCto.popup)\n                    num++;\n            }\n            return num;\n        };\n    }\n}\nclass ImgCto {\n    constructor(index, mtime, imgViewEl) {\n        this.popup = false;\n        this.zIndex = 0;\n        this.curWidth = 0; // image's current width\n        this.curHeight = 0;\n        this.realWidth = 0; // image's real width\n        this.realHeight = 0;\n        this.left = 0; // margin-left\n        this.top = 0; // margin-top\n        this.moveX = 0; // 鼠标相对于图片的位置\n        this.moveY = 0;\n        this.rotate = 0; // rotateDeg\n        this.invertColor = false;\n        this.scaleX = false; // scaleX(-1)\n        this.scaleY = false; // scaleY(-1)\n        this.fullScreen = false; // whether the image is being previewed in full-screen mode\n        this.defaultImgStyle = {\n            transform: 'none',\n            filter: 'none',\n            mixBlendMode: 'normal',\n            borderWidth: '',\n            borderStyle: '',\n            borderColor: ''\n        };\n        this.index = index;\n        this.mtime = mtime;\n        this.imgViewEl = imgViewEl;\n    }\n}\n\n/**\n * Image utility class\n */\nclass ImgUtil {\n    static copyText(text) {\n        navigator.clipboard.writeText(text)\n            .then(() => {\n            //console.log('copyText:', copyText);\n        })\n            .catch(err => {\n            console.error('copy text error', err);\n        });\n    }\n    static copyImage(imgEle, width, height) {\n        let image = new Image();\n        image.crossOrigin = 'anonymous';\n        image.src = imgEle.src;\n        image.onload = () => {\n            const canvas = document.createElement('canvas');\n            canvas.width = image.width;\n            canvas.height = image.height;\n            const ctx = canvas.getContext('2d');\n            ctx.fillStyle = '#fff';\n            ctx.fillRect(0, 0, canvas.width, canvas.height);\n            ctx.drawImage(image, 0, 0);\n            try {\n                canvas.toBlob((blob) => __awaiter(this, void 0, void 0, function* () {\n                    yield navigator.clipboard.write([new ClipboardItem({ \"image/png\": blob })])\n                        .then(() => {\n                        new obsidian.Notice(t(\"COPY_IMAGE_SUCCESS\"));\n                    }, () => {\n                        new obsidian.Notice(t(\"COPY_IMAGE_ERROR\"));\n                    });\n                }));\n            }\n            catch (error) {\n                new obsidian.Notice(t(\"COPY_IMAGE_ERROR\"));\n                console.error(error);\n            }\n        };\n        image.onerror = () => {\n            new obsidian.Notice(t(\"COPY_IMAGE_ERROR\"));\n        };\n    }\n}\nImgUtil.calculateImgZoomSize = (realImg, imgCto) => {\n    const windowWidth = document.documentElement.clientWidth || document.body.clientWidth;\n    const windowHeight = (document.documentElement.clientHeight || document.body.clientHeight) - 100;\n    const windowZoomWidth = windowWidth * ZOOM_FACTOR;\n    const windowZoomHeight = windowHeight * ZOOM_FACTOR;\n    let tempWidth = realImg.width, tempHeight = realImg.height;\n    if (realImg.height > windowZoomHeight) {\n        tempHeight = windowZoomHeight;\n        if ((tempWidth = tempHeight / realImg.height * realImg.width) > windowZoomWidth) {\n            tempWidth = windowZoomWidth;\n        }\n    }\n    else if (realImg.width > windowZoomWidth) {\n        tempWidth = windowZoomWidth;\n        tempHeight = tempWidth / realImg.width * realImg.height;\n    }\n    tempHeight = tempWidth * realImg.height / realImg.width;\n    // cache image info: curWidth, curHeight, realWidth, realHeight, left, top\n    imgCto.left = (windowWidth - tempWidth) / 2;\n    imgCto.top = (windowHeight - tempHeight) / 2;\n    imgCto.curWidth = tempWidth;\n    imgCto.curHeight = tempHeight;\n    imgCto.realWidth = realImg.width;\n    imgCto.realHeight = realImg.height;\n    /* console.log('calculateImgZoomSize', 'realImg: ' + realImg.width + ',' + realImg.height,\n        'tempSize: ' + tempWidth + ',' + tempHeight,\n        'windowZoomSize: ' + windowZoomWidth + ',' + windowZoomHeight,\n        'windowSize: ' + windowWidth + ',' + windowHeight); */\n    return imgCto;\n};\n/**\n * zoom an image\n * @param ratio\n * @param targetImgInfo\n * @param offsetSize\n * @param actualSize\n * @returns\n */\nImgUtil.zoom = (ratio, targetImgInfo, offsetSize, actualSize) => {\n    let zoomRatio;\n    if (!actualSize) {\n        const zoomInFlag = ratio > 0;\n        ratio = zoomInFlag ? 1 + ratio : 1 / (1 - ratio);\n        zoomRatio = targetImgInfo.curWidth * ratio / targetImgInfo.realWidth;\n    }\n    // Snap to 100% zoom when we pass over it\n    const curRatio = targetImgInfo.curWidth / targetImgInfo.realWidth;\n    if (actualSize || (curRatio < 1 && zoomRatio > 1) || (curRatio > 1 && zoomRatio < 1)) {\n        // set zoom ratio to 100%\n        zoomRatio = 1;\n        // reduce snap offset ratio accordingly\n        ratio = 1 / curRatio;\n    }\n    let newWidth = targetImgInfo.realWidth * zoomRatio;\n    let newHeight = targetImgInfo.realHeight * zoomRatio;\n    if (IMG_VIEW_MIN >= newWidth || IMG_VIEW_MIN >= newHeight) {\n        // set minimum width or height\n        if (IMG_VIEW_MIN >= newWidth) {\n            newWidth = IMG_VIEW_MIN;\n            newHeight = (newWidth * targetImgInfo.realHeight) / targetImgInfo.realWidth;\n        }\n        else {\n            newHeight = IMG_VIEW_MIN;\n            newWidth = (newHeight * targetImgInfo.realWidth) / targetImgInfo.realHeight;\n        }\n        ratio = 1;\n    }\n    const left = targetImgInfo.left + offsetSize.offsetX * (1 - ratio);\n    const top = targetImgInfo.top + offsetSize.offsetY * (1 - ratio);\n    // cache image info: curWidth, curHeight, left, top\n    targetImgInfo.curWidth = newWidth;\n    targetImgInfo.curHeight = newHeight;\n    targetImgInfo.left = left;\n    targetImgInfo.top = top;\n    // return { newWidth, left, top };\n    return targetImgInfo;\n};\nImgUtil.transform = (targetImgInfo) => {\n    let transform = 'rotate(' + targetImgInfo.rotate + 'deg)';\n    if (targetImgInfo.scaleX) {\n        transform += ' scaleX(-1)';\n    }\n    if (targetImgInfo.scaleY) {\n        transform += ' scaleY(-1)';\n    }\n    targetImgInfo.imgViewEl.style.setProperty('transform', transform);\n};\nImgUtil.rotate = (degree, targetImgInfo) => {\n    targetImgInfo.imgViewEl.style.setProperty('transform', 'rotate(' + (targetImgInfo.rotate += degree) + 'deg)');\n};\nImgUtil.invertImgColor = (imgEle, open) => {\n    if (open) {\n        imgEle.style.setProperty('filter', 'invert(1) hue-rotate(180deg)');\n        imgEle.style.setProperty('mix-blend-mode', 'screen');\n    }\n    else {\n        imgEle.style.setProperty('filter', 'none');\n        imgEle.style.setProperty('mix-blend-mode', 'normal');\n    }\n    // open ? imgEle.addClass('image-toolkit-img-invert') : imgEle.removeClass('image-toolkit-img-invert');\n};\n\nclass ContainerView {\n    constructor(plugin, containerType, pinMaximum) {\n        this.lastClickedImgDefaultStyle = {\n            borderWidth: '',\n            borderStyle: '',\n            borderColor: ''\n        };\n        this.imgGlobalStatus = new ImgStatusCto();\n        this.imgInfoCto = new ImgInfoCto();\n        this.isPinMode = () => {\n            return 'PIN' === this.containerType;\n        };\n        this.setMenuView = (menuView) => {\n            this.menuView = menuView;\n        };\n        this.getPlugin = () => {\n            return this.plugin;\n        };\n        this.getLastClickedImgEl = () => {\n            return this.lastClickedImgEl;\n        };\n        this.getActiveImg = () => {\n            return this.imgGlobalStatus.activeImg;\n        };\n        this.setPinMaximum = (val) => {\n            this.pinMaximum = val;\n        };\n        this.getOitContainerViewEl = () => {\n            return this.imgInfoCto.imgContainerEl;\n        };\n        //region ================== Container View & Init ========================\n        /**\n         * render when clicking an image\n         * @param targetEl the clicked image's element\n         * @returns\n         */\n        this.renderContainerView = (targetEl) => {\n            if (!this.checkStatus())\n                return;\n            const matchedImg = this.initContainerView(targetEl, this.plugin.app.workspace.containerEl);\n            if (!matchedImg)\n                return;\n            this.openOitContainerView(matchedImg);\n            this.renderGalleryNavbar();\n            this.refreshImg(matchedImg, targetEl.src, targetEl.alt);\n            matchedImg.mtime = new Date().getTime();\n        };\n        this.initContainerView = (targetEl, containerEl) => {\n            const matchedImg = this.initContainerViewDom(containerEl);\n            if (!matchedImg)\n                return null;\n            matchedImg.targetOriginalImgEl = targetEl;\n            this.restoreBorderForLastClickedImg();\n            this.initDefaultData(matchedImg, window.getComputedStyle(targetEl));\n            this.addBorderForLastClickedImg(targetEl);\n            this.addOrRemoveEvents(matchedImg, true); // add events\n            return matchedImg;\n        };\n        this.removeOitContainerView = () => {\n            var _a;\n            this.restoreBorderForLastClickedImg();\n            this.removeGalleryNavbar();\n            (_a = this.imgInfoCto.oitContainerViewEl) === null || _a === void 0 ? void 0 : _a.remove();\n            this.imgInfoCto.oitContainerViewEl = null;\n            this.imgInfoCto.imgContainerEl = null;\n            this.imgGlobalStatus.dragging = false;\n            this.imgGlobalStatus.popup = false;\n            this.imgGlobalStatus.activeImgZIndex = 0;\n            this.imgGlobalStatus.fullScreen = false;\n            this.imgGlobalStatus.activeImg = null;\n            // clear imgList\n            this.imgInfoCto.imgList.length = 0;\n        };\n        this.checkStatus = () => {\n            if (!this.containerType)\n                return false;\n            let oitContainerViewClass;\n            switch (this.containerType) {\n                case 'MAIN':\n                    if (this.plugin.settings.pinMode) {\n                        return false;\n                    }\n                    oitContainerViewClass = 'oit-main-container-view';\n                    break;\n                case 'PIN':\n                    if (!this.plugin.settings.pinMode) {\n                        return false;\n                    }\n                    oitContainerViewClass = 'oit-pin-container-view';\n                    break;\n                default:\n                    return false;\n            }\n            if (this.imgInfoCto.oitContainerViewEl) {\n                const containerElList = document.getElementsByClassName(oitContainerViewClass);\n                if (!containerElList || 0 >= containerElList.length) {\n                    // when switch between workspaces, you should remove ContainerView\n                    this.removeOitContainerView();\n                }\n            }\n            if (this.isPinMode() && this.plugin.settings.pinCoverMode) {\n                return true;\n            }\n            if (!this.imgGlobalStatus.popup)\n                return true;\n            return this.pinMaximum > this.imgInfoCto.getPopupImgNum();\n        };\n        this.initDefaultData = (matchedImg, targetImgStyle) => {\n            if (targetImgStyle) {\n                matchedImg.defaultImgStyle.transform = 'none';\n                matchedImg.defaultImgStyle.filter = targetImgStyle.filter;\n                matchedImg.defaultImgStyle.mixBlendMode = targetImgStyle.mixBlendMode;\n                matchedImg.defaultImgStyle.borderWidth = targetImgStyle.borderWidth;\n                matchedImg.defaultImgStyle.borderStyle = targetImgStyle.borderStyle;\n                matchedImg.defaultImgStyle.borderColor = targetImgStyle.borderColor;\n                this.lastClickedImgDefaultStyle.borderWidth = targetImgStyle.borderWidth;\n                this.lastClickedImgDefaultStyle.borderStyle = targetImgStyle.borderStyle;\n                this.lastClickedImgDefaultStyle.borderColor = targetImgStyle.borderColor;\n            }\n            this.imgGlobalStatus.dragging = false;\n            this.imgGlobalStatus.arrowUp = false;\n            this.imgGlobalStatus.arrowDown = false;\n            this.imgGlobalStatus.arrowLeft = false;\n            this.imgGlobalStatus.arrowRight = false;\n            matchedImg.invertColor = false;\n            matchedImg.scaleX = false;\n            matchedImg.scaleY = false;\n            matchedImg.fullScreen = false;\n            if (!this.imgGlobalStatus.popup) {\n                this.resetClickTimer();\n            }\n        };\n        /**\n         * set 'data-oit-target' and lastClickedImgEl\n         * @param targetEl\n         */\n        this.setLastClickedImg = (targetEl) => {\n            if (!targetEl)\n                return;\n            // 'data-oit-target' is set for locating current image\n            targetEl.setAttribute('data-oit-target', '1');\n            this.lastClickedImgEl = targetEl;\n        };\n        //endregion\n        //region ================== (Original) Image Border ========================\n        this.addBorderForLastClickedImg = (targetEl) => {\n            this.setLastClickedImg(targetEl);\n            if (!targetEl || !this.plugin.settings.imageBorderToggle)\n                return;\n            const lastClickedImgStyle = targetEl === null || targetEl === void 0 ? void 0 : targetEl.style;\n            if (!lastClickedImgStyle)\n                return;\n            lastClickedImgStyle.setProperty('border-width', this.plugin.settings.imageBorderWidth);\n            lastClickedImgStyle.setProperty('border-style', this.plugin.settings.imageBorderStyle);\n            lastClickedImgStyle.setProperty('border-color', this.plugin.settings.imageBorderColor);\n        };\n        /**\n         * remove 'data-oit-target'\n         * restore default border style\n         */\n        this.restoreBorderForLastClickedImg = () => {\n            if (!this.lastClickedImgEl)\n                return;\n            this.lastClickedImgEl.removeAttribute('data-oit-target');\n            const lastClickedImgStyle = this.lastClickedImgEl.style;\n            if (lastClickedImgStyle) {\n                lastClickedImgStyle.setProperty('border-width', this.lastClickedImgDefaultStyle.borderWidth);\n                lastClickedImgStyle.setProperty('border-style', this.lastClickedImgDefaultStyle.borderStyle);\n                lastClickedImgStyle.setProperty('border-color', this.lastClickedImgDefaultStyle.borderColor);\n            }\n        };\n        //endregion\n        //region ================== Image ========================\n        this.updateImgViewElAndList = (pinMaximum) => {\n            if (!this.imgInfoCto.imgContainerEl)\n                return;\n            const imgNum = this.imgInfoCto.imgList.length;\n            if (pinMaximum < imgNum) {\n                if (this.imgInfoCto.imgContainerEl) {\n                    // remove all imgViewEl and imgList\n                    this.imgInfoCto.imgContainerEl.innerHTML = '';\n                }\n                // clear imgList\n                this.imgInfoCto.imgList.length = 0;\n            }\n            let imgViewEl;\n            const curTime = new Date().getTime();\n            for (let i = imgNum; i < pinMaximum; i++) {\n                // <div class=\"img-container\"> <img class='img-view' data-index='0' src='' alt=''> </div>\n                imgViewEl = createEl('img');\n                imgViewEl.addClass('img-view');\n                imgViewEl.hidden = true; // hide 'img-view' for now\n                imgViewEl.dataset.index = i + ''; // set data-index\n                this.setImgViewDefaultBackground(imgViewEl);\n                this.imgInfoCto.imgContainerEl.appendChild(imgViewEl);\n                // cache imgList\n                this.imgInfoCto.imgList.push(new ImgCto(i, curTime, imgViewEl));\n            }\n        };\n        this.getMatchedImg = () => {\n            let earliestImg;\n            for (const img of this.imgInfoCto.imgList) {\n                if (!earliestImg || earliestImg.mtime > img.mtime)\n                    earliestImg = img;\n                if (img.popup)\n                    continue;\n                return img;\n            }\n            if (this.plugin.settings.pinCoverMode) {\n                return earliestImg;\n            }\n            return null;\n        };\n        /**\n         * it may from: renderContainerView(), switch GalleryNavbarView, click toolbar_refresh\n         * @param imgCto\n         * @param imgSrc\n         * @param imgAlt\n         * @param imgTitleIndex\n         */\n        this.refreshImg = (imgCto, imgSrc, imgAlt, imgTitleIndex) => {\n            if (!imgSrc)\n                imgSrc = imgCto.imgViewEl.src;\n            if (!imgAlt)\n                imgAlt = imgCto.imgViewEl.alt;\n            this.renderImgTitle(imgAlt, imgTitleIndex);\n            if (imgSrc) {\n                if (imgCto.refreshImgInterval) {\n                    clearInterval(imgCto.refreshImgInterval);\n                    imgCto.refreshImgInterval = null;\n                }\n                let realImg = new Image();\n                realImg.src = imgSrc;\n                imgCto.refreshImgInterval = setInterval((realImg) => {\n                    if (realImg.width > 0 || realImg.height > 0) {\n                        clearInterval(imgCto.refreshImgInterval);\n                        imgCto.refreshImgInterval = null;\n                        this.setImgViewPosition(ImgUtil.calculateImgZoomSize(realImg, imgCto), 0);\n                        this.renderImgView(imgCto.imgViewEl, imgSrc, imgAlt);\n                        this.renderImgTip(imgCto);\n                        imgCto.imgViewEl.style.setProperty('transform', imgCto.defaultImgStyle.transform);\n                        imgCto.imgViewEl.style.setProperty('filter', imgCto.defaultImgStyle.filter);\n                        imgCto.imgViewEl.style.setProperty('mix-blend-mode', imgCto.defaultImgStyle.mixBlendMode);\n                    }\n                }, 40, realImg);\n            }\n        };\n        this.renderImgTitle = (name, index) => {\n        };\n        this.setImgViewPosition = (imgZoomSize, rotate) => {\n            const imgViewEl = imgZoomSize.imgViewEl;\n            if (!imgViewEl)\n                return;\n            if (imgZoomSize) {\n                imgViewEl.setAttribute('width', imgZoomSize.curWidth + 'px');\n                imgViewEl.style.setProperty('margin-top', imgZoomSize.top + 'px', 'important');\n                imgViewEl.style.setProperty('margin-left', imgZoomSize.left + 'px', 'important');\n            }\n            const rotateDeg = rotate ? rotate : 0;\n            imgViewEl.style.transform = 'rotate(' + rotateDeg + 'deg)';\n            imgZoomSize.rotate = rotateDeg;\n        };\n        this.renderImgView = (imgViewEl, src, alt) => {\n            if (!imgViewEl)\n                return;\n            imgViewEl.setAttribute('src', src);\n            imgViewEl.setAttribute('alt', alt);\n            imgViewEl.hidden = !src && !alt;\n        };\n        this.renderImgTip = (activeImg) => {\n            if (!activeImg)\n                activeImg = this.imgGlobalStatus.activeImg;\n            if (activeImg && this.imgInfoCto.imgTipEl && activeImg.realWidth > 0 && activeImg.curWidth > 0) {\n                if (this.imgInfoCto.imgTipTimeout) {\n                    clearTimeout(this.imgInfoCto.imgTipTimeout);\n                }\n                if (this.plugin.settings.imgTipToggle) {\n                    this.imgInfoCto.imgTipEl.hidden = false; // display 'img-tip'\n                    const ratio = activeImg.curWidth * 100 / activeImg.realWidth;\n                    const isSingleDigit = 10 > ratio;\n                    const width = isSingleDigit ? 20 : 40;\n                    const left = activeImg.left + activeImg.curWidth / 2 - width / 2;\n                    const top = activeImg.top + activeImg.curHeight / 2 - 10;\n                    this.imgInfoCto.imgTipEl.style.setProperty(\"width\", width + 'px');\n                    this.imgInfoCto.imgTipEl.style.setProperty(\"font-size\", isSingleDigit || 100 >= activeImg.curWidth ? 'xx-small' : 'x-small');\n                    this.imgInfoCto.imgTipEl.style.setProperty(\"left\", left + 'px');\n                    this.imgInfoCto.imgTipEl.style.setProperty(\"top\", top + 'px');\n                    this.imgInfoCto.imgTipEl.style.setProperty(\"z-index\", activeImg.zIndex + '');\n                    this.imgInfoCto.imgTipEl.setText(parseInt(ratio + '') + '%');\n                    this.imgInfoCto.imgTipTimeout = setTimeout(() => {\n                        this.imgInfoCto.imgTipEl.hidden = true;\n                    }, 1000);\n                }\n                else {\n                    this.imgInfoCto.imgTipEl.hidden = true; // hide 'img-tip'\n                    this.imgInfoCto.imgTipTimeout = null;\n                }\n            }\n        };\n        this.setImgViewDefaultBackgroundForImgList = () => {\n            for (const imgCto of this.imgInfoCto.imgList) {\n                this.setImgViewDefaultBackground(imgCto.imgViewEl);\n            }\n        };\n        this.setImgViewDefaultBackground = (imgViewEl) => {\n            if (!imgViewEl)\n                return;\n            if (this.plugin.settings.imgViewBackgroundColor && IMG_DEFAULT_BACKGROUND_COLOR != this.plugin.settings.imgViewBackgroundColor) {\n                imgViewEl.removeClass('img-default-background');\n                imgViewEl.style.setProperty('background-color', this.plugin.settings.imgViewBackgroundColor);\n            }\n            else {\n                imgViewEl.addClass('img-default-background');\n                imgViewEl.style.removeProperty('background-color');\n            }\n        };\n        this.setActiveImgZIndex = (activeImg) => {\n        };\n        //endregion\n        //region ================== Gallery NavBar ========================\n        this.switchImageOnGalleryNavBar = (event, next) => {\n        };\n        this.renderGalleryNavbar = () => {\n        };\n        this.removeGalleryNavbar = () => {\n        };\n        //endregion\n        //region ================== full screen ========================\n        /**\n         * full-screen mode\n         */\n        this.showPlayerImg = (activeImg) => {\n            if (!activeImg && !(activeImg = this.imgGlobalStatus.activeImg))\n                return;\n            this.imgGlobalStatus.fullScreen = true;\n            activeImg.fullScreen = true;\n            // activeImg.imgViewEl.style.setProperty('display', 'none', 'important'); // hide imgViewEl\n            // this.imgInfoCto.imgFooterEl?.style.setProperty('display', 'none'); // hide 'img-footer'\n            // show the img-player\n            this.imgInfoCto.imgPlayerEl.style.setProperty('display', 'block');\n            this.imgInfoCto.imgPlayerEl.style.setProperty('z-index', (this.imgGlobalStatus.activeImgZIndex + 10) + '');\n            this.imgInfoCto.imgPlayerEl.addEventListener('click', this.closePlayerImg);\n            const windowWidth = document.documentElement.clientWidth || document.body.clientWidth;\n            const windowHeight = document.documentElement.clientHeight || document.body.clientHeight;\n            let newWidth, newHeight;\n            let top = 0;\n            if (IMG_FULL_SCREEN_MODE.STRETCH == this.plugin.settings.imgFullScreenMode) {\n                newWidth = windowWidth + 'px';\n                newHeight = windowHeight + 'px';\n            }\n            else if (IMG_FULL_SCREEN_MODE.FILL == this.plugin.settings.imgFullScreenMode) {\n                newWidth = '100%';\n                newHeight = '100%';\n            }\n            else {\n                // fit\n                const widthRatio = windowWidth / activeImg.realWidth;\n                const heightRatio = windowHeight / activeImg.realHeight;\n                if (widthRatio <= heightRatio) {\n                    newWidth = windowWidth;\n                    newHeight = widthRatio * activeImg.realHeight;\n                }\n                else {\n                    newHeight = windowHeight;\n                    newWidth = heightRatio * activeImg.realWidth;\n                }\n                top = (windowHeight - newHeight) / 2;\n                newWidth = newWidth + 'px';\n                newHeight = newHeight + 'px';\n            }\n            const imgPlayerImgViewEl = this.imgInfoCto.imgPlayerImgViewEl;\n            if (imgPlayerImgViewEl) {\n                imgPlayerImgViewEl.setAttribute('src', activeImg.imgViewEl.src);\n                imgPlayerImgViewEl.setAttribute('alt', activeImg.imgViewEl.alt);\n                imgPlayerImgViewEl.setAttribute('width', newWidth);\n                imgPlayerImgViewEl.setAttribute('height', newHeight);\n                imgPlayerImgViewEl.style.setProperty('margin-top', top + 'px');\n                //this.imgInfo.imgPlayerImgViewEl.style.setProperty('margin-left', left + 'px');\n                this.setImgViewDefaultBackground(imgPlayerImgViewEl);\n            }\n        };\n        /**\n         * close full screen\n         */\n        this.closePlayerImg = () => {\n            for (const imgCto of this.imgInfoCto.imgList) {\n                if (!imgCto.fullScreen)\n                    continue;\n                // show the popped up image\n                // imgCto.imgViewEl?.style.setProperty('display', 'block', 'important');\n                // this.imgInfoCto.imgFooterEl?.style.setProperty('display', 'block');\n            }\n            // hide full screen\n            if (this.imgInfoCto.imgPlayerEl) {\n                this.imgInfoCto.imgPlayerEl.style.setProperty('display', 'none'); // hide 'img-player'\n                this.imgInfoCto.imgPlayerEl.removeEventListener('click', this.closePlayerImg);\n            }\n            if (this.imgInfoCto.imgPlayerImgViewEl) {\n                this.imgInfoCto.imgPlayerImgViewEl.setAttribute('src', '');\n                this.imgInfoCto.imgPlayerImgViewEl.setAttribute('alt', '');\n            }\n            this.imgGlobalStatus.fullScreen = false;\n        };\n        //endregion\n        //region ================== events ========================\n        this.addOrRemoveEvents = (matchedImg, isAdd) => {\n            if (isAdd) {\n                if (!this.imgGlobalStatus.popup) {\n                    document.addEventListener('keydown', this.triggerKeydown);\n                    document.addEventListener('keyup', this.triggerKeyup);\n                }\n                if (!this.isPinMode()) {\n                    // click event: hide container view\n                    this.imgInfoCto.oitContainerViewEl.addEventListener('click', this.closeContainerView);\n                }\n                matchedImg.imgViewEl.addEventListener('mouseenter', this.mouseenterImgView);\n                matchedImg.imgViewEl.addEventListener('mouseleave', this.mouseleaveImgView);\n                // drag the image via mouse\n                matchedImg.imgViewEl.addEventListener('mousedown', this.mousedownImgView);\n                matchedImg.imgViewEl.addEventListener('mouseup', this.mouseupImgView);\n                // zoom the image via mouse wheel\n                matchedImg.imgViewEl.addEventListener('mousewheel', this.mousewheelViewContainer, { passive: true });\n            }\n            else {\n                if (!this.imgGlobalStatus.popup) {\n                    document.removeEventListener('keydown', this.triggerKeydown);\n                    document.removeEventListener('keyup', this.triggerKeyup);\n                    if (this.imgGlobalStatus.clickTimer) {\n                        clearTimeout(this.imgGlobalStatus.clickTimer);\n                        this.imgGlobalStatus.clickTimer = null;\n                        this.imgGlobalStatus.clickCount = 0;\n                    }\n                }\n                if (!this.isPinMode()) {\n                    this.imgInfoCto.oitContainerViewEl.removeEventListener('click', this.closeContainerView);\n                }\n                matchedImg.imgViewEl.removeEventListener('mouseenter', this.mouseenterImgView);\n                matchedImg.imgViewEl.removeEventListener('mouseleave', this.mouseleaveImgView);\n                matchedImg.imgViewEl.removeEventListener('mousedown', this.mousedownImgView);\n                matchedImg.imgViewEl.removeEventListener('mouseup', this.mouseupImgView);\n                matchedImg.imgViewEl.removeEventListener('mousewheel', this.mousewheelViewContainer);\n                if (matchedImg.refreshImgInterval) {\n                    clearInterval(matchedImg.refreshImgInterval);\n                    matchedImg.refreshImgInterval = null;\n                }\n            }\n        };\n        this.triggerKeyup = (event) => {\n            // console.log('keyup', event, event.key);\n            const key = event.key;\n            if (!key)\n                return;\n            if (!('Escape' === key)) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n            switch (key) {\n                case 'Escape':\n                    // close full screen, hide container view\n                    this.imgGlobalStatus.fullScreen ? this.closePlayerImg() : this.closeContainerView();\n                    break;\n                case 'ArrowUp':\n                    this.imgGlobalStatus.arrowUp = false;\n                    break;\n                case 'ArrowDown':\n                    this.imgGlobalStatus.arrowDown = false;\n                    break;\n                case 'ArrowLeft':\n                    this.imgGlobalStatus.arrowLeft = false;\n                    // switch to the previous image on the gallery navBar\n                    this.switchImageOnGalleryNavBar(event, false);\n                    break;\n                case 'ArrowRight':\n                    this.imgGlobalStatus.arrowRight = false;\n                    // switch to the next image on the gallery navBar\n                    this.switchImageOnGalleryNavBar(event, true);\n                    break;\n            }\n        };\n        /**\n         * move the image by keyboard\n         * @param event\n         */\n        this.triggerKeydown = (event) => {\n            //console.log('keydown', event, event.key, this.imgStatus);\n            if (this.isPinMode())\n                return;\n            event.preventDefault();\n            event.stopPropagation();\n            if (this.imgGlobalStatus.arrowUp && this.imgGlobalStatus.arrowLeft) {\n                this.moveImgViewByHotkey(event, 'UP_LEFT');\n                return;\n            }\n            else if (this.imgGlobalStatus.arrowUp && this.imgGlobalStatus.arrowRight) {\n                this.moveImgViewByHotkey(event, 'UP_RIGHT');\n                return;\n            }\n            else if (this.imgGlobalStatus.arrowDown && this.imgGlobalStatus.arrowLeft) {\n                this.moveImgViewByHotkey(event, 'DOWN_LEFT');\n                return;\n            }\n            else if (this.imgGlobalStatus.arrowDown && this.imgGlobalStatus.arrowRight) {\n                this.moveImgViewByHotkey(event, 'DOWN_RIGHT');\n                return;\n            }\n            switch (event.key) {\n                case 'ArrowUp':\n                    this.imgGlobalStatus.arrowUp = true;\n                    this.moveImgViewByHotkey(event, 'UP');\n                    break;\n                case 'ArrowDown':\n                    this.imgGlobalStatus.arrowDown = true;\n                    this.moveImgViewByHotkey(event, 'DOWN');\n                    break;\n                case 'ArrowLeft':\n                    this.imgGlobalStatus.arrowLeft = true;\n                    this.moveImgViewByHotkey(event, 'LEFT');\n                    break;\n                case 'ArrowRight':\n                    this.imgGlobalStatus.arrowRight = true;\n                    this.moveImgViewByHotkey(event, 'RIGHT');\n                    break;\n            }\n        };\n        this.moveImgViewByHotkey = (event, orientation) => {\n            if (!orientation || !this.imgGlobalStatus.popup || !this.checkHotkeySettings(event, this.plugin.settings.moveTheImageHotkey))\n                return;\n            switch (orientation) {\n                case 'UP':\n                    this.mousemoveImgView(null, { offsetX: 0, offsetY: -this.plugin.settings.imageMoveSpeed });\n                    break;\n                case 'DOWN':\n                    this.mousemoveImgView(null, { offsetX: 0, offsetY: this.plugin.settings.imageMoveSpeed });\n                    break;\n                case 'LEFT':\n                    this.mousemoveImgView(null, { offsetX: -this.plugin.settings.imageMoveSpeed, offsetY: 0 });\n                    break;\n                case 'RIGHT':\n                    this.mousemoveImgView(null, { offsetX: this.plugin.settings.imageMoveSpeed, offsetY: 0 });\n                    break;\n                case 'UP_LEFT':\n                    this.mousemoveImgView(null, {\n                        offsetX: -this.plugin.settings.imageMoveSpeed,\n                        offsetY: -this.plugin.settings.imageMoveSpeed\n                    });\n                    break;\n                case 'UP_RIGHT':\n                    this.mousemoveImgView(null, {\n                        offsetX: this.plugin.settings.imageMoveSpeed,\n                        offsetY: -this.plugin.settings.imageMoveSpeed\n                    });\n                    break;\n                case 'DOWN_LEFT':\n                    this.mousemoveImgView(null, {\n                        offsetX: -this.plugin.settings.imageMoveSpeed,\n                        offsetY: this.plugin.settings.imageMoveSpeed\n                    });\n                    break;\n                case 'DOWN_RIGHT':\n                    this.mousemoveImgView(null, {\n                        offsetX: this.plugin.settings.imageMoveSpeed,\n                        offsetY: this.plugin.settings.imageMoveSpeed\n                    });\n                    break;\n            }\n        };\n        this.checkHotkeySettings = (event, hotkey) => {\n            switch (hotkey) {\n                case \"NONE\":\n                    return !event.ctrlKey && !event.altKey && !event.shiftKey;\n                case \"CTRL\":\n                    return event.ctrlKey && !event.altKey && !event.shiftKey;\n                case \"ALT\":\n                    return !event.ctrlKey && event.altKey && !event.shiftKey;\n                case \"SHIFT\":\n                    return !event.ctrlKey && !event.altKey && event.shiftKey;\n                case \"CTRL_ALT\":\n                    return event.ctrlKey && event.altKey && !event.shiftKey;\n                case \"CTRL_SHIFT\":\n                    return event.ctrlKey && !event.altKey && event.shiftKey;\n                case \"SHIFT_ALT\":\n                    return !event.ctrlKey && event.altKey && event.shiftKey;\n                case \"CTRL_SHIFT_ALT\":\n                    return event.ctrlKey && event.altKey && event.shiftKey;\n            }\n            return false;\n        };\n        this.mouseenterImgView = (event) => {\n            this.resetClickTimer();\n            event.stopPropagation();\n            event.preventDefault();\n            this.getAndUpdateActiveImg(event);\n            // console.log('mouseenterImgView', event, this.imgGlobalStatus.activeImg);\n        };\n        this.mousedownImgView = (event) => {\n            // console.log('mousedownImgView', event, this.imgGlobalStatus.activeImg, event.button);\n            event.stopPropagation();\n            event.preventDefault();\n            const activeImg = this.getAndUpdateActiveImg(event);\n            if (!activeImg)\n                return;\n            if (0 == event.button) { // left click\n                this.setClickTimer(activeImg);\n                this.setActiveImgZIndex(activeImg);\n                this.imgGlobalStatus.dragging = true;\n                // 鼠标相对于图片的位置\n                activeImg.moveX = activeImg.imgViewEl.offsetLeft - event.clientX;\n                activeImg.moveY = activeImg.imgViewEl.offsetTop - event.clientY;\n                // 鼠标按下时持续触发/移动事件\n                activeImg.imgViewEl.onmousemove = this.mousemoveImgView;\n            }\n        };\n        /**\n         * move the image by mouse or keyboard\n         * @param event\n         * @param offsetSize\n         */\n        this.mousemoveImgView = (event, offsetSize) => {\n            // console.log('mousemoveImgView', event, this.imgGlobalStatus.activeImg);\n            const activeImg = this.imgGlobalStatus.activeImg;\n            if (!activeImg)\n                return;\n            if (event) {\n                if (!this.imgGlobalStatus.dragging)\n                    return;\n                // drag via mouse cursor (Both Mode)\n                activeImg.left = event.clientX + activeImg.moveX;\n                activeImg.top = event.clientY + activeImg.moveY;\n            }\n            else if (offsetSize) {\n                // move by arrow keys (Normal Mode)\n                activeImg.left += offsetSize.offsetX;\n                activeImg.top += offsetSize.offsetY;\n            }\n            else {\n                return;\n            }\n            // move the image\n            activeImg.imgViewEl.style.setProperty('margin-left', activeImg.left + 'px', 'important');\n            activeImg.imgViewEl.style.setProperty('margin-top', activeImg.top + 'px', 'important');\n        };\n        this.mouseupImgView = (event) => {\n            var _a;\n            // console.log('mouseupImgView', event, this.imgGlobalStatus.activeImg);\n            this.imgGlobalStatus.dragging = false;\n            event.preventDefault();\n            event.stopPropagation();\n            const activeImg = this.imgGlobalStatus.activeImg;\n            if (activeImg) {\n                activeImg.imgViewEl.onmousemove = null;\n                if (2 == event.button) { // right click\n                    (_a = this.menuView) === null || _a === void 0 ? void 0 : _a.show(event, activeImg);\n                }\n            }\n        };\n        this.mouseleaveImgView = (event) => {\n            // console.log('mouseleaveImgView', event, this.imgGlobalStatus.activeImg, '>>> set null');\n            this.imgGlobalStatus.dragging = false;\n            this.resetClickTimer();\n            event.preventDefault();\n            event.stopPropagation();\n            const activeImg = this.imgGlobalStatus.activeImg;\n            if (activeImg) {\n                activeImg.imgViewEl.onmousemove = null;\n                this.setActiveImgForMouseEvent(null); // for pin mode\n            }\n        };\n        this.setClickTimer = (activeImg) => {\n            ++this.imgGlobalStatus.clickCount;\n            clearTimeout(this.imgGlobalStatus.clickTimer);\n            this.imgGlobalStatus.clickTimer = setTimeout(() => {\n                const clickCount = this.imgGlobalStatus.clickCount;\n                this.resetClickTimer();\n                if (2 === clickCount) { // double click\n                    if (!activeImg)\n                        activeImg = this.imgGlobalStatus.activeImg;\n                    // console.log('mousedownImgView: double click...', activeImg.index);\n                    this.clickImgToolbar(null, this.plugin.settings.doubleClickToolbar, activeImg);\n                }\n            }, 200);\n        };\n        this.resetClickTimer = () => {\n            this.imgGlobalStatus.clickTimer = null;\n            this.imgGlobalStatus.clickCount = 0;\n        };\n        this.getAndUpdateActiveImg = (event) => {\n            const targetEl = event.target;\n            let index;\n            if (!targetEl || !(index = targetEl.dataset.index))\n                return;\n            const activeImg = this.imgInfoCto.imgList[parseInt(index)];\n            if (activeImg && (!this.imgGlobalStatus.activeImg || activeImg.index !== this.imgGlobalStatus.activeImg.index)) {\n                this.setActiveImgForMouseEvent(activeImg); // update activeImg\n            }\n            // console.log('getAndUpdateActiveImg: ', activeImg)\n            return activeImg;\n        };\n        this.mousewheelViewContainer = (event) => {\n            // event.preventDefault();\n            event.stopPropagation();\n            // @ts-ignore\n            this.zoomAndRender(0 < event.wheelDelta ? 0.1 : -0.1, event);\n        };\n        this.zoomAndRender = (ratio, event, actualSize, activeImg) => {\n            if (!activeImg) {\n                activeImg = this.imgGlobalStatus.activeImg;\n            }\n            let activeImgViewEl;\n            if (!activeImg || !(activeImgViewEl = activeImg.imgViewEl))\n                return;\n            let offsetSize = { offsetX: 0, offsetY: 0 };\n            if (event) {\n                offsetSize.offsetX = event.offsetX;\n                offsetSize.offsetY = event.offsetY;\n            }\n            else {\n                offsetSize.offsetX = activeImg.curWidth / 2;\n                offsetSize.offsetY = activeImg.curHeight / 2;\n            }\n            const zoomData = ImgUtil.zoom(ratio, activeImg, offsetSize, actualSize);\n            this.renderImgTip(activeImg);\n            activeImgViewEl.setAttribute('width', zoomData.curWidth + 'px');\n            activeImgViewEl.style.setProperty('margin-top', zoomData.top + 'px', 'important');\n            activeImgViewEl.style.setProperty('margin-left', zoomData.left + 'px', 'important');\n        };\n        this.clickImgToolbar = (event, targetElClass, activeImg) => {\n            if (!targetElClass && !activeImg) {\n                if (!event)\n                    return;\n                // comes from clicking toolbar\n                targetElClass = event.target.className;\n                activeImg = this.imgGlobalStatus.activeImg;\n            }\n            switch (targetElClass) {\n                case 'toolbar_zoom_to_100':\n                    this.zoomAndRender(null, null, true, activeImg);\n                    break;\n                case 'toolbar_zoom_in':\n                    this.zoomAndRender(0.1);\n                    break;\n                case 'toolbar_zoom_out':\n                    this.zoomAndRender(-0.1);\n                    break;\n                case 'toolbar_full_screen':\n                    this.showPlayerImg(activeImg);\n                    break;\n                case 'toolbar_refresh':\n                    this.refreshImg(activeImg);\n                    break;\n                case 'toolbar_rotate_left':\n                    activeImg.rotate -= 90;\n                    ImgUtil.transform(activeImg);\n                    break;\n                case 'toolbar_rotate_right':\n                    activeImg.rotate += 90;\n                    ImgUtil.transform(activeImg);\n                    break;\n                case 'toolbar_scale_x':\n                    activeImg.scaleX = !activeImg.scaleX;\n                    ImgUtil.transform(activeImg);\n                    break;\n                case 'toolbar_scale_y':\n                    activeImg.scaleY = !activeImg.scaleY;\n                    ImgUtil.transform(activeImg);\n                    break;\n                case 'toolbar_invert_color':\n                    activeImg.invertColor = !activeImg.invertColor;\n                    ImgUtil.invertImgColor(activeImg.imgViewEl, activeImg.invertColor);\n                    break;\n                case 'toolbar_copy':\n                    ImgUtil.copyImage(activeImg.imgViewEl, activeImg.curWidth, activeImg.curHeight);\n                    break;\n                case 'toolbar_close':\n                    this.closeContainerView(event, activeImg);\n                    break;\n            }\n        };\n        this.plugin = plugin;\n        this.containerType = containerType;\n        this.pinMaximum = pinMaximum;\n    }\n}\n\nvar Md5 = /** @class */ (function () {\n    function Md5() {\n    }\n    Md5.AddUnsigned = function (lX, lY) {\n        var lX4, lY4, lX8, lY8, lResult;\n        lX8 = (lX & 0x80000000);\n        lY8 = (lY & 0x80000000);\n        lX4 = (lX & 0x40000000);\n        lY4 = (lY & 0x40000000);\n        lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);\n        if (!!(lX4 & lY4)) {\n            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);\n        }\n        if (!!(lX4 | lY4)) {\n            if (!!(lResult & 0x40000000)) {\n                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);\n            }\n            else {\n                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);\n            }\n        }\n        else {\n            return (lResult ^ lX8 ^ lY8);\n        }\n    };\n    Md5.FF = function (a, b, c, d, x, s, ac) {\n        a = this.AddUnsigned(a, this.AddUnsigned(this.AddUnsigned(this.F(b, c, d), x), ac));\n        return this.AddUnsigned(this.RotateLeft(a, s), b);\n    };\n    Md5.GG = function (a, b, c, d, x, s, ac) {\n        a = this.AddUnsigned(a, this.AddUnsigned(this.AddUnsigned(this.G(b, c, d), x), ac));\n        return this.AddUnsigned(this.RotateLeft(a, s), b);\n    };\n    Md5.HH = function (a, b, c, d, x, s, ac) {\n        a = this.AddUnsigned(a, this.AddUnsigned(this.AddUnsigned(this.H(b, c, d), x), ac));\n        return this.AddUnsigned(this.RotateLeft(a, s), b);\n    };\n    Md5.II = function (a, b, c, d, x, s, ac) {\n        a = this.AddUnsigned(a, this.AddUnsigned(this.AddUnsigned(this.I(b, c, d), x), ac));\n        return this.AddUnsigned(this.RotateLeft(a, s), b);\n    };\n    Md5.ConvertToWordArray = function (string) {\n        var lWordCount, lMessageLength = string.length, lNumberOfWords_temp1 = lMessageLength + 8, lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64, lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16, lWordArray = Array(lNumberOfWords - 1), lBytePosition = 0, lByteCount = 0;\n        while (lByteCount < lMessageLength) {\n            lWordCount = (lByteCount - (lByteCount % 4)) / 4;\n            lBytePosition = (lByteCount % 4) * 8;\n            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));\n            lByteCount++;\n        }\n        lWordCount = (lByteCount - (lByteCount % 4)) / 4;\n        lBytePosition = (lByteCount % 4) * 8;\n        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);\n        lWordArray[lNumberOfWords - 2] = lMessageLength << 3;\n        lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;\n        return lWordArray;\n    };\n    Md5.WordToHex = function (lValue) {\n        var WordToHexValue = \"\", WordToHexValue_temp = \"\", lByte, lCount;\n        for (lCount = 0; lCount <= 3; lCount++) {\n            lByte = (lValue >>> (lCount * 8)) & 255;\n            WordToHexValue_temp = \"0\" + lByte.toString(16);\n            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);\n        }\n        return WordToHexValue;\n    };\n    Md5.Utf8Encode = function (string) {\n        var utftext = \"\", c;\n        string = string.replace(/\\r\\n/g, \"\\n\");\n        for (var n = 0; n < string.length; n++) {\n            c = string.charCodeAt(n);\n            if (c < 128) {\n                utftext += String.fromCharCode(c);\n            }\n            else if ((c > 127) && (c < 2048)) {\n                utftext += String.fromCharCode((c >> 6) | 192);\n                utftext += String.fromCharCode((c & 63) | 128);\n            }\n            else {\n                utftext += String.fromCharCode((c >> 12) | 224);\n                utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n                utftext += String.fromCharCode((c & 63) | 128);\n            }\n        }\n        return utftext;\n    };\n    Md5.init = function (string) {\n        var temp;\n        if (typeof string !== 'string')\n            string = JSON.stringify(string);\n        this._string = this.Utf8Encode(string);\n        this.x = this.ConvertToWordArray(this._string);\n        this.a = 0x67452301;\n        this.b = 0xEFCDAB89;\n        this.c = 0x98BADCFE;\n        this.d = 0x10325476;\n        for (this.k = 0; this.k < this.x.length; this.k += 16) {\n            this.AA = this.a;\n            this.BB = this.b;\n            this.CC = this.c;\n            this.DD = this.d;\n            this.a = this.FF(this.a, this.b, this.c, this.d, this.x[this.k], this.S11, 0xD76AA478);\n            this.d = this.FF(this.d, this.a, this.b, this.c, this.x[this.k + 1], this.S12, 0xE8C7B756);\n            this.c = this.FF(this.c, this.d, this.a, this.b, this.x[this.k + 2], this.S13, 0x242070DB);\n            this.b = this.FF(this.b, this.c, this.d, this.a, this.x[this.k + 3], this.S14, 0xC1BDCEEE);\n            this.a = this.FF(this.a, this.b, this.c, this.d, this.x[this.k + 4], this.S11, 0xF57C0FAF);\n            this.d = this.FF(this.d, this.a, this.b, this.c, this.x[this.k + 5], this.S12, 0x4787C62A);\n            this.c = this.FF(this.c, this.d, this.a, this.b, this.x[this.k + 6], this.S13, 0xA8304613);\n            this.b = this.FF(this.b, this.c, this.d, this.a, this.x[this.k + 7], this.S14, 0xFD469501);\n            this.a = this.FF(this.a, this.b, this.c, this.d, this.x[this.k + 8], this.S11, 0x698098D8);\n            this.d = this.FF(this.d, this.a, this.b, this.c, this.x[this.k + 9], this.S12, 0x8B44F7AF);\n            this.c = this.FF(this.c, this.d, this.a, this.b, this.x[this.k + 10], this.S13, 0xFFFF5BB1);\n            this.b = this.FF(this.b, this.c, this.d, this.a, this.x[this.k + 11], this.S14, 0x895CD7BE);\n            this.a = this.FF(this.a, this.b, this.c, this.d, this.x[this.k + 12], this.S11, 0x6B901122);\n            this.d = this.FF(this.d, this.a, this.b, this.c, this.x[this.k + 13], this.S12, 0xFD987193);\n            this.c = this.FF(this.c, this.d, this.a, this.b, this.x[this.k + 14], this.S13, 0xA679438E);\n            this.b = this.FF(this.b, this.c, this.d, this.a, this.x[this.k + 15], this.S14, 0x49B40821);\n            this.a = this.GG(this.a, this.b, this.c, this.d, this.x[this.k + 1], this.S21, 0xF61E2562);\n            this.d = this.GG(this.d, this.a, this.b, this.c, this.x[this.k + 6], this.S22, 0xC040B340);\n            this.c = this.GG(this.c, this.d, this.a, this.b, this.x[this.k + 11], this.S23, 0x265E5A51);\n            this.b = this.GG(this.b, this.c, this.d, this.a, this.x[this.k], this.S24, 0xE9B6C7AA);\n            this.a = this.GG(this.a, this.b, this.c, this.d, this.x[this.k + 5], this.S21, 0xD62F105D);\n            this.d = this.GG(this.d, this.a, this.b, this.c, this.x[this.k + 10], this.S22, 0x2441453);\n            this.c = this.GG(this.c, this.d, this.a, this.b, this.x[this.k + 15], this.S23, 0xD8A1E681);\n            this.b = this.GG(this.b, this.c, this.d, this.a, this.x[this.k + 4], this.S24, 0xE7D3FBC8);\n            this.a = this.GG(this.a, this.b, this.c, this.d, this.x[this.k + 9], this.S21, 0x21E1CDE6);\n            this.d = this.GG(this.d, this.a, this.b, this.c, this.x[this.k + 14], this.S22, 0xC33707D6);\n            this.c = this.GG(this.c, this.d, this.a, this.b, this.x[this.k + 3], this.S23, 0xF4D50D87);\n            this.b = this.GG(this.b, this.c, this.d, this.a, this.x[this.k + 8], this.S24, 0x455A14ED);\n            this.a = this.GG(this.a, this.b, this.c, this.d, this.x[this.k + 13], this.S21, 0xA9E3E905);\n            this.d = this.GG(this.d, this.a, this.b, this.c, this.x[this.k + 2], this.S22, 0xFCEFA3F8);\n            this.c = this.GG(this.c, this.d, this.a, this.b, this.x[this.k + 7], this.S23, 0x676F02D9);\n            this.b = this.GG(this.b, this.c, this.d, this.a, this.x[this.k + 12], this.S24, 0x8D2A4C8A);\n            this.a = this.HH(this.a, this.b, this.c, this.d, this.x[this.k + 5], this.S31, 0xFFFA3942);\n            this.d = this.HH(this.d, this.a, this.b, this.c, this.x[this.k + 8], this.S32, 0x8771F681);\n            this.c = this.HH(this.c, this.d, this.a, this.b, this.x[this.k + 11], this.S33, 0x6D9D6122);\n            this.b = this.HH(this.b, this.c, this.d, this.a, this.x[this.k + 14], this.S34, 0xFDE5380C);\n            this.a = this.HH(this.a, this.b, this.c, this.d, this.x[this.k + 1], this.S31, 0xA4BEEA44);\n            this.d = this.HH(this.d, this.a, this.b, this.c, this.x[this.k + 4], this.S32, 0x4BDECFA9);\n            this.c = this.HH(this.c, this.d, this.a, this.b, this.x[this.k + 7], this.S33, 0xF6BB4B60);\n            this.b = this.HH(this.b, this.c, this.d, this.a, this.x[this.k + 10], this.S34, 0xBEBFBC70);\n            this.a = this.HH(this.a, this.b, this.c, this.d, this.x[this.k + 13], this.S31, 0x289B7EC6);\n            this.d = this.HH(this.d, this.a, this.b, this.c, this.x[this.k], this.S32, 0xEAA127FA);\n            this.c = this.HH(this.c, this.d, this.a, this.b, this.x[this.k + 3], this.S33, 0xD4EF3085);\n            this.b = this.HH(this.b, this.c, this.d, this.a, this.x[this.k + 6], this.S34, 0x4881D05);\n            this.a = this.HH(this.a, this.b, this.c, this.d, this.x[this.k + 9], this.S31, 0xD9D4D039);\n            this.d = this.HH(this.d, this.a, this.b, this.c, this.x[this.k + 12], this.S32, 0xE6DB99E5);\n            this.c = this.HH(this.c, this.d, this.a, this.b, this.x[this.k + 15], this.S33, 0x1FA27CF8);\n            this.b = this.HH(this.b, this.c, this.d, this.a, this.x[this.k + 2], this.S34, 0xC4AC5665);\n            this.a = this.II(this.a, this.b, this.c, this.d, this.x[this.k], this.S41, 0xF4292244);\n            this.d = this.II(this.d, this.a, this.b, this.c, this.x[this.k + 7], this.S42, 0x432AFF97);\n            this.c = this.II(this.c, this.d, this.a, this.b, this.x[this.k + 14], this.S43, 0xAB9423A7);\n            this.b = this.II(this.b, this.c, this.d, this.a, this.x[this.k + 5], this.S44, 0xFC93A039);\n            this.a = this.II(this.a, this.b, this.c, this.d, this.x[this.k + 12], this.S41, 0x655B59C3);\n            this.d = this.II(this.d, this.a, this.b, this.c, this.x[this.k + 3], this.S42, 0x8F0CCC92);\n            this.c = this.II(this.c, this.d, this.a, this.b, this.x[this.k + 10], this.S43, 0xFFEFF47D);\n            this.b = this.II(this.b, this.c, this.d, this.a, this.x[this.k + 1], this.S44, 0x85845DD1);\n            this.a = this.II(this.a, this.b, this.c, this.d, this.x[this.k + 8], this.S41, 0x6FA87E4F);\n            this.d = this.II(this.d, this.a, this.b, this.c, this.x[this.k + 15], this.S42, 0xFE2CE6E0);\n            this.c = this.II(this.c, this.d, this.a, this.b, this.x[this.k + 6], this.S43, 0xA3014314);\n            this.b = this.II(this.b, this.c, this.d, this.a, this.x[this.k + 13], this.S44, 0x4E0811A1);\n            this.a = this.II(this.a, this.b, this.c, this.d, this.x[this.k + 4], this.S41, 0xF7537E82);\n            this.d = this.II(this.d, this.a, this.b, this.c, this.x[this.k + 11], this.S42, 0xBD3AF235);\n            this.c = this.II(this.c, this.d, this.a, this.b, this.x[this.k + 2], this.S43, 0x2AD7D2BB);\n            this.b = this.II(this.b, this.c, this.d, this.a, this.x[this.k + 9], this.S44, 0xEB86D391);\n            this.a = this.AddUnsigned(this.a, this.AA);\n            this.b = this.AddUnsigned(this.b, this.BB);\n            this.c = this.AddUnsigned(this.c, this.CC);\n            this.d = this.AddUnsigned(this.d, this.DD);\n        }\n        temp = this.WordToHex(this.a) + this.WordToHex(this.b) + this.WordToHex(this.c) + this.WordToHex(this.d);\n        return temp.toLowerCase();\n    };\n    Md5.x = Array();\n    Md5.S11 = 7;\n    Md5.S12 = 12;\n    Md5.S13 = 17;\n    Md5.S14 = 22;\n    Md5.S21 = 5;\n    Md5.S22 = 9;\n    Md5.S23 = 14;\n    Md5.S24 = 20;\n    Md5.S31 = 4;\n    Md5.S32 = 11;\n    Md5.S33 = 16;\n    Md5.S34 = 23;\n    Md5.S41 = 6;\n    Md5.S42 = 10;\n    Md5.S43 = 15;\n    Md5.S44 = 21;\n    Md5.RotateLeft = function (lValue, iShiftBits) { return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); };\n    Md5.F = function (x, y, z) { return (x & y) | ((~x) & z); };\n    Md5.G = function (x, y, z) { return (x & z) | (y & (~z)); };\n    Md5.H = function (x, y, z) { return (x ^ y ^ z); };\n    Md5.I = function (x, y, z) { return (y ^ (x | (~z))); };\n    return Md5;\n}());\n\nclass FileCto {\n    constructor(path, ctime, mtime) {\n        this.path = path;\n        this.ctime = ctime;\n        this.mtime = mtime;\n    }\n}\n\nclass GalleryImgCto {\n    constructor(alt, src) {\n        this.alt = alt;\n        this.src = src;\n    }\n}\nclass GalleryImgCacheCto {\n    constructor(file, galleryImgList, mtime) {\n        this.file = file;\n        this.galleryImgList = galleryImgList;\n        this.mtime = mtime;\n    }\n}\n\n/* // const imgList: Array<GalleryImg> = parseMarkDown(plugin, activeView.sourceMode?.cmEditor, activeView.file.path);\nexport const parseMarkDown = (plugin: ImageToolkitPlugin, cm: CodeMirror.Editor, filePath: string) => {\n    let line, lineText;\n    for (let i = 0, lastLine = cm.lastLine(); i <= lastLine; i++) {\n        if (!(line = cm.lineInfo(i))) continue;\n        if (!(lineText = line.text)) continue;\n        console.debug((i + 1) + ' line: ' + lineText);\n    }\n} */\nconst parseActiveViewData = (plugin, lines, file) => {\n    if (!lines || 0 >= lines.length)\n        return null;\n    let lineText;\n    let isCodeArea = false;\n    let textArr;\n    const imgList = new Array();\n    for (let i = 0, len = lines.length; i < len; i++) {\n        if (!(lineText = lines[i]))\n            continue;\n        // console.log((i + 1) + ' line: ' + lineText);\n        if (lineText.startsWith('```')) {\n            isCodeArea = !isCodeArea;\n            continue;\n        }\n        if (isCodeArea)\n            continue;\n        if (textArr = getNonCodeAreaTexts(lineText)) {\n            for (const text of textArr) {\n                extractImage(text, imgList);\n            }\n        }\n        else {\n            extractImage(lineText, imgList);\n        }\n    }\n    const filePath = file.path;\n    for (let i = 0, len = imgList.length; i < len; i++) {\n        const img = imgList[i];\n        if (img.convert) {\n            const imageFile = plugin.app.metadataCache.getFirstLinkpathDest(decodeURIComponent(img.src), filePath);\n            img.src = imageFile ? plugin.app.vault.getResourcePath(imageFile) : '';\n        }\n        img.hash = md5Img(img.alt, img.src);\n        img.match = null;\n        img.name = null;\n    }\n    return new GalleryImgCacheCto(new FileCto(file.path, file.stat.ctime, file.stat.mtime), imgList, new Date().getTime());\n};\nconst getNonCodeAreaTexts = (lineText) => {\n    let textArr = [];\n    const idx1 = lineText.indexOf('`');\n    if (0 > idx1)\n        return null;\n    const idx2 = lineText.lastIndexOf('`');\n    if (idx1 === idx2)\n        return null;\n    if (idx1 > 0)\n        textArr.push(lineText.substring(0, idx1));\n    if (lineText.length - 1 > idx2)\n        textArr.push(lineText.substring(idx2 + 1));\n    return textArr;\n};\nconst IMAGE_LINK_REGEX1 = /\\[\\s*?(!\\[(.*?)\\]\\((.*?)\\))\\s*?\\]\\(.*?\\)/; // 1-link: [ ![alt1|alt2|...|altn|width](src) ](https://...)\nconst IMAGE_REGEX1 = /!\\[(.*?)\\]\\((.*?)\\)/; // 1: ![alt1|alt2|...|altn|width](src)\nconst IMAGE_LINK_REGEX2 = /\\[\\s*?(!\\[\\[(.*?[jpe?g|png|gif|svg|bmp].*?)\\]\\])\\s*?\\]\\(.*?\\)/i; // 2-link: [ ![[src|alt1|alt2|width]] ](https://...)\nconst IMAGE_REGEX2 = /!\\[\\[(.*?[jpe?g|png|gif|svg|bmp].*?)\\]\\]/i; // 2: ![[src|alt1|alt2|width]]\nconst SRC_LINK_REGEX = /[a-z][a-z0-9+\\-.]+:\\/.*/i; // match link: http://, file://, app:// \nconst SRC_IMG_REGREX = /.*?\\.jpe?g|png|gif|svg|bmp/i; // match image ext: .jpg/.jpeg/.png/.gif/.svg/.bmp\nconst IMG_TAG_LINK_SRC_REGEX = /<a.*?(<img.*?src=[\\'\"](.*?)[\\'\"].*?\\/?>).*?\\/a>/i; // 3-a-img-src: <a> <img ... src=''/> </a>\nconst IMG_TAG_SRC_REGEX = /<img.*?src=[\\'\"](.*?)[\\'\"].*?\\/?>/i; // 3-img-src: <img ... src='' />\nconst IMG_TAG_ALT_REGEX = /<img.*?alt=[\\'\"](.*?)[\\'\"].*?\\/?>/i; // 3-img-alt: <img ... alt='' />\nconst FULL_PATH_REGEX = /^[a-z]\\:.*?[jpe?g|png|gif|svg|bmp]/i;\nconst BLOCKQUOTE_PREFIX = `#^`;\nconst IMG_MATCH_MIN_LEN = 7;\nconst extractImage = (text, imgList) => {\n    let img;\n    if (!(img = matchImage1(text))) {\n        if (!(img = matchImage2(text))) {\n            if (!(img = matchImageTag(text))) {\n                return;\n            }\n        }\n    }\n    imgList.push(img);\n    if (img.match) {\n        const idx = img.match.index + img.match[0].length;\n        if (idx > text.length - IMG_MATCH_MIN_LEN)\n            return;\n        extractImage(text.substring(idx), imgList);\n    }\n};\n/**\n * ![alt1|alt2|...|altn|width](src)\n * @param text\n * @returns\n */\nconst matchImage1 = (text) => {\n    var _a;\n    let match = text.match(IMAGE_LINK_REGEX1); // 1-link: [ ![alt1|alt2|...|altn|width](src) ](https://...)\n    let link = false;\n    let alt, src;\n    if (match) {\n        link = true;\n        alt = match[2];\n        src = match[3];\n    }\n    else {\n        match = text.match(IMAGE_REGEX1); // 1: ![alt1|alt2|...|altn|width](src)\n        if (match) {\n            if (alt = match[1]) {\n                if (0 <= alt.indexOf('[') && 0 <= alt.indexOf(']'))\n                    return;\n            }\n            src = match[2];\n            if (src && src.startsWith(BLOCKQUOTE_PREFIX))\n                return;\n        }\n    }\n    if (!match)\n        return null;\n    const img = new GalleryImgCto();\n    img.link = link;\n    img.match = match;\n    img.alt = alt;\n    img.src = src;\n    let width;\n    if (img.src) {\n        if (SRC_LINK_REGEX.test(img.src)) { // 1.2: match link: http://, file://, app://local/\n            if (img.src.startsWith('file://')) {\n                img.src = img.src.replace(/^file:\\/+/, 'app://local/');\n            }\n        }\n        else if (SRC_IMG_REGREX.test(img.src)) { // 1.3: match image ext: .jpg/.jpeg/.png/.gif/.svg/.bmp\n            const srcArr = img.src.split('/');\n            if (srcArr && 0 < srcArr.length) {\n                img.name = srcArr[srcArr.length - 1];\n            }\n            img.convert = true;\n        }\n    }\n    const altArr = (_a = img.alt) === null || _a === void 0 ? void 0 : _a.split('\\|'); // match[1] = alt1|alt2|...|altn|width\n    if (altArr && 1 < altArr.length) {\n        if (/\\d+/.test(width = altArr[altArr.length - 1])) {\n            img.alt = img.alt.substring(0, img.alt.length - width.length - 1);\n        }\n    }\n    return img;\n};\n/**\n * ![[src|alt1|alt2|width]]\n * @param text\n * @returns\n */\nconst matchImage2 = (text) => {\n    let match = text.match(IMAGE_LINK_REGEX2); // 2-link: [ ![[src|alt1|alt2|width]] ](https://...)\n    let link = false;\n    let content;\n    if (match) {\n        link = true;\n        content = match[2];\n    }\n    else {\n        match = text.match(IMAGE_REGEX2); // 2: ![[src|alt1|alt2|width]]\n        content = match ? match[1] : null;\n        if (content && content.startsWith(BLOCKQUOTE_PREFIX))\n            return;\n    }\n    if (!match)\n        return null;\n    const img = new GalleryImgCto();\n    img.link = link;\n    img.match = match;\n    const contentArr = content === null || content === void 0 ? void 0 : content.split('|');\n    if (contentArr && 0 < contentArr.length && (img.src = contentArr[0])) {\n        const srcArr = img.src.split('/');\n        if (srcArr && 0 < srcArr.length) {\n            img.name = srcArr[srcArr.length - 1];\n        }\n        if (1 == contentArr.length) {\n            img.alt = img.src;\n        }\n        else {\n            img.alt = '';\n            for (let i = 1; i < contentArr.length; i++) {\n                if (i == contentArr.length - 1 && /\\d+/.test(contentArr[i]))\n                    break;\n                if (img.alt)\n                    img.alt += '|';\n                img.alt += contentArr[i];\n            }\n        }\n        img.convert = true;\n    }\n    return img;\n};\nconst matchImageTag = (text) => {\n    let match = text.match(IMG_TAG_LINK_SRC_REGEX); // 3-a-img-src: <a> <img ... src=''/> </a>\n    let link = false;\n    if (match) {\n        link = true;\n    }\n    else {\n        match = text.match(IMG_TAG_SRC_REGEX); // 3-img-src: <img ... src='' />\n    }\n    if (!match)\n        return null;\n    const img = new GalleryImgCto();\n    img.link = link;\n    img.match = match;\n    img.src = img.link ? match[2] : match[1];\n    if (img.src) {\n        if (img.src.startsWith('file://')) {\n            img.src = img.src.replace(/^file:\\/+/, 'app://local/');\n        }\n        else if (FULL_PATH_REGEX.test(img.src)) {\n            img.src = 'app://local/' + img.src;\n        }\n    }\n    const matchAlt = text.match(IMG_TAG_ALT_REGEX);\n    img.alt = matchAlt ? matchAlt[1] : '';\n    return img;\n};\nconst md5Img = (alt, src) => {\n    return Md5.init((alt ? alt : '') + '_' + src);\n};\n\nclass GalleryNavbarView {\n    constructor(mainContainerView, plugin) {\n        // whether to display gallery navbar\n        this.state = false;\n        this.galleryNavbarEl = null;\n        this.galleryListEl = null;\n        this.galleryIsMousingDown = false;\n        this.galleryMouseDownClientX = 0;\n        this.galleryTranslateX = 0;\n        this.CACHE_LIMIT = 10;\n        this.CLICK_TIME = 150;\n        this.renderGalleryImg = (imgFooterEl) => __awaiter(this, void 0, void 0, function* () {\n            var _a;\n            if (this.state)\n                return;\n            // get all of images on the current editor\n            const activeView = this.plugin.app.workspace.getActiveViewOfType(obsidian.MarkdownView);\n            if (!activeView\n                // || 'markdown' !== activeView.getViewType()\n                // modal-container: community plugin, flashcards (Space Repetition)\n                || 0 < document.getElementsByClassName('modal-container').length) {\n                if (this.galleryNavbarEl)\n                    this.galleryNavbarEl.hidden = true;\n                if (this.galleryListEl)\n                    this.galleryListEl.innerHTML = '';\n                return;\n            }\n            // <div class=\"gallery-navbar\"> <ul class=\"gallery-list\"> <li> <img src='' alt=''> </li> <li...> <ul> </div>\n            this.initGalleryNavbar(imgFooterEl);\n            const activeFile = activeView.file;\n            let galleryImg = this.getGalleryImgCache(activeFile);\n            // let hitCache: boolean = true;\n            if (!galleryImg) {\n                // hitCache = false;\n                galleryImg = parseActiveViewData(this.plugin, (_a = activeView.data) === null || _a === void 0 ? void 0 : _a.split('\\n'), activeFile);\n                this.setGalleryImgCache(galleryImg);\n            }\n            // console.log('oit-gallery-navbar: ' + (hitCache ? 'hit cache' : 'miss cache') + '!', galleryImg);\n            const imgList = galleryImg.galleryImgList;\n            const imgContextHash = this.getTargetImgContextHash(this.mainContainerView.getLastClickedImgEl(), activeView.containerEl, this.plugin.imgSelector);\n            let liEl, imgEl, liElActive;\n            let imgListEl = new Array();\n            let targetImageIdx = -1, targetRealIdx = 0;\n            let isAddGalleryActive = false;\n            let prevHash, nextHash;\n            const viewImageWithALink = this.plugin.settings.viewImageWithALink;\n            for (let i = 0, len = imgList.length; i < len; i++) {\n                const img = imgList[i];\n                if (!viewImageWithALink && img.link)\n                    continue;\n                // <li> <img class='gallery-img' src='' alt=''> </li>\n                this.galleryListEl.append(liEl = createEl('li'));\n                liEl.append(imgEl = createEl('img'));\n                imgEl.addClass('gallery-img');\n                imgEl.setAttr('alt', img.alt);\n                imgEl.setAttr('src', img.src);\n                imgListEl.push(imgEl);\n                this.mainContainerView.setImgViewDefaultBackground(imgEl);\n                // find the target image (which image is just clicked)\n                if (!imgContextHash || isAddGalleryActive)\n                    continue;\n                if (imgContextHash[1] == img.hash) {\n                    if (0 > targetImageIdx) {\n                        targetImageIdx = i;\n                        liElActive = liEl;\n                        targetRealIdx = imgListEl.length;\n                    }\n                    if (0 == i) {\n                        prevHash = null;\n                        nextHash = 1 < len ? imgList[i + 1].hash : null;\n                    }\n                    else if (len - 1 == i) {\n                        prevHash = imgList[i - 1].hash;\n                        nextHash = null;\n                    }\n                    else {\n                        prevHash = imgList[i - 1].hash;\n                        nextHash = imgList[i + 1].hash;\n                    }\n                    if (imgContextHash[0] == prevHash && imgContextHash[2] == nextHash) {\n                        isAddGalleryActive = true;\n                        liElActive = liEl;\n                    }\n                }\n            }\n            const realTotalNum = imgListEl.length;\n            this.mainContainerView.renderImgTitle(null, '[' + targetRealIdx + '/' + realTotalNum + ']');\n            imgListEl.forEach((value, index) => {\n                value.dataset.index = '[' + (index + 1) + '/' + realTotalNum + ']';\n            });\n            if (0 <= targetImageIdx) {\n                if (liElActive) {\n                    liElActive.addClass('gallery-active');\n                    if (this.settings.galleryImgBorderActive) {\n                        liElActive.addClass('img-border-active');\n                        liElActive.style.setProperty('border-color', this.settings.galleryImgBorderActiveColor);\n                    }\n                }\n                this.galleryTranslateX = (document.documentElement.clientWidth || document.body.clientWidth) / 2.5 - targetImageIdx * 52;\n                this.galleryListEl.style.transform = 'translateX(' + this.galleryTranslateX + 'px)';\n            }\n        });\n        this.initDefaultData = () => {\n            this.galleryMouseDownClientX = 0;\n            this.galleryTranslateX = 0;\n            if (this.galleryListEl) {\n                this.galleryListEl.style.transform = 'translateX(0px)';\n                // remove all childs (li) of gallery-list\n                this.galleryListEl.innerHTML = '';\n            }\n        };\n        this.initGalleryNavbar = (imgFooterEl) => {\n            // <div class=\"gallery-navbar\">\n            if (!this.galleryNavbarEl) {\n                // imgInfo.imgFooterEl.append(galleryNavbarEl = createDiv());\n                imgFooterEl.append(this.galleryNavbarEl = createDiv());\n                this.galleryNavbarEl.addClass('gallery-navbar');\n                this.galleryNavbarEl.onmouseover = () => {\n                    this.galleryNavbarEl.style.setProperty('background-color', this.settings.galleryNavbarHoverColor);\n                };\n                this.galleryNavbarEl.onmouseout = () => {\n                    this.galleryNavbarEl.style.setProperty('background-color', this.settings.galleryNavbarDefaultColor);\n                };\n                // add events\n                this.galleryNavbarEl.addEventListener('mousedown', this.mouseDownGallery);\n                this.galleryNavbarEl.addEventListener('mousemove', this.mouseMoveGallery);\n                this.galleryNavbarEl.addEventListener('mouseup', this.mouseUpGallery);\n                this.galleryNavbarEl.addEventListener('mouseleave', this.mouseLeaveGallery);\n            }\n            this.galleryNavbarEl.style.setProperty('background-color', this.settings.galleryNavbarDefaultColor);\n            if (!this.galleryListEl) {\n                this.galleryNavbarEl.append(this.galleryListEl = createEl('ul')); // <ul class=\"gallery-list\">\n                this.galleryListEl.addClass('gallery-list');\n            }\n            this.initDefaultData();\n            this.galleryNavbarEl.hidden = false; // display 'gallery-navbar'\n            this.state = true;\n        };\n        this.closeGalleryNavbar = () => {\n            if (!this.state)\n                return;\n            this.galleryNavbarEl.hidden = true; // hide 'gallery-navbar'\n            this.state = false;\n            this.initDefaultData();\n        };\n        this.remove = () => {\n            var _a, _b;\n            this.state = false;\n            (_a = this.galleryNavbarEl) === null || _a === void 0 ? void 0 : _a.remove();\n            (_b = this.galleryListEl) === null || _b === void 0 ? void 0 : _b.remove();\n            this.galleryNavbarEl = null;\n            this.galleryListEl = null;\n            this.galleryIsMousingDown = false;\n            this.galleryMouseDownClientX = 0;\n            this.galleryTranslateX = 0;\n            this.mouseDownTime = null;\n            GalleryNavbarView.GALLERY_IMG_CACHE = new Map();\n            this.initDefaultData();\n        };\n        this.getTargetImgContextHash = (targetImgEl, containerEl, imageSelector) => {\n            let imgEl;\n            let targetImgHash = null;\n            let targetIdx = -1;\n            const imgs = containerEl.querySelectorAll(imageSelector);\n            // console.log('IMAGE_SELECTOR>>', imageSelector, imgs);\n            const len = imgs.length;\n            for (let i = 0; i < len; i++) {\n                if ((imgEl = imgs[i])) {\n                    if ('1' == imgEl.getAttribute('data-oit-target')) {\n                        targetIdx = i;\n                        targetImgHash = md5Img(imgEl.alt, imgEl.src);\n                        break;\n                    }\n                }\n            }\n            if (0 > targetIdx)\n                targetImgHash = md5Img(targetImgEl.alt, targetImgEl.src);\n            let prevHash, nextHash;\n            if (0 == targetIdx) {\n                prevHash = null;\n                nextHash = 1 < len ? md5Img(imgs[1].alt, imgs[1].src) : null;\n            }\n            else if (len - 1 == targetIdx) {\n                prevHash = md5Img(imgs[targetIdx - 1].alt, imgs[targetIdx - 1].src);\n                nextHash = null;\n            }\n            else {\n                prevHash = md5Img(imgs[targetIdx - 1].alt, imgs[targetIdx - 1].src);\n                nextHash = md5Img(imgs[targetIdx + 1].alt, imgs[targetIdx + 1].src);\n            }\n            return [prevHash, targetImgHash, nextHash];\n        };\n        this.activateImage = (liEl, imgEL) => {\n            if (!liEl || 'LI' !== liEl.tagName)\n                return;\n            if (!imgEL) {\n                const imgELList = liEl.getElementsByTagName('img');\n                if (imgELList && 0 < imgELList.length) {\n                    imgEL = imgELList[0];\n                }\n            }\n            if (imgEL) {\n                const activeImg = this.mainContainerView.getActiveImg();\n                this.mainContainerView.initDefaultData(activeImg, imgEL.style);\n                this.mainContainerView.refreshImg(activeImg, imgEL.src, imgEL.alt || '', imgEL.dataset.index);\n            }\n            liEl.addClass('gallery-active');\n            if (this.settings.galleryImgBorderActive) {\n                liEl.addClass('img-border-active');\n                liEl.style.setProperty('border-color', this.settings.galleryImgBorderActiveColor);\n            }\n        };\n        this.deactivateImage = (liEl) => {\n            if (!liEl)\n                return;\n            liEl.removeClass('gallery-active');\n            if (liEl.hasClass('img-border-active')) {\n                liEl.removeClass('img-border-active');\n                liEl.style.removeProperty('border-color');\n            }\n        };\n        this.clickGalleryImg = (event) => {\n            const targetEl = event.target;\n            if (!targetEl || 'IMG' !== targetEl.tagName)\n                return;\n            if (this.galleryListEl) {\n                const liElList = this.galleryListEl.getElementsByClassName('gallery-active');\n                for (let i = 0, len = liElList.length; i < len; i++) {\n                    this.deactivateImage(liElList[i]);\n                }\n            }\n            this.activateImage(targetEl.parentElement, targetEl);\n        };\n        /**\n         * switch the image on the gallery navbar\n         * @param next true: switch to the next image; false: switch to the previous image\n         */\n        this.switchImage = (next) => {\n            if (!this.state || !this.galleryListEl)\n                return;\n            const liElList = this.galleryListEl.getElementsByTagName('li');\n            if (!liElList || 0 >= liElList.length)\n                return;\n            let liEl;\n            let toSwitchIdx = -1;\n            for (let i = 0, len = liElList.length; i < len; i++) {\n                if (!(liEl = liElList[i]))\n                    continue;\n                if (liEl.hasClass('gallery-active')) {\n                    toSwitchIdx = next ? (len <= (i + 1) ? 0 : i + 1) : (0 == i ? len - 1 : i - 1);\n                    this.deactivateImage(liEl);\n                    break;\n                }\n            }\n            if (0 >= toSwitchIdx) {\n                toSwitchIdx = 0;\n            }\n            this.activateImage(liElList[toSwitchIdx]);\n        };\n        this.mouseDownGallery = (event) => {\n            // console.log('mouse Down Gallery...');\n            event.preventDefault();\n            event.stopPropagation();\n            this.mouseDownTime = new Date().getTime();\n            this.galleryIsMousingDown = true;\n            this.galleryMouseDownClientX = event.clientX;\n        };\n        this.mouseMoveGallery = (event) => {\n            // console.log('mouse Move Gallery...');\n            event.preventDefault();\n            event.stopPropagation();\n            if (!this.galleryIsMousingDown)\n                return;\n            let moveDistance = event.clientX - this.galleryMouseDownClientX;\n            if (4 > Math.abs(moveDistance))\n                return;\n            this.galleryMouseDownClientX = event.clientX;\n            this.galleryTranslateX += moveDistance;\n            const windowWidth = document.documentElement.clientWidth || document.body.clientWidth;\n            const imgLiWidth = (this.galleryListEl.childElementCount - 1) * 52;\n            // console.log('move...', 'windowWidth=' + windowWidth, 'galleryTranslateX=' + galleryTranslateX, 'li count=' + imgInfo.galleryList.childElementCount);\n            if (this.galleryTranslateX + 50 >= windowWidth)\n                this.galleryTranslateX = windowWidth - 50;\n            if (0 > this.galleryTranslateX + imgLiWidth)\n                this.galleryTranslateX = -imgLiWidth;\n            this.galleryListEl.style.transform = 'translateX(' + this.galleryTranslateX + 'px)';\n        };\n        this.mouseUpGallery = (event) => {\n            // console.log('mouse Up Gallery>>>', event.target);\n            event.preventDefault();\n            event.stopPropagation();\n            this.galleryIsMousingDown = false;\n            if (!this.mouseDownTime || this.CLICK_TIME > new Date().getTime() - this.mouseDownTime) {\n                this.clickGalleryImg(event);\n            }\n            this.mouseDownTime = null;\n        };\n        this.mouseLeaveGallery = (event) => {\n            // console.log('mouse Leave Gallery>>>', event.target);\n            event.preventDefault();\n            event.stopPropagation();\n            this.galleryIsMousingDown = false;\n            this.mouseDownTime = null;\n        };\n        this.getGalleryImgCache = (file) => {\n            if (!file)\n                return null;\n            const md5File = this.md5File(file.path, file.stat.ctime);\n            if (!md5File)\n                return null;\n            const galleryImgCache = GalleryNavbarView.GALLERY_IMG_CACHE.get(md5File);\n            if (galleryImgCache && file.stat.mtime !== galleryImgCache.file.mtime) {\n                GalleryNavbarView.GALLERY_IMG_CACHE.delete(md5File);\n                return null;\n            }\n            return galleryImgCache;\n        };\n        this.setGalleryImgCache = (galleryImg) => {\n            const md5File = this.md5File(galleryImg.file.path, galleryImg.file.ctime);\n            if (!md5File)\n                return;\n            this.trimGalleryImgCache();\n            GalleryNavbarView.GALLERY_IMG_CACHE.set(md5File, galleryImg);\n        };\n        this.trimGalleryImgCache = () => {\n            if (GalleryNavbarView.GALLERY_IMG_CACHE.size < this.CACHE_LIMIT)\n                return;\n            let earliestMtime, earliestKey;\n            GalleryNavbarView.GALLERY_IMG_CACHE.forEach((value, key) => {\n                if (!earliestMtime) {\n                    earliestMtime = value.mtime;\n                    earliestKey = key;\n                }\n                else {\n                    if (earliestMtime > value.mtime) {\n                        earliestMtime = value.mtime;\n                        earliestKey = key;\n                    }\n                }\n            });\n            if (earliestKey) {\n                GalleryNavbarView.GALLERY_IMG_CACHE.delete(earliestKey);\n            }\n        };\n        this.md5File = (path, ctime) => {\n            if (!path || !ctime)\n                return;\n            return Md5.init(path + '_' + ctime);\n        };\n        this.mainContainerView = mainContainerView;\n        this.plugin = plugin;\n        this.settings = plugin.settings;\n    }\n}\nGalleryNavbarView.GALLERY_IMG_CACHE = new Map();\n\nclass MainContainerView extends ContainerView {\n    constructor(plugin, containerType) {\n        super(plugin, containerType, 1);\n        //region ================== Container View ========================\n        this.initContainerViewDom = (containerEl) => {\n            let imgCto;\n            if (!this.imgInfoCto.oitContainerViewEl) {\n                // init at first time\n                // create: <div class=\"oit-main-container-view\">\n                containerEl.appendChild(this.imgInfoCto.oitContainerViewEl = createDiv('oit-main-container-view'));\n                // <div class=\"oit-main-container-view\"> <div class=\"img-container\"/> </div>\n                this.imgInfoCto.oitContainerViewEl.append(this.imgInfoCto.imgContainerEl = createDiv('img-container'));\n                // <div class=\"img-container\"> <img class=\"img-view\" src=\"\" alt=\"\"> </div>\n                this.updateImgViewElAndList(this.pinMaximum);\n                // <div class=\"img-tip\"></div>\n                this.imgInfoCto.oitContainerViewEl.appendChild(this.imgInfoCto.imgTipEl = createDiv()); // img-tip\n                this.imgInfoCto.imgTipEl.addClass('img-tip');\n                this.imgInfoCto.imgTipEl.hidden = true; // hide 'img-tip'\n                // <div class=\"img-footer\"> ... <div>\n                this.imgInfoCto.oitContainerViewEl.appendChild(this.imgInfoCto.imgFooterEl = createDiv()); // img-footer\n                this.imgInfoCto.imgFooterEl.addClass('img-footer');\n                // <div class=\"img-title\"></div>\n                this.imgInfoCto.imgFooterEl.appendChild(this.imgInfoCto.imgTitleEl = createDiv('img-title')); // img-title\n                this.imgInfoCto.imgTitleEl.appendChild(this.imgInfoCto.imgTitleNameEl = createSpan('img-title-name'));\n                this.imgInfoCto.imgTitleEl.appendChild(this.imgInfoCto.imgTitleIndexEl = createSpan('img-title-index'));\n                // <ul class=\"img-toolbar\">\n                const imgToolbarUlEL = createEl('ul'); // img-toolbar\n                imgToolbarUlEL.addClass('img-toolbar');\n                this.imgInfoCto.imgFooterEl.appendChild(imgToolbarUlEL);\n                let toolbarLi;\n                for (const toolbar of TOOLBAR_CONF) {\n                    if (!toolbar.enableToolbarIcon)\n                        continue;\n                    imgToolbarUlEL.appendChild(toolbarLi = createEl('li'));\n                    toolbarLi.addClass(toolbar.class);\n                    toolbarLi.setAttribute('alt', toolbar.title);\n                    // @ts-ignore\n                    toolbarLi.setAttribute('title', t(toolbar.title));\n                }\n                // add event: for img-toolbar ul\n                imgToolbarUlEL.addEventListener('click', this.clickImgToolbar);\n                // <div class=\"img-player\"> <img class='img-fullscreen' src=''> </div>\n                this.imgInfoCto.oitContainerViewEl.appendChild(this.imgInfoCto.imgPlayerEl = createDiv('img-player')); // img-player for full screen mode\n                this.imgInfoCto.imgPlayerEl.appendChild(this.imgInfoCto.imgPlayerImgViewEl = createEl('img'));\n                this.imgInfoCto.imgPlayerImgViewEl.addClass('img-fullscreen');\n            }\n            imgCto = this.imgInfoCto.imgList[0];\n            this.imgGlobalStatus.activeImg = imgCto;\n            return imgCto;\n        };\n        this.openOitContainerView = (matchedImg) => {\n            if (!this.imgInfoCto.oitContainerViewEl) {\n                console.error('obsidian-image-toolkit: oit-*-container-view has not been initialized!');\n                return;\n            }\n            matchedImg.popup = true;\n            this.imgGlobalStatus.popup = true;\n            // display 'oit-main-container-view'\n            this.imgInfoCto.oitContainerViewEl.style.setProperty('display', 'block');\n        };\n        this.closeContainerView = (event, activeImg) => {\n            if (event) {\n                const targetClassName = event.target.className;\n                if ('img-container' != targetClassName && 'oit-main-container-view' != targetClassName)\n                    return;\n            }\n            if (!activeImg && !(activeImg = this.imgGlobalStatus.activeImg))\n                return;\n            if (this.imgInfoCto.oitContainerViewEl) {\n                this.imgInfoCto.oitContainerViewEl.style.setProperty('display', 'none'); // hide 'oit-main-container-view'\n                this.renderImgTitle('', '');\n                this.renderImgView(activeImg.imgViewEl, '', '');\n                // remove events\n                this.imgGlobalStatus.popup = false;\n                activeImg.popup = false;\n                activeImg.mtime = 0;\n                this.addOrRemoveEvents(activeImg, false);\n            }\n            if (this.plugin.settings.galleryNavbarToggle && this.galleryNavbarView) {\n                this.galleryNavbarView.closeGalleryNavbar();\n            }\n        };\n        //endregion\n        //region ================== Gallery Navbar ========================\n        this.renderGalleryNavbar = () => {\n            // <div class=\"gallery-navbar\"> <ul class=\"gallery-list\"> <li> <img src='' alt=''> </li> <li...> <ul> </div>\n            if (!this.plugin.settings.galleryNavbarToggle)\n                return;\n            if (!this.galleryNavbarView) {\n                this.galleryNavbarView = new GalleryNavbarView(this, this.plugin);\n            }\n            this.galleryNavbarView.renderGalleryImg(this.imgInfoCto.imgFooterEl);\n        };\n        this.removeGalleryNavbar = () => {\n            if (!this.galleryNavbarView)\n                return;\n            this.galleryNavbarView.remove();\n            this.galleryNavbarView = null;\n        };\n        //endregion\n        this.renderImgTitle = (name, index) => {\n            var _a, _b;\n            if (undefined !== name && null !== name)\n                (_a = this.imgInfoCto.imgTitleNameEl) === null || _a === void 0 ? void 0 : _a.setText(name);\n            if (undefined !== index && null !== index)\n                (_b = this.imgInfoCto.imgTitleIndexEl) === null || _b === void 0 ? void 0 : _b.setText(' ' + index);\n        };\n        this.switchImageOnGalleryNavBar = (event, next) => {\n            var _a;\n            if (!this.checkHotkeySettings(event, this.plugin.settings.switchTheImageHotkey))\n                return;\n            (_a = this.galleryNavbarView) === null || _a === void 0 ? void 0 : _a.switchImage(next);\n        };\n    }\n    setActiveImgForMouseEvent(imgCto) {\n    }\n}\n\nclass MenuView {\n    constructor(pinContainerView) {\n        this.init = () => {\n            if (this.menu)\n                return;\n            this.menu = new obsidian.Menu();\n            for (const itemConf of TOOLBAR_CONF) {\n                if (!itemConf.enableMenu)\n                    continue;\n                if (SEPARATOR_SYMBOL === itemConf.title) {\n                    this.menu.addSeparator();\n                    continue;\n                }\n                this.menu.addItem(item => {\n                    if (itemConf.icon)\n                        item.setIcon(itemConf.icon);\n                    // @ts-ignore\n                    item.setTitle(t(itemConf.title))\n                        .onClick(() => {\n                        this.pinContainerView.clickImgToolbar(null, itemConf.class, MenuView.activeImg);\n                    });\n                });\n            }\n        };\n        this.show = (event, activeImg) => {\n            MenuView.activeImg = activeImg;\n            this.init();\n            this.menu.showAtPosition({ x: event.clientX, y: event.clientY });\n        };\n        this.pinContainerView = pinContainerView;\n    }\n}\n\n/**\n * PinContainerView: Pin an image on the top\n * @Support: move an image by mouse; close an image by Esc\n * @Nonsupport: move an image by keyboard; display gallery navbar\n */\nclass PinContainerView extends ContainerView {\n    constructor(plugin, containerType) {\n        super(plugin, containerType, plugin.settings.pinMaximum);\n        //region ================== Container View ========================\n        this.initContainerViewDom = (containerEl) => {\n            /*\n            <div class=\"oit-pin-container-view\">\n              <div class=\"img-container\">\n                <img class=\"img-view\" data-index='0' src=\"\" alt=\"\">\n                <img class=\"img-view\" data-index='1' src=\"\" alt=\"\">\n                ...\n              </div>\n            </div>\n             */\n            if (!this.imgInfoCto.oitContainerViewEl) { // init at first time\n                // create: <div class=\"oit-pin-container-view\">\n                containerEl.appendChild(this.imgInfoCto.oitContainerViewEl = createDiv('oit-pin-container-view'));\n                // <div class=\"oit-pin-container-view\"> <div class=\"img-container\"/> </div>\n                this.imgInfoCto.oitContainerViewEl.append(this.imgInfoCto.imgContainerEl = createDiv('img-container'));\n                // <div class=\"img-tip\"></div>\n                this.imgInfoCto.oitContainerViewEl.appendChild(this.imgInfoCto.imgTipEl = createDiv('img-tip')); // img-tip\n                this.imgInfoCto.imgTipEl.hidden = true; // hide 'img-tip'\n                // <div class=\"img-player\"> <img class='img-fullscreen' src=''> </div>\n                this.imgInfoCto.oitContainerViewEl.appendChild(this.imgInfoCto.imgPlayerEl = createDiv('img-player')); // img-player for full screen mode\n                this.imgInfoCto.imgPlayerEl.appendChild(this.imgInfoCto.imgPlayerImgViewEl = createEl('img'));\n                this.imgInfoCto.imgPlayerImgViewEl.addClass('img-fullscreen');\n            }\n            // <div class=\"img-container\"> <img class=\"img-view\" src=\"\" alt=\"\"> </div>\n            this.updateImgViewElAndList(this.pinMaximum);\n            return this.getMatchedImg();\n        };\n        this.openOitContainerView = (matchedImg) => {\n            if (!this.imgInfoCto.oitContainerViewEl) {\n                console.error('obsidian-image-toolkit: oit-*-container-view has not been initialized!');\n                return;\n            }\n            matchedImg.popup = true;\n            if (!this.imgGlobalStatus.popup) {\n                this.imgGlobalStatus.popup = true;\n                this.imgGlobalStatus.activeImgZIndex = 0;\n                this.imgInfoCto.imgList.forEach(value => {\n                    value.zIndex = 0;\n                });\n            }\n            else {\n                matchedImg.zIndex = (++this.imgGlobalStatus.activeImgZIndex);\n            }\n            matchedImg.imgViewEl.style.setProperty('z-index', matchedImg.zIndex + '');\n            // display 'oit-pin-container-view'\n            this.imgInfoCto.oitContainerViewEl.style.setProperty('display', 'block');\n        };\n        /**\n         * hide container view\n         * @param event not null: click event; null: keyboard event (Esc)\n         * @param activeImg\n         */\n        this.closeContainerView = (event, activeImg) => {\n            if (event && !activeImg) {\n                // PinContainerView doesn't need click event to hide container for now\n                return;\n            }\n            if (!this.imgInfoCto.oitContainerViewEl)\n                return;\n            if (!activeImg && !(activeImg = this.imgGlobalStatus.activeImg))\n                return;\n            // console.log('closeContainerView', event, activeImg)\n            this.renderImgView(activeImg.imgViewEl, '', '');\n            activeImg.popup = false;\n            activeImg.mtime = 0;\n            let globalPopupFlag = false;\n            for (const imgCto of this.imgInfoCto.imgList) {\n                if (imgCto.popup) {\n                    globalPopupFlag = true;\n                    break;\n                }\n            }\n            if (!globalPopupFlag) {\n                this.imgInfoCto.oitContainerViewEl.style.setProperty('display', 'none'); // hide 'oit-pin-container-view'\n                this.imgGlobalStatus.activeImgZIndex = 0;\n                this.imgInfoCto.imgList.forEach(value => {\n                    value.zIndex = 0;\n                });\n            }\n            this.imgGlobalStatus.popup = globalPopupFlag;\n            this.addOrRemoveEvents(activeImg, false);\n        };\n        //endregion\n        this.setActiveImgZIndex = (activeImg) => {\n            var _a;\n            let isUpdate = false;\n            for (const imgCto of this.imgInfoCto.imgList) {\n                if (activeImg.index !== imgCto.index && activeImg.zIndex <= imgCto.zIndex) {\n                    isUpdate = true;\n                    break;\n                }\n            }\n            if (isUpdate) {\n                activeImg.zIndex = (++this.imgGlobalStatus.activeImgZIndex);\n                (_a = activeImg.imgViewEl) === null || _a === void 0 ? void 0 : _a.style.setProperty(\"z-index\", activeImg.zIndex + '');\n            }\n        };\n        this.setMenuView(new MenuView(this));\n    }\n    setActiveImgForMouseEvent(imgCto) {\n        this.imgGlobalStatus.activeImg = imgCto;\n    }\n}\n\nconst EXTERNAL_MEDIA_LINK_PATTERN = /\\!\\[(?<anchor>.*?)\\]\\((?<link>.+?)\\)/g;\nconst NOTICE_TIMEOUT = 10 * 1000;\nconst TIMEOUT_LIKE_INFINITY = 24 * 60 * 60 * 1000;\nconst FORBIDDEN_SYMBOLS_FILENAME_PATTERN = /\\s+/g;\nconst IMAGE_EXTS_LOWER = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"svg\", \"bmp\", \"tiff\", \"webp\"];\nconst OB_PASTED_IMAGE_PREFIX = 'Pasted image ';\n\nvar lib = {};\n\nvar readable = {exports: {}};\n\nvar stream$2 = {exports: {}};\n\nvar hasRequiredStream;\n\nfunction requireStream () {\n\tif (hasRequiredStream) return stream$2.exports;\n\thasRequiredStream = 1;\n\t(function (module) {\n\t\tmodule.exports = require$$0__default[\"default\"];\n} (stream$2));\n\treturn stream$2.exports;\n}\n\nvar buffer_list;\nvar hasRequiredBuffer_list;\n\nfunction requireBuffer_list () {\n\tif (hasRequiredBuffer_list) return buffer_list;\n\thasRequiredBuffer_list = 1;\n\n\tfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\tfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\tfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\tfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\tfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\n\tfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\tvar _require = require$$0__default$1[\"default\"],\n\t  Buffer = _require.Buffer;\n\tvar _require2 = require$$1__default[\"default\"],\n\t  inspect = _require2.inspect;\n\tvar custom = inspect && inspect.custom || 'inspect';\n\tfunction copyBuffer(src, target, offset) {\n\t  Buffer.prototype.copy.call(src, target, offset);\n\t}\n\tbuffer_list = /*#__PURE__*/function () {\n\t  function BufferList() {\n\t    _classCallCheck(this, BufferList);\n\t    this.head = null;\n\t    this.tail = null;\n\t    this.length = 0;\n\t  }\n\t  _createClass(BufferList, [{\n\t    key: \"push\",\n\t    value: function push(v) {\n\t      var entry = {\n\t        data: v,\n\t        next: null\n\t      };\n\t      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n\t      this.tail = entry;\n\t      ++this.length;\n\t    }\n\t  }, {\n\t    key: \"unshift\",\n\t    value: function unshift(v) {\n\t      var entry = {\n\t        data: v,\n\t        next: this.head\n\t      };\n\t      if (this.length === 0) this.tail = entry;\n\t      this.head = entry;\n\t      ++this.length;\n\t    }\n\t  }, {\n\t    key: \"shift\",\n\t    value: function shift() {\n\t      if (this.length === 0) return;\n\t      var ret = this.head.data;\n\t      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n\t      --this.length;\n\t      return ret;\n\t    }\n\t  }, {\n\t    key: \"clear\",\n\t    value: function clear() {\n\t      this.head = this.tail = null;\n\t      this.length = 0;\n\t    }\n\t  }, {\n\t    key: \"join\",\n\t    value: function join(s) {\n\t      if (this.length === 0) return '';\n\t      var p = this.head;\n\t      var ret = '' + p.data;\n\t      while (p = p.next) ret += s + p.data;\n\t      return ret;\n\t    }\n\t  }, {\n\t    key: \"concat\",\n\t    value: function concat(n) {\n\t      if (this.length === 0) return Buffer.alloc(0);\n\t      var ret = Buffer.allocUnsafe(n >>> 0);\n\t      var p = this.head;\n\t      var i = 0;\n\t      while (p) {\n\t        copyBuffer(p.data, ret, i);\n\t        i += p.data.length;\n\t        p = p.next;\n\t      }\n\t      return ret;\n\t    }\n\n\t    // Consumes a specified amount of bytes or characters from the buffered data.\n\t  }, {\n\t    key: \"consume\",\n\t    value: function consume(n, hasStrings) {\n\t      var ret;\n\t      if (n < this.head.data.length) {\n\t        // `slice` is the same for buffers and strings.\n\t        ret = this.head.data.slice(0, n);\n\t        this.head.data = this.head.data.slice(n);\n\t      } else if (n === this.head.data.length) {\n\t        // First chunk is a perfect match.\n\t        ret = this.shift();\n\t      } else {\n\t        // Result spans more than one buffer.\n\t        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n\t      }\n\t      return ret;\n\t    }\n\t  }, {\n\t    key: \"first\",\n\t    value: function first() {\n\t      return this.head.data;\n\t    }\n\n\t    // Consumes a specified amount of characters from the buffered data.\n\t  }, {\n\t    key: \"_getString\",\n\t    value: function _getString(n) {\n\t      var p = this.head;\n\t      var c = 1;\n\t      var ret = p.data;\n\t      n -= ret.length;\n\t      while (p = p.next) {\n\t        var str = p.data;\n\t        var nb = n > str.length ? str.length : n;\n\t        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n\t        n -= nb;\n\t        if (n === 0) {\n\t          if (nb === str.length) {\n\t            ++c;\n\t            if (p.next) this.head = p.next;else this.head = this.tail = null;\n\t          } else {\n\t            this.head = p;\n\t            p.data = str.slice(nb);\n\t          }\n\t          break;\n\t        }\n\t        ++c;\n\t      }\n\t      this.length -= c;\n\t      return ret;\n\t    }\n\n\t    // Consumes a specified amount of bytes from the buffered data.\n\t  }, {\n\t    key: \"_getBuffer\",\n\t    value: function _getBuffer(n) {\n\t      var ret = Buffer.allocUnsafe(n);\n\t      var p = this.head;\n\t      var c = 1;\n\t      p.data.copy(ret);\n\t      n -= p.data.length;\n\t      while (p = p.next) {\n\t        var buf = p.data;\n\t        var nb = n > buf.length ? buf.length : n;\n\t        buf.copy(ret, ret.length - n, 0, nb);\n\t        n -= nb;\n\t        if (n === 0) {\n\t          if (nb === buf.length) {\n\t            ++c;\n\t            if (p.next) this.head = p.next;else this.head = this.tail = null;\n\t          } else {\n\t            this.head = p;\n\t            p.data = buf.slice(nb);\n\t          }\n\t          break;\n\t        }\n\t        ++c;\n\t      }\n\t      this.length -= c;\n\t      return ret;\n\t    }\n\n\t    // Make sure the linked list only shows the minimal necessary information.\n\t  }, {\n\t    key: custom,\n\t    value: function value(_, options) {\n\t      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n\t        // Only inspect one level.\n\t        depth: 0,\n\t        // It should not recurse.\n\t        customInspect: false\n\t      }));\n\t    }\n\t  }]);\n\t  return BufferList;\n\t}();\n\treturn buffer_list;\n}\n\nvar destroy_1;\nvar hasRequiredDestroy;\n\nfunction requireDestroy () {\n\tif (hasRequiredDestroy) return destroy_1;\n\thasRequiredDestroy = 1;\n\n\t// undocumented cb() API, needed for core, not for public API\n\tfunction destroy(err, cb) {\n\t  var _this = this;\n\t  var readableDestroyed = this._readableState && this._readableState.destroyed;\n\t  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\t  if (readableDestroyed || writableDestroyed) {\n\t    if (cb) {\n\t      cb(err);\n\t    } else if (err) {\n\t      if (!this._writableState) {\n\t        process.nextTick(emitErrorNT, this, err);\n\t      } else if (!this._writableState.errorEmitted) {\n\t        this._writableState.errorEmitted = true;\n\t        process.nextTick(emitErrorNT, this, err);\n\t      }\n\t    }\n\t    return this;\n\t  }\n\n\t  // we set destroyed to true before firing error callbacks in order\n\t  // to make it re-entrance safe in case destroy() is called within callbacks\n\n\t  if (this._readableState) {\n\t    this._readableState.destroyed = true;\n\t  }\n\n\t  // if this is a duplex stream mark the writable part as destroyed as well\n\t  if (this._writableState) {\n\t    this._writableState.destroyed = true;\n\t  }\n\t  this._destroy(err || null, function (err) {\n\t    if (!cb && err) {\n\t      if (!_this._writableState) {\n\t        process.nextTick(emitErrorAndCloseNT, _this, err);\n\t      } else if (!_this._writableState.errorEmitted) {\n\t        _this._writableState.errorEmitted = true;\n\t        process.nextTick(emitErrorAndCloseNT, _this, err);\n\t      } else {\n\t        process.nextTick(emitCloseNT, _this);\n\t      }\n\t    } else if (cb) {\n\t      process.nextTick(emitCloseNT, _this);\n\t      cb(err);\n\t    } else {\n\t      process.nextTick(emitCloseNT, _this);\n\t    }\n\t  });\n\t  return this;\n\t}\n\tfunction emitErrorAndCloseNT(self, err) {\n\t  emitErrorNT(self, err);\n\t  emitCloseNT(self);\n\t}\n\tfunction emitCloseNT(self) {\n\t  if (self._writableState && !self._writableState.emitClose) return;\n\t  if (self._readableState && !self._readableState.emitClose) return;\n\t  self.emit('close');\n\t}\n\tfunction undestroy() {\n\t  if (this._readableState) {\n\t    this._readableState.destroyed = false;\n\t    this._readableState.reading = false;\n\t    this._readableState.ended = false;\n\t    this._readableState.endEmitted = false;\n\t  }\n\t  if (this._writableState) {\n\t    this._writableState.destroyed = false;\n\t    this._writableState.ended = false;\n\t    this._writableState.ending = false;\n\t    this._writableState.finalCalled = false;\n\t    this._writableState.prefinished = false;\n\t    this._writableState.finished = false;\n\t    this._writableState.errorEmitted = false;\n\t  }\n\t}\n\tfunction emitErrorNT(self, err) {\n\t  self.emit('error', err);\n\t}\n\tfunction errorOrDestroy(stream, err) {\n\t  // We have tests that rely on errors being emitted\n\t  // in the same tick, so changing this is semver major.\n\t  // For now when you opt-in to autoDestroy we allow\n\t  // the error to be emitted nextTick. In a future\n\t  // semver major update we should change the default to this.\n\n\t  var rState = stream._readableState;\n\t  var wState = stream._writableState;\n\t  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n\t}\n\tdestroy_1 = {\n\t  destroy: destroy,\n\t  undestroy: undestroy,\n\t  errorOrDestroy: errorOrDestroy\n\t};\n\treturn destroy_1;\n}\n\nvar errors$1 = {};\n\nvar hasRequiredErrors;\n\nfunction requireErrors () {\n\tif (hasRequiredErrors) return errors$1;\n\thasRequiredErrors = 1;\n\n\tconst codes = {};\n\n\tfunction createErrorType(code, message, Base) {\n\t  if (!Base) {\n\t    Base = Error;\n\t  }\n\n\t  function getMessage (arg1, arg2, arg3) {\n\t    if (typeof message === 'string') {\n\t      return message\n\t    } else {\n\t      return message(arg1, arg2, arg3)\n\t    }\n\t  }\n\n\t  class NodeError extends Base {\n\t    constructor (arg1, arg2, arg3) {\n\t      super(getMessage(arg1, arg2, arg3));\n\t    }\n\t  }\n\n\t  NodeError.prototype.name = Base.name;\n\t  NodeError.prototype.code = code;\n\n\t  codes[code] = NodeError;\n\t}\n\n\t// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\tfunction oneOf(expected, thing) {\n\t  if (Array.isArray(expected)) {\n\t    const len = expected.length;\n\t    expected = expected.map((i) => String(i));\n\t    if (len > 2) {\n\t      return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +\n\t             expected[len - 1];\n\t    } else if (len === 2) {\n\t      return `one of ${thing} ${expected[0]} or ${expected[1]}`;\n\t    } else {\n\t      return `of ${thing} ${expected[0]}`;\n\t    }\n\t  } else {\n\t    return `of ${thing} ${String(expected)}`;\n\t  }\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\tfunction startsWith(str, search, pos) {\n\t\treturn str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\tfunction endsWith(str, search, this_len) {\n\t\tif (this_len === undefined || this_len > str.length) {\n\t\t\tthis_len = str.length;\n\t\t}\n\t\treturn str.substring(this_len - search.length, this_len) === search;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\tfunction includes(str, search, start) {\n\t  if (typeof start !== 'number') {\n\t    start = 0;\n\t  }\n\n\t  if (start + search.length > str.length) {\n\t    return false;\n\t  } else {\n\t    return str.indexOf(search, start) !== -1;\n\t  }\n\t}\n\n\tcreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n\t  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"'\n\t}, TypeError);\n\tcreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n\t  // determiner: 'must be' or 'must not be'\n\t  let determiner;\n\t  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n\t    determiner = 'must not be';\n\t    expected = expected.replace(/^not /, '');\n\t  } else {\n\t    determiner = 'must be';\n\t  }\n\n\t  let msg;\n\t  if (endsWith(name, ' argument')) {\n\t    // For cases like 'first argument'\n\t    msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;\n\t  } else {\n\t    const type = includes(name, '.') ? 'property' : 'argument';\n\t    msg = `The \"${name}\" ${type} ${determiner} ${oneOf(expected, 'type')}`;\n\t  }\n\n\t  msg += `. Received type ${typeof actual}`;\n\t  return msg;\n\t}, TypeError);\n\tcreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\n\tcreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n\t  return 'The ' + name + ' method is not implemented'\n\t});\n\tcreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\n\tcreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n\t  return 'Cannot call ' + name + ' after a stream was destroyed';\n\t});\n\tcreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\n\tcreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\n\tcreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\n\tcreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\n\tcreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n\t  return 'Unknown encoding: ' + arg\n\t}, TypeError);\n\tcreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\n\n\terrors$1.codes = codes;\n\treturn errors$1;\n}\n\nvar state;\nvar hasRequiredState;\n\nfunction requireState () {\n\tif (hasRequiredState) return state;\n\thasRequiredState = 1;\n\n\tvar ERR_INVALID_OPT_VALUE = requireErrors().codes.ERR_INVALID_OPT_VALUE;\n\tfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n\t  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n\t}\n\tfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n\t  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\t  if (hwm != null) {\n\t    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n\t      var name = isDuplex ? duplexKey : 'highWaterMark';\n\t      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n\t    }\n\t    return Math.floor(hwm);\n\t  }\n\n\t  // Default value\n\t  return state.objectMode ? 16 : 16 * 1024;\n\t}\n\tstate = {\n\t  getHighWaterMark: getHighWaterMark\n\t};\n\treturn state;\n}\n\nvar inherits = {exports: {}};\n\nvar inherits_browser = {exports: {}};\n\nvar hasRequiredInherits_browser;\n\nfunction requireInherits_browser () {\n\tif (hasRequiredInherits_browser) return inherits_browser.exports;\n\thasRequiredInherits_browser = 1;\n\tif (typeof Object.create === 'function') {\n\t  // implementation from standard node.js 'util' module\n\t  inherits_browser.exports = function inherits(ctor, superCtor) {\n\t    if (superCtor) {\n\t      ctor.super_ = superCtor;\n\t      ctor.prototype = Object.create(superCtor.prototype, {\n\t        constructor: {\n\t          value: ctor,\n\t          enumerable: false,\n\t          writable: true,\n\t          configurable: true\n\t        }\n\t      });\n\t    }\n\t  };\n\t} else {\n\t  // old school shim for old browsers\n\t  inherits_browser.exports = function inherits(ctor, superCtor) {\n\t    if (superCtor) {\n\t      ctor.super_ = superCtor;\n\t      var TempCtor = function () {};\n\t      TempCtor.prototype = superCtor.prototype;\n\t      ctor.prototype = new TempCtor();\n\t      ctor.prototype.constructor = ctor;\n\t    }\n\t  };\n\t}\n\treturn inherits_browser.exports;\n}\n\nvar hasRequiredInherits;\n\nfunction requireInherits () {\n\tif (hasRequiredInherits) return inherits.exports;\n\thasRequiredInherits = 1;\n\t(function (module) {\n\t\ttry {\n\t\t  var util = require('util');\n\t\t  /* istanbul ignore next */\n\t\t  if (typeof util.inherits !== 'function') throw '';\n\t\t  module.exports = util.inherits;\n\t\t} catch (e) {\n\t\t  /* istanbul ignore next */\n\t\t  module.exports = requireInherits_browser();\n\t\t}\n} (inherits));\n\treturn inherits.exports;\n}\n\nvar node;\nvar hasRequiredNode;\n\nfunction requireNode () {\n\tif (hasRequiredNode) return node;\n\thasRequiredNode = 1;\n\t/**\n\t * For Node.js, simply re-export the core `util.deprecate` function.\n\t */\n\n\tnode = require$$1__default[\"default\"].deprecate;\n\treturn node;\n}\n\nvar _stream_writable;\nvar hasRequired_stream_writable;\n\nfunction require_stream_writable () {\n\tif (hasRequired_stream_writable) return _stream_writable;\n\thasRequired_stream_writable = 1;\n\n\t_stream_writable = Writable;\n\n\t// It seems a linked list but it is not\n\t// there will be only 2 of these for each stream\n\tfunction CorkedRequest(state) {\n\t  var _this = this;\n\t  this.next = null;\n\t  this.entry = null;\n\t  this.finish = function () {\n\t    onCorkedFinish(_this, state);\n\t  };\n\t}\n\t/* </replacement> */\n\n\t/*<replacement>*/\n\tvar Duplex;\n\t/*</replacement>*/\n\n\tWritable.WritableState = WritableState;\n\n\t/*<replacement>*/\n\tvar internalUtil = {\n\t  deprecate: requireNode()\n\t};\n\t/*</replacement>*/\n\n\t/*<replacement>*/\n\tvar Stream = requireStream();\n\t/*</replacement>*/\n\n\tvar Buffer = require$$0__default$1[\"default\"].Buffer;\n\tvar OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\n\tfunction _uint8ArrayToBuffer(chunk) {\n\t  return Buffer.from(chunk);\n\t}\n\tfunction _isUint8Array(obj) {\n\t  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n\t}\n\tvar destroyImpl = requireDestroy();\n\tvar _require = requireState(),\n\t  getHighWaterMark = _require.getHighWaterMark;\n\tvar _require$codes = requireErrors().codes,\n\t  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n\t  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n\t  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n\t  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n\t  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n\t  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n\t  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n\t  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\tvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\trequireInherits()(Writable, Stream);\n\tfunction nop() {}\n\tfunction WritableState(options, stream, isDuplex) {\n\t  Duplex = Duplex || require_stream_duplex();\n\t  options = options || {};\n\n\t  // Duplex streams are both readable and writable, but share\n\t  // the same options object.\n\t  // However, some cases require setting options to different\n\t  // values for the readable and the writable sides of the duplex stream,\n\t  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\t  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n\t  // object stream flag to indicate whether or not this stream\n\t  // contains buffers or objects.\n\t  this.objectMode = !!options.objectMode;\n\t  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n\t  // the point at which write() starts returning false\n\t  // Note: 0 is a valid value, means that we always return false if\n\t  // the entire buffer is not flushed immediately on write()\n\t  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n\t  // if _final has been called\n\t  this.finalCalled = false;\n\n\t  // drain event flag.\n\t  this.needDrain = false;\n\t  // at the start of calling end()\n\t  this.ending = false;\n\t  // when end() has been called, and returned\n\t  this.ended = false;\n\t  // when 'finish' is emitted\n\t  this.finished = false;\n\n\t  // has it been destroyed\n\t  this.destroyed = false;\n\n\t  // should we decode strings into buffers before passing to _write?\n\t  // this is here so that some node-core streams can optimize string\n\t  // handling at a lower level.\n\t  var noDecode = options.decodeStrings === false;\n\t  this.decodeStrings = !noDecode;\n\n\t  // Crypto is kind of old and crusty.  Historically, its default string\n\t  // encoding is 'binary' so we have to make this configurable.\n\t  // Everything else in the universe uses 'utf8', though.\n\t  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n\t  // not an actual buffer we keep track of, but a measurement\n\t  // of how much we're waiting to get pushed to some underlying\n\t  // socket or file.\n\t  this.length = 0;\n\n\t  // a flag to see when we're in the middle of a write.\n\t  this.writing = false;\n\n\t  // when true all writes will be buffered until .uncork() call\n\t  this.corked = 0;\n\n\t  // a flag to be able to tell if the onwrite cb is called immediately,\n\t  // or on a later tick.  We set this to true at first, because any\n\t  // actions that shouldn't happen until \"later\" should generally also\n\t  // not happen before the first write call.\n\t  this.sync = true;\n\n\t  // a flag to know if we're processing previously buffered items, which\n\t  // may call the _write() callback in the same tick, so that we don't\n\t  // end up in an overlapped onwrite situation.\n\t  this.bufferProcessing = false;\n\n\t  // the callback that's passed to _write(chunk,cb)\n\t  this.onwrite = function (er) {\n\t    onwrite(stream, er);\n\t  };\n\n\t  // the callback that the user supplies to write(chunk,encoding,cb)\n\t  this.writecb = null;\n\n\t  // the amount that is being written when _write is called.\n\t  this.writelen = 0;\n\t  this.bufferedRequest = null;\n\t  this.lastBufferedRequest = null;\n\n\t  // number of pending user-supplied write callbacks\n\t  // this must be 0 before 'finish' can be emitted\n\t  this.pendingcb = 0;\n\n\t  // emit prefinish if the only thing we're waiting for is _write cbs\n\t  // This is relevant for synchronous Transform streams\n\t  this.prefinished = false;\n\n\t  // True if the error was already emitted and should not be thrown again\n\t  this.errorEmitted = false;\n\n\t  // Should close be emitted on destroy. Defaults to true.\n\t  this.emitClose = options.emitClose !== false;\n\n\t  // Should .destroy() be called after 'finish' (and potentially 'end')\n\t  this.autoDestroy = !!options.autoDestroy;\n\n\t  // count buffered requests\n\t  this.bufferedRequestCount = 0;\n\n\t  // allocate the first CorkedRequest, there is always\n\t  // one allocated and free to use, and we maintain at most two\n\t  this.corkedRequestsFree = new CorkedRequest(this);\n\t}\n\tWritableState.prototype.getBuffer = function getBuffer() {\n\t  var current = this.bufferedRequest;\n\t  var out = [];\n\t  while (current) {\n\t    out.push(current);\n\t    current = current.next;\n\t  }\n\t  return out;\n\t};\n\t(function () {\n\t  try {\n\t    Object.defineProperty(WritableState.prototype, 'buffer', {\n\t      get: internalUtil.deprecate(function writableStateBufferGetter() {\n\t        return this.getBuffer();\n\t      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n\t    });\n\t  } catch (_) {}\n\t})();\n\n\t// Test _writableState for inheritance to account for Duplex streams,\n\t// whose prototype chain only points to Readable.\n\tvar realHasInstance;\n\tif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n\t  realHasInstance = Function.prototype[Symbol.hasInstance];\n\t  Object.defineProperty(Writable, Symbol.hasInstance, {\n\t    value: function value(object) {\n\t      if (realHasInstance.call(this, object)) return true;\n\t      if (this !== Writable) return false;\n\t      return object && object._writableState instanceof WritableState;\n\t    }\n\t  });\n\t} else {\n\t  realHasInstance = function realHasInstance(object) {\n\t    return object instanceof this;\n\t  };\n\t}\n\tfunction Writable(options) {\n\t  Duplex = Duplex || require_stream_duplex();\n\n\t  // Writable ctor is applied to Duplexes, too.\n\t  // `realHasInstance` is necessary because using plain `instanceof`\n\t  // would return false, as no `_writableState` property is attached.\n\n\t  // Trying to use the custom `instanceof` for Writable here will also break the\n\t  // Node.js LazyTransform implementation, which has a non-trivial getter for\n\t  // `_writableState` that would lead to infinite recursion.\n\n\t  // Checking for a Stream.Duplex instance is faster here instead of inside\n\t  // the WritableState constructor, at least with V8 6.5\n\t  var isDuplex = this instanceof Duplex;\n\t  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n\t  this._writableState = new WritableState(options, this, isDuplex);\n\n\t  // legacy.\n\t  this.writable = true;\n\t  if (options) {\n\t    if (typeof options.write === 'function') this._write = options.write;\n\t    if (typeof options.writev === 'function') this._writev = options.writev;\n\t    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\t    if (typeof options.final === 'function') this._final = options.final;\n\t  }\n\t  Stream.call(this);\n\t}\n\n\t// Otherwise people can pipe Writable streams, which is just wrong.\n\tWritable.prototype.pipe = function () {\n\t  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n\t};\n\tfunction writeAfterEnd(stream, cb) {\n\t  var er = new ERR_STREAM_WRITE_AFTER_END();\n\t  // TODO: defer error events consistently everywhere, not just the cb\n\t  errorOrDestroy(stream, er);\n\t  process.nextTick(cb, er);\n\t}\n\n\t// Checks that a user-supplied chunk is valid, especially for the particular\n\t// mode the stream is in. Currently this means that `null` is never accepted\n\t// and undefined/non-string values are only allowed in object mode.\n\tfunction validChunk(stream, state, chunk, cb) {\n\t  var er;\n\t  if (chunk === null) {\n\t    er = new ERR_STREAM_NULL_VALUES();\n\t  } else if (typeof chunk !== 'string' && !state.objectMode) {\n\t    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n\t  }\n\t  if (er) {\n\t    errorOrDestroy(stream, er);\n\t    process.nextTick(cb, er);\n\t    return false;\n\t  }\n\t  return true;\n\t}\n\tWritable.prototype.write = function (chunk, encoding, cb) {\n\t  var state = this._writableState;\n\t  var ret = false;\n\t  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\t  if (isBuf && !Buffer.isBuffer(chunk)) {\n\t    chunk = _uint8ArrayToBuffer(chunk);\n\t  }\n\t  if (typeof encoding === 'function') {\n\t    cb = encoding;\n\t    encoding = null;\n\t  }\n\t  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\t  if (typeof cb !== 'function') cb = nop;\n\t  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n\t    state.pendingcb++;\n\t    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n\t  }\n\t  return ret;\n\t};\n\tWritable.prototype.cork = function () {\n\t  this._writableState.corked++;\n\t};\n\tWritable.prototype.uncork = function () {\n\t  var state = this._writableState;\n\t  if (state.corked) {\n\t    state.corked--;\n\t    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n\t  }\n\t};\n\tWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n\t  // node::ParseEncoding() requires lower case.\n\t  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n\t  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n\t  this._writableState.defaultEncoding = encoding;\n\t  return this;\n\t};\n\tObject.defineProperty(Writable.prototype, 'writableBuffer', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._writableState && this._writableState.getBuffer();\n\t  }\n\t});\n\tfunction decodeChunk(state, chunk, encoding) {\n\t  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n\t    chunk = Buffer.from(chunk, encoding);\n\t  }\n\t  return chunk;\n\t}\n\tObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._writableState.highWaterMark;\n\t  }\n\t});\n\n\t// if we're already writing something, then just put this\n\t// in the queue, and wait our turn.  Otherwise, call _write\n\t// If we return false, then we need a drain event, so set that flag.\n\tfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n\t  if (!isBuf) {\n\t    var newChunk = decodeChunk(state, chunk, encoding);\n\t    if (chunk !== newChunk) {\n\t      isBuf = true;\n\t      encoding = 'buffer';\n\t      chunk = newChunk;\n\t    }\n\t  }\n\t  var len = state.objectMode ? 1 : chunk.length;\n\t  state.length += len;\n\t  var ret = state.length < state.highWaterMark;\n\t  // we must ensure that previous needDrain will not be reset to false.\n\t  if (!ret) state.needDrain = true;\n\t  if (state.writing || state.corked) {\n\t    var last = state.lastBufferedRequest;\n\t    state.lastBufferedRequest = {\n\t      chunk: chunk,\n\t      encoding: encoding,\n\t      isBuf: isBuf,\n\t      callback: cb,\n\t      next: null\n\t    };\n\t    if (last) {\n\t      last.next = state.lastBufferedRequest;\n\t    } else {\n\t      state.bufferedRequest = state.lastBufferedRequest;\n\t    }\n\t    state.bufferedRequestCount += 1;\n\t  } else {\n\t    doWrite(stream, state, false, len, chunk, encoding, cb);\n\t  }\n\t  return ret;\n\t}\n\tfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n\t  state.writelen = len;\n\t  state.writecb = cb;\n\t  state.writing = true;\n\t  state.sync = true;\n\t  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n\t  state.sync = false;\n\t}\n\tfunction onwriteError(stream, state, sync, er, cb) {\n\t  --state.pendingcb;\n\t  if (sync) {\n\t    // defer the callback if we are being called synchronously\n\t    // to avoid piling up things on the stack\n\t    process.nextTick(cb, er);\n\t    // this can emit finish, and it will always happen\n\t    // after error\n\t    process.nextTick(finishMaybe, stream, state);\n\t    stream._writableState.errorEmitted = true;\n\t    errorOrDestroy(stream, er);\n\t  } else {\n\t    // the caller expect this to happen before if\n\t    // it is async\n\t    cb(er);\n\t    stream._writableState.errorEmitted = true;\n\t    errorOrDestroy(stream, er);\n\t    // this can emit finish, but finish must\n\t    // always follow error\n\t    finishMaybe(stream, state);\n\t  }\n\t}\n\tfunction onwriteStateUpdate(state) {\n\t  state.writing = false;\n\t  state.writecb = null;\n\t  state.length -= state.writelen;\n\t  state.writelen = 0;\n\t}\n\tfunction onwrite(stream, er) {\n\t  var state = stream._writableState;\n\t  var sync = state.sync;\n\t  var cb = state.writecb;\n\t  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n\t  onwriteStateUpdate(state);\n\t  if (er) onwriteError(stream, state, sync, er, cb);else {\n\t    // Check if we're actually ready to finish, but don't emit yet\n\t    var finished = needFinish(state) || stream.destroyed;\n\t    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n\t      clearBuffer(stream, state);\n\t    }\n\t    if (sync) {\n\t      process.nextTick(afterWrite, stream, state, finished, cb);\n\t    } else {\n\t      afterWrite(stream, state, finished, cb);\n\t    }\n\t  }\n\t}\n\tfunction afterWrite(stream, state, finished, cb) {\n\t  if (!finished) onwriteDrain(stream, state);\n\t  state.pendingcb--;\n\t  cb();\n\t  finishMaybe(stream, state);\n\t}\n\n\t// Must force callback to be called on nextTick, so that we don't\n\t// emit 'drain' before the write() consumer gets the 'false' return\n\t// value, and has a chance to attach a 'drain' listener.\n\tfunction onwriteDrain(stream, state) {\n\t  if (state.length === 0 && state.needDrain) {\n\t    state.needDrain = false;\n\t    stream.emit('drain');\n\t  }\n\t}\n\n\t// if there's something in the buffer waiting, then process it\n\tfunction clearBuffer(stream, state) {\n\t  state.bufferProcessing = true;\n\t  var entry = state.bufferedRequest;\n\t  if (stream._writev && entry && entry.next) {\n\t    // Fast case, write everything using _writev()\n\t    var l = state.bufferedRequestCount;\n\t    var buffer = new Array(l);\n\t    var holder = state.corkedRequestsFree;\n\t    holder.entry = entry;\n\t    var count = 0;\n\t    var allBuffers = true;\n\t    while (entry) {\n\t      buffer[count] = entry;\n\t      if (!entry.isBuf) allBuffers = false;\n\t      entry = entry.next;\n\t      count += 1;\n\t    }\n\t    buffer.allBuffers = allBuffers;\n\t    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n\t    // doWrite is almost always async, defer these to save a bit of time\n\t    // as the hot path ends with doWrite\n\t    state.pendingcb++;\n\t    state.lastBufferedRequest = null;\n\t    if (holder.next) {\n\t      state.corkedRequestsFree = holder.next;\n\t      holder.next = null;\n\t    } else {\n\t      state.corkedRequestsFree = new CorkedRequest(state);\n\t    }\n\t    state.bufferedRequestCount = 0;\n\t  } else {\n\t    // Slow case, write chunks one-by-one\n\t    while (entry) {\n\t      var chunk = entry.chunk;\n\t      var encoding = entry.encoding;\n\t      var cb = entry.callback;\n\t      var len = state.objectMode ? 1 : chunk.length;\n\t      doWrite(stream, state, false, len, chunk, encoding, cb);\n\t      entry = entry.next;\n\t      state.bufferedRequestCount--;\n\t      // if we didn't call the onwrite immediately, then\n\t      // it means that we need to wait until it does.\n\t      // also, that means that the chunk and cb are currently\n\t      // being processed, so move the buffer counter past them.\n\t      if (state.writing) {\n\t        break;\n\t      }\n\t    }\n\t    if (entry === null) state.lastBufferedRequest = null;\n\t  }\n\t  state.bufferedRequest = entry;\n\t  state.bufferProcessing = false;\n\t}\n\tWritable.prototype._write = function (chunk, encoding, cb) {\n\t  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n\t};\n\tWritable.prototype._writev = null;\n\tWritable.prototype.end = function (chunk, encoding, cb) {\n\t  var state = this._writableState;\n\t  if (typeof chunk === 'function') {\n\t    cb = chunk;\n\t    chunk = null;\n\t    encoding = null;\n\t  } else if (typeof encoding === 'function') {\n\t    cb = encoding;\n\t    encoding = null;\n\t  }\n\t  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n\t  // .end() fully uncorks\n\t  if (state.corked) {\n\t    state.corked = 1;\n\t    this.uncork();\n\t  }\n\n\t  // ignore unnecessary end() calls.\n\t  if (!state.ending) endWritable(this, state, cb);\n\t  return this;\n\t};\n\tObject.defineProperty(Writable.prototype, 'writableLength', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._writableState.length;\n\t  }\n\t});\n\tfunction needFinish(state) {\n\t  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n\t}\n\tfunction callFinal(stream, state) {\n\t  stream._final(function (err) {\n\t    state.pendingcb--;\n\t    if (err) {\n\t      errorOrDestroy(stream, err);\n\t    }\n\t    state.prefinished = true;\n\t    stream.emit('prefinish');\n\t    finishMaybe(stream, state);\n\t  });\n\t}\n\tfunction prefinish(stream, state) {\n\t  if (!state.prefinished && !state.finalCalled) {\n\t    if (typeof stream._final === 'function' && !state.destroyed) {\n\t      state.pendingcb++;\n\t      state.finalCalled = true;\n\t      process.nextTick(callFinal, stream, state);\n\t    } else {\n\t      state.prefinished = true;\n\t      stream.emit('prefinish');\n\t    }\n\t  }\n\t}\n\tfunction finishMaybe(stream, state) {\n\t  var need = needFinish(state);\n\t  if (need) {\n\t    prefinish(stream, state);\n\t    if (state.pendingcb === 0) {\n\t      state.finished = true;\n\t      stream.emit('finish');\n\t      if (state.autoDestroy) {\n\t        // In case of duplex streams we need a way to detect\n\t        // if the readable side is ready for autoDestroy as well\n\t        var rState = stream._readableState;\n\t        if (!rState || rState.autoDestroy && rState.endEmitted) {\n\t          stream.destroy();\n\t        }\n\t      }\n\t    }\n\t  }\n\t  return need;\n\t}\n\tfunction endWritable(stream, state, cb) {\n\t  state.ending = true;\n\t  finishMaybe(stream, state);\n\t  if (cb) {\n\t    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n\t  }\n\t  state.ended = true;\n\t  stream.writable = false;\n\t}\n\tfunction onCorkedFinish(corkReq, state, err) {\n\t  var entry = corkReq.entry;\n\t  corkReq.entry = null;\n\t  while (entry) {\n\t    var cb = entry.callback;\n\t    state.pendingcb--;\n\t    cb(err);\n\t    entry = entry.next;\n\t  }\n\n\t  // reuse the free corkReq.\n\t  state.corkedRequestsFree.next = corkReq;\n\t}\n\tObject.defineProperty(Writable.prototype, 'destroyed', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    if (this._writableState === undefined) {\n\t      return false;\n\t    }\n\t    return this._writableState.destroyed;\n\t  },\n\t  set: function set(value) {\n\t    // we ignore the value if the stream\n\t    // has not been initialized yet\n\t    if (!this._writableState) {\n\t      return;\n\t    }\n\n\t    // backward compatibility, the user is explicitly\n\t    // managing destroyed\n\t    this._writableState.destroyed = value;\n\t  }\n\t});\n\tWritable.prototype.destroy = destroyImpl.destroy;\n\tWritable.prototype._undestroy = destroyImpl.undestroy;\n\tWritable.prototype._destroy = function (err, cb) {\n\t  cb(err);\n\t};\n\treturn _stream_writable;\n}\n\nvar _stream_duplex;\nvar hasRequired_stream_duplex;\n\nfunction require_stream_duplex () {\n\tif (hasRequired_stream_duplex) return _stream_duplex;\n\thasRequired_stream_duplex = 1;\n\n\t/*<replacement>*/\n\tvar objectKeys = Object.keys || function (obj) {\n\t  var keys = [];\n\t  for (var key in obj) keys.push(key);\n\t  return keys;\n\t};\n\t/*</replacement>*/\n\n\t_stream_duplex = Duplex;\n\tvar Readable = require_stream_readable();\n\tvar Writable = require_stream_writable();\n\trequireInherits()(Duplex, Readable);\n\t{\n\t  // Allow the keys array to be GC'ed.\n\t  var keys = objectKeys(Writable.prototype);\n\t  for (var v = 0; v < keys.length; v++) {\n\t    var method = keys[v];\n\t    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n\t  }\n\t}\n\tfunction Duplex(options) {\n\t  if (!(this instanceof Duplex)) return new Duplex(options);\n\t  Readable.call(this, options);\n\t  Writable.call(this, options);\n\t  this.allowHalfOpen = true;\n\t  if (options) {\n\t    if (options.readable === false) this.readable = false;\n\t    if (options.writable === false) this.writable = false;\n\t    if (options.allowHalfOpen === false) {\n\t      this.allowHalfOpen = false;\n\t      this.once('end', onend);\n\t    }\n\t  }\n\t}\n\tObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._writableState.highWaterMark;\n\t  }\n\t});\n\tObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._writableState && this._writableState.getBuffer();\n\t  }\n\t});\n\tObject.defineProperty(Duplex.prototype, 'writableLength', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._writableState.length;\n\t  }\n\t});\n\n\t// the no-half-open enforcer\n\tfunction onend() {\n\t  // If the writable side ended, then we're ok.\n\t  if (this._writableState.ended) return;\n\n\t  // no more data can be written.\n\t  // But allow more writes to happen in this tick.\n\t  process.nextTick(onEndNT, this);\n\t}\n\tfunction onEndNT(self) {\n\t  self.end();\n\t}\n\tObject.defineProperty(Duplex.prototype, 'destroyed', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    if (this._readableState === undefined || this._writableState === undefined) {\n\t      return false;\n\t    }\n\t    return this._readableState.destroyed && this._writableState.destroyed;\n\t  },\n\t  set: function set(value) {\n\t    // we ignore the value if the stream\n\t    // has not been initialized yet\n\t    if (this._readableState === undefined || this._writableState === undefined) {\n\t      return;\n\t    }\n\n\t    // backward compatibility, the user is explicitly\n\t    // managing destroyed\n\t    this._readableState.destroyed = value;\n\t    this._writableState.destroyed = value;\n\t  }\n\t});\n\treturn _stream_duplex;\n}\n\nvar string_decoder = {};\n\nvar safeBuffer = {exports: {}};\n\n/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n\nvar hasRequiredSafeBuffer;\n\nfunction requireSafeBuffer () {\n\tif (hasRequiredSafeBuffer) return safeBuffer.exports;\n\thasRequiredSafeBuffer = 1;\n\t(function (module, exports) {\n\t\t/* eslint-disable node/no-deprecated-api */\n\t\tvar buffer = require$$0__default$1[\"default\"];\n\t\tvar Buffer = buffer.Buffer;\n\n\t\t// alternative to using Object.keys for old browsers\n\t\tfunction copyProps (src, dst) {\n\t\t  for (var key in src) {\n\t\t    dst[key] = src[key];\n\t\t  }\n\t\t}\n\t\tif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n\t\t  module.exports = buffer;\n\t\t} else {\n\t\t  // Copy properties from require('buffer')\n\t\t  copyProps(buffer, exports);\n\t\t  exports.Buffer = SafeBuffer;\n\t\t}\n\n\t\tfunction SafeBuffer (arg, encodingOrOffset, length) {\n\t\t  return Buffer(arg, encodingOrOffset, length)\n\t\t}\n\n\t\tSafeBuffer.prototype = Object.create(Buffer.prototype);\n\n\t\t// Copy static methods from Buffer\n\t\tcopyProps(Buffer, SafeBuffer);\n\n\t\tSafeBuffer.from = function (arg, encodingOrOffset, length) {\n\t\t  if (typeof arg === 'number') {\n\t\t    throw new TypeError('Argument must not be a number')\n\t\t  }\n\t\t  return Buffer(arg, encodingOrOffset, length)\n\t\t};\n\n\t\tSafeBuffer.alloc = function (size, fill, encoding) {\n\t\t  if (typeof size !== 'number') {\n\t\t    throw new TypeError('Argument must be a number')\n\t\t  }\n\t\t  var buf = Buffer(size);\n\t\t  if (fill !== undefined) {\n\t\t    if (typeof encoding === 'string') {\n\t\t      buf.fill(fill, encoding);\n\t\t    } else {\n\t\t      buf.fill(fill);\n\t\t    }\n\t\t  } else {\n\t\t    buf.fill(0);\n\t\t  }\n\t\t  return buf\n\t\t};\n\n\t\tSafeBuffer.allocUnsafe = function (size) {\n\t\t  if (typeof size !== 'number') {\n\t\t    throw new TypeError('Argument must be a number')\n\t\t  }\n\t\t  return Buffer(size)\n\t\t};\n\n\t\tSafeBuffer.allocUnsafeSlow = function (size) {\n\t\t  if (typeof size !== 'number') {\n\t\t    throw new TypeError('Argument must be a number')\n\t\t  }\n\t\t  return buffer.SlowBuffer(size)\n\t\t};\n} (safeBuffer, safeBuffer.exports));\n\treturn safeBuffer.exports;\n}\n\nvar hasRequiredString_decoder;\n\nfunction requireString_decoder () {\n\tif (hasRequiredString_decoder) return string_decoder;\n\thasRequiredString_decoder = 1;\n\n\t/*<replacement>*/\n\n\tvar Buffer = requireSafeBuffer().Buffer;\n\t/*</replacement>*/\n\n\tvar isEncoding = Buffer.isEncoding || function (encoding) {\n\t  encoding = '' + encoding;\n\t  switch (encoding && encoding.toLowerCase()) {\n\t    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n\t      return true;\n\t    default:\n\t      return false;\n\t  }\n\t};\n\n\tfunction _normalizeEncoding(enc) {\n\t  if (!enc) return 'utf8';\n\t  var retried;\n\t  while (true) {\n\t    switch (enc) {\n\t      case 'utf8':\n\t      case 'utf-8':\n\t        return 'utf8';\n\t      case 'ucs2':\n\t      case 'ucs-2':\n\t      case 'utf16le':\n\t      case 'utf-16le':\n\t        return 'utf16le';\n\t      case 'latin1':\n\t      case 'binary':\n\t        return 'latin1';\n\t      case 'base64':\n\t      case 'ascii':\n\t      case 'hex':\n\t        return enc;\n\t      default:\n\t        if (retried) return; // undefined\n\t        enc = ('' + enc).toLowerCase();\n\t        retried = true;\n\t    }\n\t  }\n\t}\n\t// Do not cache `Buffer.isEncoding` when checking encoding names as some\n\t// modules monkey-patch it to support additional encodings\n\tfunction normalizeEncoding(enc) {\n\t  var nenc = _normalizeEncoding(enc);\n\t  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n\t  return nenc || enc;\n\t}\n\n\t// StringDecoder provides an interface for efficiently splitting a series of\n\t// buffers into a series of JS strings without breaking apart multi-byte\n\t// characters.\n\tstring_decoder.StringDecoder = StringDecoder;\n\tfunction StringDecoder(encoding) {\n\t  this.encoding = normalizeEncoding(encoding);\n\t  var nb;\n\t  switch (this.encoding) {\n\t    case 'utf16le':\n\t      this.text = utf16Text;\n\t      this.end = utf16End;\n\t      nb = 4;\n\t      break;\n\t    case 'utf8':\n\t      this.fillLast = utf8FillLast;\n\t      nb = 4;\n\t      break;\n\t    case 'base64':\n\t      this.text = base64Text;\n\t      this.end = base64End;\n\t      nb = 3;\n\t      break;\n\t    default:\n\t      this.write = simpleWrite;\n\t      this.end = simpleEnd;\n\t      return;\n\t  }\n\t  this.lastNeed = 0;\n\t  this.lastTotal = 0;\n\t  this.lastChar = Buffer.allocUnsafe(nb);\n\t}\n\n\tStringDecoder.prototype.write = function (buf) {\n\t  if (buf.length === 0) return '';\n\t  var r;\n\t  var i;\n\t  if (this.lastNeed) {\n\t    r = this.fillLast(buf);\n\t    if (r === undefined) return '';\n\t    i = this.lastNeed;\n\t    this.lastNeed = 0;\n\t  } else {\n\t    i = 0;\n\t  }\n\t  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n\t  return r || '';\n\t};\n\n\tStringDecoder.prototype.end = utf8End;\n\n\t// Returns only complete characters in a Buffer\n\tStringDecoder.prototype.text = utf8Text;\n\n\t// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\n\tStringDecoder.prototype.fillLast = function (buf) {\n\t  if (this.lastNeed <= buf.length) {\n\t    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n\t    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n\t  }\n\t  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n\t  this.lastNeed -= buf.length;\n\t};\n\n\t// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n\t// continuation byte. If an invalid byte is detected, -2 is returned.\n\tfunction utf8CheckByte(byte) {\n\t  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n\t  return byte >> 6 === 0x02 ? -1 : -2;\n\t}\n\n\t// Checks at most 3 bytes at the end of a Buffer in order to detect an\n\t// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n\t// needed to complete the UTF-8 character (if applicable) are returned.\n\tfunction utf8CheckIncomplete(self, buf, i) {\n\t  var j = buf.length - 1;\n\t  if (j < i) return 0;\n\t  var nb = utf8CheckByte(buf[j]);\n\t  if (nb >= 0) {\n\t    if (nb > 0) self.lastNeed = nb - 1;\n\t    return nb;\n\t  }\n\t  if (--j < i || nb === -2) return 0;\n\t  nb = utf8CheckByte(buf[j]);\n\t  if (nb >= 0) {\n\t    if (nb > 0) self.lastNeed = nb - 2;\n\t    return nb;\n\t  }\n\t  if (--j < i || nb === -2) return 0;\n\t  nb = utf8CheckByte(buf[j]);\n\t  if (nb >= 0) {\n\t    if (nb > 0) {\n\t      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n\t    }\n\t    return nb;\n\t  }\n\t  return 0;\n\t}\n\n\t// Validates as many continuation bytes for a multi-byte UTF-8 character as\n\t// needed or are available. If we see a non-continuation byte where we expect\n\t// one, we \"replace\" the validated continuation bytes we've seen so far with\n\t// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n\t// behavior. The continuation byte check is included three times in the case\n\t// where all of the continuation bytes for a character exist in the same buffer.\n\t// It is also done this way as a slight performance increase instead of using a\n\t// loop.\n\tfunction utf8CheckExtraBytes(self, buf, p) {\n\t  if ((buf[0] & 0xC0) !== 0x80) {\n\t    self.lastNeed = 0;\n\t    return '\\ufffd';\n\t  }\n\t  if (self.lastNeed > 1 && buf.length > 1) {\n\t    if ((buf[1] & 0xC0) !== 0x80) {\n\t      self.lastNeed = 1;\n\t      return '\\ufffd';\n\t    }\n\t    if (self.lastNeed > 2 && buf.length > 2) {\n\t      if ((buf[2] & 0xC0) !== 0x80) {\n\t        self.lastNeed = 2;\n\t        return '\\ufffd';\n\t      }\n\t    }\n\t  }\n\t}\n\n\t// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\n\tfunction utf8FillLast(buf) {\n\t  var p = this.lastTotal - this.lastNeed;\n\t  var r = utf8CheckExtraBytes(this, buf);\n\t  if (r !== undefined) return r;\n\t  if (this.lastNeed <= buf.length) {\n\t    buf.copy(this.lastChar, p, 0, this.lastNeed);\n\t    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n\t  }\n\t  buf.copy(this.lastChar, p, 0, buf.length);\n\t  this.lastNeed -= buf.length;\n\t}\n\n\t// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n\t// partial character, the character's bytes are buffered until the required\n\t// number of bytes are available.\n\tfunction utf8Text(buf, i) {\n\t  var total = utf8CheckIncomplete(this, buf, i);\n\t  if (!this.lastNeed) return buf.toString('utf8', i);\n\t  this.lastTotal = total;\n\t  var end = buf.length - (total - this.lastNeed);\n\t  buf.copy(this.lastChar, 0, end);\n\t  return buf.toString('utf8', i, end);\n\t}\n\n\t// For UTF-8, a replacement character is added when ending on a partial\n\t// character.\n\tfunction utf8End(buf) {\n\t  var r = buf && buf.length ? this.write(buf) : '';\n\t  if (this.lastNeed) return r + '\\ufffd';\n\t  return r;\n\t}\n\n\t// UTF-16LE typically needs two bytes per character, but even if we have an even\n\t// number of bytes available, we need to check if we end on a leading/high\n\t// surrogate. In that case, we need to wait for the next two bytes in order to\n\t// decode the last character properly.\n\tfunction utf16Text(buf, i) {\n\t  if ((buf.length - i) % 2 === 0) {\n\t    var r = buf.toString('utf16le', i);\n\t    if (r) {\n\t      var c = r.charCodeAt(r.length - 1);\n\t      if (c >= 0xD800 && c <= 0xDBFF) {\n\t        this.lastNeed = 2;\n\t        this.lastTotal = 4;\n\t        this.lastChar[0] = buf[buf.length - 2];\n\t        this.lastChar[1] = buf[buf.length - 1];\n\t        return r.slice(0, -1);\n\t      }\n\t    }\n\t    return r;\n\t  }\n\t  this.lastNeed = 1;\n\t  this.lastTotal = 2;\n\t  this.lastChar[0] = buf[buf.length - 1];\n\t  return buf.toString('utf16le', i, buf.length - 1);\n\t}\n\n\t// For UTF-16LE we do not explicitly append special replacement characters if we\n\t// end on a partial character, we simply let v8 handle that.\n\tfunction utf16End(buf) {\n\t  var r = buf && buf.length ? this.write(buf) : '';\n\t  if (this.lastNeed) {\n\t    var end = this.lastTotal - this.lastNeed;\n\t    return r + this.lastChar.toString('utf16le', 0, end);\n\t  }\n\t  return r;\n\t}\n\n\tfunction base64Text(buf, i) {\n\t  var n = (buf.length - i) % 3;\n\t  if (n === 0) return buf.toString('base64', i);\n\t  this.lastNeed = 3 - n;\n\t  this.lastTotal = 3;\n\t  if (n === 1) {\n\t    this.lastChar[0] = buf[buf.length - 1];\n\t  } else {\n\t    this.lastChar[0] = buf[buf.length - 2];\n\t    this.lastChar[1] = buf[buf.length - 1];\n\t  }\n\t  return buf.toString('base64', i, buf.length - n);\n\t}\n\n\tfunction base64End(buf) {\n\t  var r = buf && buf.length ? this.write(buf) : '';\n\t  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n\t  return r;\n\t}\n\n\t// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\n\tfunction simpleWrite(buf) {\n\t  return buf.toString(this.encoding);\n\t}\n\n\tfunction simpleEnd(buf) {\n\t  return buf && buf.length ? this.write(buf) : '';\n\t}\n\treturn string_decoder;\n}\n\nvar endOfStream;\nvar hasRequiredEndOfStream;\n\nfunction requireEndOfStream () {\n\tif (hasRequiredEndOfStream) return endOfStream;\n\thasRequiredEndOfStream = 1;\n\n\tvar ERR_STREAM_PREMATURE_CLOSE = requireErrors().codes.ERR_STREAM_PREMATURE_CLOSE;\n\tfunction once(callback) {\n\t  var called = false;\n\t  return function () {\n\t    if (called) return;\n\t    called = true;\n\t    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n\t      args[_key] = arguments[_key];\n\t    }\n\t    callback.apply(this, args);\n\t  };\n\t}\n\tfunction noop() {}\n\tfunction isRequest(stream) {\n\t  return stream.setHeader && typeof stream.abort === 'function';\n\t}\n\tfunction eos(stream, opts, callback) {\n\t  if (typeof opts === 'function') return eos(stream, null, opts);\n\t  if (!opts) opts = {};\n\t  callback = once(callback || noop);\n\t  var readable = opts.readable || opts.readable !== false && stream.readable;\n\t  var writable = opts.writable || opts.writable !== false && stream.writable;\n\t  var onlegacyfinish = function onlegacyfinish() {\n\t    if (!stream.writable) onfinish();\n\t  };\n\t  var writableEnded = stream._writableState && stream._writableState.finished;\n\t  var onfinish = function onfinish() {\n\t    writable = false;\n\t    writableEnded = true;\n\t    if (!readable) callback.call(stream);\n\t  };\n\t  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\t  var onend = function onend() {\n\t    readable = false;\n\t    readableEnded = true;\n\t    if (!writable) callback.call(stream);\n\t  };\n\t  var onerror = function onerror(err) {\n\t    callback.call(stream, err);\n\t  };\n\t  var onclose = function onclose() {\n\t    var err;\n\t    if (readable && !readableEnded) {\n\t      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n\t      return callback.call(stream, err);\n\t    }\n\t    if (writable && !writableEnded) {\n\t      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n\t      return callback.call(stream, err);\n\t    }\n\t  };\n\t  var onrequest = function onrequest() {\n\t    stream.req.on('finish', onfinish);\n\t  };\n\t  if (isRequest(stream)) {\n\t    stream.on('complete', onfinish);\n\t    stream.on('abort', onclose);\n\t    if (stream.req) onrequest();else stream.on('request', onrequest);\n\t  } else if (writable && !stream._writableState) {\n\t    // legacy streams\n\t    stream.on('end', onlegacyfinish);\n\t    stream.on('close', onlegacyfinish);\n\t  }\n\t  stream.on('end', onend);\n\t  stream.on('finish', onfinish);\n\t  if (opts.error !== false) stream.on('error', onerror);\n\t  stream.on('close', onclose);\n\t  return function () {\n\t    stream.removeListener('complete', onfinish);\n\t    stream.removeListener('abort', onclose);\n\t    stream.removeListener('request', onrequest);\n\t    if (stream.req) stream.req.removeListener('finish', onfinish);\n\t    stream.removeListener('end', onlegacyfinish);\n\t    stream.removeListener('close', onlegacyfinish);\n\t    stream.removeListener('finish', onfinish);\n\t    stream.removeListener('end', onend);\n\t    stream.removeListener('error', onerror);\n\t    stream.removeListener('close', onclose);\n\t  };\n\t}\n\tendOfStream = eos;\n\treturn endOfStream;\n}\n\nvar async_iterator;\nvar hasRequiredAsync_iterator;\n\nfunction requireAsync_iterator () {\n\tif (hasRequiredAsync_iterator) return async_iterator;\n\thasRequiredAsync_iterator = 1;\n\n\tvar _Object$setPrototypeO;\n\tfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\tfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\n\tfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\tvar finished = requireEndOfStream();\n\tvar kLastResolve = Symbol('lastResolve');\n\tvar kLastReject = Symbol('lastReject');\n\tvar kError = Symbol('error');\n\tvar kEnded = Symbol('ended');\n\tvar kLastPromise = Symbol('lastPromise');\n\tvar kHandlePromise = Symbol('handlePromise');\n\tvar kStream = Symbol('stream');\n\tfunction createIterResult(value, done) {\n\t  return {\n\t    value: value,\n\t    done: done\n\t  };\n\t}\n\tfunction readAndResolve(iter) {\n\t  var resolve = iter[kLastResolve];\n\t  if (resolve !== null) {\n\t    var data = iter[kStream].read();\n\t    // we defer if data is null\n\t    // we can be expecting either 'end' or\n\t    // 'error'\n\t    if (data !== null) {\n\t      iter[kLastPromise] = null;\n\t      iter[kLastResolve] = null;\n\t      iter[kLastReject] = null;\n\t      resolve(createIterResult(data, false));\n\t    }\n\t  }\n\t}\n\tfunction onReadable(iter) {\n\t  // we wait for the next tick, because it might\n\t  // emit an error with process.nextTick\n\t  process.nextTick(readAndResolve, iter);\n\t}\n\tfunction wrapForNext(lastPromise, iter) {\n\t  return function (resolve, reject) {\n\t    lastPromise.then(function () {\n\t      if (iter[kEnded]) {\n\t        resolve(createIterResult(undefined, true));\n\t        return;\n\t      }\n\t      iter[kHandlePromise](resolve, reject);\n\t    }, reject);\n\t  };\n\t}\n\tvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\n\tvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n\t  get stream() {\n\t    return this[kStream];\n\t  },\n\t  next: function next() {\n\t    var _this = this;\n\t    // if we have detected an error in the meanwhile\n\t    // reject straight away\n\t    var error = this[kError];\n\t    if (error !== null) {\n\t      return Promise.reject(error);\n\t    }\n\t    if (this[kEnded]) {\n\t      return Promise.resolve(createIterResult(undefined, true));\n\t    }\n\t    if (this[kStream].destroyed) {\n\t      // We need to defer via nextTick because if .destroy(err) is\n\t      // called, the error will be emitted via nextTick, and\n\t      // we cannot guarantee that there is no error lingering around\n\t      // waiting to be emitted.\n\t      return new Promise(function (resolve, reject) {\n\t        process.nextTick(function () {\n\t          if (_this[kError]) {\n\t            reject(_this[kError]);\n\t          } else {\n\t            resolve(createIterResult(undefined, true));\n\t          }\n\t        });\n\t      });\n\t    }\n\n\t    // if we have multiple next() calls\n\t    // we will wait for the previous Promise to finish\n\t    // this logic is optimized to support for await loops,\n\t    // where next() is only called once at a time\n\t    var lastPromise = this[kLastPromise];\n\t    var promise;\n\t    if (lastPromise) {\n\t      promise = new Promise(wrapForNext(lastPromise, this));\n\t    } else {\n\t      // fast path needed to support multiple this.push()\n\t      // without triggering the next() queue\n\t      var data = this[kStream].read();\n\t      if (data !== null) {\n\t        return Promise.resolve(createIterResult(data, false));\n\t      }\n\t      promise = new Promise(this[kHandlePromise]);\n\t    }\n\t    this[kLastPromise] = promise;\n\t    return promise;\n\t  }\n\t}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n\t  return this;\n\t}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n\t  var _this2 = this;\n\t  // destroy(err, cb) is a private API\n\t  // we can guarantee we have that here, because we control the\n\t  // Readable class this is attached to\n\t  return new Promise(function (resolve, reject) {\n\t    _this2[kStream].destroy(null, function (err) {\n\t      if (err) {\n\t        reject(err);\n\t        return;\n\t      }\n\t      resolve(createIterResult(undefined, true));\n\t    });\n\t  });\n\t}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\tvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n\t  var _Object$create;\n\t  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n\t    value: stream,\n\t    writable: true\n\t  }), _defineProperty(_Object$create, kLastResolve, {\n\t    value: null,\n\t    writable: true\n\t  }), _defineProperty(_Object$create, kLastReject, {\n\t    value: null,\n\t    writable: true\n\t  }), _defineProperty(_Object$create, kError, {\n\t    value: null,\n\t    writable: true\n\t  }), _defineProperty(_Object$create, kEnded, {\n\t    value: stream._readableState.endEmitted,\n\t    writable: true\n\t  }), _defineProperty(_Object$create, kHandlePromise, {\n\t    value: function value(resolve, reject) {\n\t      var data = iterator[kStream].read();\n\t      if (data) {\n\t        iterator[kLastPromise] = null;\n\t        iterator[kLastResolve] = null;\n\t        iterator[kLastReject] = null;\n\t        resolve(createIterResult(data, false));\n\t      } else {\n\t        iterator[kLastResolve] = resolve;\n\t        iterator[kLastReject] = reject;\n\t      }\n\t    },\n\t    writable: true\n\t  }), _Object$create));\n\t  iterator[kLastPromise] = null;\n\t  finished(stream, function (err) {\n\t    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n\t      var reject = iterator[kLastReject];\n\t      // reject if we are waiting for data in the Promise\n\t      // returned by next() and store the error\n\t      if (reject !== null) {\n\t        iterator[kLastPromise] = null;\n\t        iterator[kLastResolve] = null;\n\t        iterator[kLastReject] = null;\n\t        reject(err);\n\t      }\n\t      iterator[kError] = err;\n\t      return;\n\t    }\n\t    var resolve = iterator[kLastResolve];\n\t    if (resolve !== null) {\n\t      iterator[kLastPromise] = null;\n\t      iterator[kLastResolve] = null;\n\t      iterator[kLastReject] = null;\n\t      resolve(createIterResult(undefined, true));\n\t    }\n\t    iterator[kEnded] = true;\n\t  });\n\t  stream.on('readable', onReadable.bind(null, iterator));\n\t  return iterator;\n\t};\n\tasync_iterator = createReadableStreamAsyncIterator;\n\treturn async_iterator;\n}\n\nvar from_1;\nvar hasRequiredFrom;\n\nfunction requireFrom () {\n\tif (hasRequiredFrom) return from_1;\n\thasRequiredFrom = 1;\n\n\tfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\tfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\tfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\tfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\tfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\tfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\n\tfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\tvar ERR_INVALID_ARG_TYPE = requireErrors().codes.ERR_INVALID_ARG_TYPE;\n\tfunction from(Readable, iterable, opts) {\n\t  var iterator;\n\t  if (iterable && typeof iterable.next === 'function') {\n\t    iterator = iterable;\n\t  } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);\n\t  var readable = new Readable(_objectSpread({\n\t    objectMode: true\n\t  }, opts));\n\t  // Reading boolean to protect against _read\n\t  // being called before last iteration completion.\n\t  var reading = false;\n\t  readable._read = function () {\n\t    if (!reading) {\n\t      reading = true;\n\t      next();\n\t    }\n\t  };\n\t  function next() {\n\t    return _next2.apply(this, arguments);\n\t  }\n\t  function _next2() {\n\t    _next2 = _asyncToGenerator(function* () {\n\t      try {\n\t        var _yield$iterator$next = yield iterator.next(),\n\t          value = _yield$iterator$next.value,\n\t          done = _yield$iterator$next.done;\n\t        if (done) {\n\t          readable.push(null);\n\t        } else if (readable.push(yield value)) {\n\t          next();\n\t        } else {\n\t          reading = false;\n\t        }\n\t      } catch (err) {\n\t        readable.destroy(err);\n\t      }\n\t    });\n\t    return _next2.apply(this, arguments);\n\t  }\n\t  return readable;\n\t}\n\tfrom_1 = from;\n\treturn from_1;\n}\n\nvar _stream_readable;\nvar hasRequired_stream_readable;\n\nfunction require_stream_readable () {\n\tif (hasRequired_stream_readable) return _stream_readable;\n\thasRequired_stream_readable = 1;\n\n\t_stream_readable = Readable;\n\n\t/*<replacement>*/\n\tvar Duplex;\n\t/*</replacement>*/\n\n\tReadable.ReadableState = ReadableState;\n\n\t/*<replacement>*/\n\trequire$$0__default$2[\"default\"].EventEmitter;\n\tvar EElistenerCount = function EElistenerCount(emitter, type) {\n\t  return emitter.listeners(type).length;\n\t};\n\t/*</replacement>*/\n\n\t/*<replacement>*/\n\tvar Stream = requireStream();\n\t/*</replacement>*/\n\n\tvar Buffer = require$$0__default$1[\"default\"].Buffer;\n\tvar OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\n\tfunction _uint8ArrayToBuffer(chunk) {\n\t  return Buffer.from(chunk);\n\t}\n\tfunction _isUint8Array(obj) {\n\t  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n\t}\n\n\t/*<replacement>*/\n\tvar debugUtil = require$$1__default[\"default\"];\n\tvar debug;\n\tif (debugUtil && debugUtil.debuglog) {\n\t  debug = debugUtil.debuglog('stream');\n\t} else {\n\t  debug = function debug() {};\n\t}\n\t/*</replacement>*/\n\n\tvar BufferList = requireBuffer_list();\n\tvar destroyImpl = requireDestroy();\n\tvar _require = requireState(),\n\t  getHighWaterMark = _require.getHighWaterMark;\n\tvar _require$codes = requireErrors().codes,\n\t  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n\t  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n\t  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n\t  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n\t// Lazy loaded to improve the startup performance.\n\tvar StringDecoder;\n\tvar createReadableStreamAsyncIterator;\n\tvar from;\n\trequireInherits()(Readable, Stream);\n\tvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\tvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\tfunction prependListener(emitter, event, fn) {\n\t  // Sadly this is not cacheable as some libraries bundle their own\n\t  // event emitter implementation with them.\n\t  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n\t  // This is a hack to make sure that our error handler is attached before any\n\t  // userland ones.  NEVER DO THIS. This is here only because this code needs\n\t  // to continue to work with older versions of Node.js that do not include\n\t  // the prependListener() method. The goal is to eventually remove this hack.\n\t  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n\t}\n\tfunction ReadableState(options, stream, isDuplex) {\n\t  Duplex = Duplex || require_stream_duplex();\n\t  options = options || {};\n\n\t  // Duplex streams are both readable and writable, but share\n\t  // the same options object.\n\t  // However, some cases require setting options to different\n\t  // values for the readable and the writable sides of the duplex stream.\n\t  // These options can be provided separately as readableXXX and writableXXX.\n\t  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n\t  // object stream flag. Used to make read(n) ignore n and to\n\t  // make all the buffer merging and length checks go away\n\t  this.objectMode = !!options.objectMode;\n\t  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n\t  // the point at which it stops calling _read() to fill the buffer\n\t  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\t  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n\t  // A linked list is used to store data chunks instead of an array because the\n\t  // linked list can remove elements from the beginning faster than\n\t  // array.shift()\n\t  this.buffer = new BufferList();\n\t  this.length = 0;\n\t  this.pipes = null;\n\t  this.pipesCount = 0;\n\t  this.flowing = null;\n\t  this.ended = false;\n\t  this.endEmitted = false;\n\t  this.reading = false;\n\n\t  // a flag to be able to tell if the event 'readable'/'data' is emitted\n\t  // immediately, or on a later tick.  We set this to true at first, because\n\t  // any actions that shouldn't happen until \"later\" should generally also\n\t  // not happen before the first read call.\n\t  this.sync = true;\n\n\t  // whenever we return null, then we set a flag to say\n\t  // that we're awaiting a 'readable' event emission.\n\t  this.needReadable = false;\n\t  this.emittedReadable = false;\n\t  this.readableListening = false;\n\t  this.resumeScheduled = false;\n\t  this.paused = true;\n\n\t  // Should close be emitted on destroy. Defaults to true.\n\t  this.emitClose = options.emitClose !== false;\n\n\t  // Should .destroy() be called after 'end' (and potentially 'finish')\n\t  this.autoDestroy = !!options.autoDestroy;\n\n\t  // has it been destroyed\n\t  this.destroyed = false;\n\n\t  // Crypto is kind of old and crusty.  Historically, its default string\n\t  // encoding is 'binary' so we have to make this configurable.\n\t  // Everything else in the universe uses 'utf8', though.\n\t  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n\t  // the number of writers that are awaiting a drain event in .pipe()s\n\t  this.awaitDrain = 0;\n\n\t  // if true, a maybeReadMore has been scheduled\n\t  this.readingMore = false;\n\t  this.decoder = null;\n\t  this.encoding = null;\n\t  if (options.encoding) {\n\t    if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder;\n\t    this.decoder = new StringDecoder(options.encoding);\n\t    this.encoding = options.encoding;\n\t  }\n\t}\n\tfunction Readable(options) {\n\t  Duplex = Duplex || require_stream_duplex();\n\t  if (!(this instanceof Readable)) return new Readable(options);\n\n\t  // Checking for a Stream.Duplex instance is faster here instead of inside\n\t  // the ReadableState constructor, at least with V8 6.5\n\t  var isDuplex = this instanceof Duplex;\n\t  this._readableState = new ReadableState(options, this, isDuplex);\n\n\t  // legacy\n\t  this.readable = true;\n\t  if (options) {\n\t    if (typeof options.read === 'function') this._read = options.read;\n\t    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\t  }\n\t  Stream.call(this);\n\t}\n\tObject.defineProperty(Readable.prototype, 'destroyed', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    if (this._readableState === undefined) {\n\t      return false;\n\t    }\n\t    return this._readableState.destroyed;\n\t  },\n\t  set: function set(value) {\n\t    // we ignore the value if the stream\n\t    // has not been initialized yet\n\t    if (!this._readableState) {\n\t      return;\n\t    }\n\n\t    // backward compatibility, the user is explicitly\n\t    // managing destroyed\n\t    this._readableState.destroyed = value;\n\t  }\n\t});\n\tReadable.prototype.destroy = destroyImpl.destroy;\n\tReadable.prototype._undestroy = destroyImpl.undestroy;\n\tReadable.prototype._destroy = function (err, cb) {\n\t  cb(err);\n\t};\n\n\t// Manually shove something into the read() buffer.\n\t// This returns true if the highWaterMark has not been hit yet,\n\t// similar to how Writable.write() returns true if you should\n\t// write() some more.\n\tReadable.prototype.push = function (chunk, encoding) {\n\t  var state = this._readableState;\n\t  var skipChunkCheck;\n\t  if (!state.objectMode) {\n\t    if (typeof chunk === 'string') {\n\t      encoding = encoding || state.defaultEncoding;\n\t      if (encoding !== state.encoding) {\n\t        chunk = Buffer.from(chunk, encoding);\n\t        encoding = '';\n\t      }\n\t      skipChunkCheck = true;\n\t    }\n\t  } else {\n\t    skipChunkCheck = true;\n\t  }\n\t  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n\t};\n\n\t// Unshift should *always* be something directly out of read()\n\tReadable.prototype.unshift = function (chunk) {\n\t  return readableAddChunk(this, chunk, null, true, false);\n\t};\n\tfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n\t  debug('readableAddChunk', chunk);\n\t  var state = stream._readableState;\n\t  if (chunk === null) {\n\t    state.reading = false;\n\t    onEofChunk(stream, state);\n\t  } else {\n\t    var er;\n\t    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\t    if (er) {\n\t      errorOrDestroy(stream, er);\n\t    } else if (state.objectMode || chunk && chunk.length > 0) {\n\t      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n\t        chunk = _uint8ArrayToBuffer(chunk);\n\t      }\n\t      if (addToFront) {\n\t        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n\t      } else if (state.ended) {\n\t        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n\t      } else if (state.destroyed) {\n\t        return false;\n\t      } else {\n\t        state.reading = false;\n\t        if (state.decoder && !encoding) {\n\t          chunk = state.decoder.write(chunk);\n\t          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n\t        } else {\n\t          addChunk(stream, state, chunk, false);\n\t        }\n\t      }\n\t    } else if (!addToFront) {\n\t      state.reading = false;\n\t      maybeReadMore(stream, state);\n\t    }\n\t  }\n\n\t  // We can push more data if we are below the highWaterMark.\n\t  // Also, if we have no data yet, we can stand some more bytes.\n\t  // This is to work around cases where hwm=0, such as the repl.\n\t  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n\t}\n\tfunction addChunk(stream, state, chunk, addToFront) {\n\t  if (state.flowing && state.length === 0 && !state.sync) {\n\t    state.awaitDrain = 0;\n\t    stream.emit('data', chunk);\n\t  } else {\n\t    // update the buffer info.\n\t    state.length += state.objectMode ? 1 : chunk.length;\n\t    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\t    if (state.needReadable) emitReadable(stream);\n\t  }\n\t  maybeReadMore(stream, state);\n\t}\n\tfunction chunkInvalid(state, chunk) {\n\t  var er;\n\t  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n\t    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n\t  }\n\t  return er;\n\t}\n\tReadable.prototype.isPaused = function () {\n\t  return this._readableState.flowing === false;\n\t};\n\n\t// backwards compatibility.\n\tReadable.prototype.setEncoding = function (enc) {\n\t  if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder;\n\t  var decoder = new StringDecoder(enc);\n\t  this._readableState.decoder = decoder;\n\t  // If setEncoding(null), decoder.encoding equals utf8\n\t  this._readableState.encoding = this._readableState.decoder.encoding;\n\n\t  // Iterate over current buffer to convert already stored Buffers:\n\t  var p = this._readableState.buffer.head;\n\t  var content = '';\n\t  while (p !== null) {\n\t    content += decoder.write(p.data);\n\t    p = p.next;\n\t  }\n\t  this._readableState.buffer.clear();\n\t  if (content !== '') this._readableState.buffer.push(content);\n\t  this._readableState.length = content.length;\n\t  return this;\n\t};\n\n\t// Don't raise the hwm > 1GB\n\tvar MAX_HWM = 0x40000000;\n\tfunction computeNewHighWaterMark(n) {\n\t  if (n >= MAX_HWM) {\n\t    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n\t    n = MAX_HWM;\n\t  } else {\n\t    // Get the next highest power of 2 to prevent increasing hwm excessively in\n\t    // tiny amounts\n\t    n--;\n\t    n |= n >>> 1;\n\t    n |= n >>> 2;\n\t    n |= n >>> 4;\n\t    n |= n >>> 8;\n\t    n |= n >>> 16;\n\t    n++;\n\t  }\n\t  return n;\n\t}\n\n\t// This function is designed to be inlinable, so please take care when making\n\t// changes to the function body.\n\tfunction howMuchToRead(n, state) {\n\t  if (n <= 0 || state.length === 0 && state.ended) return 0;\n\t  if (state.objectMode) return 1;\n\t  if (n !== n) {\n\t    // Only flow one buffer at a time\n\t    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n\t  }\n\t  // If we're asking for more than the current hwm, then raise the hwm.\n\t  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n\t  if (n <= state.length) return n;\n\t  // Don't have enough\n\t  if (!state.ended) {\n\t    state.needReadable = true;\n\t    return 0;\n\t  }\n\t  return state.length;\n\t}\n\n\t// you can override either this method, or the async _read(n) below.\n\tReadable.prototype.read = function (n) {\n\t  debug('read', n);\n\t  n = parseInt(n, 10);\n\t  var state = this._readableState;\n\t  var nOrig = n;\n\t  if (n !== 0) state.emittedReadable = false;\n\n\t  // if we're doing read(0) to trigger a readable event, but we\n\t  // already have a bunch of data in the buffer, then just trigger\n\t  // the 'readable' event and move on.\n\t  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n\t    debug('read: emitReadable', state.length, state.ended);\n\t    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n\t    return null;\n\t  }\n\t  n = howMuchToRead(n, state);\n\n\t  // if we've ended, and we're now clear, then finish it up.\n\t  if (n === 0 && state.ended) {\n\t    if (state.length === 0) endReadable(this);\n\t    return null;\n\t  }\n\n\t  // All the actual chunk generation logic needs to be\n\t  // *below* the call to _read.  The reason is that in certain\n\t  // synthetic stream cases, such as passthrough streams, _read\n\t  // may be a completely synchronous operation which may change\n\t  // the state of the read buffer, providing enough data when\n\t  // before there was *not* enough.\n\t  //\n\t  // So, the steps are:\n\t  // 1. Figure out what the state of things will be after we do\n\t  // a read from the buffer.\n\t  //\n\t  // 2. If that resulting state will trigger a _read, then call _read.\n\t  // Note that this may be asynchronous, or synchronous.  Yes, it is\n\t  // deeply ugly to write APIs this way, but that still doesn't mean\n\t  // that the Readable class should behave improperly, as streams are\n\t  // designed to be sync/async agnostic.\n\t  // Take note if the _read call is sync or async (ie, if the read call\n\t  // has returned yet), so that we know whether or not it's safe to emit\n\t  // 'readable' etc.\n\t  //\n\t  // 3. Actually pull the requested chunks out of the buffer and return.\n\n\t  // if we need a readable event, then we need to do some reading.\n\t  var doRead = state.needReadable;\n\t  debug('need readable', doRead);\n\n\t  // if we currently have less than the highWaterMark, then also read some\n\t  if (state.length === 0 || state.length - n < state.highWaterMark) {\n\t    doRead = true;\n\t    debug('length less than watermark', doRead);\n\t  }\n\n\t  // however, if we've ended, then there's no point, and if we're already\n\t  // reading, then it's unnecessary.\n\t  if (state.ended || state.reading) {\n\t    doRead = false;\n\t    debug('reading or ended', doRead);\n\t  } else if (doRead) {\n\t    debug('do read');\n\t    state.reading = true;\n\t    state.sync = true;\n\t    // if the length is currently zero, then we *need* a readable event.\n\t    if (state.length === 0) state.needReadable = true;\n\t    // call internal read method\n\t    this._read(state.highWaterMark);\n\t    state.sync = false;\n\t    // If _read pushed data synchronously, then `reading` will be false,\n\t    // and we need to re-evaluate how much data we can return to the user.\n\t    if (!state.reading) n = howMuchToRead(nOrig, state);\n\t  }\n\t  var ret;\n\t  if (n > 0) ret = fromList(n, state);else ret = null;\n\t  if (ret === null) {\n\t    state.needReadable = state.length <= state.highWaterMark;\n\t    n = 0;\n\t  } else {\n\t    state.length -= n;\n\t    state.awaitDrain = 0;\n\t  }\n\t  if (state.length === 0) {\n\t    // If we have nothing in the buffer, then we want to know\n\t    // as soon as we *do* get something into the buffer.\n\t    if (!state.ended) state.needReadable = true;\n\n\t    // If we tried to read() past the EOF, then emit end on the next tick.\n\t    if (nOrig !== n && state.ended) endReadable(this);\n\t  }\n\t  if (ret !== null) this.emit('data', ret);\n\t  return ret;\n\t};\n\tfunction onEofChunk(stream, state) {\n\t  debug('onEofChunk');\n\t  if (state.ended) return;\n\t  if (state.decoder) {\n\t    var chunk = state.decoder.end();\n\t    if (chunk && chunk.length) {\n\t      state.buffer.push(chunk);\n\t      state.length += state.objectMode ? 1 : chunk.length;\n\t    }\n\t  }\n\t  state.ended = true;\n\t  if (state.sync) {\n\t    // if we are sync, wait until next tick to emit the data.\n\t    // Otherwise we risk emitting data in the flow()\n\t    // the readable code triggers during a read() call\n\t    emitReadable(stream);\n\t  } else {\n\t    // emit 'readable' now to make sure it gets picked up.\n\t    state.needReadable = false;\n\t    if (!state.emittedReadable) {\n\t      state.emittedReadable = true;\n\t      emitReadable_(stream);\n\t    }\n\t  }\n\t}\n\n\t// Don't emit readable right away in sync mode, because this can trigger\n\t// another read() call => stack overflow.  This way, it might trigger\n\t// a nextTick recursion warning, but that's not so bad.\n\tfunction emitReadable(stream) {\n\t  var state = stream._readableState;\n\t  debug('emitReadable', state.needReadable, state.emittedReadable);\n\t  state.needReadable = false;\n\t  if (!state.emittedReadable) {\n\t    debug('emitReadable', state.flowing);\n\t    state.emittedReadable = true;\n\t    process.nextTick(emitReadable_, stream);\n\t  }\n\t}\n\tfunction emitReadable_(stream) {\n\t  var state = stream._readableState;\n\t  debug('emitReadable_', state.destroyed, state.length, state.ended);\n\t  if (!state.destroyed && (state.length || state.ended)) {\n\t    stream.emit('readable');\n\t    state.emittedReadable = false;\n\t  }\n\n\t  // The stream needs another readable event if\n\t  // 1. It is not flowing, as the flow mechanism will take\n\t  //    care of it.\n\t  // 2. It is not ended.\n\t  // 3. It is below the highWaterMark, so we can schedule\n\t  //    another readable later.\n\t  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n\t  flow(stream);\n\t}\n\n\t// at this point, the user has presumably seen the 'readable' event,\n\t// and called read() to consume some data.  that may have triggered\n\t// in turn another _read(n) call, in which case reading = true if\n\t// it's in progress.\n\t// However, if we're not ended, or reading, and the length < hwm,\n\t// then go ahead and try to read some more preemptively.\n\tfunction maybeReadMore(stream, state) {\n\t  if (!state.readingMore) {\n\t    state.readingMore = true;\n\t    process.nextTick(maybeReadMore_, stream, state);\n\t  }\n\t}\n\tfunction maybeReadMore_(stream, state) {\n\t  // Attempt to read more data if we should.\n\t  //\n\t  // The conditions for reading more data are (one of):\n\t  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n\t  //   is responsible for filling the buffer with enough data if such data\n\t  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n\t  //   we should _not_ attempt to buffer any extra data. We'll get more data\n\t  //   when the stream consumer calls read() instead.\n\t  // - No data in the buffer, and the stream is in flowing mode. In this mode\n\t  //   the loop below is responsible for ensuring read() is called. Failing to\n\t  //   call read here would abort the flow and there's no other mechanism for\n\t  //   continuing the flow if the stream consumer has just subscribed to the\n\t  //   'data' event.\n\t  //\n\t  // In addition to the above conditions to keep reading data, the following\n\t  // conditions prevent the data from being read:\n\t  // - The stream has ended (state.ended).\n\t  // - There is already a pending 'read' operation (state.reading). This is a\n\t  //   case where the the stream has called the implementation defined _read()\n\t  //   method, but they are processing the call asynchronously and have _not_\n\t  //   called push() with new data. In this case we skip performing more\n\t  //   read()s. The execution ends in this method again after the _read() ends\n\t  //   up calling push() with more data.\n\t  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n\t    var len = state.length;\n\t    debug('maybeReadMore read 0');\n\t    stream.read(0);\n\t    if (len === state.length)\n\t      // didn't get any data, stop spinning.\n\t      break;\n\t  }\n\t  state.readingMore = false;\n\t}\n\n\t// abstract method.  to be overridden in specific implementation classes.\n\t// call cb(er, data) where data is <= n in length.\n\t// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n\t// arbitrary, and perhaps not very meaningful.\n\tReadable.prototype._read = function (n) {\n\t  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n\t};\n\tReadable.prototype.pipe = function (dest, pipeOpts) {\n\t  var src = this;\n\t  var state = this._readableState;\n\t  switch (state.pipesCount) {\n\t    case 0:\n\t      state.pipes = dest;\n\t      break;\n\t    case 1:\n\t      state.pipes = [state.pipes, dest];\n\t      break;\n\t    default:\n\t      state.pipes.push(dest);\n\t      break;\n\t  }\n\t  state.pipesCount += 1;\n\t  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\t  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\t  var endFn = doEnd ? onend : unpipe;\n\t  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n\t  dest.on('unpipe', onunpipe);\n\t  function onunpipe(readable, unpipeInfo) {\n\t    debug('onunpipe');\n\t    if (readable === src) {\n\t      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n\t        unpipeInfo.hasUnpiped = true;\n\t        cleanup();\n\t      }\n\t    }\n\t  }\n\t  function onend() {\n\t    debug('onend');\n\t    dest.end();\n\t  }\n\n\t  // when the dest drains, it reduces the awaitDrain counter\n\t  // on the source.  This would be more elegant with a .once()\n\t  // handler in flow(), but adding and removing repeatedly is\n\t  // too slow.\n\t  var ondrain = pipeOnDrain(src);\n\t  dest.on('drain', ondrain);\n\t  var cleanedUp = false;\n\t  function cleanup() {\n\t    debug('cleanup');\n\t    // cleanup event handlers once the pipe is broken\n\t    dest.removeListener('close', onclose);\n\t    dest.removeListener('finish', onfinish);\n\t    dest.removeListener('drain', ondrain);\n\t    dest.removeListener('error', onerror);\n\t    dest.removeListener('unpipe', onunpipe);\n\t    src.removeListener('end', onend);\n\t    src.removeListener('end', unpipe);\n\t    src.removeListener('data', ondata);\n\t    cleanedUp = true;\n\n\t    // if the reader is waiting for a drain event from this\n\t    // specific writer, then it would cause it to never start\n\t    // flowing again.\n\t    // So, if this is awaiting a drain, then we just call it now.\n\t    // If we don't know, then assume that we are waiting for one.\n\t    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n\t  }\n\t  src.on('data', ondata);\n\t  function ondata(chunk) {\n\t    debug('ondata');\n\t    var ret = dest.write(chunk);\n\t    debug('dest.write', ret);\n\t    if (ret === false) {\n\t      // If the user unpiped during `dest.write()`, it is possible\n\t      // to get stuck in a permanently paused state if that write\n\t      // also returned false.\n\t      // => Check whether `dest` is still a piping destination.\n\t      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n\t        debug('false write response, pause', state.awaitDrain);\n\t        state.awaitDrain++;\n\t      }\n\t      src.pause();\n\t    }\n\t  }\n\n\t  // if the dest has an error, then stop piping into it.\n\t  // however, don't suppress the throwing behavior for this.\n\t  function onerror(er) {\n\t    debug('onerror', er);\n\t    unpipe();\n\t    dest.removeListener('error', onerror);\n\t    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n\t  }\n\n\t  // Make sure our error handler is attached before userland ones.\n\t  prependListener(dest, 'error', onerror);\n\n\t  // Both close and finish should trigger unpipe, but only once.\n\t  function onclose() {\n\t    dest.removeListener('finish', onfinish);\n\t    unpipe();\n\t  }\n\t  dest.once('close', onclose);\n\t  function onfinish() {\n\t    debug('onfinish');\n\t    dest.removeListener('close', onclose);\n\t    unpipe();\n\t  }\n\t  dest.once('finish', onfinish);\n\t  function unpipe() {\n\t    debug('unpipe');\n\t    src.unpipe(dest);\n\t  }\n\n\t  // tell the dest that it's being piped to\n\t  dest.emit('pipe', src);\n\n\t  // start the flow if it hasn't been started already.\n\t  if (!state.flowing) {\n\t    debug('pipe resume');\n\t    src.resume();\n\t  }\n\t  return dest;\n\t};\n\tfunction pipeOnDrain(src) {\n\t  return function pipeOnDrainFunctionResult() {\n\t    var state = src._readableState;\n\t    debug('pipeOnDrain', state.awaitDrain);\n\t    if (state.awaitDrain) state.awaitDrain--;\n\t    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n\t      state.flowing = true;\n\t      flow(src);\n\t    }\n\t  };\n\t}\n\tReadable.prototype.unpipe = function (dest) {\n\t  var state = this._readableState;\n\t  var unpipeInfo = {\n\t    hasUnpiped: false\n\t  };\n\n\t  // if we're not piping anywhere, then do nothing.\n\t  if (state.pipesCount === 0) return this;\n\n\t  // just one destination.  most common case.\n\t  if (state.pipesCount === 1) {\n\t    // passed in one, but it's not the right one.\n\t    if (dest && dest !== state.pipes) return this;\n\t    if (!dest) dest = state.pipes;\n\n\t    // got a match.\n\t    state.pipes = null;\n\t    state.pipesCount = 0;\n\t    state.flowing = false;\n\t    if (dest) dest.emit('unpipe', this, unpipeInfo);\n\t    return this;\n\t  }\n\n\t  // slow case. multiple pipe destinations.\n\n\t  if (!dest) {\n\t    // remove all.\n\t    var dests = state.pipes;\n\t    var len = state.pipesCount;\n\t    state.pipes = null;\n\t    state.pipesCount = 0;\n\t    state.flowing = false;\n\t    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n\t      hasUnpiped: false\n\t    });\n\t    return this;\n\t  }\n\n\t  // try to find the right one.\n\t  var index = indexOf(state.pipes, dest);\n\t  if (index === -1) return this;\n\t  state.pipes.splice(index, 1);\n\t  state.pipesCount -= 1;\n\t  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\t  dest.emit('unpipe', this, unpipeInfo);\n\t  return this;\n\t};\n\n\t// set up data events if they are asked for\n\t// Ensure readable listeners eventually get something\n\tReadable.prototype.on = function (ev, fn) {\n\t  var res = Stream.prototype.on.call(this, ev, fn);\n\t  var state = this._readableState;\n\t  if (ev === 'data') {\n\t    // update readableListening so that resume() may be a no-op\n\t    // a few lines down. This is needed to support once('readable').\n\t    state.readableListening = this.listenerCount('readable') > 0;\n\n\t    // Try start flowing on next tick if stream isn't explicitly paused\n\t    if (state.flowing !== false) this.resume();\n\t  } else if (ev === 'readable') {\n\t    if (!state.endEmitted && !state.readableListening) {\n\t      state.readableListening = state.needReadable = true;\n\t      state.flowing = false;\n\t      state.emittedReadable = false;\n\t      debug('on readable', state.length, state.reading);\n\t      if (state.length) {\n\t        emitReadable(this);\n\t      } else if (!state.reading) {\n\t        process.nextTick(nReadingNextTick, this);\n\t      }\n\t    }\n\t  }\n\t  return res;\n\t};\n\tReadable.prototype.addListener = Readable.prototype.on;\n\tReadable.prototype.removeListener = function (ev, fn) {\n\t  var res = Stream.prototype.removeListener.call(this, ev, fn);\n\t  if (ev === 'readable') {\n\t    // We need to check if there is someone still listening to\n\t    // readable and reset the state. However this needs to happen\n\t    // after readable has been emitted but before I/O (nextTick) to\n\t    // support once('readable', fn) cycles. This means that calling\n\t    // resume within the same tick will have no\n\t    // effect.\n\t    process.nextTick(updateReadableListening, this);\n\t  }\n\t  return res;\n\t};\n\tReadable.prototype.removeAllListeners = function (ev) {\n\t  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\t  if (ev === 'readable' || ev === undefined) {\n\t    // We need to check if there is someone still listening to\n\t    // readable and reset the state. However this needs to happen\n\t    // after readable has been emitted but before I/O (nextTick) to\n\t    // support once('readable', fn) cycles. This means that calling\n\t    // resume within the same tick will have no\n\t    // effect.\n\t    process.nextTick(updateReadableListening, this);\n\t  }\n\t  return res;\n\t};\n\tfunction updateReadableListening(self) {\n\t  var state = self._readableState;\n\t  state.readableListening = self.listenerCount('readable') > 0;\n\t  if (state.resumeScheduled && !state.paused) {\n\t    // flowing needs to be set to true now, otherwise\n\t    // the upcoming resume will not flow.\n\t    state.flowing = true;\n\n\t    // crude way to check if we should resume\n\t  } else if (self.listenerCount('data') > 0) {\n\t    self.resume();\n\t  }\n\t}\n\tfunction nReadingNextTick(self) {\n\t  debug('readable nexttick read 0');\n\t  self.read(0);\n\t}\n\n\t// pause() and resume() are remnants of the legacy readable stream API\n\t// If the user uses them, then switch into old mode.\n\tReadable.prototype.resume = function () {\n\t  var state = this._readableState;\n\t  if (!state.flowing) {\n\t    debug('resume');\n\t    // we flow only if there is no one listening\n\t    // for readable, but we still have to call\n\t    // resume()\n\t    state.flowing = !state.readableListening;\n\t    resume(this, state);\n\t  }\n\t  state.paused = false;\n\t  return this;\n\t};\n\tfunction resume(stream, state) {\n\t  if (!state.resumeScheduled) {\n\t    state.resumeScheduled = true;\n\t    process.nextTick(resume_, stream, state);\n\t  }\n\t}\n\tfunction resume_(stream, state) {\n\t  debug('resume', state.reading);\n\t  if (!state.reading) {\n\t    stream.read(0);\n\t  }\n\t  state.resumeScheduled = false;\n\t  stream.emit('resume');\n\t  flow(stream);\n\t  if (state.flowing && !state.reading) stream.read(0);\n\t}\n\tReadable.prototype.pause = function () {\n\t  debug('call pause flowing=%j', this._readableState.flowing);\n\t  if (this._readableState.flowing !== false) {\n\t    debug('pause');\n\t    this._readableState.flowing = false;\n\t    this.emit('pause');\n\t  }\n\t  this._readableState.paused = true;\n\t  return this;\n\t};\n\tfunction flow(stream) {\n\t  var state = stream._readableState;\n\t  debug('flow', state.flowing);\n\t  while (state.flowing && stream.read() !== null);\n\t}\n\n\t// wrap an old-style stream as the async data source.\n\t// This is *not* part of the readable stream interface.\n\t// It is an ugly unfortunate mess of history.\n\tReadable.prototype.wrap = function (stream) {\n\t  var _this = this;\n\t  var state = this._readableState;\n\t  var paused = false;\n\t  stream.on('end', function () {\n\t    debug('wrapped end');\n\t    if (state.decoder && !state.ended) {\n\t      var chunk = state.decoder.end();\n\t      if (chunk && chunk.length) _this.push(chunk);\n\t    }\n\t    _this.push(null);\n\t  });\n\t  stream.on('data', function (chunk) {\n\t    debug('wrapped data');\n\t    if (state.decoder) chunk = state.decoder.write(chunk);\n\n\t    // don't skip over falsy values in objectMode\n\t    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\t    var ret = _this.push(chunk);\n\t    if (!ret) {\n\t      paused = true;\n\t      stream.pause();\n\t    }\n\t  });\n\n\t  // proxy all the other methods.\n\t  // important when wrapping filters and duplexes.\n\t  for (var i in stream) {\n\t    if (this[i] === undefined && typeof stream[i] === 'function') {\n\t      this[i] = function methodWrap(method) {\n\t        return function methodWrapReturnFunction() {\n\t          return stream[method].apply(stream, arguments);\n\t        };\n\t      }(i);\n\t    }\n\t  }\n\n\t  // proxy certain important events.\n\t  for (var n = 0; n < kProxyEvents.length; n++) {\n\t    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n\t  }\n\n\t  // when we try to consume some more bytes, simply unpause the\n\t  // underlying stream.\n\t  this._read = function (n) {\n\t    debug('wrapped _read', n);\n\t    if (paused) {\n\t      paused = false;\n\t      stream.resume();\n\t    }\n\t  };\n\t  return this;\n\t};\n\tif (typeof Symbol === 'function') {\n\t  Readable.prototype[Symbol.asyncIterator] = function () {\n\t    if (createReadableStreamAsyncIterator === undefined) {\n\t      createReadableStreamAsyncIterator = requireAsync_iterator();\n\t    }\n\t    return createReadableStreamAsyncIterator(this);\n\t  };\n\t}\n\tObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._readableState.highWaterMark;\n\t  }\n\t});\n\tObject.defineProperty(Readable.prototype, 'readableBuffer', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._readableState && this._readableState.buffer;\n\t  }\n\t});\n\tObject.defineProperty(Readable.prototype, 'readableFlowing', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._readableState.flowing;\n\t  },\n\t  set: function set(state) {\n\t    if (this._readableState) {\n\t      this._readableState.flowing = state;\n\t    }\n\t  }\n\t});\n\n\t// exposed for testing purposes only.\n\tReadable._fromList = fromList;\n\tObject.defineProperty(Readable.prototype, 'readableLength', {\n\t  // making it explicit this property is not enumerable\n\t  // because otherwise some prototype manipulation in\n\t  // userland will fail\n\t  enumerable: false,\n\t  get: function get() {\n\t    return this._readableState.length;\n\t  }\n\t});\n\n\t// Pluck off n bytes from an array of buffers.\n\t// Length is the combined lengths of all the buffers in the list.\n\t// This function is designed to be inlinable, so please take care when making\n\t// changes to the function body.\n\tfunction fromList(n, state) {\n\t  // nothing buffered\n\t  if (state.length === 0) return null;\n\t  var ret;\n\t  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n\t    // read it all, truncate the list\n\t    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n\t    state.buffer.clear();\n\t  } else {\n\t    // read part of list\n\t    ret = state.buffer.consume(n, state.decoder);\n\t  }\n\t  return ret;\n\t}\n\tfunction endReadable(stream) {\n\t  var state = stream._readableState;\n\t  debug('endReadable', state.endEmitted);\n\t  if (!state.endEmitted) {\n\t    state.ended = true;\n\t    process.nextTick(endReadableNT, state, stream);\n\t  }\n\t}\n\tfunction endReadableNT(state, stream) {\n\t  debug('endReadableNT', state.endEmitted, state.length);\n\n\t  // Check that we didn't get one last unshift.\n\t  if (!state.endEmitted && state.length === 0) {\n\t    state.endEmitted = true;\n\t    stream.readable = false;\n\t    stream.emit('end');\n\t    if (state.autoDestroy) {\n\t      // In case of duplex streams we need a way to detect\n\t      // if the writable side is ready for autoDestroy as well\n\t      var wState = stream._writableState;\n\t      if (!wState || wState.autoDestroy && wState.finished) {\n\t        stream.destroy();\n\t      }\n\t    }\n\t  }\n\t}\n\tif (typeof Symbol === 'function') {\n\t  Readable.from = function (iterable, opts) {\n\t    if (from === undefined) {\n\t      from = requireFrom();\n\t    }\n\t    return from(Readable, iterable, opts);\n\t  };\n\t}\n\tfunction indexOf(xs, x) {\n\t  for (var i = 0, l = xs.length; i < l; i++) {\n\t    if (xs[i] === x) return i;\n\t  }\n\t  return -1;\n\t}\n\treturn _stream_readable;\n}\n\nvar _stream_transform;\nvar hasRequired_stream_transform;\n\nfunction require_stream_transform () {\n\tif (hasRequired_stream_transform) return _stream_transform;\n\thasRequired_stream_transform = 1;\n\n\t_stream_transform = Transform;\n\tvar _require$codes = requireErrors().codes,\n\t  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n\t  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n\t  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n\t  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\tvar Duplex = require_stream_duplex();\n\trequireInherits()(Transform, Duplex);\n\tfunction afterTransform(er, data) {\n\t  var ts = this._transformState;\n\t  ts.transforming = false;\n\t  var cb = ts.writecb;\n\t  if (cb === null) {\n\t    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n\t  }\n\t  ts.writechunk = null;\n\t  ts.writecb = null;\n\t  if (data != null)\n\t    // single equals check for both `null` and `undefined`\n\t    this.push(data);\n\t  cb(er);\n\t  var rs = this._readableState;\n\t  rs.reading = false;\n\t  if (rs.needReadable || rs.length < rs.highWaterMark) {\n\t    this._read(rs.highWaterMark);\n\t  }\n\t}\n\tfunction Transform(options) {\n\t  if (!(this instanceof Transform)) return new Transform(options);\n\t  Duplex.call(this, options);\n\t  this._transformState = {\n\t    afterTransform: afterTransform.bind(this),\n\t    needTransform: false,\n\t    transforming: false,\n\t    writecb: null,\n\t    writechunk: null,\n\t    writeencoding: null\n\t  };\n\n\t  // start out asking for a readable event once data is transformed.\n\t  this._readableState.needReadable = true;\n\n\t  // we have implemented the _read method, and done the other things\n\t  // that Readable wants before the first _read call, so unset the\n\t  // sync guard flag.\n\t  this._readableState.sync = false;\n\t  if (options) {\n\t    if (typeof options.transform === 'function') this._transform = options.transform;\n\t    if (typeof options.flush === 'function') this._flush = options.flush;\n\t  }\n\n\t  // When the writable side finishes, then flush out anything remaining.\n\t  this.on('prefinish', prefinish);\n\t}\n\tfunction prefinish() {\n\t  var _this = this;\n\t  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n\t    this._flush(function (er, data) {\n\t      done(_this, er, data);\n\t    });\n\t  } else {\n\t    done(this, null, null);\n\t  }\n\t}\n\tTransform.prototype.push = function (chunk, encoding) {\n\t  this._transformState.needTransform = false;\n\t  return Duplex.prototype.push.call(this, chunk, encoding);\n\t};\n\n\t// This is the part where you do stuff!\n\t// override this function in implementation classes.\n\t// 'chunk' is an input chunk.\n\t//\n\t// Call `push(newChunk)` to pass along transformed output\n\t// to the readable side.  You may call 'push' zero or more times.\n\t//\n\t// Call `cb(err)` when you are done with this chunk.  If you pass\n\t// an error, then that'll put the hurt on the whole operation.  If you\n\t// never call cb(), then you'll never get another chunk.\n\tTransform.prototype._transform = function (chunk, encoding, cb) {\n\t  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n\t};\n\tTransform.prototype._write = function (chunk, encoding, cb) {\n\t  var ts = this._transformState;\n\t  ts.writecb = cb;\n\t  ts.writechunk = chunk;\n\t  ts.writeencoding = encoding;\n\t  if (!ts.transforming) {\n\t    var rs = this._readableState;\n\t    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n\t  }\n\t};\n\n\t// Doesn't matter what the args are here.\n\t// _transform does all the work.\n\t// That we got here means that the readable side wants more data.\n\tTransform.prototype._read = function (n) {\n\t  var ts = this._transformState;\n\t  if (ts.writechunk !== null && !ts.transforming) {\n\t    ts.transforming = true;\n\t    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n\t  } else {\n\t    // mark that we need a transform, so that any data that comes in\n\t    // will get processed, now that we've asked for it.\n\t    ts.needTransform = true;\n\t  }\n\t};\n\tTransform.prototype._destroy = function (err, cb) {\n\t  Duplex.prototype._destroy.call(this, err, function (err2) {\n\t    cb(err2);\n\t  });\n\t};\n\tfunction done(stream, er, data) {\n\t  if (er) return stream.emit('error', er);\n\t  if (data != null)\n\t    // single equals check for both `null` and `undefined`\n\t    stream.push(data);\n\n\t  // TODO(BridgeAR): Write a test for these two error cases\n\t  // if there's nothing in the write buffer, then that means\n\t  // that nothing more will ever be provided\n\t  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n\t  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n\t  return stream.push(null);\n\t}\n\treturn _stream_transform;\n}\n\nvar _stream_passthrough;\nvar hasRequired_stream_passthrough;\n\nfunction require_stream_passthrough () {\n\tif (hasRequired_stream_passthrough) return _stream_passthrough;\n\thasRequired_stream_passthrough = 1;\n\n\t_stream_passthrough = PassThrough;\n\tvar Transform = require_stream_transform();\n\trequireInherits()(PassThrough, Transform);\n\tfunction PassThrough(options) {\n\t  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\t  Transform.call(this, options);\n\t}\n\tPassThrough.prototype._transform = function (chunk, encoding, cb) {\n\t  cb(null, chunk);\n\t};\n\treturn _stream_passthrough;\n}\n\nvar pipeline_1;\nvar hasRequiredPipeline;\n\nfunction requirePipeline () {\n\tif (hasRequiredPipeline) return pipeline_1;\n\thasRequiredPipeline = 1;\n\n\tvar eos;\n\tfunction once(callback) {\n\t  var called = false;\n\t  return function () {\n\t    if (called) return;\n\t    called = true;\n\t    callback.apply(void 0, arguments);\n\t  };\n\t}\n\tvar _require$codes = requireErrors().codes,\n\t  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n\t  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\tfunction noop(err) {\n\t  // Rethrow the error if it exists to avoid swallowing it\n\t  if (err) throw err;\n\t}\n\tfunction isRequest(stream) {\n\t  return stream.setHeader && typeof stream.abort === 'function';\n\t}\n\tfunction destroyer(stream, reading, writing, callback) {\n\t  callback = once(callback);\n\t  var closed = false;\n\t  stream.on('close', function () {\n\t    closed = true;\n\t  });\n\t  if (eos === undefined) eos = requireEndOfStream();\n\t  eos(stream, {\n\t    readable: reading,\n\t    writable: writing\n\t  }, function (err) {\n\t    if (err) return callback(err);\n\t    closed = true;\n\t    callback();\n\t  });\n\t  var destroyed = false;\n\t  return function (err) {\n\t    if (closed) return;\n\t    if (destroyed) return;\n\t    destroyed = true;\n\n\t    // request.destroy just do .end - .abort is what we want\n\t    if (isRequest(stream)) return stream.abort();\n\t    if (typeof stream.destroy === 'function') return stream.destroy();\n\t    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n\t  };\n\t}\n\tfunction call(fn) {\n\t  fn();\n\t}\n\tfunction pipe(from, to) {\n\t  return from.pipe(to);\n\t}\n\tfunction popCallback(streams) {\n\t  if (!streams.length) return noop;\n\t  if (typeof streams[streams.length - 1] !== 'function') return noop;\n\t  return streams.pop();\n\t}\n\tfunction pipeline() {\n\t  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n\t    streams[_key] = arguments[_key];\n\t  }\n\t  var callback = popCallback(streams);\n\t  if (Array.isArray(streams[0])) streams = streams[0];\n\t  if (streams.length < 2) {\n\t    throw new ERR_MISSING_ARGS('streams');\n\t  }\n\t  var error;\n\t  var destroys = streams.map(function (stream, i) {\n\t    var reading = i < streams.length - 1;\n\t    var writing = i > 0;\n\t    return destroyer(stream, reading, writing, function (err) {\n\t      if (!error) error = err;\n\t      if (err) destroys.forEach(call);\n\t      if (reading) return;\n\t      destroys.forEach(call);\n\t      callback(error);\n\t    });\n\t  });\n\t  return streams.reduce(pipe);\n\t}\n\tpipeline_1 = pipeline;\n\treturn pipeline_1;\n}\n\n(function (module, exports) {\n\tvar Stream = require$$0__default[\"default\"];\n\tif (process.env.READABLE_STREAM === 'disable' && Stream) {\n\t  module.exports = Stream.Readable;\n\t  Object.assign(module.exports, Stream);\n\t  module.exports.Stream = Stream;\n\t} else {\n\t  exports = module.exports = require_stream_readable();\n\t  exports.Stream = Stream || exports;\n\t  exports.Readable = exports;\n\t  exports.Writable = require_stream_writable();\n\t  exports.Duplex = require_stream_duplex();\n\t  exports.Transform = require_stream_transform();\n\t  exports.PassThrough = require_stream_passthrough();\n\t  exports.finished = requireEndOfStream();\n\t  exports.pipeline = requirePipeline();\n\t}\n} (readable, readable.exports));\n\nObject.defineProperty(lib, \"__esModule\", { value: true });\nlib.ReadableWebToNodeStream = void 0;\nconst readable_stream_1 = readable.exports;\n/**\n * Converts a Web-API stream into Node stream.Readable class\n * Node stream readable: https://nodejs.org/api/stream.html#stream_readable_streams\n * Web API readable-stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * Node readable stream: https://nodejs.org/api/stream.html#stream_readable_streams\n */\nclass ReadableWebToNodeStream extends readable_stream_1.Readable {\n    /**\n     *\n     * @param stream Readable​Stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n     */\n    constructor(stream) {\n        super();\n        this.bytesRead = 0;\n        this.released = false;\n        this.reader = stream.getReader();\n    }\n    /**\n     * Implementation of readable._read(size).\n     * When readable._read() is called, if data is available from the resource,\n     * the implementation should begin pushing that data into the read queue\n     * https://nodejs.org/api/stream.html#stream_readable_read_size_1\n     */\n    async _read() {\n        // Should start pushing data into the queue\n        // Read data from the underlying Web-API-readable-stream\n        if (this.released) {\n            this.push(null); // Signal EOF\n            return;\n        }\n        this.pendingRead = this.reader.read();\n        const data = await this.pendingRead;\n        // clear the promise before pushing pushing new data to the queue and allow sequential calls to _read()\n        delete this.pendingRead;\n        if (data.done || this.released) {\n            this.push(null); // Signal EOF\n        }\n        else {\n            this.bytesRead += data.value.length;\n            this.push(data.value); // Push new data to the queue\n        }\n    }\n    /**\n     * If there is no unresolved read call to Web-API Readable​Stream immediately returns;\n     * otherwise will wait until the read is resolved.\n     */\n    async waitForReadToComplete() {\n        if (this.pendingRead) {\n            await this.pendingRead;\n        }\n    }\n    /**\n     * Close wrapper\n     */\n    async close() {\n        await this.syncAndRelease();\n    }\n    async syncAndRelease() {\n        this.released = true;\n        await this.waitForReadToComplete();\n        await this.reader.releaseLock();\n    }\n}\nlib.ReadableWebToNodeStream = ReadableWebToNodeStream;\n\n// Primitive types\nfunction dv(array) {\n    return new DataView(array.buffer, array.byteOffset);\n}\n/**\n * 8-bit unsigned integer\n */\nconst UINT8 = {\n    len: 1,\n    get(array, offset) {\n        return dv(array).getUint8(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint8(offset, value);\n        return offset + 1;\n    }\n};\n/**\n * 16-bit unsigned integer, Little Endian byte order\n */\nconst UINT16_LE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getUint16(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setUint16(offset, value, true);\n        return offset + 2;\n    }\n};\n/**\n * 16-bit unsigned integer, Big Endian byte order\n */\nconst UINT16_BE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getUint16(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint16(offset, value);\n        return offset + 2;\n    }\n};\n/**\n * 32-bit unsigned integer, Little Endian byte order\n */\nconst UINT32_LE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getUint32(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setUint32(offset, value, true);\n        return offset + 4;\n    }\n};\n/**\n * 32-bit unsigned integer, Big Endian byte order\n */\nconst UINT32_BE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getUint32(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint32(offset, value);\n        return offset + 4;\n    }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nconst INT32_BE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getInt32(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setInt32(offset, value);\n        return offset + 4;\n    }\n};\n/**\n * 64-bit unsigned integer, Little Endian byte order\n */\nconst UINT64_LE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigUint64(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setBigUint64(offset, value, true);\n        return offset + 8;\n    }\n};\n/**\n * Consume a fixed number of bytes from the stream and return a string with a specified encoding.\n */\nclass StringType {\n    constructor(len, encoding) {\n        this.len = len;\n        this.encoding = encoding;\n    }\n    get(uint8Array, offset) {\n        return node_buffer.Buffer.from(uint8Array).toString(this.encoding, offset, offset + this.len);\n    }\n}\n\nconst defaultMessages = 'End-Of-Stream';\n/**\n * Thrown on read operation of the end of file or stream has been reached\n */\nclass EndOfStreamError extends Error {\n    constructor() {\n        super(defaultMessages);\n    }\n}\n\n/**\n * Core tokenizer\n */\nclass AbstractTokenizer {\n    constructor(fileInfo) {\n        /**\n         * Tokenizer-stream position\n         */\n        this.position = 0;\n        this.numBuffer = new Uint8Array(8);\n        this.fileInfo = fileInfo ? fileInfo : {};\n    }\n    /**\n     * Read a token from the tokenizer-stream\n     * @param token - The token to read\n     * @param position - If provided, the desired position in the tokenizer-stream\n     * @returns Promise with token data\n     */\n    async readToken(token, position = this.position) {\n        const uint8Array = node_buffer.Buffer.alloc(token.len);\n        const len = await this.readBuffer(uint8Array, { position });\n        if (len < token.len)\n            throw new EndOfStreamError();\n        return token.get(uint8Array, 0);\n    }\n    /**\n     * Peek a token from the tokenizer-stream.\n     * @param token - Token to peek from the tokenizer-stream.\n     * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.\n     * @returns Promise with token data\n     */\n    async peekToken(token, position = this.position) {\n        const uint8Array = node_buffer.Buffer.alloc(token.len);\n        const len = await this.peekBuffer(uint8Array, { position });\n        if (len < token.len)\n            throw new EndOfStreamError();\n        return token.get(uint8Array, 0);\n    }\n    /**\n     * Read a numeric token from the stream\n     * @param token - Numeric token\n     * @returns Promise with number\n     */\n    async readNumber(token) {\n        const len = await this.readBuffer(this.numBuffer, { length: token.len });\n        if (len < token.len)\n            throw new EndOfStreamError();\n        return token.get(this.numBuffer, 0);\n    }\n    /**\n     * Read a numeric token from the stream\n     * @param token - Numeric token\n     * @returns Promise with number\n     */\n    async peekNumber(token) {\n        const len = await this.peekBuffer(this.numBuffer, { length: token.len });\n        if (len < token.len)\n            throw new EndOfStreamError();\n        return token.get(this.numBuffer, 0);\n    }\n    /**\n     * Ignore number of bytes, advances the pointer in under tokenizer-stream.\n     * @param length - Number of bytes to ignore\n     * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available\n     */\n    async ignore(length) {\n        if (this.fileInfo.size !== undefined) {\n            const bytesLeft = this.fileInfo.size - this.position;\n            if (length > bytesLeft) {\n                this.position += bytesLeft;\n                return bytesLeft;\n            }\n        }\n        this.position += length;\n        return length;\n    }\n    async close() {\n        // empty\n    }\n    normalizeOptions(uint8Array, options) {\n        if (options && options.position !== undefined && options.position < this.position) {\n            throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\n        }\n        if (options) {\n            return {\n                mayBeLess: options.mayBeLess === true,\n                offset: options.offset ? options.offset : 0,\n                length: options.length ? options.length : (uint8Array.length - (options.offset ? options.offset : 0)),\n                position: options.position ? options.position : this.position\n            };\n        }\n        return {\n            mayBeLess: false,\n            offset: 0,\n            length: uint8Array.length,\n            position: this.position\n        };\n    }\n}\n\nclass BufferTokenizer extends AbstractTokenizer {\n    /**\n     * Construct BufferTokenizer\n     * @param uint8Array - Uint8Array to tokenize\n     * @param fileInfo - Pass additional file information to the tokenizer\n     */\n    constructor(uint8Array, fileInfo) {\n        super(fileInfo);\n        this.uint8Array = uint8Array;\n        this.fileInfo.size = this.fileInfo.size ? this.fileInfo.size : uint8Array.length;\n    }\n    /**\n     * Read buffer from tokenizer\n     * @param uint8Array - Uint8Array to tokenize\n     * @param options - Read behaviour options\n     * @returns {Promise<number>}\n     */\n    async readBuffer(uint8Array, options) {\n        if (options && options.position) {\n            if (options.position < this.position) {\n                throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\n            }\n            this.position = options.position;\n        }\n        const bytesRead = await this.peekBuffer(uint8Array, options);\n        this.position += bytesRead;\n        return bytesRead;\n    }\n    /**\n     * Peek (read ahead) buffer from tokenizer\n     * @param uint8Array\n     * @param options - Read behaviour options\n     * @returns {Promise<number>}\n     */\n    async peekBuffer(uint8Array, options) {\n        const normOptions = this.normalizeOptions(uint8Array, options);\n        const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);\n        if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {\n            throw new EndOfStreamError();\n        }\n        else {\n            uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read), normOptions.offset);\n            return bytes2read;\n        }\n    }\n    async close() {\n        // empty\n    }\n}\n\n/**\n * Construct ReadStreamTokenizer from given Buffer.\n * @param uint8Array - Uint8Array to tokenize\n * @param fileInfo - Pass additional file information to the tokenizer\n * @returns BufferTokenizer\n */\nfunction fromBuffer(uint8Array, fileInfo) {\n    return new BufferTokenizer(uint8Array, fileInfo);\n}\n\nfunction stringToBytes(string) {\n\treturn [...string].map(character => character.charCodeAt(0));\n}\n\n/**\nChecks whether the TAR checksum is valid.\n\n@param {Buffer} buffer - The TAR header `[offset ... offset + 512]`.\n@param {number} offset - TAR header offset.\n@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.\n*/\nfunction tarHeaderChecksumMatches(buffer, offset = 0) {\n\tconst readSum = Number.parseInt(buffer.toString('utf8', 148, 154).replace(/\\0.*$/, '').trim(), 8); // Read sum in header\n\tif (Number.isNaN(readSum)) {\n\t\treturn false;\n\t}\n\n\tlet sum = 8 * 0x20; // Initialize signed bit sum\n\n\tfor (let i = offset; i < offset + 148; i++) {\n\t\tsum += buffer[i];\n\t}\n\n\tfor (let i = offset + 156; i < offset + 512; i++) {\n\t\tsum += buffer[i];\n\t}\n\n\treturn readSum === sum;\n}\n\n/**\nID3 UINT32 sync-safe tokenizer token.\n28 bits (representing up to 256MB) integer, the msb is 0 to avoid \"false syncsignals\".\n*/\nconst uint32SyncSafeToken = {\n\tget: (buffer, offset) => (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21),\n\tlen: 4,\n};\n\nconst minimumBytes = 4100; // A fair amount of file-types are detectable within this range.\n\nasync function fileTypeFromBuffer(input) {\n\tif (!(input instanceof Uint8Array || input instanceof ArrayBuffer)) {\n\t\tthrow new TypeError(`Expected the \\`input\\` argument to be of type \\`Uint8Array\\` or \\`Buffer\\` or \\`ArrayBuffer\\`, got \\`${typeof input}\\``);\n\t}\n\n\tconst buffer = input instanceof Uint8Array ? input : new Uint8Array(input);\n\n\tif (!(buffer && buffer.length > 1)) {\n\t\treturn;\n\t}\n\n\treturn fileTypeFromTokenizer(fromBuffer(buffer));\n}\n\nfunction _check(buffer, headers, options) {\n\toptions = {\n\t\toffset: 0,\n\t\t...options,\n\t};\n\n\tfor (const [index, header] of headers.entries()) {\n\t\t// If a bitmask is set\n\t\tif (options.mask) {\n\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\tif (header !== (options.mask[index] & buffer[index + options.offset])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (header !== buffer[index + options.offset]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nasync function fileTypeFromTokenizer(tokenizer) {\n\ttry {\n\t\treturn new FileTypeParser().parse(tokenizer);\n\t} catch (error) {\n\t\tif (!(error instanceof EndOfStreamError)) {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nclass FileTypeParser {\n\tcheck(header, options) {\n\t\treturn _check(this.buffer, header, options);\n\t}\n\n\tcheckString(header, options) {\n\t\treturn this.check(stringToBytes(header), options);\n\t}\n\n\tasync parse(tokenizer) {\n\t\tthis.buffer = node_buffer.Buffer.alloc(minimumBytes);\n\n\t\t// Keep reading until EOF if the file size is unknown.\n\t\tif (tokenizer.fileInfo.size === undefined) {\n\t\t\ttokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;\n\t\t}\n\n\t\tthis.tokenizer = tokenizer;\n\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: 12, mayBeLess: true});\n\n\t\t// -- 2-byte signatures --\n\n\t\tif (this.check([0x42, 0x4D])) {\n\t\t\treturn {\n\t\t\t\text: 'bmp',\n\t\t\t\tmime: 'image/bmp',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x0B, 0x77])) {\n\t\t\treturn {\n\t\t\t\text: 'ac3',\n\t\t\t\tmime: 'audio/vnd.dolby.dd-raw',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x78, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'dmg',\n\t\t\t\tmime: 'application/x-apple-diskimage',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4D, 0x5A])) {\n\t\t\treturn {\n\t\t\t\text: 'exe',\n\t\t\t\tmime: 'application/x-msdownload',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x25, 0x21])) {\n\t\t\tawait tokenizer.peekBuffer(this.buffer, {length: 24, mayBeLess: true});\n\n\t\t\tif (\n\t\t\t\tthis.checkString('PS-Adobe-', {offset: 2})\n\t\t\t\t&& this.checkString(' EPSF-', {offset: 14})\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'eps',\n\t\t\t\t\tmime: 'application/eps',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'ps',\n\t\t\t\tmime: 'application/postscript',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x1F, 0xA0])\n\t\t\t|| this.check([0x1F, 0x9D])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'Z',\n\t\t\t\tmime: 'application/x-compress',\n\t\t\t};\n\t\t}\n\n\t\t// -- 3-byte signatures --\n\n\t\tif (this.check([0xEF, 0xBB, 0xBF])) { // UTF-8-BOM\n\t\t\t// Strip off UTF-8-BOM\n\t\t\tthis.tokenizer.ignore(3);\n\t\t\treturn this.parse(tokenizer);\n\t\t}\n\n\t\tif (this.check([0x47, 0x49, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'gif',\n\t\t\t\tmime: 'image/gif',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFF, 0xD8, 0xFF])) {\n\t\t\treturn {\n\t\t\t\text: 'jpg',\n\t\t\t\tmime: 'image/jpeg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x49, 0x49, 0xBC])) {\n\t\t\treturn {\n\t\t\t\text: 'jxr',\n\t\t\t\tmime: 'image/vnd.ms-photo',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x1F, 0x8B, 0x8])) {\n\t\t\treturn {\n\t\t\t\text: 'gz',\n\t\t\t\tmime: 'application/gzip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x5A, 0x68])) {\n\t\t\treturn {\n\t\t\t\text: 'bz2',\n\t\t\t\tmime: 'application/x-bzip2',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('ID3')) {\n\t\t\tawait tokenizer.ignore(6); // Skip ID3 header until the header size\n\t\t\tconst id3HeaderLength = await tokenizer.readToken(uint32SyncSafeToken);\n\t\t\tif (tokenizer.position + id3HeaderLength > tokenizer.fileInfo.size) {\n\t\t\t\t// Guess file type based on ID3 header for backward compatibility\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp3',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(id3HeaderLength);\n\t\t\treturn fileTypeFromTokenizer(tokenizer); // Skip ID3 header, recursion\n\t\t}\n\n\t\t// Musepack, SV7\n\t\tif (this.checkString('MP+')) {\n\t\t\treturn {\n\t\t\t\text: 'mpc',\n\t\t\t\tmime: 'audio/x-musepack',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\t(this.buffer[0] === 0x43 || this.buffer[0] === 0x46)\n\t\t\t&& this.check([0x57, 0x53], {offset: 1})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'swf',\n\t\t\t\tmime: 'application/x-shockwave-flash',\n\t\t\t};\n\t\t}\n\n\t\t// -- 4-byte signatures --\n\n\t\tif (this.checkString('FLIF')) {\n\t\t\treturn {\n\t\t\t\text: 'flif',\n\t\t\t\tmime: 'image/flif',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('8BPS')) {\n\t\t\treturn {\n\t\t\t\text: 'psd',\n\t\t\t\tmime: 'image/vnd.adobe.photoshop',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('WEBP', {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'webp',\n\t\t\t\tmime: 'image/webp',\n\t\t\t};\n\t\t}\n\n\t\t// Musepack, SV8\n\t\tif (this.checkString('MPCK')) {\n\t\t\treturn {\n\t\t\t\text: 'mpc',\n\t\t\t\tmime: 'audio/x-musepack',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('FORM')) {\n\t\t\treturn {\n\t\t\t\text: 'aif',\n\t\t\t\tmime: 'audio/aiff',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('icns', {offset: 0})) {\n\t\t\treturn {\n\t\t\t\text: 'icns',\n\t\t\t\tmime: 'image/icns',\n\t\t\t};\n\t\t}\n\n\t\t// Zip-based file formats\n\t\t// Need to be before the `zip` check\n\t\tif (this.check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature\n\t\t\ttry {\n\t\t\t\twhile (tokenizer.position + 30 < tokenizer.fileInfo.size) {\n\t\t\t\t\tawait tokenizer.readBuffer(this.buffer, {length: 30});\n\n\t\t\t\t\t// https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers\n\t\t\t\t\tconst zipHeader = {\n\t\t\t\t\t\tcompressedSize: this.buffer.readUInt32LE(18),\n\t\t\t\t\t\tuncompressedSize: this.buffer.readUInt32LE(22),\n\t\t\t\t\t\tfilenameLength: this.buffer.readUInt16LE(26),\n\t\t\t\t\t\textraFieldLength: this.buffer.readUInt16LE(28),\n\t\t\t\t\t};\n\n\t\t\t\t\tzipHeader.filename = await tokenizer.readToken(new StringType(zipHeader.filenameLength, 'utf-8'));\n\t\t\t\t\tawait tokenizer.ignore(zipHeader.extraFieldLength);\n\n\t\t\t\t\t// Assumes signed `.xpi` from addons.mozilla.org\n\t\t\t\t\tif (zipHeader.filename === 'META-INF/mozilla.rsa') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'xpi',\n\t\t\t\t\t\t\tmime: 'application/x-xpinstall',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (zipHeader.filename.endsWith('.rels') || zipHeader.filename.endsWith('.xml')) {\n\t\t\t\t\t\tconst type = zipHeader.filename.split('/')[0];\n\t\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\t\tcase '_rels':\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'word':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\text: 'docx',\n\t\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'ppt':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\text: 'pptx',\n\t\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'xl':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (zipHeader.filename.startsWith('xl/')) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (zipHeader.filename.startsWith('3D/') && zipHeader.filename.endsWith('.model')) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: '3mf',\n\t\t\t\t\t\t\tmime: 'model/3mf',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// The docx, xlsx and pptx file types extend the Office Open XML file format:\n\t\t\t\t\t// https://en.wikipedia.org/wiki/Office_Open_XML_file_formats\n\t\t\t\t\t// We look for:\n\t\t\t\t\t// - one entry named '[Content_Types].xml' or '_rels/.rels',\n\t\t\t\t\t// - one entry indicating specific type of file.\n\t\t\t\t\t// MS Office, OpenOffice and LibreOffice may put the parts in different order, so the check should not rely on it.\n\t\t\t\t\tif (zipHeader.filename === 'mimetype' && zipHeader.compressedSize === zipHeader.uncompressedSize) {\n\t\t\t\t\t\tconst mimeType = (await tokenizer.readToken(new StringType(zipHeader.compressedSize, 'utf-8'))).trim();\n\n\t\t\t\t\t\tswitch (mimeType) {\n\t\t\t\t\t\t\tcase 'application/epub+zip':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\text: 'epub',\n\t\t\t\t\t\t\t\t\tmime: 'application/epub+zip',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.text':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\text: 'odt',\n\t\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.text',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.spreadsheet':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\text: 'ods',\n\t\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.spreadsheet',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.presentation':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\text: 'odp',\n\t\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.presentation',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Try to find next header manually when current one is corrupted\n\t\t\t\t\tif (zipHeader.compressedSize === 0) {\n\t\t\t\t\t\tlet nextHeaderIndex = -1;\n\n\t\t\t\t\t\twhile (nextHeaderIndex < 0 && (tokenizer.position < tokenizer.fileInfo.size)) {\n\t\t\t\t\t\t\tawait tokenizer.peekBuffer(this.buffer, {mayBeLess: true});\n\n\t\t\t\t\t\t\tnextHeaderIndex = this.buffer.indexOf('504B0304', 0, 'hex');\n\t\t\t\t\t\t\t// Move position to the next header if found, skip the whole buffer otherwise\n\t\t\t\t\t\t\tawait tokenizer.ignore(nextHeaderIndex >= 0 ? nextHeaderIndex : this.buffer.length);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait tokenizer.ignore(zipHeader.compressedSize);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof EndOfStreamError)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'zip',\n\t\t\t\tmime: 'application/zip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('OggS')) {\n\t\t\t// This is an OGG container\n\t\t\tawait tokenizer.ignore(28);\n\t\t\tconst type = node_buffer.Buffer.alloc(8);\n\t\t\tawait tokenizer.readBuffer(type);\n\n\t\t\t// Needs to be before `ogg` check\n\t\t\tif (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'opus',\n\t\t\t\t\tmime: 'audio/opus',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If ' theora' in header.\n\t\t\tif (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogv',\n\t\t\t\t\tmime: 'video/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If '\\x01video' in header.\n\t\t\tif (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogm',\n\t\t\t\t\tmime: 'video/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If ' FLAC' in header  https://xiph.org/flac/faq.html\n\t\t\tif (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'oga',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// 'Speex  ' in header https://en.wikipedia.org/wiki/Speex\n\t\t\tif (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'spx',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If '\\x01vorbis' in header\n\t\t\tif (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogg',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\t\treturn {\n\t\t\t\text: 'ogx',\n\t\t\t\tmime: 'application/ogg',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x50, 0x4B])\n\t\t\t&& (this.buffer[2] === 0x3 || this.buffer[2] === 0x5 || this.buffer[2] === 0x7)\n\t\t\t&& (this.buffer[3] === 0x4 || this.buffer[3] === 0x6 || this.buffer[3] === 0x8)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'zip',\n\t\t\t\tmime: 'application/zip',\n\t\t\t};\n\t\t}\n\n\t\t//\n\n\t\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\t\t// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.\n\t\t// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n\t\t// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n\t\tif (\n\t\t\tthis.checkString('ftyp', {offset: 4})\n\t\t\t&& (this.buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?\n\t\t) {\n\t\t\t// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.\n\t\t\t// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.\n\t\t\tconst brandMajor = this.buffer.toString('binary', 8, 12).replace('\\0', ' ').trim();\n\t\t\tswitch (brandMajor) {\n\t\t\t\tcase 'avif':\n\t\t\t\tcase 'avis':\n\t\t\t\t\treturn {ext: 'avif', mime: 'image/avif'};\n\t\t\t\tcase 'mif1':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heif'};\n\t\t\t\tcase 'msf1':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heif-sequence'};\n\t\t\t\tcase 'heic':\n\t\t\t\tcase 'heix':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heic'};\n\t\t\t\tcase 'hevc':\n\t\t\t\tcase 'hevx':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heic-sequence'};\n\t\t\t\tcase 'qt':\n\t\t\t\t\treturn {ext: 'mov', mime: 'video/quicktime'};\n\t\t\t\tcase 'M4V':\n\t\t\t\tcase 'M4VH':\n\t\t\t\tcase 'M4VP':\n\t\t\t\t\treturn {ext: 'm4v', mime: 'video/x-m4v'};\n\t\t\t\tcase 'M4P':\n\t\t\t\t\treturn {ext: 'm4p', mime: 'video/mp4'};\n\t\t\t\tcase 'M4B':\n\t\t\t\t\treturn {ext: 'm4b', mime: 'audio/mp4'};\n\t\t\t\tcase 'M4A':\n\t\t\t\t\treturn {ext: 'm4a', mime: 'audio/x-m4a'};\n\t\t\t\tcase 'F4V':\n\t\t\t\t\treturn {ext: 'f4v', mime: 'video/mp4'};\n\t\t\t\tcase 'F4P':\n\t\t\t\t\treturn {ext: 'f4p', mime: 'video/mp4'};\n\t\t\t\tcase 'F4A':\n\t\t\t\t\treturn {ext: 'f4a', mime: 'audio/mp4'};\n\t\t\t\tcase 'F4B':\n\t\t\t\t\treturn {ext: 'f4b', mime: 'audio/mp4'};\n\t\t\t\tcase 'crx':\n\t\t\t\t\treturn {ext: 'cr3', mime: 'image/x-canon-cr3'};\n\t\t\t\tdefault:\n\t\t\t\t\tif (brandMajor.startsWith('3g')) {\n\t\t\t\t\t\tif (brandMajor.startsWith('3g2')) {\n\t\t\t\t\t\t\treturn {ext: '3g2', mime: 'video/3gpp2'};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {ext: '3gp', mime: 'video/3gpp'};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {ext: 'mp4', mime: 'video/mp4'};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('MThd')) {\n\t\t\treturn {\n\t\t\t\text: 'mid',\n\t\t\t\tmime: 'audio/midi',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('wOFF')\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x01, 0x00, 0x00], {offset: 4})\n\t\t\t\t|| this.checkString('OTTO', {offset: 4})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'woff',\n\t\t\t\tmime: 'font/woff',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('wOF2')\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x01, 0x00, 0x00], {offset: 4})\n\t\t\t\t|| this.checkString('OTTO', {offset: 4})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'woff2',\n\t\t\t\tmime: 'font/woff2',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xD4, 0xC3, 0xB2, 0xA1]) || this.check([0xA1, 0xB2, 0xC3, 0xD4])) {\n\t\t\treturn {\n\t\t\t\text: 'pcap',\n\t\t\t\tmime: 'application/vnd.tcpdump.pcap',\n\t\t\t};\n\t\t}\n\n\t\t// Sony DSD Stream File (DSF)\n\t\tif (this.checkString('DSD ')) {\n\t\t\treturn {\n\t\t\t\text: 'dsf',\n\t\t\t\tmime: 'audio/x-dsf', // Non-standard\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('LZIP')) {\n\t\t\treturn {\n\t\t\t\text: 'lz',\n\t\t\t\tmime: 'application/x-lzip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('fLaC')) {\n\t\t\treturn {\n\t\t\t\text: 'flac',\n\t\t\t\tmime: 'audio/x-flac',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x50, 0x47, 0xFB])) {\n\t\t\treturn {\n\t\t\t\text: 'bpg',\n\t\t\t\tmime: 'image/bpg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('wvpk')) {\n\t\t\treturn {\n\t\t\t\text: 'wv',\n\t\t\t\tmime: 'audio/wavpack',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('%PDF')) {\n\t\t\tawait tokenizer.ignore(1350);\n\t\t\tconst maxBufferSize = 10 * 1024 * 1024;\n\t\t\tconst buffer = node_buffer.Buffer.alloc(Math.min(maxBufferSize, tokenizer.fileInfo.size));\n\t\t\tawait tokenizer.readBuffer(buffer, {mayBeLess: true});\n\n\t\t\t// Check if this is an Adobe Illustrator file\n\t\t\tif (buffer.includes(node_buffer.Buffer.from('AIPrivateData'))) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ai',\n\t\t\t\t\tmime: 'application/postscript',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Assume this is just a normal PDF\n\t\t\treturn {\n\t\t\t\text: 'pdf',\n\t\t\t\tmime: 'application/pdf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x61, 0x73, 0x6D])) {\n\t\t\treturn {\n\t\t\t\text: 'wasm',\n\t\t\t\tmime: 'application/wasm',\n\t\t\t};\n\t\t}\n\n\t\t// TIFF, little-endian type\n\t\tif (this.check([0x49, 0x49])) {\n\t\t\tconst fileType = await this.readTiffHeader(false);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\n\t\t// TIFF, big-endian type\n\t\tif (this.check([0x4D, 0x4D])) {\n\t\t\tconst fileType = await this.readTiffHeader(true);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('MAC ')) {\n\t\t\treturn {\n\t\t\t\text: 'ape',\n\t\t\t\tmime: 'audio/ape',\n\t\t\t};\n\t\t}\n\n\t\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\t\tif (this.check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML\n\t\t\tasync function readField() {\n\t\t\t\tconst msb = await tokenizer.peekNumber(UINT8);\n\t\t\t\tlet mask = 0x80;\n\t\t\t\tlet ic = 0; // 0 = A, 1 = B, 2 = C, 3\n\t\t\t\t// = D\n\n\t\t\t\twhile ((msb & mask) === 0 && mask !== 0) {\n\t\t\t\t\t++ic;\n\t\t\t\t\tmask >>= 1;\n\t\t\t\t}\n\n\t\t\t\tconst id = node_buffer.Buffer.alloc(ic + 1);\n\t\t\t\tawait tokenizer.readBuffer(id);\n\t\t\t\treturn id;\n\t\t\t}\n\n\t\t\tasync function readElement() {\n\t\t\t\tconst id = await readField();\n\t\t\t\tconst lengthField = await readField();\n\t\t\t\tlengthField[0] ^= 0x80 >> (lengthField.length - 1);\n\t\t\t\tconst nrLength = Math.min(6, lengthField.length); // JavaScript can max read 6 bytes integer\n\t\t\t\treturn {\n\t\t\t\t\tid: id.readUIntBE(0, id.length),\n\t\t\t\t\tlen: lengthField.readUIntBE(lengthField.length - nrLength, nrLength),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tasync function readChildren(children) {\n\t\t\t\twhile (children > 0) {\n\t\t\t\t\tconst element = await readElement();\n\t\t\t\t\tif (element.id === 0x42_82) {\n\t\t\t\t\t\tconst rawValue = await tokenizer.readToken(new StringType(element.len, 'utf-8'));\n\t\t\t\t\t\treturn rawValue.replace(/\\00.*$/g, ''); // Return DocType\n\t\t\t\t\t}\n\n\t\t\t\t\tawait tokenizer.ignore(element.len); // ignore payload\n\t\t\t\t\t--children;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst re = await readElement();\n\t\t\tconst docType = await readChildren(re.len);\n\n\t\t\tswitch (docType) {\n\t\t\t\tcase 'webm':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'webm',\n\t\t\t\t\t\tmime: 'video/webm',\n\t\t\t\t\t};\n\n\t\t\t\tcase 'matroska':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'mkv',\n\t\t\t\t\t\tmime: 'video/x-matroska',\n\t\t\t\t\t};\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// RIFF file format which might be AVI, WAV, QCP, etc\n\t\tif (this.check([0x52, 0x49, 0x46, 0x46])) {\n\t\t\tif (this.check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'avi',\n\t\t\t\t\tmime: 'video/vnd.avi',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'wav',\n\t\t\t\t\tmime: 'audio/vnd.wave',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// QLCM, QCP file\n\t\t\tif (this.check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'qcp',\n\t\t\t\t\tmime: 'audio/qcelp',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('SQLi')) {\n\t\t\treturn {\n\t\t\t\text: 'sqlite',\n\t\t\t\tmime: 'application/x-sqlite3',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\t\treturn {\n\t\t\t\text: 'nes',\n\t\t\t\tmime: 'application/x-nintendo-nes-rom',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Cr24')) {\n\t\t\treturn {\n\t\t\t\text: 'crx',\n\t\t\t\tmime: 'application/x-google-chrome-extension',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('MSCF')\n\t\t\t|| this.checkString('ISc(')\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'cab',\n\t\t\t\tmime: 'application/vnd.ms-cab-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\t\treturn {\n\t\t\t\text: 'rpm',\n\t\t\t\tmime: 'application/x-rpm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xC5, 0xD0, 0xD3, 0xC6])) {\n\t\t\treturn {\n\t\t\t\text: 'eps',\n\t\t\t\tmime: 'application/eps',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x28, 0xB5, 0x2F, 0xFD])) {\n\t\t\treturn {\n\t\t\t\text: 'zst',\n\t\t\t\tmime: 'application/zstd',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x7F, 0x45, 0x4C, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'elf',\n\t\t\t\tmime: 'application/x-elf',\n\t\t\t};\n\t\t}\n\n\t\t// -- 5-byte signatures --\n\n\t\tif (this.check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'otf',\n\t\t\t\tmime: 'font/otf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('#!AMR')) {\n\t\t\treturn {\n\t\t\t\text: 'amr',\n\t\t\t\tmime: 'audio/amr',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('{\\\\rtf')) {\n\t\t\treturn {\n\t\t\t\text: 'rtf',\n\t\t\t\tmime: 'application/rtf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x46, 0x4C, 0x56, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'flv',\n\t\t\t\tmime: 'video/x-flv',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('IMPM')) {\n\t\t\treturn {\n\t\t\t\text: 'it',\n\t\t\t\tmime: 'audio/x-it',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('-lh0-', {offset: 2})\n\t\t\t|| this.checkString('-lh1-', {offset: 2})\n\t\t\t|| this.checkString('-lh2-', {offset: 2})\n\t\t\t|| this.checkString('-lh3-', {offset: 2})\n\t\t\t|| this.checkString('-lh4-', {offset: 2})\n\t\t\t|| this.checkString('-lh5-', {offset: 2})\n\t\t\t|| this.checkString('-lh6-', {offset: 2})\n\t\t\t|| this.checkString('-lh7-', {offset: 2})\n\t\t\t|| this.checkString('-lzs-', {offset: 2})\n\t\t\t|| this.checkString('-lz4-', {offset: 2})\n\t\t\t|| this.checkString('-lz5-', {offset: 2})\n\t\t\t|| this.checkString('-lhd-', {offset: 2})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'lzh',\n\t\t\t\tmime: 'application/x-lzh-compressed',\n\t\t\t};\n\t\t}\n\n\t\t// MPEG program stream (PS or MPEG-PS)\n\t\tif (this.check([0x00, 0x00, 0x01, 0xBA])) {\n\t\t\t//  MPEG-PS, MPEG-1 Part 1\n\t\t\tif (this.check([0x21], {offset: 4, mask: [0xF1]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mpg', // May also be .ps, .mpeg\n\t\t\t\t\tmime: 'video/MP1S',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// MPEG-PS, MPEG-2 Part 1\n\t\t\tif (this.check([0x44], {offset: 4, mask: [0xC4]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mpg', // May also be .mpg, .m2p, .vob or .sub\n\t\t\t\t\tmime: 'video/MP2P',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('ITSF')) {\n\t\t\treturn {\n\t\t\t\text: 'chm',\n\t\t\t\tmime: 'application/vnd.ms-htmlhelp',\n\t\t\t};\n\t\t}\n\n\t\t// -- 6-byte signatures --\n\n\t\tif (this.check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'xz',\n\t\t\t\tmime: 'application/x-xz',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('<?xml ')) {\n\t\t\treturn {\n\t\t\t\text: 'xml',\n\t\t\t\tmime: 'application/xml',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\t\treturn {\n\t\t\t\text: '7z',\n\t\t\t\tmime: 'application/x-7z-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7])\n\t\t\t&& (this.buffer[6] === 0x0 || this.buffer[6] === 0x1)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'rar',\n\t\t\t\tmime: 'application/x-rar-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('solid ')) {\n\t\t\treturn {\n\t\t\t\text: 'stl',\n\t\t\t\tmime: 'model/stl',\n\t\t\t};\n\t\t}\n\n\t\t// -- 7-byte signatures --\n\n\t\tif (this.checkString('BLENDER')) {\n\t\t\treturn {\n\t\t\t\text: 'blend',\n\t\t\t\tmime: 'application/x-blender',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('!<arch>')) {\n\t\t\tawait tokenizer.ignore(8);\n\t\t\tconst string = await tokenizer.readToken(new StringType(13, 'ascii'));\n\t\t\tif (string === 'debian-binary') {\n\t\t\t\treturn {\n\t\t\t\t\text: 'deb',\n\t\t\t\t\tmime: 'application/x-deb',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'ar',\n\t\t\t\tmime: 'application/x-unix-archive',\n\t\t\t};\n\t\t}\n\n\t\t// -- 8-byte signatures --\n\n\t\tif (this.check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t\t// APNG format (https://wiki.mozilla.org/APNG_Specification)\n\t\t\t// 1. Find the first IDAT (image data) chunk (49 44 41 54)\n\t\t\t// 2. Check if there is an \"acTL\" chunk before the IDAT one (61 63 54 4C)\n\n\t\t\t// Offset calculated as follows:\n\t\t\t// - 8 bytes: PNG signature\n\t\t\t// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk\n\n\t\t\tawait tokenizer.ignore(8); // ignore PNG signature\n\n\t\t\tasync function readChunkHeader() {\n\t\t\t\treturn {\n\t\t\t\t\tlength: await tokenizer.readToken(INT32_BE),\n\t\t\t\t\ttype: await tokenizer.readToken(new StringType(4, 'binary')),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tconst chunk = await readChunkHeader();\n\t\t\t\tif (chunk.length < 0) {\n\t\t\t\t\treturn; // Invalid chunk length\n\t\t\t\t}\n\n\t\t\t\tswitch (chunk.type) {\n\t\t\t\t\tcase 'IDAT':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'png',\n\t\t\t\t\t\t\tmime: 'image/png',\n\t\t\t\t\t\t};\n\t\t\t\t\tcase 'acTL':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'apng',\n\t\t\t\t\t\t\tmime: 'image/apng',\n\t\t\t\t\t\t};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tawait tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC\n\t\t\t\t}\n\t\t\t} while (tokenizer.position + 8 < tokenizer.fileInfo.size);\n\n\t\t\treturn {\n\t\t\t\text: 'png',\n\t\t\t\tmime: 'image/png',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'arrow',\n\t\t\t\tmime: 'application/x-apache-arrow',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'glb',\n\t\t\t\tmime: 'model/gltf-binary',\n\t\t\t};\n\t\t}\n\n\t\t// `mov` format variants\n\t\tif (\n\t\t\tthis.check([0x66, 0x72, 0x65, 0x65], {offset: 4}) // `free`\n\t\t\t|| this.check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) // `mdat` MJPEG\n\t\t\t|| this.check([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) // `moov`\n\t\t\t|| this.check([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mov',\n\t\t\t\tmime: 'video/quicktime',\n\t\t\t};\n\t\t}\n\n\t\t// -- 9-byte signatures --\n\n\t\tif (this.check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {\n\t\t\treturn {\n\t\t\t\text: 'orf',\n\t\t\t\tmime: 'image/x-olympus-orf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('gimp xcf ')) {\n\t\t\treturn {\n\t\t\t\text: 'xcf',\n\t\t\t\tmime: 'image/x-xcf',\n\t\t\t};\n\t\t}\n\n\t\t// -- 12-byte signatures --\n\n\t\tif (this.check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {\n\t\t\treturn {\n\t\t\t\text: 'rw2',\n\t\t\t\tmime: 'image/x-panasonic-rw2',\n\t\t\t};\n\t\t}\n\n\t\t// ASF_Header_Object first 80 bytes\n\t\tif (this.check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\t\tasync function readHeader() {\n\t\t\t\tconst guid = node_buffer.Buffer.alloc(16);\n\t\t\t\tawait tokenizer.readBuffer(guid);\n\t\t\t\treturn {\n\t\t\t\t\tid: guid,\n\t\t\t\t\tsize: Number(await tokenizer.readToken(UINT64_LE)),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(30);\n\t\t\t// Search for header should be in first 1KB of file.\n\t\t\twhile (tokenizer.position + 24 < tokenizer.fileInfo.size) {\n\t\t\t\tconst header = await readHeader();\n\t\t\t\tlet payload = header.size - 24;\n\t\t\t\tif (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {\n\t\t\t\t\t// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)\n\t\t\t\t\tconst typeId = node_buffer.Buffer.alloc(16);\n\t\t\t\t\tpayload -= await tokenizer.readBuffer(typeId);\n\n\t\t\t\t\tif (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t\t// Found audio:\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\t\tmime: 'audio/x-ms-asf',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t\t// Found video:\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\t\tmime: 'video/x-ms-asf',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tawait tokenizer.ignore(payload);\n\t\t\t}\n\n\t\t\t// Default to ASF generic extension\n\t\t\treturn {\n\t\t\t\text: 'asf',\n\t\t\t\tmime: 'application/vnd.ms-asf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t\treturn {\n\t\t\t\text: 'ktx',\n\t\t\t\tmime: 'image/ktx',\n\t\t\t};\n\t\t}\n\n\t\tif ((this.check([0x7E, 0x10, 0x04]) || this.check([0x7E, 0x18, 0x04])) && this.check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {\n\t\t\treturn {\n\t\t\t\text: 'mie',\n\t\t\t\tmime: 'application/x-mie',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {\n\t\t\treturn {\n\t\t\t\text: 'shp',\n\t\t\t\tmime: 'application/x-esri-shape',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t\t// JPEG-2000 family\n\n\t\t\tawait tokenizer.ignore(20);\n\t\t\tconst type = await tokenizer.readToken(new StringType(4, 'ascii'));\n\t\t\tswitch (type) {\n\t\t\t\tcase 'jp2 ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jp2',\n\t\t\t\t\t\tmime: 'image/jp2',\n\t\t\t\t\t};\n\t\t\t\tcase 'jpx ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jpx',\n\t\t\t\t\t\tmime: 'image/jpx',\n\t\t\t\t\t};\n\t\t\t\tcase 'jpm ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jpm',\n\t\t\t\t\t\tmime: 'image/jpm',\n\t\t\t\t\t};\n\t\t\t\tcase 'mjp2':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'mj2',\n\t\t\t\t\t\tmime: 'image/mj2',\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0xFF, 0x0A])\n\t\t\t|| this.check([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'jxl',\n\t\t\t\tmime: 'image/jxl',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFE, 0xFF])) { // UTF-16-BOM-LE\n\t\t\tif (this.check([0, 60, 0, 63, 0, 120, 0, 109, 0, 108], {offset: 2})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'xml',\n\t\t\t\t\tmime: 'application/xml',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn undefined; // Some unknown text based format\n\t\t}\n\n\t\t// -- Unsafe signatures --\n\n\t\tif (\n\t\t\tthis.check([0x0, 0x0, 0x1, 0xBA])\n\t\t\t|| this.check([0x0, 0x0, 0x1, 0xB3])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mpg',\n\t\t\t\tmime: 'video/mpeg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ttf',\n\t\t\t\tmime: 'font/ttf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x01, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ico',\n\t\t\t\tmime: 'image/x-icon',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x02, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'cur',\n\t\t\t\tmime: 'image/x-icon',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\t\t// Detected Microsoft Compound File Binary File (MS-CFB) Format.\n\t\t\treturn {\n\t\t\t\text: 'cfb',\n\t\t\t\tmime: 'application/x-cfb',\n\t\t\t};\n\t\t}\n\n\t\t// Increase sample size from 12 to 256.\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\t// -- 15-byte signatures --\n\n\t\tif (this.checkString('BEGIN:')) {\n\t\t\tif (this.checkString('VCARD', {offset: 6})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'vcf',\n\t\t\t\t\tmime: 'text/vcard',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.checkString('VCALENDAR', {offset: 6})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ics',\n\t\t\t\t\tmime: 'text/calendar',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// `raf` is here just to keep all the raw image detectors together.\n\t\tif (this.checkString('FUJIFILMCCD-RAW')) {\n\t\t\treturn {\n\t\t\t\text: 'raf',\n\t\t\t\tmime: 'image/x-fujifilm-raf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Extended Module:')) {\n\t\t\treturn {\n\t\t\t\text: 'xm',\n\t\t\t\tmime: 'audio/x-xm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Creative Voice File')) {\n\t\t\treturn {\n\t\t\t\text: 'voc',\n\t\t\t\tmime: 'audio/x-voc',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x04, 0x00, 0x00, 0x00]) && this.buffer.length >= 16) { // Rough & quick check Pickle/ASAR\n\t\t\tconst jsonSize = this.buffer.readUInt32LE(12);\n\t\t\tif (jsonSize > 12 && this.buffer.length >= jsonSize + 16) {\n\t\t\t\ttry {\n\t\t\t\t\tconst header = this.buffer.slice(16, jsonSize + 16).toString();\n\t\t\t\t\tconst json = JSON.parse(header);\n\t\t\t\t\t// Check if Pickle is ASAR\n\t\t\t\t\tif (json.files) { // Final check, assuring Pickle/ASAR format\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asar',\n\t\t\t\t\t\t\tmime: 'application/x-asar',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\n\t\tif (this.check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\t\treturn {\n\t\t\t\text: 'mxf',\n\t\t\t\tmime: 'application/mxf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('SCRM', {offset: 44})) {\n\t\t\treturn {\n\t\t\t\text: 's3m',\n\t\t\t\tmime: 'audio/x-s3m',\n\t\t\t};\n\t\t}\n\n\t\t// Raw MPEG-2 transport stream (188-byte packets)\n\t\tif (this.check([0x47]) && this.check([0x47], {offset: 188})) {\n\t\t\treturn {\n\t\t\t\text: 'mts',\n\t\t\t\tmime: 'video/mp2t',\n\t\t\t};\n\t\t}\n\n\t\t// Blu-ray Disc Audio-Video (BDAV) MPEG-2 transport stream has 4-byte TP_extra_header before each 188-byte packet\n\t\tif (this.check([0x47], {offset: 4}) && this.check([0x47], {offset: 196})) {\n\t\t\treturn {\n\t\t\t\text: 'mts',\n\t\t\t\tmime: 'video/mp2t',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\t\treturn {\n\t\t\t\text: 'mobi',\n\t\t\t\tmime: 'application/x-mobipocket-ebook',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {\n\t\t\treturn {\n\t\t\t\text: 'dcm',\n\t\t\t\tmime: 'application/dicom',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'lnk',\n\t\t\t\tmime: 'application/x.ms.shortcut', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'alias',\n\t\t\t\tmime: 'application/x.apple.alias', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x4C, 0x50], {offset: 34})\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x00, 0x01], {offset: 8})\n\t\t\t\t|| this.check([0x01, 0x00, 0x02], {offset: 8})\n\t\t\t\t|| this.check([0x02, 0x00, 0x02], {offset: 8})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'eot',\n\t\t\t\tmime: 'application/vnd.ms-fontobject',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {\n\t\t\treturn {\n\t\t\t\text: 'indd',\n\t\t\t\tmime: 'application/x-indesign',\n\t\t\t};\n\t\t}\n\n\t\t// Increase sample size from 256 to 512\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\t// Requires a buffer size of 512 bytes\n\t\tif (tarHeaderChecksumMatches(this.buffer)) {\n\t\t\treturn {\n\t\t\t\text: 'tar',\n\t\t\t\tmime: 'application/x-tar',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFF, 0xFE])) { // UTF-16-BOM-BE\n\t\t\tif (this.check([60, 0, 63, 0, 120, 0, 109, 0, 108, 0], {offset: 2})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'xml',\n\t\t\t\t\tmime: 'application/xml',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0xFF, 0x0E, 0x53, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x55, 0x00, 0x70, 0x00, 0x20, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6C, 0x00], {offset: 2})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'skp',\n\t\t\t\t\tmime: 'application/vnd.sketchup.skp',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn undefined; // Some text based format\n\t\t}\n\n\t\tif (this.checkString('-----BEGIN PGP MESSAGE-----')) {\n\t\t\treturn {\n\t\t\t\text: 'pgp',\n\t\t\t\tmime: 'application/pgp-encrypted',\n\t\t\t};\n\t\t}\n\n\t\t// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)\n\t\tif (this.buffer.length >= 2 && this.check([0xFF, 0xE0], {offset: 0, mask: [0xFF, 0xE0]})) {\n\t\t\tif (this.check([0x10], {offset: 1, mask: [0x16]})) {\n\t\t\t\t// Check for (ADTS) MPEG-2\n\t\t\t\tif (this.check([0x08], {offset: 1, mask: [0x08]})) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'aac',\n\t\t\t\t\t\tmime: 'audio/aac',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Must be (ADTS) MPEG-4\n\t\t\t\treturn {\n\t\t\t\t\text: 'aac',\n\t\t\t\t\tmime: 'audio/aac',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// MPEG 1 or 2 Layer 3 header\n\t\t\t// Check for MPEG layer 3\n\t\t\tif (this.check([0x02], {offset: 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp3',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Check for MPEG layer 2\n\t\t\tif (this.check([0x04], {offset: 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp2',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Check for MPEG layer 1\n\t\t\tif (this.check([0x06], {offset: 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp1',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tasync readTiffTag(bigEndian) {\n\t\tconst tagId = await this.tokenizer.readToken(bigEndian ? UINT16_BE : UINT16_LE);\n\t\tthis.tokenizer.ignore(10);\n\t\tswitch (tagId) {\n\t\t\tcase 50_341:\n\t\t\t\treturn {\n\t\t\t\t\text: 'arw',\n\t\t\t\t\tmime: 'image/x-sony-arw',\n\t\t\t\t};\n\t\t\tcase 50_706:\n\t\t\t\treturn {\n\t\t\t\t\text: 'dng',\n\t\t\t\t\tmime: 'image/x-adobe-dng',\n\t\t\t\t};\n\t\t}\n\t}\n\n\tasync readTiffIFD(bigEndian) {\n\t\tconst numberOfTags = await this.tokenizer.readToken(bigEndian ? UINT16_BE : UINT16_LE);\n\t\tfor (let n = 0; n < numberOfTags; ++n) {\n\t\t\tconst fileType = await this.readTiffTag(bigEndian);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync readTiffHeader(bigEndian) {\n\t\tconst version = (bigEndian ? UINT16_BE : UINT16_LE).get(this.buffer, 2);\n\t\tconst ifdOffset = (bigEndian ? UINT32_BE : UINT32_LE).get(this.buffer, 4);\n\n\t\tif (version === 42) {\n\t\t\t// TIFF file header\n\t\t\tif (ifdOffset >= 6) {\n\t\t\t\tif (this.checkString('CR', {offset: 8})) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'cr2',\n\t\t\t\t\t\tmime: 'image/x-canon-cr2',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (ifdOffset >= 8 && (this.check([0x1C, 0x00, 0xFE, 0x00], {offset: 8}) || this.check([0x1F, 0x00, 0x0B, 0x00], {offset: 8}))) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'nef',\n\t\t\t\t\t\tmime: 'image/x-nikon-nef',\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.tokenizer.ignore(ifdOffset);\n\t\t\tconst fileType = await this.readTiffIFD(false);\n\t\t\treturn fileType ? fileType : {\n\t\t\t\text: 'tif',\n\t\t\t\tmime: 'image/tiff',\n\t\t\t};\n\t\t}\n\n\t\tif (version === 43) {\t// Big TIFF file header\n\t\t\treturn {\n\t\t\t\text: 'tif',\n\t\t\t\tmime: 'image/tiff',\n\t\t\t};\n\t\t}\n\t}\n}\n\nvar isSvg$1 = {exports: {}};\n\nvar validator$2 = {};\n\nvar util$3 = {};\n\n(function (exports) {\n\n\tconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\n\tconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\n\tconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';\n\tconst regexName = new RegExp('^' + nameRegexp + '$');\n\n\tconst getAllMatches = function(string, regex) {\n\t  const matches = [];\n\t  let match = regex.exec(string);\n\t  while (match) {\n\t    const allmatches = [];\n\t    allmatches.startIndex = regex.lastIndex - match[0].length;\n\t    const len = match.length;\n\t    for (let index = 0; index < len; index++) {\n\t      allmatches.push(match[index]);\n\t    }\n\t    matches.push(allmatches);\n\t    match = regex.exec(string);\n\t  }\n\t  return matches;\n\t};\n\n\tconst isName = function(string) {\n\t  const match = regexName.exec(string);\n\t  return !(match === null || typeof match === 'undefined');\n\t};\n\n\texports.isExist = function(v) {\n\t  return typeof v !== 'undefined';\n\t};\n\n\texports.isEmptyObject = function(obj) {\n\t  return Object.keys(obj).length === 0;\n\t};\n\n\t/**\n\t * Copy all the properties of a into b.\n\t * @param {*} target\n\t * @param {*} a\n\t */\n\texports.merge = function(target, a, arrayMode) {\n\t  if (a) {\n\t    const keys = Object.keys(a); // will return an array of own properties\n\t    const len = keys.length; //don't make it inline\n\t    for (let i = 0; i < len; i++) {\n\t      if (arrayMode === 'strict') {\n\t        target[keys[i]] = [ a[keys[i]] ];\n\t      } else {\n\t        target[keys[i]] = a[keys[i]];\n\t      }\n\t    }\n\t  }\n\t};\n\t/* exports.merge =function (b,a){\n\t  return Object.assign(b,a);\n\t} */\n\n\texports.getValue = function(v) {\n\t  if (exports.isExist(v)) {\n\t    return v;\n\t  } else {\n\t    return '';\n\t  }\n\t};\n\n\t// const fakeCall = function(a) {return a;};\n\t// const fakeCallNoReturn = function() {};\n\n\texports.isName = isName;\n\texports.getAllMatches = getAllMatches;\n\texports.nameRegexp = nameRegexp;\n} (util$3));\n\nconst util$2 = util$3;\n\nconst defaultOptions$3 = {\n  allowBooleanAttributes: false, //A tag can have attributes without any value\n  unpairedTags: []\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nvalidator$2.validate = function (xmlData, options) {\n  options = Object.assign({}, defaultOptions$3, options);\n\n  //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n  //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n  //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n  const tags = [];\n  let tagFound = false;\n\n  //indicates that the root tag has been closed (aka. depth 0 has been reached)\n  let reachedRoot = false;\n\n  if (xmlData[0] === '\\ufeff') {\n    // check for byte order mark (BOM)\n    xmlData = xmlData.substr(1);\n  }\n  \n  for (let i = 0; i < xmlData.length; i++) {\n\n    if (xmlData[i] === '<' && xmlData[i+1] === '?') {\n      i+=2;\n      i = readPI(xmlData,i);\n      if (i.err) return i;\n    }else if (xmlData[i] === '<') {\n      //starting of tag\n      //read until you reach to '>' avoiding any '>' in attribute value\n      let tagStartPos = i;\n      i++;\n      \n      if (xmlData[i] === '!') {\n        i = readCommentAndCDATA(xmlData, i);\n        continue;\n      } else {\n        let closingTag = false;\n        if (xmlData[i] === '/') {\n          //closing tag\n          closingTag = true;\n          i++;\n        }\n        //read tagname\n        let tagName = '';\n        for (; i < xmlData.length &&\n          xmlData[i] !== '>' &&\n          xmlData[i] !== ' ' &&\n          xmlData[i] !== '\\t' &&\n          xmlData[i] !== '\\n' &&\n          xmlData[i] !== '\\r'; i++\n        ) {\n          tagName += xmlData[i];\n        }\n        tagName = tagName.trim();\n        //console.log(tagName);\n\n        if (tagName[tagName.length - 1] === '/') {\n          //self closing tag without attributes\n          tagName = tagName.substring(0, tagName.length - 1);\n          //continue;\n          i--;\n        }\n        if (!validateTagName(tagName)) {\n          let msg;\n          if (tagName.trim().length === 0) {\n            msg = \"Invalid space after '<'.\";\n          } else {\n            msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n          }\n          return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n        }\n\n        const result = readAttributeStr(xmlData, i);\n        if (result === false) {\n          return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n        }\n        let attrStr = result.value;\n        i = result.index;\n\n        if (attrStr[attrStr.length - 1] === '/') {\n          //self closing tag\n          const attrStrStart = i - attrStr.length;\n          attrStr = attrStr.substring(0, attrStr.length - 1);\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid === true) {\n            tagFound = true;\n            //continue; //text may presents after self closing tag\n          } else {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n          }\n        } else if (closingTag) {\n          if (!result.tagClosed) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n          } else if (attrStr.trim().length > 0) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n          } else {\n            const otg = tags.pop();\n            if (tagName !== otg.tagName) {\n              let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n              return getErrorObject('InvalidTag',\n                \"Expected closing tag '\"+otg.tagName+\"' (opened in line \"+openPos.line+\", col \"+openPos.col+\") instead of closing tag '\"+tagName+\"'.\",\n                getLineNumberForPosition(xmlData, tagStartPos));\n            }\n\n            //when there are no more tags, we reached the root level.\n            if (tags.length == 0) {\n              reachedRoot = true;\n            }\n          }\n        } else {\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid !== true) {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n          }\n\n          //if the root level has been reached before ...\n          if (reachedRoot === true) {\n            return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n          } else if(options.unpairedTags.indexOf(tagName) !== -1); else {\n            tags.push({tagName, tagStartPos});\n          }\n          tagFound = true;\n        }\n\n        //skip tag text value\n        //It may include comments and CDATA value\n        for (i++; i < xmlData.length; i++) {\n          if (xmlData[i] === '<') {\n            if (xmlData[i + 1] === '!') {\n              //comment or CADATA\n              i++;\n              i = readCommentAndCDATA(xmlData, i);\n              continue;\n            } else if (xmlData[i+1] === '?') {\n              i = readPI(xmlData, ++i);\n              if (i.err) return i;\n            } else {\n              break;\n            }\n          } else if (xmlData[i] === '&') {\n            const afterAmp = validateAmpersand(xmlData, i);\n            if (afterAmp == -1)\n              return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n            i = afterAmp;\n          }else {\n            if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n              return getErrorObject('InvalidXml', \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n            }\n          }\n        } //end of reading tag text value\n        if (xmlData[i] === '<') {\n          i--;\n        }\n      }\n    } else {\n      if ( isWhiteSpace(xmlData[i])) {\n        continue;\n      }\n      return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n    }\n  }\n\n  if (!tagFound) {\n    return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n  }else if (tags.length == 1) {\n      return getErrorObject('InvalidTag', \"Unclosed tag '\"+tags[0].tagName+\"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n  }else if (tags.length > 0) {\n      return getErrorObject('InvalidXml', \"Invalid '\"+\n          JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\\r?\\n/g, '')+\n          \"' found.\", {line: 1, col: 1});\n  }\n\n  return true;\n};\n\nfunction isWhiteSpace(char){\n  return char === ' ' || char === '\\t' || char === '\\n'  || char === '\\r';\n}\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n  const start = i;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] == '?' || xmlData[i] == ' ') {\n      //tagname\n      const tagname = xmlData.substr(start, i - start);\n      if (i > 5 && tagname === 'xml') {\n        return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n      } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n        //check if valid attribut string\n        i++;\n        break;\n      } else {\n        continue;\n      }\n    }\n  }\n  return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n  if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n    //comment\n    for (i += 3; i < xmlData.length; i++) {\n      if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  } else if (\n    xmlData.length > i + 8 &&\n    xmlData[i + 1] === 'D' &&\n    xmlData[i + 2] === 'O' &&\n    xmlData[i + 3] === 'C' &&\n    xmlData[i + 4] === 'T' &&\n    xmlData[i + 5] === 'Y' &&\n    xmlData[i + 6] === 'P' &&\n    xmlData[i + 7] === 'E'\n  ) {\n    let angleBracketsCount = 1;\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === '<') {\n        angleBracketsCount++;\n      } else if (xmlData[i] === '>') {\n        angleBracketsCount--;\n        if (angleBracketsCount === 0) {\n          break;\n        }\n      }\n    }\n  } else if (\n    xmlData.length > i + 9 &&\n    xmlData[i + 1] === '[' &&\n    xmlData[i + 2] === 'C' &&\n    xmlData[i + 3] === 'D' &&\n    xmlData[i + 4] === 'A' &&\n    xmlData[i + 5] === 'T' &&\n    xmlData[i + 6] === 'A' &&\n    xmlData[i + 7] === '['\n  ) {\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  }\n\n  return i;\n}\n\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n  let attrStr = '';\n  let startChar = '';\n  let tagClosed = false;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n      if (startChar === '') {\n        startChar = xmlData[i];\n      } else if (startChar !== xmlData[i]) ; else {\n        startChar = '';\n      }\n    } else if (xmlData[i] === '>') {\n      if (startChar === '') {\n        tagClosed = true;\n        break;\n      }\n    }\n    attrStr += xmlData[i];\n  }\n  if (startChar !== '') {\n    return false;\n  }\n\n  return {\n    value: attrStr,\n    index: i,\n    tagClosed: tagClosed\n  };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab  cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n  //console.log(\"start:\"+attrStr+\":end\");\n\n  //if(attrStr.trim().length === 0) return true; //empty string\n\n  const matches = util$2.getAllMatches(attrStr, validAttrStrRegxp);\n  const attrNames = {};\n\n  for (let i = 0; i < matches.length; i++) {\n    if (matches[i][1].length === 0) {\n      //nospace before attribute name: a=\"sd\"b=\"saf\"\n      return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(matches[i]))\n    } else if (matches[i][3] !== undefined && matches[i][4] === undefined) {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' is without value.\", getPositionFromMatch(matches[i]));\n    } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n      //independent attribute: ab\n      return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(matches[i]));\n    }\n    /* else if(matches[i][6] === undefined){//attribute without value: ab=\n                    return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n                } */\n    const attrName = matches[i][2];\n    if (!validateAttrName(attrName)) {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(matches[i]));\n    }\n    if (!attrNames.hasOwnProperty(attrName)) {\n      //check for duplicate attribute.\n      attrNames[attrName] = 1;\n    } else {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(matches[i]));\n    }\n  }\n\n  return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n  let re = /\\d/;\n  if (xmlData[i] === 'x') {\n    i++;\n    re = /[\\da-fA-F]/;\n  }\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] === ';')\n      return i;\n    if (!xmlData[i].match(re))\n      break;\n  }\n  return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n  // https://www.w3.org/TR/xml/#dt-charref\n  i++;\n  if (xmlData[i] === ';')\n    return -1;\n  if (xmlData[i] === '#') {\n    i++;\n    return validateNumberAmpersand(xmlData, i);\n  }\n  let count = 0;\n  for (; i < xmlData.length; i++, count++) {\n    if (xmlData[i].match(/\\w/) && count < 20)\n      continue;\n    if (xmlData[i] === ';')\n      break;\n    return -1;\n  }\n  return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n  return {\n    err: {\n      code: code,\n      msg: message,\n      line: lineNumber.line || lineNumber,\n      col: lineNumber.col,\n    },\n  };\n}\n\nfunction validateAttrName(attrName) {\n  return util$2.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n  return util$2.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n  const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n  return {\n    line: lines.length,\n\n    // column number is last line's length + 1, because column numbering starts at 1:\n    col: lines[lines.length - 1].length + 1\n  };\n}\n\n//this function returns the position of the first character of match within attrStr\nfunction getPositionFromMatch(match) {\n  return match.startIndex + match[1].length;\n}\n\nvar OptionsBuilder = {};\n\nconst defaultOptions$2 = {\n    preserveOrder: false,\n    attributeNamePrefix: '@_',\n    attributesGroupName: false,\n    textNodeName: '#text',\n    ignoreAttributes: true,\n    removeNSPrefix: false, // remove NS from tag name or attribute name if true\n    allowBooleanAttributes: false, //a tag can have attributes without any value\n    //ignoreRootElement : false,\n    parseTagValue: true,\n    parseAttributeValue: false,\n    trimValues: true, //Trim string values of tag and attributes\n    cdataPropName: false,\n    numberParseOptions: {\n      hex: true,\n      leadingZeros: true,\n      eNotation: true\n    },\n    tagValueProcessor: function(tagName, val) {\n      return val;\n    },\n    attributeValueProcessor: function(attrName, val) {\n      return val;\n    },\n    stopNodes: [], //nested tags will not be parsed even for errors\n    alwaysCreateTextNode: false,\n    isArray: () => false,\n    commentPropName: false,\n    unpairedTags: [],\n    processEntities: true,\n    htmlEntities: false,\n    ignoreDeclaration: false,\n    ignorePiTags: false,\n    transformTagName: false,\n    transformAttributeName: false,\n    updateTag: function(tagName, jPath, attrs){\n      return tagName\n    },\n    // skipEmptyListItem: false\n};\n   \nconst buildOptions$1 = function(options) {\n    return Object.assign({}, defaultOptions$2, options);\n};\n\nOptionsBuilder.buildOptions = buildOptions$1;\nOptionsBuilder.defaultOptions = defaultOptions$2;\n\nclass XmlNode{\n  constructor(tagname) {\n    this.tagname = tagname;\n    this.child = []; //nested tags, text, cdata, comments in order\n    this[\":@\"] = {}; //attributes map\n  }\n  add(key,val){\n    // this.child.push( {name : key, val: val, isCdata: isCdata });\n    if(key === \"__proto__\") key = \"#__proto__\";\n    this.child.push( {[key]: val });\n  }\n  addChild(node) {\n    if(node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n    if(node[\":@\"] && Object.keys(node[\":@\"]).length > 0){\n      this.child.push( { [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n    }else {\n      this.child.push( { [node.tagname]: node.child });\n    }\n  };\n}\n\nvar xmlNode$1 = XmlNode;\n\nconst util$1 = util$3;\n\n//TODO: handle comments\nfunction readDocType$1(xmlData, i){\n    \n    const entities = {};\n    if( xmlData[i + 3] === 'O' &&\n         xmlData[i + 4] === 'C' &&\n         xmlData[i + 5] === 'T' &&\n         xmlData[i + 6] === 'Y' &&\n         xmlData[i + 7] === 'P' &&\n         xmlData[i + 8] === 'E')\n    {    \n        i = i+9;\n        let angleBracketsCount = 1;\n        let hasBody = false, comment = false;\n        let exp = \"\";\n        for(;i<xmlData.length;i++){\n            if (xmlData[i] === '<' && !comment) { //Determine the tag type\n                if( hasBody && isEntity(xmlData, i)){\n                    i += 7; \n                    [entityName, val,i] = readEntityExp(xmlData,i+1);\n                    if(val.indexOf(\"&\") === -1) //Parameter entities are not supported\n                        entities[ validateEntityName(entityName) ] = {\n                            regx : RegExp( `&${entityName};`,\"g\"),\n                            val: val\n                        };\n                }\n                else if( hasBody && isElement(xmlData, i))  i += 8;//Not supported\n                else if( hasBody && isAttlist(xmlData, i))  i += 8;//Not supported\n                else if( hasBody && isNotation(xmlData, i)) i += 9;//Not supported\n                else if( isComment)                         comment = true;\n                else                                        throw new Error(\"Invalid DOCTYPE\");\n\n                angleBracketsCount++;\n                exp = \"\";\n            } else if (xmlData[i] === '>') { //Read tag content\n                if(comment){\n                    if( xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\"){\n                        comment = false;\n                        angleBracketsCount--;\n                    }\n                }else {\n                    angleBracketsCount--;\n                }\n                if (angleBracketsCount === 0) {\n                  break;\n                }\n            }else if( xmlData[i] === '['){\n                hasBody = true;\n            }else {\n                exp += xmlData[i];\n            }\n        }\n        if(angleBracketsCount !== 0){\n            throw new Error(`Unclosed DOCTYPE`);\n        }\n    }else {\n        throw new Error(`Invalid Tag instead of DOCTYPE`);\n    }\n    return {entities, i};\n}\n\nfunction readEntityExp(xmlData,i){\n    //External entities are not supported\n    //    <!ENTITY ext SYSTEM \"http://normal-website.com\" >\n\n    //Parameter entities are not supported\n    //    <!ENTITY entityname \"&anotherElement;\">\n\n    //Internal entities are supported\n    //    <!ENTITY entityname \"replacement text\">\n    \n    //read EntityName\n    let entityName = \"\";\n    for (; i < xmlData.length && (xmlData[i] !== \"'\" && xmlData[i] !== '\"' ); i++) {\n        // if(xmlData[i] === \" \") continue;\n        // else \n        entityName += xmlData[i];\n    }\n    entityName = entityName.trim();\n    if(entityName.indexOf(\" \") !== -1) throw new Error(\"External entites are not supported\");\n\n    //read Entity Value\n    const startChar = xmlData[i++];\n    let val = \"\";\n    for (; i < xmlData.length && xmlData[i] !== startChar ; i++) {\n        val += xmlData[i];\n    }\n    return [entityName, val, i];\n}\n\nfunction isComment(xmlData, i){\n    if(xmlData[i+1] === '!' &&\n    xmlData[i+2] === '-' &&\n    xmlData[i+3] === '-') return true\n    return false\n}\nfunction isEntity(xmlData, i){\n    if(xmlData[i+1] === '!' &&\n    xmlData[i+2] === 'E' &&\n    xmlData[i+3] === 'N' &&\n    xmlData[i+4] === 'T' &&\n    xmlData[i+5] === 'I' &&\n    xmlData[i+6] === 'T' &&\n    xmlData[i+7] === 'Y') return true\n    return false\n}\nfunction isElement(xmlData, i){\n    if(xmlData[i+1] === '!' &&\n    xmlData[i+2] === 'E' &&\n    xmlData[i+3] === 'L' &&\n    xmlData[i+4] === 'E' &&\n    xmlData[i+5] === 'M' &&\n    xmlData[i+6] === 'E' &&\n    xmlData[i+7] === 'N' &&\n    xmlData[i+8] === 'T') return true\n    return false\n}\n\nfunction isAttlist(xmlData, i){\n    if(xmlData[i+1] === '!' &&\n    xmlData[i+2] === 'A' &&\n    xmlData[i+3] === 'T' &&\n    xmlData[i+4] === 'T' &&\n    xmlData[i+5] === 'L' &&\n    xmlData[i+6] === 'I' &&\n    xmlData[i+7] === 'S' &&\n    xmlData[i+8] === 'T') return true\n    return false\n}\nfunction isNotation(xmlData, i){\n    if(xmlData[i+1] === '!' &&\n    xmlData[i+2] === 'N' &&\n    xmlData[i+3] === 'O' &&\n    xmlData[i+4] === 'T' &&\n    xmlData[i+5] === 'A' &&\n    xmlData[i+6] === 'T' &&\n    xmlData[i+7] === 'I' &&\n    xmlData[i+8] === 'O' &&\n    xmlData[i+9] === 'N') return true\n    return false\n}\n\nfunction validateEntityName(name){\n    if (util$1.isName(name))\n\treturn name;\n    else\n        throw new Error(`Invalid entity name ${name}`);\n}\n\nvar DocTypeReader = readDocType$1;\n\nconst hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n// const octRegex = /0x[a-z0-9]+/;\n// const binRegex = /0x[a-z0-9]+/;\n\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n    Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n    Number.parseFloat = window.parseFloat;\n}\n\n  \nconst consider = {\n    hex :  true,\n    leadingZeros: true,\n    decimalPoint: \"\\.\",\n    eNotation: true\n    //skipLike: /regex/\n};\n\nfunction toNumber$1(str, options = {}){\n    // const options = Object.assign({}, consider);\n    // if(opt.leadingZeros === false){\n    //     options.leadingZeros = false;\n    // }else if(opt.hex === false){\n    //     options.hex = false;\n    // }\n\n    options = Object.assign({}, consider, options );\n    if(!str || typeof str !== \"string\" ) return str;\n    \n    let trimmedStr  = str.trim();\n    // if(trimmedStr === \"0.0\") return 0;\n    // else if(trimmedStr === \"+0.0\") return 0;\n    // else if(trimmedStr === \"-0.0\") return -0;\n\n    if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;\n    else if (options.hex && hexRegex.test(trimmedStr)) {\n        return Number.parseInt(trimmedStr, 16);\n    // } else if (options.parseOct && octRegex.test(str)) {\n    //     return Number.parseInt(val, 8);\n    // }else if (options.parseBin && binRegex.test(str)) {\n    //     return Number.parseInt(val, 2);\n    }else {\n        //separate negative sign, leading zeros, and rest number\n        const match = numRegex.exec(trimmedStr);\n        if(match){\n            const sign = match[1];\n            const leadingZeros = match[2];\n            let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros\n            //trim ending zeros for floating number\n            \n            const eNotation = match[4] || match[6];\n            if(!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== \".\") return str; //-0123\n            else if(!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== \".\") return str; //0123\n            else {//no leading zeros or leading zeros are allowed\n                const num = Number(trimmedStr);\n                const numStr = \"\" + num;\n                if(numStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation\n                    if(options.eNotation) return num;\n                    else return str;\n                }else if(eNotation){ //given number has enotation\n                    if(options.eNotation) return num;\n                    else return str;\n                }else if(trimmedStr.indexOf(\".\") !== -1){ //floating number\n                    // const decimalPart = match[5].substr(1);\n                    // const intPart = trimmedStr.substr(0,trimmedStr.indexOf(\".\"));\n\n                    \n                    // const p = numStr.indexOf(\".\");\n                    // const givenIntPart = numStr.substr(0,p);\n                    // const givenDecPart = numStr.substr(p+1);\n                    if(numStr === \"0\" && (numTrimmedByZeros === \"\") ) return num; //0.0\n                    else if(numStr === numTrimmedByZeros) return num; //0.456. 0.79000\n                    else if( sign && numStr === \"-\"+numTrimmedByZeros) return num;\n                    else return str;\n                }\n                \n                if(leadingZeros){\n                    // if(numTrimmedByZeros === numStr){\n                    //     if(options.leadingZeros) return num;\n                    //     else return str;\n                    // }else return str;\n                    if(numTrimmedByZeros === numStr) return num;\n                    else if(sign+numTrimmedByZeros === numStr) return num;\n                    else return str;\n                }\n\n                if(trimmedStr === numStr) return num;\n                else if(trimmedStr === sign+numStr) return num;\n                // else{\n                //     //number with +/- sign\n                //     trimmedStr.test(/[-+][0-9]);\n\n                // }\n                return str;\n            }\n            // else if(!eNotation && trimmedStr && trimmedStr !== Number(trimmedStr) ) return str;\n            \n        }else { //non-numeric string\n            return str;\n        }\n    }\n}\n\n/**\n * \n * @param {string} numStr without leading zeros\n * @returns \n */\nfunction trimZeros(numStr){\n    if(numStr && numStr.indexOf(\".\") !== -1){//float\n        numStr = numStr.replace(/0+$/, \"\"); //remove ending zeros\n        if(numStr === \".\")  numStr = \"0\";\n        else if(numStr[0] === \".\")  numStr = \"0\"+numStr;\n        else if(numStr[numStr.length-1] === \".\")  numStr = numStr.substr(0,numStr.length-1);\n        return numStr;\n    }\n    return numStr;\n}\nvar strnum = toNumber$1;\n\n///@ts-check\n\nconst util = util$3;\nconst xmlNode = xmlNode$1;\nconst readDocType = DocTypeReader;\nconst toNumber = strnum;\n\n// const regx =\n//   '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n//   .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\nclass OrderedObjParser$1{\n  constructor(options){\n    this.options = options;\n    this.currentNode = null;\n    this.tagsNodeStack = [];\n    this.docTypeEntities = {};\n    this.lastEntities = {\n      \"apos\" : { regex: /&(apos|#39|#x27);/g, val : \"'\"},\n      \"gt\" : { regex: /&(gt|#62|#x3E);/g, val : \">\"},\n      \"lt\" : { regex: /&(lt|#60|#x3C);/g, val : \"<\"},\n      \"quot\" : { regex: /&(quot|#34|#x22);/g, val : \"\\\"\"},\n    };\n    this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : \"&\"};\n    this.htmlEntities = {\n      \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n      // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n      // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n      // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n      // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n      // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n      \"cent\" : { regex: /&(cent|#162);/g, val: \"¢\" },\n      \"pound\" : { regex: /&(pound|#163);/g, val: \"£\" },\n      \"yen\" : { regex: /&(yen|#165);/g, val: \"¥\" },\n      \"euro\" : { regex: /&(euro|#8364);/g, val: \"€\" },\n      \"copyright\" : { regex: /&(copy|#169);/g, val: \"©\" },\n      \"reg\" : { regex: /&(reg|#174);/g, val: \"®\" },\n      \"inr\" : { regex: /&(inr|#8377);/g, val: \"₹\" },\n    };\n    this.addExternalEntities = addExternalEntities;\n    this.parseXml = parseXml;\n    this.parseTextData = parseTextData;\n    this.resolveNameSpace = resolveNameSpace;\n    this.buildAttributesMap = buildAttributesMap;\n    this.isItStopNode = isItStopNode;\n    this.replaceEntitiesValue = replaceEntitiesValue$1;\n    this.readStopNodeData = readStopNodeData;\n    this.saveTextToParentTag = saveTextToParentTag;\n    this.addChild = addChild;\n  }\n\n}\n\nfunction addExternalEntities(externalEntities){\n  const entKeys = Object.keys(externalEntities);\n  for (let i = 0; i < entKeys.length; i++) {\n    const ent = entKeys[i];\n    this.lastEntities[ent] = {\n       regex: new RegExp(\"&\"+ent+\";\",\"g\"),\n       val : externalEntities[ent]\n    };\n  }\n}\n\n/**\n * @param {string} val\n * @param {string} tagName\n * @param {string} jPath\n * @param {boolean} dontTrim\n * @param {boolean} hasAttributes\n * @param {boolean} isLeafNode\n * @param {boolean} escapeEntities\n */\nfunction parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n  if (val !== undefined) {\n    if (this.options.trimValues && !dontTrim) {\n      val = val.trim();\n    }\n    if(val.length > 0){\n      if(!escapeEntities) val = this.replaceEntitiesValue(val);\n      \n      const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);\n      if(newval === null || newval === undefined){\n        //don't parse\n        return val;\n      }else if(typeof newval !== typeof val || newval !== val){\n        //overwrite\n        return newval;\n      }else if(this.options.trimValues){\n        return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n      }else {\n        const trimmedVal = val.trim();\n        if(trimmedVal === val){\n          return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n        }else {\n          return val;\n        }\n      }\n    }\n  }\n}\n\nfunction resolveNameSpace(tagname) {\n  if (this.options.removeNSPrefix) {\n    const tags = tagname.split(':');\n    const prefix = tagname.charAt(0) === '/' ? '/' : '';\n    if (tags[0] === 'xmlns') {\n      return '';\n    }\n    if (tags.length === 2) {\n      tagname = prefix + tags[1];\n    }\n  }\n  return tagname;\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])([\\\\s\\\\S]*?)\\\\3)?', 'gm');\n\nfunction buildAttributesMap(attrStr, jPath, tagName) {\n  if (!this.options.ignoreAttributes && typeof attrStr === 'string') {\n    // attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n    //attrStr = attrStr || attrStr.trim();\n\n    const matches = util.getAllMatches(attrStr, attrsRegx);\n    const len = matches.length; //don't make it inline\n    const attrs = {};\n    for (let i = 0; i < len; i++) {\n      const attrName = this.resolveNameSpace(matches[i][1]);\n      let oldVal = matches[i][4];\n      let aName = this.options.attributeNamePrefix + attrName;\n      if (attrName.length) {\n        if (this.options.transformAttributeName) {\n          aName = this.options.transformAttributeName(aName);\n        }\n        if(aName === \"__proto__\") aName  = \"#__proto__\";\n        if (oldVal !== undefined) {\n          if (this.options.trimValues) {\n            oldVal = oldVal.trim();\n          }\n          oldVal = this.replaceEntitiesValue(oldVal);\n          const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n          if(newVal === null || newVal === undefined){\n            //don't parse\n            attrs[aName] = oldVal;\n          }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){\n            //overwrite\n            attrs[aName] = newVal;\n          }else {\n            //parse\n            attrs[aName] = parseValue(\n              oldVal,\n              this.options.parseAttributeValue,\n              this.options.numberParseOptions\n            );\n          }\n        } else if (this.options.allowBooleanAttributes) {\n          attrs[aName] = true;\n        }\n      }\n    }\n    if (!Object.keys(attrs).length) {\n      return;\n    }\n    if (this.options.attributesGroupName) {\n      const attrCollection = {};\n      attrCollection[this.options.attributesGroupName] = attrs;\n      return attrCollection;\n    }\n    return attrs\n  }\n}\n\nconst parseXml = function(xmlData) {\n  xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\"); //TODO: remove this line\n  const xmlObj = new xmlNode('!xml');\n  let currentNode = xmlObj;\n  let textData = \"\";\n  let jPath = \"\";\n  for(let i=0; i< xmlData.length; i++){//for each char in XML data\n    const ch = xmlData[i];\n    if(ch === '<'){\n      // const nextIndex = i+1;\n      // const _2ndChar = xmlData[nextIndex];\n      if( xmlData[i+1] === '/') {//Closing Tag\n        const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\");\n        let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n        if(this.options.removeNSPrefix){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n          }\n        }\n\n        if(this.options.transformTagName) {\n          tagName = this.options.transformTagName(tagName);\n        }\n\n        if(currentNode){\n          textData = this.saveTextToParentTag(textData, currentNode, jPath);\n        }\n\n        //check if last tag of nested tag was unpaired tag\n        const lastTagName = jPath.substring(jPath.lastIndexOf(\".\")+1);\n        if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){\n          throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);\n        }\n        let propIndex = 0;\n        if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){\n          propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1);\n          this.tagsNodeStack.pop();\n        }else {\n          propIndex = jPath.lastIndexOf(\".\");\n        }\n        jPath = jPath.substring(0, propIndex);\n\n        currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope\n        textData = \"\";\n        i = closeIndex;\n      } else if( xmlData[i+1] === '?') {\n\n        let tagData = readTagExp(xmlData,i, false, \"?>\");\n        if(!tagData) throw new Error(\"Pi Tag is not closed.\");\n\n        textData = this.saveTextToParentTag(textData, currentNode, jPath);\n        if( (this.options.ignoreDeclaration && tagData.tagName === \"?xml\") || this.options.ignorePiTags);else {\n  \n          const childNode = new xmlNode(tagData.tagName);\n          childNode.add(this.options.textNodeName, \"\");\n          \n          if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){\n            childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n          }\n          this.addChild(currentNode, childNode, jPath);\n\n        }\n\n\n        i = tagData.closeIndex + 1;\n      } else if(xmlData.substr(i + 1, 3) === '!--') {\n        const endIndex = findClosingIndex(xmlData, \"-->\", i+4, \"Comment is not closed.\");\n        if(this.options.commentPropName){\n          const comment = xmlData.substring(i + 4, endIndex - 2);\n\n          textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n          currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]);\n        }\n        i = endIndex;\n      } else if( xmlData.substr(i + 1, 2) === '!D') {\n        const result = readDocType(xmlData, i);\n        this.docTypeEntities = result.entities;\n        i = result.i;\n      }else if(xmlData.substr(i + 1, 2) === '![') {\n        const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n        const tagExp = xmlData.substring(i + 9,closeIndex);\n\n        textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n        let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n        if(val == undefined) val = \"\";\n\n        //cdata should be set even if it is 0 length string\n        if(this.options.cdataPropName){\n          currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]);\n        }else {\n          currentNode.add(this.options.textNodeName, val);\n        }\n        \n        i = closeIndex + 2;\n      }else {//Opening tag\n        let result = readTagExp(xmlData,i, this.options.removeNSPrefix);\n        let tagName= result.tagName;\n        const rawTagName = result.rawTagName;\n        let tagExp = result.tagExp;\n        let attrExpPresent = result.attrExpPresent;\n        let closeIndex = result.closeIndex;\n\n        if (this.options.transformTagName) {\n          tagName = this.options.transformTagName(tagName);\n        }\n        \n        //save text as child node\n        if (currentNode && textData) {\n          if(currentNode.tagname !== '!xml'){\n            //when nested tag is found\n            textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n          }\n        }\n\n        //check if last tag was unpaired tag\n        const lastTag = currentNode;\n        if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){\n          currentNode = this.tagsNodeStack.pop();\n          jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n        }\n        if(tagName !== xmlObj.tagname){\n          jPath += jPath ? \".\" + tagName : tagName;\n        }\n        if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n          let tagContent = \"\";\n          //self-closing tag\n          if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n            i = result.closeIndex;\n          }\n          //unpaired tag\n          else if(this.options.unpairedTags.indexOf(tagName) !== -1){\n            i = result.closeIndex;\n          }\n          //normal tag\n          else {\n            //read until closing tag is found\n            const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n            if(!result) throw new Error(`Unexpected end of ${rawTagName}`);\n            i = result.i;\n            tagContent = result.tagContent;\n          }\n\n          const childNode = new xmlNode(tagName);\n          if(tagName !== tagExp && attrExpPresent){\n            childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n          }\n          if(tagContent) {\n            tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n          }\n          \n          jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n          childNode.add(this.options.textNodeName, tagContent);\n          \n          this.addChild(currentNode, childNode, jPath);\n        }else {\n  //selfClosing tag\n          if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n            if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n              tagName = tagName.substr(0, tagName.length - 1);\n              jPath = jPath.substr(0, jPath.length - 1);\n              tagExp = tagName;\n            }else {\n              tagExp = tagExp.substr(0, tagExp.length - 1);\n            }\n            \n            if(this.options.transformTagName) {\n              tagName = this.options.transformTagName(tagName);\n            }\n\n            const childNode = new xmlNode(tagName);\n            if(tagName !== tagExp && attrExpPresent){\n              childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n            }\n            this.addChild(currentNode, childNode, jPath);\n            jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n          }\n    //opening tag\n          else {\n            const childNode = new xmlNode( tagName);\n            this.tagsNodeStack.push(currentNode);\n            \n            if(tagName !== tagExp && attrExpPresent){\n              childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n            }\n            this.addChild(currentNode, childNode, jPath);\n            currentNode = childNode;\n          }\n          textData = \"\";\n          i = closeIndex;\n        }\n      }\n    }else {\n      textData += xmlData[i];\n    }\n  }\n  return xmlObj.child;\n};\n\nfunction addChild(currentNode, childNode, jPath){\n  const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"]);\n  if(result === false);else if(typeof result === \"string\"){\n    childNode.tagname = result;\n    currentNode.addChild(childNode);\n  }else {\n    currentNode.addChild(childNode);\n  }\n}\n\nconst replaceEntitiesValue$1 = function(val){\n\n  if(this.options.processEntities){\n    for(let entityName in this.docTypeEntities){\n      const entity = this.docTypeEntities[entityName];\n      val = val.replace( entity.regx, entity.val);\n    }\n    for(let entityName in this.lastEntities){\n      const entity = this.lastEntities[entityName];\n      val = val.replace( entity.regex, entity.val);\n    }\n    if(this.options.htmlEntities){\n      for(let entityName in this.htmlEntities){\n        const entity = this.htmlEntities[entityName];\n        val = val.replace( entity.regex, entity.val);\n      }\n    }\n    val = val.replace( this.ampEntity.regex, this.ampEntity.val);\n  }\n  return val;\n};\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n  if (textData) { //store previously collected data as textNode\n    if(isLeafNode === undefined) isLeafNode = Object.keys(currentNode.child).length === 0;\n    \n    textData = this.parseTextData(textData,\n      currentNode.tagname,\n      jPath,\n      false,\n      currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n      isLeafNode);\n\n    if (textData !== undefined && textData !== \"\")\n      currentNode.add(this.options.textNodeName, textData);\n    textData = \"\";\n  }\n  return textData;\n}\n\n//TODO: use jPath to simplify the logic\n/**\n * \n * @param {string[]} stopNodes \n * @param {string} jPath\n * @param {string} currentTagName \n */\nfunction isItStopNode(stopNodes, jPath, currentTagName){\n  const allNodesExp = \"*.\" + currentTagName;\n  for (const stopNodePath in stopNodes) {\n    const stopNodeExp = stopNodes[stopNodePath];\n    if( allNodesExp === stopNodeExp || jPath === stopNodeExp  ) return true;\n  }\n  return false;\n}\n\n/**\n * Returns the tag Expression and where it is ending handling single-double quotes situation\n * @param {string} xmlData \n * @param {number} i starting index\n * @returns \n */\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\"){\n  let attrBoundary;\n  let tagExp = \"\";\n  for (let index = i; index < xmlData.length; index++) {\n    let ch = xmlData[index];\n    if (attrBoundary) {\n        if (ch === attrBoundary) attrBoundary = \"\";//reset\n    } else if (ch === '\"' || ch === \"'\") {\n        attrBoundary = ch;\n    } else if (ch === closingChar[0]) {\n      if(closingChar[1]){\n        if(xmlData[index + 1] === closingChar[1]){\n          return {\n            data: tagExp,\n            index: index\n          }\n        }\n      }else {\n        return {\n          data: tagExp,\n          index: index\n        }\n      }\n    } else if (ch === '\\t') {\n      ch = \" \";\n    }\n    tagExp += ch;\n  }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n  const closingIndex = xmlData.indexOf(str, i);\n  if(closingIndex === -1){\n    throw new Error(errMsg)\n  }else {\n    return closingIndex + str.length - 1;\n  }\n}\n\nfunction readTagExp(xmlData,i, removeNSPrefix, closingChar = \">\"){\n  const result = tagExpWithClosingIndex(xmlData, i+1, closingChar);\n  if(!result) return;\n  let tagExp = result.data;\n  const closeIndex = result.index;\n  const separatorIndex = tagExp.search(/\\s/);\n  let tagName = tagExp;\n  let attrExpPresent = true;\n  if(separatorIndex !== -1){//separate tag name and attributes expression\n    tagName = tagExp.substring(0, separatorIndex);\n    tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n  }\n\n  const rawTagName = tagName;\n  if(removeNSPrefix){\n    const colonIndex = tagName.indexOf(\":\");\n    if(colonIndex !== -1){\n      tagName = tagName.substr(colonIndex+1);\n      attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n    }\n  }\n\n  return {\n    tagName: tagName,\n    tagExp: tagExp,\n    closeIndex: closeIndex,\n    attrExpPresent: attrExpPresent,\n    rawTagName: rawTagName,\n  }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i){\n  const startIndex = i;\n  // Starting at 1 since we already have an open tag\n  let openTagCount = 1;\n\n  for (; i < xmlData.length; i++) {\n    if( xmlData[i] === \"<\"){ \n      if (xmlData[i+1] === \"/\") {//close tag\n          const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n          let closeTagName = xmlData.substring(i+2,closeIndex).trim();\n          if(closeTagName === tagName){\n            openTagCount--;\n            if (openTagCount === 0) {\n              return {\n                tagContent: xmlData.substring(startIndex, i),\n                i : closeIndex\n              }\n            }\n          }\n          i=closeIndex;\n        } else if(xmlData[i+1] === '?') { \n          const closeIndex = findClosingIndex(xmlData, \"?>\", i+1, \"StopNode is not closed.\");\n          i=closeIndex;\n        } else if(xmlData.substr(i + 1, 3) === '!--') { \n          const closeIndex = findClosingIndex(xmlData, \"-->\", i+3, \"StopNode is not closed.\");\n          i=closeIndex;\n        } else if(xmlData.substr(i + 1, 2) === '![') { \n          const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n          i=closeIndex;\n        } else {\n          const tagData = readTagExp(xmlData, i, '>');\n\n          if (tagData) {\n            const openTagName = tagData && tagData.tagName;\n            if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== \"/\") {\n              openTagCount++;\n            }\n            i=tagData.closeIndex;\n          }\n        }\n      }\n  }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n  if (shouldParse && typeof val === 'string') {\n    //console.log(options)\n    const newval = val.trim();\n    if(newval === 'true' ) return true;\n    else if(newval === 'false' ) return false;\n    else return toNumber(val, options);\n  } else {\n    if (util.isExist(val)) {\n      return val;\n    } else {\n      return '';\n    }\n  }\n}\n\n\nvar OrderedObjParser_1 = OrderedObjParser$1;\n\nvar node2json = {};\n\n/**\n * \n * @param {array} node \n * @param {any} options \n * @returns \n */\nfunction prettify$1(node, options){\n  return compress( node, options);\n}\n\n/**\n * \n * @param {array} arr \n * @param {object} options \n * @param {string} jPath \n * @returns object\n */\nfunction compress(arr, options, jPath){\n  let text;\n  const compressedObj = {};\n  for (let i = 0; i < arr.length; i++) {\n    const tagObj = arr[i];\n    const property = propName$1(tagObj);\n    let newJpath = \"\";\n    if(jPath === undefined) newJpath = property;\n    else newJpath = jPath + \".\" + property;\n\n    if(property === options.textNodeName){\n      if(text === undefined) text = tagObj[property];\n      else text += \"\" + tagObj[property];\n    }else if(property === undefined){\n      continue;\n    }else if(tagObj[property]){\n      \n      let val = compress(tagObj[property], options, newJpath);\n      const isLeaf = isLeafTag(val, options);\n\n      if(tagObj[\":@\"]){\n        assignAttributes( val, tagObj[\":@\"], newJpath, options);\n      }else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode){\n        val = val[options.textNodeName];\n      }else if(Object.keys(val).length === 0){\n        if(options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n        else val = \"\";\n      }\n\n      if(compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {\n        if(!Array.isArray(compressedObj[property])) {\n            compressedObj[property] = [ compressedObj[property] ];\n        }\n        compressedObj[property].push(val);\n      }else {\n        //TODO: if a node is not an array, then check if it should be an array\n        //also determine if it is a leaf node\n        if (options.isArray(property, newJpath, isLeaf )) {\n          compressedObj[property] = [val];\n        }else {\n          compressedObj[property] = val;\n        }\n      }\n    }\n    \n  }\n  // if(text && text.length > 0) compressedObj[options.textNodeName] = text;\n  if(typeof text === \"string\"){\n    if(text.length > 0) compressedObj[options.textNodeName] = text;\n  }else if(text !== undefined) compressedObj[options.textNodeName] = text;\n  return compressedObj;\n}\n\nfunction propName$1(obj){\n  const keys = Object.keys(obj);\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    if(key !== \":@\") return key;\n  }\n}\n\nfunction assignAttributes(obj, attrMap, jpath, options){\n  if (attrMap) {\n    const keys = Object.keys(attrMap);\n    const len = keys.length; //don't make it inline\n    for (let i = 0; i < len; i++) {\n      const atrrName = keys[i];\n      if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n        obj[atrrName] = [ attrMap[atrrName] ];\n      } else {\n        obj[atrrName] = attrMap[atrrName];\n      }\n    }\n  }\n}\n\nfunction isLeafTag(obj, options){\n  const { textNodeName } = options;\n  const propCount = Object.keys(obj).length;\n  \n  if (propCount === 0) {\n    return true;\n  }\n\n  if (\n    propCount === 1 &&\n    (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)\n  ) {\n    return true;\n  }\n\n  return false;\n}\nnode2json.prettify = prettify$1;\n\nconst { buildOptions} = OptionsBuilder;\nconst OrderedObjParser = OrderedObjParser_1;\nconst { prettify} = node2json;\nconst validator$1 = validator$2;\n\nclass XMLParser$2{\n    \n    constructor(options){\n        this.externalEntities = {};\n        this.options = buildOptions(options);\n        \n    }\n    /**\n     * Parse XML dats to JS object \n     * @param {string|Buffer} xmlData \n     * @param {boolean|Object} validationOption \n     */\n    parse(xmlData,validationOption){\n        if(typeof xmlData === \"string\");else if( xmlData.toString){\n            xmlData = xmlData.toString();\n        }else {\n            throw new Error(\"XML data is accepted in String or Bytes[] form.\")\n        }\n        if( validationOption){\n            if(validationOption === true) validationOption = {}; //validate with default options\n            \n            const result = validator$1.validate(xmlData, validationOption);\n            if (result !== true) {\n              throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` )\n            }\n          }\n        const orderedObjParser = new OrderedObjParser(this.options);\n        orderedObjParser.addExternalEntities(this.externalEntities);\n        const orderedResult = orderedObjParser.parseXml(xmlData);\n        if(this.options.preserveOrder || orderedResult === undefined) return orderedResult;\n        else return prettify(orderedResult, this.options);\n    }\n\n    /**\n     * Add Entity which is not by default supported by this library\n     * @param {string} key \n     * @param {string} value \n     */\n    addEntity(key, value){\n        if(value.indexOf(\"&\") !== -1){\n            throw new Error(\"Entity value can't have '&'\")\n        }else if(key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1){\n            throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'\")\n        }else if(value === \"&\"){\n            throw new Error(\"An entity with value '&' is not permitted\");\n        }else {\n            this.externalEntities[key] = value;\n        }\n    }\n}\n\nvar XMLParser_1 = XMLParser$2;\n\nconst EOL = \"\\n\";\n\n/**\n * \n * @param {array} jArray \n * @param {any} options \n * @returns \n */\nfunction toXml(jArray, options) {\n    let indentation = \"\";\n    if (options.format && options.indentBy.length > 0) {\n        indentation = EOL;\n    }\n    return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n    let xmlStr = \"\";\n    let isPreviousElementTag = false;\n\n    for (let i = 0; i < arr.length; i++) {\n        const tagObj = arr[i];\n        const tagName = propName(tagObj);\n        if(tagName === undefined) continue;\n\n        let newJPath = \"\";\n        if (jPath.length === 0) newJPath = tagName;\n        else newJPath = `${jPath}.${tagName}`;\n\n        if (tagName === options.textNodeName) {\n            let tagText = tagObj[tagName];\n            if (!isStopNode(newJPath, options)) {\n                tagText = options.tagValueProcessor(tagName, tagText);\n                tagText = replaceEntitiesValue(tagText, options);\n            }\n            if (isPreviousElementTag) {\n                xmlStr += indentation;\n            }\n            xmlStr += tagText;\n            isPreviousElementTag = false;\n            continue;\n        } else if (tagName === options.cdataPropName) {\n            if (isPreviousElementTag) {\n                xmlStr += indentation;\n            }\n            xmlStr += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;\n            isPreviousElementTag = false;\n            continue;\n        } else if (tagName === options.commentPropName) {\n            xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;\n            isPreviousElementTag = true;\n            continue;\n        } else if (tagName[0] === \"?\") {\n            const attStr = attr_to_str(tagObj[\":@\"], options);\n            const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n            let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n            piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n            xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;\n            isPreviousElementTag = true;\n            continue;\n        }\n        let newIdentation = indentation;\n        if (newIdentation !== \"\") {\n            newIdentation += options.indentBy;\n        }\n        const attStr = attr_to_str(tagObj[\":@\"], options);\n        const tagStart = indentation + `<${tagName}${attStr}`;\n        const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n        if (options.unpairedTags.indexOf(tagName) !== -1) {\n            if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n            else xmlStr += tagStart + \"/>\";\n        } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n            xmlStr += tagStart + \"/>\";\n        } else if (tagValue && tagValue.endsWith(\">\")) {\n            xmlStr += tagStart + `>${tagValue}${indentation}</${tagName}>`;\n        } else {\n            xmlStr += tagStart + \">\";\n            if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"</\"))) {\n                xmlStr += indentation + options.indentBy + tagValue + indentation;\n            } else {\n                xmlStr += tagValue;\n            }\n            xmlStr += `</${tagName}>`;\n        }\n        isPreviousElementTag = true;\n    }\n\n    return xmlStr;\n}\n\nfunction propName(obj) {\n    const keys = Object.keys(obj);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        if(!obj.hasOwnProperty(key)) continue;\n        if (key !== \":@\") return key;\n    }\n}\n\nfunction attr_to_str(attrMap, options) {\n    let attrStr = \"\";\n    if (attrMap && !options.ignoreAttributes) {\n        for (let attr in attrMap) {\n            if(!attrMap.hasOwnProperty(attr)) continue;\n            let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n            attrVal = replaceEntitiesValue(attrVal, options);\n            if (attrVal === true && options.suppressBooleanAttributes) {\n                attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n            } else {\n                attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n            }\n        }\n    }\n    return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n    jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n    let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n    for (let index in options.stopNodes) {\n        if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n    }\n    return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n    if (textValue && textValue.length > 0 && options.processEntities) {\n        for (let i = 0; i < options.entities.length; i++) {\n            const entity = options.entities[i];\n            textValue = textValue.replace(entity.regex, entity.val);\n        }\n    }\n    return textValue;\n}\nvar orderedJs2Xml = toXml;\n\n//parse Empty Node as self closing node\nconst buildFromOrderedJs = orderedJs2Xml;\n\nconst defaultOptions$1 = {\n  attributeNamePrefix: '@_',\n  attributesGroupName: false,\n  textNodeName: '#text',\n  ignoreAttributes: true,\n  cdataPropName: false,\n  format: false,\n  indentBy: '  ',\n  suppressEmptyNode: false,\n  suppressUnpairedNode: true,\n  suppressBooleanAttributes: true,\n  tagValueProcessor: function(key, a) {\n    return a;\n  },\n  attributeValueProcessor: function(attrName, a) {\n    return a;\n  },\n  preserveOrder: false,\n  commentPropName: false,\n  unpairedTags: [],\n  entities: [\n    { regex: new RegExp(\"&\", \"g\"), val: \"&amp;\" },//it must be on top\n    { regex: new RegExp(\">\", \"g\"), val: \"&gt;\" },\n    { regex: new RegExp(\"<\", \"g\"), val: \"&lt;\" },\n    { regex: new RegExp(\"\\'\", \"g\"), val: \"&apos;\" },\n    { regex: new RegExp(\"\\\"\", \"g\"), val: \"&quot;\" }\n  ],\n  processEntities: true,\n  stopNodes: [],\n  // transformTagName: false,\n  // transformAttributeName: false,\n  oneListGroup: false\n};\n\nfunction Builder(options) {\n  this.options = Object.assign({}, defaultOptions$1, options);\n  if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n    this.isAttribute = function(/*a*/) {\n      return false;\n    };\n  } else {\n    this.attrPrefixLen = this.options.attributeNamePrefix.length;\n    this.isAttribute = isAttribute;\n  }\n\n  this.processTextOrObjNode = processTextOrObjNode;\n\n  if (this.options.format) {\n    this.indentate = indentate;\n    this.tagEndChar = '>\\n';\n    this.newLine = '\\n';\n  } else {\n    this.indentate = function() {\n      return '';\n    };\n    this.tagEndChar = '>';\n    this.newLine = '';\n  }\n}\n\nBuilder.prototype.build = function(jObj) {\n  if(this.options.preserveOrder){\n    return buildFromOrderedJs(jObj, this.options);\n  }else {\n    if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){\n      jObj = {\n        [this.options.arrayNodeName] : jObj\n      };\n    }\n    return this.j2x(jObj, 0).val;\n  }\n};\n\nBuilder.prototype.j2x = function(jObj, level) {\n  let attrStr = '';\n  let val = '';\n  for (let key in jObj) {\n    if(!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n    if (typeof jObj[key] === 'undefined') {\n      // supress undefined node only if it is not an attribute\n      if (this.isAttribute(key)) {\n        val += '';\n      }\n    } else if (jObj[key] === null) {\n      // null attribute should be ignored by the attribute list, but should not cause the tag closing\n      if (this.isAttribute(key)) {\n        val += '';\n      } else if (key[0] === '?') {\n        val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n      } else {\n        val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n      }\n      // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n    } else if (jObj[key] instanceof Date) {\n      val += this.buildTextValNode(jObj[key], key, '', level);\n    } else if (typeof jObj[key] !== 'object') {\n      //premitive type\n      const attr = this.isAttribute(key);\n      if (attr) {\n        attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n      }else {\n        //tag value\n        if (key === this.options.textNodeName) {\n          let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n          val += this.replaceEntitiesValue(newval);\n        } else {\n          val += this.buildTextValNode(jObj[key], key, '', level);\n        }\n      }\n    } else if (Array.isArray(jObj[key])) {\n      //repeated nodes\n      const arrLen = jObj[key].length;\n      let listTagVal = \"\";\n      for (let j = 0; j < arrLen; j++) {\n        const item = jObj[key][j];\n        if (typeof item === 'undefined') ; else if (item === null) {\n          if(key[0] === \"?\") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n          else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n          // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n        } else if (typeof item === 'object') {\n          if(this.options.oneListGroup ){\n            listTagVal += this.j2x(item, level + 1).val;\n          }else {\n            listTagVal += this.processTextOrObjNode(item, key, level);\n          }\n        } else {\n          listTagVal += this.buildTextValNode(item, key, '', level);\n        }\n      }\n      if(this.options.oneListGroup){\n        listTagVal = this.buildObjectNode(listTagVal, key, '', level);\n      }\n      val += listTagVal;\n    } else {\n      //nested node\n      if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n        const Ks = Object.keys(jObj[key]);\n        const L = Ks.length;\n        for (let j = 0; j < L; j++) {\n          attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n        }\n      } else {\n        val += this.processTextOrObjNode(jObj[key], key, level);\n      }\n    }\n  }\n  return {attrStr: attrStr, val: val};\n};\n\nBuilder.prototype.buildAttrPairStr = function(attrName, val){\n  val = this.options.attributeValueProcessor(attrName, '' + val);\n  val = this.replaceEntitiesValue(val);\n  if (this.options.suppressBooleanAttributes && val === \"true\") {\n    return ' ' + attrName;\n  } else return ' ' + attrName + '=\"' + val + '\"';\n};\n\nfunction processTextOrObjNode (object, key, level) {\n  const result = this.j2x(object, level + 1);\n  if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {\n    return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n  } else {\n    return this.buildObjectNode(result.val, key, result.attrStr, level);\n  }\n}\n\nBuilder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n  if(val === \"\"){\n    if(key[0] === \"?\") return  this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n    else {\n      return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n    }\n  }else {\n\n    let tagEndExp = '</' + key + this.tagEndChar;\n    let piClosingChar = \"\";\n    \n    if(key[0] === \"?\") {\n      piClosingChar = \"?\";\n      tagEndExp = \"\";\n    }\n  \n    // attrStr is an empty string in case the attribute came as undefined or null\n    if ((attrStr || attrStr === '') && val.indexOf('<') === -1) {\n      return ( this.indentate(level) + '<' +  key + attrStr + piClosingChar + '>' + val + tagEndExp );\n    } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n      return this.indentate(level) + `<!--${val}-->` + this.newLine;\n    }else {\n      return (\n        this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +\n        val +\n        this.indentate(level) + tagEndExp    );\n    }\n  }\n};\n\nBuilder.prototype.closeTag = function(key){\n  let closeTag = \"\";\n  if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired\n    if(!this.options.suppressUnpairedNode) closeTag = \"/\";\n  }else if(this.options.suppressEmptyNode){ //empty\n    closeTag = \"/\";\n  }else {\n    closeTag = `></${key}`;\n  }\n  return closeTag;\n};\n\nBuilder.prototype.buildTextValNode = function(val, key, attrStr, level) {\n  if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {\n    return this.indentate(level) + `<![CDATA[${val}]]>` +  this.newLine;\n  }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n    return this.indentate(level) + `<!--${val}-->` +  this.newLine;\n  }else if(key[0] === \"?\") {//PI tag\n    return  this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; \n  }else {\n    let textValue = this.options.tagValueProcessor(key, val);\n    textValue = this.replaceEntitiesValue(textValue);\n  \n    if( textValue === ''){\n      return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n    }else {\n      return this.indentate(level) + '<' + key + attrStr + '>' +\n         textValue +\n        '</' + key + this.tagEndChar;\n    }\n  }\n};\n\nBuilder.prototype.replaceEntitiesValue = function(textValue){\n  if(textValue && textValue.length > 0 && this.options.processEntities){\n    for (let i=0; i<this.options.entities.length; i++) {\n      const entity = this.options.entities[i];\n      textValue = textValue.replace(entity.regex, entity.val);\n    }\n  }\n  return textValue;\n};\n\nfunction indentate(level) {\n  return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n  if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {\n    return name.substr(this.attrPrefixLen);\n  } else {\n    return false;\n  }\n}\n\nvar json2xml = Builder;\n\nconst validator = validator$2;\nconst XMLParser$1 = XMLParser_1;\nconst XMLBuilder = json2xml;\n\nvar fxp = {\n  XMLParser: XMLParser$1,\n  XMLValidator: validator,\n  XMLBuilder: XMLBuilder\n};\n\nconst {XMLParser, XMLValidator} = fxp;\n\nconst isSvg = input => {\n\tif (input === undefined || input === null) {\n\t\treturn false;\n\t}\n\n\tinput = input.toString().trim();\n\n\tif (input.length === 0) {\n\t\treturn false;\n\t}\n\n\t// Has to be `!==` as it can also return an object with error info.\n\tif (XMLValidator.validate(input) !== true) {\n\t\treturn false;\n\t}\n\n\tlet jsonObject;\n\tconst parser = new XMLParser();\n\n\ttry {\n\t\tjsonObject = parser.parse(input);\n\t} catch (_) {\n\t\treturn false;\n\t}\n\n\tif (!jsonObject) {\n\t\treturn false;\n\t}\n\n\tif (!('svg' in jsonObject)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nisSvg$1.exports = isSvg;\n// TODO: Remove this for the next major release\nisSvg$1.exports.default = isSvg;\n\nconst typedArrayTypeNames = [\n    'Int8Array',\n    'Uint8Array',\n    'Uint8ClampedArray',\n    'Int16Array',\n    'Uint16Array',\n    'Int32Array',\n    'Uint32Array',\n    'Float32Array',\n    'Float64Array',\n    'BigInt64Array',\n    'BigUint64Array',\n];\nfunction isTypedArrayName(name) {\n    return typedArrayTypeNames.includes(name);\n}\nconst objectTypeNames = [\n    'Function',\n    'Generator',\n    'AsyncGenerator',\n    'GeneratorFunction',\n    'AsyncGeneratorFunction',\n    'AsyncFunction',\n    'Observable',\n    'Array',\n    'Buffer',\n    'Blob',\n    'Object',\n    'RegExp',\n    'Date',\n    'Error',\n    'Map',\n    'Set',\n    'WeakMap',\n    'WeakSet',\n    'WeakRef',\n    'ArrayBuffer',\n    'SharedArrayBuffer',\n    'DataView',\n    'Promise',\n    'URL',\n    'FormData',\n    'URLSearchParams',\n    'HTMLElement',\n    'NaN',\n    ...typedArrayTypeNames,\n];\nfunction isObjectTypeName(name) {\n    return objectTypeNames.includes(name);\n}\nconst primitiveTypeNames = [\n    'null',\n    'undefined',\n    'string',\n    'number',\n    'bigint',\n    'boolean',\n    'symbol',\n];\nfunction isPrimitiveTypeName(name) {\n    return primitiveTypeNames.includes(name);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isOfType(type) {\n    return (value) => typeof value === type;\n}\nconst { toString } = Object.prototype;\nconst getObjectType = (value) => {\n    const objectTypeName = toString.call(value).slice(8, -1);\n    if (/HTML\\w+Element/.test(objectTypeName) && is.domElement(value)) {\n        return 'HTMLElement';\n    }\n    if (isObjectTypeName(objectTypeName)) {\n        return objectTypeName;\n    }\n    return undefined;\n};\nconst isObjectOfType = (type) => (value) => getObjectType(value) === type;\nfunction is(value) {\n    if (value === null) {\n        return 'null';\n    }\n    switch (typeof value) {\n        case 'undefined': {\n            return 'undefined';\n        }\n        case 'string': {\n            return 'string';\n        }\n        case 'number': {\n            return Number.isNaN(value) ? 'NaN' : 'number';\n        }\n        case 'boolean': {\n            return 'boolean';\n        }\n        case 'function': {\n            return 'Function';\n        }\n        case 'bigint': {\n            return 'bigint';\n        }\n        case 'symbol': {\n            return 'symbol';\n        }\n    }\n    if (is.observable(value)) {\n        return 'Observable';\n    }\n    if (is.array(value)) {\n        return 'Array';\n    }\n    if (is.buffer(value)) {\n        return 'Buffer';\n    }\n    const tagType = getObjectType(value);\n    if (tagType) {\n        return tagType;\n    }\n    if (value instanceof String || value instanceof Boolean || value instanceof Number) {\n        throw new TypeError('Please don\\'t use object wrappers for primitive types');\n    }\n    return 'Object';\n}\nis.undefined = isOfType('undefined');\nis.string = isOfType('string');\nconst isNumberType = isOfType('number');\nis.number = (value) => isNumberType(value) && !is.nan(value);\nis.positiveNumber = (value) => is.number(value) && value > 0;\nis.negativeNumber = (value) => is.number(value) && value < 0;\nis.bigint = isOfType('bigint');\n// eslint-disable-next-line @typescript-eslint/ban-types\nis.function_ = isOfType('function');\n// eslint-disable-next-line @typescript-eslint/ban-types\nis.null_ = (value) => value === null;\nis.class_ = (value) => is.function_(value) && value.toString().startsWith('class ');\nis.boolean = (value) => value === true || value === false;\nis.symbol = isOfType('symbol');\nis.numericString = (value) => is.string(value) && !is.emptyStringOrWhitespace(value) && !Number.isNaN(Number(value));\nis.array = (value, assertion) => {\n    if (!Array.isArray(value)) {\n        return false;\n    }\n    if (!is.function_(assertion)) {\n        return true;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    return value.every(element => assertion(element));\n};\n// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\nis.buffer = (value) => value?.constructor?.isBuffer?.(value) ?? false;\nis.blob = (value) => isObjectOfType('Blob')(value);\nis.nullOrUndefined = (value) => is.null_(value) || is.undefined(value); // eslint-disable-line @typescript-eslint/ban-types\nis.object = (value) => !is.null_(value) && (typeof value === 'object' || is.function_(value)); // eslint-disable-line @typescript-eslint/ban-types\nis.iterable = (value) => is.function_(value?.[Symbol.iterator]);\nis.asyncIterable = (value) => is.function_(value?.[Symbol.asyncIterator]);\nis.generator = (value) => is.iterable(value) && is.function_(value?.next) && is.function_(value?.throw);\nis.asyncGenerator = (value) => is.asyncIterable(value) && is.function_(value.next) && is.function_(value.throw);\nis.nativePromise = (value) => isObjectOfType('Promise')(value);\nconst hasPromiseApi = (value) => is.function_(value?.then)\n    && is.function_(value?.catch);\nis.promise = (value) => is.nativePromise(value) || hasPromiseApi(value);\nis.generatorFunction = isObjectOfType('GeneratorFunction');\nis.asyncGeneratorFunction = (value) => getObjectType(value) === 'AsyncGeneratorFunction';\nis.asyncFunction = (value) => getObjectType(value) === 'AsyncFunction';\n// eslint-disable-next-line no-prototype-builtins, @typescript-eslint/ban-types\nis.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype');\nis.regExp = isObjectOfType('RegExp');\nis.date = isObjectOfType('Date');\nis.error = isObjectOfType('Error');\nis.map = (value) => isObjectOfType('Map')(value);\nis.set = (value) => isObjectOfType('Set')(value);\nis.weakMap = (value) => isObjectOfType('WeakMap')(value); // eslint-disable-line @typescript-eslint/ban-types\nis.weakSet = (value) => isObjectOfType('WeakSet')(value); // eslint-disable-line @typescript-eslint/ban-types\nis.weakRef = (value) => isObjectOfType('WeakRef')(value); // eslint-disable-line @typescript-eslint/ban-types\nis.int8Array = isObjectOfType('Int8Array');\nis.uint8Array = isObjectOfType('Uint8Array');\nis.uint8ClampedArray = isObjectOfType('Uint8ClampedArray');\nis.int16Array = isObjectOfType('Int16Array');\nis.uint16Array = isObjectOfType('Uint16Array');\nis.int32Array = isObjectOfType('Int32Array');\nis.uint32Array = isObjectOfType('Uint32Array');\nis.float32Array = isObjectOfType('Float32Array');\nis.float64Array = isObjectOfType('Float64Array');\nis.bigInt64Array = isObjectOfType('BigInt64Array');\nis.bigUint64Array = isObjectOfType('BigUint64Array');\nis.arrayBuffer = isObjectOfType('ArrayBuffer');\nis.sharedArrayBuffer = isObjectOfType('SharedArrayBuffer');\nis.dataView = isObjectOfType('DataView');\n// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\nis.enumCase = (value, targetEnum) => Object.values(targetEnum).includes(value);\nis.directInstanceOf = (instance, class_) => Object.getPrototypeOf(instance) === class_.prototype;\nis.urlInstance = (value) => isObjectOfType('URL')(value);\nis.urlString = (value) => {\n    if (!is.string(value)) {\n        return false;\n    }\n    try {\n        new URL(value); // eslint-disable-line no-new\n        return true;\n    }\n    catch {\n        return false;\n    }\n};\n// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`\nis.truthy = (value) => Boolean(value); // eslint-disable-line unicorn/prefer-native-coercion-functions\n// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`\nis.falsy = (value) => !value;\nis.nan = (value) => Number.isNaN(value);\nis.primitive = (value) => is.null_(value) || isPrimitiveTypeName(typeof value);\nis.integer = (value) => Number.isInteger(value);\nis.safeInteger = (value) => Number.isSafeInteger(value);\nis.plainObject = (value) => {\n    // From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\n    if (typeof value !== 'object' || value === null) {\n        return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const prototype = Object.getPrototypeOf(value);\n    return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n};\nis.typedArray = (value) => isTypedArrayName(getObjectType(value));\nconst isValidLength = (value) => is.safeInteger(value) && value >= 0;\nis.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length);\nis.tupleLike = (value, guards) => {\n    if (is.array(guards) && is.array(value) && guards.length === value.length) {\n        return guards.every((guard, index) => guard(value[index]));\n    }\n    return false;\n};\nis.inRange = (value, range) => {\n    if (is.number(range)) {\n        return value >= Math.min(0, range) && value <= Math.max(range, 0);\n    }\n    if (is.array(range) && range.length === 2) {\n        return value >= Math.min(...range) && value <= Math.max(...range);\n    }\n    throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);\n};\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst NODE_TYPE_ELEMENT = 1;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DOM_PROPERTIES_TO_CHECK = [\n    'innerHTML',\n    'ownerDocument',\n    'style',\n    'attributes',\n    'nodeValue',\n];\nis.domElement = (value) => is.object(value)\n    && value.nodeType === NODE_TYPE_ELEMENT\n    && is.string(value.nodeName)\n    && !is.plainObject(value)\n    && DOM_PROPERTIES_TO_CHECK.every(property => property in value);\nis.observable = (value) => {\n    if (!value) {\n        return false;\n    }\n    // eslint-disable-next-line no-use-extend-native/no-use-extend-native, @typescript-eslint/no-unsafe-call\n    if (value === value[Symbol.observable]?.()) {\n        return true;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n    if (value === value['@@observable']?.()) {\n        return true;\n    }\n    return false;\n};\nis.nodeStream = (value) => is.object(value) && is.function_(value.pipe) && !is.observable(value);\nis.infinite = (value) => value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY;\nconst isAbsoluteMod2 = (remainder) => (value) => is.integer(value) && Math.abs(value % 2) === remainder;\nis.evenInteger = isAbsoluteMod2(0);\nis.oddInteger = isAbsoluteMod2(1);\nis.emptyArray = (value) => is.array(value) && value.length === 0;\nis.nonEmptyArray = (value) => is.array(value) && value.length > 0;\nis.emptyString = (value) => is.string(value) && value.length === 0;\nconst isWhiteSpaceString = (value) => is.string(value) && !/\\S/.test(value);\nis.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value);\n// TODO: Use `not ''` when the `not` operator is available.\nis.nonEmptyString = (value) => is.string(value) && value.length > 0;\n// TODO: Use `not ''` when the `not` operator is available.\nis.nonEmptyStringAndNotWhitespace = (value) => is.string(value) && !is.emptyStringOrWhitespace(value);\n// eslint-disable-next-line unicorn/no-array-callback-reference\nis.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0;\n// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:\n// - https://github.com/Microsoft/TypeScript/pull/29317\n// eslint-disable-next-line unicorn/no-array-callback-reference\nis.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0;\nis.emptySet = (value) => is.set(value) && value.size === 0;\nis.nonEmptySet = (value) => is.set(value) && value.size > 0;\n// eslint-disable-next-line unicorn/no-array-callback-reference\nis.emptyMap = (value) => is.map(value) && value.size === 0;\n// eslint-disable-next-line unicorn/no-array-callback-reference\nis.nonEmptyMap = (value) => is.map(value) && value.size > 0;\n// `PropertyKey` is any value that can be used as an object key (string, number, or symbol)\nis.propertyKey = (value) => is.any([is.string, is.number, is.symbol], value);\nis.formData = (value) => isObjectOfType('FormData')(value);\nis.urlSearchParams = (value) => isObjectOfType('URLSearchParams')(value);\nconst predicateOnArray = (method, predicate, values) => {\n    if (!is.function_(predicate)) {\n        throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);\n    }\n    if (values.length === 0) {\n        throw new TypeError('Invalid number of values');\n    }\n    return method.call(values, predicate);\n};\nis.any = (predicate, ...values) => {\n    const predicates = is.array(predicate) ? predicate : [predicate];\n    return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values));\n};\nis.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values);\nconst assertType = (condition, description, value, options = {}) => {\n    if (!condition) {\n        const { multipleValues } = options;\n        const valuesMessage = multipleValues\n            ? `received values of types ${[\n                ...new Set(value.map(singleValue => `\\`${is(singleValue)}\\``)),\n            ].join(', ')}`\n            : `received value of type \\`${is(value)}\\``;\n        throw new TypeError(`Expected value which is \\`${description}\\`, ${valuesMessage}.`);\n    }\n};\n/* eslint-disable @typescript-eslint/no-confusing-void-expression */\nconst assert$1 = {\n    // Unknowns.\n    undefined: (value) => assertType(is.undefined(value), 'undefined', value),\n    string: (value) => assertType(is.string(value), 'string', value),\n    number: (value) => assertType(is.number(value), 'number', value),\n    positiveNumber: (value) => assertType(is.positiveNumber(value), \"positive number\" /* AssertionTypeDescription.positiveNumber */, value),\n    negativeNumber: (value) => assertType(is.negativeNumber(value), \"negative number\" /* AssertionTypeDescription.negativeNumber */, value),\n    bigint: (value) => assertType(is.bigint(value), 'bigint', value),\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    function_: (value) => assertType(is.function_(value), 'Function', value),\n    null_: (value) => assertType(is.null_(value), 'null', value),\n    class_: (value) => assertType(is.class_(value), \"Class\" /* AssertionTypeDescription.class_ */, value),\n    boolean: (value) => assertType(is.boolean(value), 'boolean', value),\n    symbol: (value) => assertType(is.symbol(value), 'symbol', value),\n    numericString: (value) => assertType(is.numericString(value), \"string with a number\" /* AssertionTypeDescription.numericString */, value),\n    array: (value, assertion) => {\n        const assert = assertType;\n        assert(is.array(value), 'Array', value);\n        if (assertion) {\n            // eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference\n            value.forEach(assertion);\n        }\n    },\n    buffer: (value) => assertType(is.buffer(value), 'Buffer', value),\n    blob: (value) => assertType(is.blob(value), 'Blob', value),\n    nullOrUndefined: (value) => assertType(is.nullOrUndefined(value), \"null or undefined\" /* AssertionTypeDescription.nullOrUndefined */, value),\n    object: (value) => assertType(is.object(value), 'Object', value),\n    iterable: (value) => assertType(is.iterable(value), \"Iterable\" /* AssertionTypeDescription.iterable */, value),\n    asyncIterable: (value) => assertType(is.asyncIterable(value), \"AsyncIterable\" /* AssertionTypeDescription.asyncIterable */, value),\n    generator: (value) => assertType(is.generator(value), 'Generator', value),\n    asyncGenerator: (value) => assertType(is.asyncGenerator(value), 'AsyncGenerator', value),\n    nativePromise: (value) => assertType(is.nativePromise(value), \"native Promise\" /* AssertionTypeDescription.nativePromise */, value),\n    promise: (value) => assertType(is.promise(value), 'Promise', value),\n    generatorFunction: (value) => assertType(is.generatorFunction(value), 'GeneratorFunction', value),\n    asyncGeneratorFunction: (value) => assertType(is.asyncGeneratorFunction(value), 'AsyncGeneratorFunction', value),\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    asyncFunction: (value) => assertType(is.asyncFunction(value), 'AsyncFunction', value),\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    boundFunction: (value) => assertType(is.boundFunction(value), 'Function', value),\n    regExp: (value) => assertType(is.regExp(value), 'RegExp', value),\n    date: (value) => assertType(is.date(value), 'Date', value),\n    error: (value) => assertType(is.error(value), 'Error', value),\n    map: (value) => assertType(is.map(value), 'Map', value),\n    set: (value) => assertType(is.set(value), 'Set', value),\n    weakMap: (value) => assertType(is.weakMap(value), 'WeakMap', value),\n    weakSet: (value) => assertType(is.weakSet(value), 'WeakSet', value),\n    weakRef: (value) => assertType(is.weakRef(value), 'WeakRef', value),\n    int8Array: (value) => assertType(is.int8Array(value), 'Int8Array', value),\n    uint8Array: (value) => assertType(is.uint8Array(value), 'Uint8Array', value),\n    uint8ClampedArray: (value) => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value),\n    int16Array: (value) => assertType(is.int16Array(value), 'Int16Array', value),\n    uint16Array: (value) => assertType(is.uint16Array(value), 'Uint16Array', value),\n    int32Array: (value) => assertType(is.int32Array(value), 'Int32Array', value),\n    uint32Array: (value) => assertType(is.uint32Array(value), 'Uint32Array', value),\n    float32Array: (value) => assertType(is.float32Array(value), 'Float32Array', value),\n    float64Array: (value) => assertType(is.float64Array(value), 'Float64Array', value),\n    bigInt64Array: (value) => assertType(is.bigInt64Array(value), 'BigInt64Array', value),\n    bigUint64Array: (value) => assertType(is.bigUint64Array(value), 'BigUint64Array', value),\n    arrayBuffer: (value) => assertType(is.arrayBuffer(value), 'ArrayBuffer', value),\n    sharedArrayBuffer: (value) => assertType(is.sharedArrayBuffer(value), 'SharedArrayBuffer', value),\n    dataView: (value) => assertType(is.dataView(value), 'DataView', value),\n    enumCase: (value, targetEnum) => assertType(is.enumCase(value, targetEnum), 'EnumCase', value),\n    urlInstance: (value) => assertType(is.urlInstance(value), 'URL', value),\n    urlString: (value) => assertType(is.urlString(value), \"string with a URL\" /* AssertionTypeDescription.urlString */, value),\n    truthy: (value) => assertType(is.truthy(value), \"truthy\" /* AssertionTypeDescription.truthy */, value),\n    falsy: (value) => assertType(is.falsy(value), \"falsy\" /* AssertionTypeDescription.falsy */, value),\n    nan: (value) => assertType(is.nan(value), \"NaN\" /* AssertionTypeDescription.nan */, value),\n    primitive: (value) => assertType(is.primitive(value), \"primitive\" /* AssertionTypeDescription.primitive */, value),\n    integer: (value) => assertType(is.integer(value), \"integer\" /* AssertionTypeDescription.integer */, value),\n    safeInteger: (value) => assertType(is.safeInteger(value), \"integer\" /* AssertionTypeDescription.safeInteger */, value),\n    plainObject: (value) => assertType(is.plainObject(value), \"plain object\" /* AssertionTypeDescription.plainObject */, value),\n    typedArray: (value) => assertType(is.typedArray(value), \"TypedArray\" /* AssertionTypeDescription.typedArray */, value),\n    arrayLike: (value) => assertType(is.arrayLike(value), \"array-like\" /* AssertionTypeDescription.arrayLike */, value),\n    tupleLike: (value, guards) => assertType(is.tupleLike(value, guards), \"tuple-like\" /* AssertionTypeDescription.tupleLike */, value),\n    domElement: (value) => assertType(is.domElement(value), \"HTMLElement\" /* AssertionTypeDescription.domElement */, value),\n    observable: (value) => assertType(is.observable(value), 'Observable', value),\n    nodeStream: (value) => assertType(is.nodeStream(value), \"Node.js Stream\" /* AssertionTypeDescription.nodeStream */, value),\n    infinite: (value) => assertType(is.infinite(value), \"infinite number\" /* AssertionTypeDescription.infinite */, value),\n    emptyArray: (value) => assertType(is.emptyArray(value), \"empty array\" /* AssertionTypeDescription.emptyArray */, value),\n    nonEmptyArray: (value) => assertType(is.nonEmptyArray(value), \"non-empty array\" /* AssertionTypeDescription.nonEmptyArray */, value),\n    emptyString: (value) => assertType(is.emptyString(value), \"empty string\" /* AssertionTypeDescription.emptyString */, value),\n    emptyStringOrWhitespace: (value) => assertType(is.emptyStringOrWhitespace(value), \"empty string or whitespace\" /* AssertionTypeDescription.emptyStringOrWhitespace */, value),\n    nonEmptyString: (value) => assertType(is.nonEmptyString(value), \"non-empty string\" /* AssertionTypeDescription.nonEmptyString */, value),\n    nonEmptyStringAndNotWhitespace: (value) => assertType(is.nonEmptyStringAndNotWhitespace(value), \"non-empty string and not whitespace\" /* AssertionTypeDescription.nonEmptyStringAndNotWhitespace */, value),\n    emptyObject: (value) => assertType(is.emptyObject(value), \"empty object\" /* AssertionTypeDescription.emptyObject */, value),\n    nonEmptyObject: (value) => assertType(is.nonEmptyObject(value), \"non-empty object\" /* AssertionTypeDescription.nonEmptyObject */, value),\n    emptySet: (value) => assertType(is.emptySet(value), \"empty set\" /* AssertionTypeDescription.emptySet */, value),\n    nonEmptySet: (value) => assertType(is.nonEmptySet(value), \"non-empty set\" /* AssertionTypeDescription.nonEmptySet */, value),\n    emptyMap: (value) => assertType(is.emptyMap(value), \"empty map\" /* AssertionTypeDescription.emptyMap */, value),\n    nonEmptyMap: (value) => assertType(is.nonEmptyMap(value), \"non-empty map\" /* AssertionTypeDescription.nonEmptyMap */, value),\n    propertyKey: (value) => assertType(is.propertyKey(value), 'PropertyKey', value),\n    formData: (value) => assertType(is.formData(value), 'FormData', value),\n    urlSearchParams: (value) => assertType(is.urlSearchParams(value), 'URLSearchParams', value),\n    // Numbers.\n    evenInteger: (value) => assertType(is.evenInteger(value), \"even integer\" /* AssertionTypeDescription.evenInteger */, value),\n    oddInteger: (value) => assertType(is.oddInteger(value), \"odd integer\" /* AssertionTypeDescription.oddInteger */, value),\n    // Two arguments.\n    directInstanceOf: (instance, class_) => assertType(is.directInstanceOf(instance, class_), \"T\" /* AssertionTypeDescription.directInstanceOf */, instance),\n    inRange: (value, range) => assertType(is.inRange(value, range), \"in range\" /* AssertionTypeDescription.inRange */, value),\n    // Variadic functions.\n    any: (predicate, ...values) => assertType(is.any(predicate, ...values), \"predicate returns truthy for any value\" /* AssertionTypeDescription.any */, values, { multipleValues: true }),\n    all: (predicate, ...values) => assertType(is.all(predicate, ...values), \"predicate returns truthy for all values\" /* AssertionTypeDescription.all */, values, { multipleValues: true }),\n};\n/* eslint-enable @typescript-eslint/no-confusing-void-expression */\n// Some few keywords are reserved, but we'll populate them for Node.js users\n// See https://github.com/Microsoft/TypeScript/issues/2536\nObject.defineProperties(is, {\n    class: {\n        value: is.class_,\n    },\n    function: {\n        value: is.function_,\n    },\n    null: {\n        value: is.null_,\n    },\n});\nObject.defineProperties(assert$1, {\n    class: {\n        value: assert$1.class_,\n    },\n    function: {\n        value: assert$1.function_,\n    },\n    null: {\n        value: assert$1.null_,\n    },\n});\n\nclass CancelError$1 extends Error {\n\tconstructor(reason) {\n\t\tsuper(reason || 'Promise was canceled');\n\t\tthis.name = 'CancelError';\n\t}\n\n\tget isCanceled() {\n\t\treturn true;\n\t}\n}\n\n// TODO: Use private class fields when ESLint 8 is out.\n\nclass PCancelable {\n\tstatic fn(userFunction) {\n\t\treturn (...arguments_) => {\n\t\t\treturn new PCancelable((resolve, reject, onCancel) => {\n\t\t\t\targuments_.push(onCancel);\n\t\t\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\t\t\tuserFunction(...arguments_).then(resolve, reject);\n\t\t\t});\n\t\t};\n\t}\n\n\tconstructor(executor) {\n\t\tthis._cancelHandlers = [];\n\t\tthis._isPending = true;\n\t\tthis._isCanceled = false;\n\t\tthis._rejectOnCancel = true;\n\n\t\tthis._promise = new Promise((resolve, reject) => {\n\t\t\tthis._reject = reject;\n\n\t\t\tconst onResolve = value => {\n\t\t\t\tif (!this._isCanceled || !onCancel.shouldReject) {\n\t\t\t\t\tthis._isPending = false;\n\t\t\t\t\tresolve(value);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onReject = error => {\n\t\t\t\tthis._isPending = false;\n\t\t\t\treject(error);\n\t\t\t};\n\n\t\t\tconst onCancel = handler => {\n\t\t\t\tif (!this._isPending) {\n\t\t\t\t\tthrow new Error('The `onCancel` handler was attached after the promise settled.');\n\t\t\t\t}\n\n\t\t\t\tthis._cancelHandlers.push(handler);\n\t\t\t};\n\n\t\t\tObject.defineProperties(onCancel, {\n\t\t\t\tshouldReject: {\n\t\t\t\t\tget: () => this._rejectOnCancel,\n\t\t\t\t\tset: boolean => {\n\t\t\t\t\t\tthis._rejectOnCancel = boolean;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\texecutor(onResolve, onReject, onCancel);\n\t\t});\n\t}\n\n\tthen(onFulfilled, onRejected) {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\treturn this._promise.then(onFulfilled, onRejected);\n\t}\n\n\tcatch(onRejected) {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\treturn this._promise.catch(onRejected);\n\t}\n\n\tfinally(onFinally) {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\treturn this._promise.finally(onFinally);\n\t}\n\n\tcancel(reason) {\n\t\tif (!this._isPending || this._isCanceled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isCanceled = true;\n\n\t\tif (this._cancelHandlers.length > 0) {\n\t\t\ttry {\n\t\t\t\tfor (const handler of this._cancelHandlers) {\n\t\t\t\t\thandler();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis._reject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this._rejectOnCancel) {\n\t\t\tthis._reject(new CancelError$1(reason));\n\t\t}\n\t}\n\n\tget isCanceled() {\n\t\treturn this._isCanceled;\n\t}\n}\n\nObject.setPrototypeOf(PCancelable.prototype, Promise.prototype);\n\n// A hacky check to prevent circular references.\nfunction isRequest(x) {\n    return is.object(x) && '_onResponse' in x;\n}\n/**\nAn error to be thrown when a request fails.\nContains a `code` property with error class code, like `ECONNREFUSED`.\n*/\nclass RequestError$1 extends Error {\n    constructor(message, error, self) {\n        super(message);\n        Object.defineProperty(this, \"input\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"code\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"stack\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"response\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"request\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"timings\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Error.captureStackTrace(this, this.constructor);\n        this.name = 'RequestError';\n        this.code = error.code ?? 'ERR_GOT_REQUEST_ERROR';\n        this.input = error.input;\n        if (isRequest(self)) {\n            Object.defineProperty(this, 'request', {\n                enumerable: false,\n                value: self,\n            });\n            Object.defineProperty(this, 'response', {\n                enumerable: false,\n                value: self.response,\n            });\n            this.options = self.options;\n        }\n        else {\n            this.options = self;\n        }\n        this.timings = this.request?.timings;\n        // Recover the original stacktrace\n        if (is.string(error.stack) && is.string(this.stack)) {\n            const indexOfMessage = this.stack.indexOf(this.message) + this.message.length;\n            const thisStackTrace = this.stack.slice(indexOfMessage).split('\\n').reverse();\n            const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\\n').reverse();\n            // Remove duplicated traces\n            while (errorStackTrace.length > 0 && errorStackTrace[0] === thisStackTrace[0]) {\n                thisStackTrace.shift();\n            }\n            this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\\n')}${errorStackTrace.reverse().join('\\n')}`;\n        }\n    }\n}\n/**\nAn error to be thrown when the server redirects you more than ten times.\nIncludes a `response` property.\n*/\nclass MaxRedirectsError extends RequestError$1 {\n    constructor(request) {\n        super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request);\n        this.name = 'MaxRedirectsError';\n        this.code = 'ERR_TOO_MANY_REDIRECTS';\n    }\n}\n/**\nAn error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304.\nIncludes a `response` property.\n*/\n// eslint-disable-next-line @typescript-eslint/naming-convention\nclass HTTPError extends RequestError$1 {\n    constructor(response) {\n        super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request);\n        this.name = 'HTTPError';\n        this.code = 'ERR_NON_2XX_3XX_RESPONSE';\n    }\n}\n/**\nAn error to be thrown when a cache method fails.\nFor example, if the database goes down or there's a filesystem error.\n*/\nclass CacheError$1 extends RequestError$1 {\n    constructor(error, request) {\n        super(error.message, error, request);\n        this.name = 'CacheError';\n        this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_CACHE_ACCESS' : this.code;\n    }\n}\n/**\nAn error to be thrown when the request body is a stream and an error occurs while reading from that stream.\n*/\nclass UploadError extends RequestError$1 {\n    constructor(error, request) {\n        super(error.message, error, request);\n        this.name = 'UploadError';\n        this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_UPLOAD' : this.code;\n    }\n}\n/**\nAn error to be thrown when the request is aborted due to a timeout.\nIncludes an `event` and `timings` property.\n*/\nclass TimeoutError$1 extends RequestError$1 {\n    constructor(error, timings, request) {\n        super(error.message, error, request);\n        Object.defineProperty(this, \"timings\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"event\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.name = 'TimeoutError';\n        this.event = error.event;\n        this.timings = timings;\n    }\n}\n/**\nAn error to be thrown when reading from response stream fails.\n*/\nclass ReadError extends RequestError$1 {\n    constructor(error, request) {\n        super(error.message, error, request);\n        this.name = 'ReadError';\n        this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_READING_RESPONSE_STREAM' : this.code;\n    }\n}\n/**\nAn error which always triggers a new retry when thrown.\n*/\nclass RetryError extends RequestError$1 {\n    constructor(request) {\n        super('Retrying', {}, request);\n        this.name = 'RetryError';\n        this.code = 'ERR_RETRYING';\n    }\n}\n/**\nAn error to be thrown when the request is aborted by AbortController.\n*/\nclass AbortError extends RequestError$1 {\n    constructor(request) {\n        super('This operation was aborted.', {}, request);\n        this.code = 'ERR_ABORTED';\n        this.name = 'AbortError';\n    }\n}\n\nvar source$1 = {exports: {}};\n\n(function (module, exports) {\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tfunction isTLSSocket(socket) {\n\t    return socket.encrypted;\n\t}\n\tconst deferToConnect = (socket, fn) => {\n\t    let listeners;\n\t    if (typeof fn === 'function') {\n\t        const connect = fn;\n\t        listeners = { connect };\n\t    }\n\t    else {\n\t        listeners = fn;\n\t    }\n\t    const hasConnectListener = typeof listeners.connect === 'function';\n\t    const hasSecureConnectListener = typeof listeners.secureConnect === 'function';\n\t    const hasCloseListener = typeof listeners.close === 'function';\n\t    const onConnect = () => {\n\t        if (hasConnectListener) {\n\t            listeners.connect();\n\t        }\n\t        if (isTLSSocket(socket) && hasSecureConnectListener) {\n\t            if (socket.authorized) {\n\t                listeners.secureConnect();\n\t            }\n\t            else if (!socket.authorizationError) {\n\t                socket.once('secureConnect', listeners.secureConnect);\n\t            }\n\t        }\n\t        if (hasCloseListener) {\n\t            socket.once('close', listeners.close);\n\t        }\n\t    };\n\t    if (socket.writable && !socket.connecting) {\n\t        onConnect();\n\t    }\n\t    else if (socket.connecting) {\n\t        socket.once('connect', onConnect);\n\t    }\n\t    else if (socket.destroyed && hasCloseListener) {\n\t        listeners.close(socket._hadError);\n\t    }\n\t};\n\texports.default = deferToConnect;\n\t// For CommonJS default export support\n\tmodule.exports = deferToConnect;\n\tmodule.exports.default = deferToConnect;\n} (source$1, source$1.exports));\n\nvar deferToConnect = /*@__PURE__*/getDefaultExportFromCjs(source$1.exports);\n\nconst timer = (request) => {\n    if (request.timings) {\n        return request.timings;\n    }\n    const timings = {\n        start: Date.now(),\n        socket: undefined,\n        lookup: undefined,\n        connect: undefined,\n        secureConnect: undefined,\n        upload: undefined,\n        response: undefined,\n        end: undefined,\n        error: undefined,\n        abort: undefined,\n        phases: {\n            wait: undefined,\n            dns: undefined,\n            tcp: undefined,\n            tls: undefined,\n            request: undefined,\n            firstByte: undefined,\n            download: undefined,\n            total: undefined,\n        },\n    };\n    request.timings = timings;\n    const handleError = (origin) => {\n        origin.once(require$$0$3.errorMonitor, () => {\n            timings.error = Date.now();\n            timings.phases.total = timings.error - timings.start;\n        });\n    };\n    handleError(request);\n    const onAbort = () => {\n        timings.abort = Date.now();\n        timings.phases.total = timings.abort - timings.start;\n    };\n    request.prependOnceListener('abort', onAbort);\n    const onSocket = (socket) => {\n        timings.socket = Date.now();\n        timings.phases.wait = timings.socket - timings.start;\n        if (require$$1.types.isProxy(socket)) {\n            return;\n        }\n        const lookupListener = () => {\n            timings.lookup = Date.now();\n            timings.phases.dns = timings.lookup - timings.socket;\n        };\n        socket.prependOnceListener('lookup', lookupListener);\n        deferToConnect(socket, {\n            connect: () => {\n                timings.connect = Date.now();\n                if (timings.lookup === undefined) {\n                    socket.removeListener('lookup', lookupListener);\n                    timings.lookup = timings.connect;\n                    timings.phases.dns = timings.lookup - timings.socket;\n                }\n                timings.phases.tcp = timings.connect - timings.lookup;\n            },\n            secureConnect: () => {\n                timings.secureConnect = Date.now();\n                timings.phases.tls = timings.secureConnect - timings.connect;\n            },\n        });\n    };\n    if (request.socket) {\n        onSocket(request.socket);\n    }\n    else {\n        request.prependOnceListener('socket', onSocket);\n    }\n    const onUpload = () => {\n        timings.upload = Date.now();\n        timings.phases.request = timings.upload - (timings.secureConnect ?? timings.connect);\n    };\n    if (request.writableFinished) {\n        onUpload();\n    }\n    else {\n        request.prependOnceListener('finish', onUpload);\n    }\n    request.prependOnceListener('response', (response) => {\n        timings.response = Date.now();\n        timings.phases.firstByte = timings.response - timings.upload;\n        response.timings = timings;\n        handleError(response);\n        response.prependOnceListener('end', () => {\n            request.off('abort', onAbort);\n            response.off('aborted', onAbort);\n            if (timings.phases.total) {\n                // Aborted or errored\n                return;\n            }\n            timings.end = Date.now();\n            timings.phases.download = timings.end - timings.response;\n            timings.phases.total = timings.end - timings.start;\n        });\n        response.prependOnceListener('aborted', onAbort);\n    });\n    return timings;\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\nconst DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';\nconst DATA_URL_DEFAULT_CHARSET = 'us-ascii';\n\nconst testParameter = (name, filters) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);\n\nconst supportedProtocols = new Set([\n\t'https:',\n\t'http:',\n\t'file:',\n]);\n\nconst hasCustomProtocol = urlString => {\n\ttry {\n\t\tconst {protocol} = new URL(urlString);\n\t\treturn protocol.endsWith(':') && !supportedProtocols.has(protocol);\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst normalizeDataURL = (urlString, {stripHash}) => {\n\tconst match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString);\n\n\tif (!match) {\n\t\tthrow new Error(`Invalid URL: ${urlString}`);\n\t}\n\n\tlet {type, data, hash} = match.groups;\n\tconst mediaType = type.split(';');\n\thash = stripHash ? '' : hash;\n\n\tlet isBase64 = false;\n\tif (mediaType[mediaType.length - 1] === 'base64') {\n\t\tmediaType.pop();\n\t\tisBase64 = true;\n\t}\n\n\t// Lowercase MIME type\n\tconst mimeType = mediaType.shift()?.toLowerCase() ?? '';\n\tconst attributes = mediaType\n\t\t.map(attribute => {\n\t\t\tlet [key, value = ''] = attribute.split('=').map(string => string.trim());\n\n\t\t\t// Lowercase `charset`\n\t\t\tif (key === 'charset') {\n\t\t\t\tvalue = value.toLowerCase();\n\n\t\t\t\tif (value === DATA_URL_DEFAULT_CHARSET) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn `${key}${value ? `=${value}` : ''}`;\n\t\t})\n\t\t.filter(Boolean);\n\n\tconst normalizedMediaType = [\n\t\t...attributes,\n\t];\n\n\tif (isBase64) {\n\t\tnormalizedMediaType.push('base64');\n\t}\n\n\tif (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {\n\t\tnormalizedMediaType.unshift(mimeType);\n\t}\n\n\treturn `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;\n};\n\nfunction normalizeUrl(urlString, options) {\n\toptions = {\n\t\tdefaultProtocol: 'http',\n\t\tnormalizeProtocol: true,\n\t\tforceHttp: false,\n\t\tforceHttps: false,\n\t\tstripAuthentication: true,\n\t\tstripHash: false,\n\t\tstripTextFragment: true,\n\t\tstripWWW: true,\n\t\tremoveQueryParameters: [/^utm_\\w+/i],\n\t\tremoveTrailingSlash: true,\n\t\tremoveSingleSlash: true,\n\t\tremoveDirectoryIndex: false,\n\t\tremoveExplicitPort: false,\n\t\tsortQueryParameters: true,\n\t\t...options,\n\t};\n\n\t// Legacy: Append `:` to the protocol if missing.\n\tif (typeof options.defaultProtocol === 'string' && !options.defaultProtocol.endsWith(':')) {\n\t\toptions.defaultProtocol = `${options.defaultProtocol}:`;\n\t}\n\n\turlString = urlString.trim();\n\n\t// Data URL\n\tif (/^data:/i.test(urlString)) {\n\t\treturn normalizeDataURL(urlString, options);\n\t}\n\n\tif (hasCustomProtocol(urlString)) {\n\t\treturn urlString;\n\t}\n\n\tconst hasRelativeProtocol = urlString.startsWith('//');\n\tconst isRelativeUrl = !hasRelativeProtocol && /^\\.*\\//.test(urlString);\n\n\t// Prepend protocol\n\tif (!isRelativeUrl) {\n\t\turlString = urlString.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//, options.defaultProtocol);\n\t}\n\n\tconst urlObject = new URL(urlString);\n\n\tif (options.forceHttp && options.forceHttps) {\n\t\tthrow new Error('The `forceHttp` and `forceHttps` options cannot be used together');\n\t}\n\n\tif (options.forceHttp && urlObject.protocol === 'https:') {\n\t\turlObject.protocol = 'http:';\n\t}\n\n\tif (options.forceHttps && urlObject.protocol === 'http:') {\n\t\turlObject.protocol = 'https:';\n\t}\n\n\t// Remove auth\n\tif (options.stripAuthentication) {\n\t\turlObject.username = '';\n\t\turlObject.password = '';\n\t}\n\n\t// Remove hash\n\tif (options.stripHash) {\n\t\turlObject.hash = '';\n\t} else if (options.stripTextFragment) {\n\t\turlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, '');\n\t}\n\n\t// Remove duplicate slashes if not preceded by a protocol\n\t// NOTE: This could be implemented using a single negative lookbehind\n\t// regex, but we avoid that to maintain compatibility with older js engines\n\t// which do not have support for that feature.\n\tif (urlObject.pathname) {\n\t\t// TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\\b[a-z][a-z\\d+\\-.]{1,50}:)\\/{2,}/g, '/');` when Safari supports negative lookbehind.\n\n\t\t// Split the string by occurrences of this protocol regex, and perform\n\t\t// duplicate-slash replacement on the strings between those occurrences\n\t\t// (if any).\n\t\tconst protocolRegex = /\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g;\n\n\t\tlet lastIndex = 0;\n\t\tlet result = '';\n\t\tfor (;;) {\n\t\t\tconst match = protocolRegex.exec(urlObject.pathname);\n\t\t\tif (!match) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst protocol = match[0];\n\t\t\tconst protocolAtIndex = match.index;\n\t\t\tconst intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex);\n\n\t\t\tresult += intermediate.replace(/\\/{2,}/g, '/');\n\t\t\tresult += protocol;\n\t\t\tlastIndex = protocolAtIndex + protocol.length;\n\t\t}\n\n\t\tconst remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length);\n\t\tresult += remnant.replace(/\\/{2,}/g, '/');\n\n\t\turlObject.pathname = result;\n\t}\n\n\t// Decode URI octets\n\tif (urlObject.pathname) {\n\t\ttry {\n\t\t\turlObject.pathname = decodeURI(urlObject.pathname);\n\t\t} catch {}\n\t}\n\n\t// Remove directory index\n\tif (options.removeDirectoryIndex === true) {\n\t\toptions.removeDirectoryIndex = [/^index\\.[a-z]+$/];\n\t}\n\n\tif (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {\n\t\tlet pathComponents = urlObject.pathname.split('/');\n\t\tconst lastComponent = pathComponents[pathComponents.length - 1];\n\n\t\tif (testParameter(lastComponent, options.removeDirectoryIndex)) {\n\t\t\tpathComponents = pathComponents.slice(0, -1);\n\t\t\turlObject.pathname = pathComponents.slice(1).join('/') + '/';\n\t\t}\n\t}\n\n\tif (urlObject.hostname) {\n\t\t// Remove trailing dot\n\t\turlObject.hostname = urlObject.hostname.replace(/\\.$/, '');\n\n\t\t// Remove `www.`\n\t\tif (options.stripWWW && /^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(urlObject.hostname)) {\n\t\t\t// Each label should be max 63 at length (min: 1).\n\t\t\t// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names\n\t\t\t// Each TLD should be up to 63 characters long (min: 2).\n\t\t\t// It is technically possible to have a single character TLD, but none currently exist.\n\t\t\turlObject.hostname = urlObject.hostname.replace(/^www\\./, '');\n\t\t}\n\t}\n\n\t// Remove query unwanted parameters\n\tif (Array.isArray(options.removeQueryParameters)) {\n\t\t// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.\n\t\tfor (const key of [...urlObject.searchParams.keys()]) {\n\t\t\tif (testParameter(key, options.removeQueryParameters)) {\n\t\t\t\turlObject.searchParams.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!Array.isArray(options.keepQueryParameters) && options.removeQueryParameters === true) {\n\t\turlObject.search = '';\n\t}\n\n\t// Keep wanted query parameters\n\tif (Array.isArray(options.keepQueryParameters) && options.keepQueryParameters.length > 0) {\n\t\t// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.\n\t\tfor (const key of [...urlObject.searchParams.keys()]) {\n\t\t\tif (!testParameter(key, options.keepQueryParameters)) {\n\t\t\t\turlObject.searchParams.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Sort query parameters\n\tif (options.sortQueryParameters) {\n\t\turlObject.searchParams.sort();\n\n\t\t// Calling `.sort()` encodes the search parameters, so we need to decode them again.\n\t\ttry {\n\t\t\turlObject.search = decodeURIComponent(urlObject.search);\n\t\t} catch {}\n\t}\n\n\tif (options.removeTrailingSlash) {\n\t\turlObject.pathname = urlObject.pathname.replace(/\\/$/, '');\n\t}\n\n\t// Remove an explicit port number, excluding a default port number, if applicable\n\tif (options.removeExplicitPort && urlObject.port) {\n\t\turlObject.port = '';\n\t}\n\n\tconst oldUrlString = urlString;\n\n\t// Take advantage of many of the Node `url` normalizations\n\turlString = urlObject.toString();\n\n\tif (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') {\n\t\turlString = urlString.replace(/\\/$/, '');\n\t}\n\n\t// Remove ending `/` unless removeSingleSlash is false\n\tif ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) {\n\t\turlString = urlString.replace(/\\/$/, '');\n\t}\n\n\t// Restore relative protocol, if applicable\n\tif (hasRelativeProtocol && !options.normalizeProtocol) {\n\t\turlString = urlString.replace(/^http:\\/\\//, '//');\n\t}\n\n\t// Remove http/https\n\tif (options.stripProtocol) {\n\t\turlString = urlString.replace(/^(?:https?:)?\\/\\//, '');\n\t}\n\n\treturn urlString;\n}\n\nvar getStream$2 = {exports: {}};\n\nconst {PassThrough: PassThroughStream} = require$$0__default[\"default\"];\n\nvar bufferStream$1 = options => {\n\toptions = {...options};\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst isBuffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || isBuffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (isBuffer) {\n\t\tencoding = null;\n\t}\n\n\tconst stream = new PassThroughStream({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tlet length = 0;\n\tconst chunks = [];\n\n\tstream.on('data', chunk => {\n\t\tchunks.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlength = chunks.length;\n\t\t} else {\n\t\t\tlength += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn chunks;\n\t\t}\n\n\t\treturn isBuffer ? Buffer.concat(chunks, length) : chunks.join('');\n\t};\n\n\tstream.getBufferedLength = () => length;\n\n\treturn stream;\n};\n\nconst {constants: BufferConstants} = require$$0__default$1[\"default\"];\nconst stream$1 = require$$0__default[\"default\"];\nconst {promisify} = require$$1__default[\"default\"];\nconst bufferStream = bufferStream$1;\n\nconst streamPipelinePromisified = promisify(stream$1.pipeline);\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nasync function getStream$1(inputStream, options) {\n\tif (!inputStream) {\n\t\tthrow new Error('Expected a stream');\n\t}\n\n\toptions = {\n\t\tmaxBuffer: Infinity,\n\t\t...options\n\t};\n\n\tconst {maxBuffer} = options;\n\tconst stream = bufferStream(options);\n\n\tawait new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\t// Don't retrieve an oversized buffer.\n\t\t\tif (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\n\t\t\treject(error);\n\t\t};\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tawait streamPipelinePromisified(inputStream, stream);\n\t\t\t\tresolve();\n\t\t\t} catch (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t}\n\t\t})();\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t});\n\n\treturn stream.getBufferedValue();\n}\n\ngetStream$2.exports = getStream$1;\ngetStream$2.exports.buffer = (stream, options) => getStream$1(stream, {...options, encoding: 'buffer'});\ngetStream$2.exports.array = (stream, options) => getStream$1(stream, {...options, array: true});\ngetStream$2.exports.MaxBufferError = MaxBufferError;\n\n// rfc7231 6.1\nconst statusCodeCacheableByDefault = new Set([\n    200,\n    203,\n    204,\n    206,\n    300,\n    301,\n    308,\n    404,\n    405,\n    410,\n    414,\n    501,\n]);\n\n// This implementation does not understand partial responses (206)\nconst understoodStatuses = new Set([\n    200,\n    203,\n    204,\n    300,\n    301,\n    302,\n    303,\n    307,\n    308,\n    404,\n    405,\n    410,\n    414,\n    501,\n]);\n\nconst errorStatusCodes = new Set([\n    500,\n    502,\n    503, \n    504,\n]);\n\nconst hopByHopHeaders = {\n    date: true, // included, because we add Age update Date\n    connection: true,\n    'keep-alive': true,\n    'proxy-authenticate': true,\n    'proxy-authorization': true,\n    te: true,\n    trailer: true,\n    'transfer-encoding': true,\n    upgrade: true,\n};\n\nconst excludedFromRevalidationUpdate = {\n    // Since the old body is reused, it doesn't make sense to change properties of the body\n    'content-length': true,\n    'content-encoding': true,\n    'transfer-encoding': true,\n    'content-range': true,\n};\n\nfunction toNumberOrZero(s) {\n    const n = parseInt(s, 10);\n    return isFinite(n) ? n : 0;\n}\n\n// RFC 5861\nfunction isErrorResponse(response) {\n    // consider undefined response as faulty\n    if(!response) {\n        return true\n    }\n    return errorStatusCodes.has(response.status);\n}\n\nfunction parseCacheControl(header) {\n    const cc = {};\n    if (!header) return cc;\n\n    // TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives),\n    // the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale\n    const parts = header.trim().split(/,/);\n    for (const part of parts) {\n        const [k, v] = part.split(/=/, 2);\n        cc[k.trim()] = v === undefined ? true : v.trim().replace(/^\"|\"$/g, '');\n    }\n\n    return cc;\n}\n\nfunction formatCacheControl(cc) {\n    let parts = [];\n    for (const k in cc) {\n        const v = cc[k];\n        parts.push(v === true ? k : k + '=' + v);\n    }\n    if (!parts.length) {\n        return undefined;\n    }\n    return parts.join(', ');\n}\n\nvar httpCacheSemantics = class CachePolicy {\n    constructor(\n        req,\n        res,\n        {\n            shared,\n            cacheHeuristic,\n            immutableMinTimeToLive,\n            ignoreCargoCult,\n            _fromObject,\n        } = {}\n    ) {\n        if (_fromObject) {\n            this._fromObject(_fromObject);\n            return;\n        }\n\n        if (!res || !res.headers) {\n            throw Error('Response headers missing');\n        }\n        this._assertRequestHasHeaders(req);\n\n        this._responseTime = this.now();\n        this._isShared = shared !== false;\n        this._cacheHeuristic =\n            undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE\n        this._immutableMinTtl =\n            undefined !== immutableMinTimeToLive\n                ? immutableMinTimeToLive\n                : 24 * 3600 * 1000;\n\n        this._status = 'status' in res ? res.status : 200;\n        this._resHeaders = res.headers;\n        this._rescc = parseCacheControl(res.headers['cache-control']);\n        this._method = 'method' in req ? req.method : 'GET';\n        this._url = req.url;\n        this._host = req.headers.host;\n        this._noAuthorization = !req.headers.authorization;\n        this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used\n        this._reqcc = parseCacheControl(req.headers['cache-control']);\n\n        // Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching,\n        // so there's no point stricly adhering to the blindly copy&pasted directives.\n        if (\n            ignoreCargoCult &&\n            'pre-check' in this._rescc &&\n            'post-check' in this._rescc\n        ) {\n            delete this._rescc['pre-check'];\n            delete this._rescc['post-check'];\n            delete this._rescc['no-cache'];\n            delete this._rescc['no-store'];\n            delete this._rescc['must-revalidate'];\n            this._resHeaders = Object.assign({}, this._resHeaders, {\n                'cache-control': formatCacheControl(this._rescc),\n            });\n            delete this._resHeaders.expires;\n            delete this._resHeaders.pragma;\n        }\n\n        // When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive\n        // as having the same effect as if \"Cache-Control: no-cache\" were present (see Section 5.2.1).\n        if (\n            res.headers['cache-control'] == null &&\n            /no-cache/.test(res.headers.pragma)\n        ) {\n            this._rescc['no-cache'] = true;\n        }\n    }\n\n    now() {\n        return Date.now();\n    }\n\n    storable() {\n        // The \"no-store\" request directive indicates that a cache MUST NOT store any part of either this request or any response to it.\n        return !!(\n            !this._reqcc['no-store'] &&\n            // A cache MUST NOT store a response to any request, unless:\n            // The request method is understood by the cache and defined as being cacheable, and\n            ('GET' === this._method ||\n                'HEAD' === this._method ||\n                ('POST' === this._method && this._hasExplicitExpiration())) &&\n            // the response status code is understood by the cache, and\n            understoodStatuses.has(this._status) &&\n            // the \"no-store\" cache directive does not appear in request or response header fields, and\n            !this._rescc['no-store'] &&\n            // the \"private\" response directive does not appear in the response, if the cache is shared, and\n            (!this._isShared || !this._rescc.private) &&\n            // the Authorization header field does not appear in the request, if the cache is shared,\n            (!this._isShared ||\n                this._noAuthorization ||\n                this._allowsStoringAuthenticated()) &&\n            // the response either:\n            // contains an Expires header field, or\n            (this._resHeaders.expires ||\n                // contains a max-age response directive, or\n                // contains a s-maxage response directive and the cache is shared, or\n                // contains a public response directive.\n                this._rescc['max-age'] ||\n                (this._isShared && this._rescc['s-maxage']) ||\n                this._rescc.public ||\n                // has a status code that is defined as cacheable by default\n                statusCodeCacheableByDefault.has(this._status))\n        );\n    }\n\n    _hasExplicitExpiration() {\n        // 4.2.1 Calculating Freshness Lifetime\n        return (\n            (this._isShared && this._rescc['s-maxage']) ||\n            this._rescc['max-age'] ||\n            this._resHeaders.expires\n        );\n    }\n\n    _assertRequestHasHeaders(req) {\n        if (!req || !req.headers) {\n            throw Error('Request headers missing');\n        }\n    }\n\n    satisfiesWithoutRevalidation(req) {\n        this._assertRequestHasHeaders(req);\n\n        // When presented with a request, a cache MUST NOT reuse a stored response, unless:\n        // the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive,\n        // unless the stored response is successfully validated (Section 4.3), and\n        const requestCC = parseCacheControl(req.headers['cache-control']);\n        if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) {\n            return false;\n        }\n\n        if (requestCC['max-age'] && this.age() > requestCC['max-age']) {\n            return false;\n        }\n\n        if (\n            requestCC['min-fresh'] &&\n            this.timeToLive() < 1000 * requestCC['min-fresh']\n        ) {\n            return false;\n        }\n\n        // the stored response is either:\n        // fresh, or allowed to be served stale\n        if (this.stale()) {\n            const allowsStale =\n                requestCC['max-stale'] &&\n                !this._rescc['must-revalidate'] &&\n                (true === requestCC['max-stale'] ||\n                    requestCC['max-stale'] > this.age() - this.maxAge());\n            if (!allowsStale) {\n                return false;\n            }\n        }\n\n        return this._requestMatches(req, false);\n    }\n\n    _requestMatches(req, allowHeadMethod) {\n        // The presented effective request URI and that of the stored response match, and\n        return (\n            (!this._url || this._url === req.url) &&\n            this._host === req.headers.host &&\n            // the request method associated with the stored response allows it to be used for the presented request, and\n            (!req.method ||\n                this._method === req.method ||\n                (allowHeadMethod && 'HEAD' === req.method)) &&\n            // selecting header fields nominated by the stored response (if any) match those presented, and\n            this._varyMatches(req)\n        );\n    }\n\n    _allowsStoringAuthenticated() {\n        //  following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage.\n        return (\n            this._rescc['must-revalidate'] ||\n            this._rescc.public ||\n            this._rescc['s-maxage']\n        );\n    }\n\n    _varyMatches(req) {\n        if (!this._resHeaders.vary) {\n            return true;\n        }\n\n        // A Vary header field-value of \"*\" always fails to match\n        if (this._resHeaders.vary === '*') {\n            return false;\n        }\n\n        const fields = this._resHeaders.vary\n            .trim()\n            .toLowerCase()\n            .split(/\\s*,\\s*/);\n        for (const name of fields) {\n            if (req.headers[name] !== this._reqHeaders[name]) return false;\n        }\n        return true;\n    }\n\n    _copyWithoutHopByHopHeaders(inHeaders) {\n        const headers = {};\n        for (const name in inHeaders) {\n            if (hopByHopHeaders[name]) continue;\n            headers[name] = inHeaders[name];\n        }\n        // 9.1.  Connection\n        if (inHeaders.connection) {\n            const tokens = inHeaders.connection.trim().split(/\\s*,\\s*/);\n            for (const name of tokens) {\n                delete headers[name];\n            }\n        }\n        if (headers.warning) {\n            const warnings = headers.warning.split(/,/).filter(warning => {\n                return !/^\\s*1[0-9][0-9]/.test(warning);\n            });\n            if (!warnings.length) {\n                delete headers.warning;\n            } else {\n                headers.warning = warnings.join(',').trim();\n            }\n        }\n        return headers;\n    }\n\n    responseHeaders() {\n        const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);\n        const age = this.age();\n\n        // A cache SHOULD generate 113 warning if it heuristically chose a freshness\n        // lifetime greater than 24 hours and the response's age is greater than 24 hours.\n        if (\n            age > 3600 * 24 &&\n            !this._hasExplicitExpiration() &&\n            this.maxAge() > 3600 * 24\n        ) {\n            headers.warning =\n                (headers.warning ? `${headers.warning}, ` : '') +\n                '113 - \"rfc7234 5.5.4\"';\n        }\n        headers.age = `${Math.round(age)}`;\n        headers.date = new Date(this.now()).toUTCString();\n        return headers;\n    }\n\n    /**\n     * Value of the Date response header or current time if Date was invalid\n     * @return timestamp\n     */\n    date() {\n        const serverDate = Date.parse(this._resHeaders.date);\n        if (isFinite(serverDate)) {\n            return serverDate;\n        }\n        return this._responseTime;\n    }\n\n    /**\n     * Value of the Age header, in seconds, updated for the current time.\n     * May be fractional.\n     *\n     * @return Number\n     */\n    age() {\n        let age = this._ageValue();\n\n        const residentTime = (this.now() - this._responseTime) / 1000;\n        return age + residentTime;\n    }\n\n    _ageValue() {\n        return toNumberOrZero(this._resHeaders.age);\n    }\n\n    /**\n     * Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`.\n     *\n     * For an up-to-date value, see `timeToLive()`.\n     *\n     * @return Number\n     */\n    maxAge() {\n        if (!this.storable() || this._rescc['no-cache']) {\n            return 0;\n        }\n\n        // Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default\n        // so this implementation requires explicit opt-in via public header\n        if (\n            this._isShared &&\n            (this._resHeaders['set-cookie'] &&\n                !this._rescc.public &&\n                !this._rescc.immutable)\n        ) {\n            return 0;\n        }\n\n        if (this._resHeaders.vary === '*') {\n            return 0;\n        }\n\n        if (this._isShared) {\n            if (this._rescc['proxy-revalidate']) {\n                return 0;\n            }\n            // if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field.\n            if (this._rescc['s-maxage']) {\n                return toNumberOrZero(this._rescc['s-maxage']);\n            }\n        }\n\n        // If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field.\n        if (this._rescc['max-age']) {\n            return toNumberOrZero(this._rescc['max-age']);\n        }\n\n        const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;\n\n        const serverDate = this.date();\n        if (this._resHeaders.expires) {\n            const expires = Date.parse(this._resHeaders.expires);\n            // A cache recipient MUST interpret invalid date formats, especially the value \"0\", as representing a time in the past (i.e., \"already expired\").\n            if (Number.isNaN(expires) || expires < serverDate) {\n                return 0;\n            }\n            return Math.max(defaultMinTtl, (expires - serverDate) / 1000);\n        }\n\n        if (this._resHeaders['last-modified']) {\n            const lastModified = Date.parse(this._resHeaders['last-modified']);\n            if (isFinite(lastModified) && serverDate > lastModified) {\n                return Math.max(\n                    defaultMinTtl,\n                    ((serverDate - lastModified) / 1000) * this._cacheHeuristic\n                );\n            }\n        }\n\n        return defaultMinTtl;\n    }\n\n    timeToLive() {\n        const age = this.maxAge() - this.age();\n        const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']);\n        const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']);\n        return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000;\n    }\n\n    stale() {\n        return this.maxAge() <= this.age();\n    }\n\n    _useStaleIfError() {\n        return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age();\n    }\n\n    useStaleWhileRevalidate() {\n        return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age();\n    }\n\n    static fromObject(obj) {\n        return new this(undefined, undefined, { _fromObject: obj });\n    }\n\n    _fromObject(obj) {\n        if (this._responseTime) throw Error('Reinitialized');\n        if (!obj || obj.v !== 1) throw Error('Invalid serialization');\n\n        this._responseTime = obj.t;\n        this._isShared = obj.sh;\n        this._cacheHeuristic = obj.ch;\n        this._immutableMinTtl =\n            obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000;\n        this._status = obj.st;\n        this._resHeaders = obj.resh;\n        this._rescc = obj.rescc;\n        this._method = obj.m;\n        this._url = obj.u;\n        this._host = obj.h;\n        this._noAuthorization = obj.a;\n        this._reqHeaders = obj.reqh;\n        this._reqcc = obj.reqcc;\n    }\n\n    toObject() {\n        return {\n            v: 1,\n            t: this._responseTime,\n            sh: this._isShared,\n            ch: this._cacheHeuristic,\n            imm: this._immutableMinTtl,\n            st: this._status,\n            resh: this._resHeaders,\n            rescc: this._rescc,\n            m: this._method,\n            u: this._url,\n            h: this._host,\n            a: this._noAuthorization,\n            reqh: this._reqHeaders,\n            reqcc: this._reqcc,\n        };\n    }\n\n    /**\n     * Headers for sending to the origin server to revalidate stale response.\n     * Allows server to return 304 to allow reuse of the previous response.\n     *\n     * Hop by hop headers are always stripped.\n     * Revalidation headers may be added or removed, depending on request.\n     */\n    revalidationHeaders(incomingReq) {\n        this._assertRequestHasHeaders(incomingReq);\n        const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);\n\n        // This implementation does not understand range requests\n        delete headers['if-range'];\n\n        if (!this._requestMatches(incomingReq, true) || !this.storable()) {\n            // revalidation allowed via HEAD\n            // not for the same resource, or wasn't allowed to be cached anyway\n            delete headers['if-none-match'];\n            delete headers['if-modified-since'];\n            return headers;\n        }\n\n        /* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */\n        if (this._resHeaders.etag) {\n            headers['if-none-match'] = headers['if-none-match']\n                ? `${headers['if-none-match']}, ${this._resHeaders.etag}`\n                : this._resHeaders.etag;\n        }\n\n        // Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request.\n        const forbidsWeakValidators =\n            headers['accept-ranges'] ||\n            headers['if-match'] ||\n            headers['if-unmodified-since'] ||\n            (this._method && this._method != 'GET');\n\n        /* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server.\n        Note: This implementation does not understand partial responses (206) */\n        if (forbidsWeakValidators) {\n            delete headers['if-modified-since'];\n\n            if (headers['if-none-match']) {\n                const etags = headers['if-none-match']\n                    .split(/,/)\n                    .filter(etag => {\n                        return !/^\\s*W\\//.test(etag);\n                    });\n                if (!etags.length) {\n                    delete headers['if-none-match'];\n                } else {\n                    headers['if-none-match'] = etags.join(',').trim();\n                }\n            }\n        } else if (\n            this._resHeaders['last-modified'] &&\n            !headers['if-modified-since']\n        ) {\n            headers['if-modified-since'] = this._resHeaders['last-modified'];\n        }\n\n        return headers;\n    }\n\n    /**\n     * Creates new CachePolicy with information combined from the previews response,\n     * and the new revalidation response.\n     *\n     * Returns {policy, modified} where modified is a boolean indicating\n     * whether the response body has been modified, and old cached body can't be used.\n     *\n     * @return {Object} {policy: CachePolicy, modified: Boolean}\n     */\n    revalidatedPolicy(request, response) {\n        this._assertRequestHasHeaders(request);\n        if(this._useStaleIfError() && isErrorResponse(response)) {  // I consider the revalidation request unsuccessful\n          return {\n            modified: false,\n            matches: false,\n            policy: this,\n          };\n        }\n        if (!response || !response.headers) {\n            throw Error('Response headers missing');\n        }\n\n        // These aren't going to be supported exactly, since one CachePolicy object\n        // doesn't know about all the other cached objects.\n        let matches = false;\n        if (response.status !== undefined && response.status != 304) {\n            matches = false;\n        } else if (\n            response.headers.etag &&\n            !/^\\s*W\\//.test(response.headers.etag)\n        ) {\n            // \"All of the stored responses with the same strong validator are selected.\n            // If none of the stored responses contain the same strong validator,\n            // then the cache MUST NOT use the new response to update any stored responses.\"\n            matches =\n                this._resHeaders.etag &&\n                this._resHeaders.etag.replace(/^\\s*W\\//, '') ===\n                    response.headers.etag;\n        } else if (this._resHeaders.etag && response.headers.etag) {\n            // \"If the new response contains a weak validator and that validator corresponds\n            // to one of the cache's stored responses,\n            // then the most recent of those matching stored responses is selected for update.\"\n            matches =\n                this._resHeaders.etag.replace(/^\\s*W\\//, '') ===\n                response.headers.etag.replace(/^\\s*W\\//, '');\n        } else if (this._resHeaders['last-modified']) {\n            matches =\n                this._resHeaders['last-modified'] ===\n                response.headers['last-modified'];\n        } else {\n            // If the new response does not include any form of validator (such as in the case where\n            // a client generates an If-Modified-Since request from a source other than the Last-Modified\n            // response header field), and there is only one stored response, and that stored response also\n            // lacks a validator, then that stored response is selected for update.\n            if (\n                !this._resHeaders.etag &&\n                !this._resHeaders['last-modified'] &&\n                !response.headers.etag &&\n                !response.headers['last-modified']\n            ) {\n                matches = true;\n            }\n        }\n\n        if (!matches) {\n            return {\n                policy: new this.constructor(request, response),\n                // Client receiving 304 without body, even if it's invalid/mismatched has no option\n                // but to reuse a cached body. We don't have a good way to tell clients to do\n                // error recovery in such case.\n                modified: response.status != 304,\n                matches: false,\n            };\n        }\n\n        // use other header fields provided in the 304 (Not Modified) response to replace all instances\n        // of the corresponding header fields in the stored response.\n        const headers = {};\n        for (const k in this._resHeaders) {\n            headers[k] =\n                k in response.headers && !excludedFromRevalidationUpdate[k]\n                    ? response.headers[k]\n                    : this._resHeaders[k];\n        }\n\n        const newResponse = Object.assign({}, response, {\n            status: this._status,\n            method: this._method,\n            headers,\n        });\n        return {\n            policy: new this.constructor(request, newResponse, {\n                shared: this._isShared,\n                cacheHeuristic: this._cacheHeuristic,\n                immutableMinTimeToLive: this._immutableMinTtl,\n            }),\n            modified: false,\n            matches: true,\n        };\n    }\n};\n\nfunction lowercaseKeys(object) {\n\treturn Object.fromEntries(Object.entries(object).map(([key, value]) => [key.toLowerCase(), value]));\n}\n\nclass Response extends stream$3.Readable {\n\tstatusCode;\n\theaders;\n\tbody;\n\turl;\n\n\tconstructor({statusCode, headers, body, url}) {\n\t\tif (typeof statusCode !== 'number') {\n\t\t\tthrow new TypeError('Argument `statusCode` should be a number');\n\t\t}\n\n\t\tif (typeof headers !== 'object') {\n\t\t\tthrow new TypeError('Argument `headers` should be an object');\n\t\t}\n\n\t\tif (!(body instanceof Uint8Array)) {\n\t\t\tthrow new TypeError('Argument `body` should be a buffer');\n\t\t}\n\n\t\tif (typeof url !== 'string') {\n\t\t\tthrow new TypeError('Argument `url` should be a string');\n\t\t}\n\n\t\tsuper({\n\t\t\tread() {\n\t\t\t\tthis.push(body);\n\t\t\t\tthis.push(null);\n\t\t\t},\n\t\t});\n\n\t\tthis.statusCode = statusCode;\n\t\tthis.headers = lowercaseKeys(headers);\n\t\tthis.body = body;\n\t\tthis.url = url;\n\t}\n}\n\nfunction commonjsRequire(path) {\n\tthrow new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');\n}\n\nvar jsonBuffer = {};\n\n//TODO: handle reviver/dehydrate function like normal\n//and handle indentation, like normal.\n//if anyone needs this... please send pull request.\n\njsonBuffer.stringify = function stringify (o) {\n  if('undefined' == typeof o) return o\n\n  if(o && Buffer.isBuffer(o))\n    return JSON.stringify(':base64:' + o.toString('base64'))\n\n  if(o && o.toJSON)\n    o =  o.toJSON();\n\n  if(o && 'object' === typeof o) {\n    var s = '';\n    var array = Array.isArray(o);\n    s = array ? '[' : '{';\n    var first = true;\n\n    for(var k in o) {\n      var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k]);\n      if(Object.hasOwnProperty.call(o, k) && !ignore) {\n        if(!first)\n          s += ',';\n        first = false;\n        if (array) {\n          if(o[k] == undefined)\n            s += 'null';\n          else\n            s += stringify(o[k]);\n        } else if (o[k] !== void(0)) {\n          s += stringify(k) + ':' + stringify(o[k]);\n        }\n      }\n    }\n\n    s += array ? ']' : '}';\n\n    return s\n  } else if ('string' === typeof o) {\n    return JSON.stringify(/^:/.test(o) ? ':' + o : o)\n  } else if ('undefined' === typeof o) {\n    return 'null';\n  } else\n    return JSON.stringify(o)\n};\n\njsonBuffer.parse = function (s) {\n  return JSON.parse(s, function (key, value) {\n    if('string' === typeof value) {\n      if(/^:base64:/.test(value))\n        return Buffer.from(value.substring(8), 'base64')\n      else\n        return /^:/.test(value) ? value.substring(1) : value \n    }\n    return value\n  })\n};\n\nconst EventEmitter$1 = require$$0__default$2[\"default\"];\nconst JSONB = jsonBuffer;\n\nconst loadStore = options => {\n\tconst adapters = {\n\t\tredis: '@keyv/redis',\n\t\trediss: '@keyv/redis',\n\t\tmongodb: '@keyv/mongo',\n\t\tmongo: '@keyv/mongo',\n\t\tsqlite: '@keyv/sqlite',\n\t\tpostgresql: '@keyv/postgres',\n\t\tpostgres: '@keyv/postgres',\n\t\tmysql: '@keyv/mysql',\n\t\tetcd: '@keyv/etcd',\n\t\toffline: '@keyv/offline',\n\t\ttiered: '@keyv/tiered',\n\t};\n\tif (options.adapter || options.uri) {\n\t\tconst adapter = options.adapter || /^[^:+]*/.exec(options.uri)[0];\n\t\treturn new (commonjsRequire(adapters[adapter]))(options);\n\t}\n\n\treturn new Map();\n};\n\nconst iterableAdapters = [\n\t'sqlite',\n\t'postgres',\n\t'mysql',\n\t'mongo',\n\t'redis',\n\t'tiered',\n];\n\nclass Keyv extends EventEmitter$1 {\n\tconstructor(uri, {emitErrors = true, ...options} = {}) {\n\t\tsuper();\n\t\tthis.opts = {\n\t\t\tnamespace: 'keyv',\n\t\t\tserialize: JSONB.stringify,\n\t\t\tdeserialize: JSONB.parse,\n\t\t\t...((typeof uri === 'string') ? {uri} : uri),\n\t\t\t...options,\n\t\t};\n\n\t\tif (!this.opts.store) {\n\t\t\tconst adapterOptions = {...this.opts};\n\t\t\tthis.opts.store = loadStore(adapterOptions);\n\t\t}\n\n\t\tif (this.opts.compression) {\n\t\t\tconst compression = this.opts.compression;\n\t\t\tthis.opts.serialize = compression.serialize.bind(compression);\n\t\t\tthis.opts.deserialize = compression.deserialize.bind(compression);\n\t\t}\n\n\t\tif (typeof this.opts.store.on === 'function' && emitErrors) {\n\t\t\tthis.opts.store.on('error', error => this.emit('error', error));\n\t\t}\n\n\t\tthis.opts.store.namespace = this.opts.namespace;\n\n\t\tconst generateIterator = iterator => async function * () {\n\t\t\tfor await (const [key, raw] of typeof iterator === 'function'\n\t\t\t\t? iterator(this.opts.store.namespace)\n\t\t\t\t: iterator) {\n\t\t\t\tconst data = await this.opts.deserialize(raw);\n\t\t\t\tif (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (typeof data.expires === 'number' && Date.now() > data.expires) {\n\t\t\t\t\tthis.delete(key);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tyield [this._getKeyUnprefix(key), data.value];\n\t\t\t}\n\t\t};\n\n\t\t// Attach iterators\n\t\tif (typeof this.opts.store[Symbol.iterator] === 'function' && this.opts.store instanceof Map) {\n\t\t\tthis.iterator = generateIterator(this.opts.store);\n\t\t} else if (typeof this.opts.store.iterator === 'function' && this.opts.store.opts\n\t\t\t&& this._checkIterableAdaptar()) {\n\t\t\tthis.iterator = generateIterator(this.opts.store.iterator.bind(this.opts.store));\n\t\t}\n\t}\n\n\t_checkIterableAdaptar() {\n\t\treturn iterableAdapters.includes(this.opts.store.opts.dialect)\n\t\t\t|| iterableAdapters.findIndex(element => this.opts.store.opts.url.includes(element)) >= 0;\n\t}\n\n\t_getKeyPrefix(key) {\n\t\treturn `${this.opts.namespace}:${key}`;\n\t}\n\n\t_getKeyPrefixArray(keys) {\n\t\treturn keys.map(key => `${this.opts.namespace}:${key}`);\n\t}\n\n\t_getKeyUnprefix(key) {\n\t\treturn key\n\t\t\t.split(':')\n\t\t\t.splice(1)\n\t\t\t.join(':');\n\t}\n\n\tget(key, options) {\n\t\tconst {store} = this.opts;\n\t\tconst isArray = Array.isArray(key);\n\t\tconst keyPrefixed = isArray ? this._getKeyPrefixArray(key) : this._getKeyPrefix(key);\n\t\tif (isArray && store.getMany === undefined) {\n\t\t\tconst promises = [];\n\t\t\tfor (const key of keyPrefixed) {\n\t\t\t\tpromises.push(Promise.resolve()\n\t\t\t\t\t.then(() => store.get(key))\n\t\t\t\t\t.then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))\n\t\t\t\t\t.then(data => {\n\t\t\t\t\t\tif (data === undefined || data === null) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof data.expires === 'number' && Date.now() > data.expires) {\n\t\t\t\t\t\t\treturn this.delete(key).then(() => undefined);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (options && options.raw) ? data : data.value;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn Promise.allSettled(promises)\n\t\t\t\t.then(values => {\n\t\t\t\t\tconst data = [];\n\t\t\t\t\tfor (const value of values) {\n\t\t\t\t\t\tdata.push(value.value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t}\n\n\t\treturn Promise.resolve()\n\t\t\t.then(() => isArray ? store.getMany(keyPrefixed) : store.get(keyPrefixed))\n\t\t\t.then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))\n\t\t\t.then(data => {\n\t\t\t\tif (data === undefined || data === null) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (isArray) {\n\t\t\t\t\treturn data.map((row, index) => {\n\t\t\t\t\t\tif ((typeof row === 'string')) {\n\t\t\t\t\t\t\trow = this.opts.deserialize(row);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (row === undefined || row === null) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof row.expires === 'number' && Date.now() > row.expires) {\n\t\t\t\t\t\t\tthis.delete(key[index]).then(() => undefined);\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (options && options.raw) ? row : row.value;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (typeof data.expires === 'number' && Date.now() > data.expires) {\n\t\t\t\t\treturn this.delete(key).then(() => undefined);\n\t\t\t\t}\n\n\t\t\t\treturn (options && options.raw) ? data : data.value;\n\t\t\t});\n\t}\n\n\tset(key, value, ttl) {\n\t\tconst keyPrefixed = this._getKeyPrefix(key);\n\t\tif (typeof ttl === 'undefined') {\n\t\t\tttl = this.opts.ttl;\n\t\t}\n\n\t\tif (ttl === 0) {\n\t\t\tttl = undefined;\n\t\t}\n\n\t\tconst {store} = this.opts;\n\n\t\treturn Promise.resolve()\n\t\t\t.then(() => {\n\t\t\t\tconst expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null;\n\t\t\t\tif (typeof value === 'symbol') {\n\t\t\t\t\tthis.emit('error', 'symbol cannot be serialized');\n\t\t\t\t}\n\n\t\t\t\tvalue = {value, expires};\n\t\t\t\treturn this.opts.serialize(value);\n\t\t\t})\n\t\t\t.then(value => store.set(keyPrefixed, value, ttl))\n\t\t\t.then(() => true);\n\t}\n\n\tdelete(key) {\n\t\tconst {store} = this.opts;\n\t\tif (Array.isArray(key)) {\n\t\t\tconst keyPrefixed = this._getKeyPrefixArray(key);\n\t\t\tif (store.deleteMany === undefined) {\n\t\t\t\tconst promises = [];\n\t\t\t\tfor (const key of keyPrefixed) {\n\t\t\t\t\tpromises.push(store.delete(key));\n\t\t\t\t}\n\n\t\t\t\treturn Promise.allSettled(promises)\n\t\t\t\t\t.then(values => values.every(x => x.value === true));\n\t\t\t}\n\n\t\t\treturn Promise.resolve()\n\t\t\t\t.then(() => store.deleteMany(keyPrefixed));\n\t\t}\n\n\t\tconst keyPrefixed = this._getKeyPrefix(key);\n\t\treturn Promise.resolve()\n\t\t\t.then(() => store.delete(keyPrefixed));\n\t}\n\n\tclear() {\n\t\tconst {store} = this.opts;\n\t\treturn Promise.resolve()\n\t\t\t.then(() => store.clear());\n\t}\n\n\thas(key) {\n\t\tconst keyPrefixed = this._getKeyPrefix(key);\n\t\tconst {store} = this.opts;\n\t\treturn Promise.resolve()\n\t\t\t.then(async () => {\n\t\t\t\tif (typeof store.has === 'function') {\n\t\t\t\t\treturn store.has(keyPrefixed);\n\t\t\t\t}\n\n\t\t\t\tconst value = await store.get(keyPrefixed);\n\t\t\t\treturn value !== undefined;\n\t\t\t});\n\t}\n\n\tdisconnect() {\n\t\tconst {store} = this.opts;\n\t\tif (typeof store.disconnect === 'function') {\n\t\t\treturn store.disconnect();\n\t\t}\n\t}\n}\n\nvar src = Keyv;\n\n// We define these manually to ensure they're always copied\n// even if they would move up the prototype chain\n// https://nodejs.org/api/http.html#http_class_http_incomingmessage\nconst knownProperties$1 = [\n\t'aborted',\n\t'complete',\n\t'headers',\n\t'httpVersion',\n\t'httpVersionMinor',\n\t'httpVersionMajor',\n\t'method',\n\t'rawHeaders',\n\t'rawTrailers',\n\t'setTimeout',\n\t'socket',\n\t'statusCode',\n\t'statusMessage',\n\t'trailers',\n\t'url',\n];\n\nfunction mimicResponse$2(fromStream, toStream) {\n\tif (toStream._readableState.autoDestroy) {\n\t\tthrow new Error('The second stream must have the `autoDestroy` option set to `false`');\n\t}\n\n\tconst fromProperties = new Set([...Object.keys(fromStream), ...knownProperties$1]);\n\n\tconst properties = {};\n\n\tfor (const property of fromProperties) {\n\t\t// Don't overwrite existing properties.\n\t\tif (property in toStream) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tproperties[property] = {\n\t\t\tget() {\n\t\t\t\tconst value = fromStream[property];\n\t\t\t\tconst isFunction = typeof value === 'function';\n\n\t\t\t\treturn isFunction ? value.bind(fromStream) : value;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tfromStream[property] = value;\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t};\n\t}\n\n\tObject.defineProperties(toStream, properties);\n\n\tfromStream.once('aborted', () => {\n\t\ttoStream.destroy();\n\n\t\ttoStream.emit('aborted');\n\t});\n\n\tfromStream.once('close', () => {\n\t\tif (fromStream.complete) {\n\t\t\tif (toStream.readable) {\n\t\t\t\ttoStream.once('end', () => {\n\t\t\t\t\ttoStream.emit('close');\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttoStream.emit('close');\n\t\t\t}\n\t\t} else {\n\t\t\ttoStream.emit('close');\n\t\t}\n\t});\n\n\treturn toStream;\n}\n\n// Type definitions for cacheable-request 6.0\n// Project: https://github.com/lukechilds/cacheable-request#readme\n// Definitions by: BendingBender <https://github.com/BendingBender>\n//                 Paul Melnikow <https://github.com/paulmelnikow>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\nclass RequestError extends Error {\n    constructor(error) {\n        super(error.message);\n        Object.assign(this, error);\n    }\n}\nclass CacheError extends Error {\n    constructor(error) {\n        super(error.message);\n        Object.assign(this, error);\n    }\n}\n\nclass CacheableRequest {\n    constructor(cacheRequest, cacheAdapter) {\n        this.hooks = new Map();\n        this.request = () => (options, cb) => {\n            let url;\n            if (typeof options === 'string') {\n                url = normalizeUrlObject(urlLib__default[\"default\"].parse(options));\n                options = {};\n            }\n            else if (options instanceof urlLib__default[\"default\"].URL) {\n                url = normalizeUrlObject(urlLib__default[\"default\"].parse(options.toString()));\n                options = {};\n            }\n            else {\n                const [pathname, ...searchParts] = (options.path ?? '').split('?');\n                const search = searchParts.length > 0\n                    ? `?${searchParts.join('?')}`\n                    : '';\n                url = normalizeUrlObject({ ...options, pathname, search });\n            }\n            options = {\n                headers: {},\n                method: 'GET',\n                cache: true,\n                strictTtl: false,\n                automaticFailover: false,\n                ...options,\n                ...urlObjectToRequestOptions(url),\n            };\n            options.headers = Object.fromEntries(entries(options.headers).map(([key, value]) => [key.toLowerCase(), value]));\n            const ee = new EventEmitter__default[\"default\"]();\n            const normalizedUrlString = normalizeUrl(urlLib__default[\"default\"].format(url), {\n                stripWWW: false,\n                removeTrailingSlash: false,\n                stripAuthentication: false,\n            });\n            let key = `${options.method}:${normalizedUrlString}`;\n            // POST, PATCH, and PUT requests may be cached, depending on the response\n            // cache-control headers. As a result, the body of the request should be\n            // added to the cache key in order to avoid collisions.\n            if (options.body && options.method !== undefined && ['POST', 'PATCH', 'PUT'].includes(options.method)) {\n                if (options.body instanceof stream__default[\"default\"].Readable) {\n                    // Streamed bodies should completely skip the cache because they may\n                    // or may not be hashable and in either case the stream would need to\n                    // close before the cache key could be generated.\n                    options.cache = false;\n                }\n                else {\n                    key += `:${crypto__default[\"default\"].createHash('md5').update(options.body).digest('hex')}`;\n                }\n            }\n            let revalidate = false;\n            let madeRequest = false;\n            const makeRequest = (options_) => {\n                madeRequest = true;\n                let requestErrored = false;\n                let requestErrorCallback = () => { };\n                const requestErrorPromise = new Promise(resolve => {\n                    requestErrorCallback = () => {\n                        if (!requestErrored) {\n                            requestErrored = true;\n                            resolve();\n                        }\n                    };\n                });\n                const handler = async (response) => {\n                    if (revalidate) {\n                        response.status = response.statusCode;\n                        const revalidatedPolicy = httpCacheSemantics.fromObject(revalidate.cachePolicy).revalidatedPolicy(options_, response);\n                        if (!revalidatedPolicy.modified) {\n                            response.resume();\n                            await new Promise(resolve => {\n                                // Skipping 'error' handler cause 'error' event should't be emitted for 304 response\n                                response\n                                    .once('end', resolve);\n                            });\n                            const headers = convertHeaders(revalidatedPolicy.policy.responseHeaders());\n                            response = new Response({ statusCode: revalidate.statusCode, headers, body: revalidate.body, url: revalidate.url });\n                            response.cachePolicy = revalidatedPolicy.policy;\n                            response.fromCache = true;\n                        }\n                    }\n                    if (!response.fromCache) {\n                        response.cachePolicy = new httpCacheSemantics(options_, response, options_);\n                        response.fromCache = false;\n                    }\n                    let clonedResponse;\n                    if (options_.cache && response.cachePolicy.storable()) {\n                        clonedResponse = cloneResponse(response);\n                        (async () => {\n                            try {\n                                const bodyPromise = getStream$2.exports.buffer(response);\n                                await Promise.race([\n                                    requestErrorPromise,\n                                    new Promise(resolve => response.once('end', resolve)),\n                                    new Promise(resolve => response.once('close', resolve)), // eslint-disable-line no-promise-executor-return\n                                ]);\n                                const body = await bodyPromise;\n                                let value = {\n                                    url: response.url,\n                                    statusCode: response.fromCache ? revalidate.statusCode : response.statusCode,\n                                    body,\n                                    cachePolicy: response.cachePolicy.toObject(),\n                                };\n                                let ttl = options_.strictTtl ? response.cachePolicy.timeToLive() : undefined;\n                                if (options_.maxTtl) {\n                                    ttl = ttl ? Math.min(ttl, options_.maxTtl) : options_.maxTtl;\n                                }\n                                if (this.hooks.size > 0) {\n                                    /* eslint-disable no-await-in-loop */\n                                    for (const key_ of this.hooks.keys()) {\n                                        value = await this.runHook(key_, value, response);\n                                    }\n                                    /* eslint-enable no-await-in-loop */\n                                }\n                                await this.cache.set(key, value, ttl);\n                            }\n                            catch (error) {\n                                ee.emit('error', new CacheError(error));\n                            }\n                        })();\n                    }\n                    else if (options_.cache && revalidate) {\n                        (async () => {\n                            try {\n                                await this.cache.delete(key);\n                            }\n                            catch (error) {\n                                ee.emit('error', new CacheError(error));\n                            }\n                        })();\n                    }\n                    ee.emit('response', clonedResponse ?? response);\n                    if (typeof cb === 'function') {\n                        cb(clonedResponse ?? response);\n                    }\n                };\n                try {\n                    const request_ = this.cacheRequest(options_, handler);\n                    request_.once('error', requestErrorCallback);\n                    request_.once('abort', requestErrorCallback);\n                    request_.once('destroy', requestErrorCallback);\n                    ee.emit('request', request_);\n                }\n                catch (error) {\n                    ee.emit('error', new RequestError(error));\n                }\n            };\n            (async () => {\n                const get = async (options_) => {\n                    await Promise.resolve();\n                    const cacheEntry = options_.cache ? await this.cache.get(key) : undefined;\n                    if (cacheEntry === undefined && !options_.forceRefresh) {\n                        makeRequest(options_);\n                        return;\n                    }\n                    const policy = httpCacheSemantics.fromObject(cacheEntry.cachePolicy);\n                    if (policy.satisfiesWithoutRevalidation(options_) && !options_.forceRefresh) {\n                        const headers = convertHeaders(policy.responseHeaders());\n                        const response = new Response({ statusCode: cacheEntry.statusCode, headers, body: cacheEntry.body, url: cacheEntry.url });\n                        response.cachePolicy = policy;\n                        response.fromCache = true;\n                        ee.emit('response', response);\n                        if (typeof cb === 'function') {\n                            cb(response);\n                        }\n                    }\n                    else if (policy.satisfiesWithoutRevalidation(options_) && Date.now() >= policy.timeToLive() && options_.forceRefresh) {\n                        await this.cache.delete(key);\n                        options_.headers = policy.revalidationHeaders(options_);\n                        makeRequest(options_);\n                    }\n                    else {\n                        revalidate = cacheEntry;\n                        options_.headers = policy.revalidationHeaders(options_);\n                        makeRequest(options_);\n                    }\n                };\n                const errorHandler = (error) => ee.emit('error', new CacheError(error));\n                if (this.cache instanceof src) {\n                    const cachek = this.cache;\n                    cachek.once('error', errorHandler);\n                    ee.on('error', () => cachek.removeListener('error', errorHandler));\n                    ee.on('response', () => cachek.removeListener('error', errorHandler));\n                }\n                try {\n                    await get(options);\n                }\n                catch (error) {\n                    if (options.automaticFailover && !madeRequest) {\n                        makeRequest(options);\n                    }\n                    ee.emit('error', new CacheError(error));\n                }\n            })();\n            return ee;\n        };\n        this.addHook = (name, fn) => {\n            if (!this.hooks.has(name)) {\n                this.hooks.set(name, fn);\n            }\n        };\n        this.removeHook = (name) => this.hooks.delete(name);\n        this.getHook = (name) => this.hooks.get(name);\n        this.runHook = async (name, ...args) => this.hooks.get(name)?.(...args);\n        if (cacheAdapter instanceof src) {\n            this.cache = cacheAdapter;\n        }\n        else if (typeof cacheAdapter === 'string') {\n            this.cache = new src({\n                uri: cacheAdapter,\n                namespace: 'cacheable-request',\n            });\n        }\n        else {\n            this.cache = new src({\n                store: cacheAdapter,\n                namespace: 'cacheable-request',\n            });\n        }\n        this.request = this.request.bind(this);\n        this.cacheRequest = cacheRequest;\n    }\n}\nconst entries = Object.entries;\nconst cloneResponse = (response) => {\n    const clone = new stream$3.PassThrough({ autoDestroy: false });\n    mimicResponse$2(response, clone);\n    return response.pipe(clone);\n};\nconst urlObjectToRequestOptions = (url) => {\n    const options = { ...url };\n    options.path = `${url.pathname || '/'}${url.search || ''}`;\n    delete options.pathname;\n    delete options.search;\n    return options;\n};\nconst normalizeUrlObject = (url) => \n// If url was parsed by url.parse or new URL:\n// - hostname will be set\n// - host will be hostname[:port]\n// - port will be set if it was explicit in the parsed string\n// Otherwise, url was from request options:\n// - hostname or host may be set\n// - host shall not have port encoded\n({\n    protocol: url.protocol,\n    auth: url.auth,\n    hostname: url.hostname || url.host || 'localhost',\n    port: url.port,\n    pathname: url.pathname,\n    search: url.search,\n});\nconst convertHeaders = (headers) => {\n    const result = [];\n    for (const name of Object.keys(headers)) {\n        result[name.toLowerCase()] = headers[name];\n    }\n    return result;\n};\n\n// We define these manually to ensure they're always copied\n// even if they would move up the prototype chain\n// https://nodejs.org/api/http.html#http_class_http_incomingmessage\nconst knownProperties = [\n\t'aborted',\n\t'complete',\n\t'headers',\n\t'httpVersion',\n\t'httpVersionMinor',\n\t'httpVersionMajor',\n\t'method',\n\t'rawHeaders',\n\t'rawTrailers',\n\t'setTimeout',\n\t'socket',\n\t'statusCode',\n\t'statusMessage',\n\t'trailers',\n\t'url'\n];\n\nvar mimicResponse$1 = (fromStream, toStream) => {\n\tif (toStream._readableState.autoDestroy) {\n\t\tthrow new Error('The second stream must have the `autoDestroy` option set to `false`');\n\t}\n\n\tconst fromProperties = new Set(Object.keys(fromStream).concat(knownProperties));\n\n\tconst properties = {};\n\n\tfor (const property of fromProperties) {\n\t\t// Don't overwrite existing properties.\n\t\tif (property in toStream) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tproperties[property] = {\n\t\t\tget() {\n\t\t\t\tconst value = fromStream[property];\n\t\t\t\tconst isFunction = typeof value === 'function';\n\n\t\t\t\treturn isFunction ? value.bind(fromStream) : value;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tfromStream[property] = value;\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false\n\t\t};\n\t}\n\n\tObject.defineProperties(toStream, properties);\n\n\tfromStream.once('aborted', () => {\n\t\ttoStream.destroy();\n\n\t\ttoStream.emit('aborted');\n\t});\n\n\tfromStream.once('close', () => {\n\t\tif (fromStream.complete) {\n\t\t\tif (toStream.readable) {\n\t\t\t\ttoStream.once('end', () => {\n\t\t\t\t\ttoStream.emit('close');\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttoStream.emit('close');\n\t\t\t}\n\t\t} else {\n\t\t\ttoStream.emit('close');\n\t\t}\n\t});\n\n\treturn toStream;\n};\n\nconst {Transform, PassThrough} = require$$0__default[\"default\"];\nconst zlib = require$$1__default$1[\"default\"];\nconst mimicResponse = mimicResponse$1;\n\nvar decompressResponse = response => {\n\tconst contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();\n\n\tif (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {\n\t\treturn response;\n\t}\n\n\t// TODO: Remove this when targeting Node.js 12.\n\tconst isBrotli = contentEncoding === 'br';\n\tif (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {\n\t\tresponse.destroy(new Error('Brotli is not supported on Node.js < 12'));\n\t\treturn response;\n\t}\n\n\tlet isEmpty = true;\n\n\tconst checker = new Transform({\n\t\ttransform(data, _encoding, callback) {\n\t\t\tisEmpty = false;\n\n\t\t\tcallback(null, data);\n\t\t},\n\n\t\tflush(callback) {\n\t\t\tcallback();\n\t\t}\n\t});\n\n\tconst finalStream = new PassThrough({\n\t\tautoDestroy: false,\n\t\tdestroy(error, callback) {\n\t\t\tresponse.destroy();\n\n\t\t\tcallback(error);\n\t\t}\n\t});\n\n\tconst decompressStream = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();\n\n\tdecompressStream.once('error', error => {\n\t\tif (isEmpty && !response.readable) {\n\t\t\tfinalStream.end();\n\t\t\treturn;\n\t\t}\n\n\t\tfinalStream.destroy(error);\n\t});\n\n\tmimicResponse(response, finalStream);\n\tresponse.pipe(checker).pipe(decompressStream).pipe(finalStream);\n\n\treturn finalStream;\n};\n\nconst isFunction = (value) => (typeof value === \"function\");\n\nconst isAsyncIterable = (value) => (isFunction(value[Symbol.asyncIterator]));\nasync function* readStream(readable) {\n    const reader = readable.getReader();\n    while (true) {\n        const { done, value } = await reader.read();\n        if (done) {\n            break;\n        }\n        yield value;\n    }\n}\nconst getStreamIterator = (source) => {\n    if (isAsyncIterable(source)) {\n        return source;\n    }\n    if (isFunction(source.getReader)) {\n        return readStream(source);\n    }\n    throw new TypeError(\"Unsupported data source: Expected either ReadableStream or async iterable.\");\n};\n\nconst alphabet = \"abcdefghijklmnopqrstuvwxyz0123456789\";\nfunction createBoundary() {\n    let size = 16;\n    let res = \"\";\n    while (size--) {\n        res += alphabet[(Math.random() * alphabet.length) << 0];\n    }\n    return res;\n}\n\nconst normalizeValue = (value) => String(value)\n    .replace(/\\r|\\n/g, (match, i, str) => {\n    if ((match === \"\\r\" && str[i + 1] !== \"\\n\")\n        || (match === \"\\n\" && str[i - 1] !== \"\\r\")) {\n        return \"\\r\\n\";\n    }\n    return match;\n});\n\nconst getType = (value) => (Object.prototype.toString.call(value).slice(8, -1).toLowerCase());\nfunction isPlainObject(value) {\n    if (getType(value) !== \"object\") {\n        return false;\n    }\n    const pp = Object.getPrototypeOf(value);\n    if (pp === null || pp === undefined) {\n        return true;\n    }\n    const Ctor = pp.constructor && pp.constructor.toString();\n    return Ctor === Object.toString();\n}\n\nfunction getProperty(target, prop) {\n    if (typeof prop === \"string\") {\n        for (const [name, value] of Object.entries(target)) {\n            if (prop.toLowerCase() === name.toLowerCase()) {\n                return value;\n            }\n        }\n    }\n    return undefined;\n}\nconst proxyHeaders = (object) => new Proxy(object, {\n    get: (target, prop) => getProperty(target, prop),\n    has: (target, prop) => getProperty(target, prop) !== undefined\n});\n\nconst isFormData$1 = (value) => Boolean(value\n    && isFunction(value.constructor)\n    && value[Symbol.toStringTag] === \"FormData\"\n    && isFunction(value.append)\n    && isFunction(value.getAll)\n    && isFunction(value.entries)\n    && isFunction(value[Symbol.iterator]));\n\nconst escapeName = (name) => String(name)\n    .replace(/\\r/g, \"%0D\")\n    .replace(/\\n/g, \"%0A\")\n    .replace(/\"/g, \"%22\");\n\nconst isFile = (value) => Boolean(value\n    && typeof value === \"object\"\n    && isFunction(value.constructor)\n    && value[Symbol.toStringTag] === \"File\"\n    && isFunction(value.stream)\n    && value.name != null);\n\nvar __classPrivateFieldSet = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FormDataEncoder_instances, _FormDataEncoder_CRLF, _FormDataEncoder_CRLF_BYTES, _FormDataEncoder_CRLF_BYTES_LENGTH, _FormDataEncoder_DASHES, _FormDataEncoder_encoder, _FormDataEncoder_footer, _FormDataEncoder_form, _FormDataEncoder_options, _FormDataEncoder_getFieldHeader, _FormDataEncoder_getContentLength;\nconst defaultOptions = {\n    enableAdditionalHeaders: false\n};\nconst readonlyProp = { writable: false, configurable: false };\nclass FormDataEncoder {\n    constructor(form, boundaryOrOptions, options) {\n        _FormDataEncoder_instances.add(this);\n        _FormDataEncoder_CRLF.set(this, \"\\r\\n\");\n        _FormDataEncoder_CRLF_BYTES.set(this, void 0);\n        _FormDataEncoder_CRLF_BYTES_LENGTH.set(this, void 0);\n        _FormDataEncoder_DASHES.set(this, \"-\".repeat(2));\n        _FormDataEncoder_encoder.set(this, new TextEncoder());\n        _FormDataEncoder_footer.set(this, void 0);\n        _FormDataEncoder_form.set(this, void 0);\n        _FormDataEncoder_options.set(this, void 0);\n        if (!isFormData$1(form)) {\n            throw new TypeError(\"Expected first argument to be a FormData instance.\");\n        }\n        let boundary;\n        if (isPlainObject(boundaryOrOptions)) {\n            options = boundaryOrOptions;\n        }\n        else {\n            boundary = boundaryOrOptions;\n        }\n        if (!boundary) {\n            boundary = createBoundary();\n        }\n        if (typeof boundary !== \"string\") {\n            throw new TypeError(\"Expected boundary argument to be a string.\");\n        }\n        if (options && !isPlainObject(options)) {\n            throw new TypeError(\"Expected options argument to be an object.\");\n        }\n        __classPrivateFieldSet(this, _FormDataEncoder_form, Array.from(form.entries()), \"f\");\n        __classPrivateFieldSet(this, _FormDataEncoder_options, { ...defaultOptions, ...options }, \"f\");\n        __classPrivateFieldSet(this, _FormDataEncoder_CRLF_BYTES, __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\")), \"f\");\n        __classPrivateFieldSet(this, _FormDataEncoder_CRLF_BYTES_LENGTH, __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES, \"f\").byteLength, \"f\");\n        this.boundary = `form-data-boundary-${boundary}`;\n        this.contentType = `multipart/form-data; boundary=${this.boundary}`;\n        __classPrivateFieldSet(this, _FormDataEncoder_footer, __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(`${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, \"f\")}${this.boundary}${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, \"f\")}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\").repeat(2)}`), \"f\");\n        const headers = {\n            \"Content-Type\": this.contentType\n        };\n        const contentLength = __classPrivateFieldGet(this, _FormDataEncoder_instances, \"m\", _FormDataEncoder_getContentLength).call(this);\n        if (contentLength) {\n            this.contentLength = contentLength;\n            headers[\"Content-Length\"] = contentLength;\n        }\n        this.headers = proxyHeaders(Object.freeze(headers));\n        Object.defineProperties(this, {\n            boundary: readonlyProp,\n            contentType: readonlyProp,\n            contentLength: readonlyProp,\n            headers: readonlyProp\n        });\n    }\n    getContentLength() {\n        return this.contentLength == null ? undefined : Number(this.contentLength);\n    }\n    *values() {\n        for (const [name, raw] of __classPrivateFieldGet(this, _FormDataEncoder_form, \"f\")) {\n            const value = isFile(raw) ? raw : __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(normalizeValue(raw));\n            yield __classPrivateFieldGet(this, _FormDataEncoder_instances, \"m\", _FormDataEncoder_getFieldHeader).call(this, name, value);\n            yield value;\n            yield __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES, \"f\");\n        }\n        yield __classPrivateFieldGet(this, _FormDataEncoder_footer, \"f\");\n    }\n    async *encode() {\n        for (const part of this.values()) {\n            if (isFile(part)) {\n                yield* getStreamIterator(part.stream());\n            }\n            else {\n                yield part;\n            }\n        }\n    }\n    [(_FormDataEncoder_CRLF = new WeakMap(), _FormDataEncoder_CRLF_BYTES = new WeakMap(), _FormDataEncoder_CRLF_BYTES_LENGTH = new WeakMap(), _FormDataEncoder_DASHES = new WeakMap(), _FormDataEncoder_encoder = new WeakMap(), _FormDataEncoder_footer = new WeakMap(), _FormDataEncoder_form = new WeakMap(), _FormDataEncoder_options = new WeakMap(), _FormDataEncoder_instances = new WeakSet(), _FormDataEncoder_getFieldHeader = function _FormDataEncoder_getFieldHeader(name, value) {\n        let header = \"\";\n        header += `${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, \"f\")}${this.boundary}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\")}`;\n        header += `Content-Disposition: form-data; name=\"${escapeName(name)}\"`;\n        if (isFile(value)) {\n            header += `; filename=\"${escapeName(value.name)}\"${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\")}`;\n            header += `Content-Type: ${value.type || \"application/octet-stream\"}`;\n        }\n        const size = isFile(value) ? value.size : value.byteLength;\n        if (__classPrivateFieldGet(this, _FormDataEncoder_options, \"f\").enableAdditionalHeaders === true\n            && size != null\n            && !isNaN(size)) {\n            header += `${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\")}Content-Length: ${isFile(value) ? value.size : value.byteLength}`;\n        }\n        return __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(`${header}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\").repeat(2)}`);\n    }, _FormDataEncoder_getContentLength = function _FormDataEncoder_getContentLength() {\n        let length = 0;\n        for (const [name, raw] of __classPrivateFieldGet(this, _FormDataEncoder_form, \"f\")) {\n            const value = isFile(raw) ? raw : __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(normalizeValue(raw));\n            const size = isFile(value) ? value.size : value.byteLength;\n            if (size == null || isNaN(size)) {\n                return undefined;\n            }\n            length += __classPrivateFieldGet(this, _FormDataEncoder_instances, \"m\", _FormDataEncoder_getFieldHeader).call(this, name, value).byteLength;\n            length += size;\n            length += __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES_LENGTH, \"f\");\n        }\n        return String(length + __classPrivateFieldGet(this, _FormDataEncoder_footer, \"f\").byteLength);\n    }, Symbol.iterator)]() {\n        return this.values();\n    }\n    [Symbol.asyncIterator]() {\n        return this.encode();\n    }\n}\n\nfunction isFormData(body) {\n    return is.nodeStream(body) && is.function_(body.getBoundary);\n}\n\nasync function getBodySize(body, headers) {\n    if (headers && 'content-length' in headers) {\n        return Number(headers['content-length']);\n    }\n    if (!body) {\n        return 0;\n    }\n    if (is.string(body)) {\n        return node_buffer.Buffer.byteLength(body);\n    }\n    if (is.buffer(body)) {\n        return body.length;\n    }\n    if (isFormData(body)) {\n        return node_util.promisify(body.getLength.bind(body))();\n    }\n    return undefined;\n}\n\nfunction proxyEvents$2(from, to, events) {\n    const eventFunctions = {};\n    for (const event of events) {\n        const eventFunction = (...args) => {\n            to.emit(event, ...args);\n        };\n        eventFunctions[event] = eventFunction;\n        from.on(event, eventFunction);\n    }\n    return () => {\n        for (const [event, eventFunction] of Object.entries(eventFunctions)) {\n            from.off(event, eventFunction);\n        }\n    };\n}\n\n// When attaching listeners, it's very easy to forget about them.\n// Especially if you do error handling and set timeouts.\n// So instead of checking if it's proper to throw an error on every timeout ever,\n// use this simple tool which will remove all listeners you have attached.\nfunction unhandle() {\n    const handlers = [];\n    return {\n        once(origin, event, fn) {\n            origin.once(event, fn);\n            handlers.push({ origin, event, fn });\n        },\n        unhandleAll() {\n            for (const handler of handlers) {\n                const { origin, event, fn } = handler;\n                origin.removeListener(event, fn);\n            }\n            handlers.length = 0;\n        },\n    };\n}\n\nconst reentry = Symbol('reentry');\nconst noop$1 = () => { };\nclass TimeoutError extends Error {\n    constructor(threshold, event) {\n        super(`Timeout awaiting '${event}' for ${threshold}ms`);\n        Object.defineProperty(this, \"event\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: event\n        });\n        Object.defineProperty(this, \"code\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.name = 'TimeoutError';\n        this.code = 'ETIMEDOUT';\n    }\n}\nfunction timedOut(request, delays, options) {\n    if (reentry in request) {\n        return noop$1;\n    }\n    request[reentry] = true;\n    const cancelers = [];\n    const { once, unhandleAll } = unhandle();\n    const addTimeout = (delay, callback, event) => {\n        const timeout = setTimeout(callback, delay, delay, event);\n        timeout.unref?.();\n        const cancel = () => {\n            clearTimeout(timeout);\n        };\n        cancelers.push(cancel);\n        return cancel;\n    };\n    const { host, hostname } = options;\n    const timeoutHandler = (delay, event) => {\n        request.destroy(new TimeoutError(delay, event));\n    };\n    const cancelTimeouts = () => {\n        for (const cancel of cancelers) {\n            cancel();\n        }\n        unhandleAll();\n    };\n    request.once('error', error => {\n        cancelTimeouts();\n        // Save original behavior\n        /* istanbul ignore next */\n        if (request.listenerCount('error') === 0) {\n            throw error;\n        }\n    });\n    if (typeof delays.request !== 'undefined') {\n        const cancelTimeout = addTimeout(delays.request, timeoutHandler, 'request');\n        once(request, 'response', (response) => {\n            once(response, 'end', cancelTimeout);\n        });\n    }\n    if (typeof delays.socket !== 'undefined') {\n        const { socket } = delays;\n        const socketTimeoutHandler = () => {\n            timeoutHandler(socket, 'socket');\n        };\n        request.setTimeout(socket, socketTimeoutHandler);\n        // `request.setTimeout(0)` causes a memory leak.\n        // We can just remove the listener and forget about the timer - it's unreffed.\n        // See https://github.com/sindresorhus/got/issues/690\n        cancelers.push(() => {\n            request.removeListener('timeout', socketTimeoutHandler);\n        });\n    }\n    const hasLookup = typeof delays.lookup !== 'undefined';\n    const hasConnect = typeof delays.connect !== 'undefined';\n    const hasSecureConnect = typeof delays.secureConnect !== 'undefined';\n    const hasSend = typeof delays.send !== 'undefined';\n    if (hasLookup || hasConnect || hasSecureConnect || hasSend) {\n        once(request, 'socket', (socket) => {\n            const { socketPath } = request;\n            /* istanbul ignore next: hard to test */\n            if (socket.connecting) {\n                const hasPath = Boolean(socketPath ?? net__default[\"default\"].isIP(hostname ?? host ?? '') !== 0);\n                if (hasLookup && !hasPath && typeof socket.address().address === 'undefined') {\n                    const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');\n                    once(socket, 'lookup', cancelTimeout);\n                }\n                if (hasConnect) {\n                    const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');\n                    if (hasPath) {\n                        once(socket, 'connect', timeConnect());\n                    }\n                    else {\n                        once(socket, 'lookup', (error) => {\n                            if (error === null) {\n                                once(socket, 'connect', timeConnect());\n                            }\n                        });\n                    }\n                }\n                if (hasSecureConnect && options.protocol === 'https:') {\n                    once(socket, 'connect', () => {\n                        const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');\n                        once(socket, 'secureConnect', cancelTimeout);\n                    });\n                }\n            }\n            if (hasSend) {\n                const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');\n                /* istanbul ignore next: hard to test */\n                if (socket.connecting) {\n                    once(socket, 'connect', () => {\n                        once(request, 'upload-complete', timeRequest());\n                    });\n                }\n                else {\n                    once(request, 'upload-complete', timeRequest());\n                }\n            }\n        });\n    }\n    if (typeof delays.response !== 'undefined') {\n        once(request, 'upload-complete', () => {\n            const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');\n            once(request, 'response', cancelTimeout);\n        });\n    }\n    if (typeof delays.read !== 'undefined') {\n        once(request, 'response', (response) => {\n            const cancelTimeout = addTimeout(delays.read, timeoutHandler, 'read');\n            once(response, 'end', cancelTimeout);\n        });\n    }\n    return cancelTimeouts;\n}\n\nfunction urlToOptions(url) {\n    // Cast to URL\n    url = url;\n    const options = {\n        protocol: url.protocol,\n        hostname: is.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,\n        host: url.host,\n        hash: url.hash,\n        search: url.search,\n        pathname: url.pathname,\n        href: url.href,\n        path: `${url.pathname || ''}${url.search || ''}`,\n    };\n    if (is.string(url.port) && url.port.length > 0) {\n        options.port = Number(url.port);\n    }\n    if (url.username || url.password) {\n        options.auth = `${url.username || ''}:${url.password || ''}`;\n    }\n    return options;\n}\n\nclass WeakableMap {\n    constructor() {\n        Object.defineProperty(this, \"weakMap\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"map\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.weakMap = new WeakMap();\n        this.map = new Map();\n    }\n    set(key, value) {\n        if (typeof key === 'object') {\n            this.weakMap.set(key, value);\n        }\n        else {\n            this.map.set(key, value);\n        }\n    }\n    get(key) {\n        if (typeof key === 'object') {\n            return this.weakMap.get(key);\n        }\n        return this.map.get(key);\n    }\n    has(key) {\n        if (typeof key === 'object') {\n            return this.weakMap.has(key);\n        }\n        return this.map.has(key);\n    }\n}\n\nconst calculateRetryDelay = ({ attemptCount, retryOptions, error, retryAfter, computedValue, }) => {\n    if (error.name === 'RetryError') {\n        return 1;\n    }\n    if (attemptCount > retryOptions.limit) {\n        return 0;\n    }\n    const hasMethod = retryOptions.methods.includes(error.options.method);\n    const hasErrorCode = retryOptions.errorCodes.includes(error.code);\n    const hasStatusCode = error.response && retryOptions.statusCodes.includes(error.response.statusCode);\n    if (!hasMethod || (!hasErrorCode && !hasStatusCode)) {\n        return 0;\n    }\n    if (error.response) {\n        if (retryAfter) {\n            // In this case `computedValue` is `options.request.timeout`\n            if (retryAfter > computedValue) {\n                return 0;\n            }\n            return retryAfter;\n        }\n        if (error.response.statusCode === 413) {\n            return 0;\n        }\n    }\n    const noise = Math.random() * retryOptions.noise;\n    return Math.min(((2 ** (attemptCount - 1)) * 1000), retryOptions.backoffLimit) + noise;\n};\n\nconst {Resolver: AsyncResolver} = node_dns.promises;\n\nconst kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection');\nconst kCacheableLookupInstance = Symbol('cacheableLookupInstance');\nconst kExpires = Symbol('expires');\n\nconst supportsALL = typeof node_dns.ALL === 'number';\n\nconst verifyAgent = agent => {\n\tif (!(agent && typeof agent.createConnection === 'function')) {\n\t\tthrow new Error('Expected an Agent instance as the first argument');\n\t}\n};\n\nconst map4to6 = entries => {\n\tfor (const entry of entries) {\n\t\tif (entry.family === 6) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tentry.address = `::ffff:${entry.address}`;\n\t\tentry.family = 6;\n\t}\n};\n\nconst getIfaceInfo = () => {\n\tlet has4 = false;\n\tlet has6 = false;\n\n\tfor (const device of Object.values(os__default[\"default\"].networkInterfaces())) {\n\t\tfor (const iface of device) {\n\t\t\tif (iface.internal) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (iface.family === 'IPv6') {\n\t\t\t\thas6 = true;\n\t\t\t} else {\n\t\t\t\thas4 = true;\n\t\t\t}\n\n\t\t\tif (has4 && has6) {\n\t\t\t\treturn {has4, has6};\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {has4, has6};\n};\n\nconst isIterable = map => {\n\treturn Symbol.iterator in map;\n};\n\nconst ignoreNoResultErrors = dnsPromise => {\n\treturn dnsPromise.catch(error => {\n\t\tif (\n\t\t\terror.code === 'ENODATA' ||\n\t\t\terror.code === 'ENOTFOUND' ||\n\t\t\terror.code === 'ENOENT' // Windows: name exists, but not this record type\n\t\t) {\n\t\t\treturn [];\n\t\t}\n\n\t\tthrow error;\n\t});\n};\n\nconst ttl = {ttl: true};\nconst all = {all: true};\nconst all4 = {all: true, family: 4};\nconst all6 = {all: true, family: 6};\n\nclass CacheableLookup {\n\tconstructor({\n\t\tcache = new Map(),\n\t\tmaxTtl = Infinity,\n\t\tfallbackDuration = 3600,\n\t\terrorTtl = 0.15,\n\t\tresolver = new AsyncResolver(),\n\t\tlookup = node_dns.lookup\n\t} = {}) {\n\t\tthis.maxTtl = maxTtl;\n\t\tthis.errorTtl = errorTtl;\n\n\t\tthis._cache = cache;\n\t\tthis._resolver = resolver;\n\t\tthis._dnsLookup = lookup && node_util.promisify(lookup);\n\t\tthis.stats = {\n\t\t\tcache: 0,\n\t\t\tquery: 0\n\t\t};\n\n\t\tif (this._resolver instanceof AsyncResolver) {\n\t\t\tthis._resolve4 = this._resolver.resolve4.bind(this._resolver);\n\t\t\tthis._resolve6 = this._resolver.resolve6.bind(this._resolver);\n\t\t} else {\n\t\t\tthis._resolve4 = node_util.promisify(this._resolver.resolve4.bind(this._resolver));\n\t\t\tthis._resolve6 = node_util.promisify(this._resolver.resolve6.bind(this._resolver));\n\t\t}\n\n\t\tthis._iface = getIfaceInfo();\n\n\t\tthis._pending = {};\n\t\tthis._nextRemovalTime = false;\n\t\tthis._hostnamesToFallback = new Set();\n\n\t\tthis.fallbackDuration = fallbackDuration;\n\n\t\tif (fallbackDuration > 0) {\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\tthis._hostnamesToFallback.clear();\n\t\t\t}, fallbackDuration * 1000);\n\n\t\t\t/* istanbul ignore next: There is no `interval.unref()` when running inside an Electron renderer */\n\t\t\tif (interval.unref) {\n\t\t\t\tinterval.unref();\n\t\t\t}\n\n\t\t\tthis._fallbackInterval = interval;\n\t\t}\n\n\t\tthis.lookup = this.lookup.bind(this);\n\t\tthis.lookupAsync = this.lookupAsync.bind(this);\n\t}\n\n\tset servers(servers) {\n\t\tthis.clear();\n\n\t\tthis._resolver.setServers(servers);\n\t}\n\n\tget servers() {\n\t\treturn this._resolver.getServers();\n\t}\n\n\tlookup(hostname, options, callback) {\n\t\tif (typeof options === 'function') {\n\t\t\tcallback = options;\n\t\t\toptions = {};\n\t\t} else if (typeof options === 'number') {\n\t\t\toptions = {\n\t\t\t\tfamily: options\n\t\t\t};\n\t\t}\n\n\t\tif (!callback) {\n\t\t\tthrow new Error('Callback must be a function.');\n\t\t}\n\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\tthis.lookupAsync(hostname, options).then(result => {\n\t\t\tif (options.all) {\n\t\t\t\tcallback(null, result);\n\t\t\t} else {\n\t\t\t\tcallback(null, result.address, result.family, result.expires, result.ttl, result.source);\n\t\t\t}\n\t\t}, callback);\n\t}\n\n\tasync lookupAsync(hostname, options = {}) {\n\t\tif (typeof options === 'number') {\n\t\t\toptions = {\n\t\t\t\tfamily: options\n\t\t\t};\n\t\t}\n\n\t\tlet cached = await this.query(hostname);\n\n\t\tif (options.family === 6) {\n\t\t\tconst filtered = cached.filter(entry => entry.family === 6);\n\n\t\t\tif (options.hints & node_dns.V4MAPPED) {\n\t\t\t\tif ((supportsALL && options.hints & node_dns.ALL) || filtered.length === 0) {\n\t\t\t\t\tmap4to6(cached);\n\t\t\t\t} else {\n\t\t\t\t\tcached = filtered;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcached = filtered;\n\t\t\t}\n\t\t} else if (options.family === 4) {\n\t\t\tcached = cached.filter(entry => entry.family === 4);\n\t\t}\n\n\t\tif (options.hints & node_dns.ADDRCONFIG) {\n\t\t\tconst {_iface} = this;\n\t\t\tcached = cached.filter(entry => entry.family === 6 ? _iface.has6 : _iface.has4);\n\t\t}\n\n\t\tif (cached.length === 0) {\n\t\t\tconst error = new Error(`cacheableLookup ENOTFOUND ${hostname}`);\n\t\t\terror.code = 'ENOTFOUND';\n\t\t\terror.hostname = hostname;\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (options.all) {\n\t\t\treturn cached;\n\t\t}\n\n\t\treturn cached[0];\n\t}\n\n\tasync query(hostname) {\n\t\tlet source = 'cache';\n\t\tlet cached = await this._cache.get(hostname);\n\n\t\tif (cached) {\n\t\t\tthis.stats.cache++;\n\t\t}\n\n\t\tif (!cached) {\n\t\t\tconst pending = this._pending[hostname];\n\t\t\tif (pending) {\n\t\t\t\tthis.stats.cache++;\n\t\t\t\tcached = await pending;\n\t\t\t} else {\n\t\t\t\tsource = 'query';\n\t\t\t\tconst newPromise = this.queryAndCache(hostname);\n\t\t\t\tthis._pending[hostname] = newPromise;\n\t\t\t\tthis.stats.query++;\n\t\t\t\ttry {\n\t\t\t\t\tcached = await newPromise;\n\t\t\t\t} finally {\n\t\t\t\t\tdelete this._pending[hostname];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcached = cached.map(entry => {\n\t\t\treturn {...entry, source};\n\t\t});\n\n\t\treturn cached;\n\t}\n\n\tasync _resolve(hostname) {\n\t\t// ANY is unsafe as it doesn't trigger new queries in the underlying server.\n\t\tconst [A, AAAA] = await Promise.all([\n\t\t\tignoreNoResultErrors(this._resolve4(hostname, ttl)),\n\t\t\tignoreNoResultErrors(this._resolve6(hostname, ttl))\n\t\t]);\n\n\t\tlet aTtl = 0;\n\t\tlet aaaaTtl = 0;\n\t\tlet cacheTtl = 0;\n\n\t\tconst now = Date.now();\n\n\t\tfor (const entry of A) {\n\t\t\tentry.family = 4;\n\t\t\tentry.expires = now + (entry.ttl * 1000);\n\n\t\t\taTtl = Math.max(aTtl, entry.ttl);\n\t\t}\n\n\t\tfor (const entry of AAAA) {\n\t\t\tentry.family = 6;\n\t\t\tentry.expires = now + (entry.ttl * 1000);\n\n\t\t\taaaaTtl = Math.max(aaaaTtl, entry.ttl);\n\t\t}\n\n\t\tif (A.length > 0) {\n\t\t\tif (AAAA.length > 0) {\n\t\t\t\tcacheTtl = Math.min(aTtl, aaaaTtl);\n\t\t\t} else {\n\t\t\t\tcacheTtl = aTtl;\n\t\t\t}\n\t\t} else {\n\t\t\tcacheTtl = aaaaTtl;\n\t\t}\n\n\t\treturn {\n\t\t\tentries: [\n\t\t\t\t...A,\n\t\t\t\t...AAAA\n\t\t\t],\n\t\t\tcacheTtl\n\t\t};\n\t}\n\n\tasync _lookup(hostname) {\n\t\ttry {\n\t\t\tconst [A, AAAA] = await Promise.all([\n\t\t\t\t// Passing {all: true} doesn't return all IPv4 and IPv6 entries.\n\t\t\t\t// See https://github.com/szmarczak/cacheable-lookup/issues/42\n\t\t\t\tignoreNoResultErrors(this._dnsLookup(hostname, all4)),\n\t\t\t\tignoreNoResultErrors(this._dnsLookup(hostname, all6))\n\t\t\t]);\n\n\t\t\treturn {\n\t\t\t\tentries: [\n\t\t\t\t\t...A,\n\t\t\t\t\t...AAAA\n\t\t\t\t],\n\t\t\t\tcacheTtl: 0\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tentries: [],\n\t\t\t\tcacheTtl: 0\n\t\t\t};\n\t\t}\n\t}\n\n\tasync _set(hostname, data, cacheTtl) {\n\t\tif (this.maxTtl > 0 && cacheTtl > 0) {\n\t\t\tcacheTtl = Math.min(cacheTtl, this.maxTtl) * 1000;\n\t\t\tdata[kExpires] = Date.now() + cacheTtl;\n\n\t\t\ttry {\n\t\t\t\tawait this._cache.set(hostname, data, cacheTtl);\n\t\t\t} catch (error) {\n\t\t\t\tthis.lookupAsync = async () => {\n\t\t\t\t\tconst cacheError = new Error('Cache Error. Please recreate the CacheableLookup instance.');\n\t\t\t\t\tcacheError.cause = error;\n\n\t\t\t\t\tthrow cacheError;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isIterable(this._cache)) {\n\t\t\t\tthis._tick(cacheTtl);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync queryAndCache(hostname) {\n\t\tif (this._hostnamesToFallback.has(hostname)) {\n\t\t\treturn this._dnsLookup(hostname, all);\n\t\t}\n\n\t\tlet query = await this._resolve(hostname);\n\n\t\tif (query.entries.length === 0 && this._dnsLookup) {\n\t\t\tquery = await this._lookup(hostname);\n\n\t\t\tif (query.entries.length !== 0 && this.fallbackDuration > 0) {\n\t\t\t\t// Use `dns.lookup(...)` for that particular hostname\n\t\t\t\tthis._hostnamesToFallback.add(hostname);\n\t\t\t}\n\t\t}\n\n\t\tconst cacheTtl = query.entries.length === 0 ? this.errorTtl : query.cacheTtl;\n\t\tawait this._set(hostname, query.entries, cacheTtl);\n\n\t\treturn query.entries;\n\t}\n\n\t_tick(ms) {\n\t\tconst nextRemovalTime = this._nextRemovalTime;\n\n\t\tif (!nextRemovalTime || ms < nextRemovalTime) {\n\t\t\tclearTimeout(this._removalTimeout);\n\n\t\t\tthis._nextRemovalTime = ms;\n\n\t\t\tthis._removalTimeout = setTimeout(() => {\n\t\t\t\tthis._nextRemovalTime = false;\n\n\t\t\t\tlet nextExpiry = Infinity;\n\n\t\t\t\tconst now = Date.now();\n\n\t\t\t\tfor (const [hostname, entries] of this._cache) {\n\t\t\t\t\tconst expires = entries[kExpires];\n\n\t\t\t\t\tif (now >= expires) {\n\t\t\t\t\t\tthis._cache.delete(hostname);\n\t\t\t\t\t} else if (expires < nextExpiry) {\n\t\t\t\t\t\tnextExpiry = expires;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (nextExpiry !== Infinity) {\n\t\t\t\t\tthis._tick(nextExpiry - now);\n\t\t\t\t}\n\t\t\t}, ms);\n\n\t\t\t/* istanbul ignore next: There is no `timeout.unref()` when running inside an Electron renderer */\n\t\t\tif (this._removalTimeout.unref) {\n\t\t\t\tthis._removalTimeout.unref();\n\t\t\t}\n\t\t}\n\t}\n\n\tinstall(agent) {\n\t\tverifyAgent(agent);\n\n\t\tif (kCacheableLookupCreateConnection in agent) {\n\t\t\tthrow new Error('CacheableLookup has been already installed');\n\t\t}\n\n\t\tagent[kCacheableLookupCreateConnection] = agent.createConnection;\n\t\tagent[kCacheableLookupInstance] = this;\n\n\t\tagent.createConnection = (options, callback) => {\n\t\t\tif (!('lookup' in options)) {\n\t\t\t\toptions.lookup = this.lookup;\n\t\t\t}\n\n\t\t\treturn agent[kCacheableLookupCreateConnection](options, callback);\n\t\t};\n\t}\n\n\tuninstall(agent) {\n\t\tverifyAgent(agent);\n\n\t\tif (agent[kCacheableLookupCreateConnection]) {\n\t\t\tif (agent[kCacheableLookupInstance] !== this) {\n\t\t\t\tthrow new Error('The agent is not owned by this CacheableLookup instance');\n\t\t\t}\n\n\t\t\tagent.createConnection = agent[kCacheableLookupCreateConnection];\n\n\t\t\tdelete agent[kCacheableLookupCreateConnection];\n\t\t\tdelete agent[kCacheableLookupInstance];\n\t\t}\n\t}\n\n\tupdateInterfaceInfo() {\n\t\tconst {_iface} = this;\n\n\t\tthis._iface = getIfaceInfo();\n\n\t\tif ((_iface.has4 && !this._iface.has4) || (_iface.has6 && !this._iface.has6)) {\n\t\t\tthis._cache.clear();\n\t\t}\n\t}\n\n\tclear(hostname) {\n\t\tif (hostname) {\n\t\t\tthis._cache.delete(hostname);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._cache.clear();\n\t}\n}\n\nclass QuickLRU$2 {\n\tconstructor(options = {}) {\n\t\tif (!(options.maxSize && options.maxSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tthis.maxSize = options.maxSize;\n\t\tthis.onEviction = options.onEviction;\n\t\tthis.cache = new Map();\n\t\tthis.oldCache = new Map();\n\t\tthis._size = 0;\n\t}\n\n\t_set(key, value) {\n\t\tthis.cache.set(key, value);\n\t\tthis._size++;\n\n\t\tif (this._size >= this.maxSize) {\n\t\t\tthis._size = 0;\n\n\t\t\tif (typeof this.onEviction === 'function') {\n\t\t\t\tfor (const [key, value] of this.oldCache.entries()) {\n\t\t\t\t\tthis.onEviction(key, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.oldCache = this.cache;\n\t\t\tthis.cache = new Map();\n\t\t}\n\t}\n\n\tget(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\treturn this.cache.get(key);\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\tconst value = this.oldCache.get(key);\n\t\t\tthis.oldCache.delete(key);\n\t\t\tthis._set(key, value);\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tset(key, value) {\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.set(key, value);\n\t\t} else {\n\t\t\tthis._set(key, value);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\thas(key) {\n\t\treturn this.cache.has(key) || this.oldCache.has(key);\n\t}\n\n\tpeek(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\treturn this.cache.get(key);\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\treturn this.oldCache.get(key);\n\t\t}\n\t}\n\n\tdelete(key) {\n\t\tconst deleted = this.cache.delete(key);\n\t\tif (deleted) {\n\t\t\tthis._size--;\n\t\t}\n\n\t\treturn this.oldCache.delete(key) || deleted;\n\t}\n\n\tclear() {\n\t\tthis.cache.clear();\n\t\tthis.oldCache.clear();\n\t\tthis._size = 0;\n\t}\n\n\t* keys() {\n\t\tfor (const [key] of this) {\n\t\t\tyield key;\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const [, value] of this) {\n\t\t\tyield value;\n\t\t}\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const item of this.cache) {\n\t\t\tyield item;\n\t\t}\n\n\t\tfor (const item of this.oldCache) {\n\t\t\tconst [key] = item;\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\t}\n\n\tget size() {\n\t\tlet oldCacheSize = 0;\n\t\tfor (const key of this.oldCache.keys()) {\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\toldCacheSize++;\n\t\t\t}\n\t\t}\n\n\t\treturn Math.min(this._size + oldCacheSize, this.maxSize);\n\t}\n}\n\nvar quickLru = QuickLRU$2;\n\nvar delayAsyncDestroy$2 = stream => {\n\tif (stream.listenerCount('error') !== 0) {\n\t\treturn stream;\n\t}\n\n\tstream.__destroy = stream._destroy;\n\tstream._destroy = (...args) => {\n\t\tconst callback = args.pop();\n\n\t\tstream.__destroy(...args, async error => {\n\t\t\tawait Promise.resolve();\n\t\t\tcallback(error);\n\t\t});\n\t};\n\n\tconst onError = error => {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\tPromise.resolve().then(() => {\n\t\t\tstream.emit('error', error);\n\t\t});\n\t};\n\n\tstream.once('error', onError);\n\n\t// eslint-disable-next-line promise/prefer-await-to-then\n\tPromise.resolve().then(() => {\n\t\tstream.off('error', onError);\n\t});\n\n\treturn stream;\n};\n\n// See https://github.com/facebook/jest/issues/2549\n// eslint-disable-next-line node/prefer-global/url\nconst {URL: URL$4} = require$$0__default$3[\"default\"];\nconst EventEmitter = require$$0__default$2[\"default\"];\nconst tls$3 = require$$0__default$4[\"default\"];\nconst http2$2 = require$$3__default[\"default\"];\nconst QuickLRU$1 = quickLru;\nconst delayAsyncDestroy$1 = delayAsyncDestroy$2;\n\nconst kCurrentStreamCount = Symbol('currentStreamCount');\nconst kRequest = Symbol('request');\nconst kOriginSet = Symbol('cachedOriginSet');\nconst kGracefullyClosing = Symbol('gracefullyClosing');\nconst kLength = Symbol('length');\n\nconst nameKeys = [\n\t// Not an Agent option actually\n\t'createConnection',\n\n\t// `http2.connect()` options\n\t'maxDeflateDynamicTableSize',\n\t'maxSettings',\n\t'maxSessionMemory',\n\t'maxHeaderListPairs',\n\t'maxOutstandingPings',\n\t'maxReservedRemoteStreams',\n\t'maxSendHeaderBlockLength',\n\t'paddingStrategy',\n\t'peerMaxConcurrentStreams',\n\t'settings',\n\n\t// `tls.connect()` source options\n\t'family',\n\t'localAddress',\n\t'rejectUnauthorized',\n\n\t// `tls.connect()` secure context options\n\t'pskCallback',\n\t'minDHSize',\n\n\t// `tls.connect()` destination options\n\t// - `servername` is automatically validated, skip it\n\t// - `host` and `port` just describe the destination server,\n\t'path',\n\t'socket',\n\n\t// `tls.createSecureContext()` options\n\t'ca',\n\t'cert',\n\t'sigalgs',\n\t'ciphers',\n\t'clientCertEngine',\n\t'crl',\n\t'dhparam',\n\t'ecdhCurve',\n\t'honorCipherOrder',\n\t'key',\n\t'privateKeyEngine',\n\t'privateKeyIdentifier',\n\t'maxVersion',\n\t'minVersion',\n\t'pfx',\n\t'secureOptions',\n\t'secureProtocol',\n\t'sessionIdContext',\n\t'ticketKeys'\n];\n\nconst getSortedIndex = (array, value, compare) => {\n\tlet low = 0;\n\tlet high = array.length;\n\n\twhile (low < high) {\n\t\tconst mid = (low + high) >>> 1;\n\n\t\tif (compare(array[mid], value)) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\n\treturn low;\n};\n\nconst compareSessions = (a, b) => a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;\n\n// See https://tools.ietf.org/html/rfc8336\nconst closeCoveredSessions = (where, session) => {\n\t// Clients SHOULD NOT emit new requests on any connection whose Origin\n\t// Set is a proper subset of another connection's Origin Set, and they\n\t// SHOULD close it once all outstanding requests are satisfied.\n\tfor (let index = 0; index < where.length; index++) {\n\t\tconst coveredSession = where[index];\n\n\t\tif (\n\t\t\t// Unfortunately `.every()` returns true for an empty array\n\t\t\tcoveredSession[kOriginSet].length > 0\n\n\t\t\t// The set is a proper subset when its length is less than the other set.\n\t\t\t&& coveredSession[kOriginSet].length < session[kOriginSet].length\n\n\t\t\t// And the other set includes all elements of the subset.\n\t\t\t&& coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))\n\n\t\t\t// Makes sure that the session can handle all requests from the covered session.\n\t\t\t&& (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams\n\t\t) {\n\t\t\t// This allows pending requests to finish and prevents making new requests.\n\t\t\tgracefullyClose(coveredSession);\n\t\t}\n\t}\n};\n\n// This is basically inverted `closeCoveredSessions(...)`.\nconst closeSessionIfCovered = (where, coveredSession) => {\n\tfor (let index = 0; index < where.length; index++) {\n\t\tconst session = where[index];\n\n\t\tif (\n\t\t\tcoveredSession[kOriginSet].length > 0\n\t\t\t&& coveredSession[kOriginSet].length < session[kOriginSet].length\n\t\t\t&& coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))\n\t\t\t&& (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams\n\t\t) {\n\t\t\tgracefullyClose(coveredSession);\n\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nconst gracefullyClose = session => {\n\tsession[kGracefullyClosing] = true;\n\n\tif (session[kCurrentStreamCount] === 0) {\n\t\tsession.close();\n\t}\n};\n\nclass Agent$4 extends EventEmitter {\n\tconstructor({timeout = 0, maxSessions = Number.POSITIVE_INFINITY, maxEmptySessions = 10, maxCachedTlsSessions = 100} = {}) {\n\t\tsuper();\n\n\t\t// SESSIONS[NORMALIZED_OPTIONS] = [];\n\t\tthis.sessions = {};\n\n\t\t// The queue for creating new sessions. It looks like this:\n\t\t// QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION\n\t\t//\n\t\t// It's faster when there are many origins. If there's only one, then QUEUE[`${options}:${origin}`] is faster.\n\t\t// I guess object creation / deletion is causing the slowdown.\n\t\t//\n\t\t// The entry function has `listeners`, `completed` and `destroyed` properties.\n\t\t// `listeners` is an array of objects containing `resolve` and `reject` functions.\n\t\t// `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed.\n\t\t// `destroyed` is a boolean. If it's set to true, the session will be destroyed if hasn't connected yet.\n\t\tthis.queue = {};\n\n\t\t// Each session will use this timeout value.\n\t\tthis.timeout = timeout;\n\n\t\t// Max sessions in total\n\t\tthis.maxSessions = maxSessions;\n\n\t\t// Max empty sessions in total\n\t\tthis.maxEmptySessions = maxEmptySessions;\n\n\t\tthis._emptySessionCount = 0;\n\t\tthis._sessionCount = 0;\n\n\t\t// We don't support push streams by default.\n\t\tthis.settings = {\n\t\t\tenablePush: false,\n\t\t\tinitialWindowSize: 1024 * 1024 * 32 // 32MB, see https://github.com/nodejs/node/issues/38426\n\t\t};\n\n\t\t// Reusing TLS sessions increases performance.\n\t\tthis.tlsSessionCache = new QuickLRU$1({maxSize: maxCachedTlsSessions});\n\t}\n\n\tget protocol() {\n\t\treturn 'https:';\n\t}\n\n\tnormalizeOptions(options) {\n\t\tlet normalized = '';\n\n\t\tfor (let index = 0; index < nameKeys.length; index++) {\n\t\t\tconst key = nameKeys[index];\n\n\t\t\tnormalized += ':';\n\n\t\t\tif (options && options[key] !== undefined) {\n\t\t\t\tnormalized += options[key];\n\t\t\t}\n\t\t}\n\n\t\treturn normalized;\n\t}\n\n\t_processQueue() {\n\t\tif (this._sessionCount >= this.maxSessions) {\n\t\t\tthis.closeEmptySessions(this.maxSessions - this._sessionCount + 1);\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const normalizedOptions in this.queue) {\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const normalizedOrigin in this.queue[normalizedOptions]) {\n\t\t\t\tconst item = this.queue[normalizedOptions][normalizedOrigin];\n\n\t\t\t\t// The entry function can be run only once.\n\t\t\t\tif (!item.completed) {\n\t\t\t\t\titem.completed = true;\n\n\t\t\t\t\titem();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_isBetterSession(thisStreamCount, thatStreamCount) {\n\t\treturn thisStreamCount > thatStreamCount;\n\t}\n\n\t_accept(session, listeners, normalizedOrigin, options) {\n\t\tlet index = 0;\n\n\t\twhile (index < listeners.length && session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams) {\n\t\t\t// We assume `resolve(...)` calls `request(...)` *directly*,\n\t\t\t// otherwise the session will get overloaded.\n\t\t\tlisteners[index].resolve(session);\n\n\t\t\tindex++;\n\t\t}\n\n\t\tlisteners.splice(0, index);\n\n\t\tif (listeners.length > 0) {\n\t\t\tthis.getSession(normalizedOrigin, options, listeners);\n\t\t\tlisteners.length = 0;\n\t\t}\n\t}\n\n\tgetSession(origin, options, listeners) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (Array.isArray(listeners) && listeners.length > 0) {\n\t\t\t\tlisteners = [...listeners];\n\n\t\t\t\t// Resolve the current promise ASAP, we're just moving the listeners.\n\t\t\t\t// They will be executed at a different time.\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\tlisteners = [{resolve, reject}];\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// Parse origin\n\t\t\t\tif (typeof origin === 'string') {\n\t\t\t\t\torigin = new URL$4(origin);\n\t\t\t\t} else if (!(origin instanceof URL$4)) {\n\t\t\t\t\tthrow new TypeError('The `origin` argument needs to be a string or an URL object');\n\t\t\t\t}\n\n\t\t\t\tif (options) {\n\t\t\t\t\t// Validate servername\n\t\t\t\t\tconst {servername} = options;\n\t\t\t\t\tconst {hostname} = origin;\n\t\t\t\t\tif (servername && hostname !== servername) {\n\t\t\t\t\t\tthrow new Error(`Origin ${hostname} differs from servername ${servername}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst normalizedOptions = this.normalizeOptions(options);\n\t\t\tconst normalizedOrigin = origin.origin;\n\n\t\t\tif (normalizedOptions in this.sessions) {\n\t\t\t\tconst sessions = this.sessions[normalizedOptions];\n\n\t\t\t\tlet maxConcurrentStreams = -1;\n\t\t\t\tlet currentStreamsCount = -1;\n\t\t\t\tlet optimalSession;\n\n\t\t\t\t// We could just do this.sessions[normalizedOptions].find(...) but that isn't optimal.\n\t\t\t\t// Additionally, we are looking for session which has biggest current pending streams count.\n\t\t\t\t//\n\t\t\t\t// |------------| |------------| |------------| |------------|\n\t\t\t\t// | Session: A | | Session: B | | Session: C | | Session: D |\n\t\t\t\t// | Pending: 5 |-| Pending: 8 |-| Pending: 9 |-| Pending: 4 |\n\t\t\t\t// | Max:    10 | | Max:    10 | | Max:     9 | | Max:     5 |\n\t\t\t\t// |------------| |------------| |------------| |------------|\n\t\t\t\t//                     ^\n\t\t\t\t//                     |\n\t\t\t\t//     pick this one  --\n\t\t\t\t//\n\t\t\t\tfor (let index = 0; index < sessions.length; index++) {\n\t\t\t\t\tconst session = sessions[index];\n\n\t\t\t\t\tconst sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams;\n\n\t\t\t\t\tif (sessionMaxConcurrentStreams < maxConcurrentStreams) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!session[kOriginSet].includes(normalizedOrigin)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst sessionCurrentStreamsCount = session[kCurrentStreamCount];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tsessionCurrentStreamsCount >= sessionMaxConcurrentStreams\n\t\t\t\t\t\t|| session[kGracefullyClosing]\n\t\t\t\t\t\t// Unfortunately the `close` event isn't called immediately,\n\t\t\t\t\t\t// so `session.destroyed` is `true`, but `session.closed` is `false`.\n\t\t\t\t\t\t|| session.destroyed\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We only need set this once.\n\t\t\t\t\tif (!optimalSession) {\n\t\t\t\t\t\tmaxConcurrentStreams = sessionMaxConcurrentStreams;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Either get the session which has biggest current stream count or the lowest.\n\t\t\t\t\tif (this._isBetterSession(sessionCurrentStreamsCount, currentStreamsCount)) {\n\t\t\t\t\t\toptimalSession = session;\n\t\t\t\t\t\tcurrentStreamsCount = sessionCurrentStreamsCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (optimalSession) {\n\t\t\t\t\tthis._accept(optimalSession, listeners, normalizedOrigin, options);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (normalizedOptions in this.queue) {\n\t\t\t\tif (normalizedOrigin in this.queue[normalizedOptions]) {\n\t\t\t\t\t// There's already an item in the queue, just attach ourselves to it.\n\t\t\t\t\tthis.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.queue[normalizedOptions] = {\n\t\t\t\t\t[kLength]: 0\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// The entry must be removed from the queue IMMEDIATELY when:\n\t\t\t// 1. the session connects successfully,\n\t\t\t// 2. an error occurs.\n\t\t\tconst removeFromQueue = () => {\n\t\t\t\t// Our entry can be replaced. We cannot remove the new one.\n\t\t\t\tif (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {\n\t\t\t\t\tdelete this.queue[normalizedOptions][normalizedOrigin];\n\n\t\t\t\t\tif (--this.queue[normalizedOptions][kLength] === 0) {\n\t\t\t\t\t\tdelete this.queue[normalizedOptions];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// The main logic is here\n\t\t\tconst entry = async () => {\n\t\t\t\tthis._sessionCount++;\n\n\t\t\t\tconst name = `${normalizedOrigin}:${normalizedOptions}`;\n\t\t\t\tlet receivedSettings = false;\n\t\t\t\tlet socket;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst computedOptions = {...options};\n\n\t\t\t\t\tif (computedOptions.settings === undefined) {\n\t\t\t\t\t\tcomputedOptions.settings = this.settings;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (computedOptions.session === undefined) {\n\t\t\t\t\t\tcomputedOptions.session = this.tlsSessionCache.get(name);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst createConnection = computedOptions.createConnection || this.createConnection;\n\n\t\t\t\t\t// A hacky workaround to enable async `createConnection`\n\t\t\t\t\tsocket = await createConnection.call(this, origin, computedOptions);\n\t\t\t\t\tcomputedOptions.createConnection = () => socket;\n\n\t\t\t\t\tconst session = http2$2.connect(origin, computedOptions);\n\t\t\t\t\tsession[kCurrentStreamCount] = 0;\n\t\t\t\t\tsession[kGracefullyClosing] = false;\n\n\t\t\t\t\t// Node.js return https://false:443 instead of https://1.1.1.1:443\n\t\t\t\t\tconst getOriginSet = () => {\n\t\t\t\t\t\tconst {socket} = session;\n\n\t\t\t\t\t\tlet originSet;\n\t\t\t\t\t\tif (socket.servername === false) {\n\t\t\t\t\t\t\tsocket.servername = socket.remoteAddress;\n\t\t\t\t\t\t\toriginSet = session.originSet;\n\t\t\t\t\t\t\tsocket.servername = false;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toriginSet = session.originSet;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn originSet;\n\t\t\t\t\t};\n\n\t\t\t\t\tconst isFree = () => session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams;\n\n\t\t\t\t\tsession.socket.once('session', tlsSession => {\n\t\t\t\t\t\tthis.tlsSessionCache.set(name, tlsSession);\n\t\t\t\t\t});\n\n\t\t\t\t\tsession.once('error', error => {\n\t\t\t\t\t\t// Listeners are empty when the session successfully connected.\n\t\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// The connection got broken, purge the cache.\n\t\t\t\t\t\tthis.tlsSessionCache.delete(name);\n\t\t\t\t\t});\n\n\t\t\t\t\tsession.setTimeout(this.timeout, () => {\n\t\t\t\t\t\t// Terminates all streams owned by this session.\n\t\t\t\t\t\tsession.destroy();\n\t\t\t\t\t});\n\n\t\t\t\t\tsession.once('close', () => {\n\t\t\t\t\t\tthis._sessionCount--;\n\n\t\t\t\t\t\tif (receivedSettings) {\n\t\t\t\t\t\t\t// Assumes session `close` is emitted after request `close`\n\t\t\t\t\t\t\tthis._emptySessionCount--;\n\n\t\t\t\t\t\t\t// This cannot be moved to the stream logic,\n\t\t\t\t\t\t\t// because there may be a session that hadn't made a single request.\n\t\t\t\t\t\t\tconst where = this.sessions[normalizedOptions];\n\n\t\t\t\t\t\t\tif (where.length === 1) {\n\t\t\t\t\t\t\t\tdelete this.sessions[normalizedOptions];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twhere.splice(where.indexOf(session), 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Broken connection\n\t\t\t\t\t\t\tremoveFromQueue();\n\n\t\t\t\t\t\t\tconst error = new Error('Session closed without receiving a SETTINGS frame');\n\t\t\t\t\t\t\terror.code = 'HTTP2WRAPPER_NOSETTINGS';\n\n\t\t\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// There may be another session awaiting.\n\t\t\t\t\t\tthis._processQueue();\n\t\t\t\t\t});\n\n\t\t\t\t\t// Iterates over the queue and processes listeners.\n\t\t\t\t\tconst processListeners = () => {\n\t\t\t\t\t\tconst queue = this.queue[normalizedOptions];\n\t\t\t\t\t\tif (!queue) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst originSet = session[kOriginSet];\n\n\t\t\t\t\t\tfor (let index = 0; index < originSet.length; index++) {\n\t\t\t\t\t\t\tconst origin = originSet[index];\n\n\t\t\t\t\t\t\tif (origin in queue) {\n\t\t\t\t\t\t\t\tconst {listeners, completed} = queue[origin];\n\n\t\t\t\t\t\t\t\tlet index = 0;\n\n\t\t\t\t\t\t\t\t// Prevents session overloading.\n\t\t\t\t\t\t\t\twhile (index < listeners.length && isFree()) {\n\t\t\t\t\t\t\t\t\t// We assume `resolve(...)` calls `request(...)` *directly*,\n\t\t\t\t\t\t\t\t\t// otherwise the session will get overloaded.\n\t\t\t\t\t\t\t\t\tlisteners[index].resolve(session);\n\n\t\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tqueue[origin].listeners.splice(0, index);\n\n\t\t\t\t\t\t\t\tif (queue[origin].listeners.length === 0 && !completed) {\n\t\t\t\t\t\t\t\t\tdelete queue[origin];\n\n\t\t\t\t\t\t\t\t\tif (--queue[kLength] === 0) {\n\t\t\t\t\t\t\t\t\t\tdelete this.queue[normalizedOptions];\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// We're no longer free, no point in continuing.\n\t\t\t\t\t\t\t\tif (!isFree()) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// The Origin Set cannot shrink. No need to check if it suddenly became covered by another one.\n\t\t\t\t\tsession.on('origin', () => {\n\t\t\t\t\t\tsession[kOriginSet] = getOriginSet() || [];\n\t\t\t\t\t\tsession[kGracefullyClosing] = false;\n\t\t\t\t\t\tcloseSessionIfCovered(this.sessions[normalizedOptions], session);\n\n\t\t\t\t\t\tif (session[kGracefullyClosing] || !isFree()) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tprocessListeners();\n\n\t\t\t\t\t\tif (!isFree()) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Close covered sessions (if possible).\n\t\t\t\t\t\tcloseCoveredSessions(this.sessions[normalizedOptions], session);\n\t\t\t\t\t});\n\n\t\t\t\t\tsession.once('remoteSettings', () => {\n\t\t\t\t\t\t// The Agent could have been destroyed already.\n\t\t\t\t\t\tif (entry.destroyed) {\n\t\t\t\t\t\t\tconst error = new Error('Agent has been destroyed');\n\n\t\t\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsession.destroy();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// See https://github.com/nodejs/node/issues/38426\n\t\t\t\t\t\tif (session.setLocalWindowSize) {\n\t\t\t\t\t\t\tsession.setLocalWindowSize(1024 * 1024 * 4); // 4 MB\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsession[kOriginSet] = getOriginSet() || [];\n\n\t\t\t\t\t\tif (session.socket.encrypted) {\n\t\t\t\t\t\t\tconst mainOrigin = session[kOriginSet][0];\n\t\t\t\t\t\t\tif (mainOrigin !== normalizedOrigin) {\n\t\t\t\t\t\t\t\tconst error = new Error(`Requested origin ${normalizedOrigin} does not match server ${mainOrigin}`);\n\n\t\t\t\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsession.destroy();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tremoveFromQueue();\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst where = this.sessions;\n\n\t\t\t\t\t\t\tif (normalizedOptions in where) {\n\t\t\t\t\t\t\t\tconst sessions = where[normalizedOptions];\n\t\t\t\t\t\t\t\tsessions.splice(getSortedIndex(sessions, session, compareSessions), 0, session);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twhere[normalizedOptions] = [session];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treceivedSettings = true;\n\t\t\t\t\t\tthis._emptySessionCount++;\n\n\t\t\t\t\t\tthis.emit('session', session);\n\t\t\t\t\t\tthis._accept(session, listeners, normalizedOrigin, options);\n\n\t\t\t\t\t\tif (session[kCurrentStreamCount] === 0 && this._emptySessionCount > this.maxEmptySessions) {\n\t\t\t\t\t\t\tthis.closeEmptySessions(this._emptySessionCount - this.maxEmptySessions);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// `session.remoteSettings.maxConcurrentStreams` might get increased\n\t\t\t\t\t\tsession.on('remoteSettings', () => {\n\t\t\t\t\t\t\tif (!isFree()) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tprocessListeners();\n\n\t\t\t\t\t\t\tif (!isFree()) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// In case the Origin Set changes\n\t\t\t\t\t\t\tcloseCoveredSessions(this.sessions[normalizedOptions], session);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// Shim `session.request()` in order to catch all streams\n\t\t\t\t\tsession[kRequest] = session.request;\n\t\t\t\t\tsession.request = (headers, streamOptions) => {\n\t\t\t\t\t\tif (session[kGracefullyClosing]) {\n\t\t\t\t\t\t\tthrow new Error('The session is gracefully closing. No new streams are allowed.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst stream = session[kRequest](headers, streamOptions);\n\n\t\t\t\t\t\t// The process won't exit until the session is closed or all requests are gone.\n\t\t\t\t\t\tsession.ref();\n\n\t\t\t\t\t\tif (session[kCurrentStreamCount]++ === 0) {\n\t\t\t\t\t\t\tthis._emptySessionCount--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstream.once('close', () => {\n\t\t\t\t\t\t\tif (--session[kCurrentStreamCount] === 0) {\n\t\t\t\t\t\t\t\tthis._emptySessionCount++;\n\t\t\t\t\t\t\t\tsession.unref();\n\n\t\t\t\t\t\t\t\tif (this._emptySessionCount > this.maxEmptySessions || session[kGracefullyClosing]) {\n\t\t\t\t\t\t\t\t\tsession.close();\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (session.destroyed || session.closed) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (isFree() && !closeSessionIfCovered(this.sessions[normalizedOptions], session)) {\n\t\t\t\t\t\t\t\tcloseCoveredSessions(this.sessions[normalizedOptions], session);\n\t\t\t\t\t\t\t\tprocessListeners();\n\n\t\t\t\t\t\t\t\tif (session[kCurrentStreamCount] === 0) {\n\t\t\t\t\t\t\t\t\tthis._processQueue();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn stream;\n\t\t\t\t\t};\n\t\t\t\t} catch (error) {\n\t\t\t\t\tremoveFromQueue();\n\t\t\t\t\tthis._sessionCount--;\n\n\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tentry.listeners = listeners;\n\t\t\tentry.completed = false;\n\t\t\tentry.destroyed = false;\n\n\t\t\tthis.queue[normalizedOptions][normalizedOrigin] = entry;\n\t\t\tthis.queue[normalizedOptions][kLength]++;\n\t\t\tthis._processQueue();\n\t\t});\n\t}\n\n\trequest(origin, options, headers, streamOptions) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.getSession(origin, options, [{\n\t\t\t\treject,\n\t\t\t\tresolve: session => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst stream = session.request(headers, streamOptions);\n\n\t\t\t\t\t\t// Do not throw before `request(...)` has been awaited\n\t\t\t\t\t\tdelayAsyncDestroy$1(stream);\n\n\t\t\t\t\t\tresolve(stream);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}]);\n\t\t});\n\t}\n\n\tasync createConnection(origin, options) {\n\t\treturn Agent$4.connect(origin, options);\n\t}\n\n\tstatic connect(origin, options) {\n\t\toptions.ALPNProtocols = ['h2'];\n\n\t\tconst port = origin.port || 443;\n\t\tconst host = origin.hostname;\n\n\t\tif (typeof options.servername === 'undefined') {\n\t\t\toptions.servername = host;\n\t\t}\n\n\t\tconst socket = tls$3.connect(port, host, options);\n\n\t\tif (options.socket) {\n\t\t\tsocket._peername = {\n\t\t\t\tfamily: undefined,\n\t\t\t\taddress: undefined,\n\t\t\t\tport\n\t\t\t};\n\t\t}\n\n\t\treturn socket;\n\t}\n\n\tcloseEmptySessions(maxCount = Number.POSITIVE_INFINITY) {\n\t\tlet closedCount = 0;\n\n\t\tconst {sessions} = this;\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const key in sessions) {\n\t\t\tconst thisSessions = sessions[key];\n\n\t\t\tfor (let index = 0; index < thisSessions.length; index++) {\n\t\t\t\tconst session = thisSessions[index];\n\n\t\t\t\tif (session[kCurrentStreamCount] === 0) {\n\t\t\t\t\tclosedCount++;\n\t\t\t\t\tsession.close();\n\n\t\t\t\t\tif (closedCount >= maxCount) {\n\t\t\t\t\t\treturn closedCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn closedCount;\n\t}\n\n\tdestroy(reason) {\n\t\tconst {sessions, queue} = this;\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const key in sessions) {\n\t\t\tconst thisSessions = sessions[key];\n\n\t\t\tfor (let index = 0; index < thisSessions.length; index++) {\n\t\t\t\tthisSessions[index].destroy(reason);\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const normalizedOptions in queue) {\n\t\t\tconst entries = queue[normalizedOptions];\n\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const normalizedOrigin in entries) {\n\t\t\t\tentries[normalizedOrigin].destroyed = true;\n\t\t\t}\n\t\t}\n\n\t\t// New requests should NOT attach to destroyed sessions\n\t\tthis.queue = {};\n\t\tthis.tlsSessionCache.clear();\n\t}\n\n\tget emptySessionCount() {\n\t\treturn this._emptySessionCount;\n\t}\n\n\tget pendingSessionCount() {\n\t\treturn this._sessionCount - this._emptySessionCount;\n\t}\n\n\tget sessionCount() {\n\t\treturn this._sessionCount;\n\t}\n}\n\nAgent$4.kCurrentStreamCount = kCurrentStreamCount;\nAgent$4.kGracefullyClosing = kGracefullyClosing;\n\nvar agent = {\n\tAgent: Agent$4,\n\tglobalAgent: new Agent$4()\n};\n\nconst {Readable} = require$$0__default[\"default\"];\n\nclass IncomingMessage$2 extends Readable {\n\tconstructor(socket, highWaterMark) {\n\t\tsuper({\n\t\t\temitClose: false,\n\t\t\tautoDestroy: true,\n\t\t\thighWaterMark\n\t\t});\n\n\t\tthis.statusCode = null;\n\t\tthis.statusMessage = '';\n\t\tthis.httpVersion = '2.0';\n\t\tthis.httpVersionMajor = 2;\n\t\tthis.httpVersionMinor = 0;\n\t\tthis.headers = {};\n\t\tthis.trailers = {};\n\t\tthis.req = null;\n\n\t\tthis.aborted = false;\n\t\tthis.complete = false;\n\t\tthis.upgrade = null;\n\n\t\tthis.rawHeaders = [];\n\t\tthis.rawTrailers = [];\n\n\t\tthis.socket = socket;\n\n\t\tthis._dumped = false;\n\t}\n\n\tget connection() {\n\t\treturn this.socket;\n\t}\n\n\tset connection(value) {\n\t\tthis.socket = value;\n\t}\n\n\t_destroy(error, callback) {\n\t\tif (!this.readableEnded) {\n\t\t\tthis.aborted = true;\n\t\t}\n\n\t\t// See https://github.com/nodejs/node/issues/35303\n\t\tcallback();\n\n\t\tthis.req._request.destroy(error);\n\t}\n\n\tsetTimeout(ms, callback) {\n\t\tthis.req.setTimeout(ms, callback);\n\t\treturn this;\n\t}\n\n\t_dump() {\n\t\tif (!this._dumped) {\n\t\t\tthis._dumped = true;\n\n\t\t\tthis.removeAllListeners('data');\n\t\t\tthis.resume();\n\t\t}\n\t}\n\n\t_read() {\n\t\tif (this.req) {\n\t\t\tthis.req._request.resume();\n\t\t}\n\t}\n}\n\nvar incomingMessage = IncomingMessage$2;\n\nvar proxyEvents$1 = (from, to, events) => {\n\tfor (const event of events) {\n\t\tfrom.on(event, (...args) => to.emit(event, ...args));\n\t}\n};\n\nvar errors = {exports: {}};\n\n(function (module) {\n\t/* istanbul ignore file: https://github.com/nodejs/node/blob/master/lib/internal/errors.js */\n\n\tconst makeError = (Base, key, getMessage) => {\n\t\tmodule.exports[key] = class NodeError extends Base {\n\t\t\tconstructor(...args) {\n\t\t\t\tsuper(typeof getMessage === 'string' ? getMessage : getMessage(args));\n\t\t\t\tthis.name = `${super.name} [${key}]`;\n\t\t\t\tthis.code = key;\n\t\t\t}\n\t\t};\n\t};\n\n\tmakeError(TypeError, 'ERR_INVALID_ARG_TYPE', args => {\n\t\tconst type = args[0].includes('.') ? 'property' : 'argument';\n\n\t\tlet valid = args[1];\n\t\tconst isManyTypes = Array.isArray(valid);\n\n\t\tif (isManyTypes) {\n\t\t\tvalid = `${valid.slice(0, -1).join(', ')} or ${valid.slice(-1)}`;\n\t\t}\n\n\t\treturn `The \"${args[0]}\" ${type} must be ${isManyTypes ? 'one of' : 'of'} type ${valid}. Received ${typeof args[2]}`;\n\t});\n\n\tmakeError(TypeError, 'ERR_INVALID_PROTOCOL', args =>\n\t\t`Protocol \"${args[0]}\" not supported. Expected \"${args[1]}\"`\n\t);\n\n\tmakeError(Error, 'ERR_HTTP_HEADERS_SENT', args =>\n\t\t`Cannot ${args[0]} headers after they are sent to the client`\n\t);\n\n\tmakeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args =>\n\t\t`${args[0]} must be a valid HTTP token [${args[1]}]`\n\t);\n\n\tmakeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args =>\n\t\t`Invalid value \"${args[0]} for header \"${args[1]}\"`\n\t);\n\n\tmakeError(TypeError, 'ERR_INVALID_CHAR', args =>\n\t\t`Invalid character in ${args[0]} [${args[1]}]`\n\t);\n\n\tmakeError(\n\t\tError,\n\t\t'ERR_HTTP2_NO_SOCKET_MANIPULATION',\n\t\t'HTTP/2 sockets should not be directly manipulated (e.g. read and written)'\n\t);\n} (errors));\n\nvar isRequestPseudoHeader$1 = header => {\n\tswitch (header) {\n\t\tcase ':method':\n\t\tcase ':scheme':\n\t\tcase ':authority':\n\t\tcase ':path':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n};\n\nconst {ERR_INVALID_HTTP_TOKEN} = errors.exports;\nconst isRequestPseudoHeader = isRequestPseudoHeader$1;\n\nconst isValidHttpToken = /^[\\^`\\-\\w!#$%&*+.|~]+$/;\n\nvar validateHeaderName$2 = name => {\n\tif (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {\n\t\tthrow new ERR_INVALID_HTTP_TOKEN('Header name', name);\n\t}\n};\n\nconst {\n\tERR_HTTP_INVALID_HEADER_VALUE,\n\tERR_INVALID_CHAR\n} = errors.exports;\n\nconst isInvalidHeaderValue = /[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/;\n\nvar validateHeaderValue$2 = (name, value) => {\n\tif (typeof value === 'undefined') {\n\t\tthrow new ERR_HTTP_INVALID_HEADER_VALUE(value, name);\n\t}\n\n\tif (isInvalidHeaderValue.test(value)) {\n\t\tthrow new ERR_INVALID_CHAR('header content', name);\n\t}\n};\n\nconst {ERR_HTTP2_NO_SOCKET_MANIPULATION} = errors.exports;\n\n/* istanbul ignore file */\n/* https://github.com/nodejs/node/blob/6eec858f34a40ffa489c1ec54bb24da72a28c781/lib/internal/http2/compat.js#L195-L272 */\n\nconst proxySocketHandler$1 = {\n\thas(stream, property) {\n\t\t// Replaced [kSocket] with .socket\n\t\tconst reference = stream.session === undefined ? stream : stream.session.socket;\n\t\treturn (property in stream) || (property in reference);\n\t},\n\n\tget(stream, property) {\n\t\tswitch (property) {\n\t\t\tcase 'on':\n\t\t\tcase 'once':\n\t\t\tcase 'end':\n\t\t\tcase 'emit':\n\t\t\tcase 'destroy':\n\t\t\t\treturn stream[property].bind(stream);\n\t\t\tcase 'writable':\n\t\t\tcase 'destroyed':\n\t\t\t\treturn stream[property];\n\t\t\tcase 'readable':\n\t\t\t\tif (stream.destroyed) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn stream.readable;\n\t\t\tcase 'setTimeout': {\n\t\t\t\tconst {session} = stream;\n\t\t\t\tif (session !== undefined) {\n\t\t\t\t\treturn session.setTimeout.bind(session);\n\t\t\t\t}\n\n\t\t\t\treturn stream.setTimeout.bind(stream);\n\t\t\t}\n\n\t\t\tcase 'write':\n\t\t\tcase 'read':\n\t\t\tcase 'pause':\n\t\t\tcase 'resume':\n\t\t\t\tthrow new ERR_HTTP2_NO_SOCKET_MANIPULATION();\n\t\t\tdefault: {\n\t\t\t\t// Replaced [kSocket] with .socket\n\t\t\t\tconst reference = stream.session === undefined ? stream : stream.session.socket;\n\t\t\t\tconst value = reference[property];\n\n\t\t\t\treturn typeof value === 'function' ? value.bind(reference) : value;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPrototypeOf(stream) {\n\t\tif (stream.session !== undefined) {\n\t\t\t// Replaced [kSocket] with .socket\n\t\t\treturn Reflect.getPrototypeOf(stream.session.socket);\n\t\t}\n\n\t\treturn Reflect.getPrototypeOf(stream);\n\t},\n\n\tset(stream, property, value) {\n\t\tswitch (property) {\n\t\t\tcase 'writable':\n\t\t\tcase 'readable':\n\t\t\tcase 'destroyed':\n\t\t\tcase 'on':\n\t\t\tcase 'once':\n\t\t\tcase 'end':\n\t\t\tcase 'emit':\n\t\t\tcase 'destroy':\n\t\t\t\tstream[property] = value;\n\t\t\t\treturn true;\n\t\t\tcase 'setTimeout': {\n\t\t\t\tconst {session} = stream;\n\t\t\t\tif (session === undefined) {\n\t\t\t\t\tstream.setTimeout = value;\n\t\t\t\t} else {\n\t\t\t\t\tsession.setTimeout = value;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase 'write':\n\t\t\tcase 'read':\n\t\t\tcase 'pause':\n\t\t\tcase 'resume':\n\t\t\t\tthrow new ERR_HTTP2_NO_SOCKET_MANIPULATION();\n\t\t\tdefault: {\n\t\t\t\t// Replaced [kSocket] with .socket\n\t\t\t\tconst reference = stream.session === undefined ? stream : stream.session.socket;\n\t\t\t\treference[property] = value;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar proxySocketHandler_1 = proxySocketHandler$1;\n\n// See https://github.com/facebook/jest/issues/2549\n// eslint-disable-next-line node/prefer-global/url\nconst {URL: URL$3, urlToHttpOptions: urlToHttpOptions$1} = require$$0__default$3[\"default\"];\nconst http2$1 = require$$3__default[\"default\"];\nconst {Writable} = require$$0__default[\"default\"];\nconst {Agent: Agent$3, globalAgent: globalAgent$4} = agent;\nconst IncomingMessage$1 = incomingMessage;\nconst proxyEvents = proxyEvents$1;\nconst {\n\tERR_INVALID_ARG_TYPE,\n\tERR_INVALID_PROTOCOL,\n\tERR_HTTP_HEADERS_SENT\n} = errors.exports;\nconst validateHeaderName$1 = validateHeaderName$2;\nconst validateHeaderValue$1 = validateHeaderValue$2;\nconst proxySocketHandler = proxySocketHandler_1;\n\nconst {\n\tHTTP2_HEADER_STATUS,\n\tHTTP2_HEADER_METHOD,\n\tHTTP2_HEADER_PATH,\n\tHTTP2_HEADER_AUTHORITY,\n\tHTTP2_METHOD_CONNECT\n} = http2$1.constants;\n\nconst kHeaders = Symbol('headers');\nconst kOrigin = Symbol('origin');\nconst kSession = Symbol('session');\nconst kOptions = Symbol('options');\nconst kFlushedHeaders = Symbol('flushedHeaders');\nconst kJobs = Symbol('jobs');\nconst kPendingAgentPromise = Symbol('pendingAgentPromise');\n\nclass ClientRequest$1 extends Writable {\n\tconstructor(input, options, callback) {\n\t\tsuper({\n\t\t\tautoDestroy: false,\n\t\t\temitClose: false\n\t\t});\n\n\t\tif (typeof input === 'string') {\n\t\t\tinput = urlToHttpOptions$1(new URL$3(input));\n\t\t} else if (input instanceof URL$3) {\n\t\t\tinput = urlToHttpOptions$1(input);\n\t\t} else {\n\t\t\tinput = {...input};\n\t\t}\n\n\t\tif (typeof options === 'function' || options === undefined) {\n\t\t\t// (options, callback)\n\t\t\tcallback = options;\n\t\t\toptions = input;\n\t\t} else {\n\t\t\t// (input, options, callback)\n\t\t\toptions = Object.assign(input, options);\n\t\t}\n\n\t\tif (options.h2session) {\n\t\t\tthis[kSession] = options.h2session;\n\n\t\t\tif (this[kSession].destroyed) {\n\t\t\t\tthrow new Error('The session has been closed already');\n\t\t\t}\n\n\t\t\tthis.protocol = this[kSession].socket.encrypted ? 'https:' : 'http:';\n\t\t} else if (options.agent === false) {\n\t\t\tthis.agent = new Agent$3({maxEmptySessions: 0});\n\t\t} else if (typeof options.agent === 'undefined' || options.agent === null) {\n\t\t\tthis.agent = globalAgent$4;\n\t\t} else if (typeof options.agent.request === 'function') {\n\t\t\tthis.agent = options.agent;\n\t\t} else {\n\t\t\tthrow new ERR_INVALID_ARG_TYPE('options.agent', ['http2wrapper.Agent-like Object', 'undefined', 'false'], options.agent);\n\t\t}\n\n\t\tif (this.agent) {\n\t\t\tthis.protocol = this.agent.protocol;\n\t\t}\n\n\t\tif (options.protocol && options.protocol !== this.protocol) {\n\t\t\tthrow new ERR_INVALID_PROTOCOL(options.protocol, this.protocol);\n\t\t}\n\n\t\tif (!options.port) {\n\t\t\toptions.port = options.defaultPort || (this.agent && this.agent.defaultPort) || 443;\n\t\t}\n\n\t\toptions.host = options.hostname || options.host || 'localhost';\n\n\t\t// Unused\n\t\tdelete options.hostname;\n\n\t\tconst {timeout} = options;\n\t\toptions.timeout = undefined;\n\n\t\tthis[kHeaders] = Object.create(null);\n\t\tthis[kJobs] = [];\n\n\t\tthis[kPendingAgentPromise] = undefined;\n\n\t\tthis.socket = null;\n\t\tthis.connection = null;\n\n\t\tthis.method = options.method || 'GET';\n\n\t\tif (!(this.method === 'CONNECT' && (options.path === '/' || options.path === undefined))) {\n\t\t\tthis.path = options.path;\n\t\t}\n\n\t\tthis.res = null;\n\t\tthis.aborted = false;\n\t\tthis.reusedSocket = false;\n\n\t\tconst {headers} = options;\n\t\tif (headers) {\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const header in headers) {\n\t\t\t\tthis.setHeader(header, headers[header]);\n\t\t\t}\n\t\t}\n\n\t\tif (options.auth && !('authorization' in this[kHeaders])) {\n\t\t\tthis[kHeaders].authorization = 'Basic ' + Buffer.from(options.auth).toString('base64');\n\t\t}\n\n\t\toptions.session = options.tlsSession;\n\t\toptions.path = options.socketPath;\n\n\t\tthis[kOptions] = options;\n\n\t\t// Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field.\n\t\tthis[kOrigin] = new URL$3(`${this.protocol}//${options.servername || options.host}:${options.port}`);\n\n\t\t// A socket is being reused\n\t\tconst reuseSocket = options._reuseSocket;\n\t\tif (reuseSocket) {\n\t\t\toptions.createConnection = (...args) => {\n\t\t\t\tif (reuseSocket.destroyed) {\n\t\t\t\t\treturn this.agent.createConnection(...args);\n\t\t\t\t}\n\n\t\t\t\treturn reuseSocket;\n\t\t\t};\n\n\t\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\t\tthis.agent.getSession(this[kOrigin], this[kOptions]).catch(() => {});\n\t\t}\n\n\t\tif (timeout) {\n\t\t\tthis.setTimeout(timeout);\n\t\t}\n\n\t\tif (callback) {\n\t\t\tthis.once('response', callback);\n\t\t}\n\n\t\tthis[kFlushedHeaders] = false;\n\t}\n\n\tget method() {\n\t\treturn this[kHeaders][HTTP2_HEADER_METHOD];\n\t}\n\n\tset method(value) {\n\t\tif (value) {\n\t\t\tthis[kHeaders][HTTP2_HEADER_METHOD] = value.toUpperCase();\n\t\t}\n\t}\n\n\tget path() {\n\t\tconst header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;\n\n\t\treturn this[kHeaders][header];\n\t}\n\n\tset path(value) {\n\t\tif (value) {\n\t\t\tconst header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;\n\n\t\t\tthis[kHeaders][header] = value;\n\t\t}\n\t}\n\n\tget host() {\n\t\treturn this[kOrigin].hostname;\n\t}\n\n\tset host(_value) {\n\t\t// Do nothing as this is read only.\n\t}\n\n\tget _mustNotHaveABody() {\n\t\treturn this.method === 'GET' || this.method === 'HEAD' || this.method === 'DELETE';\n\t}\n\n\t_write(chunk, encoding, callback) {\n\t\t// https://github.com/nodejs/node/blob/654df09ae0c5e17d1b52a900a545f0664d8c7627/lib/internal/http2/util.js#L148-L156\n\t\tif (this._mustNotHaveABody) {\n\t\t\tcallback(new Error('The GET, HEAD and DELETE methods must NOT have a body'));\n\t\t\t/* istanbul ignore next: Node.js 12 throws directly */\n\t\t\treturn;\n\t\t}\n\n\t\tthis.flushHeaders();\n\n\t\tconst callWrite = () => this._request.write(chunk, encoding, callback);\n\t\tif (this._request) {\n\t\t\tcallWrite();\n\t\t} else {\n\t\t\tthis[kJobs].push(callWrite);\n\t\t}\n\t}\n\n\t_final(callback) {\n\t\tthis.flushHeaders();\n\n\t\tconst callEnd = () => {\n\t\t\t// For GET, HEAD and DELETE and CONNECT\n\t\t\tif (this._mustNotHaveABody || this.method === 'CONNECT') {\n\t\t\t\tcallback();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._request.end(callback);\n\t\t};\n\n\t\tif (this._request) {\n\t\t\tcallEnd();\n\t\t} else {\n\t\t\tthis[kJobs].push(callEnd);\n\t\t}\n\t}\n\n\tabort() {\n\t\tif (this.res && this.res.complete) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.aborted) {\n\t\t\tprocess.nextTick(() => this.emit('abort'));\n\t\t}\n\n\t\tthis.aborted = true;\n\n\t\tthis.destroy();\n\t}\n\n\tasync _destroy(error, callback) {\n\t\tif (this.res) {\n\t\t\tthis.res._dump();\n\t\t}\n\n\t\tif (this._request) {\n\t\t\tthis._request.destroy();\n\t\t} else {\n\t\t\tprocess.nextTick(() => {\n\t\t\t\tthis.emit('close');\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tawait this[kPendingAgentPromise];\n\t\t} catch (internalError) {\n\t\t\tif (this.aborted) {\n\t\t\t\terror = internalError;\n\t\t\t}\n\t\t}\n\n\t\tcallback(error);\n\t}\n\n\tasync flushHeaders() {\n\t\tif (this[kFlushedHeaders] || this.destroyed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis[kFlushedHeaders] = true;\n\n\t\tconst isConnectMethod = this.method === HTTP2_METHOD_CONNECT;\n\n\t\t// The real magic is here\n\t\tconst onStream = stream => {\n\t\t\tthis._request = stream;\n\n\t\t\tif (this.destroyed) {\n\t\t\t\tstream.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Forwards `timeout`, `continue`, `close` and `error` events to this instance.\n\t\t\tif (!isConnectMethod) {\n\t\t\t\t// TODO: Should we proxy `close` here?\n\t\t\t\tproxyEvents(stream, this, ['timeout', 'continue']);\n\t\t\t}\n\n\t\t\tstream.once('error', error => {\n\t\t\t\tthis.destroy(error);\n\t\t\t});\n\n\t\t\tstream.once('aborted', () => {\n\t\t\t\tconst {res} = this;\n\t\t\t\tif (res) {\n\t\t\t\t\tres.aborted = true;\n\t\t\t\t\tres.emit('aborted');\n\t\t\t\t\tres.destroy();\n\t\t\t\t} else {\n\t\t\t\t\tthis.destroy(new Error('The server aborted the HTTP/2 stream'));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst onResponse = (headers, flags, rawHeaders) => {\n\t\t\t\t// If we were to emit raw request stream, it would be as fast as the native approach.\n\t\t\t\t// Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it).\n\t\t\t\tconst response = new IncomingMessage$1(this.socket, stream.readableHighWaterMark);\n\t\t\t\tthis.res = response;\n\n\t\t\t\t// Undocumented, but it is used by `cacheable-request`\n\t\t\t\tresponse.url = `${this[kOrigin].origin}${this.path}`;\n\n\t\t\t\tresponse.req = this;\n\t\t\t\tresponse.statusCode = headers[HTTP2_HEADER_STATUS];\n\t\t\t\tresponse.headers = headers;\n\t\t\t\tresponse.rawHeaders = rawHeaders;\n\n\t\t\t\tresponse.once('end', () => {\n\t\t\t\t\tresponse.complete = true;\n\n\t\t\t\t\t// Has no effect, just be consistent with the Node.js behavior\n\t\t\t\t\tresponse.socket = null;\n\t\t\t\t\tresponse.connection = null;\n\t\t\t\t});\n\n\t\t\t\tif (isConnectMethod) {\n\t\t\t\t\tresponse.upgrade = true;\n\n\t\t\t\t\t// The HTTP1 API says the socket is detached here,\n\t\t\t\t\t// but we can't do that so we pass the original HTTP2 request.\n\t\t\t\t\tif (this.emit('connect', response, stream, Buffer.alloc(0))) {\n\t\t\t\t\t\tthis.emit('close');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No listeners attached, destroy the original request.\n\t\t\t\t\t\tstream.destroy();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Forwards data\n\t\t\t\t\tstream.on('data', chunk => {\n\t\t\t\t\t\tif (!response._dumped && !response.push(chunk)) {\n\t\t\t\t\t\t\tstream.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tstream.once('end', () => {\n\t\t\t\t\t\tif (!this.aborted) {\n\t\t\t\t\t\t\tresponse.push(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!this.emit('response', response)) {\n\t\t\t\t\t\t// No listeners attached, dump the response.\n\t\t\t\t\t\tresponse._dump();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// This event tells we are ready to listen for the data.\n\t\t\tstream.once('response', onResponse);\n\n\t\t\t// Emits `information` event\n\t\t\tstream.once('headers', headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]}));\n\n\t\t\tstream.once('trailers', (trailers, flags, rawTrailers) => {\n\t\t\t\tconst {res} = this;\n\n\t\t\t\t// https://github.com/nodejs/node/issues/41251\n\t\t\t\tif (res === null) {\n\t\t\t\t\tonResponse(trailers, flags, rawTrailers);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Assigns trailers to the response object.\n\t\t\t\tres.trailers = trailers;\n\t\t\t\tres.rawTrailers = rawTrailers;\n\t\t\t});\n\n\t\t\tstream.once('close', () => {\n\t\t\t\tconst {aborted, res} = this;\n\t\t\t\tif (res) {\n\t\t\t\t\tif (aborted) {\n\t\t\t\t\t\tres.aborted = true;\n\t\t\t\t\t\tres.emit('aborted');\n\t\t\t\t\t\tres.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst finish = () => {\n\t\t\t\t\t\tres.emit('close');\n\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t\tthis.emit('close');\n\t\t\t\t\t};\n\n\t\t\t\t\tif (res.readable) {\n\t\t\t\t\t\tres.once('end', finish);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfinish();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this.destroyed) {\n\t\t\t\t\tthis.destroy(new Error('The HTTP/2 stream has been early terminated'));\n\t\t\t\t\tthis.emit('close');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.destroy();\n\t\t\t\tthis.emit('close');\n\t\t\t});\n\n\t\t\tthis.socket = new Proxy(stream, proxySocketHandler);\n\n\t\t\tfor (const job of this[kJobs]) {\n\t\t\t\tjob();\n\t\t\t}\n\n\t\t\tthis[kJobs].length = 0;\n\n\t\t\tthis.emit('socket', this.socket);\n\t\t};\n\n\t\tif (!(HTTP2_HEADER_AUTHORITY in this[kHeaders]) && !isConnectMethod) {\n\t\t\tthis[kHeaders][HTTP2_HEADER_AUTHORITY] = this[kOrigin].host;\n\t\t}\n\n\t\t// Makes a HTTP2 request\n\t\tif (this[kSession]) {\n\t\t\ttry {\n\t\t\t\tonStream(this[kSession].request(this[kHeaders]));\n\t\t\t} catch (error) {\n\t\t\t\tthis.destroy(error);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.reusedSocket = true;\n\n\t\t\ttry {\n\t\t\t\tconst promise = this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]);\n\t\t\t\tthis[kPendingAgentPromise] = promise;\n\n\t\t\t\tonStream(await promise);\n\n\t\t\t\tthis[kPendingAgentPromise] = false;\n\t\t\t} catch (error) {\n\t\t\t\tthis[kPendingAgentPromise] = false;\n\n\t\t\t\tthis.destroy(error);\n\t\t\t}\n\t\t}\n\t}\n\n\tget connection() {\n\t\treturn this.socket;\n\t}\n\n\tset connection(value) {\n\t\tthis.socket = value;\n\t}\n\n\tgetHeaderNames() {\n\t\treturn Object.keys(this[kHeaders]);\n\t}\n\n\thasHeader(name) {\n\t\tif (typeof name !== 'string') {\n\t\t\tthrow new ERR_INVALID_ARG_TYPE('name', 'string', name);\n\t\t}\n\n\t\treturn Boolean(this[kHeaders][name.toLowerCase()]);\n\t}\n\n\tgetHeader(name) {\n\t\tif (typeof name !== 'string') {\n\t\t\tthrow new ERR_INVALID_ARG_TYPE('name', 'string', name);\n\t\t}\n\n\t\treturn this[kHeaders][name.toLowerCase()];\n\t}\n\n\tget headersSent() {\n\t\treturn this[kFlushedHeaders];\n\t}\n\n\tremoveHeader(name) {\n\t\tif (typeof name !== 'string') {\n\t\t\tthrow new ERR_INVALID_ARG_TYPE('name', 'string', name);\n\t\t}\n\n\t\tif (this.headersSent) {\n\t\t\tthrow new ERR_HTTP_HEADERS_SENT('remove');\n\t\t}\n\n\t\tdelete this[kHeaders][name.toLowerCase()];\n\t}\n\n\tsetHeader(name, value) {\n\t\tif (this.headersSent) {\n\t\t\tthrow new ERR_HTTP_HEADERS_SENT('set');\n\t\t}\n\n\t\tvalidateHeaderName$1(name);\n\t\tvalidateHeaderValue$1(name, value);\n\n\t\tconst lowercased = name.toLowerCase();\n\n\t\tif (lowercased === 'connection') {\n\t\t\tif (value.toLowerCase() === 'keep-alive') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow new Error(`Invalid 'connection' header: ${value}`);\n\t\t}\n\n\t\tif (lowercased === 'host' && this.method === 'CONNECT') {\n\t\t\tthis[kHeaders][HTTP2_HEADER_AUTHORITY] = value;\n\t\t} else {\n\t\t\tthis[kHeaders][lowercased] = value;\n\t\t}\n\t}\n\n\tsetNoDelay() {\n\t\t// HTTP2 sockets cannot be malformed, do nothing.\n\t}\n\n\tsetSocketKeepAlive() {\n\t\t// HTTP2 sockets cannot be malformed, do nothing.\n\t}\n\n\tsetTimeout(ms, callback) {\n\t\tconst applyTimeout = () => this._request.setTimeout(ms, callback);\n\n\t\tif (this._request) {\n\t\t\tapplyTimeout();\n\t\t} else {\n\t\t\tthis[kJobs].push(applyTimeout);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tget maxHeadersCount() {\n\t\tif (!this.destroyed && this._request) {\n\t\t\treturn this._request.session.localSettings.maxHeaderListSize;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tset maxHeadersCount(_value) {\n\t\t// Updating HTTP2 settings would affect all requests, do nothing.\n\t}\n}\n\nvar clientRequest = ClientRequest$1;\n\nvar auto$1 = {exports: {}};\n\nconst tls$2 = require$$0__default$4[\"default\"];\n\nvar resolveAlpn = (options = {}, connect = tls$2.connect) => new Promise((resolve, reject) => {\n\tlet timeout = false;\n\n\tlet socket;\n\n\tconst callback = async () => {\n\t\tawait socketPromise;\n\n\t\tsocket.off('timeout', onTimeout);\n\t\tsocket.off('error', reject);\n\n\t\tif (options.resolveSocket) {\n\t\t\tresolve({alpnProtocol: socket.alpnProtocol, socket, timeout});\n\n\t\t\tif (timeout) {\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tsocket.emit('timeout');\n\t\t\t}\n\t\t} else {\n\t\t\tsocket.destroy();\n\t\t\tresolve({alpnProtocol: socket.alpnProtocol, timeout});\n\t\t}\n\t};\n\n\tconst onTimeout = async () => {\n\t\ttimeout = true;\n\t\tcallback();\n\t};\n\n\tconst socketPromise = (async () => {\n\t\ttry {\n\t\t\tsocket = await connect(options, callback);\n\n\t\t\tsocket.on('error', reject);\n\t\t\tsocket.once('timeout', onTimeout);\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t})();\n});\n\nconst {isIP} = require$$0__default$5[\"default\"];\nconst assert = require$$1__default$2[\"default\"];\n\nconst getHost = host => {\n\tif (host[0] === '[') {\n\t\tconst idx = host.indexOf(']');\n\n\t\tassert(idx !== -1);\n\t\treturn host.slice(1, idx);\n\t}\n\n\tconst idx = host.indexOf(':');\n\tif (idx === -1) {\n\t\treturn host;\n\t}\n\n\treturn host.slice(0, idx);\n};\n\nvar calculateServerName$1 = host => {\n\tconst servername = getHost(host);\n\n\tif (isIP(servername)) {\n\t\treturn '';\n\t}\n\n\treturn servername;\n};\n\n// See https://github.com/facebook/jest/issues/2549\n// eslint-disable-next-line node/prefer-global/url\nconst {URL: URL$2, urlToHttpOptions} = require$$0__default$3[\"default\"];\nconst http$2 = require$$1__default$3[\"default\"];\nconst https$2 = require$$2__default[\"default\"];\nconst resolveALPN = resolveAlpn;\nconst QuickLRU = quickLru;\nconst {Agent: Agent$2, globalAgent: globalAgent$3} = agent;\nconst Http2ClientRequest = clientRequest;\nconst calculateServerName = calculateServerName$1;\nconst delayAsyncDestroy = delayAsyncDestroy$2;\n\nconst cache = new QuickLRU({maxSize: 100});\nconst queue = new Map();\n\nconst installSocket = (agent, socket, options) => {\n\tsocket._httpMessage = {shouldKeepAlive: true};\n\n\tconst onFree = () => {\n\t\tagent.emit('free', socket, options);\n\t};\n\n\tsocket.on('free', onFree);\n\n\tconst onClose = () => {\n\t\tagent.removeSocket(socket, options);\n\t};\n\n\tsocket.on('close', onClose);\n\n\tconst onTimeout = () => {\n\t\tconst {freeSockets} = agent;\n\n\t\tfor (const sockets of Object.values(freeSockets)) {\n\t\t\tif (sockets.includes(socket)) {\n\t\t\t\tsocket.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\n\tsocket.on('timeout', onTimeout);\n\n\tconst onRemove = () => {\n\t\tagent.removeSocket(socket, options);\n\t\tsocket.off('close', onClose);\n\t\tsocket.off('free', onFree);\n\t\tsocket.off('timeout', onTimeout);\n\t\tsocket.off('agentRemove', onRemove);\n\t};\n\n\tsocket.on('agentRemove', onRemove);\n\n\tagent.emit('free', socket, options);\n};\n\nconst createResolveProtocol = (cache, queue = new Map(), connect = undefined) => {\n\treturn async options => {\n\t\tconst name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;\n\n\t\tif (!cache.has(name)) {\n\t\t\tif (queue.has(name)) {\n\t\t\t\tconst result = await queue.get(name);\n\t\t\t\treturn {alpnProtocol: result.alpnProtocol};\n\t\t\t}\n\n\t\t\tconst {path} = options;\n\t\t\toptions.path = options.socketPath;\n\n\t\t\tconst resultPromise = resolveALPN(options, connect);\n\t\t\tqueue.set(name, resultPromise);\n\n\t\t\ttry {\n\t\t\t\tconst result = await resultPromise;\n\n\t\t\t\tcache.set(name, result.alpnProtocol);\n\t\t\t\tqueue.delete(name);\n\n\t\t\t\toptions.path = path;\n\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tqueue.delete(name);\n\n\t\t\t\toptions.path = path;\n\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn {alpnProtocol: cache.get(name)};\n\t};\n};\n\nconst defaultResolveProtocol = createResolveProtocol(cache, queue);\n\nauto$1.exports = async (input, options, callback) => {\n\tif (typeof input === 'string') {\n\t\tinput = urlToHttpOptions(new URL$2(input));\n\t} else if (input instanceof URL$2) {\n\t\tinput = urlToHttpOptions(input);\n\t} else {\n\t\tinput = {...input};\n\t}\n\n\tif (typeof options === 'function' || options === undefined) {\n\t\t// (options, callback)\n\t\tcallback = options;\n\t\toptions = input;\n\t} else {\n\t\t// (input, options, callback)\n\t\toptions = Object.assign(input, options);\n\t}\n\n\toptions.ALPNProtocols = options.ALPNProtocols || ['h2', 'http/1.1'];\n\n\tif (!Array.isArray(options.ALPNProtocols) || options.ALPNProtocols.length === 0) {\n\t\tthrow new Error('The `ALPNProtocols` option must be an Array with at least one entry');\n\t}\n\n\toptions.protocol = options.protocol || 'https:';\n\tconst isHttps = options.protocol === 'https:';\n\n\toptions.host = options.hostname || options.host || 'localhost';\n\toptions.session = options.tlsSession;\n\toptions.servername = options.servername || calculateServerName((options.headers && options.headers.host) || options.host);\n\toptions.port = options.port || (isHttps ? 443 : 80);\n\toptions._defaultAgent = isHttps ? https$2.globalAgent : http$2.globalAgent;\n\n\tconst resolveProtocol = options.resolveProtocol || defaultResolveProtocol;\n\n\t// Note: We don't support `h2session` here\n\n\tlet {agent} = options;\n\tif (agent !== undefined && agent !== false && agent.constructor.name !== 'Object') {\n\t\tthrow new Error('The `options.agent` can be only an object `http`, `https` or `http2` properties');\n\t}\n\n\tif (isHttps) {\n\t\toptions.resolveSocket = true;\n\n\t\tlet {socket, alpnProtocol, timeout} = await resolveProtocol(options);\n\n\t\tif (timeout) {\n\t\t\tif (socket) {\n\t\t\t\tsocket.destroy();\n\t\t\t}\n\n\t\t\tconst error = new Error(`Timed out resolving ALPN: ${options.timeout} ms`);\n\t\t\terror.code = 'ETIMEDOUT';\n\t\t\terror.ms = options.timeout;\n\n\t\t\tthrow error;\n\t\t}\n\n\t\t// We can't accept custom `createConnection` because the API is different for HTTP/2\n\t\tif (socket && options.createConnection) {\n\t\t\tsocket.destroy();\n\t\t\tsocket = undefined;\n\t\t}\n\n\t\tdelete options.resolveSocket;\n\n\t\tconst isHttp2 = alpnProtocol === 'h2';\n\n\t\tif (agent) {\n\t\t\tagent = isHttp2 ? agent.http2 : agent.https;\n\t\t\toptions.agent = agent;\n\t\t}\n\n\t\tif (agent === undefined) {\n\t\t\tagent = isHttp2 ? globalAgent$3 : https$2.globalAgent;\n\t\t}\n\n\t\tif (socket) {\n\t\t\tif (agent === false) {\n\t\t\t\tsocket.destroy();\n\t\t\t} else {\n\t\t\t\tconst defaultCreateConnection = (isHttp2 ? Agent$2 : https$2.Agent).prototype.createConnection;\n\n\t\t\t\tif (agent.createConnection === defaultCreateConnection) {\n\t\t\t\t\tif (isHttp2) {\n\t\t\t\t\t\toptions._reuseSocket = socket;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinstallSocket(agent, socket, options);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsocket.destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isHttp2) {\n\t\t\treturn delayAsyncDestroy(new Http2ClientRequest(options, callback));\n\t\t}\n\t} else if (agent) {\n\t\toptions.agent = agent.http;\n\t}\n\n\t// If we're sending HTTP/1.1, handle any explicitly set H2 headers in the options:\n\tif (options.headers) {\n\t\toptions.headers = {...options.headers};\n\n\t\t// :authority is equivalent to the HTTP/1.1 host header\n\t\tif (options.headers[':authority']) {\n\t\t\tif (!options.headers.host) {\n\t\t\t\toptions.headers.host = options.headers[':authority'];\n\t\t\t}\n\n\t\t\tdelete options.headers[':authority'];\n\t\t}\n\n\t\t// Remove other HTTP/2 headers as they have their counterparts in the options\n\t\tdelete options.headers[':method'];\n\t\tdelete options.headers[':scheme'];\n\t\tdelete options.headers[':path'];\n\t}\n\n\treturn delayAsyncDestroy(http$2.request(options, callback));\n};\n\nauto$1.exports.protocolCache = cache;\nauto$1.exports.resolveProtocol = defaultResolveProtocol;\nauto$1.exports.createResolveProtocol = createResolveProtocol;\n\nconst stream = require$$0__default[\"default\"];\nconst tls$1 = require$$0__default$4[\"default\"];\n\n// Really awesome hack.\nconst JSStreamSocket$2 = (new tls$1.TLSSocket(new stream.PassThrough()))._handle._parentWrap.constructor;\n\nvar jsStreamSocket = JSStreamSocket$2;\n\nclass UnexpectedStatusCodeError$2 extends Error {\n\tconstructor(statusCode, statusMessage = '') {\n\t\tsuper(`The proxy server rejected the request with status code ${statusCode} (${statusMessage || 'empty status message'})`);\n\t\tthis.statusCode = statusCode;\n\t\tthis.statusMessage = statusMessage;\n\t}\n}\n\nvar unexpectedStatusCodeError = UnexpectedStatusCodeError$2;\n\nconst checkType$1 = (name, value, types) => {\n\tconst valid = types.some(type => {\n\t\tconst typeofType = typeof type;\n\t\tif (typeofType === 'string') {\n\t\t\treturn typeof value === type;\n\t\t}\n\n\t\treturn value instanceof type;\n\t});\n\n\tif (!valid) {\n\t\tconst names = types.map(type => typeof type === 'string' ? type : type.name);\n\n\t\tthrow new TypeError(`Expected '${name}' to be a type of ${names.join(' or ')}, got ${typeof value}`);\n\t}\n};\n\nvar checkType_1 = checkType$1;\n\n// See https://github.com/facebook/jest/issues/2549\n// eslint-disable-next-line node/prefer-global/url\nconst {URL: URL$1} = require$$0__default$3[\"default\"];\nconst checkType = checkType_1;\n\nvar initialize$2 = (self, proxyOptions) => {\n\tcheckType('proxyOptions', proxyOptions, ['object']);\n\tcheckType('proxyOptions.headers', proxyOptions.headers, ['object', 'undefined']);\n\tcheckType('proxyOptions.raw', proxyOptions.raw, ['boolean', 'undefined']);\n\tcheckType('proxyOptions.url', proxyOptions.url, [URL$1, 'string']);\n\n\tconst url = new URL$1(proxyOptions.url);\n\n\tself.proxyOptions = {\n\t\traw: true,\n\t\t...proxyOptions,\n\t\theaders: {...proxyOptions.headers},\n\t\turl\n\t};\n};\n\nvar getAuthHeaders = self => {\n\tconst {username, password} = self.proxyOptions.url;\n\n\tif (username || password) {\n\t\tconst data = `${username}:${password}`;\n\t\tconst authorization = `Basic ${Buffer.from(data).toString('base64')}`;\n\n\t\treturn {\n\t\t\t'proxy-authorization': authorization,\n\t\t\tauthorization\n\t\t};\n\t}\n\n\treturn {};\n};\n\nconst tls = require$$0__default$4[\"default\"];\nconst http$1 = require$$1__default$3[\"default\"];\nconst https$1 = require$$2__default[\"default\"];\nconst JSStreamSocket$1 = jsStreamSocket;\nconst {globalAgent: globalAgent$2} = agent;\nconst UnexpectedStatusCodeError$1 = unexpectedStatusCodeError;\nconst initialize$1 = initialize$2;\nconst getAuthorizationHeaders$2 = getAuthHeaders;\n\nconst createConnection = (self, options, callback) => {\n\t(async () => {\n\t\ttry {\n\t\t\tconst {proxyOptions} = self;\n\t\t\tconst {url, headers, raw} = proxyOptions;\n\n\t\t\tconst stream = await globalAgent$2.request(url, proxyOptions, {\n\t\t\t\t...getAuthorizationHeaders$2(self),\n\t\t\t\t...headers,\n\t\t\t\t':method': 'CONNECT',\n\t\t\t\t':authority': `${options.host}:${options.port}`\n\t\t\t});\n\n\t\t\tstream.once('error', callback);\n\t\t\tstream.once('response', headers => {\n\t\t\t\tconst statusCode = headers[':status'];\n\n\t\t\t\tif (statusCode !== 200) {\n\t\t\t\t\tcallback(new UnexpectedStatusCodeError$1(statusCode, ''));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst encrypted = self instanceof https$1.Agent;\n\n\t\t\t\tif (raw && encrypted) {\n\t\t\t\t\toptions.socket = stream;\n\t\t\t\t\tconst secureStream = tls.connect(options);\n\n\t\t\t\t\tsecureStream.once('close', () => {\n\t\t\t\t\t\tstream.destroy();\n\t\t\t\t\t});\n\n\t\t\t\t\tcallback(null, secureStream);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst socket = new JSStreamSocket$1(stream);\n\t\t\t\tsocket.encrypted = false;\n\t\t\t\tsocket._handle.getpeername = out => {\n\t\t\t\t\tout.family = undefined;\n\t\t\t\t\tout.address = undefined;\n\t\t\t\t\tout.port = undefined;\n\t\t\t\t};\n\n\t\t\t\tcallback(null, socket);\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tcallback(error);\n\t\t}\n\t})();\n};\n\nclass HttpOverHttp2$1 extends http$1.Agent {\n\tconstructor(options) {\n\t\tsuper(options);\n\n\t\tinitialize$1(this, options.proxyOptions);\n\t}\n\n\tcreateConnection(options, callback) {\n\t\tcreateConnection(this, options, callback);\n\t}\n}\n\nclass HttpsOverHttp2$1 extends https$1.Agent {\n\tconstructor(options) {\n\t\tsuper(options);\n\n\t\tinitialize$1(this, options.proxyOptions);\n\t}\n\n\tcreateConnection(options, callback) {\n\t\tcreateConnection(this, options, callback);\n\t}\n}\n\nvar h1OverH2 = {\n\tHttpOverHttp2: HttpOverHttp2$1,\n\tHttpsOverHttp2: HttpsOverHttp2$1\n};\n\nconst {Agent: Agent$1} = agent;\nconst JSStreamSocket = jsStreamSocket;\nconst UnexpectedStatusCodeError = unexpectedStatusCodeError;\nconst initialize = initialize$2;\n\nclass Http2OverHttpX$2 extends Agent$1 {\n\tconstructor(options) {\n\t\tsuper(options);\n\n\t\tinitialize(this, options.proxyOptions);\n\t}\n\n\tasync createConnection(origin, options) {\n\t\tconst authority = `${origin.hostname}:${origin.port || 443}`;\n\n\t\tconst [stream, statusCode, statusMessage] = await this._getProxyStream(authority);\n\t\tif (statusCode !== 200) {\n\t\t\tthrow new UnexpectedStatusCodeError(statusCode, statusMessage);\n\t\t}\n\n\t\tif (this.proxyOptions.raw) {\n\t\t\toptions.socket = stream;\n\t\t} else {\n\t\t\tconst socket = new JSStreamSocket(stream);\n\t\t\tsocket.encrypted = false;\n\t\t\tsocket._handle.getpeername = out => {\n\t\t\t\tout.family = undefined;\n\t\t\t\tout.address = undefined;\n\t\t\t\tout.port = undefined;\n\t\t\t};\n\n\t\t\treturn socket;\n\t\t}\n\n\t\treturn super.createConnection(origin, options);\n\t}\n}\n\nvar h2OverHx = Http2OverHttpX$2;\n\nconst {globalAgent: globalAgent$1} = agent;\nconst Http2OverHttpX$1 = h2OverHx;\nconst getAuthorizationHeaders$1 = getAuthHeaders;\n\nconst getStatusCode = stream => new Promise((resolve, reject) => {\n\tstream.once('error', reject);\n\tstream.once('response', headers => {\n\t\tstream.off('error', reject);\n\t\tresolve(headers[':status']);\n\t});\n});\n\nclass Http2OverHttp2$1 extends Http2OverHttpX$1 {\n\tasync _getProxyStream(authority) {\n\t\tconst {proxyOptions} = this;\n\n\t\tconst headers = {\n\t\t\t...getAuthorizationHeaders$1(this),\n\t\t\t...proxyOptions.headers,\n\t\t\t':method': 'CONNECT',\n\t\t\t':authority': authority\n\t\t};\n\n\t\tconst stream = await globalAgent$1.request(proxyOptions.url, proxyOptions, headers);\n\t\tconst statusCode = await getStatusCode(stream);\n\n\t\treturn [stream, statusCode, ''];\n\t}\n}\n\nvar h2OverH2 = Http2OverHttp2$1;\n\nconst http = require$$1__default$3[\"default\"];\nconst https = require$$2__default[\"default\"];\nconst Http2OverHttpX = h2OverHx;\nconst getAuthorizationHeaders = getAuthHeaders;\n\nconst getStream = request => new Promise((resolve, reject) => {\n\tconst onConnect = (response, socket, head) => {\n\t\tsocket.unshift(head);\n\n\t\trequest.off('error', reject);\n\t\tresolve([socket, response.statusCode, response.statusMessage]);\n\t};\n\n\trequest.once('error', reject);\n\trequest.once('connect', onConnect);\n});\n\nclass Http2OverHttp$1 extends Http2OverHttpX {\n\tasync _getProxyStream(authority) {\n\t\tconst {proxyOptions} = this;\n\t\tconst {url, headers} = this.proxyOptions;\n\n\t\tconst network = url.protocol === 'https:' ? https : http;\n\n\t\t// `new URL('https://localhost/httpbin.org:443')` results in\n\t\t// a `/httpbin.org:443` path, which has an invalid leading slash.\n\t\tconst request = network.request({\n\t\t\t...proxyOptions,\n\t\t\thostname: url.hostname,\n\t\t\tport: url.port,\n\t\t\tpath: authority,\n\t\t\theaders: {\n\t\t\t\t...getAuthorizationHeaders(this),\n\t\t\t\t...headers,\n\t\t\t\thost: authority\n\t\t\t},\n\t\t\tmethod: 'CONNECT'\n\t\t}).end();\n\n\t\treturn getStream(request);\n\t}\n}\n\nvar h2OverH1 = {\n\tHttp2OverHttp: Http2OverHttp$1,\n\tHttp2OverHttps: Http2OverHttp$1\n};\n\nconst http2 = require$$3__default[\"default\"];\nconst {\n\tAgent,\n\tglobalAgent\n} = agent;\nconst ClientRequest = clientRequest;\nconst IncomingMessage = incomingMessage;\nconst auto = auto$1.exports;\nconst {\n\tHttpOverHttp2,\n\tHttpsOverHttp2\n} = h1OverH2;\nconst Http2OverHttp2 = h2OverH2;\nconst {\n\tHttp2OverHttp,\n\tHttp2OverHttps\n} = h2OverH1;\nconst validateHeaderName = validateHeaderName$2;\nconst validateHeaderValue = validateHeaderValue$2;\n\nconst request = (url, options, callback) => new ClientRequest(url, options, callback);\n\nconst get = (url, options, callback) => {\n\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\tconst req = new ClientRequest(url, options, callback);\n\treq.end();\n\n\treturn req;\n};\n\nvar source = {\n\t...http2,\n\tClientRequest,\n\tIncomingMessage,\n\tAgent,\n\tglobalAgent,\n\trequest,\n\tget,\n\tauto,\n\tproxies: {\n\t\tHttpOverHttp2,\n\t\tHttpsOverHttp2,\n\t\tHttp2OverHttp2,\n\t\tHttp2OverHttp,\n\t\tHttp2OverHttps\n\t},\n\tvalidateHeaderName,\n\tvalidateHeaderValue\n};\n\nfunction parseLinkHeader(link) {\n    const parsed = [];\n    const items = link.split(',');\n    for (const item of items) {\n        // https://tools.ietf.org/html/rfc5988#section-5\n        const [rawUriReference, ...rawLinkParameters] = item.split(';');\n        const trimmedUriReference = rawUriReference.trim();\n        // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n        if (trimmedUriReference[0] !== '<' || trimmedUriReference[trimmedUriReference.length - 1] !== '>') {\n            throw new Error(`Invalid format of the Link header reference: ${trimmedUriReference}`);\n        }\n        const reference = trimmedUriReference.slice(1, -1);\n        const parameters = {};\n        if (rawLinkParameters.length === 0) {\n            throw new Error(`Unexpected end of Link header parameters: ${rawLinkParameters.join(';')}`);\n        }\n        for (const rawParameter of rawLinkParameters) {\n            const trimmedRawParameter = rawParameter.trim();\n            const center = trimmedRawParameter.indexOf('=');\n            if (center === -1) {\n                throw new Error(`Failed to parse Link header: ${link}`);\n            }\n            const name = trimmedRawParameter.slice(0, center).trim();\n            const value = trimmedRawParameter.slice(center + 1).trim();\n            parameters[name] = value;\n        }\n        parsed.push({\n            reference,\n            parameters,\n        });\n    }\n    return parsed;\n}\n\nconst [major, minor] = process__default[\"default\"].versions.node.split('.').map(Number);\nfunction validateSearchParameters(searchParameters) {\n    // eslint-disable-next-line guard-for-in\n    for (const key in searchParameters) {\n        const value = searchParameters[key];\n        assert$1.any([is.string, is.number, is.boolean, is.null_, is.undefined], value);\n    }\n}\nconst globalCache = new Map();\nlet globalDnsCache;\nconst getGlobalDnsCache = () => {\n    if (globalDnsCache) {\n        return globalDnsCache;\n    }\n    globalDnsCache = new CacheableLookup();\n    return globalDnsCache;\n};\nconst defaultInternals = {\n    request: undefined,\n    agent: {\n        http: undefined,\n        https: undefined,\n        http2: undefined,\n    },\n    h2session: undefined,\n    decompress: true,\n    timeout: {\n        connect: undefined,\n        lookup: undefined,\n        read: undefined,\n        request: undefined,\n        response: undefined,\n        secureConnect: undefined,\n        send: undefined,\n        socket: undefined,\n    },\n    prefixUrl: '',\n    body: undefined,\n    form: undefined,\n    json: undefined,\n    cookieJar: undefined,\n    ignoreInvalidCookies: false,\n    searchParams: undefined,\n    dnsLookup: undefined,\n    dnsCache: undefined,\n    context: {},\n    hooks: {\n        init: [],\n        beforeRequest: [],\n        beforeError: [],\n        beforeRedirect: [],\n        beforeRetry: [],\n        afterResponse: [],\n    },\n    followRedirect: true,\n    maxRedirects: 10,\n    cache: undefined,\n    throwHttpErrors: true,\n    username: '',\n    password: '',\n    http2: false,\n    allowGetBody: false,\n    headers: {\n        'user-agent': 'got (https://github.com/sindresorhus/got)',\n    },\n    methodRewriting: false,\n    dnsLookupIpVersion: undefined,\n    parseJson: JSON.parse,\n    stringifyJson: JSON.stringify,\n    retry: {\n        limit: 2,\n        methods: [\n            'GET',\n            'PUT',\n            'HEAD',\n            'DELETE',\n            'OPTIONS',\n            'TRACE',\n        ],\n        statusCodes: [\n            408,\n            413,\n            429,\n            500,\n            502,\n            503,\n            504,\n            521,\n            522,\n            524,\n        ],\n        errorCodes: [\n            'ETIMEDOUT',\n            'ECONNRESET',\n            'EADDRINUSE',\n            'ECONNREFUSED',\n            'EPIPE',\n            'ENOTFOUND',\n            'ENETUNREACH',\n            'EAI_AGAIN',\n        ],\n        maxRetryAfter: undefined,\n        calculateDelay: ({ computedValue }) => computedValue,\n        backoffLimit: Number.POSITIVE_INFINITY,\n        noise: 100,\n    },\n    localAddress: undefined,\n    method: 'GET',\n    createConnection: undefined,\n    cacheOptions: {\n        shared: undefined,\n        cacheHeuristic: undefined,\n        immutableMinTimeToLive: undefined,\n        ignoreCargoCult: undefined,\n    },\n    https: {\n        alpnProtocols: undefined,\n        rejectUnauthorized: undefined,\n        checkServerIdentity: undefined,\n        certificateAuthority: undefined,\n        key: undefined,\n        certificate: undefined,\n        passphrase: undefined,\n        pfx: undefined,\n        ciphers: undefined,\n        honorCipherOrder: undefined,\n        minVersion: undefined,\n        maxVersion: undefined,\n        signatureAlgorithms: undefined,\n        tlsSessionLifetime: undefined,\n        dhparam: undefined,\n        ecdhCurve: undefined,\n        certificateRevocationLists: undefined,\n    },\n    encoding: undefined,\n    resolveBodyOnly: false,\n    isStream: false,\n    responseType: 'text',\n    url: undefined,\n    pagination: {\n        transform(response) {\n            if (response.request.options.responseType === 'json') {\n                return response.body;\n            }\n            return JSON.parse(response.body);\n        },\n        paginate({ response }) {\n            const rawLinkHeader = response.headers.link;\n            if (typeof rawLinkHeader !== 'string' || rawLinkHeader.trim() === '') {\n                return false;\n            }\n            const parsed = parseLinkHeader(rawLinkHeader);\n            const next = parsed.find(entry => entry.parameters.rel === 'next' || entry.parameters.rel === '\"next\"');\n            if (next) {\n                return {\n                    url: new urlLib.URL(next.reference, response.url),\n                };\n            }\n            return false;\n        },\n        filter: () => true,\n        shouldContinue: () => true,\n        countLimit: Number.POSITIVE_INFINITY,\n        backoff: 0,\n        requestLimit: 10000,\n        stackAllItems: false,\n    },\n    setHost: true,\n    maxHeaderSize: undefined,\n    signal: undefined,\n    enableUnixSockets: true,\n};\nconst cloneInternals = (internals) => {\n    const { hooks, retry } = internals;\n    const result = {\n        ...internals,\n        context: { ...internals.context },\n        cacheOptions: { ...internals.cacheOptions },\n        https: { ...internals.https },\n        agent: { ...internals.agent },\n        headers: { ...internals.headers },\n        retry: {\n            ...retry,\n            errorCodes: [...retry.errorCodes],\n            methods: [...retry.methods],\n            statusCodes: [...retry.statusCodes],\n        },\n        timeout: { ...internals.timeout },\n        hooks: {\n            init: [...hooks.init],\n            beforeRequest: [...hooks.beforeRequest],\n            beforeError: [...hooks.beforeError],\n            beforeRedirect: [...hooks.beforeRedirect],\n            beforeRetry: [...hooks.beforeRetry],\n            afterResponse: [...hooks.afterResponse],\n        },\n        searchParams: internals.searchParams ? new urlLib.URLSearchParams(internals.searchParams) : undefined,\n        pagination: { ...internals.pagination },\n    };\n    if (result.url !== undefined) {\n        result.prefixUrl = '';\n    }\n    return result;\n};\nconst cloneRaw = (raw) => {\n    const { hooks, retry } = raw;\n    const result = { ...raw };\n    if (is.object(raw.context)) {\n        result.context = { ...raw.context };\n    }\n    if (is.object(raw.cacheOptions)) {\n        result.cacheOptions = { ...raw.cacheOptions };\n    }\n    if (is.object(raw.https)) {\n        result.https = { ...raw.https };\n    }\n    if (is.object(raw.cacheOptions)) {\n        result.cacheOptions = { ...result.cacheOptions };\n    }\n    if (is.object(raw.agent)) {\n        result.agent = { ...raw.agent };\n    }\n    if (is.object(raw.headers)) {\n        result.headers = { ...raw.headers };\n    }\n    if (is.object(retry)) {\n        result.retry = { ...retry };\n        if (is.array(retry.errorCodes)) {\n            result.retry.errorCodes = [...retry.errorCodes];\n        }\n        if (is.array(retry.methods)) {\n            result.retry.methods = [...retry.methods];\n        }\n        if (is.array(retry.statusCodes)) {\n            result.retry.statusCodes = [...retry.statusCodes];\n        }\n    }\n    if (is.object(raw.timeout)) {\n        result.timeout = { ...raw.timeout };\n    }\n    if (is.object(hooks)) {\n        result.hooks = {\n            ...hooks,\n        };\n        if (is.array(hooks.init)) {\n            result.hooks.init = [...hooks.init];\n        }\n        if (is.array(hooks.beforeRequest)) {\n            result.hooks.beforeRequest = [...hooks.beforeRequest];\n        }\n        if (is.array(hooks.beforeError)) {\n            result.hooks.beforeError = [...hooks.beforeError];\n        }\n        if (is.array(hooks.beforeRedirect)) {\n            result.hooks.beforeRedirect = [...hooks.beforeRedirect];\n        }\n        if (is.array(hooks.beforeRetry)) {\n            result.hooks.beforeRetry = [...hooks.beforeRetry];\n        }\n        if (is.array(hooks.afterResponse)) {\n            result.hooks.afterResponse = [...hooks.afterResponse];\n        }\n    }\n    // TODO: raw.searchParams\n    if (is.object(raw.pagination)) {\n        result.pagination = { ...raw.pagination };\n    }\n    return result;\n};\nconst getHttp2TimeoutOption = (internals) => {\n    const delays = [internals.timeout.socket, internals.timeout.connect, internals.timeout.lookup, internals.timeout.request, internals.timeout.secureConnect].filter(delay => typeof delay === 'number');\n    if (delays.length > 0) {\n        return Math.min(...delays);\n    }\n    return undefined;\n};\nconst init = (options, withOptions, self) => {\n    const initHooks = options.hooks?.init;\n    if (initHooks) {\n        for (const hook of initHooks) {\n            hook(withOptions, self);\n        }\n    }\n};\nclass Options {\n    constructor(input, options, defaults) {\n        Object.defineProperty(this, \"_unixOptions\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_internals\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_merging\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_init\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        assert$1.any([is.string, is.urlInstance, is.object, is.undefined], input);\n        assert$1.any([is.object, is.undefined], options);\n        assert$1.any([is.object, is.undefined], defaults);\n        if (input instanceof Options || options instanceof Options) {\n            throw new TypeError('The defaults must be passed as the third argument');\n        }\n        this._internals = cloneInternals(defaults?._internals ?? defaults ?? defaultInternals);\n        this._init = [...(defaults?._init ?? [])];\n        this._merging = false;\n        this._unixOptions = undefined;\n        // This rule allows `finally` to be considered more important.\n        // Meaning no matter the error thrown in the `try` block,\n        // if `finally` throws then the `finally` error will be thrown.\n        //\n        // Yes, we want this. If we set `url` first, then the `url.searchParams`\n        // would get merged. Instead we set the `searchParams` first, then\n        // `url.searchParams` is overwritten as expected.\n        //\n        /* eslint-disable no-unsafe-finally */\n        try {\n            if (is.plainObject(input)) {\n                try {\n                    this.merge(input);\n                    this.merge(options);\n                }\n                finally {\n                    this.url = input.url;\n                }\n            }\n            else {\n                try {\n                    this.merge(options);\n                }\n                finally {\n                    if (options?.url !== undefined) {\n                        if (input === undefined) {\n                            this.url = options.url;\n                        }\n                        else {\n                            throw new TypeError('The `url` option is mutually exclusive with the `input` argument');\n                        }\n                    }\n                    else if (input !== undefined) {\n                        this.url = input;\n                    }\n                }\n            }\n        }\n        catch (error) {\n            error.options = this;\n            throw error;\n        }\n        /* eslint-enable no-unsafe-finally */\n    }\n    merge(options) {\n        if (!options) {\n            return;\n        }\n        if (options instanceof Options) {\n            for (const init of options._init) {\n                this.merge(init);\n            }\n            return;\n        }\n        options = cloneRaw(options);\n        init(this, options, this);\n        init(options, options, this);\n        this._merging = true;\n        // Always merge `isStream` first\n        if ('isStream' in options) {\n            this.isStream = options.isStream;\n        }\n        try {\n            let push = false;\n            for (const key in options) {\n                // `got.extend()` options\n                if (key === 'mutableDefaults' || key === 'handlers') {\n                    continue;\n                }\n                // Never merge `url`\n                if (key === 'url') {\n                    continue;\n                }\n                if (!(key in this)) {\n                    throw new Error(`Unexpected option: ${key}`);\n                }\n                // @ts-expect-error Type 'unknown' is not assignable to type 'never'.\n                this[key] = options[key];\n                push = true;\n            }\n            if (push) {\n                this._init.push(options);\n            }\n        }\n        finally {\n            this._merging = false;\n        }\n    }\n    /**\n    Custom request function.\n    The main purpose of this is to [support HTTP2 using a wrapper](https://github.com/szmarczak/http2-wrapper).\n\n    @default http.request | https.request\n    */\n    get request() {\n        return this._internals.request;\n    }\n    set request(value) {\n        assert$1.any([is.function_, is.undefined], value);\n        this._internals.request = value;\n    }\n    /**\n    An object representing `http`, `https` and `http2` keys for [`http.Agent`](https://nodejs.org/api/http.html#http_class_http_agent), [`https.Agent`](https://nodejs.org/api/https.html#https_class_https_agent) and [`http2wrapper.Agent`](https://github.com/szmarczak/http2-wrapper#new-http2agentoptions) instance.\n    This is necessary because a request to one protocol might redirect to another.\n    In such a scenario, Got will switch over to the right protocol agent for you.\n\n    If a key is not present, it will default to a global agent.\n\n    @example\n    ```\n    import got from 'got';\n    import HttpAgent from 'agentkeepalive';\n\n    const {HttpsAgent} = HttpAgent;\n\n    await got('https://sindresorhus.com', {\n        agent: {\n            http: new HttpAgent(),\n            https: new HttpsAgent()\n        }\n    });\n    ```\n    */\n    get agent() {\n        return this._internals.agent;\n    }\n    set agent(value) {\n        assert$1.plainObject(value);\n        // eslint-disable-next-line guard-for-in\n        for (const key in value) {\n            if (!(key in this._internals.agent)) {\n                throw new TypeError(`Unexpected agent option: ${key}`);\n            }\n            // @ts-expect-error - No idea why `value[key]` doesn't work here.\n            assert$1.any([is.object, is.undefined], value[key]);\n        }\n        if (this._merging) {\n            Object.assign(this._internals.agent, value);\n        }\n        else {\n            this._internals.agent = { ...value };\n        }\n    }\n    get h2session() {\n        return this._internals.h2session;\n    }\n    set h2session(value) {\n        this._internals.h2session = value;\n    }\n    /**\n    Decompress the response automatically.\n\n    This will set the `accept-encoding` header to `gzip, deflate, br` unless you set it yourself.\n\n    If this is disabled, a compressed response is returned as a `Buffer`.\n    This may be useful if you want to handle decompression yourself or stream the raw compressed data.\n\n    @default true\n    */\n    get decompress() {\n        return this._internals.decompress;\n    }\n    set decompress(value) {\n        assert$1.boolean(value);\n        this._internals.decompress = value;\n    }\n    /**\n    Milliseconds to wait for the server to end the response before aborting the request with `got.TimeoutError` error (a.k.a. `request` property).\n    By default, there's no timeout.\n\n    This also accepts an `object` with the following fields to constrain the duration of each phase of the request lifecycle:\n\n    - `lookup` starts when a socket is assigned and ends when the hostname has been resolved.\n        Does not apply when using a Unix domain socket.\n    - `connect` starts when `lookup` completes (or when the socket is assigned if lookup does not apply to the request) and ends when the socket is connected.\n    - `secureConnect` starts when `connect` completes and ends when the handshaking process completes (HTTPS only).\n    - `socket` starts when the socket is connected. See [request.setTimeout](https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback).\n    - `response` starts when the request has been written to the socket and ends when the response headers are received.\n    - `send` starts when the socket is connected and ends with the request has been written to the socket.\n    - `request` starts when the request is initiated and ends when the response's end event fires.\n    */\n    get timeout() {\n        // We always return `Delays` here.\n        // It has to be `Delays | number`, otherwise TypeScript will error because the getter and the setter have incompatible types.\n        return this._internals.timeout;\n    }\n    set timeout(value) {\n        assert$1.plainObject(value);\n        // eslint-disable-next-line guard-for-in\n        for (const key in value) {\n            if (!(key in this._internals.timeout)) {\n                throw new Error(`Unexpected timeout option: ${key}`);\n            }\n            // @ts-expect-error - No idea why `value[key]` doesn't work here.\n            assert$1.any([is.number, is.undefined], value[key]);\n        }\n        if (this._merging) {\n            Object.assign(this._internals.timeout, value);\n        }\n        else {\n            this._internals.timeout = { ...value };\n        }\n    }\n    /**\n    When specified, `prefixUrl` will be prepended to `url`.\n    The prefix can be any valid URL, either relative or absolute.\n    A trailing slash `/` is optional - one will be added automatically.\n\n    __Note__: `prefixUrl` will be ignored if the `url` argument is a URL instance.\n\n    __Note__: Leading slashes in `input` are disallowed when using this option to enforce consistency and avoid confusion.\n    For example, when the prefix URL is `https://example.com/foo` and the input is `/bar`, there's ambiguity whether the resulting URL would become `https://example.com/foo/bar` or `https://example.com/bar`.\n    The latter is used by browsers.\n\n    __Tip__: Useful when used with `got.extend()` to create niche-specific Got instances.\n\n    __Tip__: You can change `prefixUrl` using hooks as long as the URL still includes the `prefixUrl`.\n    If the URL doesn't include it anymore, it will throw.\n\n    @example\n    ```\n    import got from 'got';\n\n    await got('unicorn', {prefixUrl: 'https://cats.com'});\n    //=> 'https://cats.com/unicorn'\n\n    const instance = got.extend({\n        prefixUrl: 'https://google.com'\n    });\n\n    await instance('unicorn', {\n        hooks: {\n            beforeRequest: [\n                options => {\n                    options.prefixUrl = 'https://cats.com';\n                }\n            ]\n        }\n    });\n    //=> 'https://cats.com/unicorn'\n    ```\n    */\n    get prefixUrl() {\n        // We always return `string` here.\n        // It has to be `string | URL`, otherwise TypeScript will error because the getter and the setter have incompatible types.\n        return this._internals.prefixUrl;\n    }\n    set prefixUrl(value) {\n        assert$1.any([is.string, is.urlInstance], value);\n        if (value === '') {\n            this._internals.prefixUrl = '';\n            return;\n        }\n        value = value.toString();\n        if (!value.endsWith('/')) {\n            value += '/';\n        }\n        if (this._internals.prefixUrl && this._internals.url) {\n            const { href } = this._internals.url;\n            this._internals.url.href = value + href.slice(this._internals.prefixUrl.length);\n        }\n        this._internals.prefixUrl = value;\n    }\n    /**\n    __Note #1__: The `body` option cannot be used with the `json` or `form` option.\n\n    __Note #2__: If you provide this option, `got.stream()` will be read-only.\n\n    __Note #3__: If you provide a payload with the `GET` or `HEAD` method, it will throw a `TypeError` unless the method is `GET` and the `allowGetBody` option is set to `true`.\n\n    __Note #4__: This option is not enumerable and will not be merged with the instance defaults.\n\n    The `content-length` header will be automatically set if `body` is a `string` / `Buffer` / [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) / [`form-data` instance](https://github.com/form-data/form-data), and `content-length` and `transfer-encoding` are not manually set in `options.headers`.\n\n    Since Got 12, the `content-length` is not automatically set when `body` is a `fs.createReadStream`.\n    */\n    get body() {\n        return this._internals.body;\n    }\n    set body(value) {\n        assert$1.any([is.string, is.buffer, is.nodeStream, is.generator, is.asyncGenerator, isFormData$1, is.undefined], value);\n        if (is.nodeStream(value)) {\n            assert$1.truthy(value.readable);\n        }\n        if (value !== undefined) {\n            assert$1.undefined(this._internals.form);\n            assert$1.undefined(this._internals.json);\n        }\n        this._internals.body = value;\n    }\n    /**\n    The form body is converted to a query string using [`(new URLSearchParams(object)).toString()`](https://nodejs.org/api/url.html#url_constructor_new_urlsearchparams_obj).\n\n    If the `Content-Type` header is not present, it will be set to `application/x-www-form-urlencoded`.\n\n    __Note #1__: If you provide this option, `got.stream()` will be read-only.\n\n    __Note #2__: This option is not enumerable and will not be merged with the instance defaults.\n    */\n    get form() {\n        return this._internals.form;\n    }\n    set form(value) {\n        assert$1.any([is.plainObject, is.undefined], value);\n        if (value !== undefined) {\n            assert$1.undefined(this._internals.body);\n            assert$1.undefined(this._internals.json);\n        }\n        this._internals.form = value;\n    }\n    /**\n    JSON body. If the `Content-Type` header is not set, it will be set to `application/json`.\n\n    __Note #1__: If you provide this option, `got.stream()` will be read-only.\n\n    __Note #2__: This option is not enumerable and will not be merged with the instance defaults.\n    */\n    get json() {\n        return this._internals.json;\n    }\n    set json(value) {\n        if (value !== undefined) {\n            assert$1.undefined(this._internals.body);\n            assert$1.undefined(this._internals.form);\n        }\n        this._internals.json = value;\n    }\n    /**\n    The URL to request, as a string, a [`https.request` options object](https://nodejs.org/api/https.html#https_https_request_options_callback), or a [WHATWG `URL`](https://nodejs.org/api/url.html#url_class_url).\n\n    Properties from `options` will override properties in the parsed `url`.\n\n    If no protocol is specified, it will throw a `TypeError`.\n\n    __Note__: The query string is **not** parsed as search params.\n\n    @example\n    ```\n    await got('https://example.com/?query=a b'); //=> https://example.com/?query=a%20b\n    await got('https://example.com/', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b\n\n    // The query string is overridden by `searchParams`\n    await got('https://example.com/?query=a b', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b\n    ```\n    */\n    get url() {\n        return this._internals.url;\n    }\n    set url(value) {\n        assert$1.any([is.string, is.urlInstance, is.undefined], value);\n        if (value === undefined) {\n            this._internals.url = undefined;\n            return;\n        }\n        if (is.string(value) && value.startsWith('/')) {\n            throw new Error('`url` must not start with a slash');\n        }\n        const urlString = `${this.prefixUrl}${value.toString()}`;\n        const url = new urlLib.URL(urlString);\n        this._internals.url = url;\n        if (url.protocol === 'unix:') {\n            url.href = `http://unix${url.pathname}${url.search}`;\n        }\n        if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n            const error = new Error(`Unsupported protocol: ${url.protocol}`);\n            error.code = 'ERR_UNSUPPORTED_PROTOCOL';\n            throw error;\n        }\n        if (this._internals.username) {\n            url.username = this._internals.username;\n            this._internals.username = '';\n        }\n        if (this._internals.password) {\n            url.password = this._internals.password;\n            this._internals.password = '';\n        }\n        if (this._internals.searchParams) {\n            url.search = this._internals.searchParams.toString();\n            this._internals.searchParams = undefined;\n        }\n        if (url.hostname === 'unix') {\n            if (!this._internals.enableUnixSockets) {\n                throw new Error('Using UNIX domain sockets but option `enableUnixSockets` is not enabled');\n            }\n            const matches = /(?<socketPath>.+?):(?<path>.+)/.exec(`${url.pathname}${url.search}`);\n            if (matches?.groups) {\n                const { socketPath, path } = matches.groups;\n                this._unixOptions = {\n                    socketPath,\n                    path,\n                    host: '',\n                };\n            }\n            else {\n                this._unixOptions = undefined;\n            }\n            return;\n        }\n        this._unixOptions = undefined;\n    }\n    /**\n    Cookie support. You don't have to care about parsing or how to store them.\n\n    __Note__: If you provide this option, `options.headers.cookie` will be overridden.\n    */\n    get cookieJar() {\n        return this._internals.cookieJar;\n    }\n    set cookieJar(value) {\n        assert$1.any([is.object, is.undefined], value);\n        if (value === undefined) {\n            this._internals.cookieJar = undefined;\n            return;\n        }\n        let { setCookie, getCookieString } = value;\n        assert$1.function_(setCookie);\n        assert$1.function_(getCookieString);\n        /* istanbul ignore next: Horrible `tough-cookie` v3 check */\n        if (setCookie.length === 4 && getCookieString.length === 0) {\n            setCookie = node_util.promisify(setCookie.bind(value));\n            getCookieString = node_util.promisify(getCookieString.bind(value));\n            this._internals.cookieJar = {\n                setCookie,\n                getCookieString: getCookieString,\n            };\n        }\n        else {\n            this._internals.cookieJar = value;\n        }\n    }\n    /**\n    You can abort the `request` using [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).\n\n    *Requires Node.js 16 or later.*\n\n    @example\n    ```\n    import got from 'got';\n\n    const abortController = new AbortController();\n\n    const request = got('https://httpbin.org/anything', {\n        signal: abortController.signal\n    });\n\n    setTimeout(() => {\n        abortController.abort();\n    }, 100);\n    ```\n    */\n    // TODO: Replace `any` with `AbortSignal` when targeting Node 16.\n    get signal() {\n        return this._internals.signal;\n    }\n    // TODO: Replace `any` with `AbortSignal` when targeting Node 16.\n    set signal(value) {\n        assert$1.object(value);\n        this._internals.signal = value;\n    }\n    /**\n    Ignore invalid cookies instead of throwing an error.\n    Only useful when the `cookieJar` option has been set. Not recommended.\n\n    @default false\n    */\n    get ignoreInvalidCookies() {\n        return this._internals.ignoreInvalidCookies;\n    }\n    set ignoreInvalidCookies(value) {\n        assert$1.boolean(value);\n        this._internals.ignoreInvalidCookies = value;\n    }\n    /**\n    Query string that will be added to the request URL.\n    This will override the query string in `url`.\n\n    If you need to pass in an array, you can do it using a `URLSearchParams` instance.\n\n    @example\n    ```\n    import got from 'got';\n\n    const searchParams = new URLSearchParams([['key', 'a'], ['key', 'b']]);\n\n    await got('https://example.com', {searchParams});\n\n    console.log(searchParams.toString());\n    //=> 'key=a&key=b'\n    ```\n    */\n    get searchParams() {\n        if (this._internals.url) {\n            return this._internals.url.searchParams;\n        }\n        if (this._internals.searchParams === undefined) {\n            this._internals.searchParams = new urlLib.URLSearchParams();\n        }\n        return this._internals.searchParams;\n    }\n    set searchParams(value) {\n        assert$1.any([is.string, is.object, is.undefined], value);\n        const url = this._internals.url;\n        if (value === undefined) {\n            this._internals.searchParams = undefined;\n            if (url) {\n                url.search = '';\n            }\n            return;\n        }\n        const searchParameters = this.searchParams;\n        let updated;\n        if (is.string(value)) {\n            updated = new urlLib.URLSearchParams(value);\n        }\n        else if (value instanceof urlLib.URLSearchParams) {\n            updated = value;\n        }\n        else {\n            validateSearchParameters(value);\n            updated = new urlLib.URLSearchParams();\n            // eslint-disable-next-line guard-for-in\n            for (const key in value) {\n                const entry = value[key];\n                if (entry === null) {\n                    updated.append(key, '');\n                }\n                else if (entry === undefined) {\n                    searchParameters.delete(key);\n                }\n                else {\n                    updated.append(key, entry);\n                }\n            }\n        }\n        if (this._merging) {\n            // These keys will be replaced\n            for (const key of updated.keys()) {\n                searchParameters.delete(key);\n            }\n            for (const [key, value] of updated) {\n                searchParameters.append(key, value);\n            }\n        }\n        else if (url) {\n            url.search = searchParameters.toString();\n        }\n        else {\n            this._internals.searchParams = searchParameters;\n        }\n    }\n    get searchParameters() {\n        throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.');\n    }\n    set searchParameters(_value) {\n        throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.');\n    }\n    get dnsLookup() {\n        return this._internals.dnsLookup;\n    }\n    set dnsLookup(value) {\n        assert$1.any([is.function_, is.undefined], value);\n        this._internals.dnsLookup = value;\n    }\n    /**\n    An instance of [`CacheableLookup`](https://github.com/szmarczak/cacheable-lookup) used for making DNS lookups.\n    Useful when making lots of requests to different *public* hostnames.\n\n    `CacheableLookup` uses `dns.resolver4(..)` and `dns.resolver6(...)` under the hood and fall backs to `dns.lookup(...)` when the first two fail, which may lead to additional delay.\n\n    __Note__: This should stay disabled when making requests to internal hostnames such as `localhost`, `database.local` etc.\n\n    @default false\n    */\n    get dnsCache() {\n        return this._internals.dnsCache;\n    }\n    set dnsCache(value) {\n        assert$1.any([is.object, is.boolean, is.undefined], value);\n        if (value === true) {\n            this._internals.dnsCache = getGlobalDnsCache();\n        }\n        else if (value === false) {\n            this._internals.dnsCache = undefined;\n        }\n        else {\n            this._internals.dnsCache = value;\n        }\n    }\n    /**\n    User data. `context` is shallow merged and enumerable. If it contains non-enumerable properties they will NOT be merged.\n\n    @example\n    ```\n    import got from 'got';\n\n    const instance = got.extend({\n        hooks: {\n            beforeRequest: [\n                options => {\n                    if (!options.context || !options.context.token) {\n                        throw new Error('Token required');\n                    }\n\n                    options.headers.token = options.context.token;\n                }\n            ]\n        }\n    });\n\n    const context = {\n        token: 'secret'\n    };\n\n    const response = await instance('https://httpbin.org/headers', {context});\n\n    // Let's see the headers\n    console.log(response.body);\n    ```\n    */\n    get context() {\n        return this._internals.context;\n    }\n    set context(value) {\n        assert$1.object(value);\n        if (this._merging) {\n            Object.assign(this._internals.context, value);\n        }\n        else {\n            this._internals.context = { ...value };\n        }\n    }\n    /**\n    Hooks allow modifications during the request lifecycle.\n    Hook functions may be async and are run serially.\n    */\n    get hooks() {\n        return this._internals.hooks;\n    }\n    set hooks(value) {\n        assert$1.object(value);\n        // eslint-disable-next-line guard-for-in\n        for (const knownHookEvent in value) {\n            if (!(knownHookEvent in this._internals.hooks)) {\n                throw new Error(`Unexpected hook event: ${knownHookEvent}`);\n            }\n            const typedKnownHookEvent = knownHookEvent;\n            const hooks = value[typedKnownHookEvent];\n            assert$1.any([is.array, is.undefined], hooks);\n            if (hooks) {\n                for (const hook of hooks) {\n                    assert$1.function_(hook);\n                }\n            }\n            if (this._merging) {\n                if (hooks) {\n                    // @ts-expect-error FIXME\n                    this._internals.hooks[typedKnownHookEvent].push(...hooks);\n                }\n            }\n            else {\n                if (!hooks) {\n                    throw new Error(`Missing hook event: ${knownHookEvent}`);\n                }\n                // @ts-expect-error FIXME\n                this._internals.hooks[knownHookEvent] = [...hooks];\n            }\n        }\n    }\n    /**\n    Defines if redirect responses should be followed automatically.\n\n    Note that if a `303` is sent by the server in response to any request type (`POST`, `DELETE`, etc.), Got will automatically request the resource pointed to in the location header via `GET`.\n    This is in accordance with [the spec](https://tools.ietf.org/html/rfc7231#section-6.4.4). You can optionally turn on this behavior also for other redirect codes - see `methodRewriting`.\n\n    @default true\n    */\n    get followRedirect() {\n        return this._internals.followRedirect;\n    }\n    set followRedirect(value) {\n        assert$1.boolean(value);\n        this._internals.followRedirect = value;\n    }\n    get followRedirects() {\n        throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');\n    }\n    set followRedirects(_value) {\n        throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');\n    }\n    /**\n    If exceeded, the request will be aborted and a `MaxRedirectsError` will be thrown.\n\n    @default 10\n    */\n    get maxRedirects() {\n        return this._internals.maxRedirects;\n    }\n    set maxRedirects(value) {\n        assert$1.number(value);\n        this._internals.maxRedirects = value;\n    }\n    /**\n    A cache adapter instance for storing cached response data.\n\n    @default false\n    */\n    get cache() {\n        return this._internals.cache;\n    }\n    set cache(value) {\n        assert$1.any([is.object, is.string, is.boolean, is.undefined], value);\n        if (value === true) {\n            this._internals.cache = globalCache;\n        }\n        else if (value === false) {\n            this._internals.cache = undefined;\n        }\n        else {\n            this._internals.cache = value;\n        }\n    }\n    /**\n    Determines if a `got.HTTPError` is thrown for unsuccessful responses.\n\n    If this is disabled, requests that encounter an error status code will be resolved with the `response` instead of throwing.\n    This may be useful if you are checking for resource availability and are expecting error responses.\n\n    @default true\n    */\n    get throwHttpErrors() {\n        return this._internals.throwHttpErrors;\n    }\n    set throwHttpErrors(value) {\n        assert$1.boolean(value);\n        this._internals.throwHttpErrors = value;\n    }\n    get username() {\n        const url = this._internals.url;\n        const value = url ? url.username : this._internals.username;\n        return decodeURIComponent(value);\n    }\n    set username(value) {\n        assert$1.string(value);\n        const url = this._internals.url;\n        const fixedValue = encodeURIComponent(value);\n        if (url) {\n            url.username = fixedValue;\n        }\n        else {\n            this._internals.username = fixedValue;\n        }\n    }\n    get password() {\n        const url = this._internals.url;\n        const value = url ? url.password : this._internals.password;\n        return decodeURIComponent(value);\n    }\n    set password(value) {\n        assert$1.string(value);\n        const url = this._internals.url;\n        const fixedValue = encodeURIComponent(value);\n        if (url) {\n            url.password = fixedValue;\n        }\n        else {\n            this._internals.password = fixedValue;\n        }\n    }\n    /**\n    If set to `true`, Got will additionally accept HTTP2 requests.\n\n    It will choose either HTTP/1.1 or HTTP/2 depending on the ALPN protocol.\n\n    __Note__: This option requires Node.js 15.10.0 or newer as HTTP/2 support on older Node.js versions is very buggy.\n\n    __Note__: Overriding `options.request` will disable HTTP2 support.\n\n    @default false\n\n    @example\n    ```\n    import got from 'got';\n\n    const {headers} = await got('https://nghttp2.org/httpbin/anything', {http2: true});\n\n    console.log(headers.via);\n    //=> '2 nghttpx'\n    ```\n    */\n    get http2() {\n        return this._internals.http2;\n    }\n    set http2(value) {\n        assert$1.boolean(value);\n        this._internals.http2 = value;\n    }\n    /**\n    Set this to `true` to allow sending body for the `GET` method.\n    However, the [HTTP/2 specification](https://tools.ietf.org/html/rfc7540#section-8.1.3) says that `An HTTP GET request includes request header fields and no payload body`, therefore when using the HTTP/2 protocol this option will have no effect.\n    This option is only meant to interact with non-compliant servers when you have no other choice.\n\n    __Note__: The [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1) doesn't specify any particular behavior for the GET method having a payload, therefore __it's considered an [anti-pattern](https://en.wikipedia.org/wiki/Anti-pattern)__.\n\n    @default false\n    */\n    get allowGetBody() {\n        return this._internals.allowGetBody;\n    }\n    set allowGetBody(value) {\n        assert$1.boolean(value);\n        this._internals.allowGetBody = value;\n    }\n    /**\n    Request headers.\n\n    Existing headers will be overwritten. Headers set to `undefined` will be omitted.\n\n    @default {}\n    */\n    get headers() {\n        return this._internals.headers;\n    }\n    set headers(value) {\n        assert$1.plainObject(value);\n        if (this._merging) {\n            Object.assign(this._internals.headers, lowercaseKeys(value));\n        }\n        else {\n            this._internals.headers = lowercaseKeys(value);\n        }\n    }\n    /**\n    Specifies if the HTTP request method should be [rewritten as `GET`](https://tools.ietf.org/html/rfc7231#section-6.4) on redirects.\n\n    As the [specification](https://tools.ietf.org/html/rfc7231#section-6.4) prefers to rewrite the HTTP method only on `303` responses, this is Got's default behavior.\n    Setting `methodRewriting` to `true` will also rewrite `301` and `302` responses, as allowed by the spec. This is the behavior followed by `curl` and browsers.\n\n    __Note__: Got never performs method rewriting on `307` and `308` responses, as this is [explicitly prohibited by the specification](https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7).\n\n    @default false\n    */\n    get methodRewriting() {\n        return this._internals.methodRewriting;\n    }\n    set methodRewriting(value) {\n        assert$1.boolean(value);\n        this._internals.methodRewriting = value;\n    }\n    /**\n    Indicates which DNS record family to use.\n\n    Values:\n    - `undefined`: IPv4 (if present) or IPv6\n    - `4`: Only IPv4\n    - `6`: Only IPv6\n\n    @default undefined\n    */\n    get dnsLookupIpVersion() {\n        return this._internals.dnsLookupIpVersion;\n    }\n    set dnsLookupIpVersion(value) {\n        if (value !== undefined && value !== 4 && value !== 6) {\n            throw new TypeError(`Invalid DNS lookup IP version: ${value}`);\n        }\n        this._internals.dnsLookupIpVersion = value;\n    }\n    /**\n    A function used to parse JSON responses.\n\n    @example\n    ```\n    import got from 'got';\n    import Bourne from '@hapi/bourne';\n\n    const parsed = await got('https://example.com', {\n        parseJson: text => Bourne.parse(text)\n    }).json();\n\n    console.log(parsed);\n    ```\n    */\n    get parseJson() {\n        return this._internals.parseJson;\n    }\n    set parseJson(value) {\n        assert$1.function_(value);\n        this._internals.parseJson = value;\n    }\n    /**\n    A function used to stringify the body of JSON requests.\n\n    @example\n    ```\n    import got from 'got';\n\n    await got.post('https://example.com', {\n        stringifyJson: object => JSON.stringify(object, (key, value) => {\n            if (key.startsWith('_')) {\n                return;\n            }\n\n            return value;\n        }),\n        json: {\n            some: 'payload',\n            _ignoreMe: 1234\n        }\n    });\n    ```\n\n    @example\n    ```\n    import got from 'got';\n\n    await got.post('https://example.com', {\n        stringifyJson: object => JSON.stringify(object, (key, value) => {\n            if (typeof value === 'number') {\n                return value.toString();\n            }\n\n            return value;\n        }),\n        json: {\n            some: 'payload',\n            number: 1\n        }\n    });\n    ```\n    */\n    get stringifyJson() {\n        return this._internals.stringifyJson;\n    }\n    set stringifyJson(value) {\n        assert$1.function_(value);\n        this._internals.stringifyJson = value;\n    }\n    /**\n    An object representing `limit`, `calculateDelay`, `methods`, `statusCodes`, `maxRetryAfter` and `errorCodes` fields for maximum retry count, retry handler, allowed methods, allowed status codes, maximum [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) time and allowed error codes.\n\n    Delays between retries counts with function `1000 * Math.pow(2, retry) + Math.random() * 100`, where `retry` is attempt number (starts from 1).\n\n    The `calculateDelay` property is a `function` that receives an object with `attemptCount`, `retryOptions`, `error` and `computedValue` properties for current retry count, the retry options, error and default computed value.\n    The function must return a delay in milliseconds (or a Promise resolving with it) (`0` return value cancels retry).\n\n    By default, it retries *only* on the specified methods, status codes, and on these network errors:\n\n    - `ETIMEDOUT`: One of the [timeout](#timeout) limits were reached.\n    - `ECONNRESET`: Connection was forcibly closed by a peer.\n    - `EADDRINUSE`: Could not bind to any free port.\n    - `ECONNREFUSED`: Connection was refused by the server.\n    - `EPIPE`: The remote side of the stream being written has been closed.\n    - `ENOTFOUND`: Couldn't resolve the hostname to an IP address.\n    - `ENETUNREACH`: No internet connection.\n    - `EAI_AGAIN`: DNS lookup timed out.\n\n    __Note__: If `maxRetryAfter` is set to `undefined`, it will use `options.timeout`.\n    __Note__: If [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) header is greater than `maxRetryAfter`, it will cancel the request.\n    */\n    get retry() {\n        return this._internals.retry;\n    }\n    set retry(value) {\n        assert$1.plainObject(value);\n        assert$1.any([is.function_, is.undefined], value.calculateDelay);\n        assert$1.any([is.number, is.undefined], value.maxRetryAfter);\n        assert$1.any([is.number, is.undefined], value.limit);\n        assert$1.any([is.array, is.undefined], value.methods);\n        assert$1.any([is.array, is.undefined], value.statusCodes);\n        assert$1.any([is.array, is.undefined], value.errorCodes);\n        assert$1.any([is.number, is.undefined], value.noise);\n        if (value.noise && Math.abs(value.noise) > 100) {\n            throw new Error(`The maximum acceptable retry noise is +/- 100ms, got ${value.noise}`);\n        }\n        for (const key in value) {\n            if (!(key in this._internals.retry)) {\n                throw new Error(`Unexpected retry option: ${key}`);\n            }\n        }\n        if (this._merging) {\n            Object.assign(this._internals.retry, value);\n        }\n        else {\n            this._internals.retry = { ...value };\n        }\n        const { retry } = this._internals;\n        retry.methods = [...new Set(retry.methods.map(method => method.toUpperCase()))];\n        retry.statusCodes = [...new Set(retry.statusCodes)];\n        retry.errorCodes = [...new Set(retry.errorCodes)];\n    }\n    /**\n    From `http.RequestOptions`.\n\n    The IP address used to send the request from.\n    */\n    get localAddress() {\n        return this._internals.localAddress;\n    }\n    set localAddress(value) {\n        assert$1.any([is.string, is.undefined], value);\n        this._internals.localAddress = value;\n    }\n    /**\n    The HTTP method used to make the request.\n\n    @default 'GET'\n    */\n    get method() {\n        return this._internals.method;\n    }\n    set method(value) {\n        assert$1.string(value);\n        this._internals.method = value.toUpperCase();\n    }\n    get createConnection() {\n        return this._internals.createConnection;\n    }\n    set createConnection(value) {\n        assert$1.any([is.function_, is.undefined], value);\n        this._internals.createConnection = value;\n    }\n    /**\n    From `http-cache-semantics`\n\n    @default {}\n    */\n    get cacheOptions() {\n        return this._internals.cacheOptions;\n    }\n    set cacheOptions(value) {\n        assert$1.plainObject(value);\n        assert$1.any([is.boolean, is.undefined], value.shared);\n        assert$1.any([is.number, is.undefined], value.cacheHeuristic);\n        assert$1.any([is.number, is.undefined], value.immutableMinTimeToLive);\n        assert$1.any([is.boolean, is.undefined], value.ignoreCargoCult);\n        for (const key in value) {\n            if (!(key in this._internals.cacheOptions)) {\n                throw new Error(`Cache option \\`${key}\\` does not exist`);\n            }\n        }\n        if (this._merging) {\n            Object.assign(this._internals.cacheOptions, value);\n        }\n        else {\n            this._internals.cacheOptions = { ...value };\n        }\n    }\n    /**\n    Options for the advanced HTTPS API.\n    */\n    get https() {\n        return this._internals.https;\n    }\n    set https(value) {\n        assert$1.plainObject(value);\n        assert$1.any([is.boolean, is.undefined], value.rejectUnauthorized);\n        assert$1.any([is.function_, is.undefined], value.checkServerIdentity);\n        assert$1.any([is.string, is.object, is.array, is.undefined], value.certificateAuthority);\n        assert$1.any([is.string, is.object, is.array, is.undefined], value.key);\n        assert$1.any([is.string, is.object, is.array, is.undefined], value.certificate);\n        assert$1.any([is.string, is.undefined], value.passphrase);\n        assert$1.any([is.string, is.buffer, is.array, is.undefined], value.pfx);\n        assert$1.any([is.array, is.undefined], value.alpnProtocols);\n        assert$1.any([is.string, is.undefined], value.ciphers);\n        assert$1.any([is.string, is.buffer, is.undefined], value.dhparam);\n        assert$1.any([is.string, is.undefined], value.signatureAlgorithms);\n        assert$1.any([is.string, is.undefined], value.minVersion);\n        assert$1.any([is.string, is.undefined], value.maxVersion);\n        assert$1.any([is.boolean, is.undefined], value.honorCipherOrder);\n        assert$1.any([is.number, is.undefined], value.tlsSessionLifetime);\n        assert$1.any([is.string, is.undefined], value.ecdhCurve);\n        assert$1.any([is.string, is.buffer, is.array, is.undefined], value.certificateRevocationLists);\n        for (const key in value) {\n            if (!(key in this._internals.https)) {\n                throw new Error(`HTTPS option \\`${key}\\` does not exist`);\n            }\n        }\n        if (this._merging) {\n            Object.assign(this._internals.https, value);\n        }\n        else {\n            this._internals.https = { ...value };\n        }\n    }\n    /**\n    [Encoding](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings) to be used on `setEncoding` of the response data.\n\n    To get a [`Buffer`](https://nodejs.org/api/buffer.html), you need to set `responseType` to `buffer` instead.\n    Don't set this option to `null`.\n\n    __Note__: This doesn't affect streams! Instead, you need to do `got.stream(...).setEncoding(encoding)`.\n\n    @default 'utf-8'\n    */\n    get encoding() {\n        return this._internals.encoding;\n    }\n    set encoding(value) {\n        if (value === null) {\n            throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead');\n        }\n        assert$1.any([is.string, is.undefined], value);\n        this._internals.encoding = value;\n    }\n    /**\n    When set to `true` the promise will return the Response body instead of the Response object.\n\n    @default false\n    */\n    get resolveBodyOnly() {\n        return this._internals.resolveBodyOnly;\n    }\n    set resolveBodyOnly(value) {\n        assert$1.boolean(value);\n        this._internals.resolveBodyOnly = value;\n    }\n    /**\n    Returns a `Stream` instead of a `Promise`.\n    This is equivalent to calling `got.stream(url, options?)`.\n\n    @default false\n    */\n    get isStream() {\n        return this._internals.isStream;\n    }\n    set isStream(value) {\n        assert$1.boolean(value);\n        this._internals.isStream = value;\n    }\n    /**\n    The parsing method.\n\n    The promise also has `.text()`, `.json()` and `.buffer()` methods which return another Got promise for the parsed body.\n\n    It's like setting the options to `{responseType: 'json', resolveBodyOnly: true}` but without affecting the main Got promise.\n\n    __Note__: When using streams, this option is ignored.\n\n    @example\n    ```\n    const responsePromise = got(url);\n    const bufferPromise = responsePromise.buffer();\n    const jsonPromise = responsePromise.json();\n\n    const [response, buffer, json] = Promise.all([responsePromise, bufferPromise, jsonPromise]);\n    // `response` is an instance of Got Response\n    // `buffer` is an instance of Buffer\n    // `json` is an object\n    ```\n\n    @example\n    ```\n    // This\n    const body = await got(url).json();\n\n    // is semantically the same as this\n    const body = await got(url, {responseType: 'json', resolveBodyOnly: true});\n    ```\n    */\n    get responseType() {\n        return this._internals.responseType;\n    }\n    set responseType(value) {\n        if (value === undefined) {\n            this._internals.responseType = 'text';\n            return;\n        }\n        if (value !== 'text' && value !== 'buffer' && value !== 'json') {\n            throw new Error(`Invalid \\`responseType\\` option: ${value}`);\n        }\n        this._internals.responseType = value;\n    }\n    get pagination() {\n        return this._internals.pagination;\n    }\n    set pagination(value) {\n        assert$1.object(value);\n        if (this._merging) {\n            Object.assign(this._internals.pagination, value);\n        }\n        else {\n            this._internals.pagination = value;\n        }\n    }\n    get auth() {\n        throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.');\n    }\n    set auth(_value) {\n        throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.');\n    }\n    get setHost() {\n        return this._internals.setHost;\n    }\n    set setHost(value) {\n        assert$1.boolean(value);\n        this._internals.setHost = value;\n    }\n    get maxHeaderSize() {\n        return this._internals.maxHeaderSize;\n    }\n    set maxHeaderSize(value) {\n        assert$1.any([is.number, is.undefined], value);\n        this._internals.maxHeaderSize = value;\n    }\n    get enableUnixSockets() {\n        return this._internals.enableUnixSockets;\n    }\n    set enableUnixSockets(value) {\n        assert$1.boolean(value);\n        this._internals.enableUnixSockets = value;\n    }\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    toJSON() {\n        return { ...this._internals };\n    }\n    [Symbol.for('nodejs.util.inspect.custom')](_depth, options) {\n        return node_util.inspect(this._internals, options);\n    }\n    createNativeRequestOptions() {\n        const internals = this._internals;\n        const url = internals.url;\n        let agent;\n        if (url.protocol === 'https:') {\n            agent = internals.http2 ? internals.agent : internals.agent.https;\n        }\n        else {\n            agent = internals.agent.http;\n        }\n        const { https } = internals;\n        let { pfx } = https;\n        if (is.array(pfx) && is.plainObject(pfx[0])) {\n            pfx = pfx.map(object => ({\n                buf: object.buffer,\n                passphrase: object.passphrase,\n            }));\n        }\n        return {\n            ...internals.cacheOptions,\n            ...this._unixOptions,\n            // HTTPS options\n            // eslint-disable-next-line @typescript-eslint/naming-convention\n            ALPNProtocols: https.alpnProtocols,\n            ca: https.certificateAuthority,\n            cert: https.certificate,\n            key: https.key,\n            passphrase: https.passphrase,\n            pfx: https.pfx,\n            rejectUnauthorized: https.rejectUnauthorized,\n            checkServerIdentity: https.checkServerIdentity ?? node_tls.checkServerIdentity,\n            ciphers: https.ciphers,\n            honorCipherOrder: https.honorCipherOrder,\n            minVersion: https.minVersion,\n            maxVersion: https.maxVersion,\n            sigalgs: https.signatureAlgorithms,\n            sessionTimeout: https.tlsSessionLifetime,\n            dhparam: https.dhparam,\n            ecdhCurve: https.ecdhCurve,\n            crl: https.certificateRevocationLists,\n            // HTTP options\n            lookup: internals.dnsLookup ?? internals.dnsCache?.lookup,\n            family: internals.dnsLookupIpVersion,\n            agent,\n            setHost: internals.setHost,\n            method: internals.method,\n            maxHeaderSize: internals.maxHeaderSize,\n            localAddress: internals.localAddress,\n            headers: internals.headers,\n            createConnection: internals.createConnection,\n            timeout: internals.http2 ? getHttp2TimeoutOption(internals) : undefined,\n            // HTTP/2 options\n            h2session: internals.h2session,\n        };\n    }\n    getRequestFunction() {\n        const url = this._internals.url;\n        const { request } = this._internals;\n        if (!request && url) {\n            return this.getFallbackRequestFunction();\n        }\n        return request;\n    }\n    getFallbackRequestFunction() {\n        const url = this._internals.url;\n        if (!url) {\n            return;\n        }\n        if (url.protocol === 'https:') {\n            if (this._internals.http2) {\n                if (major < 15 || (major === 15 && minor < 10)) {\n                    const error = new Error('To use the `http2` option, install Node.js 15.10.0 or above');\n                    error.code = 'EUNSUPPORTED';\n                    throw error;\n                }\n                return source.auto;\n            }\n            return https__default[\"default\"].request;\n        }\n        return http__default[\"default\"].request;\n    }\n    freeze() {\n        const options = this._internals;\n        Object.freeze(options);\n        Object.freeze(options.hooks);\n        Object.freeze(options.hooks.afterResponse);\n        Object.freeze(options.hooks.beforeError);\n        Object.freeze(options.hooks.beforeRedirect);\n        Object.freeze(options.hooks.beforeRequest);\n        Object.freeze(options.hooks.beforeRetry);\n        Object.freeze(options.hooks.init);\n        Object.freeze(options.https);\n        Object.freeze(options.cacheOptions);\n        Object.freeze(options.agent);\n        Object.freeze(options.headers);\n        Object.freeze(options.timeout);\n        Object.freeze(options.retry);\n        Object.freeze(options.retry.errorCodes);\n        Object.freeze(options.retry.methods);\n        Object.freeze(options.retry.statusCodes);\n    }\n}\n\nconst isResponseOk = (response) => {\n    const { statusCode } = response;\n    const limitStatusCode = response.request.options.followRedirect ? 299 : 399;\n    return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;\n};\n/**\nAn error to be thrown when server response code is 2xx, and parsing body fails.\nIncludes a `response` property.\n*/\nclass ParseError extends RequestError$1 {\n    constructor(error, response) {\n        const { options } = response.request;\n        super(`${error.message} in \"${options.url.toString()}\"`, error, response.request);\n        this.name = 'ParseError';\n        this.code = 'ERR_BODY_PARSE_FAILURE';\n    }\n}\nconst parseBody = (response, responseType, parseJson, encoding) => {\n    const { rawBody } = response;\n    try {\n        if (responseType === 'text') {\n            return rawBody.toString(encoding);\n        }\n        if (responseType === 'json') {\n            return rawBody.length === 0 ? '' : parseJson(rawBody.toString(encoding));\n        }\n        if (responseType === 'buffer') {\n            return rawBody;\n        }\n    }\n    catch (error) {\n        throw new ParseError(error, response);\n    }\n    throw new ParseError({\n        message: `Unknown body type '${responseType}'`,\n        name: 'Error',\n    }, response);\n};\n\nfunction isClientRequest(clientRequest) {\n    return clientRequest.writable && !clientRequest.writableEnded;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction isUnixSocketURL(url) {\n    return url.protocol === 'unix:' || url.hostname === 'unix';\n}\n\nconst { buffer: getBuffer } = getStream$2.exports;\nconst supportsBrotli = is.string(process__default[\"default\"].versions.brotli);\nconst methodsWithoutBody = new Set(['GET', 'HEAD']);\nconst cacheableStore = new WeakableMap();\nconst redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]);\nconst proxiedRequestEvents$1 = [\n    'socket',\n    'connect',\n    'continue',\n    'information',\n    'upgrade',\n];\nconst noop = () => { };\nclass Request extends stream$3.Duplex {\n    constructor(url, options, defaults) {\n        super({\n            // Don't destroy immediately, as the error may be emitted on unsuccessful retry\n            autoDestroy: false,\n            // It needs to be zero because we're just proxying the data to another stream\n            highWaterMark: 0,\n        });\n        // @ts-expect-error - Ignoring for now.\n        Object.defineProperty(this, 'constructor', {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_noPipe\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // @ts-expect-error https://github.com/microsoft/TypeScript/issues/9568\n        Object.defineProperty(this, \"options\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"response\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"requestUrl\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"redirectUrls\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"retryCount\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_stopRetry\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_downloadedSize\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_uploadedSize\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_stopReading\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_pipedServerResponses\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_request\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_responseSize\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_bodySize\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_unproxyEvents\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_isFromCache\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_cannotHaveBody\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_triggerRead\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_cancelTimeouts\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_removeListeners\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_nativeResponse\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_flushed\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_aborted\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // We need this because `this._request` if `undefined` when using cache\n        Object.defineProperty(this, \"_requestInitialized\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this._downloadedSize = 0;\n        this._uploadedSize = 0;\n        this._stopReading = false;\n        this._pipedServerResponses = new Set();\n        this._cannotHaveBody = false;\n        this._unproxyEvents = noop;\n        this._triggerRead = false;\n        this._cancelTimeouts = noop;\n        this._removeListeners = noop;\n        this._jobs = [];\n        this._flushed = false;\n        this._requestInitialized = false;\n        this._aborted = false;\n        this.redirectUrls = [];\n        this.retryCount = 0;\n        this._stopRetry = noop;\n        this.on('pipe', (source) => {\n            if (source?.headers) {\n                Object.assign(this.options.headers, source.headers);\n            }\n        });\n        this.on('newListener', event => {\n            if (event === 'retry' && this.listenerCount('retry') > 0) {\n                throw new Error('A retry listener has been attached already.');\n            }\n        });\n        try {\n            this.options = new Options(url, options, defaults);\n            if (!this.options.url) {\n                if (this.options.prefixUrl === '') {\n                    throw new TypeError('Missing `url` property');\n                }\n                this.options.url = '';\n            }\n            this.requestUrl = this.options.url;\n        }\n        catch (error) {\n            const { options } = error;\n            if (options) {\n                this.options = options;\n            }\n            this.flush = async () => {\n                this.flush = async () => { };\n                this.destroy(error);\n            };\n            return;\n        }\n        // Important! If you replace `body` in a handler with another stream, make sure it's readable first.\n        // The below is run only once.\n        const { body } = this.options;\n        if (is.nodeStream(body)) {\n            body.once('error', error => {\n                if (this._flushed) {\n                    this._beforeError(new UploadError(error, this));\n                }\n                else {\n                    this.flush = async () => {\n                        this.flush = async () => { };\n                        this._beforeError(new UploadError(error, this));\n                    };\n                }\n            });\n        }\n        if (this.options.signal) {\n            const abort = () => {\n                this.destroy(new AbortError(this));\n            };\n            if (this.options.signal.aborted) {\n                abort();\n            }\n            else {\n                this.options.signal.addEventListener('abort', abort);\n                this._removeListeners = () => {\n                    this.options.signal.removeEventListener('abort', abort);\n                };\n            }\n        }\n    }\n    async flush() {\n        if (this._flushed) {\n            return;\n        }\n        this._flushed = true;\n        try {\n            await this._finalizeBody();\n            if (this.destroyed) {\n                return;\n            }\n            await this._makeRequest();\n            if (this.destroyed) {\n                this._request?.destroy();\n                return;\n            }\n            // Queued writes etc.\n            for (const job of this._jobs) {\n                job();\n            }\n            // Prevent memory leak\n            this._jobs.length = 0;\n            this._requestInitialized = true;\n        }\n        catch (error) {\n            this._beforeError(error);\n        }\n    }\n    _beforeError(error) {\n        if (this._stopReading) {\n            return;\n        }\n        const { response, options } = this;\n        const attemptCount = this.retryCount + (error.name === 'RetryError' ? 0 : 1);\n        this._stopReading = true;\n        if (!(error instanceof RequestError$1)) {\n            error = new RequestError$1(error.message, error, this);\n        }\n        const typedError = error;\n        void (async () => {\n            // Node.js parser is really weird.\n            // It emits post-request Parse Errors on the same instance as previous request. WTF.\n            // Therefore we need to check if it has been destroyed as well.\n            //\n            // Furthermore, Node.js 16 `response.destroy()` doesn't immediately destroy the socket,\n            // but makes the response unreadable. So we additionally need to check `response.readable`.\n            if (response?.readable && !response.rawBody && !this._request?.socket?.destroyed) {\n                // @types/node has incorrect typings. `setEncoding` accepts `null` as well.\n                response.setEncoding(this.readableEncoding);\n                const success = await this._setRawBody(response);\n                if (success) {\n                    response.body = response.rawBody.toString();\n                }\n            }\n            if (this.listenerCount('retry') !== 0) {\n                let backoff;\n                try {\n                    let retryAfter;\n                    if (response && 'retry-after' in response.headers) {\n                        retryAfter = Number(response.headers['retry-after']);\n                        if (Number.isNaN(retryAfter)) {\n                            retryAfter = Date.parse(response.headers['retry-after']) - Date.now();\n                            if (retryAfter <= 0) {\n                                retryAfter = 1;\n                            }\n                        }\n                        else {\n                            retryAfter *= 1000;\n                        }\n                    }\n                    const retryOptions = options.retry;\n                    backoff = await retryOptions.calculateDelay({\n                        attemptCount,\n                        retryOptions,\n                        error: typedError,\n                        retryAfter,\n                        computedValue: calculateRetryDelay({\n                            attemptCount,\n                            retryOptions,\n                            error: typedError,\n                            retryAfter,\n                            computedValue: retryOptions.maxRetryAfter ?? options.timeout.request ?? Number.POSITIVE_INFINITY,\n                        }),\n                    });\n                }\n                catch (error_) {\n                    void this._error(new RequestError$1(error_.message, error_, this));\n                    return;\n                }\n                if (backoff) {\n                    await new Promise(resolve => {\n                        const timeout = setTimeout(resolve, backoff);\n                        this._stopRetry = () => {\n                            clearTimeout(timeout);\n                            resolve();\n                        };\n                    });\n                    // Something forced us to abort the retry\n                    if (this.destroyed) {\n                        return;\n                    }\n                    try {\n                        for (const hook of this.options.hooks.beforeRetry) {\n                            // eslint-disable-next-line no-await-in-loop\n                            await hook(typedError, this.retryCount + 1);\n                        }\n                    }\n                    catch (error_) {\n                        void this._error(new RequestError$1(error_.message, error, this));\n                        return;\n                    }\n                    // Something forced us to abort the retry\n                    if (this.destroyed) {\n                        return;\n                    }\n                    this.destroy();\n                    this.emit('retry', this.retryCount + 1, error, (updatedOptions) => {\n                        const request = new Request(options.url, updatedOptions, options);\n                        request.retryCount = this.retryCount + 1;\n                        process__default[\"default\"].nextTick(() => {\n                            void request.flush();\n                        });\n                        return request;\n                    });\n                    return;\n                }\n            }\n            void this._error(typedError);\n        })();\n    }\n    _read() {\n        this._triggerRead = true;\n        const { response } = this;\n        if (response && !this._stopReading) {\n            // We cannot put this in the `if` above\n            // because `.read()` also triggers the `end` event\n            if (response.readableLength) {\n                this._triggerRead = false;\n            }\n            let data;\n            while ((data = response.read()) !== null) {\n                this._downloadedSize += data.length; // eslint-disable-line @typescript-eslint/restrict-plus-operands\n                const progress = this.downloadProgress;\n                if (progress.percent < 1) {\n                    this.emit('downloadProgress', progress);\n                }\n                this.push(data);\n            }\n        }\n    }\n    _write(chunk, encoding, callback) {\n        const write = () => {\n            this._writeRequest(chunk, encoding, callback);\n        };\n        if (this._requestInitialized) {\n            write();\n        }\n        else {\n            this._jobs.push(write);\n        }\n    }\n    _final(callback) {\n        const endRequest = () => {\n            // We need to check if `this._request` is present,\n            // because it isn't when we use cache.\n            if (!this._request || this._request.destroyed) {\n                callback();\n                return;\n            }\n            this._request.end((error) => {\n                // The request has been destroyed before `_final` finished.\n                // See https://github.com/nodejs/node/issues/39356\n                if (this._request._writableState?.errored) {\n                    return;\n                }\n                if (!error) {\n                    this._bodySize = this._uploadedSize;\n                    this.emit('uploadProgress', this.uploadProgress);\n                    this._request.emit('upload-complete');\n                }\n                callback(error);\n            });\n        };\n        if (this._requestInitialized) {\n            endRequest();\n        }\n        else {\n            this._jobs.push(endRequest);\n        }\n    }\n    _destroy(error, callback) {\n        this._stopReading = true;\n        this.flush = async () => { };\n        // Prevent further retries\n        this._stopRetry();\n        this._cancelTimeouts();\n        this._removeListeners();\n        if (this.options) {\n            const { body } = this.options;\n            if (is.nodeStream(body)) {\n                body.destroy();\n            }\n        }\n        if (this._request) {\n            this._request.destroy();\n        }\n        if (error !== null && !is.undefined(error) && !(error instanceof RequestError$1)) {\n            error = new RequestError$1(error.message, error, this);\n        }\n        callback(error);\n    }\n    pipe(destination, options) {\n        if (destination instanceof http$3.ServerResponse) {\n            this._pipedServerResponses.add(destination);\n        }\n        return super.pipe(destination, options);\n    }\n    unpipe(destination) {\n        if (destination instanceof http$3.ServerResponse) {\n            this._pipedServerResponses.delete(destination);\n        }\n        super.unpipe(destination);\n        return this;\n    }\n    async _finalizeBody() {\n        const { options } = this;\n        const { headers } = options;\n        const isForm = !is.undefined(options.form);\n        // eslint-disable-next-line @typescript-eslint/naming-convention\n        const isJSON = !is.undefined(options.json);\n        const isBody = !is.undefined(options.body);\n        const cannotHaveBody = methodsWithoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody);\n        this._cannotHaveBody = cannotHaveBody;\n        if (isForm || isJSON || isBody) {\n            if (cannotHaveBody) {\n                throw new TypeError(`The \\`${options.method}\\` method cannot be used with a body`);\n            }\n            // Serialize body\n            const noContentType = !is.string(headers['content-type']);\n            if (isBody) {\n                // Body is spec-compliant FormData\n                if (isFormData$1(options.body)) {\n                    const encoder = new FormDataEncoder(options.body);\n                    if (noContentType) {\n                        headers['content-type'] = encoder.headers['Content-Type'];\n                    }\n                    if ('Content-Length' in encoder.headers) {\n                        headers['content-length'] = encoder.headers['Content-Length'];\n                    }\n                    options.body = encoder.encode();\n                }\n                // Special case for https://github.com/form-data/form-data\n                if (isFormData(options.body) && noContentType) {\n                    headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`;\n                }\n            }\n            else if (isForm) {\n                if (noContentType) {\n                    headers['content-type'] = 'application/x-www-form-urlencoded';\n                }\n                const { form } = options;\n                options.form = undefined;\n                options.body = (new urlLib.URLSearchParams(form)).toString();\n            }\n            else {\n                if (noContentType) {\n                    headers['content-type'] = 'application/json';\n                }\n                const { json } = options;\n                options.json = undefined;\n                options.body = options.stringifyJson(json);\n            }\n            const uploadBodySize = await getBodySize(options.body, options.headers);\n            // See https://tools.ietf.org/html/rfc7230#section-3.3.2\n            // A user agent SHOULD send a Content-Length in a request message when\n            // no Transfer-Encoding is sent and the request method defines a meaning\n            // for an enclosed payload body.  For example, a Content-Length header\n            // field is normally sent in a POST request even when the value is 0\n            // (indicating an empty payload body).  A user agent SHOULD NOT send a\n            // Content-Length header field when the request message does not contain\n            // a payload body and the method semantics do not anticipate such a\n            // body.\n            if (is.undefined(headers['content-length']) && is.undefined(headers['transfer-encoding']) && !cannotHaveBody && !is.undefined(uploadBodySize)) {\n                headers['content-length'] = String(uploadBodySize);\n            }\n        }\n        if (options.responseType === 'json' && !('accept' in options.headers)) {\n            options.headers.accept = 'application/json';\n        }\n        this._bodySize = Number(headers['content-length']) || undefined;\n    }\n    async _onResponseBase(response) {\n        // This will be called e.g. when using cache so we need to check if this request has been aborted.\n        if (this.isAborted) {\n            return;\n        }\n        const { options } = this;\n        const { url } = options;\n        this._nativeResponse = response;\n        if (options.decompress) {\n            response = decompressResponse(response);\n        }\n        const statusCode = response.statusCode;\n        const typedResponse = response;\n        typedResponse.statusMessage = typedResponse.statusMessage ?? http__default[\"default\"].STATUS_CODES[statusCode];\n        typedResponse.url = options.url.toString();\n        typedResponse.requestUrl = this.requestUrl;\n        typedResponse.redirectUrls = this.redirectUrls;\n        typedResponse.request = this;\n        typedResponse.isFromCache = this._nativeResponse.fromCache ?? false;\n        typedResponse.ip = this.ip;\n        typedResponse.retryCount = this.retryCount;\n        typedResponse.ok = isResponseOk(typedResponse);\n        this._isFromCache = typedResponse.isFromCache;\n        this._responseSize = Number(response.headers['content-length']) || undefined;\n        this.response = typedResponse;\n        response.once('end', () => {\n            this._responseSize = this._downloadedSize;\n            this.emit('downloadProgress', this.downloadProgress);\n        });\n        response.once('error', (error) => {\n            this._aborted = true;\n            // Force clean-up, because some packages don't do this.\n            // TODO: Fix decompress-response\n            response.destroy();\n            this._beforeError(new ReadError(error, this));\n        });\n        response.once('aborted', () => {\n            this._aborted = true;\n            this._beforeError(new ReadError({\n                name: 'Error',\n                message: 'The server aborted pending request',\n                code: 'ECONNRESET',\n            }, this));\n        });\n        this.emit('downloadProgress', this.downloadProgress);\n        const rawCookies = response.headers['set-cookie'];\n        if (is.object(options.cookieJar) && rawCookies) {\n            let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString()));\n            if (options.ignoreInvalidCookies) {\n                promises = promises.map(async (promise) => {\n                    try {\n                        await promise;\n                    }\n                    catch { }\n                });\n            }\n            try {\n                await Promise.all(promises);\n            }\n            catch (error) {\n                this._beforeError(error);\n                return;\n            }\n        }\n        // The above is running a promise, therefore we need to check if this request has been aborted yet again.\n        if (this.isAborted) {\n            return;\n        }\n        if (options.followRedirect && response.headers.location && redirectCodes.has(statusCode)) {\n            // We're being redirected, we don't care about the response.\n            // It'd be best to abort the request, but we can't because\n            // we would have to sacrifice the TCP connection. We don't want that.\n            response.resume();\n            this._cancelTimeouts();\n            this._unproxyEvents();\n            if (this.redirectUrls.length >= options.maxRedirects) {\n                this._beforeError(new MaxRedirectsError(this));\n                return;\n            }\n            this._request = undefined;\n            const updatedOptions = new Options(undefined, undefined, this.options);\n            const serverRequestedGet = statusCode === 303 && updatedOptions.method !== 'GET' && updatedOptions.method !== 'HEAD';\n            const canRewrite = statusCode !== 307 && statusCode !== 308;\n            const userRequestedGet = updatedOptions.methodRewriting && canRewrite;\n            if (serverRequestedGet || userRequestedGet) {\n                updatedOptions.method = 'GET';\n                updatedOptions.body = undefined;\n                updatedOptions.json = undefined;\n                updatedOptions.form = undefined;\n                delete updatedOptions.headers['content-length'];\n            }\n            try {\n                // We need this in order to support UTF-8\n                const redirectBuffer = node_buffer.Buffer.from(response.headers.location, 'binary').toString();\n                const redirectUrl = new urlLib.URL(redirectBuffer, url);\n                if (!isUnixSocketURL(url) && isUnixSocketURL(redirectUrl)) {\n                    this._beforeError(new RequestError$1('Cannot redirect to UNIX socket', {}, this));\n                    return;\n                }\n                // Redirecting to a different site, clear sensitive data.\n                if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) {\n                    if ('host' in updatedOptions.headers) {\n                        delete updatedOptions.headers.host;\n                    }\n                    if ('cookie' in updatedOptions.headers) {\n                        delete updatedOptions.headers.cookie;\n                    }\n                    if ('authorization' in updatedOptions.headers) {\n                        delete updatedOptions.headers.authorization;\n                    }\n                    if (updatedOptions.username || updatedOptions.password) {\n                        updatedOptions.username = '';\n                        updatedOptions.password = '';\n                    }\n                }\n                else {\n                    redirectUrl.username = updatedOptions.username;\n                    redirectUrl.password = updatedOptions.password;\n                }\n                this.redirectUrls.push(redirectUrl);\n                updatedOptions.prefixUrl = '';\n                updatedOptions.url = redirectUrl;\n                for (const hook of updatedOptions.hooks.beforeRedirect) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await hook(updatedOptions, typedResponse);\n                }\n                this.emit('redirect', updatedOptions, typedResponse);\n                this.options = updatedOptions;\n                await this._makeRequest();\n            }\n            catch (error) {\n                this._beforeError(error);\n                return;\n            }\n            return;\n        }\n        // `HTTPError`s always have `error.response.body` defined.\n        // Therefore we cannot retry if `options.throwHttpErrors` is false.\n        // On the last retry, if `options.throwHttpErrors` is false, we would need to return the body,\n        // but that wouldn't be possible since the body would be already read in `error.response.body`.\n        if (options.isStream && options.throwHttpErrors && !isResponseOk(typedResponse)) {\n            this._beforeError(new HTTPError(typedResponse));\n            return;\n        }\n        response.on('readable', () => {\n            if (this._triggerRead) {\n                this._read();\n            }\n        });\n        this.on('resume', () => {\n            response.resume();\n        });\n        this.on('pause', () => {\n            response.pause();\n        });\n        response.once('end', () => {\n            this.push(null);\n        });\n        if (this._noPipe) {\n            const success = await this._setRawBody();\n            if (success) {\n                this.emit('response', response);\n            }\n            return;\n        }\n        this.emit('response', response);\n        for (const destination of this._pipedServerResponses) {\n            if (destination.headersSent) {\n                continue;\n            }\n            // eslint-disable-next-line guard-for-in\n            for (const key in response.headers) {\n                const isAllowed = options.decompress ? key !== 'content-encoding' : true;\n                const value = response.headers[key];\n                if (isAllowed) {\n                    destination.setHeader(key, value);\n                }\n            }\n            destination.statusCode = statusCode;\n        }\n    }\n    async _setRawBody(from = this) {\n        if (from.readableEnded) {\n            return false;\n        }\n        try {\n            // Errors are emitted via the `error` event\n            const rawBody = await getBuffer(from);\n            // On retry Request is destroyed with no error, therefore the above will successfully resolve.\n            // So in order to check if this was really successfull, we need to check if it has been properly ended.\n            if (!this.isAborted) {\n                this.response.rawBody = rawBody;\n                return true;\n            }\n        }\n        catch { }\n        return false;\n    }\n    async _onResponse(response) {\n        try {\n            await this._onResponseBase(response);\n        }\n        catch (error) {\n            /* istanbul ignore next: better safe than sorry */\n            this._beforeError(error);\n        }\n    }\n    _onRequest(request) {\n        const { options } = this;\n        const { timeout, url } = options;\n        timer(request);\n        if (this.options.http2) {\n            // Unset stream timeout, as the `timeout` option was used only for connection timeout.\n            request.setTimeout(0);\n        }\n        this._cancelTimeouts = timedOut(request, timeout, url);\n        const responseEventName = options.cache ? 'cacheableResponse' : 'response';\n        request.once(responseEventName, (response) => {\n            void this._onResponse(response);\n        });\n        request.once('error', (error) => {\n            this._aborted = true;\n            // Force clean-up, because some packages (e.g. nock) don't do this.\n            request.destroy();\n            error = error instanceof TimeoutError ? new TimeoutError$1(error, this.timings, this) : new RequestError$1(error.message, error, this);\n            this._beforeError(error);\n        });\n        this._unproxyEvents = proxyEvents$2(request, this, proxiedRequestEvents$1);\n        this._request = request;\n        this.emit('uploadProgress', this.uploadProgress);\n        this._sendBody();\n        this.emit('request', request);\n    }\n    async _asyncWrite(chunk) {\n        return new Promise((resolve, reject) => {\n            super.write(chunk, error => {\n                if (error) {\n                    reject(error);\n                    return;\n                }\n                resolve();\n            });\n        });\n    }\n    _sendBody() {\n        // Send body\n        const { body } = this.options;\n        const currentRequest = this.redirectUrls.length === 0 ? this : this._request ?? this;\n        if (is.nodeStream(body)) {\n            body.pipe(currentRequest);\n        }\n        else if (is.generator(body) || is.asyncGenerator(body)) {\n            (async () => {\n                try {\n                    for await (const chunk of body) {\n                        await this._asyncWrite(chunk);\n                    }\n                    super.end();\n                }\n                catch (error) {\n                    this._beforeError(error);\n                }\n            })();\n        }\n        else if (!is.undefined(body)) {\n            this._writeRequest(body, undefined, () => { });\n            currentRequest.end();\n        }\n        else if (this._cannotHaveBody || this._noPipe) {\n            currentRequest.end();\n        }\n    }\n    _prepareCache(cache) {\n        if (!cacheableStore.has(cache)) {\n            const cacheableRequest = new CacheableRequest(((requestOptions, handler) => {\n                const result = requestOptions._request(requestOptions, handler);\n                // TODO: remove this when `cacheable-request` supports async request functions.\n                if (is.promise(result)) {\n                    // We only need to implement the error handler in order to support HTTP2 caching.\n                    // The result will be a promise anyway.\n                    // @ts-expect-error ignore\n                    // eslint-disable-next-line @typescript-eslint/promise-function-async\n                    result.once = (event, handler) => {\n                        if (event === 'error') {\n                            (async () => {\n                                try {\n                                    await result;\n                                }\n                                catch (error) {\n                                    handler(error);\n                                }\n                            })();\n                        }\n                        else if (event === 'abort') {\n                            // The empty catch is needed here in case when\n                            // it rejects before it's `await`ed in `_makeRequest`.\n                            (async () => {\n                                try {\n                                    const request = (await result);\n                                    request.once('abort', handler);\n                                }\n                                catch { }\n                            })();\n                        }\n                        else {\n                            /* istanbul ignore next: safety check */\n                            throw new Error(`Unknown HTTP2 promise event: ${event}`);\n                        }\n                        return result;\n                    };\n                }\n                return result;\n            }), cache);\n            cacheableStore.set(cache, cacheableRequest.request());\n        }\n    }\n    async _createCacheableRequest(url, options) {\n        return new Promise((resolve, reject) => {\n            // TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed\n            Object.assign(options, urlToOptions(url));\n            let request;\n            // TODO: Fix `cacheable-response`. This is ugly.\n            const cacheRequest = cacheableStore.get(options.cache)(options, async (response) => {\n                response._readableState.autoDestroy = false;\n                if (request) {\n                    const fix = () => {\n                        if (response.req) {\n                            response.complete = response.req.res.complete;\n                        }\n                    };\n                    response.prependOnceListener('end', fix);\n                    fix();\n                    (await request).emit('cacheableResponse', response);\n                }\n                resolve(response);\n            });\n            cacheRequest.once('error', reject);\n            cacheRequest.once('request', async (requestOrPromise) => {\n                request = requestOrPromise;\n                resolve(request);\n            });\n        });\n    }\n    async _makeRequest() {\n        const { options } = this;\n        const { headers, username, password } = options;\n        const cookieJar = options.cookieJar;\n        for (const key in headers) {\n            if (is.undefined(headers[key])) {\n                // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                delete headers[key];\n            }\n            else if (is.null_(headers[key])) {\n                throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${key}\\` header`);\n            }\n        }\n        if (options.decompress && is.undefined(headers['accept-encoding'])) {\n            headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate';\n        }\n        if (username || password) {\n            const credentials = node_buffer.Buffer.from(`${username}:${password}`).toString('base64');\n            headers.authorization = `Basic ${credentials}`;\n        }\n        // Set cookies\n        if (cookieJar) {\n            const cookieString = await cookieJar.getCookieString(options.url.toString());\n            if (is.nonEmptyString(cookieString)) {\n                headers.cookie = cookieString;\n            }\n        }\n        // Reset `prefixUrl`\n        options.prefixUrl = '';\n        let request;\n        for (const hook of options.hooks.beforeRequest) {\n            // eslint-disable-next-line no-await-in-loop\n            const result = await hook(options);\n            if (!is.undefined(result)) {\n                // @ts-expect-error Skip the type mismatch to support abstract responses\n                request = () => result;\n                break;\n            }\n        }\n        if (!request) {\n            request = options.getRequestFunction();\n        }\n        const url = options.url;\n        this._requestOptions = options.createNativeRequestOptions();\n        if (options.cache) {\n            this._requestOptions._request = request;\n            this._requestOptions.cache = options.cache;\n            this._requestOptions.body = options.body;\n            this._prepareCache(options.cache);\n        }\n        // Cache support\n        const fn = options.cache ? this._createCacheableRequest : request;\n        try {\n            // We can't do `await fn(...)`,\n            // because stream `error` event can be emitted before `Promise.resolve()`.\n            let requestOrResponse = fn(url, this._requestOptions);\n            if (is.promise(requestOrResponse)) {\n                requestOrResponse = await requestOrResponse;\n            }\n            // Fallback\n            if (is.undefined(requestOrResponse)) {\n                requestOrResponse = options.getFallbackRequestFunction()(url, this._requestOptions);\n                if (is.promise(requestOrResponse)) {\n                    requestOrResponse = await requestOrResponse;\n                }\n            }\n            if (isClientRequest(requestOrResponse)) {\n                this._onRequest(requestOrResponse);\n            }\n            else if (this.writable) {\n                this.once('finish', () => {\n                    void this._onResponse(requestOrResponse);\n                });\n                this._sendBody();\n            }\n            else {\n                void this._onResponse(requestOrResponse);\n            }\n        }\n        catch (error) {\n            if (error instanceof CacheError) {\n                throw new CacheError$1(error, this);\n            }\n            throw error;\n        }\n    }\n    async _error(error) {\n        try {\n            if (error instanceof HTTPError && !this.options.throwHttpErrors) {\n                // This branch can be reached only when using the Promise API\n                // Skip calling the hooks on purpose.\n                // See https://github.com/sindresorhus/got/issues/2103\n            }\n            else {\n                for (const hook of this.options.hooks.beforeError) {\n                    // eslint-disable-next-line no-await-in-loop\n                    error = await hook(error);\n                }\n            }\n        }\n        catch (error_) {\n            error = new RequestError$1(error_.message, error_, this);\n        }\n        this.destroy(error);\n    }\n    _writeRequest(chunk, encoding, callback) {\n        if (!this._request || this._request.destroyed) {\n            // Probably the `ClientRequest` instance will throw\n            return;\n        }\n        this._request.write(chunk, encoding, (error) => {\n            // The `!destroyed` check is required to prevent `uploadProgress` being emitted after the stream was destroyed\n            if (!error && !this._request.destroyed) {\n                this._uploadedSize += node_buffer.Buffer.byteLength(chunk, encoding);\n                const progress = this.uploadProgress;\n                if (progress.percent < 1) {\n                    this.emit('uploadProgress', progress);\n                }\n            }\n            callback(error);\n        });\n    }\n    /**\n    The remote IP address.\n    */\n    get ip() {\n        return this.socket?.remoteAddress;\n    }\n    /**\n    Indicates whether the request has been aborted or not.\n    */\n    get isAborted() {\n        return this._aborted;\n    }\n    get socket() {\n        return this._request?.socket ?? undefined;\n    }\n    /**\n    Progress event for downloading (receiving a response).\n    */\n    get downloadProgress() {\n        let percent;\n        if (this._responseSize) {\n            percent = this._downloadedSize / this._responseSize;\n        }\n        else if (this._responseSize === this._downloadedSize) {\n            percent = 1;\n        }\n        else {\n            percent = 0;\n        }\n        return {\n            percent,\n            transferred: this._downloadedSize,\n            total: this._responseSize,\n        };\n    }\n    /**\n    Progress event for uploading (sending a request).\n    */\n    get uploadProgress() {\n        let percent;\n        if (this._bodySize) {\n            percent = this._uploadedSize / this._bodySize;\n        }\n        else if (this._bodySize === this._uploadedSize) {\n            percent = 1;\n        }\n        else {\n            percent = 0;\n        }\n        return {\n            percent,\n            transferred: this._uploadedSize,\n            total: this._bodySize,\n        };\n    }\n    /**\n    The object contains the following properties:\n\n    - `start` - Time when the request started.\n    - `socket` - Time when a socket was assigned to the request.\n    - `lookup` - Time when the DNS lookup finished.\n    - `connect` - Time when the socket successfully connected.\n    - `secureConnect` - Time when the socket securely connected.\n    - `upload` - Time when the request finished uploading.\n    - `response` - Time when the request fired `response` event.\n    - `end` - Time when the response fired `end` event.\n    - `error` - Time when the request fired `error` event.\n    - `abort` - Time when the request fired `abort` event.\n    - `phases`\n        - `wait` - `timings.socket - timings.start`\n        - `dns` - `timings.lookup - timings.socket`\n        - `tcp` - `timings.connect - timings.lookup`\n        - `tls` - `timings.secureConnect - timings.connect`\n        - `request` - `timings.upload - (timings.secureConnect || timings.connect)`\n        - `firstByte` - `timings.response - timings.upload`\n        - `download` - `timings.end - timings.response`\n        - `total` - `(timings.end || timings.error || timings.abort) - timings.start`\n\n    If something has not been measured yet, it will be `undefined`.\n\n    __Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch.\n    */\n    get timings() {\n        return this._request?.timings;\n    }\n    /**\n    Whether the response was retrieved from the cache.\n    */\n    get isFromCache() {\n        return this._isFromCache;\n    }\n    get reusedSocket() {\n        return this._request?.reusedSocket;\n    }\n}\n\n/**\nAn error to be thrown when the request is aborted with `.cancel()`.\n*/\nclass CancelError extends RequestError$1 {\n    constructor(request) {\n        super('Promise was canceled', {}, request);\n        this.name = 'CancelError';\n        this.code = 'ERR_CANCELED';\n    }\n    /**\n    Whether the promise is canceled.\n    */\n    get isCanceled() {\n        return true;\n    }\n}\n\nconst proxiedRequestEvents = [\n    'request',\n    'response',\n    'redirect',\n    'uploadProgress',\n    'downloadProgress',\n];\nfunction asPromise(firstRequest) {\n    let globalRequest;\n    let globalResponse;\n    let normalizedOptions;\n    const emitter = new EventEmitter$2.EventEmitter();\n    const promise = new PCancelable((resolve, reject, onCancel) => {\n        onCancel(() => {\n            globalRequest.destroy();\n        });\n        onCancel.shouldReject = false;\n        onCancel(() => {\n            reject(new CancelError(globalRequest));\n        });\n        const makeRequest = (retryCount) => {\n            // Errors when a new request is made after the promise settles.\n            // Used to detect a race condition.\n            // See https://github.com/sindresorhus/got/issues/1489\n            onCancel(() => { });\n            const request = firstRequest ?? new Request(undefined, undefined, normalizedOptions);\n            request.retryCount = retryCount;\n            request._noPipe = true;\n            globalRequest = request;\n            request.once('response', async (response) => {\n                // Parse body\n                const contentEncoding = (response.headers['content-encoding'] ?? '').toLowerCase();\n                const isCompressed = contentEncoding === 'gzip' || contentEncoding === 'deflate' || contentEncoding === 'br';\n                const { options } = request;\n                if (isCompressed && !options.decompress) {\n                    response.body = response.rawBody;\n                }\n                else {\n                    try {\n                        response.body = parseBody(response, options.responseType, options.parseJson, options.encoding);\n                    }\n                    catch (error) {\n                        // Fall back to `utf8`\n                        response.body = response.rawBody.toString();\n                        if (isResponseOk(response)) {\n                            request._beforeError(error);\n                            return;\n                        }\n                    }\n                }\n                try {\n                    const hooks = options.hooks.afterResponse;\n                    for (const [index, hook] of hooks.entries()) {\n                        // @ts-expect-error TS doesn't notice that CancelableRequest is a Promise\n                        // eslint-disable-next-line no-await-in-loop\n                        response = await hook(response, async (updatedOptions) => {\n                            options.merge(updatedOptions);\n                            options.prefixUrl = '';\n                            if (updatedOptions.url) {\n                                options.url = updatedOptions.url;\n                            }\n                            // Remove any further hooks for that request, because we'll call them anyway.\n                            // The loop continues. We don't want duplicates (asPromise recursion).\n                            options.hooks.afterResponse = options.hooks.afterResponse.slice(0, index);\n                            throw new RetryError(request);\n                        });\n                        if (!(is.object(response) && is.number(response.statusCode) && !is.nullOrUndefined(response.body))) {\n                            throw new TypeError('The `afterResponse` hook returned an invalid value');\n                        }\n                    }\n                }\n                catch (error) {\n                    request._beforeError(error);\n                    return;\n                }\n                globalResponse = response;\n                if (!isResponseOk(response)) {\n                    request._beforeError(new HTTPError(response));\n                    return;\n                }\n                request.destroy();\n                resolve(request.options.resolveBodyOnly ? response.body : response);\n            });\n            const onError = (error) => {\n                if (promise.isCanceled) {\n                    return;\n                }\n                const { options } = request;\n                if (error instanceof HTTPError && !options.throwHttpErrors) {\n                    const { response } = error;\n                    request.destroy();\n                    resolve(request.options.resolveBodyOnly ? response.body : response);\n                    return;\n                }\n                reject(error);\n            };\n            request.once('error', onError);\n            const previousBody = request.options?.body;\n            request.once('retry', (newRetryCount, error) => {\n                firstRequest = undefined;\n                const newBody = request.options.body;\n                if (previousBody === newBody && is.nodeStream(newBody)) {\n                    error.message = 'Cannot retry with consumed body stream';\n                    onError(error);\n                    return;\n                }\n                // This is needed! We need to reuse `request.options` because they can get modified!\n                // For example, by calling `promise.json()`.\n                normalizedOptions = request.options;\n                makeRequest(newRetryCount);\n            });\n            proxyEvents$2(request, emitter, proxiedRequestEvents);\n            if (is.undefined(firstRequest)) {\n                void request.flush();\n            }\n        };\n        makeRequest(0);\n    });\n    promise.on = (event, fn) => {\n        emitter.on(event, fn);\n        return promise;\n    };\n    promise.off = (event, fn) => {\n        emitter.off(event, fn);\n        return promise;\n    };\n    const shortcut = (responseType) => {\n        const newPromise = (async () => {\n            // Wait until downloading has ended\n            await promise;\n            const { options } = globalResponse.request;\n            return parseBody(globalResponse, responseType, options.parseJson, options.encoding);\n        })();\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));\n        return newPromise;\n    };\n    promise.json = () => {\n        if (globalRequest.options) {\n            const { headers } = globalRequest.options;\n            if (!globalRequest.writableFinished && !('accept' in headers)) {\n                headers.accept = 'application/json';\n            }\n        }\n        return shortcut('json');\n    };\n    promise.buffer = () => shortcut('buffer');\n    promise.text = () => shortcut('text');\n    return promise;\n}\n\n// The `delay` package weighs 10KB (!)\nconst delay = async (ms) => new Promise(resolve => {\n    setTimeout(resolve, ms);\n});\nconst isGotInstance = (value) => is.function_(value);\nconst aliases = [\n    'get',\n    'post',\n    'put',\n    'patch',\n    'head',\n    'delete',\n];\nconst create = (defaults) => {\n    defaults = {\n        options: new Options(undefined, undefined, defaults.options),\n        handlers: [...defaults.handlers],\n        mutableDefaults: defaults.mutableDefaults,\n    };\n    Object.defineProperty(defaults, 'mutableDefaults', {\n        enumerable: true,\n        configurable: false,\n        writable: false,\n    });\n    // Got interface\n    const got = ((url, options, defaultOptions = defaults.options) => {\n        const request = new Request(url, options, defaultOptions);\n        let promise;\n        const lastHandler = (normalized) => {\n            // Note: `options` is `undefined` when `new Options(...)` fails\n            request.options = normalized;\n            request._noPipe = !normalized.isStream;\n            void request.flush();\n            if (normalized.isStream) {\n                return request;\n            }\n            if (!promise) {\n                promise = asPromise(request);\n            }\n            return promise;\n        };\n        let iteration = 0;\n        const iterateHandlers = (newOptions) => {\n            const handler = defaults.handlers[iteration++] ?? lastHandler;\n            const result = handler(newOptions, iterateHandlers);\n            if (is.promise(result) && !request.options.isStream) {\n                if (!promise) {\n                    promise = asPromise(request);\n                }\n                if (result !== promise) {\n                    const descriptors = Object.getOwnPropertyDescriptors(promise);\n                    for (const key in descriptors) {\n                        if (key in result) {\n                            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                            delete descriptors[key];\n                        }\n                    }\n                    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n                    Object.defineProperties(result, descriptors);\n                    result.cancel = promise.cancel;\n                }\n            }\n            return result;\n        };\n        return iterateHandlers(request.options);\n    });\n    got.extend = (...instancesOrOptions) => {\n        const options = new Options(undefined, undefined, defaults.options);\n        const handlers = [...defaults.handlers];\n        let mutableDefaults;\n        for (const value of instancesOrOptions) {\n            if (isGotInstance(value)) {\n                options.merge(value.defaults.options);\n                handlers.push(...value.defaults.handlers);\n                mutableDefaults = value.defaults.mutableDefaults;\n            }\n            else {\n                options.merge(value);\n                if (value.handlers) {\n                    handlers.push(...value.handlers);\n                }\n                mutableDefaults = value.mutableDefaults;\n            }\n        }\n        return create({\n            options,\n            handlers,\n            mutableDefaults: Boolean(mutableDefaults),\n        });\n    };\n    // Pagination\n    const paginateEach = (async function* (url, options) {\n        let normalizedOptions = new Options(url, options, defaults.options);\n        normalizedOptions.resolveBodyOnly = false;\n        const { pagination } = normalizedOptions;\n        assert$1.function_(pagination.transform);\n        assert$1.function_(pagination.shouldContinue);\n        assert$1.function_(pagination.filter);\n        assert$1.function_(pagination.paginate);\n        assert$1.number(pagination.countLimit);\n        assert$1.number(pagination.requestLimit);\n        assert$1.number(pagination.backoff);\n        const allItems = [];\n        let { countLimit } = pagination;\n        let numberOfRequests = 0;\n        while (numberOfRequests < pagination.requestLimit) {\n            if (numberOfRequests !== 0) {\n                // eslint-disable-next-line no-await-in-loop\n                await delay(pagination.backoff);\n            }\n            // eslint-disable-next-line no-await-in-loop\n            const response = (await got(undefined, undefined, normalizedOptions));\n            // eslint-disable-next-line no-await-in-loop\n            const parsed = await pagination.transform(response);\n            const currentItems = [];\n            assert$1.array(parsed);\n            for (const item of parsed) {\n                if (pagination.filter({ item, currentItems, allItems })) {\n                    if (!pagination.shouldContinue({ item, currentItems, allItems })) {\n                        return;\n                    }\n                    yield item;\n                    if (pagination.stackAllItems) {\n                        allItems.push(item);\n                    }\n                    currentItems.push(item);\n                    if (--countLimit <= 0) {\n                        return;\n                    }\n                }\n            }\n            const optionsToMerge = pagination.paginate({\n                response,\n                currentItems,\n                allItems,\n            });\n            if (optionsToMerge === false) {\n                return;\n            }\n            if (optionsToMerge === response.request.options) {\n                normalizedOptions = response.request.options;\n            }\n            else {\n                normalizedOptions.merge(optionsToMerge);\n                assert$1.any([is.urlInstance, is.undefined], optionsToMerge.url);\n                if (optionsToMerge.url !== undefined) {\n                    normalizedOptions.prefixUrl = '';\n                    normalizedOptions.url = optionsToMerge.url;\n                }\n            }\n            numberOfRequests++;\n        }\n    });\n    got.paginate = paginateEach;\n    got.paginate.all = (async (url, options) => {\n        const results = [];\n        for await (const item of paginateEach(url, options)) {\n            results.push(item);\n        }\n        return results;\n    });\n    // For those who like very descriptive names\n    got.paginate.each = paginateEach;\n    // Stream API\n    got.stream = ((url, options) => got(url, { ...options, isStream: true }));\n    // Shortcuts\n    for (const method of aliases) {\n        got[method] = ((url, options) => got(url, { ...options, method }));\n        got.stream[method] = ((url, options) => got(url, { ...options, method, isStream: true }));\n    }\n    if (!defaults.mutableDefaults) {\n        Object.freeze(defaults.handlers);\n        defaults.options.freeze();\n    }\n    Object.defineProperty(got, 'defaults', {\n        value: defaults,\n        writable: false,\n        configurable: false,\n        enumerable: true,\n    });\n    return got;\n};\n\nconst defaults = {\n    options: new Options(),\n    handlers: [],\n    mutableDefaults: false,\n};\nconst got = create(defaults);\n\nfunction escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n\nfunction trimRepeated(string, target) {\n\tif (typeof string !== 'string' || typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\tconst regex = new RegExp(`(?:${escapeStringRegexp(target)}){2,}`, 'g');\n\n\treturn string.replace(regex, target);\n}\n\n/* eslint-disable no-control-regex */\n\nfunction filenameReservedRegex() {\n\treturn /[<>:\"/\\\\|?*\\u0000-\\u001F]/g;\n}\n\nfunction windowsReservedNameRegex() {\n\treturn /^(con|prn|aux|nul|com\\d|lpt\\d)$/i;\n}\n\nfunction stripOuter(string, substring) {\n\tif (typeof string !== 'string' || typeof substring !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\tif (string.startsWith(substring)) {\n\t\tstring = string.slice(substring.length);\n\t}\n\n\tif (string.endsWith(substring)) {\n\t\tstring = string.slice(0, -substring.length);\n\t}\n\n\treturn string;\n}\n\n// Doesn't make sense to have longer filenames\nconst MAX_FILENAME_LENGTH = 100;\n\nconst reControlChars = /[\\u0000-\\u001F\\u0080-\\u009F]/g; // eslint-disable-line no-control-regex\nconst reRelativePath = /^\\.+(\\\\|\\/)|^\\.+$/;\nconst reTrailingPeriods = /\\.+$/;\n\nfunction filenamify(string, options = {}) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\tconst replacement = options.replacement === undefined ? '!' : options.replacement;\n\n\tif (filenameReservedRegex().test(replacement) && reControlChars.test(replacement)) {\n\t\tthrow new Error('Replacement string cannot contain reserved filename characters');\n\t}\n\n\tstring = string.normalize('NFD');\n\tstring = string.replace(reRelativePath, replacement);\n\tstring = string.replace(filenameReservedRegex(), replacement);\n\tstring = string.replace(reControlChars, replacement);\n\tstring = string.replace(reTrailingPeriods, '');\n\n\tif (replacement.length > 0) {\n\t\tconst startedWithDot = string[0] === '.';\n\n\t\tstring = trimRepeated(string, replacement);\n\t\tstring = string.length > 1 ? stripOuter(string, replacement) : string;\n\n\t\t// We removed the whole filename\n\t\tif (!startedWithDot && string[0] === '.') {\n\t\t\tstring = replacement + string;\n\t\t}\n\n\t\t// We removed the whole extension\n\t\tif (string[string.length - 1] === '.') {\n\t\t\tstring += replacement;\n\t\t}\n\t}\n\n\tstring = windowsReservedNameRegex().test(string) ? string + replacement : string;\n\tconst allowedLength = typeof options.maxLength === 'number' ? options.maxLength : MAX_FILENAME_LENGTH;\n\tif (string.length > allowedLength) {\n\t\tconst extensionIndex = string.lastIndexOf('.');\n\t\tif (extensionIndex === -1) {\n\t\t\tstring = string.slice(0, allowedLength);\n\t\t} else {\n\t\t\tconst filename = string.slice(0, extensionIndex);\n\t\t\tconst extension = string.slice(extensionIndex);\n\t\t\tstring = filename.slice(0, Math.max(1, allowedLength - extension.length)) + extension;\n\t\t}\n\t}\n\n\treturn string;\n}\n\nvar sha256$1 = {exports: {}};\n\nvar core = {exports: {}};\n\nvar _nodeResolve_empty = {};\n\nvar _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    'default': _nodeResolve_empty\n});\n\nvar require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);\n\nvar hasRequiredCore;\n\nfunction requireCore () {\n\tif (hasRequiredCore) return core.exports;\n\thasRequiredCore = 1;\n\t(function (module, exports) {\n(function (root, factory) {\n\t\t\t{\n\t\t\t\t// CommonJS\n\t\t\t\tmodule.exports = factory();\n\t\t\t}\n\t\t}(commonjsGlobal, function () {\n\n\t\t\t/*globals window, global, require*/\n\n\t\t\t/**\n\t\t\t * CryptoJS core components.\n\t\t\t */\n\t\t\tvar CryptoJS = CryptoJS || (function (Math, undefined$1) {\n\n\t\t\t    var crypto;\n\n\t\t\t    // Native crypto from window (Browser)\n\t\t\t    if (typeof window !== 'undefined' && window.crypto) {\n\t\t\t        crypto = window.crypto;\n\t\t\t    }\n\n\t\t\t    // Native crypto in web worker (Browser)\n\t\t\t    if (typeof self !== 'undefined' && self.crypto) {\n\t\t\t        crypto = self.crypto;\n\t\t\t    }\n\n\t\t\t    // Native crypto from worker\n\t\t\t    if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t\t\t        crypto = globalThis.crypto;\n\t\t\t    }\n\n\t\t\t    // Native (experimental IE 11) crypto from window (Browser)\n\t\t\t    if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t\t\t        crypto = window.msCrypto;\n\t\t\t    }\n\n\t\t\t    // Native crypto from global (NodeJS)\n\t\t\t    if (!crypto && typeof commonjsGlobal !== 'undefined' && commonjsGlobal.crypto) {\n\t\t\t        crypto = commonjsGlobal.crypto;\n\t\t\t    }\n\n\t\t\t    // Native crypto import via require (NodeJS)\n\t\t\t    if (!crypto && typeof commonjsRequire === 'function') {\n\t\t\t        try {\n\t\t\t            crypto = require$$0;\n\t\t\t        } catch (err) {}\n\t\t\t    }\n\n\t\t\t    /*\n\t\t\t     * Cryptographically secure pseudorandom number generator\n\t\t\t     *\n\t\t\t     * As Math.random() is cryptographically not safe to use\n\t\t\t     */\n\t\t\t    var cryptoSecureRandomInt = function () {\n\t\t\t        if (crypto) {\n\t\t\t            // Use getRandomValues method (Browser)\n\t\t\t            if (typeof crypto.getRandomValues === 'function') {\n\t\t\t                try {\n\t\t\t                    return crypto.getRandomValues(new Uint32Array(1))[0];\n\t\t\t                } catch (err) {}\n\t\t\t            }\n\n\t\t\t            // Use randomBytes method (NodeJS)\n\t\t\t            if (typeof crypto.randomBytes === 'function') {\n\t\t\t                try {\n\t\t\t                    return crypto.randomBytes(4).readInt32LE();\n\t\t\t                } catch (err) {}\n\t\t\t            }\n\t\t\t        }\n\n\t\t\t        throw new Error('Native crypto module could not be used to get secure random number.');\n\t\t\t    };\n\n\t\t\t    /*\n\t\t\t     * Local polyfill of Object.create\n\n\t\t\t     */\n\t\t\t    var create = Object.create || (function () {\n\t\t\t        function F() {}\n\n\t\t\t        return function (obj) {\n\t\t\t            var subtype;\n\n\t\t\t            F.prototype = obj;\n\n\t\t\t            subtype = new F();\n\n\t\t\t            F.prototype = null;\n\n\t\t\t            return subtype;\n\t\t\t        };\n\t\t\t    }());\n\n\t\t\t    /**\n\t\t\t     * CryptoJS namespace.\n\t\t\t     */\n\t\t\t    var C = {};\n\n\t\t\t    /**\n\t\t\t     * Library namespace.\n\t\t\t     */\n\t\t\t    var C_lib = C.lib = {};\n\n\t\t\t    /**\n\t\t\t     * Base object for prototypal inheritance.\n\t\t\t     */\n\t\t\t    var Base = C_lib.Base = (function () {\n\n\n\t\t\t        return {\n\t\t\t            /**\n\t\t\t             * Creates a new object that inherits from this object.\n\t\t\t             *\n\t\t\t             * @param {Object} overrides Properties to copy into the new object.\n\t\t\t             *\n\t\t\t             * @return {Object} The new object.\n\t\t\t             *\n\t\t\t             * @static\n\t\t\t             *\n\t\t\t             * @example\n\t\t\t             *\n\t\t\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t\t\t             *         field: 'value',\n\t\t\t             *\n\t\t\t             *         method: function () {\n\t\t\t             *         }\n\t\t\t             *     });\n\t\t\t             */\n\t\t\t            extend: function (overrides) {\n\t\t\t                // Spawn\n\t\t\t                var subtype = create(this);\n\n\t\t\t                // Augment\n\t\t\t                if (overrides) {\n\t\t\t                    subtype.mixIn(overrides);\n\t\t\t                }\n\n\t\t\t                // Create default initializer\n\t\t\t                if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t\t\t                    subtype.init = function () {\n\t\t\t                        subtype.$super.init.apply(this, arguments);\n\t\t\t                    };\n\t\t\t                }\n\n\t\t\t                // Initializer's prototype is the subtype object\n\t\t\t                subtype.init.prototype = subtype;\n\n\t\t\t                // Reference supertype\n\t\t\t                subtype.$super = this;\n\n\t\t\t                return subtype;\n\t\t\t            },\n\n\t\t\t            /**\n\t\t\t             * Extends this object and runs the init method.\n\t\t\t             * Arguments to create() will be passed to init().\n\t\t\t             *\n\t\t\t             * @return {Object} The new object.\n\t\t\t             *\n\t\t\t             * @static\n\t\t\t             *\n\t\t\t             * @example\n\t\t\t             *\n\t\t\t             *     var instance = MyType.create();\n\t\t\t             */\n\t\t\t            create: function () {\n\t\t\t                var instance = this.extend();\n\t\t\t                instance.init.apply(instance, arguments);\n\n\t\t\t                return instance;\n\t\t\t            },\n\n\t\t\t            /**\n\t\t\t             * Initializes a newly created object.\n\t\t\t             * Override this method to add some logic when your objects are created.\n\t\t\t             *\n\t\t\t             * @example\n\t\t\t             *\n\t\t\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t\t\t             *         init: function () {\n\t\t\t             *             // ...\n\t\t\t             *         }\n\t\t\t             *     });\n\t\t\t             */\n\t\t\t            init: function () {\n\t\t\t            },\n\n\t\t\t            /**\n\t\t\t             * Copies properties into this object.\n\t\t\t             *\n\t\t\t             * @param {Object} properties The properties to mix in.\n\t\t\t             *\n\t\t\t             * @example\n\t\t\t             *\n\t\t\t             *     MyType.mixIn({\n\t\t\t             *         field: 'value'\n\t\t\t             *     });\n\t\t\t             */\n\t\t\t            mixIn: function (properties) {\n\t\t\t                for (var propertyName in properties) {\n\t\t\t                    if (properties.hasOwnProperty(propertyName)) {\n\t\t\t                        this[propertyName] = properties[propertyName];\n\t\t\t                    }\n\t\t\t                }\n\n\t\t\t                // IE won't copy toString using the loop above\n\t\t\t                if (properties.hasOwnProperty('toString')) {\n\t\t\t                    this.toString = properties.toString;\n\t\t\t                }\n\t\t\t            },\n\n\t\t\t            /**\n\t\t\t             * Creates a copy of this object.\n\t\t\t             *\n\t\t\t             * @return {Object} The clone.\n\t\t\t             *\n\t\t\t             * @example\n\t\t\t             *\n\t\t\t             *     var clone = instance.clone();\n\t\t\t             */\n\t\t\t            clone: function () {\n\t\t\t                return this.init.prototype.extend(this);\n\t\t\t            }\n\t\t\t        };\n\t\t\t    }());\n\n\t\t\t    /**\n\t\t\t     * An array of 32-bit words.\n\t\t\t     *\n\t\t\t     * @property {Array} words The array of 32-bit words.\n\t\t\t     * @property {number} sigBytes The number of significant bytes in this word array.\n\t\t\t     */\n\t\t\t    var WordArray = C_lib.WordArray = Base.extend({\n\t\t\t        /**\n\t\t\t         * Initializes a newly created word array.\n\t\t\t         *\n\t\t\t         * @param {Array} words (Optional) An array of 32-bit words.\n\t\t\t         * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var wordArray = CryptoJS.lib.WordArray.create();\n\t\t\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t\t\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t\t\t         */\n\t\t\t        init: function (words, sigBytes) {\n\t\t\t            words = this.words = words || [];\n\n\t\t\t            if (sigBytes != undefined$1) {\n\t\t\t                this.sigBytes = sigBytes;\n\t\t\t            } else {\n\t\t\t                this.sigBytes = words.length * 4;\n\t\t\t            }\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Converts this word array to a string.\n\t\t\t         *\n\t\t\t         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t\t\t         *\n\t\t\t         * @return {string} The stringified word array.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var string = wordArray + '';\n\t\t\t         *     var string = wordArray.toString();\n\t\t\t         *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t\t\t         */\n\t\t\t        toString: function (encoder) {\n\t\t\t            return (encoder || Hex).stringify(this);\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Concatenates a word array to this word array.\n\t\t\t         *\n\t\t\t         * @param {WordArray} wordArray The word array to append.\n\t\t\t         *\n\t\t\t         * @return {WordArray} This word array.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     wordArray1.concat(wordArray2);\n\t\t\t         */\n\t\t\t        concat: function (wordArray) {\n\t\t\t            // Shortcuts\n\t\t\t            var thisWords = this.words;\n\t\t\t            var thatWords = wordArray.words;\n\t\t\t            var thisSigBytes = this.sigBytes;\n\t\t\t            var thatSigBytes = wordArray.sigBytes;\n\n\t\t\t            // Clamp excess bits\n\t\t\t            this.clamp();\n\n\t\t\t            // Concat\n\t\t\t            if (thisSigBytes % 4) {\n\t\t\t                // Copy one byte at a time\n\t\t\t                for (var i = 0; i < thatSigBytes; i++) {\n\t\t\t                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t\t\t                }\n\t\t\t            } else {\n\t\t\t                // Copy one word at a time\n\t\t\t                for (var j = 0; j < thatSigBytes; j += 4) {\n\t\t\t                    thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t\t\t                }\n\t\t\t            }\n\t\t\t            this.sigBytes += thatSigBytes;\n\n\t\t\t            // Chainable\n\t\t\t            return this;\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Removes insignificant bits.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     wordArray.clamp();\n\t\t\t         */\n\t\t\t        clamp: function () {\n\t\t\t            // Shortcuts\n\t\t\t            var words = this.words;\n\t\t\t            var sigBytes = this.sigBytes;\n\n\t\t\t            // Clamp\n\t\t\t            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t\t\t            words.length = Math.ceil(sigBytes / 4);\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Creates a copy of this word array.\n\t\t\t         *\n\t\t\t         * @return {WordArray} The clone.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var clone = wordArray.clone();\n\t\t\t         */\n\t\t\t        clone: function () {\n\t\t\t            var clone = Base.clone.call(this);\n\t\t\t            clone.words = this.words.slice(0);\n\n\t\t\t            return clone;\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Creates a word array filled with random bytes.\n\t\t\t         *\n\t\t\t         * @param {number} nBytes The number of random bytes to generate.\n\t\t\t         *\n\t\t\t         * @return {WordArray} The random word array.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var wordArray = CryptoJS.lib.WordArray.random(16);\n\t\t\t         */\n\t\t\t        random: function (nBytes) {\n\t\t\t            var words = [];\n\n\t\t\t            for (var i = 0; i < nBytes; i += 4) {\n\t\t\t                words.push(cryptoSecureRandomInt());\n\t\t\t            }\n\n\t\t\t            return new WordArray.init(words, nBytes);\n\t\t\t        }\n\t\t\t    });\n\n\t\t\t    /**\n\t\t\t     * Encoder namespace.\n\t\t\t     */\n\t\t\t    var C_enc = C.enc = {};\n\n\t\t\t    /**\n\t\t\t     * Hex encoding strategy.\n\t\t\t     */\n\t\t\t    var Hex = C_enc.Hex = {\n\t\t\t        /**\n\t\t\t         * Converts a word array to a hex string.\n\t\t\t         *\n\t\t\t         * @param {WordArray} wordArray The word array.\n\t\t\t         *\n\t\t\t         * @return {string} The hex string.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t\t\t         */\n\t\t\t        stringify: function (wordArray) {\n\t\t\t            // Shortcuts\n\t\t\t            var words = wordArray.words;\n\t\t\t            var sigBytes = wordArray.sigBytes;\n\n\t\t\t            // Convert\n\t\t\t            var hexChars = [];\n\t\t\t            for (var i = 0; i < sigBytes; i++) {\n\t\t\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t                hexChars.push((bite >>> 4).toString(16));\n\t\t\t                hexChars.push((bite & 0x0f).toString(16));\n\t\t\t            }\n\n\t\t\t            return hexChars.join('');\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Converts a hex string to a word array.\n\t\t\t         *\n\t\t\t         * @param {string} hexStr The hex string.\n\t\t\t         *\n\t\t\t         * @return {WordArray} The word array.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t\t\t         */\n\t\t\t        parse: function (hexStr) {\n\t\t\t            // Shortcut\n\t\t\t            var hexStrLength = hexStr.length;\n\n\t\t\t            // Convert\n\t\t\t            var words = [];\n\t\t\t            for (var i = 0; i < hexStrLength; i += 2) {\n\t\t\t                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t\t\t            }\n\n\t\t\t            return new WordArray.init(words, hexStrLength / 2);\n\t\t\t        }\n\t\t\t    };\n\n\t\t\t    /**\n\t\t\t     * Latin1 encoding strategy.\n\t\t\t     */\n\t\t\t    var Latin1 = C_enc.Latin1 = {\n\t\t\t        /**\n\t\t\t         * Converts a word array to a Latin1 string.\n\t\t\t         *\n\t\t\t         * @param {WordArray} wordArray The word array.\n\t\t\t         *\n\t\t\t         * @return {string} The Latin1 string.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t\t\t         */\n\t\t\t        stringify: function (wordArray) {\n\t\t\t            // Shortcuts\n\t\t\t            var words = wordArray.words;\n\t\t\t            var sigBytes = wordArray.sigBytes;\n\n\t\t\t            // Convert\n\t\t\t            var latin1Chars = [];\n\t\t\t            for (var i = 0; i < sigBytes; i++) {\n\t\t\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t                latin1Chars.push(String.fromCharCode(bite));\n\t\t\t            }\n\n\t\t\t            return latin1Chars.join('');\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Converts a Latin1 string to a word array.\n\t\t\t         *\n\t\t\t         * @param {string} latin1Str The Latin1 string.\n\t\t\t         *\n\t\t\t         * @return {WordArray} The word array.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t\t\t         */\n\t\t\t        parse: function (latin1Str) {\n\t\t\t            // Shortcut\n\t\t\t            var latin1StrLength = latin1Str.length;\n\n\t\t\t            // Convert\n\t\t\t            var words = [];\n\t\t\t            for (var i = 0; i < latin1StrLength; i++) {\n\t\t\t                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t\t\t            }\n\n\t\t\t            return new WordArray.init(words, latin1StrLength);\n\t\t\t        }\n\t\t\t    };\n\n\t\t\t    /**\n\t\t\t     * UTF-8 encoding strategy.\n\t\t\t     */\n\t\t\t    var Utf8 = C_enc.Utf8 = {\n\t\t\t        /**\n\t\t\t         * Converts a word array to a UTF-8 string.\n\t\t\t         *\n\t\t\t         * @param {WordArray} wordArray The word array.\n\t\t\t         *\n\t\t\t         * @return {string} The UTF-8 string.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t\t\t         */\n\t\t\t        stringify: function (wordArray) {\n\t\t\t            try {\n\t\t\t                return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t\t\t            } catch (e) {\n\t\t\t                throw new Error('Malformed UTF-8 data');\n\t\t\t            }\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Converts a UTF-8 string to a word array.\n\t\t\t         *\n\t\t\t         * @param {string} utf8Str The UTF-8 string.\n\t\t\t         *\n\t\t\t         * @return {WordArray} The word array.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t\t\t         */\n\t\t\t        parse: function (utf8Str) {\n\t\t\t            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t\t\t        }\n\t\t\t    };\n\n\t\t\t    /**\n\t\t\t     * Abstract buffered block algorithm template.\n\t\t\t     *\n\t\t\t     * The property blockSize must be implemented in a concrete subtype.\n\t\t\t     *\n\t\t\t     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t\t\t     */\n\t\t\t    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t\t\t        /**\n\t\t\t         * Resets this block algorithm's data buffer to its initial state.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     bufferedBlockAlgorithm.reset();\n\t\t\t         */\n\t\t\t        reset: function () {\n\t\t\t            // Initial values\n\t\t\t            this._data = new WordArray.init();\n\t\t\t            this._nDataBytes = 0;\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Adds new data to this block algorithm's buffer.\n\t\t\t         *\n\t\t\t         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     bufferedBlockAlgorithm._append('data');\n\t\t\t         *     bufferedBlockAlgorithm._append(wordArray);\n\t\t\t         */\n\t\t\t        _append: function (data) {\n\t\t\t            // Convert string to WordArray, else assume WordArray already\n\t\t\t            if (typeof data == 'string') {\n\t\t\t                data = Utf8.parse(data);\n\t\t\t            }\n\n\t\t\t            // Append\n\t\t\t            this._data.concat(data);\n\t\t\t            this._nDataBytes += data.sigBytes;\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Processes available data blocks.\n\t\t\t         *\n\t\t\t         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t\t\t         *\n\t\t\t         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t\t\t         *\n\t\t\t         * @return {WordArray} The processed data.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var processedData = bufferedBlockAlgorithm._process();\n\t\t\t         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t\t\t         */\n\t\t\t        _process: function (doFlush) {\n\t\t\t            var processedWords;\n\n\t\t\t            // Shortcuts\n\t\t\t            var data = this._data;\n\t\t\t            var dataWords = data.words;\n\t\t\t            var dataSigBytes = data.sigBytes;\n\t\t\t            var blockSize = this.blockSize;\n\t\t\t            var blockSizeBytes = blockSize * 4;\n\n\t\t\t            // Count blocks ready\n\t\t\t            var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t\t\t            if (doFlush) {\n\t\t\t                // Round up to include partial blocks\n\t\t\t                nBlocksReady = Math.ceil(nBlocksReady);\n\t\t\t            } else {\n\t\t\t                // Round down to include only full blocks,\n\t\t\t                // less the number of blocks that must remain in the buffer\n\t\t\t                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t\t\t            }\n\n\t\t\t            // Count words ready\n\t\t\t            var nWordsReady = nBlocksReady * blockSize;\n\n\t\t\t            // Count bytes ready\n\t\t\t            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t\t\t            // Process blocks\n\t\t\t            if (nWordsReady) {\n\t\t\t                for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t\t\t                    // Perform concrete-algorithm logic\n\t\t\t                    this._doProcessBlock(dataWords, offset);\n\t\t\t                }\n\n\t\t\t                // Remove processed words\n\t\t\t                processedWords = dataWords.splice(0, nWordsReady);\n\t\t\t                data.sigBytes -= nBytesReady;\n\t\t\t            }\n\n\t\t\t            // Return processed words\n\t\t\t            return new WordArray.init(processedWords, nBytesReady);\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Creates a copy of this object.\n\t\t\t         *\n\t\t\t         * @return {Object} The clone.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var clone = bufferedBlockAlgorithm.clone();\n\t\t\t         */\n\t\t\t        clone: function () {\n\t\t\t            var clone = Base.clone.call(this);\n\t\t\t            clone._data = this._data.clone();\n\n\t\t\t            return clone;\n\t\t\t        },\n\n\t\t\t        _minBufferSize: 0\n\t\t\t    });\n\n\t\t\t    /**\n\t\t\t     * Abstract hasher template.\n\t\t\t     *\n\t\t\t     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t\t\t     */\n\t\t\t    C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t\t\t        /**\n\t\t\t         * Configuration options.\n\t\t\t         */\n\t\t\t        cfg: Base.extend(),\n\n\t\t\t        /**\n\t\t\t         * Initializes a newly created hasher.\n\t\t\t         *\n\t\t\t         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var hasher = CryptoJS.algo.SHA256.create();\n\t\t\t         */\n\t\t\t        init: function (cfg) {\n\t\t\t            // Apply config defaults\n\t\t\t            this.cfg = this.cfg.extend(cfg);\n\n\t\t\t            // Set initial values\n\t\t\t            this.reset();\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Resets this hasher to its initial state.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     hasher.reset();\n\t\t\t         */\n\t\t\t        reset: function () {\n\t\t\t            // Reset data buffer\n\t\t\t            BufferedBlockAlgorithm.reset.call(this);\n\n\t\t\t            // Perform concrete-hasher logic\n\t\t\t            this._doReset();\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Updates this hasher with a message.\n\t\t\t         *\n\t\t\t         * @param {WordArray|string} messageUpdate The message to append.\n\t\t\t         *\n\t\t\t         * @return {Hasher} This hasher.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     hasher.update('message');\n\t\t\t         *     hasher.update(wordArray);\n\t\t\t         */\n\t\t\t        update: function (messageUpdate) {\n\t\t\t            // Append\n\t\t\t            this._append(messageUpdate);\n\n\t\t\t            // Update the hash\n\t\t\t            this._process();\n\n\t\t\t            // Chainable\n\t\t\t            return this;\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Finalizes the hash computation.\n\t\t\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t\t         *\n\t\t\t         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t\t\t         *\n\t\t\t         * @return {WordArray} The hash.\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var hash = hasher.finalize();\n\t\t\t         *     var hash = hasher.finalize('message');\n\t\t\t         *     var hash = hasher.finalize(wordArray);\n\t\t\t         */\n\t\t\t        finalize: function (messageUpdate) {\n\t\t\t            // Final message update\n\t\t\t            if (messageUpdate) {\n\t\t\t                this._append(messageUpdate);\n\t\t\t            }\n\n\t\t\t            // Perform concrete-hasher logic\n\t\t\t            var hash = this._doFinalize();\n\n\t\t\t            return hash;\n\t\t\t        },\n\n\t\t\t        blockSize: 512/32,\n\n\t\t\t        /**\n\t\t\t         * Creates a shortcut function to a hasher's object interface.\n\t\t\t         *\n\t\t\t         * @param {Hasher} hasher The hasher to create a helper for.\n\t\t\t         *\n\t\t\t         * @return {Function} The shortcut function.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t\t\t         */\n\t\t\t        _createHelper: function (hasher) {\n\t\t\t            return function (message, cfg) {\n\t\t\t                return new hasher.init(cfg).finalize(message);\n\t\t\t            };\n\t\t\t        },\n\n\t\t\t        /**\n\t\t\t         * Creates a shortcut function to the HMAC's object interface.\n\t\t\t         *\n\t\t\t         * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t\t\t         *\n\t\t\t         * @return {Function} The shortcut function.\n\t\t\t         *\n\t\t\t         * @static\n\t\t\t         *\n\t\t\t         * @example\n\t\t\t         *\n\t\t\t         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t\t\t         */\n\t\t\t        _createHmacHelper: function (hasher) {\n\t\t\t            return function (message, key) {\n\t\t\t                return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t\t\t            };\n\t\t\t        }\n\t\t\t    });\n\n\t\t\t    /**\n\t\t\t     * Algorithm namespace.\n\t\t\t     */\n\t\t\t    var C_algo = C.algo = {};\n\n\t\t\t    return C;\n\t\t\t}(Math));\n\n\n\t\t\treturn CryptoJS;\n\n\t\t}));\n} (core));\n\treturn core.exports;\n}\n\n(function (module, exports) {\n(function (root, factory) {\n\t\t{\n\t\t\t// CommonJS\n\t\t\tmodule.exports = factory(requireCore());\n\t\t}\n\t}(commonjsGlobal, function (CryptoJS) {\n\n\t\t(function (Math) {\n\t\t    // Shortcuts\n\t\t    var C = CryptoJS;\n\t\t    var C_lib = C.lib;\n\t\t    var WordArray = C_lib.WordArray;\n\t\t    var Hasher = C_lib.Hasher;\n\t\t    var C_algo = C.algo;\n\n\t\t    // Initialization and round constants tables\n\t\t    var H = [];\n\t\t    var K = [];\n\n\t\t    // Compute constants\n\t\t    (function () {\n\t\t        function isPrime(n) {\n\t\t            var sqrtN = Math.sqrt(n);\n\t\t            for (var factor = 2; factor <= sqrtN; factor++) {\n\t\t                if (!(n % factor)) {\n\t\t                    return false;\n\t\t                }\n\t\t            }\n\n\t\t            return true;\n\t\t        }\n\n\t\t        function getFractionalBits(n) {\n\t\t            return ((n - (n | 0)) * 0x100000000) | 0;\n\t\t        }\n\n\t\t        var n = 2;\n\t\t        var nPrime = 0;\n\t\t        while (nPrime < 64) {\n\t\t            if (isPrime(n)) {\n\t\t                if (nPrime < 8) {\n\t\t                    H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t\t                }\n\t\t                K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t\t                nPrime++;\n\t\t            }\n\n\t\t            n++;\n\t\t        }\n\t\t    }());\n\n\t\t    // Reusable object\n\t\t    var W = [];\n\n\t\t    /**\n\t\t     * SHA-256 hash algorithm.\n\t\t     */\n\t\t    var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t\t        _doReset: function () {\n\t\t            this._hash = new WordArray.init(H.slice(0));\n\t\t        },\n\n\t\t        _doProcessBlock: function (M, offset) {\n\t\t            // Shortcut\n\t\t            var H = this._hash.words;\n\n\t\t            // Working variables\n\t\t            var a = H[0];\n\t\t            var b = H[1];\n\t\t            var c = H[2];\n\t\t            var d = H[3];\n\t\t            var e = H[4];\n\t\t            var f = H[5];\n\t\t            var g = H[6];\n\t\t            var h = H[7];\n\n\t\t            // Computation\n\t\t            for (var i = 0; i < 64; i++) {\n\t\t                if (i < 16) {\n\t\t                    W[i] = M[offset + i] | 0;\n\t\t                } else {\n\t\t                    var gamma0x = W[i - 15];\n\t\t                    var gamma0  = ((gamma0x << 25) | (gamma0x >>> 7))  ^\n\t\t                                  ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t\t                                   (gamma0x >>> 3);\n\n\t\t                    var gamma1x = W[i - 2];\n\t\t                    var gamma1  = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t\t                                  ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t\t                                   (gamma1x >>> 10);\n\n\t\t                    W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t\t                }\n\n\t\t                var ch  = (e & f) ^ (~e & g);\n\t\t                var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t\t                var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t\t                var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7)  | (e >>> 25));\n\n\t\t                var t1 = h + sigma1 + ch + K[i] + W[i];\n\t\t                var t2 = sigma0 + maj;\n\n\t\t                h = g;\n\t\t                g = f;\n\t\t                f = e;\n\t\t                e = (d + t1) | 0;\n\t\t                d = c;\n\t\t                c = b;\n\t\t                b = a;\n\t\t                a = (t1 + t2) | 0;\n\t\t            }\n\n\t\t            // Intermediate hash value\n\t\t            H[0] = (H[0] + a) | 0;\n\t\t            H[1] = (H[1] + b) | 0;\n\t\t            H[2] = (H[2] + c) | 0;\n\t\t            H[3] = (H[3] + d) | 0;\n\t\t            H[4] = (H[4] + e) | 0;\n\t\t            H[5] = (H[5] + f) | 0;\n\t\t            H[6] = (H[6] + g) | 0;\n\t\t            H[7] = (H[7] + h) | 0;\n\t\t        },\n\n\t\t        _doFinalize: function () {\n\t\t            // Shortcuts\n\t\t            var data = this._data;\n\t\t            var dataWords = data.words;\n\n\t\t            var nBitsTotal = this._nDataBytes * 8;\n\t\t            var nBitsLeft = data.sigBytes * 8;\n\n\t\t            // Add padding\n\t\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t\t            data.sigBytes = dataWords.length * 4;\n\n\t\t            // Hash final blocks\n\t\t            this._process();\n\n\t\t            // Return final computed hash\n\t\t            return this._hash;\n\t\t        },\n\n\t\t        clone: function () {\n\t\t            var clone = Hasher.clone.call(this);\n\t\t            clone._hash = this._hash.clone();\n\n\t\t            return clone;\n\t\t        }\n\t\t    });\n\n\t\t    /**\n\t\t     * Shortcut function to the hasher's object interface.\n\t\t     *\n\t\t     * @param {WordArray|string} message The message to hash.\n\t\t     *\n\t\t     * @return {WordArray} The hash.\n\t\t     *\n\t\t     * @static\n\t\t     *\n\t\t     * @example\n\t\t     *\n\t\t     *     var hash = CryptoJS.SHA256('message');\n\t\t     *     var hash = CryptoJS.SHA256(wordArray);\n\t\t     */\n\t\t    C.SHA256 = Hasher._createHelper(SHA256);\n\n\t\t    /**\n\t\t     * Shortcut function to the HMAC's object interface.\n\t\t     *\n\t\t     * @param {WordArray|string} message The message to hash.\n\t\t     * @param {WordArray|string} key The secret key.\n\t\t     *\n\t\t     * @return {WordArray} The HMAC.\n\t\t     *\n\t\t     * @static\n\t\t     *\n\t\t     * @example\n\t\t     *\n\t\t     *     var hmac = CryptoJS.HmacSHA256(message, key);\n\t\t     */\n\t\t    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t\t}(Math));\n\n\n\t\treturn CryptoJS.SHA256;\n\n\t}));\n} (sha256$1));\n\nvar sha256 = sha256$1.exports;\n\nvar coreExports = requireCore();\n\nfunction replaceAsync(str, regex, asyncFn) {\n    return __awaiter(this, void 0, void 0, function* () {\n        /*\n        https://stackoverflow.com/a/48032528/1020973\n        It will be better to do it type-correct.\n        */\n        const promises = [];\n        str.replace(regex, (match, ...args) => {\n            const promise = asyncFn(match, ...args);\n            promises.push(promise);\n        });\n        const data = yield Promise.all(promises);\n        return str.replace(regex, () => data.shift());\n    });\n}\nfunction isUrl(link) {\n    if (link.startsWith('data:image')) {\n        return false;\n    }\n    try {\n        return Boolean(new URL(link));\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction isLocalImage(filePath) {\n    if (isUrl(filePath)) {\n        return false;\n    }\n    for (let ext of IMAGE_EXTS_LOWER) {\n        if (filePath.toLowerCase().endsWith(\".\" + ext))\n            return true;\n    }\n    return false;\n}\nfunction downloadImage(url) {\n    return __awaiter(this, void 0, void 0, function* () {\n        const res = yield got(url, { responseType: \"buffer\" });\n        return res.body;\n    });\n}\nfunction fileExtByContent(content) {\n    var _a;\n    return __awaiter(this, void 0, void 0, function* () {\n        const fileExt = (_a = (yield fileTypeFromBuffer(content))) === null || _a === void 0 ? void 0 : _a.ext;\n        // if XML, probably it is SVG\n        if (fileExt == \"xml\") {\n            const buffer = Buffer.from(content);\n            if (isSvg$1.exports(buffer))\n                return \"svg\";\n        }\n        return fileExt;\n    });\n}\nfunction cleanFileName(name) {\n    return filenamify(name).replace(FORBIDDEN_SYMBOLS_FILENAME_PATTERN, \"_\");\n}\nfunction pathJoin(dir, subpath) {\n    const result = path__default[\"default\"].join(dir, subpath);\n    // it seems that obsidian do not understand paths with backslashes in Windows, so turn them into forward slashes\n    return result.replace(/\\\\/g, \"/\");\n}\nfunction ensureFolderExists(app, folderPath) {\n    return __awaiter(this, void 0, void 0, function* () {\n        try {\n            yield app.vault.createFolder(folderPath);\n        }\n        catch (error) {\n            if (!error.message.contains(\"Folder already exists\")) {\n                throw error;\n            }\n        }\n    });\n}\nfunction genSha256(data) {\n    return sha256(arrayBufferToWordArray(data)).toString().toLowerCase();\n}\nfunction arrayBufferToWordArray(ab) {\n    const i8a = new Uint8Array(ab);\n    const a = [];\n    for (let i = 0; i < i8a.length; i += 4) {\n        a.push(i8a[i] << 24 | i8a[i + 1] << 16 | i8a[i + 2] << 8 | i8a[i + 3]);\n    }\n    return coreExports.lib.WordArray.create(a, i8a.length);\n}\nfunction getLinkFullPath(app, link) {\n    const resolvedLinks = app.metadataCache.resolvedLinks;\n    for (const noteFullPath in resolvedLinks) {\n        for (const linkFullPath in resolvedLinks[noteFullPath]) {\n            if (path__default[\"default\"].basename(linkFullPath) === path__default[\"default\"].basename(link) && linkFullPath.contains(link)) {\n                return linkFullPath;\n            }\n        }\n    }\n    return null;\n}\nfunction arraybufferEqual(buf1, buf2) {\n    if (buf1.byteLength != buf2.byteLength)\n        return false;\n    const dv1 = new Int8Array(buf1);\n    const dv2 = new Int8Array(buf2);\n    for (let i = 0; i != buf1.byteLength; i++) {\n        if (dv1[i] != dv2[i])\n            return false;\n    }\n    return true;\n}\n\nfunction imageTagProcessor(app, mediaDir) {\n    function processUrlImageTag(match, anchor, link) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // 可以接收到本地文件的link，需要判断是否是图片\n            // 如遇到重复的图片，只改链接。  后面再开发个功能，处理遗留的孤儿图片\n            // 链接不是图片，报警并继续运行即可\n            if (!isUrl(link) && !isLocalImage(link)) {\n                return match;\n            }\n            try {\n                let fileData = null;\n                if (isLocalImage(link)) {\n                    let oldFileFullPath = getLinkFullPath(app, decodeURI(link));\n                    if (!oldFileFullPath) {\n                        return match;\n                    }\n                    fileData = yield app.vault.adapter.readBinary(oldFileFullPath);\n                }\n                else {\n                    fileData = yield downloadImage(link);\n                }\n                const { newFileName, isDuplicated } = yield getNewFileName(app, mediaDir, fileData);\n                if (!isDuplicated) {\n                    yield ensureFolderExists(app, path__default[\"default\"].dirname(newFileName));\n                    yield app.vault.createBinary(newFileName, fileData);\n                }\n                if (!newFileName) {\n                    return match;\n                }\n                const newMatch = `![${anchor}](${newFileName})`;\n                if (match == newMatch) {\n                    return match;\n                }\n                console.log(`Awesome Image changed link: FROM |${link}| TO |${newFileName}|`);\n                return newMatch;\n            }\n            catch (error) {\n                console.warn(\"Image processing failed for link: \" + link, error);\n                return match;\n            }\n        });\n    }\n    return processUrlImageTag;\n}\nfunction getNewFileName(app, dir, contentData) {\n    return __awaiter(this, void 0, void 0, function* () {\n        let isDuplicated = false;\n        const fileExt = yield fileExtByContent(contentData);\n        const baseName = cleanFileName(genSha256(contentData));\n        dir = pathJoin(dir, baseName.slice(0, 1) + '/' + baseName.slice(1, 2) + '/' + baseName.slice(2, 3));\n        const suggestedName = pathJoin(dir, `${baseName}.${fileExt}`);\n        if (yield app.vault.adapter.exists(suggestedName, false)) {\n            const targetFileData = yield app.vault.adapter.readBinary(suggestedName);\n            if (arraybufferEqual(contentData, targetFileData)) {\n                isDuplicated = true;\n            }\n            else {\n                const errMsg = \"SHA256 collision happened for file: \" + suggestedName;\n                console.warn(errMsg);\n                throw new Error(errMsg);\n            }\n        }\n        return { newFileName: suggestedName, isDuplicated };\n    });\n}\n\nfunction processPage(plugin, file, silent = false) {\n    return __awaiter(this, void 0, void 0, function* () {\n        // 保证：处理后图片存到新的地方，不会清理已有图片\n        const settings = plugin.settings;\n        const content = yield plugin.app.vault.cachedRead(file);\n        const fixedContent = yield replaceAsync(content, EXTERNAL_MEDIA_LINK_PATTERN, imageTagProcessor(plugin.app, settings.mediaRootDirectory));\n        if (content != fixedContent) {\n            yield plugin.app.vault.modify(file, fixedContent);\n            if (!silent) {\n                new obsidian.Notice(`Page \"${file.path}\" has been processed, and changed.`);\n            }\n        }\n        else {\n            if (!silent) {\n                new obsidian.Notice(`Page \"${file.path}\" has been processed, but nothing was changed.`);\n            }\n        }\n    });\n}\nfunction findOrphanImages(plugin) {\n    return __awaiter(this, void 0, void 0, function* () {\n        const orphan = plugin.app.vault.getFiles()\n            .map((f) => f.path)\n            .filter((f) => {\n            return isLocalImage(f);\n        })\n            .filter((p) => {\n            return getLinkFullPath(plugin.app, p) == null;\n        });\n        const resultText = \"----below are orphaned images----\\n\" + orphan.join(\"\\n\") + \"\\n----end----\";\n        console.log(resultText);\n        navigator.clipboard.writeText(resultText).then(() => {\n            new obsidian.Notice(\"Orphaned images copied to clipboard\");\n        });\n    });\n}\nfunction processAllPages(plugin) {\n    return __awaiter(this, void 0, void 0, function* () {\n        const files = plugin.app.vault.getMarkdownFiles();\n        const includeRegex = new RegExp(plugin.settings.includedFileRegex, \"i\");\n        const matchedFiles = files\n            .filter(f => f.path.match(includeRegex))\n            .filter((f) => {\n            for (let folder of plugin.settings.excludedFolders) {\n                if (f.path.startsWith(folder)) {\n                    return false;\n                }\n            }\n            return true;\n        });\n        const pagesCount = matchedFiles.length;\n        const notice = new obsidian.Notice(`Awesome Image \\nStart processing. Total ${pagesCount} pages. `, TIMEOUT_LIKE_INFINITY);\n        for (const [index, file] of matchedFiles.entries()) {\n            if (notice) {\n                notice.setMessage(`Awesome Image: Processing \\n\"${file.path}\" \\nPage ${index} of ${pagesCount}`);\n            }\n            yield processPage(plugin, file, true);\n        }\n        if (notice) {\n            notice.setMessage(`Awesome Image: ${pagesCount} pages were processed.`);\n            setTimeout(() => {\n                notice.hide();\n            }, NOTICE_TIMEOUT);\n        }\n    });\n}\n\nclass ImageToolkitPlugin extends obsidian.Plugin {\n    constructor() {\n        super(...arguments);\n        this.imgSelector = ``;\n        this.addIcons = () => {\n            for (const icon of ICONS) {\n                obsidian.addIcon(icon.id, icon.svg);\n            }\n        };\n        this.initContainerView = (pinMode) => {\n            this.containerView = pinMode ?\n                new PinContainerView(this, \"PIN\") :\n                new MainContainerView(this, \"MAIN\");\n        };\n        this.togglePinMode = (pinMode) => {\n            this.containerView.removeOitContainerView();\n            this.initContainerView(pinMode);\n        };\n        this.clickImage = (event) => {\n            const targetEl = event.target;\n            if (!targetEl || \"IMG\" !== targetEl.tagName\n                || !this.containerView.checkHotkeySettings(event, this.settings.viewTriggerHotkey))\n                return;\n            this.containerView.renderContainerView(targetEl);\n        };\n        this.mouseoverImg = (event) => {\n            const targetEl = event.target;\n            if (!targetEl || \"IMG\" !== targetEl.tagName)\n                return;\n            // console.log('mouseoverImg......');\n            const defaultCursor = targetEl.getAttribute(\"data-oit-default-cursor\");\n            if (null === defaultCursor) {\n                targetEl.setAttribute(\"data-oit-default-cursor\", targetEl.style.cursor || \"\");\n            }\n            targetEl.style.cursor = \"zoom-in\";\n        };\n        this.mouseoutImg = (event) => {\n            const targetEl = event.target;\n            // console.log('mouseoutImg....');\n            if (!targetEl || \"IMG\" !== targetEl.tagName)\n                return;\n            targetEl.style.cursor = targetEl.getAttribute(\"data-oit-default-cursor\");\n        };\n        this.toggleViewImage = () => {\n            const viewImageEditor = this.settings.viewImageEditor; // .workspace-leaf-content[data-type='markdown'] img,.workspace-leaf-content[data-type='image'] img\n            const viewImageInCPB = this.settings.viewImageInCPB; // .community-plugin-readme img\n            const viewImageWithALink = this.settings.viewImageWithALink; // false: ... img:not(a img)\n            const viewImageOther = this.settings.viewImageOther; // #sr-flashcard-view img\n            if (this.imgSelector) {\n                document.off(\"click\", this.imgSelector, this.clickImage);\n                document.off(\"mouseover\", this.imgSelector, this.mouseoverImg);\n                document.off(\"mouseout\", this.imgSelector, this.mouseoutImg);\n            }\n            if (!viewImageOther && !viewImageEditor && !viewImageInCPB && !viewImageWithALink) {\n                return;\n            }\n            let selector = ``;\n            if (viewImageEditor) {\n                selector += (viewImageWithALink ? VIEW_IMG_SELECTOR.EDITOR_AREAS : VIEW_IMG_SELECTOR.EDITOR_AREAS_NO_LINK);\n            }\n            if (viewImageInCPB) {\n                selector += (1 < selector.length ? `,` : ``) + (viewImageWithALink ? VIEW_IMG_SELECTOR.CPB : VIEW_IMG_SELECTOR.CPB_NO_LINK);\n            }\n            if (viewImageOther) {\n                selector += (1 < selector.length ? `,` : ``) + (viewImageWithALink ? VIEW_IMG_SELECTOR.OTHER : VIEW_IMG_SELECTOR.OTHER_NO_LINK);\n            }\n            if (selector) {\n                // console.log('selector: ', selector);\n                this.imgSelector = selector;\n                activeDocument.on(\"click\", this.imgSelector, this.clickImage);\n                activeDocument.on(\"mouseover\", this.imgSelector, this.mouseoverImg);\n                activeDocument.on(\"mouseout\", this.imgSelector, this.mouseoutImg);\n            }\n        };\n    }\n    onload() {\n        return __awaiter(this, void 0, void 0, function* () {\n            console.log(\"loading \" + this.manifest.id + \" plugin v\" + this.manifest.version + \" ...\");\n            yield this.loadSettings();\n            this.addCommand({\n                id: \"process-images-active\",\n                name: \"Process images for active file\",\n                callback: () => __awaiter(this, void 0, void 0, function* () {\n                    const activeFile = this.app.workspace.getActiveFile();\n                    if (activeFile != null) {\n                        yield processPage(this, activeFile);\n                    }\n                })\n            });\n            this.addCommand({\n                id: \"process-images-all\",\n                name: \"Process images for all your notes\",\n                callback: () => __awaiter(this, void 0, void 0, function* () {\n                    yield processAllPages(this);\n                })\n            });\n            this.addCommand({\n                id: \"list-orphan-images\",\n                name: \"List images that are not linked by your notes\",\n                callback: () => __awaiter(this, void 0, void 0, function* () {\n                    yield findOrphanImages(this);\n                })\n            });\n            this.app.workspace.onLayoutReady(() => {\n                this.registerEvent(this.app.vault.on(\"create\", (file) => __awaiter(this, void 0, void 0, function* () {\n                    if (!this.settings.realTimeUpdate)\n                        return;\n                    if (!(file instanceof obsidian.TFile))\n                        return;\n                    // if the pasted image is created more than 1 second ago, ignore it\n                    const timeGapMs = (new Date().getTime()) - file.stat.ctime;\n                    if (timeGapMs > 1000)\n                        return;\n                    // only monitor image file creation\n                    if (!isLocalImage(file.name) || !file.name.startsWith(OB_PASTED_IMAGE_PREFIX))\n                        return;\n                    const oldFileName = file.path;\n                    const fileData = yield this.app.vault.readBinary(file);\n                    const { newFileName, isDuplicated } = yield getNewFileName(this.app, this.settings.mediaRootDirectory, fileData);\n                    if (isDuplicated) {\n                        const warn_txt = `IMAGE Duplicated! OPEN CONSOLE! FROM |${file.path}| TO |${newFileName}|, please edit manually`;\n                        new obsidian.Notice(warn_txt);\n                        console.warn(warn_txt);\n                        return;\n                    }\n                    const activeFile = this.app.workspace.getActiveFile();\n                    // get origin file link before renaming\n                    const linkText = this.app.fileManager.generateMarkdownLink(file, activeFile.path);\n                    yield ensureFolderExists(this.app, path__default[\"default\"].dirname(newFileName));\n                    yield this.app.fileManager.renameFile(file, newFileName); // this will not change active file content\n                    const newLinkText = this.app.fileManager.generateMarkdownLink(file, activeFile.path);\n                    const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView);\n                    if (!view || view.file.path != activeFile.path) {\n                        new obsidian.Notice(`Failed to rename ${newFileName}: no active editor`);\n                        return;\n                    }\n                    const editor = view.editor;\n                    const cursor = editor.getCursor();\n                    const line = editor.getLine(cursor.line);\n                    console.log(\"current line: \", line);\n                    editor.transaction({\n                        changes: [\n                            {\n                                from: Object.assign(Object.assign({}, cursor), { ch: 0 }),\n                                to: Object.assign(Object.assign({}, cursor), { ch: line.length }),\n                                text: line.replace(linkText, newLinkText)\n                            }\n                        ]\n                    });\n                    new obsidian.Notice(`Renamed ${oldFileName} to ${newFileName}`);\n                })));\n            });\n            // plugin settings\n            this.addSettingTab(new ImageToolkitSettingTab(this.app, this));\n            // this.registerCommands();\n            this.initContainerView(this.settings.pinMode);\n            this.toggleViewImage();\n        });\n    }\n    onunload() {\n        console.log(\"unloading obsidian-image-toolkit plugin...\");\n        this.containerView.removeOitContainerView();\n        this.containerView = null;\n        document.off(\"click\", this.imgSelector, this.clickImage);\n        document.off(\"mouseover\", this.imgSelector, this.mouseoverImg);\n        document.off(\"mouseout\", this.imgSelector, this.mouseoutImg);\n    }\n    loadSettings() {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());\n            this.addIcons();\n        });\n    }\n    saveSettings() {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.saveData(this.settings);\n        });\n    }\n    registerCommands() {\n        return __awaiter(this, void 0, void 0, function* () {\n            /* this.addCommand({\n                \"id\": \"oit-move-up-image\",\n                \"name\": \"move up the image\",\n                hotkeys: [{ modifiers: [\"Ctrl\"], key: \"ArrowUp\" }],\n                checkCallback: (checking: boolean) => {\n                    if (checking) return false;\n                    this.containerView.moveImgViewByHotkey('UP');\n                },\n            }); */\n        });\n    }\n}\n\nmodule.exports = ImageToolkitPlugin;\n\n\n/* nosourcemap */"
  },
  {
    "path": ".obsidian/plugins/awesome-image/manifest.json",
    "content": "{\n  \"id\": \"awesome-image\",\n  \"name\": \"Awesome Image\",\n  \"version\": \"0.1.3\",\n  \"minAppVersion\": \"0.15.0\",\n  \"description\": \"One-stop solution for image management.\",\n  \"author\": \"AwesomeDog\",\n  \"authorUrl\": \"https://github.com/AwesomeDog\",\n  \"isDesktopOnly\": true\n}\n"
  },
  {
    "path": ".obsidian/plugins/awesome-image/styles.css",
    "content": "body {\n    --layer-image-toolkit-popup: 1024;\n    --layer-image-toolkit-player: 1025;\n    --layer-image-toolkit-notice: 1026;\n    --layer-menu: 1027;\n}\n\n.menu {\n    z-index: var(--layer-menu);\n}\n\n.notice-container {\n    z-index: var(--layer-image-toolkit-notice);\n}\n\n.oit-main-container-view li::before {\n    margin-left: 0;\n}\n\n.image-toolkit-img-invert {\n    filter: invert(1) hue-rotate(180deg);\n    mix-blend-mode: screen;\n}\n\n.oit-main-container-view {\n    position: fixed;\n    font-size: 0;\n    line-height: 0;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    background: rgba(0, 0, 0, .6);\n    z-index: var(--layer-image-toolkit-popup);\n    display: none;\n}\n\n.oit-pin-container-view {\n    position: fixed;\n    font-size: 0;\n    line-height: 0;\n    z-index: var(--layer-image-toolkit-popup);\n    display: none;\n}\n\n.oit-main-container-view .img-container,\n.oit-pin-container-view .img-container {\n    position: absolute;\n    top: 0;\n    pointer-events: none;\n}\n\n.oit-main-container-view .img-container .img-view {\n    max-height: none;\n    pointer-events: auto;\n}\n\n.oit-pin-container-view .img-container .img-view {\n    position: absolute;\n    max-height: none;\n    pointer-events: auto;\n    box-shadow: 0 0 5px;\n}\n\n.oit-pin-container-view .img-container .img-view:hover {\n    box-shadow: 0 0 6px #55acc6;\n}\n\n.oit-main-container-view .img-default-background,\n.oit-pin-container-view .img-default-background {\n    background-position: 0 0, 5px 5px !important;\n    background-size: 10px 10px !important;\n    background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee 100%), linear-gradient(45deg, #eee 25%, #fff 25%, #fff 75%, #eee 75%, #eee 100%) !important;\n}\n\n.oit-main-container-view .img-container .img-view:hover,\n.oit-pin-container-view .img-container .img-view:hover {\n    cursor: pointer;\n}\n\n.oit-main-container-view .img-close {\n    position: absolute;\n    width: 32px;\n    height: 32px;\n    top: 0;\n    right: 0;\n    cursor: pointer;\n}\n\n.oit-main-container-view .img-tip,\n.oit-pin-container-view .img-tip {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    font-size: 12px;\n    line-height: 20px;\n    height: 20px;\n    width: 50px;\n    text-align: center;\n    color: #fff;\n    border-radius: 10px;\n    background-color: rgba(0, 0, 0, .4);\n    pointer-events: none;\n    z-index: 1;\n}\n\n.oit-main-container-view .img-player,\n.oit-pin-container-view .img-player {\n    display: none;\n    position: fixed;\n    width: 100%;\n    height: 100%;\n    left: 0;\n    top: 0;\n    cursor: none;\n    background-color: #000;\n    text-align: center;\n    cursor: pointer;\n}\n\n.oit-main-container-view .img-player > img,\n.oit-pin-container-view .img-player > img {\n    display: inline;\n    float: none;\n    padding: 0;\n    max-height: none;\n    transform: none;\n    cursor: pointer;\n}\n\n.oit-main-container-view .img-footer {\n    position: absolute;\n    text-align: center;\n    bottom: 5px;\n    left: 0;\n    right: 0;\n}\n\n.oit-main-container-view .img-footer .img-title {\n    font-size: 12px;\n    line-height: 1;\n    display: inline-block;\n    max-width: 90%;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    margin: 5px;\n    opacity: .8;\n    color: #fff;\n    /* filter: alpha(opacity=80) */\n}\n\n.oit-main-container-view .img-footer .img-title:hover {\n    /* opacity: 1; */\n    color: #fff;\n    font-size: 15px;\n    background-color: rgba(0, 0, 0, .3);\n    border-radius: 8px;\n    line-height: 1.5;\n    /* filter: alpha(opacity=100) */\n}\n\n.oit-main-container-view .img-footer .img-toolbar {\n    width: 385px;\n    height: 30px;\n    margin: 0 auto 5px;\n    padding: 3px 0;\n}\n\n.oit-main-container-view .img-footer .img-toolbar:hover {\n    background-color: rgba(0, 0, 0, .3);\n    border-radius: 12px;\n}\n\n.oit-main-container-view .img-footer .img-toolbar > li {\n    float: left;\n    width: 25px;\n    height: 25px;\n    margin: 0 5px;\n    padding: 0;\n    line-height: 0;\n    border: none;\n    cursor: pointer;\n    overflow: hidden;\n}\n\n.oit-main-container-view .img-footer .img-toolbar > li:hover {\n    animation: bounce .5s cubic-bezier(0.51, 0.23, 0.02, 0.96)\n}\n\n@keyframes bounce {\n    0% {\n        transform: scale(1, 1);\n    }\n\n    50% {\n        transform: scale(0.85, 1.1) translateY(-5px);\n    }\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_zoom_to_100::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_zoom_in::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_zoom_out::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_full_screen::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_refresh::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_rotate_left::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_rotate_right::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_scale_x::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_scale_y::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_invert_color::before,\n.oit-main-container-view .img-footer .img-toolbar .toolbar_copy::before {\n    font-size: 0;\n    line-height: 0;\n    display: block;\n    width: 25px;\n    height: 25px;\n    color: transparent;\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAAAZCAYAAAASRcpqAAAAAXNSR0IArs4c6QAADgJJREFUeF7tXHnQftUc/3z+YJC9KVuWsZOlIiopTYakZZpIJSUiS6JkLKGFYkJJRJsKpUVEhYpItiZFUtknJGQXmRHzMZ/H97xz3vuce++5z3ufX696z8wz77zPc+75nnPu93zO57ucQ6yUlRlYmYGVGRhhBjhCG7e7JiQd2Bw0yanv2iZmqc/f7iZ8ZcBznwFJDwPwopKgWt3uBBNJ6wJYH8DjADwFwFMBfAPAtwB8H8B5JP+01JFKenkM5EEA/HH73wXwVZJnLrV9Pz+WjACCAwp9WpvkNX19lfR8AGcU6h1U89IkPQHAzgAeCuCxANYGcHl8rgZwLckL+/rR97uk7QA8EYDl+bO63weAryd5JG/qa6f0u6S7A9gwPhvE399Gu1cBuIbkZ2dp+9Z8RtKTALwXwNFj6W3L/J1BcoexxirpwwBe0dHegSQP6pPXCiaS3gng9QDuFI3cEkDyNAB3iO9+AsCL4JQ+QS2T4oX1RgB+CW3FC+RTNQttVchogImB7mjLJemFVlUkPSMqvgqA58ClE0wkPQDA3gBeA+DOPYLeRtLvb6EEmB4DYE+Sx0o6DID7sQvJH6eKku4N4H0AXtwj45cA3k3SilhdJG0D4HAA3gm7yknWv3yzkvQQAF+JTWb3aqGroGK8048BeGCI22EegCLJG5F15swxACVrz93erKnHkhTzvVnfNBbBRJJ32MckJQfwNQCXkLxFkoHk6fFJ1P4Ukrv0CWso90cBJIXwznqld6TYnbzjPh7ARrEr+tFjSe55a8vIwMRAMvNLzZUi2mkFE0meDyuRWYjLFwGcDMC7uYt3ei+0TQBsH999Mhbjb/x/1u+JHElelAaTBQWStHEsdLNRl8sCLK+L/+8K4MkAzCaeHd+ZnW5V814kHQrgzVH3gmC3Zrp/ie/uB8AsNYGt5e9L0mzIY/D3CUx6lbumT2PUkeTxfwLAPRrtjQoojYVvUUsClKw9sw6z7XHBRNKXAGwO4DsAduui7vFyzUruD2Avkh+qeTmNSZnslKXnJHkHPhHAC+L3k0hW7UjzkpEtSitzYhaDXmoDSMxsvECKYNIAEpt/R3TteJK82K0cW8Zi3Z3kFX1gImnXAI7VAFwK4F1dpoYkA/tbwiw1M+szmb3DubjtI0ka7IpF0rYBOjar/2GAIXnqMgaTNLap8fTNS816CSBNjMT/psU/M6A0gMSs2jo4HphIsgPGVO0sks8bMNBfAVjLNjZJ+1JaS24m1E60JO+C3o1dvDhMgW8VGTmYmBIOpZ3N+tkCmQKTYIHfBrDe0F0o6+cvALwMgM1T7z5TzASAfWM2PZKiHkryX33vvwF0Bh+Dy1SRdC6A5wL4Msln9rUbi+eOAVbJP2Wb/kfLlJkkJuW/kzkO/9Ig87dtXhobo30lZqi5327WzSzpQmJ8rWAC4PyMjeZdvS5t8Au7STj2TCfvZqZBckKPa0o4aq8AcAHJRH9LSmUaa8ZjJvMRkq/MK0nybvqGMGkW7VySPHk2q0y51yP55xbF7ZTRA0K1MjYleXFqqxZQ2upJWofk95p9k7Rv+C+qTYnGfL4HwH4A/gjggy1g8nYABycgGeqbagDKtiQ/1+iD37HZ1w8AbE0ymUw1qpWbZ67/VgD2Bdkxv2zMnEwPrJ8LgF01wJ5KTSAxK20JAlQBiqTjAbw01tKCDvcwk9TLkl/QQDQBpRxMXh0KVxVVKCh+msh1SwsjdpvEfK4kuU5HG6Vd+i4RSfAuuiPJ01vApFNGD5hUyWiR2+kYqwWcTDHvA8CsxL6Q7Ul+ehblzDz1Zhre7ZvMJDU703uP92rH8JEAfhbs1KaJgcDzeW2YQq8l+YEZx5BAfkGpbw9gIin3Ky74XzoiiieSfEnbHAfwO6DRVhZFJLPIo58xG2pjLlNgkhBrK5LnhTKYJWzZfHGS7LE2Xd01/SbpheGEajVDJB0B4HUlVhLyOpFd0gkAPFknkNyjZVF3yuhT5hoZHS/LgLIWSTuOFxVJZmQ/r/XAz+ofCEXbtNDHRMVLYFLacezwbvVr5O1Lulc40K0XG5I0CBpM7L+xE9VmsE3gIpsszFViqM2f0hiKzCQcoeeUlL5nE0k0f0H3+/SkRfdGYyaSdgSQ5n+RI7cDTNytnUie1tO/Equ7iaQDIZPSAJK9epjLFJjYTHEEZbVkL0tyRMcx/wmDsYCgWemlHpCBiXMRHJF5P8l9WgaTIgivJjkJqUraCcCjsvrJ5kxfnZpCl5IcqnYcv5XmZlGKLhnN7g2SMYuizfJMAMqNNfkrmRLYCW7HcFvZg+QJkuzY7gr/7kfSIeKqIsmOeOe/2Fl6XLzbxBKrHefxnPvl/rWVs0k6D2ahxFydHRGVqR20axAZcP8VwDYkHb0cXJpO7sENxAMRnrcJ4vyuKV9UD5jYnLQZPpX/lZ7r81U2gMQ+mjWHgkkxnuw4cwYm3nltm9luc77APjlr6YtJt4QjE8C0zf0CcNTs1qtCxqxKsiqek2SfUQ7Oi8TmeQRZvkupa5eRnJgrNUXSm6z4AI4iabPHG4WB3xvAIBNHkv12rblHhVwI1/1MluPRm2BVGFNyaDp/ZjtHwGrG3QC0UZhJxkqcuLkJyb+3yGnrYpGd1IBJE0i8kWXrrtrMsfPVWa5mJk5Qm5QcTBoDcj6Dw8ETypTZY87+s/9lqlSyhhVmMlSLl0H9EtCXgH0eXc3kjNX8TA7eEZlJAqXjSDrvZlHpYSau25ZmMGm3jZlIWgOA/SM3OlG0IbYrD2XKzEme/81JXhTK4QQ1JxctQqT4zenVtqXckEOkKU28dReSZPprX8dUJCcAqdZnsj9JJ0CVAKtTRp+2ZT6TVhl9bSz19x7GcDXJ3y9VxtjPZyZoiZksmJxjyw29aTIT61Ep78Xsuy0fZjkxEyfA2QdZnLcKMCkmkfYxE0lmlmaYpWJ/inFg0RGKsEamwCTZt5M8/FDo3SIU63j5AnWMMK29uxPPcNRPQODwn/MKSgs91XEuygYk/5lX6kJ2SfcMu81RoPVJ2qE5WEaXMtfKmMeCSG1KsoPaTuS2cg5Jm5hVJRjjml3p/n7XQ44DtMx7co6XfCbFzaNqAFGpr4+3MZ9JyssprqUKMCmmElSAycTl0OdTaaxZA/QUmPhMhr3wj5jBG24q5nMfl5O0B79Ywp5PeSank7THeqFIemS0Yyehw4z5b0lZO1P3+2T0gEmVjI7x2ae0RilsKembAK7vi+Y0FKUUZbl4SC5In6kxBjWPELDNZIftS9Ec2/4bk7x5CIBkAFvli7itRHMkHRIJe53mSsdcOulw/+bvqwxMLDgL795A0gfLqkpQHdfduS+c2FgsW5B0Zl1naTzTezp3VcgovKhR8kyyvqe8kJNJ9h26awPvFPL078V5k/QcAJ8H4IXuBe+FP6hkfe7KM5kpjyUSIg1UzllxmsIXBnVuFVYeA5hjHaZo1vkkt2gDhY6hFdMzVimYxECSvXZ9hMlalStzuvnRaqeVJOexOJfAxebTYaVdK1jGqdnBr3/7FDPJ//TpyDxlNDNWaxPSOjJgFzJqc4WMU8LO4Wh1anfNgyQf47dJdBpJh+DbQCe98856pYcbi70rA3YmsJLkXAsz2MGHSft0ZOzfRwQTH5+wlWCf5dTx/x4zx8ETuxCmolHZc10n3Jdu5uQTKyllw6bF7qsGrvK5m0i7dz6KzaHktHLnvAueS3LrmpckKTl8Xd2A5U/z1LBPsTrW7pKy8P4A4OEknRPQWeYhY95ncxpg4oQvH/F3MtignT0DrptJ+vBea5HkA3WTRDNnQZP0NQe9JTYTn5N6cCkfIjWQnc1xKr0THS/pbfx/TNmmc4pmeIH4kOCyK5nDfLSzOZKc4+PjFC6rN65iSGZfaS4OJ+lwfLFIcgjd/se2Mi6YWEqAhhf8szoEG0Rsn10oyZmHPopdvbtFwpoH3nWfiamzj60bTNIx/J+Go+jXfZo1towcTOZxari5u8VC96lqJwXaHHFor+h8jvfmqJqTBn35kMtGJH3auLM0Lm3y5Uq+E6V18UryQVCnezsnZMip4b85i5nkWR0K7ysQ0n0rrjbqUf6+uRj6e2bmTz06xJnZfFiSr5jwsQoX3zszuTeog5n8juR9h/Y/1U/+tSF9LkZzOl6soyf++NYt//VCNlP5YeFQV6Kkx5P0SdWqEhf3uG2fPJ4oZ9zV4Vj3RSkNu3GozDTOPhqfJO0tY8nIXuRc7jMpUeUw97xTJVPFC9EOXe/0KdPRZ3h8gMtszsXAY0f2kAObzVvgDCYe50KadYCaI3/J0V59CLFxn4kzNb04EiNyn31vi/uQMqyXPZDE4vaJaI9l9PtMJPk0d8oo9+bptefs2OZtf76aIjGZ3vVQqjB3MBnaqyyXZGbHYZfMBqBMpVUP7W/LpOaXES2S0dgVRr9pLWMIU7uxJJ+afUfPGG8A4FybQ/Lkw9p5CSZkM8d5Dl1l3jeteXE6Z2VZmjbNiZHki6k+nu53GZNNSbIT1qe7E9vMxZt1HkwyXdFR+6qn6i07MAmkth3tHBXfVZkuNpp5kIUX58Xu8JlPH1df5DykAwFaUzI6KKZtzfxId1Fcx8nNKp+IJJud6V7WdEerTUD7m/w5ZggbaZuTiPLYSe7U/EcHY5znHbBmWO6/d15HMZZt1KZjzuw4NYOcyx2wcWbH/i1/DLKXjnEHcxqPpOSIH7JUXHdvkkfN7XZ6Sb4iwMlSy+7eiaEzVQCzldvplzqJK88vyxmIzXJI35yRPbn0fW5gMqQ3K3VXZmBlBv7/Z+C/kQ6WkguncSQAAAAASUVORK5CYII=);\n    background-repeat: no-repeat\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_zoom_to_100::before {\n    content: 'Zoom to Actual Size';\n    background-position: 0 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_zoom_in::before {\n    content: 'Zoom In';\n    background-position: -25px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_zoom_out::before {\n    content: 'Zoom Out';\n    background-position: -50px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_full_screen::before {\n    content: 'Full Screen';\n    background-position: -75px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_refresh::before {\n    content: 'Refresh';\n    background-position: -100px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_rotate_left::before {\n    content: 'Rotate Left';\n    background-position: -125px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_rotate_right::before {\n    content: 'Rotate Right';\n    background-position: -150px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_scale_x::before {\n    content: 'Scale x';\n    background-position: -175px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_scale_y::before {\n    content: 'Scale y';\n    background-position: -200px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_invert_color::before {\n    content: 'Invert color';\n    background-position: -225px 0\n}\n\n.oit-main-container-view .img-footer .img-toolbar .toolbar_copy::before {\n    content: 'Copy';\n    background-position: -250px 0\n}\n\n/*====== gallery-navbar start ======*/\n.oit-main-container-view .img-footer .gallery-navbar {\n    position: relative;\n    flex: 0 0 auto;\n    overflow: hidden;\n    max-width: 100%;\n    max-height: 100%;\n    width: 100%;\n    height: 60px;\n    margin-top: 20px;\n    background-color: rgba(0, 0, 0, .1);\n}\n\n.oit-main-container-view .img-footer .gallery-navbar:hover {\n    background-color: rgba(0, 0, 0, .8);\n}\n\n.oit-main-container-view .img-footer .gallery-navbar .gallery-list {\n    display: flex;\n    transform: translateX(0px);\n    cursor: pointer;\n}\n\n.oit-main-container-view .img-footer .gallery-navbar .gallery-list .gallery-active {\n    opacity: 1;\n}\n\n.oit-main-container-view .img-footer .gallery-navbar .gallery-list .img-border-active {\n    margin-top: 1px;\n    border-width: 1px;\n    border-style: solid;\n    border-color: red;\n}\n\n.oit-main-container-view .img-footer .gallery-navbar .gallery-list > li {\n    width: 48px;\n    height: 58px;\n    opacity: .3;\n    color: transparent;\n    margin: 2px 1px;\n    padding: 0;\n    border-radius: 0;\n    /* transition: all 100ms linear; */\n}\n\n.oit-main-container-view .img-footer .gallery-navbar .gallery-list img {\n    width: 46px;\n    height: 56px;\n}\n\n/*====== gallery-navbar end ======*/\n\n/*====== pickr start ======*/\n.pcr-app .pcr-swatches > button {\n    padding: 0;\n}\n\n/*! Pickr 1.8.2 MIT | https://github.com/Simonwep/pickr */\n.pickr {position: relative;overflow: visible;transform: translateY(0)}  .pickr * {box-sizing: border-box;outline: none;border: none;-webkit-appearance: none}  .pickr .pcr-button {position: relative;height: 2em;width: 2em;padding: 0.5em;cursor: pointer;font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Helvetica Neue\", Arial, sans-serif;border-radius: .15em;background: url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" stroke=\"%2342445A\" stroke-width=\"5px\" stroke-linecap=\"round\"><path d=\"M45,45L5,5\"></path><path d=\"M45,5L5,45\"></path></svg>') no-repeat center;background-size: 0;transition: all 0.3s}  .pickr .pcr-button::before {position: absolute;content: '';top: 0;left: 0;width: 100%;height: 100%;background: url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size: .5em;border-radius: .15em;z-index: -1}  .pickr .pcr-button::before {z-index: initial}  .pickr .pcr-button::after {position: absolute;content: '';top: 0;left: 0;height: 100%;width: 100%;transition: background 0.3s;background: var(--pcr-color);border-radius: .15em}  .pickr .pcr-button.clear {background-size: 70%}  .pickr .pcr-button.clear::before {opacity: 0}  .pickr .pcr-button.clear:focus {box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px var(--pcr-color)}  .pickr .pcr-button.disabled {cursor: not-allowed}  .pickr *, .pcr-app * {box-sizing: border-box;outline: none;border: none;-webkit-appearance: none}  .pickr input:focus, .pickr input.pcr-active, .pickr button:focus, .pickr button.pcr-active, .pcr-app input:focus, .pcr-app input.pcr-active, .pcr-app button:focus, .pcr-app button.pcr-active {box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px var(--pcr-color)}  .pickr .pcr-palette, .pickr .pcr-slider, .pcr-app .pcr-palette, .pcr-app .pcr-slider {transition: box-shadow 0.3s}  .pickr .pcr-palette:focus, .pickr .pcr-slider:focus, .pcr-app .pcr-palette:focus, .pcr-app .pcr-slider:focus {box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px rgba(0, 0, 0, 0.25)}  .pcr-app {position: fixed;display: flex;flex-direction: column;z-index: 10000;border-radius: 0.1em;background: #fff;opacity: 0;visibility: hidden;transition: opacity 0.3s, visibility 0s 0.3s;font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Helvetica Neue\", Arial, sans-serif;box-shadow: 0 0.15em 1.5em 0 rgba(0, 0, 0, 0.1), 0 0 1em 0 rgba(0, 0, 0, 0.03);left: 0;top: 0}  .pcr-app.visible {transition: opacity 0.3s;visibility: visible;opacity: 1}  .pcr-app .pcr-swatches {display: flex;flex-wrap: wrap;margin-top: 0.75em}  .pcr-app .pcr-swatches.pcr-last {margin: 0}  @supports (display: grid) {  .pcr-app .pcr-swatches {display: grid;align-items: center;grid-template-columns: repeat(auto-fit, 1.75em)}  }  .pcr-app .pcr-swatches > button {font-size: 1em;position: relative;width: calc(1.75em - 10px);height: calc(1.75em - 10px);border-radius: 0.15em;cursor: pointer;margin: 2.5px;flex-shrink: 0;justify-self: center;transition: all 0.15s;overflow: hidden;background: transparent;z-index: 1}  .pcr-app .pcr-swatches > button::before {position: absolute;content: '';top: 0;left: 0;width: 100%;height: 100%;background: url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size: 6px;border-radius: .15em;z-index: -1}  .pcr-app .pcr-swatches > button::after {content: '';position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: var(--pcr-color);border: 1px solid rgba(0, 0, 0, 0.05);border-radius: 0.15em;box-sizing: border-box}  .pcr-app .pcr-swatches > button:hover {filter: brightness(1.05)}  .pcr-app .pcr-swatches > button:not(.pcr-active) {box-shadow: none}  .pcr-app .pcr-interaction {display: flex;flex-wrap: wrap;align-items: center;margin: 0 -0.2em 0 -0.2em}  .pcr-app .pcr-interaction > * {margin: 0 0.2em}  .pcr-app .pcr-interaction input {letter-spacing: 0.07em;font-size: 0.75em;text-align: center;cursor: pointer;color: #75797e;background: #f1f3f4;border-radius: .15em;transition: all 0.15s;padding: 0.45em 0.5em;margin-top: 0.75em}  .pcr-app .pcr-interaction input:hover {filter: brightness(0.975)}  .pcr-app .pcr-interaction input:focus {box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px rgba(66, 133, 244, 0.75)}  .pcr-app .pcr-interaction .pcr-result {color: #75797e;text-align: left;flex: 1 1 8em;min-width: 8em;transition: all 0.2s;border-radius: .15em;background: #f1f3f4;cursor: text}  .pcr-app .pcr-interaction .pcr-result::-moz-selection {background: #4285f4;color: #fff}  .pcr-app .pcr-interaction .pcr-result::selection {background: #4285f4;color: #fff}  .pcr-app .pcr-interaction .pcr-type.active {color: #fff;background: #4285f4}  .pcr-app .pcr-interaction .pcr-save, .pcr-app .pcr-interaction .pcr-cancel, .pcr-app .pcr-interaction .pcr-clear {color: #fff;width: auto}  .pcr-app .pcr-interaction .pcr-save, .pcr-app .pcr-interaction .pcr-cancel, .pcr-app .pcr-interaction .pcr-clear {color: #fff}  .pcr-app .pcr-interaction .pcr-save:hover, .pcr-app .pcr-interaction .pcr-cancel:hover, .pcr-app .pcr-interaction .pcr-clear:hover {filter: brightness(0.925)}  .pcr-app .pcr-interaction .pcr-save {background: #4285f4}  .pcr-app .pcr-interaction .pcr-clear, .pcr-app .pcr-interaction .pcr-cancel {background: #f44250}  .pcr-app .pcr-interaction .pcr-clear:focus, .pcr-app .pcr-interaction .pcr-cancel:focus {box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px rgba(244, 66, 80, 0.75)}  .pcr-app .pcr-selection .pcr-picker {position: absolute;height: 18px;width: 18px;border: 2px solid #fff;border-radius: 100%;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none}  .pcr-app .pcr-selection .pcr-color-palette, .pcr-app .pcr-selection .pcr-color-chooser, .pcr-app .pcr-selection .pcr-color-opacity {position: relative;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;display: flex;flex-direction: column;cursor: grab;cursor: -webkit-grab}  .pcr-app .pcr-selection .pcr-color-palette:active, .pcr-app .pcr-selection .pcr-color-chooser:active, .pcr-app .pcr-selection .pcr-color-opacity:active {cursor: grabbing;cursor: -webkit-grabbing}  .pcr-app[data-theme='nano'] {width: 14.25em;max-width: 95vw}  .pcr-app[data-theme='nano'] .pcr-swatches {margin-top: .6em;padding: 0 .6em}  .pcr-app[data-theme='nano'] .pcr-interaction {padding: 0 .6em .6em .6em}  .pcr-app[data-theme='nano'] .pcr-selection {display: grid;grid-gap: .6em;grid-template-columns: 1fr 4fr;grid-template-rows: 5fr auto auto;align-items: center;height: 10.5em;width: 100%;align-self: flex-start}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview {grid-area: 2 / 1 / 4 / 1;height: 100%;width: 100%;display: flex;flex-direction: row;justify-content: center;margin-left: .6em}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-last-color {display: none}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color {position: relative;background: var(--pcr-color);width: 2em;height: 2em;border-radius: 50em;overflow: hidden}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color::before {position: absolute;content: '';top: 0;left: 0;width: 100%;height: 100%;background: url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size: .5em;border-radius: .15em;z-index: -1}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette {grid-area: 1 / 1 / 2 / 3;width: 100%;height: 100%;z-index: 1}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette {border-radius: .15em;width: 100%;height: 100%}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette::before {position: absolute;content: '';top: 0;left: 0;width: 100%;height: 100%;background: url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size: .5em;border-radius: .15em;z-index: -1}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser {grid-area: 2 / 2 / 2 / 2}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity {grid-area: 3 / 2 / 3 / 2}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser, .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity {height: 0.5em;margin: 0 .6em}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-picker, .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-picker {top: 50%;transform: translateY(-50%)}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider, .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider {flex-grow: 1;border-radius: 50em}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider {background: linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red)}  .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider {background: linear-gradient(to right, transparent, black), url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size: 100%, 0.25em}\n\n/*====== pickr end ======*/\n\n.hotkeys-settings-plus {\n    margin: 0 10px;\n    font-size: x-large;\n}\n"
  },
  {
    "path": ".obsidian/plugins/i18n/data.json",
    "content": "{\n  \"I18N_AGREEMENT\": true,\n  \"I18N_WIZARD\": false,\n  \"I18N_UUID\": \"2b1684f2-4538-4438-8115-43f28e711f38\",\n  \"I18N_LANGUAGE\": \"zh-cn\",\n  \"I18N_COLOR\": \"#409EFF\",\n  \"I18N_AUTHOR\": \"\",\n  \"I18N_EDIT_MODE\": true,\n  \"I18N_OPEN_SETTINGS\": true,\n  \"I18N_CHECK_UPDATES\": true,\n  \"I18N_SEARCH_TEXT\": \"\",\n  \"I18N_SORT\": \"0\",\n  \"I18N_TYPE\": \"0\",\n  \"I18N_MODE\": 0,\n  \"I18N_NOTICE\": true,\n  \"I18N_START_TIME\": true,\n  \"I18N_MODE_LDT\": true,\n  \"I18N_AUTOMATIC_UPDATE\": false,\n  \"I18N_INCREMENTAL_EXTRACTION\": false,\n  \"I18N_NAME_TRANSLATION\": false,\n  \"I18N_NAME_TRANSLATION_PREFIX\": \"[\",\n  \"I18N_NAME_TRANSLATION_SUFFIX\": \"]\",\n  \"I18N_STYLE_SETTINGS\": \"obsidian-style-settings\",\n  \"I18N_MODE_NDT\": true,\n  \"I18N_IGNORE\": false,\n  \"I18N_NDT_URL\": \"gitee\",\n  \"I18N_MODE_NIT\": true,\n  \"I18N_NIT_API\": \"BAIDU\",\n  \"I18N_NIT_API_INTERVAL\": 500,\n  \"I18N_NIT_APIS\": {\n    \"BAIDU\": {\n      \"FROM\": \"auto\",\n      \"TO\": \"zh\",\n      \"APP_ID\": \"20210413000776757\",\n      \"KEY\": \"GsmHmuaGeSHRm7aK8xex\"\n    }\n  },\n  \"I18N_NIT_OPENAI_URL\": \"https://api.openai.com\",\n  \"I18N_NIT_OPENAI_KEY\": \"\",\n  \"I18N_NIT_OPENAI_MODEL\": \"gpt-3.5-turbo\",\n  \"I18N_NIT_OPENAI_TIPS\": \"你是一个翻译工作者，你将进行obsidian笔记软件的插件翻译，本次翻译的插件名称为: ${plugin}，请结合插件名称以及软件翻译的标准进行后续工作，因为大多数文本长度较短，请以符合中文习惯的方式翻译。接下来我会提交给你很多英文文本，请将其翻译为简体中文，并且只返回给我翻译后的内容\",\n  \"I18N_MODE_IMT\": false,\n  \"I18N_IMT_CONFIG\": {\n    \"selectors\": [\n      \"*\"\n    ],\n    \"excludeSelectors\": [\n      \".modal .i18n__container\"\n    ],\n    \"excludeTags\": [],\n    \"additionalSelectors\": [],\n    \"additionalExcludeSelectors\": [],\n    \"additionalExcludeTags\": [],\n    \"stayOriginalSelectors\": [],\n    \"stayOriginalTags\": [],\n    \"atomicBlockSelectors\": [],\n    \"atomicBlockTags\": []\n  },\n  \"I18N_SHARE_MODE\": true,\n  \"I18N_SHARE_TOKEN\": \"\",\n  \"I18N_ADMIN_MODE\": false,\n  \"I18N_ADMIN_VERIFY\": false,\n  \"I18N_ADMIN_TOKEN\": \"\",\n  \"I18N_RE_TEMP_MODE\": true,\n  \"I18N_RE_TEMP\": \"\",\n  \"I18N_RE_MODE\": \"默认\",\n  \"I18N_RE_FLAGS\": \"gs\",\n  \"I18N_RE_LENGTH\": 300,\n  \"I18N_RE_MODE_EDIT\": false,\n  \"I18N_RE_MODE_DISPLAY\": false,\n  \"I18N_RE_DATAS_DISPLAY\": false,\n  \"I18N_RE_MODES\": [\n    \"默认\"\n  ],\n  \"I18N_RE_DATAS\": {\n    \"默认\": [\n      \"Notice\\\\(\\\\s*(.+?)\\\\s*\\\\)\",\n      \".log\\\\(\\\\s*(.+?)\\\\s*\\\\)\",\n      \".error\\\\(\\\\s*(.+?)\\\\s*\\\\)\",\n      \"t\\\\s*=\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \".textContent\\\\s*=\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"name\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"description\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"selection\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"annotation\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"link\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"text\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"search\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"speech\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"page\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \"settings\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\n      \".setText\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".setButtonText\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".setName\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".setDesc\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".setPlaceholder\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".setTooltip\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".appendText\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".setTitle\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".addHeading\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".renderMarkdown\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\n      \".innerText\\\\s*=\\\\s*(['\\\"`]).*?\\\\1\"\n    ]\n  },\n  \"I18N_TAG_TYPE\": \"light\",\n  \"I18N_TAG_SHAPE\": \"square\",\n  \"I18N_BUTTON_TYPE\": \"default\",\n  \"I18N_BUTTON_SHAPE\": \"square\"\n}"
  },
  {
    "path": ".obsidian/plugins/i18n/main.js",
    "content": "var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__commonJS=(t,e)=>(function(){return e||(0,t[__getOwnPropNames(t)[0]])((e={exports:{}}).exports,e),e.exports}),__export=(t,e)=>{for(var s in e)__defProp(t,s,{get:e[s],enumerable:!0})},__copyProps=(t,e,s,i)=>{if(e&&\"object\"==typeof e||\"function\"==typeof e)for(let n of __getOwnPropNames(e))__hasOwnProp.call(t,n)||n===s||__defProp(t,n,{get:()=>e[n],enumerable:!(i=__getOwnPropDesc(e,n))||i.enumerable});return t},__toESM=(t,e,s)=>(s=null!=t?__create(__getProtoOf(t)):{},__copyProps(!e&&t&&t.__esModule?s:__defProp(s,\"default\",{value:t,enumerable:!0}),t)),__toCommonJS=t=>__copyProps(__defProp({},\"__esModule\",{value:!0}),t),require_universalify=__commonJS({\"node_modules/universalify/index.js\"(t){\"use strict\";t.fromCallback=function(t){return Object.defineProperty(function(...e){if(\"function\"!=typeof e[e.length-1])return new Promise((s,i)=>{e.push((t,e)=>null!=t?i(t):s(e)),t.apply(this,e)});t.apply(this,e)},\"name\",{value:t.name})},t.fromPromise=function(t){return Object.defineProperty(function(...e){const s=e[e.length-1];if(\"function\"!=typeof s)return t.apply(this,e);e.pop(),t.apply(this,e).then(t=>s(null,t),s)},\"name\",{value:t.name})}}}),require_polyfills=__commonJS({\"node_modules/graceful-fs/polyfills.js\"(t,e){var s,i=require(\"constants\"),n=process.cwd,a=null,o=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return a||(a=n.call(process)),a};try{process.cwd()}catch(t){}\"function\"==typeof process.chdir&&(s=process.chdir,process.chdir=function(t){a=null,s.call(process,t)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,s)),e.exports=function(t){i.hasOwnProperty(\"O_SYMLINK\")&&process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)&&((e=t).lchmod=function(t,s,n){e.open(t,i.O_WRONLY|i.O_SYMLINK,s,function(t,i){t?n&&n(t):e.fchmod(i,s,function(t){e.close(i,function(e){n&&n(t||e)})})})},e.lchmodSync=function(t,s){var n,a=e.openSync(t,i.O_WRONLY|i.O_SYMLINK,s),o=!0;try{n=e.fchmodSync(a,s),o=!1}finally{if(o)try{e.closeSync(a)}catch(t){}else e.closeSync(a)}return n});var e;t.lutimes||function(t){i.hasOwnProperty(\"O_SYMLINK\")&&t.futimes?(t.lutimes=function(e,s,n,a){t.open(e,i.O_SYMLINK,function(e,i){e?a&&a(e):t.futimes(i,s,n,function(e){t.close(i,function(t){a&&a(e||t)})})})},t.lutimesSync=function(e,s,n){var a,o=t.openSync(e,i.O_SYMLINK),r=!0;try{a=t.futimesSync(o,s,n),r=!1}finally{if(r)try{t.closeSync(o)}catch(t){}else t.closeSync(o)}return a}):t.futimes&&(t.lutimes=function(t,e,s,i){i&&process.nextTick(i)},t.lutimesSync=function(){})}(t);t.chown=a(t.chown),t.fchown=a(t.fchown),t.lchown=a(t.lchown),t.chmod=s(t.chmod),t.fchmod=s(t.fchmod),t.lchmod=s(t.lchmod),t.chownSync=r(t.chownSync),t.fchownSync=r(t.fchownSync),t.lchownSync=r(t.lchownSync),t.chmodSync=n(t.chmodSync),t.fchmodSync=n(t.fchmodSync),t.lchmodSync=n(t.lchmodSync),t.stat=l(t.stat),t.fstat=l(t.fstat),t.lstat=l(t.lstat),t.statSync=c(t.statSync),t.fstatSync=c(t.fstatSync),t.lstatSync=c(t.lstatSync),t.chmod&&!t.lchmod&&(t.lchmod=function(t,e,s){s&&process.nextTick(s)},t.lchmodSync=function(){});t.chown&&!t.lchown&&(t.lchown=function(t,e,s,i){i&&process.nextTick(i)},t.lchownSync=function(){});\"win32\"===o&&(t.rename=\"function\"!=typeof t.rename?t.rename:function(e){function s(s,i,n){var a=Date.now(),o=0;e(s,i,function r(l){if(l&&(\"EACCES\"===l.code||\"EPERM\"===l.code||\"EBUSY\"===l.code)&&Date.now()-a<6e4)return setTimeout(function(){t.stat(i,function(t,a){t&&\"ENOENT\"===t.code?e(s,i,r):n(l)})},o),void(o<100&&(o+=10));n&&n(l)})}return Object.setPrototypeOf&&Object.setPrototypeOf(s,e),s}(t.rename));function s(e){return e?function(s,i,n){return e.call(t,s,i,function(t){_(t)&&(t=null),n&&n.apply(this,arguments)})}:e}function n(e){return e?function(s,i){try{return e.call(t,s,i)}catch(t){if(!_(t))throw t}}:e}function a(e){return e?function(s,i,n,a){return e.call(t,s,i,n,function(t){_(t)&&(t=null),a&&a.apply(this,arguments)})}:e}function r(e){return e?function(s,i,n){try{return e.call(t,s,i,n)}catch(t){if(!_(t))throw t}}:e}function l(e){return e?function(s,i,n){function a(t,e){e&&(e.uid<0&&(e.uid+=4294967296),e.gid<0&&(e.gid+=4294967296)),n&&n.apply(this,arguments)}return\"function\"==typeof i&&(n=i,i=null),i?e.call(t,s,i,a):e.call(t,s,a)}:e}function c(e){return e?function(s,i){var n=i?e.call(t,s,i):e.call(t,s);return n&&(n.uid<0&&(n.uid+=4294967296),n.gid<0&&(n.gid+=4294967296)),n}:e}function _(t){if(!t)return!0;if(\"ENOSYS\"===t.code)return!0;var e=!process.getuid||0!==process.getuid();return!(!e||\"EINVAL\"!==t.code&&\"EPERM\"!==t.code)}t.read=\"function\"!=typeof t.read?t.read:function(e){function s(s,i,n,a,o,r){var l;if(r&&\"function\"==typeof r){var c=0;l=function(_,d,u){if(_&&\"EAGAIN\"===_.code&&c<10)return c++,e.call(t,s,i,n,a,o,l);r.apply(this,arguments)}}return e.call(t,s,i,n,a,o,l)}return Object.setPrototypeOf&&Object.setPrototypeOf(s,e),s}(t.read),t.readSync=\"function\"!=typeof t.readSync?t.readSync:(d=t.readSync,function(e,s,i,n,a){for(var o=0;;)try{return d.call(t,e,s,i,n,a)}catch(t){if(\"EAGAIN\"===t.code&&o<10){o++;continue}throw t}});var d}}}),require_legacy_streams=__commonJS({\"node_modules/graceful-fs/legacy-streams.js\"(t,e){var s=require(\"stream\").Stream;e.exports=function(t){return{ReadStream:function e(i,n){if(!(this instanceof e))return new e(i,n);s.call(this);var a=this;this.path=i;this.fd=null;this.readable=!0;this.paused=!1;this.flags=\"r\";this.mode=438;this.bufferSize=65536;n=n||{};var o=Object.keys(n);for(var r=0,l=o.length;r<l;r++){var c=o[r];this[c]=n[c]}this.encoding&&this.setEncoding(this.encoding);if(void 0!==this.start){if(\"number\"!=typeof this.start)throw TypeError(\"start must be a Number\");if(void 0===this.end)this.end=1/0;else if(\"number\"!=typeof this.end)throw TypeError(\"end must be a Number\");if(this.start>this.end)throw new Error(\"start must be <= end\");this.pos=this.start}if(null!==this.fd)return void process.nextTick(function(){a._read()});t.open(this.path,this.flags,this.mode,function(t,e){if(t)return a.emit(\"error\",t),void(a.readable=!1);a.fd=e,a.emit(\"open\",e),a._read()})},WriteStream:function e(i,n){if(!(this instanceof e))return new e(i,n);s.call(this);this.path=i;this.fd=null;this.writable=!0;this.flags=\"w\";this.encoding=\"binary\";this.mode=438;this.bytesWritten=0;n=n||{};var a=Object.keys(n);for(var o=0,r=a.length;o<r;o++){var l=a[o];this[l]=n[l]}if(void 0!==this.start){if(\"number\"!=typeof this.start)throw TypeError(\"start must be a Number\");if(this.start<0)throw new Error(\"start must be >= zero\");this.pos=this.start}this.busy=!1;this._queue=[];null===this.fd&&(this._open=t.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}}}}),require_clone=__commonJS({\"node_modules/graceful-fs/clone.js\"(t,e){\"use strict\";e.exports=function(t){if(null===t||\"object\"!=typeof t)return t;if(t instanceof Object)var e={__proto__:s(t)};else var e=Object.create(null);return Object.getOwnPropertyNames(t).forEach(function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(t,s))}),e};var s=Object.getPrototypeOf||function(t){return t.__proto__}}}),require_graceful_fs=__commonJS({\"node_modules/graceful-fs/graceful-fs.js\"(t,e){var s,i,n=require(\"fs\"),a=require_polyfills(),o=require_legacy_streams(),r=require_clone(),l=require(\"util\");function c(t,e){Object.defineProperty(t,s,{get:function(){return e}})}\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?(s=Symbol.for(\"graceful-fs.queue\"),i=Symbol.for(\"graceful-fs.previous\")):(s=\"___graceful-fs.queue\",i=\"___graceful-fs.previous\");var _,d,u=function(){};function h(t){a(t),t.gracefulify=h,t.createReadStream=function(e,s){return new t.ReadStream(e,s)},t.createWriteStream=function(e,s){return new t.WriteStream(e,s)};var e=t.readFile;t.readFile=function(t,s,i){\"function\"==typeof s&&(i=s,s=null);return function t(s,i,n,a){return e(s,i,function(e){!e||\"EMFILE\"!==e.code&&\"ENFILE\"!==e.code?\"function\"==typeof n&&n.apply(this,arguments):p([t,[s,i,n],e,a||Date.now(),Date.now()])})}(t,s,i)};var s=t.writeFile;t.writeFile=function(t,e,i,n){\"function\"==typeof i&&(n=i,i=null);return function t(e,i,n,a,o){return s(e,i,n,function(s){!s||\"EMFILE\"!==s.code&&\"ENFILE\"!==s.code?\"function\"==typeof a&&a.apply(this,arguments):p([t,[e,i,n,a],s,o||Date.now(),Date.now()])})}(t,e,i,n)};var i=t.appendFile;i&&(t.appendFile=function(t,e,s,n){\"function\"==typeof s&&(n=s,s=null);return function t(e,s,n,a,o){return i(e,s,n,function(i){!i||\"EMFILE\"!==i.code&&\"ENFILE\"!==i.code?\"function\"==typeof a&&a.apply(this,arguments):p([t,[e,s,n,a],i,o||Date.now(),Date.now()])})}(t,e,s,n)});var n=t.copyFile;n&&(t.copyFile=function(t,e,s,i){\"function\"==typeof s&&(i=s,s=0);return function t(e,s,i,a,o){return n(e,s,i,function(n){!n||\"EMFILE\"!==n.code&&\"ENFILE\"!==n.code?\"function\"==typeof a&&a.apply(this,arguments):p([t,[e,s,i,a],n,o||Date.now(),Date.now()])})}(t,e,s,i)});var r=t.readdir;t.readdir=function(t,e,s){\"function\"==typeof e&&(s=e,e=null);var i=l.test(process.version)?function(t,e,s,i){return r(t,n(t,e,s,i))}:function(t,e,s,i){return r(t,e,n(t,e,s,i))};return i(t,e,s);function n(t,e,s,n){return function(a,o){!a||\"EMFILE\"!==a.code&&\"ENFILE\"!==a.code?(o&&o.sort&&o.sort(),\"function\"==typeof s&&s.call(this,a,o)):p([i,[t,e,s],a,n||Date.now(),Date.now()])}}};var l=/^v[0-5]\\./;if(\"v0.8\"===process.version.substr(0,4)){var c=o(t);g=c.ReadStream,f=c.WriteStream}var _=t.ReadStream;_&&(g.prototype=Object.create(_.prototype),g.prototype.open=function(){var t=this;T(t.path,t.flags,t.mode,function(e,s){e?(t.autoClose&&t.destroy(),t.emit(\"error\",e)):(t.fd=s,t.emit(\"open\",s),t.read())})});var d=t.WriteStream;d&&(f.prototype=Object.create(d.prototype),f.prototype.open=function(){var t=this;T(t.path,t.flags,t.mode,function(e,s){e?(t.destroy(),t.emit(\"error\",e)):(t.fd=s,t.emit(\"open\",s))})}),Object.defineProperty(t,\"ReadStream\",{get:function(){return g},set:function(t){g=t},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"WriteStream\",{get:function(){return f},set:function(t){f=t},enumerable:!0,configurable:!0});var u=g;Object.defineProperty(t,\"FileReadStream\",{get:function(){return u},set:function(t){u=t},enumerable:!0,configurable:!0});var m=f;function g(t,e){return this instanceof g?(_.apply(this,arguments),this):g.apply(Object.create(g.prototype),arguments)}function f(t,e){return this instanceof f?(d.apply(this,arguments),this):f.apply(Object.create(f.prototype),arguments)}Object.defineProperty(t,\"FileWriteStream\",{get:function(){return m},set:function(t){m=t},enumerable:!0,configurable:!0});var E=t.open;function T(t,e,s,i){return\"function\"==typeof s&&(i=s,s=null),function t(e,s,i,n,a){return E(e,s,i,function(o,r){!o||\"EMFILE\"!==o.code&&\"ENFILE\"!==o.code?\"function\"==typeof n&&n.apply(this,arguments):p([t,[e,s,i,n],o,a||Date.now(),Date.now()])})}(t,e,s,i)}return t.open=T,t}function p(t){u(\"ENQUEUE\",t[0].name,t[1]),n[s].push(t),g()}function m(){for(var t=Date.now(),e=0;e<n[s].length;++e)n[s][e].length>2&&(n[s][e][3]=t,n[s][e][4]=t);g()}function g(){if(clearTimeout(d),d=void 0,0!==n[s].length){var t=n[s].shift(),e=t[0],i=t[1],a=t[2],o=t[3],r=t[4];if(void 0===o)u(\"RETRY\",e.name,i),e.apply(null,i);else if(Date.now()-o>=6e4){u(\"TIMEOUT\",e.name,i);var l=i.pop();\"function\"==typeof l&&l.call(null,a)}else{var c=Date.now()-r,_=Math.max(r-o,1);c>=Math.min(1.2*_,100)?(u(\"RETRY\",e.name,i),e.apply(null,i.concat([o]))):n[s].push(t)}void 0===d&&(d=setTimeout(g,0))}}l.debuglog?u=l.debuglog(\"gfs4\"):/\\bgfs4\\b/i.test(process.env.NODE_DEBUG||\"\")&&(u=function(){var t=l.format.apply(l,arguments);t=\"GFS4: \"+t.split(/\\n/).join(\"\\nGFS4: \"),console.error(t)}),n[s]||(_=global[s]||[],c(n,_),n.close=function(t){function e(e,s){return t.call(n,e,function(t){t||m(),\"function\"==typeof s&&s.apply(this,arguments)})}return Object.defineProperty(e,i,{value:t}),e}(n.close),n.closeSync=function(t){function e(e){t.apply(n,arguments),m()}return Object.defineProperty(e,i,{value:t}),e}(n.closeSync),/\\bgfs4\\b/i.test(process.env.NODE_DEBUG||\"\")&&process.on(\"exit\",function(){u(n[s]),require(\"assert\").equal(n[s].length,0)})),global[s]||c(global,n[s]),e.exports=h(r(n)),process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!n.__patched&&(e.exports=h(n),n.__patched=!0)}}),require_fs=__commonJS({\"node_modules/fs-extra/lib/fs/index.js\"(t){\"use strict\";var e=require_universalify().fromCallback,s=require_graceful_fs(),i=[\"access\",\"appendFile\",\"chmod\",\"chown\",\"close\",\"copyFile\",\"fchmod\",\"fchown\",\"fdatasync\",\"fstat\",\"fsync\",\"ftruncate\",\"futimes\",\"lchmod\",\"lchown\",\"link\",\"lstat\",\"mkdir\",\"mkdtemp\",\"open\",\"opendir\",\"readdir\",\"readFile\",\"readlink\",\"realpath\",\"rename\",\"rm\",\"rmdir\",\"stat\",\"symlink\",\"truncate\",\"unlink\",\"utimes\",\"writeFile\"].filter(t=>\"function\"==typeof s[t]);Object.assign(t,s),i.forEach(i=>{t[i]=e(s[i])}),t.exists=function(t,e){return\"function\"==typeof e?s.exists(t,e):new Promise(e=>s.exists(t,e))},t.read=function(t,e,i,n,a,o){return\"function\"==typeof o?s.read(t,e,i,n,a,o):new Promise((o,r)=>{s.read(t,e,i,n,a,(t,e,s)=>{if(t)return r(t);o({bytesRead:e,buffer:s})})})},t.write=function(t,e,...i){return\"function\"==typeof i[i.length-1]?s.write(t,e,...i):new Promise((n,a)=>{s.write(t,e,...i,(t,e,s)=>{if(t)return a(t);n({bytesWritten:e,buffer:s})})})},t.readv=function(t,e,...i){return\"function\"==typeof i[i.length-1]?s.readv(t,e,...i):new Promise((n,a)=>{s.readv(t,e,...i,(t,e,s)=>{if(t)return a(t);n({bytesRead:e,buffers:s})})})},t.writev=function(t,e,...i){return\"function\"==typeof i[i.length-1]?s.writev(t,e,...i):new Promise((n,a)=>{s.writev(t,e,...i,(t,e,s)=>{if(t)return a(t);n({bytesWritten:e,buffers:s})})})},\"function\"==typeof s.realpath.native?t.realpath.native=e(s.realpath.native):process.emitWarning(\"fs.realpath.native is not a function. Is fs being monkey-patched?\",\"Warning\",\"fs-extra-WARN0003\")}}),require_utils=__commonJS({\"node_modules/fs-extra/lib/mkdirs/utils.js\"(t,e){\"use strict\";var s=require(\"path\");e.exports.checkPath=function(t){if(\"win32\"===process.platform){if(/[<>:\"|?*]/.test(t.replace(s.parse(t).root,\"\"))){const e=new Error(`Path contains invalid characters: ${t}`);throw e.code=\"EINVAL\",e}}}}}),require_make_dir=__commonJS({\"node_modules/fs-extra/lib/mkdirs/make-dir.js\"(t,e){\"use strict\";var s=require_fs(),{checkPath:i}=require_utils(),n=t=>{return\"number\"==typeof t?t:{...{mode:511},...t}.mode};e.exports.makeDir=(async(t,e)=>(i(t),s.mkdir(t,{mode:n(e),recursive:!0}))),e.exports.makeDirSync=((t,e)=>(i(t),s.mkdirSync(t,{mode:n(e),recursive:!0})))}}),require_mkdirs=__commonJS({\"node_modules/fs-extra/lib/mkdirs/index.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise,{makeDir:i,makeDirSync:n}=require_make_dir(),a=s(i);e.exports={mkdirs:a,mkdirsSync:n,mkdirp:a,mkdirpSync:n,ensureDir:a,ensureDirSync:n}}}),require_path_exists=__commonJS({\"node_modules/fs-extra/lib/path-exists/index.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise,i=require_fs();e.exports={pathExists:s(function(t){return i.access(t).then(()=>!0).catch(()=>!1)}),pathExistsSync:i.existsSync}}}),require_utimes=__commonJS({\"node_modules/fs-extra/lib/util/utimes.js\"(t,e){\"use strict\";var s=require_fs(),i=require_universalify().fromPromise;e.exports={utimesMillis:i(async function(t,e,i){const n=await s.open(t,\"r+\");let a=null;try{await s.futimes(n,e,i)}finally{try{await s.close(n)}catch(t){a=t}}if(a)throw a}),utimesMillisSync:function(t,e,i){const n=s.openSync(t,\"r+\");return s.futimesSync(n,e,i),s.closeSync(n)}}}}),require_stat=__commonJS({\"node_modules/fs-extra/lib/util/stat.js\"(t,e){\"use strict\";var s=require_fs(),i=require(\"path\"),n=require_universalify().fromPromise;function a(t,e){return e.ino&&e.dev&&e.ino===t.ino&&e.dev===t.dev}function o(t,e){const s=i.resolve(t).split(i.sep).filter(t=>t),n=i.resolve(e).split(i.sep).filter(t=>t);return s.every((t,e)=>n[e]===t)}function r(t,e,s){return`Cannot ${s} '${t}' to a subdirectory of itself, '${e}'.`}e.exports={checkPaths:n(async function(t,e,n,l){const{srcStat:c,destStat:_}=await function(t,e,i){const n=i.dereference?t=>s.stat(t,{bigint:!0}):t=>s.lstat(t,{bigint:!0});return Promise.all([n(t),n(e).catch(t=>{if(\"ENOENT\"===t.code)return null;throw t})]).then(([t,e])=>({srcStat:t,destStat:e}))}(t,e,l);if(_){if(a(c,_)){const s=i.basename(t),a=i.basename(e);if(\"move\"===n&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:c,destStat:_,isChangingCase:!0};throw new Error(\"Source and destination must not be the same.\")}if(c.isDirectory()&&!_.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!c.isDirectory()&&_.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(c.isDirectory()&&o(t,e))throw new Error(r(t,e,n));return{srcStat:c,destStat:_}}),checkPathsSync:function(t,e,n,l){const{srcStat:c,destStat:_}=function(t,e,i){let n;const a=i.dereference?t=>s.statSync(t,{bigint:!0}):t=>s.lstatSync(t,{bigint:!0}),o=a(t);try{n=a(e)}catch(t){if(\"ENOENT\"===t.code)return{srcStat:o,destStat:null};throw t}return{srcStat:o,destStat:n}}(t,e,l);if(_){if(a(c,_)){const s=i.basename(t),a=i.basename(e);if(\"move\"===n&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:c,destStat:_,isChangingCase:!0};throw new Error(\"Source and destination must not be the same.\")}if(c.isDirectory()&&!_.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!c.isDirectory()&&_.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(c.isDirectory()&&o(t,e))throw new Error(r(t,e,n));return{srcStat:c,destStat:_}},checkParentPaths:n(async function t(e,n,o,l){const c=i.resolve(i.dirname(e)),_=i.resolve(i.dirname(o));if(_===c||_===i.parse(_).root)return;let d;try{d=await s.stat(_,{bigint:!0})}catch(t){if(\"ENOENT\"===t.code)return;throw t}if(a(n,d))throw new Error(r(e,o,l));return t(e,n,_,l)}),checkParentPathsSync:function t(e,n,o,l){const c=i.resolve(i.dirname(e)),_=i.resolve(i.dirname(o));if(_===c||_===i.parse(_).root)return;let d;try{d=s.statSync(_,{bigint:!0})}catch(t){if(\"ENOENT\"===t.code)return;throw t}if(a(n,d))throw new Error(r(e,o,l));return t(e,n,_,l)},isSrcSubdir:o,areIdentical:a}}}),require_copy=__commonJS({\"node_modules/fs-extra/lib/copy/copy.js\"(t,e){\"use strict\";var s=require_fs(),i=require(\"path\"),{mkdirs:n}=require_mkdirs(),{pathExists:a}=require_path_exists(),{utimesMillis:o}=require_utimes(),r=require_stat();async function l(t,e,s){return!s.filter||s.filter(t,e)}async function c(t,e,n,a){const o=a.dereference?s.stat:s.lstat,d=await o(e);if(d.isDirectory())return async function(t,e,n,a,o){e||await s.mkdir(a);const _=await s.readdir(n);await Promise.all(_.map(async t=>{const e=i.join(n,t),s=i.join(a,t);if(!await l(e,s,o))return;const{destStat:_}=await r.checkPaths(e,s,\"copy\",o);return c(_,e,s,o)})),e||await s.chmod(a,t.mode)}(d,t,e,n,a);if(d.isFile()||d.isCharacterDevice()||d.isBlockDevice())return async function(t,e,i,n,a){if(!e)return _(t,i,n,a);if(a.overwrite)return await s.unlink(n),_(t,i,n,a);if(a.errorOnExist)throw new Error(`'${n}' already exists`)}(d,t,e,n,a);if(d.isSymbolicLink())return async function(t,e,n,a){let o=await s.readlink(e);a.dereference&&(o=i.resolve(process.cwd(),o));if(!t)return s.symlink(o,n);let l=null;try{l=await s.readlink(n)}catch(t){if(\"EINVAL\"===t.code||\"UNKNOWN\"===t.code)return s.symlink(o,n);throw t}a.dereference&&(l=i.resolve(process.cwd(),l));if(r.isSrcSubdir(o,l))throw new Error(`Cannot copy '${o}' to a subdirectory of itself, '${l}'.`);if(r.isSrcSubdir(l,o))throw new Error(`Cannot overwrite '${l}' with '${o}'.`);return await s.unlink(n),s.symlink(o,n)}(t,e,n,a);if(d.isSocket())throw new Error(`Cannot copy a socket file: ${e}`);if(d.isFIFO())throw new Error(`Cannot copy a FIFO pipe: ${e}`);throw new Error(`Unknown file: ${e}`)}async function _(t,e,i,n){if(await s.copyFile(e,i),n.preserveTimestamps){0==(128&t.mode)&&await function(t,e){return s.chmod(t,128|e)}(i,t.mode);const n=await s.stat(e);await o(i,n.atime,n.mtime)}return s.chmod(i,t.mode)}e.exports=async function(t,e,s={}){\"function\"==typeof s&&(s={filter:s}),s.clobber=!(\"clobber\"in s&&!s.clobber),s.overwrite=\"overwrite\"in s?!!s.overwrite:s.clobber,s.preserveTimestamps&&\"ia32\"===process.arch&&process.emitWarning(\"Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n\\tsee https://github.com/jprichardson/node-fs-extra/issues/269\",\"Warning\",\"fs-extra-WARN0001\");const{srcStat:o,destStat:_}=await r.checkPaths(t,e,\"copy\",s);if(await r.checkParentPaths(t,o,e,\"copy\"),!await l(t,e,s))return;const d=i.dirname(e);await a(d)||await n(d),await c(_,t,e,s)}}}),require_copy_sync=__commonJS({\"node_modules/fs-extra/lib/copy/copy-sync.js\"(t,e){\"use strict\";var s=require_graceful_fs(),i=require(\"path\"),n=require_mkdirs().mkdirsSync,a=require_utimes().utimesMillisSync,o=require_stat();function r(t,e,n,a){const r=(a.dereference?s.statSync:s.lstatSync)(e);if(r.isDirectory())return function(t,e,i,n,a){return e?_(i,n,a):function(t,e,i,n){return s.mkdirSync(i),_(e,i,n),c(i,t)}(t.mode,i,n,a)}(r,t,e,n,a);if(r.isFile()||r.isCharacterDevice()||r.isBlockDevice())return function(t,e,i,n,a){return e?function(t,e,i,n){if(n.overwrite)return s.unlinkSync(i),l(t,e,i,n);if(n.errorOnExist)throw new Error(`'${i}' already exists`)}(t,i,n,a):l(t,i,n,a)}(r,t,e,n,a);if(r.isSymbolicLink())return function(t,e,n,a){let r=s.readlinkSync(e);a.dereference&&(r=i.resolve(process.cwd(),r));if(t){let t;try{t=s.readlinkSync(n)}catch(t){if(\"EINVAL\"===t.code||\"UNKNOWN\"===t.code)return s.symlinkSync(r,n);throw t}if(a.dereference&&(t=i.resolve(process.cwd(),t)),o.isSrcSubdir(r,t))throw new Error(`Cannot copy '${r}' to a subdirectory of itself, '${t}'.`);if(o.isSrcSubdir(t,r))throw new Error(`Cannot overwrite '${t}' with '${r}'.`);return function(t,e){return s.unlinkSync(e),s.symlinkSync(t,e)}(r,n)}return s.symlinkSync(r,n)}(t,e,n,a);if(r.isSocket())throw new Error(`Cannot copy a socket file: ${e}`);if(r.isFIFO())throw new Error(`Cannot copy a FIFO pipe: ${e}`);throw new Error(`Unknown file: ${e}`)}function l(t,e,i,n){return s.copyFileSync(e,i),n.preserveTimestamps&&function(t,e,i){(function(t){return 0==(128&t)})(t)&&function(t,e){c(t,128|e)}(i,t);(function(t,e){const i=s.statSync(t);a(e,i.atime,i.mtime)})(e,i)}(t.mode,e,i),c(i,t.mode)}function c(t,e){return s.chmodSync(t,e)}function _(t,e,n){s.readdirSync(t).forEach(s=>(function(t,e,s,n){const a=i.join(e,t),l=i.join(s,t);if(n.filter&&!n.filter(a,l))return;const{destStat:c}=o.checkPathsSync(a,l,\"copy\",n);return r(c,a,l,n)})(s,t,e,n))}e.exports=function(t,e,a){\"function\"==typeof a&&(a={filter:a}),(a=a||{}).clobber=!(\"clobber\"in a&&!a.clobber),a.overwrite=\"overwrite\"in a?!!a.overwrite:a.clobber,a.preserveTimestamps&&\"ia32\"===process.arch&&process.emitWarning(\"Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n\\tsee https://github.com/jprichardson/node-fs-extra/issues/269\",\"Warning\",\"fs-extra-WARN0002\");const{srcStat:l,destStat:c}=o.checkPathsSync(t,e,\"copy\",a);if(o.checkParentPathsSync(t,l,e,\"copy\"),a.filter&&!a.filter(t,e))return;const _=i.dirname(e);return s.existsSync(_)||n(_),r(c,t,e,a)}}}),require_copy2=__commonJS({\"node_modules/fs-extra/lib/copy/index.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise;e.exports={copy:s(require_copy()),copySync:require_copy_sync()}}}),require_remove=__commonJS({\"node_modules/fs-extra/lib/remove/index.js\"(t,e){\"use strict\";var s=require_graceful_fs(),i=require_universalify().fromCallback;e.exports={remove:i(function(t,e){s.rm(t,{recursive:!0,force:!0},e)}),removeSync:function(t){s.rmSync(t,{recursive:!0,force:!0})}}}}),require_empty=__commonJS({\"node_modules/fs-extra/lib/empty/index.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise,i=require_fs(),n=require(\"path\"),a=require_mkdirs(),o=require_remove(),r=s(async function(t){let e;try{e=await i.readdir(t)}catch(e){return a.mkdirs(t)}return Promise.all(e.map(e=>o.remove(n.join(t,e))))});function l(t){let e;try{e=i.readdirSync(t)}catch(e){return a.mkdirsSync(t)}e.forEach(e=>{e=n.join(t,e),o.removeSync(e)})}e.exports={emptyDirSync:l,emptydirSync:l,emptyDir:r,emptydir:r}}}),require_file=__commonJS({\"node_modules/fs-extra/lib/ensure/file.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise,i=require(\"path\"),n=require_fs(),a=require_mkdirs();e.exports={createFile:s(async function(t){let e;try{e=await n.stat(t)}catch(t){}if(e&&e.isFile())return;const s=i.dirname(t);let o=null;try{o=await n.stat(s)}catch(e){if(\"ENOENT\"===e.code)return await a.mkdirs(s),void await n.writeFile(t,\"\");throw e}o.isDirectory()?await n.writeFile(t,\"\"):await n.readdir(s)}),createFileSync:function(t){let e;try{e=n.statSync(t)}catch(t){}if(e&&e.isFile())return;const s=i.dirname(t);try{n.statSync(s).isDirectory()||n.readdirSync(s)}catch(t){if(!t||\"ENOENT\"!==t.code)throw t;a.mkdirsSync(s)}n.writeFileSync(t,\"\")}}}}),require_link=__commonJS({\"node_modules/fs-extra/lib/ensure/link.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise,i=require(\"path\"),n=require_fs(),a=require_mkdirs(),{pathExists:o}=require_path_exists(),{areIdentical:r}=require_stat();e.exports={createLink:s(async function(t,e){let s,l;try{s=await n.lstat(e)}catch(t){}try{l=await n.lstat(t)}catch(t){throw t.message=t.message.replace(\"lstat\",\"ensureLink\"),t}if(s&&r(l,s))return;const c=i.dirname(e);await o(c)||await a.mkdirs(c),await n.link(t,e)}),createLinkSync:function(t,e){let s;try{s=n.lstatSync(e)}catch(t){}try{const e=n.lstatSync(t);if(s&&r(e,s))return}catch(t){throw t.message=t.message.replace(\"lstat\",\"ensureLink\"),t}const o=i.dirname(e);return n.existsSync(o)?n.linkSync(t,e):(a.mkdirsSync(o),n.linkSync(t,e))}}}}),require_symlink_paths=__commonJS({\"node_modules/fs-extra/lib/ensure/symlink-paths.js\"(t,e){\"use strict\";var s=require(\"path\"),i=require_fs(),{pathExists:n}=require_path_exists(),a=require_universalify().fromPromise;e.exports={symlinkPaths:a(async function(t,e){if(s.isAbsolute(t)){try{await i.lstat(t)}catch(t){throw t.message=t.message.replace(\"lstat\",\"ensureSymlink\"),t}return{toCwd:t,toDst:t}}const a=s.dirname(e),o=s.join(a,t);if(await n(o))return{toCwd:o,toDst:t};try{await i.lstat(t)}catch(t){throw t.message=t.message.replace(\"lstat\",\"ensureSymlink\"),t}return{toCwd:t,toDst:s.relative(a,t)}}),symlinkPathsSync:function(t,e){if(s.isAbsolute(t)){if(!i.existsSync(t))throw new Error(\"absolute srcpath does not exist\");return{toCwd:t,toDst:t}}const n=s.dirname(e),a=s.join(n,t);if(i.existsSync(a))return{toCwd:a,toDst:t};if(!i.existsSync(t))throw new Error(\"relative srcpath does not exist\");return{toCwd:t,toDst:s.relative(n,t)}}}}}),require_symlink_type=__commonJS({\"node_modules/fs-extra/lib/ensure/symlink-type.js\"(t,e){\"use strict\";var s=require_fs(),i=require_universalify().fromPromise;e.exports={symlinkType:i(async function(t,e){if(e)return e;let i;try{i=await s.lstat(t)}catch(t){return\"file\"}return i&&i.isDirectory()?\"dir\":\"file\"}),symlinkTypeSync:function(t,e){if(e)return e;let i;try{i=s.lstatSync(t)}catch(t){return\"file\"}return i&&i.isDirectory()?\"dir\":\"file\"}}}}),require_symlink=__commonJS({\"node_modules/fs-extra/lib/ensure/symlink.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise,i=require(\"path\"),n=require_fs(),{mkdirs:a,mkdirsSync:o}=require_mkdirs(),{symlinkPaths:r,symlinkPathsSync:l}=require_symlink_paths(),{symlinkType:c,symlinkTypeSync:_}=require_symlink_type(),{pathExists:d}=require_path_exists(),{areIdentical:u}=require_stat();e.exports={createSymlink:s(async function(t,e,s){let o;try{o=await n.lstat(e)}catch(t){}if(o&&o.isSymbolicLink()){const[s,i]=await Promise.all([n.stat(t),n.stat(e)]);if(u(s,i))return}const l=await r(t,e);t=l.toDst;const _=await c(l.toCwd,s),h=i.dirname(e);return await d(h)||await a(h),n.symlink(t,e,_)}),createSymlinkSync:function(t,e,s){let a;try{a=n.lstatSync(e)}catch(t){}if(a&&a.isSymbolicLink()){const s=n.statSync(t),i=n.statSync(e);if(u(s,i))return}const r=l(t,e);t=r.toDst,s=_(r.toCwd,s);const c=i.dirname(e);return n.existsSync(c)?n.symlinkSync(t,e,s):(o(c),n.symlinkSync(t,e,s))}}}}),require_ensure=__commonJS({\"node_modules/fs-extra/lib/ensure/index.js\"(t,e){\"use strict\";var{createFile:s,createFileSync:i}=require_file(),{createLink:n,createLinkSync:a}=require_link(),{createSymlink:o,createSymlinkSync:r}=require_symlink();e.exports={createFile:s,createFileSync:i,ensureFile:s,ensureFileSync:i,createLink:n,createLinkSync:a,ensureLink:n,ensureLinkSync:a,createSymlink:o,createSymlinkSync:r,ensureSymlink:o,ensureSymlinkSync:r}}}),require_utils2=__commonJS({\"node_modules/jsonfile/utils.js\"(t,e){e.exports={stringify:function(t,{EOL:e=\"\\n\",finalEOL:s=!0,replacer:i=null,spaces:n}={}){const a=s?e:\"\";return JSON.stringify(t,i,n).replace(/\\n/g,e)+a},stripBom:function(t){return Buffer.isBuffer(t)&&(t=t.toString(\"utf8\")),t.replace(/^\\uFEFF/,\"\")}}}}),require_jsonfile=__commonJS({\"node_modules/jsonfile/index.js\"(t,e){var s;try{s=require_graceful_fs()}catch(t){s=require(\"fs\")}var i=require_universalify(),{stringify:n,stripBom:a}=require_utils2();var o={readFile:i.fromPromise(async function(t,e={}){\"string\"==typeof e&&(e={encoding:e});const n=e.fs||s,o=!(\"throws\"in e)||e.throws;let r,l=await i.fromCallback(n.readFile)(t,e);l=a(l);try{r=JSON.parse(l,e?e.reviver:null)}catch(e){if(o)throw e.message=`${t}: ${e.message}`,e;return null}return r}),readFileSync:function(t,e={}){\"string\"==typeof e&&(e={encoding:e});const i=e.fs||s,n=!(\"throws\"in e)||e.throws;try{let s=i.readFileSync(t,e);return s=a(s),JSON.parse(s,e.reviver)}catch(e){if(n)throw e.message=`${t}: ${e.message}`,e;return null}},writeFile:i.fromPromise(async function(t,e,a={}){const o=a.fs||s,r=n(e,a);await i.fromCallback(o.writeFile)(t,r,a)}),writeFileSync:function(t,e,i={}){const a=i.fs||s,o=n(e,i);return a.writeFileSync(t,o,i)}};e.exports=o}}),require_jsonfile2=__commonJS({\"node_modules/fs-extra/lib/json/jsonfile.js\"(t,e){\"use strict\";var s=require_jsonfile();e.exports={readJson:s.readFile,readJsonSync:s.readFileSync,writeJson:s.writeFile,writeJsonSync:s.writeFileSync}}}),require_output_file=__commonJS({\"node_modules/fs-extra/lib/output-file/index.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise,i=require_fs(),n=require(\"path\"),a=require_mkdirs(),o=require_path_exists().pathExists;e.exports={outputFile:s(async function(t,e,s=\"utf-8\"){const r=n.dirname(t);return await o(r)||await a.mkdirs(r),i.writeFile(t,e,s)}),outputFileSync:function(t,...e){const s=n.dirname(t);i.existsSync(s)||a.mkdirsSync(s),i.writeFileSync(t,...e)}}}}),require_output_json=__commonJS({\"node_modules/fs-extra/lib/json/output-json.js\"(t,e){\"use strict\";var{stringify:s}=require_utils2(),{outputFile:i}=require_output_file();e.exports=async function(t,e,n={}){const a=s(e,n);await i(t,a,n)}}}),require_output_json_sync=__commonJS({\"node_modules/fs-extra/lib/json/output-json-sync.js\"(t,e){\"use strict\";var{stringify:s}=require_utils2(),{outputFileSync:i}=require_output_file();e.exports=function(t,e,n){const a=s(e,n);i(t,a,n)}}}),require_json=__commonJS({\"node_modules/fs-extra/lib/json/index.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise,i=require_jsonfile2();i.outputJson=s(require_output_json()),i.outputJsonSync=require_output_json_sync(),i.outputJSON=i.outputJson,i.outputJSONSync=i.outputJsonSync,i.writeJSON=i.writeJson,i.writeJSONSync=i.writeJsonSync,i.readJSON=i.readJson,i.readJSONSync=i.readJsonSync,e.exports=i}}),require_move=__commonJS({\"node_modules/fs-extra/lib/move/move.js\"(t,e){\"use strict\";var s=require_fs(),i=require(\"path\"),{copy:n}=require_copy2(),{remove:a}=require_remove(),{mkdirp:o}=require_mkdirs(),{pathExists:r}=require_path_exists(),l=require_stat();e.exports=async function(t,e,c={}){const _=c.overwrite||c.clobber||!1,{srcStat:d,isChangingCase:u=!1}=await l.checkPaths(t,e,\"move\",c);await l.checkParentPaths(t,d,e,\"move\");const h=i.dirname(e);return i.parse(h).root!==h&&await o(h),async function(t,e,i,o){if(!o)if(i)await a(e);else if(await r(e))throw new Error(\"dest already exists.\");try{await s.rename(t,e)}catch(s){if(\"EXDEV\"!==s.code)throw s;await async function(t,e,s){const i={overwrite:s,errorOnExist:!0,preserveTimestamps:!0};return await n(t,e,i),a(t)}(t,e,i)}}(t,e,_,u)}}}),require_move_sync=__commonJS({\"node_modules/fs-extra/lib/move/move-sync.js\"(t,e){\"use strict\";var s=require_graceful_fs(),i=require(\"path\"),n=require_copy2().copySync,a=require_remove().removeSync,o=require_mkdirs().mkdirpSync,r=require_stat();function l(t,e,i){try{s.renameSync(t,e)}catch(s){if(\"EXDEV\"!==s.code)throw s;return function(t,e,s){return n(t,e,{overwrite:s,errorOnExist:!0,preserveTimestamps:!0}),a(t)}(t,e,i)}}e.exports=function(t,e,n){const c=(n=n||{}).overwrite||n.clobber||!1,{srcStat:_,isChangingCase:d=!1}=r.checkPathsSync(t,e,\"move\",n);return r.checkParentPathsSync(t,_,e,\"move\"),function(t){const e=i.dirname(t);return i.parse(e).root===e}(e)||o(i.dirname(e)),function(t,e,i,n){if(n)return l(t,e,i);if(i)return a(e),l(t,e,i);if(s.existsSync(e))throw new Error(\"dest already exists.\");return l(t,e,i)}(t,e,c,d)}}}),require_move2=__commonJS({\"node_modules/fs-extra/lib/move/index.js\"(t,e){\"use strict\";var s=require_universalify().fromPromise;e.exports={move:s(require_move()),moveSync:require_move_sync()}}}),require_lib=__commonJS({\"node_modules/fs-extra/lib/index.js\"(t,e){\"use strict\";e.exports={...require_fs(),...require_copy2(),...require_empty(),...require_ensure(),...require_json(),...require_mkdirs(),...require_move2(),...require_output_file(),...require_path_exists(),...require_remove()}}}),main_exports={};__export(main_exports,{default:()=>main_default}),module.exports=__toCommonJS(main_exports);var path7=__toESM(require(\"path\")),fs10=__toESM(require_lib()),import_obsidian28=require(\"obsidian\"),DEFAULT_SETTINGS={I18N_AGREEMENT:!1,I18N_WIZARD:!0,I18N_UUID:\"\",I18N_LANGUAGE:\"zh-cn\",I18N_COLOR:\"#409EFF\",I18N_AUTHOR:\"\",I18N_EDIT_MODE:!0,I18N_OPEN_SETTINGS:!0,I18N_CHECK_UPDATES:!0,I18N_SEARCH_TEXT:\"\",I18N_SORT:\"0\",I18N_TYPE:\"0\",I18N_MODE:0,I18N_NOTICE:!0,I18N_START_TIME:!0,I18N_MODE_LDT:!0,I18N_AUTOMATIC_UPDATE:!1,I18N_INCREMENTAL_EXTRACTION:!1,I18N_NAME_TRANSLATION:!1,I18N_NAME_TRANSLATION_PREFIX:\"[\",I18N_NAME_TRANSLATION_SUFFIX:\"]\",I18N_STYLE_SETTINGS:\"obsidian-style-settings\",I18N_MODE_NDT:!0,I18N_IGNORE:!1,I18N_NDT_URL:\"gitee\",I18N_MODE_NIT:!1,I18N_NIT_API:\"BAIDU\",I18N_NIT_API_INTERVAL:500,I18N_NIT_APIS:{BAIDU:{FROM:\"auto\",TO:\"zh\",APP_ID:\"\",KEY:\"\"}},I18N_NIT_OPENAI_URL:\"https://api.openai.com\",I18N_NIT_OPENAI_KEY:\"\",I18N_NIT_OPENAI_MODEL:\"gpt-3.5-turbo\",I18N_NIT_OPENAI_TIPS:\"你是一个翻译工作者，你将进行obsidian笔记软件的插件翻译，本次翻译的插件名称为: ${plugin}，请结合插件名称以及软件翻译的标准进行后续工作，因为大多数文本长度较短，请以符合中文习惯的方式翻译。接下来我会提交给你很多英文文本，请将其翻译为简体中文，并且只返回给我翻译后的内容\",I18N_MODE_IMT:!1,I18N_IMT_CONFIG:{selectors:[\"*\"],excludeSelectors:[\".modal .i18n__container\"],excludeTags:[],additionalSelectors:[],additionalExcludeSelectors:[],additionalExcludeTags:[],stayOriginalSelectors:[],stayOriginalTags:[],atomicBlockSelectors:[],atomicBlockTags:[]},I18N_SHARE_MODE:!0,I18N_SHARE_TOKEN:\"\",I18N_ADMIN_MODE:!1,I18N_ADMIN_VERIFY:!1,I18N_ADMIN_TOKEN:\"\",I18N_RE_TEMP_MODE:!0,I18N_RE_TEMP:\"\",I18N_RE_MODE:\"默认\",I18N_RE_FLAGS:\"gs\",I18N_RE_LENGTH:300,I18N_RE_MODE_EDIT:!1,I18N_RE_MODE_DISPLAY:!1,I18N_RE_DATAS_DISPLAY:!1,I18N_RE_MODES:[\"默认\"],I18N_RE_DATAS:{\"默认\":[\"Notice\\\\(\\\\s*(.+?)\\\\s*\\\\)\",\".log\\\\(\\\\s*(.+?)\\\\s*\\\\)\",\".error\\\\(\\\\s*(.+?)\\\\s*\\\\)\",\"t\\\\s*=\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\".textContent\\\\s*=\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"name\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"description\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"selection\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"annotation\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"link\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"text\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"search\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"speech\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"page\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\"settings\\\\s*:\\\\s*(['\\\"`])(.+?)\\\\1\",\".setText\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".setButtonText\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".setName\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".setDesc\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".setPlaceholder\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".setTooltip\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".appendText\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".setTitle\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".addHeading\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".renderMarkdown\\\\(\\\\s*(['\\\"`])(.+?)\\\\1\\\\s*\\\\)\",\".innerText\\\\s*=\\\\s*(['\\\"`]).*?\\\\1\"]},I18N_TAG_TYPE:\"light\",I18N_TAG_SHAPE:\"square\",I18N_BUTTON_TYPE:\"default\",I18N_BUTTON_SHAPE:\"square\"},import_obsidian15=require(\"obsidian\"),fs=__toESM(require_lib()),import_path=require(\"path\"),BaseSetting=class{constructor(t){this.settingTab=t,this.i18n=t.i18n,this.settings=t.i18n.settings,this.a=t.containerEl,this.containerEl=t.contentEl,this.app=t.app}display(){this.main()}},import_obsidian2=require(\"obsidian\"),LANGUAGES={\"zh-cn\":\"简体中文\"},DOWNLOAD={gitee:\"gitee(国内)\",github:\"github(国外)\"},API_TYPES={BAIDU:\"百度\",OPENAI:\"OpenAI\"},BAIDU_ERROR_CODE={52000:\"成功\",52001:\"请求超时\",52002:\"系统错误\",52003:\"未授权用户\",54000:\"必填参数为空\",54001:\"签名错误\",54003:\"访问频率受限\",54004:\"账户余额不足\",54005:\"长query请求频繁\",58000:\"客户端IP非法\",58001:\"译文语言方向不支持\",58002:\"服务当前已关闭\",58003:\"此IP已被封禁\",90107:\"认证未通过或未生效\",20003:\"请求内容存在安全风险 \"},I18N_SORT={0:\"正序\",1:\"倒序\"},I18N_TYPE={0:\"全部\",1:\"提取\",2:\"翻译\",3:\"还原\"},TAG_TYPE={light:\"样式一\",dark:\"样式二\",plain:\"样式三\"},TAG_SHAPE={square:\"方形\",round:\"圆形\"},BUTTON_TYPE={plain:\"样式一\",default:\"样式二\"},BUTTON_SHAPE={square:\"方形\",round:\"圆形\"},import_obsidian=require(\"obsidian\"),zh_cn_default={\"通用_I18N_文本\":\"I18N\",\"通用_标题_文本\":\"遇到难题？速加Q群咨询！\",\"通用_成功_文本\":\"成功\",\"通用_失败_文本\":\"失败\",\"通用_搜索_标题\":\"搜索\",\"通用_QQ_描述\":\"一键直达，加入Q群共享精彩！\",\"通用_贡献榜_描述\":\"贡献者荣誉榜\",\"通用_名称翻译_描述\":\"插件名称翻译列表\",\"通用_设置_描述\":\"进入I18N设置界面\",\"通用_帮助_描述\":\"查看I18N帮助文档\",\"通用_插件_描述\":\"I18N插件管理菜单\",\"通用_主题_描述\":\"I18N主题管理菜单\",\"通用_状态文件_前缀\":\"状态文件\",\"通用_插件更新_前缀\":\"插件更新\",\"标签_无译文_文本\":\"无译文\",\"标签_无译文_描述\":\"您还未提取译文\",\"标签_已翻译_文本\":\"已翻译\",\"标签_未翻译_文本\":\"未翻译\",\"标签_已过时_文本\":\"已过时\",\"标签_译文有误_文本\":\"译文有误\",\"标签_译文有误_描述\":\"格式格式可能存在错误 请仔细检查后重试\",\"标签_自带翻译_文本\":\"自带翻译\",\"标签_自带翻译_描述\":\"根据反馈 此插件可能自带中文\",\"标签_无_文本\":\"无\",\"命令_打开翻译面板\":\"打开翻译面板\",\"命令_打开帮助面板\":\"打开帮助面板\",\"功能_正则_占位符\":\"临时正则表达式(使用|分割)\",\"功能_删除_前缀\":\"删除译文\",\"功能_删除_描述\":\"删除译文目录\",\"功能_打开_前缀\":\"打开目录\",\"功能_打开_描述\":\"打开插件目录\",\"功能_编辑_描述\":\"编辑译文\",\"功能_共享_描述\":\"共享译文\",\"功能_提取_文本\":\"提取\",\"功能_提取_前缀\":\"提取译文\",\"功能_提取_通知一\":\"请还原插件后再进行提取\",\"功能_下载_文本\":\"下载\",\"功能_更新_文本\":\"更新\",\"功能_下载更新_通知一\":\"未获取到文件\",\"功能_替换_文本\":\"替换\",\"功能_替换_前缀\":\"插件翻译\",\"功能_替换_通知一\":\"译文未翻译，请先翻译译文\",\"功能_替换_通知二\":\"如遇翻译后插件失效\\n说明译文可能出现问题\\n点击还原即可恢复原状\",\"功能_还原_文本\":\"还原\",\"功能_还原_前缀\":\"插件还原\",\"功能_AI_文本\":\"AI\",\"功能_检查更新_前缀\":\"检查更新\",\"功能_检查更新_通知一\":\"发现新版本\",\"编辑器_通用_名称\":\"译文编辑器\",\"编辑器_通知_前缀\":\"译文编辑器\",\"编辑器_通用_AI_按钮\":\"AI\",\"编辑器_通用_还原_按钮\":\"还原\",\"编辑器_通用_删除_按钮\":\"删除\",\"编辑器_AI_通知一\":\"翻译成功\",\"编辑器_还原_通知一\":\"还原成功\",\"编辑器_删除_通知一\":\"删除成功\",\"编辑器_新增_通知一\":\"新增成功\",\"编辑器_新增_通知二\":\"新增失败\\n译文中已存在此内容\",\"编辑器_删除_按钮\":\"删除\",\"编辑器_删除_按钮_提示\":\"一键清空，删除所有未翻译项\",\"编辑器_新增_按钮\":\"新增\",\"编辑器_新增_按钮_提示\":\"点击添加，创造新的条目\",\"编辑器_源码_按钮\":\"源码\",\"编辑器_源码_按钮_提示\":\"深入代码，打开main.js文件\",\"编辑器_译文_按钮\":\"译文\",\"编辑器_译文_按钮_提示\":\"翻译世界，打开译文文件\",\"编辑器_保存_按钮\":\"保存\",\"编辑器_保存_按钮_提示\":\"锁定成果，保存当前的更改\",\"编辑器_大小_按钮_提示\":\"切换大小模式\",\"编辑器_上个_按钮_提示\":\"切换至上一个数据项\",\"编辑器_下个_按钮_提示\":\"切换至下一个数据项\",\"编辑器_数量_按钮_提示\":\"显示匹配的数据总数\",\"编辑器_行_插件版本\":\"插件版本\",\"编辑器_行_主题版本\":\"主题版本\",\"编辑器_行_修改日期\":\"修改日期\",\"编辑器_行_文件大小\":\"文件大小\",\"编辑器_行_源代码\":\"源代码\",\"编辑器_行_新描述\":\"新描述\",\"向导_通用_版本\":\"版本\",\"向导_通用_浏览\":\"浏览\",\"向导_通用_加入\":\"加入\",\"向导_视频_标题\":\"官方视频教程\",\"向导_视频_描述\":\"详尽演示Obsidian i18n操作，助力快速掌握\",\"向导_文档_标题\":\"官方文档教程\",\"向导_文档_描述\":\"Obsidian i18n的全面探索之旅指南\",\"向导_QQ_标题\":\"官方Q群\",\"向导_QQ_描述\":\"在官方群，您可发布需求、提交BUG、分享译文，并与其他用户就插件使用、翻译等话题交流互助。\",\"设置_通用_开启_文本\":\"开启\",\"设置_通用_关闭_文本\":\"关闭\",\"设置_通用_添加_文本\":\"添加\",\"设置_通用_显示_文本\":\"显示\",\"设置_通用_隐藏_文本\":\"隐藏\",\"设置_通用_测试_文本\":\"测试\",\"设置_主题_标题_缩写\":\"主题\",\"设置_主题_标签_标题\":\"标签样式\",\"设置_主题_标签_描述\":\"更改标签的外观，包括颜色、形状。\",\"设置_主题_按钮_标题\":\"按钮样式\",\"设置_主题_按钮_描述\":\"更改按钮的外观，包括颜色、形状。\",\"设置_基础_标题_缩写\":\"基础\",\"设置_基础_鸣谢列表_标题\":\"鸣谢列表\",\"设置_基础_鸣谢列表_描述\":\"感谢所有对本项目提供支持和帮助的个人和组织。\",\"设置_基础_鸣谢列表_按钮\":\"鸣谢\",\"设置_基础_翻译语言_标题\":\"翻译语言\",\"设置_基础_翻译语言_描述\":\"设置您希望翻译的目标语言，以便插件能够自动翻译成所需语言。(重启后生效)\",\"设置_基础_检查更新_标题\":\"检查更新\",\"设置_基础_检查更新_描述\":\"启用此功能，插件将自动检测可用更新，并在新版本发布时提醒您，确保插件功能始终处于最新状态。\",\"设置_基础_检查更新_按钮\":\"更新\",\"设置_基础_跳转设置_标题\":\"跳转设置\",\"设置_基础_跳转设置_描述\":\"启用此功能，插件页面将提供快速跳转按钮，方便您直接访问相关设置。\",\"设置_基础_译文编辑_标题\":\"译文编辑\",\"设置_基础_译文编辑_描述\":\"启用此功能，插件将允许您直接编辑和调整译文，以优化翻译内容。\",\"设置_基础_通知提示_标题\":\"通知提示\",\"设置_基础_通知提示_描述\":\"启用此功能，系统将在您成功执行特定操作时显示通知，以便您及时获得反馈。\",\"设置_基础_启动耗时_标题\":\"启动耗时\",\"设置_基础_启动耗时_描述\":\"启用此功能，插件将在启动时显示具体耗时（秒）。\",\"设置_本地_标题_缩写\":\"本地模式\",\"设置_本地_标题\":\"本地译文模式\",\"设置_本地_描述\":\"启用此模式，插件将优先使用本地存储的译文，以提供更个性化的翻译体验。\",\"设置_本地_智能更新_标题\":\"智能更新\",\"设置_本地_智能更新_描述\":\"启用此功能，当检测到插件版本变动时，自动应用本地已有译文。请注意，由于插件更新，部分译文可能需要适配，如遇错误请及时修正。\",\"设置_本地_智能更新_通知一\":\"开始检查更新\",\"设置_本地_智能更新_通知二\":\"没有需要更新的插件\",\"设置_本地_智能更新_通知三\":\"更新\",\"设置_本地_智能更新_通知四\":\"个插件\",\"设置_本地_扩展提取_标题\":\"扩展提取\",\"设置_本地_扩展提取_描述\":\"启用此功能，插件将在本地已有译文的基础上继续提取新译文，并自动合并，以实现译文的持续更新与累积。\",\"设置_本地_名称翻译_标题\":\"名称翻译\",\"设置_本地_名称翻译_描述\":\"启用此功能，将在插件后添加[]以展示其翻译名称(插件设置界面刷新操作会导致当前翻译失效，需重启ob重新加载翻译)\",\"设置_云端_标题_缩写\":\"云端模式\",\"设置_云端_标题\":\"云端译文模式\",\"设置_云端_描述\":\"启用此模式，插件将从云端获取最新的译文，确保翻译的时效性和准确性。\",\"设置_云端_通知一\":\"网络异常\",\"设置_云端_通知二\":\"主题目录获取成功\",\"设置_云端_通知三\":\"插件目录获取成功\",\"设置_云端_标记汉化_标题\":\"标记汉化\",\"设置_云端_标记汉化_描述\":\"启用此功能，自动识别并标记已内置中文的插件，该功能依赖于社区反馈和网络查询。\",\"设置_云端_云端接口_标题\":\"云端接口\",\"设置_云端_云端接口_描述\":\"设置云端接口地址，用于插件从指定的云端服务获取译文数据。\",\"设置_云端_服务配置_标题\":\"服务配置\",\"设置_AI_标题_缩写\":\"机器翻译\",\"设置_AI_标题\":\"人工智能模式\",\"设置_AI_描述\":\"启用此模式，利用人工智能技术进行翻译，提高翻译的准确性和流畅性。\",\"设置_AI_接口服务_标题\":\"接口服务\",\"设置_AI_接口服务_描述\":\"选择用于AI翻译的接口服务，以满足不同的翻译需求和偏好。\",\"设置_AI_请求间隔_标题\":\"请求间隔\",\"设置_AI_请求间隔_描述\":\"设置AI翻译请求之间的时间间隔，以避免过快的请求频率导致服务限制。\",\"设置_AI_百度_原始语言_标题\":\"原始语言\",\"设置_AI_百度_原始语言_描述\":\"选择百度翻译服务的原始语言。\",\"设置_AI_百度_目标语言_标题\":\"目标语言\",\"设置_AI_百度_目标语言_描述\":\"选择百度翻译服务的目标语言，即您希望将源语言翻译成的语言。\",\"设置_AI_百度_标识_标题\":\"标识\",\"设置_AI_百度_标识_描述\":\"输入您的百度翻译服务APPID，用于身份验证和访问控制。\",\"设置_AI_百度_密钥_标题\":\"密钥\",\"设置_AI_百度_密钥_描述\":\"输入与您的百度APPID关联的密钥，以确保翻译请求的安全。\",\"设置_AI_OPENAI_接口_标题\":\"接口\",\"设置_AI_OPENAI_接口_描述\":\"选择OPENAI提供的API接口，以利用其先进的AI模型进行翻译。\",\"设置_AI_OPENAI_KEY_标题\":\"密钥\",\"设置_AI_OPENAI_KEY_描述\":\"输入您的OPENAI服务密钥，用于访问OPENAI的AI模型和接口。\",\"设置_AI_OPENAI_模型_标题\":\"模型\",\"设置_AI_OPENAI_模型_描述\":\"选择OPENAI提供的AI模型，不同的模型可能适用于不同的翻译任务和场景。\",\"设置_AI_OPENAI_提示_标题\":\"提示\",\"设置_AI_OPENAI_提示_描述\":\"配置OPENAI模型的提示信息，以优化翻译结果或指导模型生成特定风格的文本。\",\"设置_AI_OPENAI_提示_占位符\":\"提示词\",\"设置_沉浸_标题_缩写\":\"沉浸翻译\",\"设置_沉浸_标题\":\"沉浸翻译模式\",\"设置_沉浸_描述\":\"启用此模式，为您提供一个专注于翻译的环境，减少干扰，提高翻译效率和质量。\",\"设置_共享_标题_缩写\":\"共建云端\",\"设置_共享_标题\":\"共建云端\",\"设置_共享_描述\":\"启用此模式，共享和协作翻译资源，提升整个社区的翻译质量和效率。\",\"设置_共享_贡献者_标题\":\"贡献者模式\",\"设置_共享_贡献者_描述\":\"启用此功能，作为贡献者参与云端翻译资源的共建，提交和分享您的翻译成果。\",\"设置_共享_贡献者_提示\":\"Token\",\"设置_共享_管理员_标题\":\"管理员模式\",\"设置_共享_管理员_描述\":\"启用此功能，管理云端翻译资源，审核发布贡献者的翻译，维护翻译质量。\",\"设置_共享_管理员_提示\":\"Token\",\"设置_正则_标题_缩写\":\"正则配置\",\"设置_正则_通知_前缀\":\"正则配置\",\"设置_正则_临时正则_标题\":\"临时正则\",\"设置_正则_临时正则_描述\":\"启用此功能，设置临时使用的正则表达式，用于快速匹配。\",\"设置_正则_正则模式_标题\":\"正则模式\",\"设置_正则_正则模式_描述\":\"正则表达式的模式，这将决定匹配文本的基本规则。\",\"设置_正则_正则标志_标题\":\"正则标志\",\"设置_正则_正则标志_描述\":\"正则表达式的修饰符，如全局匹配、忽略大小写等，以控制匹配行为。\",\"设置_正则_正则标志_占位符\":\"修饰符\",\"设置_正则_匹配长度_标题\":\"匹配长度\",\"设置_正则_匹配长度_描述\":\"指定匹配时考虑的文本长度，以优化匹配效率和结果。\",\"设置_正则_模式编辑_标题\":\"模式编辑\",\"设置_正则_模式编辑_描述\":\"编辑和调整正则表达式的模式，以适应复杂的匹配场景。\",\"设置_正则_模式编辑_占位符\":\"请输入模式\",\"设置_正则_模式编辑_通知一\":\"添加失败，请确保输入了有效的模式字符串，并且它尚未被添加。\",\"设置_正则_数据编辑_标题\":\"数据编辑\",\"设置_正则_数据编辑_描述\":\"编辑模式中的正则数据，对匹配到的文本进行精细化调整和处理。\",\"设置_正则_数据编辑_占位符\":\"请输入正则表达式\",\"设置_正则_数据编辑_通知一\":\"不能删除最后一个正则表达式模式。\"},localeMap={\"zh-cn\":zh_cn_default},locale=localeMap[import_obsidian.moment.locale()];function t(t){return locale&&locale[t]||zh_cn_default[t]}var I18nBasis=class extends BaseSetting{main(){new import_obsidian2.Setting(this.containerEl).setName(t(\"设置_基础_鸣谢列表_标题\")).setDesc(t(\"设置_基础_鸣谢列表_描述\")).addButton(e=>e.setButtonText(t(\"设置_基础_鸣谢列表_按钮\")).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).onClick(async()=>{this.i18n.notice.warning(\"Git\",\"\\n曲淡歌\",1e4),this.i18n.notice.success(\"审核人员\",\"\\n曲淡歌\\nFENDI\\n宇桐非\\n孤猫\",1e4),this.i18n.notice.error(\"贡献人员\",\"详情查看贡献榜单\",1e4)})),new import_obsidian2.Setting(this.containerEl).setName(t(\"设置_基础_翻译语言_标题\")).setDesc(t(\"设置_基础_翻译语言_描述\")).addDropdown(t=>t.addOptions(LANGUAGES).setValue(this.settings.I18N_LANGUAGE).onChange(async t=>{this.settings.I18N_LANGUAGE=t,await this.i18n.saveSettings()}).selectEl.addClass(\"i18n-select\")),new import_obsidian2.Setting(this.containerEl).setName(t(\"设置_基础_检查更新_标题\")).setDesc(t(\"设置_基础_检查更新_描述\")).addButton(e=>e.setButtonText(t(\"设置_基础_检查更新_按钮\")).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).onClick(async()=>{const t=await this.i18n.api.giteeGetReleasesLatest();if(t.data.tag_name===this.i18n.updatesVersion){const e=t.data.assets.find(t=>\"manifest.json\"===t.name),s=t.data.assets.find(t=>\"styles.css\"===t.name),i=t.data.assets.find(t=>\"main.js\"===t.name);let n=\"\",a=\"\",o=\"\";if(void 0===e)return void this.i18n.notice.result(\"检查更新\",!1,\"未找到manifest.json文件\");{const t=await this.i18n.api.giteeDownload(e.browser_download_url);if(!t.state)return void this.i18n.notice.result(\"检查更新\",!1,`请求manifest.json失败\\n${t.data}`);o=t.data}if(void 0===s)return void this.i18n.notice.result(\"检查更新\",!1,\"未找到styles.css文件\");{const t=await this.i18n.api.giteeDownload(s.browser_download_url);if(!t.state)return void this.i18n.notice.result(\"检查更新\",!1,`请求styles.css失败\\n${t.data}`);n=t.data}if(void 0===i)return void this.i18n.notice.result(\"检查更新\",!1,\"未找到main.js文件\");{const t=await this.i18n.api.giteeDownload(i.browser_download_url);if(!t.state)return void this.i18n.notice.result(\"检查更新\",!1,`请求main.js失败\\n${t.data}`);a=t.data}try{const t=(0,import_path.join)((0,import_path.normalize)(this.app.vault.adapter.getBasePath()),this.i18n.manifest.dir);console.log(t),fs.ensureDirSync(t),await fs.writeFile((0,import_path.join)(t,\"styles.css\"),n),await fs.writeFile((0,import_path.join)(t,\"main.js\"),a),await fs.writeFile((0,import_path.join)(t,\"manifest.json\"),o),this.i18n.notice.result(\"检查更新\",!0,\"更新成功\"),document.location.reload()}catch(t){this.i18n.notice.result(\"检查更新\",!1,`写入文件失败${t}`)}}else this.i18n.notice.result(\"检查更新\",!1,\"未找到文件\")}).setClass(this.i18n.updatesMark?\"1\":\"i18n--hidden\")).addToggle(t=>t.setValue(this.settings.I18N_CHECK_UPDATES).onChange(async()=>{this.settings.I18N_CHECK_UPDATES=!this.settings.I18N_CHECK_UPDATES,this.i18n.saveSettings(),this.settings.I18N_CHECK_UPDATES?await this.i18n.checkUpdates():(this.i18n.updatesMark=!1,this.i18n.updatesVersion=\"\"),this.settingTab.basisDisplay()}).toggleEl.addClass(\"i18n-checkbox\")),new import_obsidian2.Setting(this.containerEl).setName(t(\"设置_基础_跳转设置_标题\")).setDesc(t(\"设置_基础_跳转设置_描述\")).addToggle(t=>t.setValue(this.settings.I18N_OPEN_SETTINGS).onChange(()=>{this.settings.I18N_OPEN_SETTINGS=!this.settings.I18N_OPEN_SETTINGS,this.i18n.saveSettings(),this.settingTab.basisDisplay()}).toggleEl.addClass(\"i18n-checkbox\")),new import_obsidian2.Setting(this.containerEl).setName(t(\"设置_基础_译文编辑_标题\")).setDesc(t(\"设置_基础_译文编辑_描述\")).addToggle(t=>t.setValue(this.settings.I18N_EDIT_MODE).onChange(()=>{this.settings.I18N_EDIT_MODE=!this.settings.I18N_EDIT_MODE,this.i18n.saveSettings(),this.settingTab.basisDisplay()}).toggleEl.addClass(\"i18n-checkbox\")),new import_obsidian2.Setting(this.containerEl).setName(t(\"设置_基础_通知提示_标题\")).setDesc(t(\"设置_基础_通知提示_描述\")).addToggle(t=>t.setValue(this.settings.I18N_NOTICE).onChange(()=>{this.settings.I18N_NOTICE=!this.settings.I18N_NOTICE,this.i18n.saveSettings()}).toggleEl.addClass(\"i18n-checkbox\")),new import_obsidian2.Setting(this.containerEl).setName(t(\"设置_基础_启动耗时_标题\")).setDesc(t(\"设置_基础_启动耗时_描述\")).addToggle(t=>t.setValue(this.settings.I18N_START_TIME).onChange(()=>{this.settings.I18N_START_TIME=!this.settings.I18N_START_TIME,this.i18n.saveSettings()}).toggleEl.addClass(\"i18n-checkbox\"))}},import_obsidian3=require(\"obsidian\"),I18nModLDT=class extends BaseSetting{main(){const e=new import_obsidian3.Setting(this.containerEl);e.setName(`${t(\"设置_本地_标题\")} ${this.settings.I18N_MODE_LDT?\"🟢\":\"🔴\"}`),e.setDesc(t(\"设置_本地_描述\")),e.addButton(e=>{e.setButtonText(this.settings.I18N_MODE_LDT?t(\"设置_通用_关闭_文本\"):t(\"设置_通用_开启_文本\")),e.onClick(()=>{this.settings.I18N_MODE_LDT=!this.settings.I18N_MODE_LDT,this.i18n.saveSettings(),this.settingTab.ldtDisplay()}),e.setClass(\"i18n-button\"),e.setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`),this.settings.I18N_MODE_LDT?e.setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-danger`):e.setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`)});const s=new import_obsidian3.Setting(this.containerEl);s.setName(t(\"设置_本地_智能更新_标题\")),s.setDesc(t(\"设置_本地_智能更新_描述\")),s.addToggle(t=>t.setValue(this.settings.I18N_AUTOMATIC_UPDATE).onChange(()=>{this.settings.I18N_AUTOMATIC_UPDATE=!this.settings.I18N_AUTOMATIC_UPDATE,this.i18n.saveSettings(),this.settingTab.ldtDisplay()}).toggleEl.addClass(\"i18n-checkbox\"));const i=new import_obsidian3.Setting(this.containerEl);i.setName(t(\"设置_本地_扩展提取_标题\")),i.setDesc(t(\"设置_本地_扩展提取_描述\")),i.addToggle(t=>t.setValue(this.settings.I18N_INCREMENTAL_EXTRACTION).onChange(()=>{this.settings.I18N_INCREMENTAL_EXTRACTION=!this.settings.I18N_INCREMENTAL_EXTRACTION,this.i18n.saveSettings(),this.settingTab.ldtDisplay()}).toggleEl.addClass(\"i18n-checkbox\"));const n=new import_obsidian3.Setting(this.containerEl);n.setName(t(\"设置_本地_名称翻译_标题\")),n.setDesc(t(\"设置_本地_名称翻译_描述\")),n.addText(t=>t.setValue(this.settings.I18N_NAME_TRANSLATION_PREFIX).onChange(t=>{this.settings.I18N_NAME_TRANSLATION_PREFIX=t,this.i18n.reloadPluginsName(),this.i18n.saveSettings()}).inputEl.addClass(\"i18n-name__input\",\"i18n-input\")),n.addText(t=>t.setValue(this.settings.I18N_NAME_TRANSLATION_SUFFIX).onChange(t=>{this.settings.I18N_NAME_TRANSLATION_SUFFIX=t,this.i18n.reloadPluginsName(),this.i18n.saveSettings()}).inputEl.addClass(\"i18n-name__input\",\"i18n-input\")),n.addToggle(t=>t.setValue(this.settings.I18N_NAME_TRANSLATION).onChange(()=>{this.settings.I18N_NAME_TRANSLATION=!this.settings.I18N_NAME_TRANSLATION,this.settings.I18N_NAME_TRANSLATION?this.i18n.trenslatorPluginsName():this.i18n.restorePluginsName(),this.i18n.saveSettings(),this.settingTab.ldtDisplay()}).toggleEl.addClass(\"i18n-checkbox\"))}},import_obsidian4=require(\"obsidian\"),I18nModNDT=class extends BaseSetting{main(){const e=new import_obsidian4.Setting(this.containerEl);e.setName(`${t(\"设置_云端_标题\")} ${this.settings.I18N_MODE_NDT?\"🟢\":\"🔴\"}`),e.setDesc(t(\"设置_云端_描述\")),e.addButton(e=>{e.setButtonText(this.settings.I18N_MODE_NDT?t(\"设置_通用_关闭_文本\"):t(\"设置_通用_开启_文本\")),e.onClick(async()=>{this.settings.I18N_MODE_NDT=!this.settings.I18N_MODE_NDT,this.settingTab.ndtDisplay(),await this.i18n.saveSettings(),await this.i18n.ignoreCache(),await this.i18n.themeDirectoryCache(),await this.i18n.pliginDirectoryCache()}),e.setClass(\"i18n-button\"),e.setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`),this.settings.I18N_MODE_NDT?e.setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-danger`):e.setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`)});const s=new import_obsidian4.Setting(this.containerEl);s.setName(t(\"设置_云端_标记汉化_标题\")),s.setDesc(t(\"设置_云端_标记汉化_描述\")),s.addToggle(t=>t.setValue(this.settings.I18N_IGNORE).onChange(async()=>{this.settings.I18N_IGNORE=!this.settings.I18N_IGNORE,this.i18n.saveSettings(),await this.i18n.ignoreCache(),this.settingTab.ndtDisplay()}).toggleEl.addClass(\"i18n-checkbox\"));const i=new import_obsidian4.Setting(this.containerEl);i.setName(t(\"设置_云端_云端接口_标题\")),i.setDesc(t(\"设置_云端_云端接口_描述\")),i.addDropdown(t=>t.addOptions(DOWNLOAD).setValue(this.settings.I18N_NDT_URL).onChange(async t=>{this.settings.I18N_NDT_URL=t,await this.i18n.saveSettings()}).selectEl.addClass(\"i18n-select\"))}},import_obsidian6=require(\"obsidian\"),import_crypto=require(\"crypto\"),import_obsidian5=require(\"obsidian\"),API=class{constructor(t){this.geteeOwner=\"zero--two\",this.geteeRepo=\"obsidian-i18n-translation\",this.i18n=t,this.settings=this.i18n.settings}async version(){const t={url:\"https://gitee.com/zero--two/obsidian-i18n-translation/raw/master/version.json\",method:\"GET\"};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(t)).json}}catch(t){return{state:!0,data:t}}}async getMark(){const t={url:\"https://gitee.com/zero--two/obsidian-i18n-translation/raw/master/translation/mark/zh-cn.json\",method:\"GET\"};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(t)).json}}catch(t){return{state:!1,data:[]}}}async baiduAPI(t){const e=this.i18n.settings.I18N_NIT_APIS.BAIDU,s=(0,import_crypto.createHash)(\"md5\"),i=e.FROM,n=e.TO,a=e.APP_ID,o=e.KEY,r=Math.round(10*Math.random()),l={url:`https://fanyi-api.baidu.com/api/trans/vip/translate?q=${t}&from=${i}&to=${n}&appid=${a}&salt=${r}&sign=${s.update(`${a}${t}${r}${o}`).digest(\"hex\")}`,method:\"GET\"};try{const t=await(0,import_obsidian5.requestUrl)(l);if(t.json.hasOwnProperty(\"error_code\")){const e=t.json.error_code;return this.i18n.notice.error(\"百度\",`${e}\\n${BAIDU_ERROR_CODE[e]}`),{state:!1,data:\"\"}}return{state:!0,data:t.json.trans_result[0].dst}}catch(t){return{state:!1,data:\"\"}}}async openAI(t,e){try{const t={url:`${this.settings.I18N_NIT_OPENAI_URL}/v1/chat/completions`,method:\"POST\",headers:{\"Content-Type\":\"application/json\",Authorization:`Bearer ${this.settings.I18N_NIT_OPENAI_KEY}`},body:JSON.stringify({model:this.settings.I18N_NIT_OPENAI_MODEL,messages:[{role:\"user\",content:this.settings.I18N_NIT_OPENAI_TIPS},{role:\"user\",content:e}],temperature:.7})},s=await(0,import_obsidian5.requestUrl)(t);return s.json&&s.json.choices&&s.json.choices.length>0?s.json.choices[0].message:null}catch(t){return this.i18n.notice.error(\"错误\",t),null}}openAITest(){const t={url:`${this.settings.I18N_NIT_OPENAI_URL}/v1/chat/completions`,method:\"POST\",headers:{\"Content-Type\":\"application/json\",Authorization:`Bearer ${this.settings.I18N_NIT_OPENAI_KEY}`},body:JSON.stringify({model:this.settings.I18N_NIT_OPENAI_MODEL,messages:[{role:\"user\",content:\"i18n\"}],temperature:.7})};(0,import_obsidian5.requestUrl)(t).then(()=>{this.i18n.notice.result(\"OpenAI\",!0)}).catch(t=>{this.i18n.notice.result(\"OpenAI\",!1,t)})}async githubGetTranslation(t,e,s){try{const i={url:`https://raw.githubusercontent.com/0011000000110010/obsidian-i18n/refs/heads/master/${t}/dict/${e}/zh-cn/${s}.json`,method:\"GET\"};return console.log(i),{state:!0,data:(await(0,import_obsidian5.requestUrl)(i)).json}}catch(t){return{state:!1,data:\"\"}}}async giteeGetTranslation(t,e,s){try{const i={url:`https://gitee.com/zero--two/obsidian-i18n-translation/raw/master/${t}/dict/${e}/zh-cn/${s}.json`,method:\"GET\"};return{state:!0,data:(await(0,import_obsidian5.requestUrl)(i)).json}}catch(t){return{state:!1,data:\"\"}}}async giteeGetToken(){const t={url:\"https://gitee.com/zero--two/obsidian-i18n-translation/raw/master/version.json\",method:\"GET\"};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(t)).json.token}}catch(t){return this.i18n.notice.error(\"I18N\",`token获取失败(如果没有自定义token则无法使用提交功能)\\n${t}`),{state:!1,data:t}}}async giteeGetDirectory(t){const e={url:`https://gitee.com/zero--two/obsidian-i18n-translation/raw/master/${t}/directory/${this.i18n.settings.I18N_LANGUAGE}.json`,method:\"GET\"};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(e)).json}}catch(t){return{state:!1,data:t}}}async giteeGetDirectoryAdmin(t,e){const s={url:`https://gitee.com/zero--two/obsidian-i18n-translation/raw/master/${t}/directory/${e}.json`,method:\"GET\"};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(s)).json}}catch(t){return{state:!1,data:t}}}async giteeGetSha(t){try{const e={url:`https://gitee.com/api/v5/repos/zero--two/obsidian-i18n-translation/contents/${t}`,method:\"GET\",body:JSON.stringify({access_token:this.i18n.settings.I18N_ADMIN_TOKEN,owner:\"zero--two\",repo:\"obsidian-i18n-translation\",path:t})};return console.log(e),{state:!0,data:(await(0,import_obsidian5.requestUrl)(e)).json}}catch(t){return{state:!1,data:t}}}async giteeGetContents(t){try{const e={url:`https://gitee.com/api/v5/repos/zero--two/obsidian-i18n-translation/contents/${t}`,method:\"GET\",body:JSON.stringify({access_token:this.i18n.settings.I18N_ADMIN_TOKEN,owner:\"zero--two\",repo:\"obsidian-i18n-translation\",path:t})};return{state:!0,data:(await(0,import_obsidian5.requestUrl)(e)).json}}catch(t){return{state:!1,data:t}}}async giteeGetContributor(){try{const t={url:\"https://gitee.com/zero--two/obsidian-i18n-translation/raw/master/translation/contributor/zh-cn.json\",method:\"GET\"};return{state:!0,data:(await(0,import_obsidian5.requestUrl)(t)).json}}catch(t){return{state:!1,data:t}}}async giteeGetReleasesLatest(){try{const t={url:\"https://gitee.com/api/v5/repos/zero--two/obsidian-i18n-translation/releases/latest\",method:\"GET\"};return console.log(t),{state:!0,data:(await(0,import_obsidian5.requestUrl)(t)).json}}catch(t){return console.log(t),{state:!1,data:\"\"}}}async giteeGetAllIssue(){const t={url:`https://gitee.com/api/v5/repos/${this.geteeOwner}/${this.geteeRepo}/issues`,method:\"GET\"};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(t)).json}}catch(t){return{state:!1,data:t}}}async giteeGetIssue(t){const e={url:`https://gitee.com/api/v5/repos/${this.geteeOwner}/${this.geteeRepo}/issues/${t}`,method:\"GET\"};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(e)).json}}catch(t){return{state:!1,data:t}}}async giteePostIssue(t,e,s){try{let i;if(\"\"!==this.settings.I18N_SHARE_TOKEN)i=this.settings.I18N_SHARE_TOKEN;else{const t=await this.giteeGetToken();console.log(t),i=t.state?atob(t.data):\"\"}if(\"\"===i)return;const n={url:`https://gitee.com/api/v5/repos/${this.geteeOwner}/issues`,method:\"POST\",headers:{\"Content-Type\":\"application/json\",Charset:\"UTF-8\"},body:JSON.stringify({access_token:i,repo:this.geteeRepo,title:t,body:e,labels:s})};return{state:!0,data:(await(0,import_obsidian5.requestUrl)(n)).json}}catch(t){return this.i18n.notice.result(\"提交操作\",!1,`${t}`),{state:!1,data:t}}}async giteePatchIssue(t,e){const s={url:`https://gitee.com/api/v5/repos/${this.geteeOwner}/issues/${t}`,method:\"PATCH\",headers:{\"Content-Type\":\"application/json\",Charset:\"UTF-8\"},body:JSON.stringify({access_token:this.i18n.settings.I18N_ADMIN_TOKEN,owner:this.geteeOwner,repo:this.geteeRepo,number:t,state:e})};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(s)).json}}catch(t){return{state:!1,data:t}}}async giteePostIssueComments(t,e){try{let s;if(\"\"!==this.settings.I18N_SHARE_TOKEN)s=this.settings.I18N_SHARE_TOKEN;else{const t=await this.giteeGetToken();console.log(t),s=t.state?atob(t.data):\"\"}if(\"\"===s)return;const i={url:`https://gitee.com/api/v5/repos/${this.geteeOwner}/${this.geteeRepo}/issues/${t}/comments`,method:\"POST\",headers:{\"Content-Type\":\"application/json\",Charset:\"UTF-8\"},body:JSON.stringify({access_token:s,owner:this.geteeOwner,repo:this.geteeRepo,number:t,body:e})};return{state:!0,data:(await(0,import_obsidian5.requestUrl)(i)).json}}catch(t){return{state:!1,data:t}}}async giteeDownload(t){try{const e={url:t,method:\"GET\"};return console.log(e),{state:!0,data:(await(0,import_obsidian5.requestUrl)(e)).text}}catch(t){return console.log(t),{state:!1,data:\"\"}}}async giteeGetFile(t){const e={url:`https://gitee.com/${this.geteeOwner}/${this.geteeRepo}/raw/master/${t}`,method:\"GET\"};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(e)).json}}catch(t){return{state:!1,data:t}}}async giteeCreateFileContent(t,e,s){const i={url:`https://gitee.com/api/v5/repos/${this.geteeOwner}/${this.geteeRepo}/contents/${t}`,method:\"POST\",headers:{\"Content-Type\":\"application/json\",charset:\"UTF-8\"},body:JSON.stringify({access_token:this.settings.I18N_ADMIN_TOKEN,owner:this.geteeOwner,repo:this.geteeRepo,path:t,content:e,message:s})};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(i)).json}}catch(t){return{state:!1,data:t}}}async giteeUpdateFileContent(t,e,s,i){const n={url:`https://gitee.com/api/v5/repos/${this.geteeOwner}/${this.geteeRepo}/contents/${t}`,method:\"PUT\",headers:{\"Content-Type\":\"application/json\",Charset:\"UTF-8\"},body:JSON.stringify({access_token:this.i18n.settings.I18N_ADMIN_TOKEN,owner:this.geteeOwner,repo:this.geteeRepo,content:e,sha:s,message:i})};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(n)).json}}catch(t){return{state:!1,data:t}}}async giteeUser(){const t={url:\"https://gitee.com/api/v5/user\",method:\"GET\",headers:{Authorization:`token ${this.i18n.settings.I18N_ADMIN_TOKEN}`}};try{return{state:!0,data:(await(0,import_obsidian5.requestUrl)(t)).json}}catch(t){return{state:!1,data:t}}}async checkUser(t){const e={url:`https://gitee.com/api/v5/repos/${this.geteeOwner}/${this.geteeRepo}/collaborators/${t}`,method:\"GET\",headers:{Authorization:`token ${this.i18n.settings.I18N_ADMIN_TOKEN}`},body:JSON.stringify({owner:this.geteeOwner,repo:this.geteeRepo,username:t})};try{return 204===(await(0,import_obsidian5.requestUrl)(e)).status?{state:!0,data:!0}:{state:!1,data:!1}}catch(t){return{state:!1,data:t}}}},TranslationAPI=class{constructor(t){this.geteeOwner=\"zero--two\",this.geteeRepo=\"obsidian-i18n-translation\",this.i18n=t,this.settings=this.i18n.settings}async baiduAPI(t){const e=this.i18n.settings.I18N_NIT_APIS.BAIDU,s=(0,import_crypto.createHash)(\"md5\"),i=e.FROM,n=e.TO,a=e.APP_ID,o=e.KEY,r=Math.round(10*Math.random()),l={url:`https://fanyi-api.baidu.com/api/trans/vip/translate?q=${t}&from=${i}&to=${n}&appid=${a}&salt=${r}&sign=${s.update(`${a}${t}${r}${o}`).digest(\"hex\")}`,method:\"GET\"};try{const t=await(0,import_obsidian5.requestUrl)(l);if(t.json.hasOwnProperty(\"error_code\")){const e=t.json.error_code;return{state:!1,data:BAIDU_ERROR_CODE[e]}}return{state:!0,data:t.json.trans_result[0].dst}}catch(t){return{state:!1,data:\"\"}}}async openAI(t){try{const e={url:`${this.settings.I18N_NIT_OPENAI_URL}/v1/chat/completions`,method:\"POST\",headers:{\"Content-Type\":\"application/json\",Authorization:`Bearer ${this.settings.I18N_NIT_OPENAI_KEY}`},body:JSON.stringify({model:this.settings.I18N_NIT_OPENAI_MODEL,messages:[{role:\"user\",content:this.settings.I18N_NIT_OPENAI_TIPS},{role:\"user\",content:t}],temperature:.7})},s=await(0,import_obsidian5.requestUrl)(e);if(s.json&&s.json.choices&&s.json.choices.length>0)return{state:!0,data:s.json.choices[0].message}}catch(t){return this.i18n.notice.error(\"错误\",t),{state:!0,data:t}}}openAITest(){const t={url:`${this.settings.I18N_NIT_OPENAI_URL}/v1/chat/completions`,method:\"POST\",headers:{\"Content-Type\":\"application/json\",Authorization:`Bearer ${this.settings.I18N_NIT_OPENAI_KEY}`},body:JSON.stringify({model:this.settings.I18N_NIT_OPENAI_MODEL,messages:[{role:\"user\",content:\"i18n\"}],temperature:.7})};(0,import_obsidian5.requestUrl)(t).then(()=>{this.i18n.notice.result(\"OpenAI\",!0)}).catch(t=>{this.i18n.notice.result(\"OpenAI\",!1,t)})}},I18nModeNIT=class extends BaseSetting{main(){const e=new API(this.i18n),s=new import_obsidian6.Setting(this.containerEl);s.setName(`${t(\"设置_AI_标题\")} ${this.settings.I18N_MODE_NIT?\"🟢\":\"🔴\"}`),s.setDesc(t(\"设置_AI_描述\")),s.addButton(e=>{e.setButtonText(this.settings.I18N_MODE_NIT?t(\"设置_通用_关闭_文本\"):t(\"设置_通用_开启_文本\")),e.onClick(async()=>{this.settings.I18N_MODE_NIT=!this.settings.I18N_MODE_NIT,this.i18n.saveSettings(),this.settingTab.nitDisplay()}),e.setClass(\"i18n-button\"),e.setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`),this.settings.I18N_MODE_NIT?e.setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-danger`):e.setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`)});const i=new import_obsidian6.Setting(this.containerEl);i.setName(t(\"设置_AI_接口服务_标题\")),i.setDesc(t(\"设置_AI_接口服务_描述\")),i.addDropdown(t=>t.addOptions(API_TYPES).setValue(this.settings.I18N_NIT_API).onChange(t=>{this.settings.I18N_NIT_API=t,this.i18n.saveSettings(),this.settingTab.nitDisplay()}).selectEl.addClass(\"i18n-select\")),i.addButton(s=>s.setButtonText(t(\"设置_通用_测试_文本\")).onClick(async()=>{switch(this.settings.I18N_NIT_API){case\"BAIDU\":(await e.baiduAPI(\"i18n\")).state&&this.i18n.notice.result(\"百度\",!0);break;case\"OPENAI\":e.openAITest()}}).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`));const n=new import_obsidian6.Setting(this.containerEl);n.setName(t(\"设置_AI_请求间隔_标题\")),n.setDesc(t(\"设置_AI_请求间隔_描述\")),n.addSlider(t=>t.setDynamicTooltip().setLimits(0,1e3,50).setValue(this.settings.I18N_NIT_API_INTERVAL).onChange(t=>{this.settings.I18N_NIT_API_INTERVAL=t,this.i18n.saveSettings()})),new import_obsidian6.Setting(this.containerEl).setName(t(\"设置_云端_服务配置_标题\")).setHeading()}},import_obsidian7=require(\"obsidian\"),I18nModIMT=class extends BaseSetting{main(){const e=new import_obsidian7.Setting(this.containerEl);e.setName(`${t(\"设置_沉浸_标题\")} ${this.settings.I18N_MODE_IMT?\"🟢\":\"🔴\"}`),e.setDesc(t(\"设置_沉浸_描述\")),e.addButton(t=>t.setButtonText(\"重启\").onClick(()=>{document.location.reload()}).buttonEl.addClasses([\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-warning`,`is-${this.settings.I18N_BUTTON_SHAPE}`])),e.addButton(e=>{e.setButtonText(this.settings.I18N_MODE_IMT?t(\"设置_通用_关闭_文本\"):t(\"设置_通用_开启_文本\")),e.onClick(()=>{this.settings.I18N_MODE_IMT=!this.settings.I18N_MODE_IMT,this.settings.I18N_MODE_IMT||document.location.reload(),this.i18n.saveSettings(),this.settingTab.imtDisplay(),this.settings.I18N_MODE_IMT?this.i18n.activateIMT():this.i18n.enableIMT()}),e.setClass(\"i18n-button\"),e.setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`),this.settings.I18N_MODE_IMT?e.setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-danger`):e.setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`)}),new import_obsidian7.Setting(this.containerEl).setName(\"指定翻译范围\").setHeading();const s=new import_obsidian7.Setting(this.containerEl);s.setName(\"匹配元素\"),s.setDesc(\"修改后请重启沉浸式翻译功能\"),s.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.selectors?this.settings.I18N_IMT_CONFIG.selectors.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.selectors=t.split(\",\"),await this.i18n.saveSettings(),window.immersiveTranslateConfig={pageRule:this.settings.I18N_IMT_CONFIG},console.log(window.immersiveTranslateConfig)}));const i=new import_obsidian7.Setting(this.containerEl);i.setName(\"排除元素\"),i.setDesc(\"仅翻译匹配到的元素\"),i.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.excludeSelectors?this.settings.I18N_IMT_CONFIG.excludeSelectors.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.excludeSelectors=t.split(\",\"),await this.i18n.saveSettings(),window.immersiveTranslateConfig={pageRule:this.settings.I18N_IMT_CONFIG},console.log(window.immersiveTranslateConfig)}));const n=new import_obsidian7.Setting(this.containerEl);n.setName(\"排除Tags\"),n.setDesc(\"排除Tags，不翻译匹配的Tag\"),n.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.excludeTags?this.settings.I18N_IMT_CONFIG.excludeTags.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.excludeTags=t.split(\",\"),await this.i18n.saveSettings()})),new import_obsidian7.Setting(this.containerEl).setName(\"追加翻译范围\").setHeading();const a=new import_obsidian7.Setting(this.containerEl);a.setName(\"追加翻译范围\"),a.setDesc(\"追加翻译范围。在智能翻译的区域，追加翻译位置。\"),a.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.additionalSelectors?this.settings.I18N_IMT_CONFIG.additionalSelectors.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.additionalSelectors=t.split(\",\"),await this.i18n.saveSettings()}));const o=new import_obsidian7.Setting(this.containerEl);o.setName(\"追加排除元素\"),o.setDesc(\"追加排除元素，让智能翻译不翻译特定位置。\"),o.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.additionalExcludeSelectors?this.settings.I18N_IMT_CONFIG.additionalExcludeSelectors.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.additionalExcludeSelectors=t.split(\",\"),await this.i18n.saveSettings()}));const r=new import_obsidian7.Setting(this.containerEl);r.setName(\"追加排除Tags\"),r.setDesc(\"追加排除Tags\"),r.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.additionalExcludeTags?this.settings.I18N_IMT_CONFIG.additionalExcludeTags.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.additionalExcludeTags=t.split(\",\"),await this.i18n.saveSettings()})),new import_obsidian7.Setting(this.containerEl).setName(\"保持原样\").setHeading();const l=new import_obsidian7.Setting(this.containerEl);l.setName(\"匹配的元素将保持原样\"),l.setDesc(\"匹配的元素将保持原样。常用于论坛网站的标签。\"),l.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.stayOriginalSelectors?this.settings.I18N_IMT_CONFIG.stayOriginalSelectors.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.stayOriginalSelectors=t.split(\",\"),await this.i18n.saveSettings()}));const c=new import_obsidian7.Setting(this.containerEl);c.setName(\"匹配到的Tag将保持原样\"),c.setDesc(\"匹配到的Tag将保持原样，比如 `code`\"),c.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.stayOriginalTags?this.settings.I18N_IMT_CONFIG.stayOriginalTags.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.stayOriginalTags=t.split(\",\"),await this.i18n.saveSettings()})),new import_obsidian7.Setting(this.containerEl).setName(\"区域翻译\").setHeading();const _=new import_obsidian7.Setting(this.containerEl);_.setName(\"区域选择器\"),_.setDesc(\"匹配的元素将被视为一个整体, 不会分段翻译\"),_.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.atomicBlockSelectors?this.settings.I18N_IMT_CONFIG.atomicBlockSelectors.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.atomicBlockSelectors=t.split(\",\"),await this.i18n.saveSettings()}));const d=new import_obsidian7.Setting(this.containerEl);d.setName(\"区域Tag选择器\"),d.setDesc(\"匹配的元素将被视为一个整体, 不会分段翻译\"),d.addTextArea(t=>t.setValue(this.settings.I18N_IMT_CONFIG.atomicBlockTags?this.settings.I18N_IMT_CONFIG.atomicBlockTags.toString():\"\").onChange(async t=>{this.settings.I18N_IMT_CONFIG.atomicBlockTags=t.split(\",\"),await this.i18n.saveSettings()}))}},import_obsidian8=require(\"obsidian\"),from_lang={auto:\"自动检测\",zh:\"中文\",cht:\"繁体中文\",yue:\"粤语\",wyw:\"文言文\",en:\"英语\",jp:\"日语\",kor:\"韩语\",fra:\"法语\",spa:\"西班牙语\",th:\"泰语\",ara:\"阿拉伯语\",ru:\"俄语\",pt:\"葡萄牙语\",de:\"德语\",it:\"意大利语\",el:\"希腊语\",nl:\"荷兰语\",pl:\"波兰语\",bul:\"保加利亚语\",est:\"爱沙尼亚语\",dan:\"丹麦语\",fin:\"芬兰语\",cs:\"捷克语\",rom:\"罗马尼亚语\",slo:\"斯洛文尼亚语\",swe:\"瑞典语\",hu:\"匈牙利语\",vie:\"越南语\"},to_lang=JSON.parse(JSON.stringify(from_lang));delete to_lang.auto;var I18nNitBaiDu=class extends BaseSetting{main(){const e=new import_obsidian8.Setting(this.containerEl);\"BAIDU\"!=this.settings.I18N_NIT_API&&e.setClass(\"i18n--hidden\"),e.setName(t(\"设置_AI_百度_原始语言_标题\")),e.setDesc(t(\"设置_AI_百度_原始语言_描述\")),e.addDropdown(t=>t.addOptions(from_lang).setValue(this.settings.I18N_NIT_APIS.BAIDU.FROM).onChange(t=>{this.settings.I18N_NIT_APIS.BAIDU.FROM=t,this.i18n.saveSettings()}).selectEl.addClass(\"i18n-select\"));const s=new import_obsidian8.Setting(this.containerEl);\"BAIDU\"!=this.settings.I18N_NIT_API&&s.setClass(\"i18n--hidden\"),s.setName(t(\"设置_AI_百度_目标语言_标题\")),s.setDesc(t(\"设置_AI_百度_目标语言_描述\")),s.addDropdown(t=>t.addOptions(to_lang).setValue(this.settings.I18N_NIT_APIS.BAIDU.TO).onChange(t=>{this.settings.I18N_NIT_APIS.BAIDU.TO=t,this.i18n.saveSettings()}).selectEl.addClass(\"i18n-select\"));const i=new import_obsidian8.Setting(this.containerEl);\"BAIDU\"!=this.settings.I18N_NIT_API&&i.setClass(\"i18n--hidden\"),i.setName(t(\"设置_AI_百度_标识_标题\")),i.setDesc(t(\"设置_AI_百度_标识_描述\")),i.addText(t=>t.setValue(this.settings.I18N_NIT_APIS.BAIDU.APP_ID).setPlaceholder(\"APPID\").onChange(t=>{this.settings.I18N_NIT_APIS.BAIDU.APP_ID=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\"));const n=new import_obsidian8.Setting(this.containerEl);\"BAIDU\"!=this.settings.I18N_NIT_API&&n.setClass(\"i18n--hidden\"),n.setName(t(\"设置_AI_百度_密钥_标题\")),n.setDesc(t(\"设置_AI_百度_密钥_描述\")),n.addText(t=>t.setValue(this.settings.I18N_NIT_APIS.BAIDU.KEY).setPlaceholder(\"KEY\").onChange(t=>{this.settings.I18N_NIT_APIS.BAIDU.KEY=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\"))}},import_obsidian9=require(\"obsidian\"),I18nNITOpenAI=class extends BaseSetting{main(){const e=new import_obsidian9.Setting(this.containerEl);e.setName(t(\"设置_AI_OPENAI_接口_标题\")),e.setDesc(t(\"设置_AI_OPENAI_接口_描述\")),\"OPENAI\"!=this.settings.I18N_NIT_API&&e.setClass(\"i18n--hidden\"),e.addText(t=>t.setValue(this.settings.I18N_NIT_OPENAI_URL).setPlaceholder(\"https://api.openai.com\").onChange(t=>{this.settings.I18N_NIT_OPENAI_URL=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\"));const s=new import_obsidian9.Setting(this.containerEl);s.setName(t(\"设置_AI_OPENAI_KEY_标题\")),s.setDesc(t(\"设置_AI_OPENAI_KEY_描述\")),\"OPENAI\"!=this.settings.I18N_NIT_API&&s.setClass(\"i18n--hidden\"),s.addText(t=>t.setValue(this.settings.I18N_NIT_OPENAI_KEY).setPlaceholder(\"KEY\").onChange(t=>{this.settings.I18N_NIT_OPENAI_KEY=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\"));const i=new import_obsidian9.Setting(this.containerEl);i.setName(t(\"设置_AI_OPENAI_模型_标题\")),i.setDesc(t(\"设置_AI_OPENAI_模型_描述\")),\"OPENAI\"!=this.settings.I18N_NIT_API&&i.setClass(\"i18n--hidden\"),i.addText(t=>t.setValue(this.settings.I18N_NIT_OPENAI_MODEL).setPlaceholder(\"Model\").onChange(t=>{this.settings.I18N_NIT_OPENAI_MODEL=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\"));const n=new import_obsidian9.Setting(this.containerEl);\"OPENAI\"!=this.settings.I18N_NIT_API&&n.setClass(\"i18n--hidden\"),n.setName(t(\"设置_AI_OPENAI_提示_标题\")),n.setDesc(t(\"设置_AI_OPENAI_提示_描述\")),n.addTextArea(e=>e.setValue(this.settings.I18N_NIT_OPENAI_TIPS).setPlaceholder(t(\"设置_AI_OPENAI_提示_占位符\")).onChange(t=>{this.settings.I18N_NIT_OPENAI_TIPS=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\"))}},import_obsidian10=require(\"obsidian\"),I18nRE=class extends BaseSetting{main(){const e=new import_obsidian10.Setting(this.containerEl);e.setName(t(\"设置_正则_临时正则_标题\")),e.setDesc(t(\"设置_正则_临时正则_描述\")),e.addToggle(t=>t.setValue(this.settings.I18N_RE_TEMP_MODE).onChange(async()=>{this.settings.I18N_RE_TEMP_MODE=!this.settings.I18N_RE_TEMP_MODE,this.i18n.saveSettings()}).toggleEl.addClass(\"i18n-checkbox\"));const s=new import_obsidian10.Setting(this.containerEl);s.setName(t(\"设置_正则_正则模式_标题\")),s.setDesc(t(\"设置_正则_正则模式_描述\")),s.addText(t=>t.setValue(this.settings.I18N_RE_MODE).setDisabled(!0).inputEl.addClass(\"i18n-input\"));const i=new import_obsidian10.Setting(this.containerEl);i.setName(t(\"设置_正则_正则标志_标题\")),i.setDesc(t(\"设置_正则_正则标志_描述\")),i.addText(e=>e.setValue(this.settings.I18N_RE_FLAGS).setPlaceholder(t(\"设置_正则_正则标志_占位符\")).onChange(t=>{this.settings.I18N_RE_FLAGS=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\"));const n=new import_obsidian10.Setting(this.containerEl);n.setName(t(\"设置_正则_匹配长度_标题\")),n.setDesc(t(\"设置_正则_匹配长度_描述\")),n.addSlider(t=>t.setDynamicTooltip().setLimits(0,3e3,100).setValue(this.settings.I18N_RE_LENGTH).onChange(t=>{this.settings.I18N_RE_LENGTH=t,this.i18n.saveSettings()}));let a=\"\";const o=new import_obsidian10.Setting(this.containerEl);if(o.setName(t(\"设置_正则_模式编辑_标题\")),o.setDesc(t(\"设置_正则_模式编辑_描述\")),o.addText(e=>e.setPlaceholder(t(\"设置_正则_模式编辑_占位符\")).onChange(t=>{a=t}).inputEl.addClass(\"i18n-input\")),o.addButton(e=>e.setButtonText(t(\"设置_通用_添加_文本\")).onClick(()=>{\"\"==a||this.settings.I18N_RE_MODES.includes(a)?this.i18n.notice.error(t(\"设置_正则_通知_前缀\"),t(\"设置_正则_模式编辑_通知一\")):(this.settings.I18N_RE_MODES.push(a),this.settings.I18N_RE_DATAS.hasOwnProperty(a)||(this.settings.I18N_RE_DATAS[a]=[]),this.i18n.saveSettings(),this.settingTab.reDisplay())}).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`)),o.addButton(e=>e.setButtonText(this.settings.I18N_RE_MODE_DISPLAY?t(\"设置_通用_隐藏_文本\"):t(\"设置_通用_显示_文本\")).onClick(()=>{this.settings.I18N_RE_MODE_DISPLAY=!this.settings.I18N_RE_MODE_DISPLAY,this.i18n.saveSettings(),this.settingTab.reDisplay()}).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`)),this.settings.I18N_RE_MODE_DISPLAY)for(let e=0;e<this.settings.I18N_RE_MODES.length;e++){const s=new import_obsidian10.Setting(this.containerEl);s.setName(this.settings.I18N_RE_MODES[e]),this.settings.I18N_RE_MODE!=this.settings.I18N_RE_MODES[e]&&s.addButton(t=>t.setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"check\").onClick(()=>{this.settings.I18N_RE_MODE=this.settings.I18N_RE_MODES[e],this.i18n.saveSettings(),this.settingTab.reDisplay()})),s.addButton(s=>s.setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-danger`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"trash\").onClick(()=>{if(this.settings.I18N_RE_MODES.length>1){delete this.settings.I18N_RE_DATAS[this.settings.I18N_RE_MODES[e]];const s=this.settings.I18N_RE_MODES[e],i=this.settings.I18N_RE_MODE;console.log(s==i),this.settings.I18N_RE_MODES[e]==this.settings.I18N_RE_MODE&&(this.settings.I18N_RE_MODE=this.settings.I18N_RE_MODES[0]),this.settings.I18N_RE_MODES.splice(e,1),this.i18n.notice.result(t(\"设置_正则_通知_前缀\"),!0)}else this.i18n.notice.result(t(\"设置_正则_通知_前缀\"),!1,t(\"设置_正则_数据编辑_通知一\"));this.i18n.saveSettings(),this.settingTab.reDisplay()}))}let r=\"\";const l=new import_obsidian10.Setting(this.containerEl);if(l.setName(t(\"设置_正则_数据编辑_标题\")),l.setDesc(t(\"设置_正则_数据编辑_描述\")),l.addText(e=>e.setPlaceholder(t(\"设置_正则_数据编辑_占位符\")).onChange(t=>{r=t}).inputEl.addClass(\"i18n-input\")),l.addButton(e=>e.setButtonText(t(\"设置_通用_添加_文本\")).onClick(()=>{\"\"!=r&&(this.settings.I18N_RE_DATAS[this.settings.I18N_RE_MODE].push(r),this.i18n.saveSettings(),this.settingTab.reDisplay())}).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`)),l.addButton(e=>e.setButtonText(this.settings.I18N_RE_DATAS_DISPLAY?t(\"设置_通用_隐藏_文本\"):t(\"设置_通用_显示_文本\")).onClick(()=>{this.settings.I18N_RE_DATAS_DISPLAY=!this.settings.I18N_RE_DATAS_DISPLAY,this.i18n.saveSettings(),this.settingTab.reDisplay()}).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`)),this.settings.I18N_RE_DATAS_DISPLAY)for(let t=0;t<this.settings.I18N_RE_DATAS[this.settings.I18N_RE_MODE].length;t++){const e=new import_obsidian10.Setting(this.containerEl);e.setName(this.settings.I18N_RE_DATAS[this.settings.I18N_RE_MODE][t]),e.addButton(e=>e.setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-danger`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"trash\").onClick(()=>{this.settings.I18N_RE_DATAS[this.settings.I18N_RE_MODE].splice(t,1),this.i18n.saveSettings(),this.settingTab.reDisplay()}))}}},import_obsidian13=require(\"obsidian\"),import_obsidian12=require(\"obsidian\"),fs2=__toESM(require_lib()),import_obsidian11=require(\"obsidian\"),import_zlib=require(\"zlib\"),import_child_process=require(\"child_process\");function Diff(){}function buildValues(t,e,s,i,n){for(var a,o=[];e;)o.push(e),a=e.previousComponent,delete e.previousComponent,e=a;o.reverse();for(var r=0,l=o.length,c=0,_=0;r<l;r++){var d=o[r];if(d.removed)d.value=t.join(i.slice(_,_+d.count)),_+=d.count;else{if(!d.added&&n){var u=s.slice(c,c+d.count);u=u.map(function(t,e){var s=i[_+e];return s.length>t.length?s:t}),d.value=t.join(u)}else d.value=t.join(s.slice(c,c+d.count));c+=d.count,d.added||(_+=d.count)}}return o}Diff.prototype={diff:function(t,e){var s,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.callback;\"function\"==typeof i&&(n=i,i={});var a=this;function o(t){return t=a.postProcess(t,i),n?(setTimeout(function(){n(t)},0),!0):t}t=this.castInput(t,i),e=this.castInput(e,i),t=this.removeEmpty(this.tokenize(t,i));var r=(e=this.removeEmpty(this.tokenize(e,i))).length,l=t.length,c=1,_=r+l;null!=i.maxEditLength&&(_=Math.min(_,i.maxEditLength));var d=null!==(s=i.timeout)&&void 0!==s?s:1/0,u=Date.now()+d,h=[{oldPos:-1,lastComponent:void 0}],p=this.extractCommon(h[0],e,t,0,i);if(h[0].oldPos+1>=l&&p+1>=r)return o(buildValues(a,h[0].lastComponent,e,t,a.useLongestToken));var m=-1/0,g=1/0;function f(){for(var s=Math.max(m,-c);s<=Math.min(g,c);s+=2){var n=void 0,_=h[s-1],d=h[s+1];_&&(h[s-1]=void 0);var u=!1;if(d){var f=d.oldPos-s;u=d&&0<=f&&f<r}var E=_&&_.oldPos+1<l;if(u||E){if(n=!E||u&&_.oldPos<d.oldPos?a.addToPath(d,!0,!1,0,i):a.addToPath(_,!1,!0,1,i),p=a.extractCommon(n,e,t,s,i),n.oldPos+1>=l&&p+1>=r)return o(buildValues(a,n.lastComponent,e,t,a.useLongestToken));h[s]=n,n.oldPos+1>=l&&(g=Math.min(g,s-1)),p+1>=r&&(m=Math.max(m,s+1))}else h[s]=void 0}c++}if(n)!function t(){setTimeout(function(){if(c>_||Date.now()>u)return n();f()||t()},0)}();else for(;c<=_&&Date.now()<=u;){var E=f();if(E)return E}},addToPath:function(t,e,s,i,n){var a=t.lastComponent;return a&&!n.oneChangePerToken&&a.added===e&&a.removed===s?{oldPos:t.oldPos+i,lastComponent:{count:a.count+1,added:e,removed:s,previousComponent:a.previousComponent}}:{oldPos:t.oldPos+i,lastComponent:{count:1,added:e,removed:s,previousComponent:a}}},extractCommon:function(t,e,s,i,n){for(var a=e.length,o=s.length,r=t.oldPos,l=r-i,c=0;l+1<a&&r+1<o&&this.equals(s[r+1],e[l+1],n);)l++,r++,c++,n.oneChangePerToken&&(t.lastComponent={count:1,previousComponent:t.lastComponent,added:!1,removed:!1});return c&&!n.oneChangePerToken&&(t.lastComponent={count:c,previousComponent:t.lastComponent,added:!1,removed:!1}),t.oldPos=r,l},equals:function(t,e,s){return s.comparator?s.comparator(t,e):t===e||s.ignoreCase&&t.toLowerCase()===e.toLowerCase()},removeEmpty:function(t){for(var e=[],s=0;s<t.length;s++)t[s]&&e.push(t[s]);return e},castInput:function(t){return t},tokenize:function(t){return Array.from(t)},join:function(t){return t.join(\"\")},postProcess:function(t){return t}};var characterDiff=new Diff;function longestCommonPrefix(t,e){var s;for(s=0;s<t.length&&s<e.length;s++)if(t[s]!=e[s])return t.slice(0,s);return t.slice(0,s)}function longestCommonSuffix(t,e){var s;if(!t||!e||t[t.length-1]!=e[e.length-1])return\"\";for(s=0;s<t.length&&s<e.length;s++)if(t[t.length-(s+1)]!=e[e.length-(s+1)])return t.slice(-s);return t.slice(-s)}function replacePrefix(t,e,s){if(t.slice(0,e.length)!=e)throw Error(\"string \".concat(JSON.stringify(t),\" doesn't start with prefix \").concat(JSON.stringify(e),\"; this is a bug\"));return s+t.slice(e.length)}function replaceSuffix(t,e,s){if(!e)return t+s;if(t.slice(-e.length)!=e)throw Error(\"string \".concat(JSON.stringify(t),\" doesn't end with suffix \").concat(JSON.stringify(e),\"; this is a bug\"));return t.slice(0,-e.length)+s}function removePrefix(t,e){return replacePrefix(t,e,\"\")}function removeSuffix(t,e){return replaceSuffix(t,e,\"\")}function maximumOverlap(t,e){return e.slice(0,overlapCount(t,e))}function overlapCount(t,e){var s=0;t.length>e.length&&(s=t.length-e.length);var i=e.length;t.length<e.length&&(i=t.length);var n=Array(i),a=0;n[0]=0;for(var o=1;o<i;o++){for(e[o]==e[a]?n[o]=n[a]:n[o]=a;a>0&&e[o]!=e[a];)a=n[a];e[o]==e[a]&&a++}a=0;for(var r=s;r<t.length;r++){for(;a>0&&t[r]!=e[a];)a=n[a];t[r]==e[a]&&a++}return a}var extendedWordChars=\"a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}\",tokenizeIncludingWhitespace=new RegExp(\"[\".concat(extendedWordChars,\"]+|\\\\s+|[^\").concat(extendedWordChars,\"]\"),\"ug\"),wordDiff=new Diff;function diffWords(t,e,s){return null==(null==s?void 0:s.ignoreWhitespace)||s.ignoreWhitespace?wordDiff.diff(t,e,s):diffWordsWithSpace(t,e,s)}function dedupeWhitespaceInChangeObjects(t,e,s,i){if(e&&s){var n=e.value.match(/^\\s*/)[0],a=e.value.match(/\\s*$/)[0],o=s.value.match(/^\\s*/)[0],r=s.value.match(/\\s*$/)[0];if(t){var l=longestCommonPrefix(n,o);t.value=replaceSuffix(t.value,o,l),e.value=removePrefix(e.value,l),s.value=removePrefix(s.value,l)}if(i){var c=longestCommonSuffix(a,r);i.value=replacePrefix(i.value,r,c),e.value=removeSuffix(e.value,c),s.value=removeSuffix(s.value,c)}}else if(s)t&&(s.value=s.value.replace(/^\\s*/,\"\")),i&&(i.value=i.value.replace(/^\\s*/,\"\"));else if(t&&i){var _=i.value.match(/^\\s*/)[0],d=e.value.match(/^\\s*/)[0],u=e.value.match(/\\s*$/)[0],h=longestCommonPrefix(_,d);e.value=removePrefix(e.value,h);var p=longestCommonSuffix(removePrefix(_,h),u);e.value=removeSuffix(e.value,p),i.value=replacePrefix(i.value,_,p),t.value=replaceSuffix(t.value,_,_.slice(0,_.length-p.length))}else if(i){var m=i.value.match(/^\\s*/)[0],g=maximumOverlap(e.value.match(/\\s*$/)[0],m);e.value=removeSuffix(e.value,g)}else if(t){var f=maximumOverlap(t.value.match(/\\s*$/)[0],e.value.match(/^\\s*/)[0]);e.value=removePrefix(e.value,f)}}wordDiff.equals=function(t,e,s){return s.ignoreCase&&(t=t.toLowerCase(),e=e.toLowerCase()),t.trim()===e.trim()},wordDiff.tokenize=function(t){var e,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(s.intlSegmenter){if(\"word\"!=s.intlSegmenter.resolvedOptions().granularity)throw new Error('The segmenter passed must have a granularity of \"word\"');e=Array.from(s.intlSegmenter.segment(t),function(t){return t.segment})}else e=t.match(tokenizeIncludingWhitespace)||[];var i=[],n=null;return e.forEach(function(t){/\\s/.test(t)?null==n?i.push(t):i.push(i.pop()+t):/\\s/.test(n)?i[i.length-1]==n?i.push(i.pop()+t):i.push(n+t):i.push(t),n=t}),i},wordDiff.join=function(t){return t.map(function(t,e){return 0==e?t:t.replace(/^\\s+/,\"\")}).join(\"\")},wordDiff.postProcess=function(t,e){if(!t||e.oneChangePerToken)return t;var s=null,i=null,n=null;return t.forEach(function(t){t.added?i=t:t.removed?n=t:((i||n)&&dedupeWhitespaceInChangeObjects(s,n,i,t),s=t,i=null,n=null)}),(i||n)&&dedupeWhitespaceInChangeObjects(s,n,i,null),t};var wordWithSpaceDiff=new Diff;function diffWordsWithSpace(t,e,s){return wordWithSpaceDiff.diff(t,e,s)}wordWithSpaceDiff.tokenize=function(t){var e=new RegExp(\"(\\\\r?\\\\n)|[\".concat(extendedWordChars,\"]+|[^\\\\S\\\\n\\\\r]+|[^\").concat(extendedWordChars,\"]\"),\"ug\");return t.match(e)||[]};var lineDiff=new Diff;lineDiff.tokenize=function(t,e){e.stripTrailingCr&&(t=t.replace(/\\r\\n/g,\"\\n\"));var s=[],i=t.split(/(\\n|\\r\\n)/);i[i.length-1]||i.pop();for(var n=0;n<i.length;n++){var a=i[n];n%2&&!e.newlineIsToken?s[s.length-1]+=a:s.push(a)}return s},lineDiff.equals=function(t,e,s){return s.ignoreWhitespace?(s.newlineIsToken&&t.includes(\"\\n\")||(t=t.trim()),s.newlineIsToken&&e.includes(\"\\n\")||(e=e.trim())):s.ignoreNewlineAtEof&&!s.newlineIsToken&&(t.endsWith(\"\\n\")&&(t=t.slice(0,-1)),e.endsWith(\"\\n\")&&(e=e.slice(0,-1))),Diff.prototype.equals.call(this,t,e,s)};var sentenceDiff=new Diff;sentenceDiff.tokenize=function(t){return t.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var cssDiff=new Diff;function _typeof(t){\"@babel/helpers - typeof\";return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}cssDiff.tokenize=function(t){return t.split(/([{}:;,]|\\s+)/)};var jsonDiff=new Diff;function canonicalize(t,e,s,i,n){var a,o;for(e=e||[],s=s||[],i&&(t=i(n,t)),a=0;a<e.length;a+=1)if(e[a]===t)return s[a];if(\"[object Array]\"===Object.prototype.toString.call(t)){for(e.push(t),o=new Array(t.length),s.push(o),a=0;a<t.length;a+=1)o[a]=canonicalize(t[a],e,s,i,n);return e.pop(),s.pop(),o}if(t&&t.toJSON&&(t=t.toJSON()),\"object\"===_typeof(t)&&null!==t){e.push(t),o={},s.push(o);var r,l=[];for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&l.push(r);for(l.sort(),a=0;a<l.length;a+=1)o[r=l[a]]=canonicalize(t[r],e,s,i,r);e.pop(),s.pop()}else o=t;return o}jsonDiff.useLongestToken=!0,jsonDiff.tokenize=lineDiff.tokenize,jsonDiff.castInput=function(t,e){var s=e.undefinedReplacement,i=e.stringifyReplacer,n=void 0===i?function(t,e){return void 0===e?s:e}:i;return\"string\"==typeof t?t:JSON.stringify(canonicalize(t,null,null,n),n,\"  \")},jsonDiff.equals=function(t,e,s){return Diff.prototype.equals.call(jsonDiff,t.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"),s)};var arrayDiff=new Diff;arrayDiff.tokenize=function(t){return t.slice()},arrayDiff.join=arrayDiff.removeEmpty=function(t){return t};var State=class{constructor(t,e){this.stateJson={type:\"0\",state:!1,pluginVersion:\"\",translationVersion:0},this.path=e,this.isStateDoc=fs2.pathExistsSync(this.path),this.stateObj=this.isStateDoc?fs2.readJsonSync(this.path):void 0}getType(){return this.stateObj.type}getState(){return this.stateObj.state}getPluginVersion(){return this.stateObj.pluginVersion}getTranslationVersion(){return this.stateObj.translationVersion}setType(t){this.stateObj.type=t,fs2.outputJsonSync(this.path,this.stateObj)}setState(t){this.stateObj.state=t,fs2.outputJsonSync(this.path,this.stateObj)}setPluginVersion(t){this.stateObj.pluginVersion=t,fs2.outputJsonSync(this.path,this.stateObj)}setTranslationVersion(t){this.stateObj.translationVersion=t,fs2.outputJsonSync(this.path,this.stateObj)}insert(){try{this.stateObj=this.stateJson,this.isStateDoc=!0,fs2.outputJsonSync(this.path,this.stateJson)}catch(t){this.i18n.notice.result(\"新增状态文件\",!1,t)}}delete(){try{this.isStateDoc=!1,fs2.removeSync(this.path)}catch(t){this.i18n.notice.result(\"删除状态文件\",!1,t)}}update(t,e,s,i){const n={type:t,state:e,pluginVersion:s,translationVersion:i};this.stateObj=n;try{fs2.outputJsonSync(this.path,n)}catch(t){this.i18n.notice.result(\"修改状态文件\",!1,t)}}reset(){try{fs2.outputJsonSync(this.path,this.stateJson),console.log(this.stateJson)}catch(t){this.i18n.notice.result(\"重置状态文件\",!1,t)}}},Notification=class{constructor(t,e){this.notices=[],this.app=t,this.i18n=e}primary(t,e,s=4e3){const i=!!document.body&&document.body.classList.contains(\"theme-dark\"),n=new import_obsidian11.Notice(`[${t}] ${e}`,s);n.noticeEl.addClass(\"notice__container\",`notice__${i?\"dark\":\"light\"}--primary`),this.addNotice(n)}success(t,e,s=4e3){const i=!!document.body&&document.body.classList.contains(\"theme-dark\"),n=new import_obsidian11.Notice(`[${t}] ${e}`,s);n.noticeEl.addClass(\"notice__container\",`notice__${i?\"dark\":\"light\"}--success`),this.addNotice(n)}info(t,e,s=4e3){const i=!!document.body&&document.body.classList.contains(\"theme-dark\"),n=new import_obsidian11.Notice(`[${t}] ${e}`,s);n.noticeEl.addClass(\"notice__container\",`notice__${i?\"dark\":\"light\"}--info`),this.addNotice(n)}warning(t,e,s=4e3){const i=!!document.body&&document.body.classList.contains(\"theme-dark\"),n=new import_obsidian11.Notice(`[${t}] ${e}`,s);n.noticeEl.addClass(\"notice__container\",`notice__${i?\"dark\":\"light\"}--warning`),this.addNotice(n)}error(t,e,s=1e4){const i=!!document.body&&document.body.classList.contains(\"theme-dark\"),n=new import_obsidian11.Notice(`[${t}] ${e}`,s);n.noticeEl.addClass(\"notice__container\",`notice__${i?\"dark\":\"light\"}--error`),this.addNotice(n)}result(e,s,i=\"\",n=4e3){const a=!!document.body&&document.body.classList.contains(\"theme-dark\");if(s)if(\"\"!=i){const s=new import_obsidian11.Notice(`[${e}] ${t(\"通用_成功_文本\")}\\n${i}`,n);s.noticeEl.addClass(`notice__${a?\"dark\":\"light\"}--success`),this.addNotice(s)}else{const s=new import_obsidian11.Notice(`[${e}] ${t(\"通用_成功_文本\")}`,n);s.noticeEl.addClass(\"notice__container\",`notice__${a?\"dark\":\"light\"}--success`),this.addNotice(s)}else{const s=new import_obsidian11.Notice(`[${e}] ${t(\"通用_失败_文本\")}\\n${i}`,1e4);s.noticeEl.addClass(\"notice__container\",`notice__${a?\"dark\":\"light\"}--error`),this.addNotice(s)}}reload(){this.notices.forEach(t=>t.noticeEl.remove()),this.notices.length=0}addNotice(t){this.notices.length>=100&&(this.notices[0].noticeEl.remove(),this.notices.shift()),this.notices.push(t)}};function generatePlugin(t,e,s,i,n,a){const o=e.description,r={manifest:{translationVersion:Date.now(),pluginVersion:t},description:{original:o,translation:o},dict:{}};for(let t=0;t<n.length;t++){const e=s.match(new RegExp(n[t],a));if(null!=e)for(const t in e)e[t].length<=i&&(r.dict[e[t]]=e[t])}return r}function generateTheme(t,e){const s={manifest:{translationVersion:0,pluginVersion:t.version},dict:{}},i=e.match(/(?:\\/\\* @settings)([\\s\\S]*?)(?:\\*\\/)/);if(i){const t=/title:\\s*([^\\n]*)|description:\\s*([^\\n]*)/gm,e=i[0].match(t);e&&e.forEach(t=>{s.dict[t]=t})}else console.log(\"没有找到匹配的内容\");return s}function compareVersions(t,e){const s=t.split(\".\").map(Number),i=e.split(\".\").map(Number),n=Math.max(s.length,i.length);for(let t=0;t<n;t++){const e=s[t]||0,n=i[t]||0;if(e>n)return 1;if(e<n)return-1}return 0}var formatTimestamp=t=>{const e=new Date(t);return`${String(e.getMonth()+1).padStart(2,\"0\")}月${String(e.getDate()).padStart(2,\"0\")}日 ${String(e.getHours()).padStart(2,\"0\")}:${String(e.getMinutes()).padStart(2,\"0\")}`},formatTimestamp_concise=t=>{const e=new Date(t),[s,i,n,a,o]=[e.getFullYear(),String(e.getMonth()+1).padStart(2,\"0\"),String(e.getDate()).padStart(2,\"0\"),String(e.getHours()).padStart(2,\"0\"),String(e.getMinutes()).padStart(2,\"0\")];return`${s}/${i}/${n} ${a}:${o}`},comparePlugin=(t,e)=>{const s={},i={},n={},a={};for(const[n,o]of Object.entries(e.dict))n in t.dict?t.dict[n]!==o?a[n]={oldValue:t.dict[n],newValue:o}:s[n]=o:i[n]=o;for(const[s,i]of Object.entries(t.dict))s in e.dict||(n[s]=i);return{unchanged:s,added:i,modified:a,removed:n}},compareTheme=(t,e)=>{const s={},i={},n={},a={};for(const[n,o]of Object.entries(e.dict))n in t.dict?t.dict[n]!==o?a[n]={oldValue:t.dict[n],newValue:o}:s[n]=o:i[n]=o;for(const[s,i]of Object.entries(t.dict))s in e.dict||(n[s]=i);return{unchanged:s,added:i,modified:a,removed:n}},isValidpluginTranslationFormat=t=>{if(!t)return!1;const e=\"manifest\"in t,s=\"dict\"in t,i=\"description\"in t,n=e&&\"translationVersion\"in t.manifest,a=e&&\"pluginVersion\"in t.manifest,o=i&&\"original\"in t.description,r=i&&\"translation\"in t.description;return e&&n&&a&&s&&i&&o&&r},isValidThemeTranslationFormat=t=>{if(!t)return!1;const e=\"manifest\"in t,s=e&&\"translationVersion\"in t.manifest,i=e&&\"pluginVersion\"in t.manifest;return e&&s&&i&&\"dict\"in t},deflate=t=>(0,import_zlib.deflateSync)(t).toString(\"base64\"),inflate=t=>(0,import_zlib.inflateSync)(Buffer.from(t,\"base64\")).toString(),i18nOpen=(e,s)=>{navigator.userAgent.match(/Win/i)&&(0,import_child_process.exec)(`start \"\" \"${s}\"`,s=>{s?e.notice.result(t(\"功能_打开_前缀\"),!1,s):e.notice.result(t(\"功能_打开_前缀\"),!0)}),navigator.userAgent.match(/Mac/i)&&(0,import_child_process.exec)(`open ${s}`,s=>{s?e.notice.result(t(\"功能_打开_前缀\"),!1,s):e.notice.result(t(\"功能_打开_前缀\"),!0)})},diff2=(t,e)=>{const s=diffWords(t,e);let i=\"\",n=\"\";return s.forEach(t=>{t.added?n+=`<span class='color__text--success'>${t.value}</span>`:t.removed?i+=`<span class='color__text--danger'>${t.value}</span>`:(i+=t.value,n+=t.value)}),{s1:i,s2:n}},parseIssueTitle=t=>{const e=t.match(/\\[(.*?)\\]\\s*\\[(.*?)\\]\\s*\\[(.*?)\\]/);return e?[e[1],e[2],e[3]]:[\"\",\"\",\"\"]},isPlugin=t=>void 0!==t.description,isTheme=t=>void 0!==t.dict&&!t.description,restoreTranslate=()=>{const t=new KeyboardEvent(\"keydown\",{key:\"a\",keyCode:65,which:65,code:\"KeyA\",altKey:!0,bubbles:!0});document.dispatchEvent(t)},clearStorage=async()=>{Object.keys(window.localStorage).filter(t=>t.startsWith(\"immersiveTranslate\")).forEach(t=>{delete window.localStorage[t]});await window.indexedDB.databases().then(t=>{var e;null==(e=null==t?void 0:t.filter(t=>{var e;return null==(e=t.name)?void 0:e.startsWith(\"immersive-translate\")}))||e.forEach(t=>{t.name&&window.indexedDB.deleteDatabase(t.name)})}).catch(()=>{});Object.keys(window).filter(t=>-1!==t.indexOf(\"mmersiveTranslate\")).forEach(t=>{void 0!==window[t]&&delete window[t]})},ai=async(t,e)=>{switch(t.settings.I18N_NIT_API){case\"BAIDU\":return await t.tapi.baiduAPI(e);case\"OPENAI\":return await t.tapi.openAI(e)}},AdminModal=class extends import_obsidian12.Modal{constructor(t,e){super(t),this.issue=(t=>{const e=t.title,[s,i,n]=parseIssueTitle(e),a=new import_obsidian12.Setting(this.contentEl);a.setClass(\"i18n__item\"),a.nameEl.addClass(\"i18n__item-title\");let o=\"\";\"0\"===s[0]&&(o=\"primary\"),\"1\"===s[0]&&(o=\"danger\");let r=\"\";\"0\"===s[0]&&(r=\"插件\"),\"1\"===s[0]&&(r=\"主题\");let l=\"\";\"0\"===s[1]&&(l=\"primary\"),\"1\"===s[1]&&(l=\"success\"),\"2\"===s[1]&&(l=\"warning\");let c=\"\";\"0\"===s[1]&&(c=\"标记汉化\"),\"1\"===s[1]&&(c=`提交${\"0\"===s[0]?\"插件\":\"主题\"}`),\"2\"===s[1]&&(c=`更新${\"0\"===s[0]?\"插件\":\"主题\"}`),a.nameEl.innerHTML=`<span class=\"i18n-tag i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-${o} is-${this.i18n.settings.I18N_TAG_SHAPE}\">${r}</span>\\n        <span class=\"i18n-tag i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-${l} is-${this.i18n.settings.I18N_TAG_SHAPE}\">${c}</span>\\n        <span class=\"i18n__item-title\"> ${n}[${i}](${t.user.name})</span>`,new import_obsidian12.ButtonComponent(a.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setButtonText(\"审核\").onClick(()=>{this.i18n.issue=t,this.i18n.activateAdminView()}),new import_obsidian12.ButtonComponent(a.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setButtonText(`查看[${t.comments}]`).onClick(()=>{window.open(`https://gitee.com/zero--two/obsidian-i18n-translation/issues/${t.number}`)})}),this.isRandomContentFormat=(t=>{return/^\\[.*?\\]\\s*\\[.*?\\]\\s*\\[.*?\\]$/.test(t)}),this.i18n=e,this.a()}async a(){const t=await this.i18n.api.giteeGetAllIssue();t.state?t.data.length>0?(this.i18n.issues=t.data,this.i18n.notice.result(\"获取\",!0,`${this.i18n.issues.length}条待审核内容`)):this.i18n.notice.result(\"获取\",!0,\"暂时没有可审核任务\"):this.i18n.notice.result(\"获取\",!1,\"获取失败,请检查网络后重试\")}async showHead(){const t=this.contentEl.parentElement;t.addClass(\"i18n-share-history__container\"),t.removeChild(t.getElementsByClassName(\"modal-close-button\")[0]),this.titleEl.addClass(\"i18n-share-history__title-box\");const e=new import_obsidian12.Setting(this.titleEl);e.setName(\"I18N审核\").setClass(\"i18n-share-history__title\"),new import_obsidian12.ButtonComponent(e.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setIcon(\"refresh-ccw\").onClick(async()=>{const t=await this.i18n.api.giteeGetAllIssue();t.state?t.data.length>0?this.i18n.issues=t.data:this.i18n.notice.result(\"获取\",!0,\"暂时没有可审核任务\"):this.i18n.notice.result(\"获取\",!1,\"获取失败,请检查网络后重试\"),this.reloadShowData()})}async showMain(){if(this.i18n.issues)for(const t of this.i18n.issues)this.isRandomContentFormat(t.title)&&this.issue(t)}async onOpen(){await this.showHead(),await this.showMain()}async onClose(){this.contentEl.empty()}async reloadShowData(){let t=0;const e=this.contentEl;t=e.scrollTop,e.empty(),await this.showMain(),e.scrollTo(0,t)}},I18nShare=class extends BaseSetting{main(){new import_obsidian13.Setting(this.containerEl).setName(t(\"设置_共享_标题\")).setDesc(t(\"设置_共享_描述\")),new import_obsidian13.Setting(this.containerEl).setName(t(\"设置_共享_贡献者_标题\")).setDesc(t(\"设置_共享_贡献者_描述\")).addText(e=>e.setValue(this.settings.I18N_SHARE_TOKEN).setPlaceholder(t(\"设置_共享_贡献者_提示\")).onChange(t=>{this.settings.I18N_SHARE_TOKEN=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\")).addToggle(t=>t.setValue(this.settings.I18N_SHARE_MODE).onChange(()=>{this.settings.I18N_SHARE_MODE=!this.settings.I18N_SHARE_MODE,this.i18n.saveSettings(),this.settingTab.shareDisplay()}).toggleEl.addClass(\"i18n-checkbox\")),new import_obsidian13.Setting(this.containerEl).setName(`${t(\"设置_共享_管理员_标题\")} (${this.settings.I18N_ADMIN_VERIFY?\"已验证\":\"未验证\"})`).setDesc(t(\"设置_共享_管理员_描述\")).addButton(t=>t.setButtonText(\"验证\").setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).onClick(async()=>{if(this.settings.I18N_ADMIN_VERIFY)this.i18n.notice.result(\"共建云端\",!0,\"您已验证,无需重复验证\");else{const t=await this.i18n.api.giteeUser();(await this.i18n.api.checkUser(t.data.login)).state?(this.settings.I18N_ADMIN_VERIFY=!this.settings.I18N_ADMIN_VERIFY,this.i18n.saveSettings(),this.settingTab.shareDisplay(),this.i18n.notice.result(\"共建云端\",!0,\"验证成功\")):this.i18n.notice.result(\"共建云端\",!1,\"验证失败\")}}).setClass(this.i18n.settings.I18N_ADMIN_VERIFY?\"i18n--hidden\":\"i18n--none\")).addText(e=>e.setValue(this.settings.I18N_ADMIN_TOKEN).setPlaceholder(t(\"设置_共享_管理员_提示\")).onChange(t=>{this.settings.I18N_ADMIN_TOKEN=t,this.i18n.saveSettings()}).inputEl.addClass(\"i18n-input\")).addToggle(t=>t.setValue(this.settings.I18N_ADMIN_MODE).onChange(()=>{this.settings.I18N_ADMIN_VERIFY?(this.settings.I18N_ADMIN_MODE=!this.settings.I18N_ADMIN_MODE,this.i18n.saveSettings(),this.settings.I18N_ADMIN_MODE?this.i18n.i18nReviewEl=this.i18n.addRibbonIcon(\"i18n-review\",\"I18N审核\",t=>{new AdminModal(this.app,this.i18n).open()}):this.i18n.i18nReviewEl.remove()):(this.i18n.notice.result(\"共建云端\",!1,\"您尚未验证,请先验证\"),this.settingTab.shareDisplay())}).toggleEl.addClass(\"i18n-checkbox\"))}},import_obsidian14=require(\"obsidian\"),I18nStyle=class extends BaseSetting{main(){new import_obsidian14.Setting(this.containerEl).setName(t(\"设置_主题_标签_标题\")).setDesc(t(\"设置_主题_标签_描述\")).addDropdown(t=>t.addOptions(TAG_TYPE).setValue(this.settings.I18N_TAG_TYPE).onChange(async t=>{this.settings.I18N_TAG_TYPE=t,await this.i18n.saveSettings()}).selectEl.addClass(\"i18n-select\")).addDropdown(t=>t.addOptions(TAG_SHAPE).setValue(this.settings.I18N_TAG_SHAPE).onChange(async t=>{this.settings.I18N_TAG_SHAPE=t,await this.i18n.saveSettings()}).selectEl.addClass(\"i18n-select\")),new import_obsidian14.Setting(this.containerEl).setName(t(\"设置_主题_按钮_标题\")).setDesc(t(\"设置_主题_按钮_描述\")).addDropdown(t=>t.addOptions(BUTTON_TYPE).setValue(this.settings.I18N_BUTTON_TYPE).onChange(async t=>{this.settings.I18N_BUTTON_TYPE=t,await this.i18n.saveSettings()}).selectEl.addClass(\"i18n-select\")).addDropdown(t=>t.addOptions(BUTTON_SHAPE).setValue(this.settings.I18N_BUTTON_SHAPE).onChange(async t=>{this.settings.I18N_BUTTON_SHAPE=t,await this.i18n.saveSettings()}).selectEl.addClass(\"i18n-select\"))}},I18nSettingTab=class extends import_obsidian15.PluginSettingTab{constructor(t,e){super(t,e),this.i18n=e,this.app=t}display(){const{containerEl:e}=this;e.empty(),e.addClass(\"i18n-setting__container\");const s=this.containerEl.createEl(\"div\");s.addClass(\"i18n-setting__tabs\"),this.contentEl=this.containerEl.createEl(\"div\"),this.contentEl.addClass(\"i18n-setting__content\");const i=[{text:t(\"设置_主题_标题_缩写\"),content:()=>this.styleDisplay()},{text:t(\"设置_基础_标题_缩写\"),content:()=>this.basisDisplay()},{text:t(\"设置_本地_标题_缩写\"),content:()=>this.ldtDisplay()},{text:t(\"设置_云端_标题_缩写\"),content:()=>this.ndtDisplay()},{text:t(\"设置_AI_标题_缩写\"),content:()=>this.nitDisplay()},{text:t(\"设置_沉浸_标题_缩写\"),content:()=>this.imtDisplay()},{text:t(\"设置_共享_标题_缩写\"),content:()=>this.shareDisplay()},{text:t(\"设置_正则_标题_缩写\"),content:()=>this.reDisplay()}],n=[];i.forEach((t,e)=>{const i=s.createEl(\"div\");i.addClass(\"i18n-setting__tabs-item\"),i.textContent=t.text,n.push(i),0===e&&(i.addClass(\"i18n-setting__tabs-item_is-active\"),t.content()),i.addEventListener(\"click\",()=>{n.forEach(t=>{t.removeClass(\"i18n-setting__tabs-item_is-active\")}),i.addClass(\"i18n-setting__tabs-item_is-active\"),t.content()})})}styleDisplay(){this.contentEl.empty(),new I18nStyle(this).display()}basisDisplay(){this.contentEl.empty(),new I18nBasis(this).display()}ldtDisplay(){this.contentEl.empty(),new I18nModLDT(this).display()}ndtDisplay(){this.contentEl.empty(),new I18nModNDT(this).display()}nitDisplay(){this.contentEl.empty(),new I18nModeNIT(this).display(),new I18nNitBaiDu(this).display(),new I18nNITOpenAI(this).display()}imtDisplay(){this.contentEl.empty(),new I18nModIMT(this).display()}shareDisplay(){this.contentEl.empty(),new I18nShare(this).display()}reDisplay(){this.contentEl.empty(),new I18nRE(this).display()}},path3=__toESM(require(\"path\")),fs5=__toESM(require_lib()),import_obsidian20=require(\"obsidian\"),import_obsidian16=require(\"obsidian\"),Url=class{};Url.I18N_ICON=\"https://gitee.com/zero--two/obsidian-i18n-translation/raw/master/Obsidian.png\",Url.QQ_GROUP=\"https://qm.qq.com/cgi-bin/qm/qr?k=kHTS0iC1FC5igTXbdbKzff6_tc54mOF5&jump_from=webapi&authKey=AoSkriW+nDeDzBPqBl9jcpbAYkPXN2QRbrMh0hFbvMrGbqZyRAbJwaD6JKbOy4Nx\",Url.VIDEO_TUTORIAL=\" https://www.bilibili.com/video/BV1VcxJeNExx/\",Url.DOCUMENTATION_TUTORIAL=\"https://gitee.com/zero--two/obsidian-i18n-translation\",Url.TASK=\"https://gitee.com/zero--two/obsidian-i18n-translation/issues?assignee_id=&author_id=&branch=&collaborator_ids=&issue_search=&label_ids=266056763&label_text=&milestone_id=&priority=&private_issue=&program_id=&project_id=zero--two%2Fobsidian-i18n-translation&project_type=&scope=&single_label_id=&single_label_text=&sort=&state=open&target_project=\",Url.SDK_URL=\"https://download.immersivetranslate.com/immersive-translate-sdk-latest.js\";var i,getRandomValues,WizardModal=class extends import_obsidian16.Modal{constructor(t,e){super(t),this.imgDate=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfMAAAJZCAMAAACKvixsAAAAwFBMVEVHcExVPoJ8W8BZPZKXfM9jSpiGZsZcVpl3U75dUZJfOqlchfGCaLeBY75hjvBSjvWjhOHb1uTm5uZSJavl5eXApvOsiu9aLbOohO9Rj/ZkMseWa+ybcuxgNLigeu2QZOpoOMfFrvS1mPFhLcqxkvC6nvJ0Scx+VNOLXelmO77VxPekgO55Ts/PvPZsQcNwQ8mGVuivjvCEWtjSwPbJtPXMt/bZyvhsPsiJYNze0fmBTuiPad57RuaYc+Ps5P24p9pEo4qoAAAAE3RSTlMAhom1/l79HP082/DasHeh1pHRN496ewAAIABJREFUeNrtnQdD20oWhXHDmEBCHmtZwV3IveGKgTj8/3+1GvUyXSNZluc8MB128/nce+5oJN3cSElJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSZ1LNSD5z3BFtCuF0n2pVCpUKrVKrSr/TfKsaq1WLD08PT11ZkAn473yQ0E6Ps/Eiw9PBmpVVda2VIt8qSKp55J4tQiAG7gV1S/FAN95epDU80j8oWwAD/L2sEvquSS+hgO3sasng7qMc/lR4fHJ6N0EKSejr8t/q5yoaFR1RSVqrZweJPR86Cco64pJHY9+tp6VJfQ89PIiwK0o1qOKBT9T1CcJ/eJVKT2ZJrdFrvAS+sUjf1A0VQlJQs83cl2PICdRf5KD+mW7HIocT12R6f2Ska/XCkZgKQY2s7XupdMvFfmTomN4I4gbn+78ldAvU7UnBetyZJFXZt33klyGvUyX8yE3oDf/PkqjXyDyskaDHNrV162/EvolulxTaBVZmVM6b3//liT0y2rlpdlAYVG4oRvMVxL6RSF/UGkLO7TCK0ZD//u5LMh/yYtCrjBLVTzqoKEbLV1m9wtCrq8VHrnQldanhH5pyNfKeh2D+hqEONDSJfTLWIlRzV3M1nZmTuiKOgbM/8qlmctA7u5d54LuMG+azOUa7EUgX4ekKIx13hfiDEmjZ7+XK/oaIoUVusv8b1FCz7Kqlac1Umyz+rrzaTNfFST0DJu8UNZ1IcwNzd4co08k9OwiL+GQ29Mb7WEXZdZ1mMscl93C/ohHzmR5I7h7zGVLv3jkJlQy+KbHfCihZxP5jMXlZLN7wR0szciWnkXkKi1yr7uvqZn/nciNsJlD/qQYyBmp46GvO37mcmkmey7XdT7mawzzTz/zYVH+M2eJeO1RMXEzFncF6/S1N6CbmsvqniHkhQdNs2zObHVMgF/PxgHmf5cSenaQlwcAeVDmE2BN4X300KaGmMulmWwj193+rtMEeDjzboj5X7k9LhvIi2UNjhzgBtx50/s64vNPWd0zIYB8rePES30d9fnnSFb38+ungnB52PPs0NdKhLls6ZeDnGx2yFYaGPNPCf3svVzT6ZATva5El2KhPv/8Kxfez6laSRnoDCLP7mTmf9+k0c+oyoM2WOuMwtd4xb+lAs5cnuZwZuSAoqaxYiesxmJyu1Xd5dGWcyI3cWs6O3Q0eS/KIZj//RxK6Od0uQZ8DpyuUbJfW6uyOLc79R3FXC7NnNPlrnQfdBu9xl3h7aMu6+g63N9PuT3ufMif9IEWkkE52No17tZu1XY9dCzVj15CT31Ie9IwsoKdRkUdZ3Y087+fIzmlp41c1wiy4jy5yeMWaTDMwRUoJPRUC/tAo5ET7/Dc0dT14N6oIPPPe5njUlx8e9Lohfc6PsHrnb9oGS1dskhxvVVjE3eUa+F8/rmR0FNC/sCM3Mr0WLsj1PyLk7yoVKaRe27X6A++6EoTWdc/P4HVJxJ6ppE7RtfomUeXZELV/VNeMjCFGU3RYomppSNGtU/X5p+fc2n084/l8fJckLkWYf5pL746yD8/R3JgyzxyFq9r0fHc8rhfdxL62dZbxTPX9RY8vQV1L9fjklK18qCJYq5RDW16YJfMp13aI5rLY+mJrcSUB5pAobbX+HZOaXZs//wbbOFhyZaeHHKhzFFF3je0ORHOwOp3eLS8y7tyXQxyQoHX3Qj3CWvjgZYuoYvv5YkgR2K3mTsrr6a5MTb/lKc5JID8MSnkcOp2aQcRDt3FAxrK7C4auQJHPnAfkrA6aOdBg2Mkr0AhGLk+iNAdBN7EI49i3vn8S+dyQ28yx4lE/qQjXQ5eBonUdxDfm7TAAXPZ0sURrz3WA4wDljaBDxzuA20gjrk1nX/SayQPsQlCXnhwwFpsB640/1vnGwQ6fdD5ZEH++TaUh9jEIC/XB24RJ0gbxKjzkKPqLTbmn58P0uhikNe1gKspwGucuS5I3JjUPhn1Ju+uGh950UXOJrfTD/iZs5Z2q6XLKT0+8gEPcrfMx9keqzX/MjN/k0szMVUsDziRO2Znpe5HrjKXdgD9Tlb3OPqpxELuYz+gZu9tkBx03j55oMsrUGQAuV3rNQbuVmlnb+eA+aeEzt3LfwrjHU7zVMwH6pid9xt4ncuWzqdaQa8PBIuNOUdqN5iDlzu5NMOjysNAOHKzwFOt1JmnPTTpq7lB+g3Att8Zy4X3zCB3+zoFdIbSbrn7Ezw61OWZi1lCThfkDOYtlpL+5uG23pfQ2ZEnJzroA2VMldgs0H7clobyWHp2kLsFHkter5OGcwjngOS5LUzIn7RBGsIX9yaxnJvYkeTHcuGdBfnZgRNt7kR0K77BJU9zyBhy0hLNoIku6VZCx1d2oI2EninkBK8jBjUztNmDGVljeZoDFfFSisgx0OstREV/s8s6DfM3eZF3mvXWB70+yAD0gd5FR3Va4EByDZY8o6WMHAUdkuDePmlLur+6y4Etay5HLdIMtC5uvY1FG1nd8ci1syCPuj1sc3uhjYe5bOlZdHmUecDm7mzGp/FGnuaARv7E4fJ6Isz9NrcPnnDVdQu6vJJYfOR1h3XdkPOuSOphm7/FlNzxjkROQu3wBY/mBwHF5g61uQDiEjpc1cpTneTsKOYQ8no9ruGdcx67MXI6rLq/yZYeNXmpXCdaHC/3G0zu9TjUHZu/fb4Jwj6W57ZAkPfrOJPXecS9ica0+ZtIjcdyT2QI+aMCQ14n1nPhxE3m9dmbt8FNFHR5mkOwlz+GxvK6y7vOr0F9wIPe183f3j5FOl1C9yOH9/K6GDEfVK+rb6LiemhpRkJ3kStBMKa9RRHnKfLdz7fPN9HIZUv3I9dCyAcCefNwV4UTH4+tR3kFChf5IOLyJETNvCmskVus7QwHXuWNNkMuN5NbPUHR2zxuRve/HdvvjIEk9Jtq0efyZIFTM29+inD3eGzTNt9xJU9XBcjrgmM6fnwjc1fi2dwBPkbo2nNctfBdTw+4z+yYJT8ths0Djkbo2o+21B7q6TPHux0swSXK3GjpV828WK+nS9tdoEOv7HPa3OraAPnbmAD+mu+uWq1o9bQtTghz9TpnaB97SY1s9Stu6VWrstfPI2hT5+rmFmmaqu7oes9tqSQ/nDEyr9dnjKvs9jRGaXA3x13rwjuwef2czGE27/5lIz5msbenY0XaPBvY62yh3ePNDv46T1etndfmMOj1AZPNx3F0lSc0Vb7PbfMwdLbQPo6pKzy3JQs2D1KvU87m4/ASOpe64+sb2GrlesagU9ncW3qJq+7o6oxe+84Mc3sJvk9jc9vhQqDfXhn0WqmeFTnM6wqNzUXqylp65aGeIVHZXFhVd41+vK6lmcy0c9frJJuP2ZdYZUvPZjt3enofXNqV7iCKQOgP12T0Sj1rzPXxJ253WyLMr+s0h1jM++Kp9wcdhM0TQe1N6dfT0qulOMRd5v1+X9BToK+hbD5OFvrmavZEcsZ2D3G/737CeTcO+z5iPWYsNqlD1Lyau3JVyly8PcR9U3Xrv7r1biybdz+Tn8fhTr+Wll55YqzmDtiQfJ/0zM9TPxDLrmkwH19Jda/olIXcBt6HAY88Adwf6jMnONh6zDgN5NdT3StsLqSVUwwYoff76/Fngi7vdq1H5635MrZfjA+u43ymAm1a6/OI1ep9cPkY+DHTODXbeXAxOzL5O69dw+jXsH+CfPDcmcL6vGKBvgsnuHH8wt4dO952YFvG9mtsf6l5DYfSCaOaU6Vjiy7X9eszyMpb7GjWDfINfewH37yGvc+YUa1vmVsUc5oovxs0BTbyrlXKx91uF4U5rOamcNXM62JoMzi9v4skOP6k1uXRuHkF41rlG7mQ3heK3I10OJvXWyI83rUNzsX8Cs5mquBWXxIQ3uZaNz5zTMOmKu7FK2DeR7g8IWFmN7AGxw+867bwWGrmnnntoZ8mcPzIvhu0Yh027YpQM/dXAK5EmfcTFhJ5f6+PY7i8K0b5b+jh2O4uqScK3Z4BIwmuw4u8K8rlhnLf0APM+8mbHBPm+ntnOGdfau0Ks3m3e8w785/fkePiKSEPr8n2wXDO4fGuaOU+xP1MM71hA3zfLu1jyTzp2u4rsv10VQ9Q7/f35nDOsuet202Cet6De/XRYd5PG7ld333MVVabdwXGdR/znB9mMUa1MzL3Gd3o5mDdlf0QinjlfVirlGPtiBCX3q3Sfp6J/MqY//x2966diXnf9bnKWNiTUu6ZnyW9RaEbyPsdSubdbnIev4rafjaDh/K7uSCTxnEzybwgnvlux7WZYqHQLb51u+NkkeeeeVEUZnbSoV/Rn50xtl0TczCq8fjYJrzbmR/0beQ7mz0P//2gdd7kdjXMC2Vu5juTuKn+znkCuJ9hBr/QKSa1VGyed+bFMmMBtswcBGy73ePvfILlN+9VinaeFGTz5VqYg/GcyeK7KG4EfusZQo2830kLOCBsvtqP1of+b7jNN3N6f1Mz99DTD2u7xaCZDvMmhLnjcufNba4PrBVowDgAd8yi5r7brrspubxp13Ibu4m+abK33m3m3Oe1xx3tJMYleuYLNeGDKU2HeBMt52u5Zl4o7+jK+o5XfarJHd/OfWcQ8rubVl3JfLeLATw4y2Ftjm/nvMSb4SpOp1z38+I3weO7+MApoO92W70rvJWbfZoVt6nNNTMXhNxepcH8ncVMfHprcivXzH/WCXldoHB/Z7/riCXejKVcb3YuIlHsRCPHHIYxbI5abO+y7ltv2gN3LH3lmHn1EYlBPHK03Xe7Kaydc6b1ZnzlmXnhAcaAqovv9/Zb8yVehTeYK2LOTWmKUZ6ZF8sIn9MCN7RzXvb+r+BX4yPtHBrh2Mu6KOZ5Pqmh+B1hTlhR33vYDc4mdBO5TZ4GO2RBBhbhumzMxfHOPXPmrO6Atb29997sHNPbX6WGbti83oqzCtNsiiWea+a/65E1GIr2jZdd8Rna+m631Zr8S2/CgRu/MM8+D66PEbKbz9Rk4Uu8/9iL8eE0elDtXFXdVCvPzP2GQ/ZxL53t9yzI8dR3XmnfTVW+fa0JWNxUJ7+X9K487HfkVm6i23Npt6co78bvjsT2tIezsM/zy7zgG9XQQ/meW7sdFrsX4YIHUqlPWWgmpdZDbk9G9o/nO5zN9zGEKfHudB6M7Wc2OWCe302Q3qiGOmjqDt/xzL7HMd/vt+7BcwaLJ0c818yNUQ23C4YhpROMjoMOmLujGm18SxZ5rn1un4vQR/VxIcwxWc5m7oxqTBcKSZR5bjdHVR/3O3h8i1nOGXq6xVxl3+nYlMz5YvsesYd5L6yw+9o6grnxte2MfSEmYebFfDOHlXYG4ouY1I3f4B5hOT9tm3luN8oUv/eog2gMsBfU2JHMrfGc+rSjFJh/5Zc5fCGGYPLFYmGiNv+zRGl4FHNzPE+ppLfch2ar5XzYuppNE7/rO5ZOvvCYQ2V/04IwrEeZb6mZxwfu0AbyvQXvma+2Trn1OXSEIpTzBRq6D/5iQR3iF9aSTKJH0FyWPrItm73zOfP54Dwp8noAvfq42PdZkROBW9CxTT749xb7qdYcJ0e85VbxVstX3Fvel9xK3/KMn1PmlYfFPlLZsRZf0CF3Cz1NVwfM1xT7I7jLecuF7IK2wTpPA7uu+wt/Xg+mGqPaPrLVDRPcmIRp7cH1d+M3G8zJ0PmrestD3mo5fJ2C7nVyB7rV5x/yecVXc1SjZL7gESgMC5LXgc9ViggXA3kryNyvZuB939Mgpwtxv7/DxJHAOaEjmQdr+0FNBrlbqps+vhDwkM938so8VNnhzXwRS2if773aviUy5+vjAZBNJG0Y87z6vDglpze64Yw9zAWYg51RgplHgBOIR5TPRZnaYyC2Q6AvhAiR5XzICcw5WnjLyePcyifzQtnHXGQPZzC7BX3fGYvbHYGp1yxq5pw5dLE1eejWQq/Rzg3mYxHnqLS89TZ3hY0bey6ZG6PaHr32thAuJHOcz1lM3vKtscQzed6ZI3avJ07c3jIFfL7DMGcp6k0xZb2V34W4333kIgxzWd9uKVfmoue6GD/cb8XPb84xklZTAPDcDujF7R69e32xSKK4L1A+j0m81WxSTOCSefVxa500HGFO52vL2uBxS+dzeE83fd5BXbeRZRpvtsQ4PMeLMoXyFrG7FYPaxW2ydt4131nYL2zQMcwZkDfFejyvPq9aoxr78fGtBd6V733b9lsW5guMz6mPlbaaTaEeNxdlHvPn88dv9gNofsAIsRodyZxpA4xo4EC/8hnbwy7H5fUtBfDtYuvUAVroKOb0+yFarSSItzo5HNB/Qwo7tqTTauE2ewrmqNzONJYnQDyfA3pxSlXZnVzOKOoCb/z2adTnlOutgd2ropk/5C/EPU4Xu/ACOzK0bblEM6aDbrDjrO2J1PQcB/dCeRrs5wKqOr3Zg8z3M2beopZYMcy/8lbcq4/fC5q8vo2BfLtFTewBnxvfNQteY5/ruKlwnfI2rFEyJ0KdsgOP9HM/c9rA3uTZ+8Ia4nI+niMsviDhnoKXKWF8w9d2Qyr70lvymuUuuP/uk5BvcZV9Ot1a/9noDTF19QDzqcp8UCVhj1vBPW9b3B+3CxLzKHET7NRHfLr1WFtfnNJVeO9M5iBzGuytVGyev+Beezq4sZ26lTtUp1Onpk9Nh3ufhkBfoLwOYU6R4ETN4x3zoeP7RMf5rPNxzoJ71RjVnFmNekQzsVout1BbcsBP7QoA6ehb9NZ38HcOCu06TIvT5Z3IJzr2513sYeatzilnzEvL2W66QCLHJrdpUA7qqdvWp9FFeGRTN5mv6ZjbZxvyubpjMzbhdrx3wFv3GRB8cuQruFdLr72v+nS6oC3sU5tqGHiYv5vqqIMcYK436RJcnF3rDl2LcAcprwjM8ubz19fXubKfbve0yKfTKYm4nz3FwGZBB8y1Jg3yFueUZsFuBbgiiVuv5o/N8hXiavcG89f3E7A6lrmvVE/pBRnascwHLTqTcwxoHuwweJzVrddjqZqnCPdqaaRvQ/V9GxnKHd+yMJ9GF2ogSc6t7fUW2eYtnvTmh0zN3P3JXAX36r3N/PW9Y9R3bFVngu13+pTodDO528zxAa7VbDEzN3ManbGhTjeUI+bVQuPV1bF+mGKOqfAyn0YGN/RMaB5Ap7gmDHNV5yTuKE8hzrM50FyfelYPMmfKbdEUF12fgXnd+L5dp0t3UIWNeKi4szPP0baJQtvP/PV9tjetvg3Xdnf45i3uFOXdZA4OoJMvEMI4mcXX7Cs3Ic4c1AL66h+m0UMq0y2/zb1pnYI5WHwlnm7KNYjHVH5W4mr3YeavI+1wENXKg6uyIezQ2g4WX0mFvXUO5rkJcdVQabfquzL9mMLWYWJS35Jausn8QyeeYkzHvdMShttq6JU8JjhXp/3HQSjvKbShb2HB/aAJOZBmLaIL5J6bhl6BM389BqCL5B4gD2U+aAmp6x3RyklDR9jc0Kb+8TEV7fMpcRXWXJTpxNwEJdTeuWvoNSTz19XAhj4VLCx0wLzfIVyN+Qwetxp6LRc2byOZv76vD6C+Cy7sU/y6O/hbuxk+wJ2Dd34aulvaX16gSc6APk1AGOhgntvP4tX2xKDn4sapFbjN3SfAaQrqe6LQIT4/KLznJgkcxuFL7rUcJzg3vi/+pQsdrPYddBTyZroTeVhqDhp62OaQCj/v/zPqe6LUo8whwxrNSkzCLjd8firVcm9zG/oHA8tDLJ/vF4A5ZFijO824k7Qec8k84nU66IcDeD1MD1zFfRsw+qE/4wpviRO//OJeLbXxdd3WsG5APyA8fTBBe8QPNn+2xfdgcT9AhjVygOukoIuf1qhKu7k6o3/8i0IHqK0XW+57Fn+mFdhtILhPFa7Ingb2yy7u0QPnsGnNWp3R/0Gge7TDmtpPB551dxDiPtYcyPnNO7ua4k5tcwBd9TndLuYHgihqPJK5ztzPOXFH0BuP1n+IHygXLrm41yb0zF97SqC8HyjFcqIDYlhLKL05hGcmeEB6Zn3Oeg/9g5dsdGxph22j8EM/CICOKu6AeSi4U3TyFgf0WVDOU8D9GFb0L7q41+5fGaE7Pf1wEIM8tBU2ENxVhhPMGdOb4+wI8/ATAGr42alYzZ/NUTObFeRYNaUs8MEV961Cv6mZ3eAMsqwf+Omn2jUkOBf6BxjUmakzDulmQ9doz0NkzmyzGSP0kNfV08Vuc6+80Lk7AF37xwMdgx0V4j4GrQRWYtiJe5XeJT+73BR3D4f9AnvjX5Hjgs6U4rb+FXeRCzGkFk6o8d64VsmHzeE9/QVywAUsvidCPRDc9yrVmEa9e30mQE5x71zmwTWObm7vjNwm5XT/sGZoTU7siQU3TIE3HX+Zxb32wsn89WvKk95pWnpwq4xGzm+UPdwuzCKYW+DV0yUWd8b1mNAeOS7o5ODuHkIHzK0QJyC+2bTFON0x+yUavdYgZvYXZJQ/fXDN6cR1maDPwUqcoMA+EylQM9TOBY5rBfbS7vuJ2QdPT6eo7VuvoZshTpjLxVLvzC5wAZY7wdlj+uCfwBU5yLRmflrHMaddYk2EOTD6xXX0wms8gYmNHfr0QEruvpU4s6HHcvnMPV6WAPWL6+hxEpx9gvoiAv3DfYif3E3m9U6T6gJQSazAkHVp0Z1/UAvmuA+H9If1AP47YBs95YRuhrgdpqFTlfUkpaqXdUZLfJsbiU61oHuA7WfAB4fX4YdTt+sWP/NZwsxns6+LMnqlEZ/5a8/McaavHflq+0d85mBVJlZiT1jKJRm9WngVobnT0j/81D/cgs/V0v2rMod6hzu+JW/z2ez2goxeeRbC/PV4MKF/RHWwXc/c0UMNfdbkLO2paH1B+2UqL2KYv86s6g5hfkBGOYLN/RP6YbHmcvksJV3QqruIBGe39DoK+ge30f0T+lTjG9OY4rf3yN7RL+aUloIomxtT+tSEjhTE7cSGbhd4dEMXaXMAW1WdR0sMP30pi3HibG5P6f8YiJMXYMOHWRhdznb8zOPsfzOjtb6qXMjpDZW2QObmwPYPWd1ZyjtkyR3a0Fn3rONg2yZXg3KdT2R/KR298iKQ+escU93tMS6G0bdacoFdJWtG9Pz6IowualALVvcDpqVHp3X6aS3S0AUU9qix8dhxLf4yOrpYm9uHVfFOp6rt7naZ0JK74MIejGuU1DFGV+5rV2dzI7sf8Nmdkjl0WIs2dILHOxQWZ2SuYlu6Osu+0Ss90cxfTv+YodMX98Ax9Jg7YriI+4s89JfeZR16rfQqXKu6COZObV+EGzo9cxGxDYsdvn0i68yFDmrujnfckP5xoF2YgZy1Bpbc6ZATyroqRrAyr2b9mGrhJQHmPR1rdLoBfQvfOLHQaZmngBzudjXbW2Ar969JyBzS/8GOrbkLcuSNcdHNr1Zxp2IuMqgzM7+tXZ3NwZBOinE8C3H7UHHnM7nKH9uooWf57LWEbG4M6f1/pIMtvMHdm9a4mYtGHqauZvk01cokIeavxw82pzOcqjggDeak0q6qCXAP/pHs7ntOYlALHmvBtXR6nwfObDj0O9wuj0FVYcGe4TOZCu3EmL9uDv+YwjsNc6uh71XOsk52uEJGSwddyarRE7T56+uL8o8wpNMsy0CK+wEcW0MfNI/F3OWuKJTuRgzqalbvngtufvySGPT5Fnus5YOBefTYWlKF3QBuS7XQKzZ5hdXoGd0Dix/UXsB/L9alnV8s4U5Hhm+IxO2ZoWXuu9gvsbjjltgpcLvEw1IVsutn/gCfUaOD0o4G+EIQ5kLfzrL7Ii7zaYS5u1kGdw4iV1230aKlehWfxurZPL6GsPmLed32FxrhrvBufKHDlOLQIS58Px4wrbGusZOrOkmq/UA7qmfx9DVwoc8XKHB6ucUfbvQdC/QpTXF3dkK22Jo5zuUKBW9YoScdX1Vn2TvDAQxqcZm7focbvSyG+XYRLu460uiJM1dtsyMN78W4zF0dsgrp5i+8QvidYHTqEOcZfW8Xd3hyZ45vCo/J8cyzfHJyIVTaaXs4vd+JRqcP7iHmiOKOdvkM3cOZobuJjhjjsmb0yIkMLyIULh0s0Z0uw+GSO6vJ+Wj7xndET8/qkB60+YtI+Y2OndGpF2XCzKdbWHFHhXZVuMkJXvctuz9myuYJAQ9hn4sw+iIQ4tDFna2wx+NNxXymPGXI6BXP5iJRh5gbb9f0RqcL7vstorizRnZFjPBGVx8q2bF5OzmTu08AwBx7eI32aOqCorizrLMr4kSwulHdq1lLcC9JyvwLGvWqO1U/d6a1cHFn2vqmJA7d+5+QmepuHTh/SVrA6F+YDTPEra8w5lZy3+pk5qidb4pgYY0+y0h1N++v9JK8vJ1x//j6OezO2HZxDx5QZajr4pnDBjfvjPRTNq49YSa4dIQd14JH0en6uZPc92qLWNnTsTmhp6uZuCkTGNRELLvRMceMa+x7JtyD6ODcBqLP0wBOnNnUTFwI1ijtL+npVf8XF/qCVNwpK7uSmHAtPQvVvVpqpMqcNsVNqRu6afSd2iLW9rjQ1+sYK7G+7H52o1dTtbnRQwZIo3Pl9n2kuFMuuCpKukZXZ1mp7mA9JlXmDYWXOXRNZm9Na9Npfdaasbic0dtrIGqnZ7u6V0upIjegb7ZUzA/0zE2j75UWy9E0WuAOakB7bSKn4o43+pmre6GRNnPz6pBQ6BwZbu8afaGhL8vOV9kt4FFZz4MYVldnj7XzDmppCz2i8+X2YHGnJE6AbjNFIiebHZbjfEdVz3mqarqDmr+4/+MOcVGfW8V93YIfNudw+RovKuzYll6uXZPNX15fBzTM6XO7k9w12tAeD7ifPavRfdW9eiWDmg3dvE4gBDpNbV+EZSDfWcW932nFn8zXLFIIdscdVT1Xdk97ULOZj7Zk5jCH2x+Z1x6BPCsWa+i0xljZ16zii3Hq15mA8OuaAAAdRUlEQVQuC1q9fzmDkAfXILPa1sF88K7zD71pl/E9076+1tfgH9rX1Ok3NNvTWDrMz7YyUy2cw+YGdPiyTAS5zZn2hPXDYqANBpqm6bpBQkUgxxp9vU6c+plPW2S3eS/6bo+deeML2tCDd+DDXYcEfi3ow7SuGdAteeBpp7R1HLEzn6lnWY6LafPeCyf212Efzfzj40C4swPc9ea4NnCZu+CV4I6oJIBjnI7dEXmGi4hxdfNeDyDu9Xo2bfMDRu6vkQOqzj3X0LD/eQLf77tv7nbqfP3jYzeoD0LSDOw+7kkQx3LH7nevZntQ63mPJnEA36Jv83/pUXNvnP4hRvR/cNQfh+l21//+1nSlfCqXy7d+fZWBFEUzvq5og3q/36/X60Hu9r99HJeDZiEAuf8UtlPq56oylHYXeM/Ri+/Rws7g9MZmGmYOPvJ9wvH0Ybr7/v5WAOW7u0m70XhGqtFe3t0NR8ev02lmoDfJB+2OoL5eCzE6fFJXsU4/pTywsdjcpkqQxb1HM635l+J8Ndv78OOw6H/rs/ItIP3MpEZjMhxtDPBrDYAPY+dwue56nGD2NdnqgQsRpH3luMILG3N6UR9nCTZpt45vd3UFwG4wwg6qPRluTupaq/u4W9hZoOs2c91+oxNW4YnQA5eUUjvFrNnc69SMzHuEOO9Maw5mD3f/Oz5tP/jl7UnVjR7v1nkz09Ew103ePua6w1xnKe6Qnh64XGCaLb3yQsfcQthjFpb562gR8fkWmHvZFkXb3+dvT7rf7poPDtrf+toD7dNa99d6miCHvzRoiheDpRjUei9uVONgjq3xr6uBH/ehb+CeiMftcZ/clRUHe91vdlRB16O0fdh1Fqtjkauz9O7SU5tQMY8ne4DHNPSPjwUo5gni9uw+LyuDujvFaWsccxxyG7pOHeOwVwBOcWAriQ5ucOgI5r3GFwC+00E1f05Ljcm8rA9M6uBBQw9pOp65jktzjEafKWntjqu2CeN4T5igf+B19P1dLt81nlNWY3I700yz160SD1150anEO61FsKczpBP3x/REMocFut7d3aSdOnIzyg8ts5vkI9R1aHCL53NFxVo9pSsRVJ/xS249wYIszLYnd3fL57OosdzMsNR10dAJOS6VIb3WwzlcPHMI9uWdwbzxfCa1RycNRl1nFCfz0J10H1Mp7b1UynqYuf+vGja/u2s/n02NeYS6zqP4yX2m3qVh85fUkdtHZAIN/azMQ9S5met8i+7Bu3GdMcH1EkUerC09UNwnz2dVw6vwGtV4hpjUdWbqQeinc3XzXsIut6n3Ag39+fnc1NWBW+D5xVrdw9uxU1hq76Vf16ML8ecNcV6a+9LraOqa75GlvjOuyyRv80b6ZR1S4zPC/Pl55S/wUebmRlrNErfNCUY/k83Tg/6SMebPz3MVHGyNWN1jrbnMEeDJQS50A5fg/bITt/nz2cp6gPvy7MHdX+AHfb/VtbDBQ+RJ1BUmp6vlc9i8l7rs4J4R5kaBV2zoAws6Ardtdq7yjq7uSc9qtfuXbPi8l4ng7iX4Y92zOoY4wutU+6SQt1lMmnk7CzYHCzQZGNADWq53DnSNKB26gYZvXFOSPsZS6GWBOICeLZ8Dq3/1AfV+f6DTUNfijOjBXRNnKO282N7fzQfzDSfzRqagz7W9UeCNF41G2KZOugiBz+Z3lezb3GD8br723l3q9oeXzdyo7x3D6n0q6NEox+f0xO+UDbE5q697NuF3/1vvXTbmdxlj/tw+7faG0fv1AXN1D1Inbod0bZ70frjI1kdGg9OIKcS1M8bcru9gPzxHdWf3uareJt3NS8F9rSzQQ7ZGAaemnqlFGb+GOoBuJDkOp7MsutvM07Y5/Xbmd1b1egT4GfW5ocnJauqDJH3u2ryStM17HJXdy2nM2PHK2oDua+r9XZ8qyWFTHAX05O+oWbnn6ubv3MIn+cwyf26PBgB6vx5rSiczV9dJXwU0aPMeXWF/j6/LY/78PB/s6aAzMQ9BV9XE76FaaERPQEweOdrrmVuIC0DXLacP2Jj7sROXX5O3eXA9hmZPM1VS52e+AsE9Y5MaOAvafHheKrsdO3S/18nb3BM/KTVc2qlMLqK2I7hbw1rGiBu4G9ab58msTwUdxTx6qffIxeoSv8xEYdJjQf4uppmjx/YzLsSZbg6QbjikbauDL086VNDpo3sI+Tpx5AGbU6+qU2hlPqzYl2rOyhy8BHD7Te463SrvGid0fG1XEg9wN5U29VqMvaKCpmwQXlmiQ25zzwJzx8sNCPEQfVroIeS+hr7GMU/e5tXgETVe5qt3h7Yrk7gLn2FoS5e57W0mcTidnnnyVxUJHVHjndAgzD34K2KJPw9zn3UZmT9PyiZ0hpZO2v3qVPZZ8pd7LbRfGGo7pqrTiQb6e/LMGzHllvcB37oMmvk6hdtiF3oMlT0m8BXG7in6nNnW3NCpU5yvtP9M4/TjHt2iKwr5igk5mrs3qyfL3AQeH3rjeansLeiDQWyfO9SVNK4A6WvnhKmcuY2zmz1h5g0hDvecfqcD6HUMdGtDPGT5FeV0pVxJ/iIy/rV2nla+4hMWehLMoVN3bOiaCR3QHVBsjsNtkEovwPkiXI+Z+YqbOBJ7QswbwnmHoQ8wVqdfcleU20LyyG+KbRqbC3Q4lnpizJPR8/Ntfe+2dCh2pqW4tZrKdQCLPc7KvhIheJATyryRpMDpDg70AXnjM/H81HRu0FDsca3FrEQJ5nWBzBsJ67lx2u+tHEfO7qRVmXW5kCpztsq+EqgodIP5rQjmCbXx0Cqs6rZ0EvQ1PsSt07rLVrFHCHCwY+WrVZLQrT0TDQEOT97nALo5pg/Q0Cn7OQhwaTJ/YVuKWa2SpB7f5yn42wf9brDYYVs6tJ1HfL5O7SYs5H6eOPEw9dg+b6Ss274Bvc4IPWR1YzRP7Q5bRJ/3wkM5FcPhajhcua9s0C2fX4THbZX7C8x6HN0u97QCnNfPaU1OgXwIFQv1WMzPgPy5bYZ3lNEpNzyndyM9cx2OvrBz8XawE8h7f4STeTqhDaaVtt1Zt3WhXpUJI39K7547YL1dBPIhpWiZL3n8fZbCbmpe3yKzO01tX5dTvDFu4bmHmdRokQ8ZtBqSqK8Mm08yX9EDat/uFmZ1x05rmPk8zVuk1kq4w+biieOpu7md0efkrYtxmTbabew3TNTF3tz9PMBvioMbXU/3vomFd+rILgg5tsSbuf32luncpWR4ty3K5mPb/LBtozdfw9++1BdWdedgvp6le8vzwiReLx/yCgndnM8n5yIOsJZDum07ativtu/bPveP6qjqTsztyZ+eFg5xsVw+HIqHPjR83k43rNtGtoH+L6TvNkb2Dzfa5d0ecW4L4Qi6Xi6kitxs6NzIh3EFZ06b4UQtqVvkPDExd9GbC+8DSuT+23SmfRfkm5viOydzc+JOhDmdz4UU9XaYNy9z47fMBwuY0Ulrr/pT2shvKvecmX0oQjDogHkj+fEMAjsOc6O63/b3UaOTzlNcnx7TRn5TLb1zDeZDUYr+Zgrm8aq63bdR4mPebkxm+119wHosNfXKjjI6ubAPE4N+R2IeJ6oRgcdg3rgb7KPnsOH3Rq2fzoDcPK0By3yVMPMg9PclYB49XCYIOg08TuYG9COuusNK+3pWvDmHIEYnlfbhMDHo7ysY8yB+wf1bFHPjGTXb7eos6+36Q+UszKPjGqmdEyHOAx/MxTJPpomLYN5u3GnmvLb7H0aH7X6gWci1WeHm5kxGf2fq5mTjzl2Z74efBTjqJvMJ2uPP3DMZtfiZtxub+t6IcVjmFvidBi4scyabA+gTNHRW5POIrM/RWh0znnMP5G026HGYt0+gupOZA+z9wdPZkN/U7tHnI7Ihn6NErPA0zBspmDwec1DdjRhHxdzQU/VszIMxDt/M+ZA7jqegjmTOhbzNoTjM2+BOHtTM//ff72xA50HuVHAKkYyOWpJJxeICmE+UXZ+auUG9mgXofAFuTi2C0ecQ5jzZrc2tWMzbjdvBbvE/Bv0+P3Q+m89ZmOO8btgcjGqNmKePt9v81OMxb7fL/e3/mKCfzeqVpXdfFQRz5DQ+ZxYi0xl/AzKeMy7DtKOHR326/SYpErCJPxE0+lKfMjE/Y303oBNKuwiXE2q86fNljFZOXHkp/0+8wjFu8b/Lgs6GfD7nRY5hPuEey9uZYD75/t/FQC8u33uMzZwfOZy7GeHacYifn3m7wf43zge9hJ3NxZV1AvMGV1mnXE9PgXn7lv1XnC29V0srphU4NMwRL/Qg8wQOoiTBfDKZ+P/EhIN5JqHTu3w0Ml/s90f4J0D4d976YnsiE3lCzCd+7lx/o3o+6NQ2n6OZwwSeBxTUvdjeeE5kCSZB5i53rr/x3xmPt6womznS5AjooxGN173YntCSW6LM2xZ1sAZwOEwNbYM6HDK5IFe4X9GEdojLcbhd6tBS7/3akRvbG5fI3EXfnsys7ZDR7XD1/Xfmlt4t6CSbM1R1FugjO8Ils7IOeKTB3FBjNKjDL+CuPdVq/2XM6FUTOnNpH9FrjmeelMktGCkxb0869QH0Yt4q2CgBpX5GowPoSSKHcrd/7Z0Z4ejPLabe5ObCSIF5G2N03T7xuPpfpowOoA8ZS/toFBN6IMKJdrkfSEo+N6Jcua5BkLv3W/mdpegOoE+GLC5n5w3Bbq/C3bafxRb1EIu0mE8ac30QiXDa2tsC91+GZvQw9KFw5kinWxFO6MbGybmYt9uniNF13Xdjc0h5P2NxD0LHEx/FUOiQuhPhhG2JgKFIjbnR0fVBuLTP/Dtda5kq7gHoOOajeNDD1G+dCCeisE+g0CPMy+HviOyTCX/DNx3z9sQw+toPXVsHz2H4L1PFHZzeYkPH2pyB+YYI3WTeTiC3nYf5pH3nGn0dqexwo9duzgv93oSORz6KZ/MgdFDaycxj8E6befvLMbrFPHIjhv8y1dBd6ATmdG7GfDHw627LxAgXEzkf8+XSeGVmbhhd0TyjG5U9XLp/Z425CT1yBZG5sAQXxU6O7eTsNiGIjzl4WRoyydMzn3wNLKP7VmOwxf2/m/NDXw65kW8MjewXOuagtC9xzGlW3eIwN6EuI8yXSwf30rQ8NfNJe6hq7pymQC7d/F/mmN9U7jnnNJN1QObnUIfW3dJ+O4lV1ydkQZibRE3iphDMlxZw4y0984ljdFDZYXdVyiDzKHQs8o3zZhPVaLPZEJxOaOdtEcghzJcebjxzRwzMTaOvzdsoQi8cEwlxN5mAvqKv7Bt/UYdyR01sI5d5I1/MJ0ddQ1Z2SIi7yRx0cmVH0A5WebjTQTuPwXxCJwjzkEQyn7TnRnQHlR1+fahsMg+Ud2In31Aw36C6OradiyGeDHOn3fvmOV9H10BHR9x7I6PM/dAJzKmAI6BbEY63rk+ywHwJYw6MvtZ0xG0xs8rcg06o7B5UHqvPN2V0OxeGPEHmzvge0hIYHXUZuMwyB9DnZOQjKtrOsyJa2o+o0k4ayxmIL5Nlvgwu2DlGHyDvqpRd5jZ0wqoro2DtvM1ucnsrEg1vU0kzj9p9edKRV2jPMHMLulDkYerzW0Q7F1TWrTW2dJjbic7RBn3ztCwzN6DjXE5o4kca6EdEOxeBfOlN4Ckx91t9hb4RQ6aZ31TucMxRsI/gBUA/oqhvPOawdi7E5H4YafncZ/Z79FHxbDP3Q6et7EdHSKf7rI5o54Lq+nmYm/2kjbnFTsaZ+6CTiR9hwjK/hZR2ASaPQEiZuQEdY/PMM78p3sGZ0xEHzI9o6kZpX7KYnLmRn4n5coK7k1bmmbvQ8cyPKOYIs7ulfcJwEQG6CW15fuare9xFXbPP/KZIY3M88yOc+e0tU2mf0DIXVNtXK+7aXrq5bOY3xREZOUlQmx+Z2vmEEziRuYF2FWHunt1hfQMTc7zNL4L5TSm81ZWVuE39GDiqPtqESns7IeII5t55Wsa7aOa2mHyOtfllMK+VNkHoPMwjwxtI7YFJLWZ4wzBI4jwWbptfiAB0tNGPtAo/VcKlPQ5zbIxOl/myeJMH1e433gaJEcnlX75HDPXwpMZ4QhI98pSZTwo3OYMeXmc/wph/Wci/sNP6F2Vpn8R0eTLMA6ner2Gpmg/mN4W7DXQrVIS3IfB4tB+/kNCDi3CJ1fXkmIPsFwX/vsyJzcE5qz7oKOYmcJu5/foVcvtm41T4r3J5QmYugHiizCPUh6XaTd6gB/p5tI1/BeUYH9LTv8p37fjIl8vzMYdafZgbm9vQgwEOUtYhOkYK/DGc2rnrOmSdFTY8Jcc8gnzVzhPzm2rp7rjx1/ZIWv9CKsrcKO3LeK2cirdZfxNlHsTuJbifv0KqXqjTj9hejlPY5l5q52ROg9xmkjRzs8bb67jOcF79E9bPy3U6BPkXBfTwOqxd2jFXiYndyl0iiTAPXlrNsbl74PxnhPmPS12Q80FncXnE6WV3rZ2zsBOB+xbUk2AeuYm7afW5283/RFW7VOijIzdyP/Wyndr5CvuSBD2IIxnmQwh2dzj/CWH+62IX5BzojMi/jgGru6Wdr5UzIR8mxhxcksP/l+bu4ZVfEOZ/LnWBruJAZ0RuYXd/xC7tnMzx+S1EPEGfh8zulfYqDPmFpjgXOmtlD63DWjbnLOxY4tErFSfMfOVZfTjBlfaLTXEOdHbmgSRnDedt8fktZHHrekjlBO6jCL3vq1va/8BVu2DogcIOY34yX5DMrd0SvMtv1FXdarhkzYeRfTLWp+lll/YqzuaXm+IA9LsNzuQnQPx0whgdX9rx6W3CQpwCt3lOHoS5dX9X8+sU/EGBH7qp/ReC+Z9qLqDDiIMXy+sw8iDBgUNqbQ7omF4eDm5k2g5R478Ic5O0+zCn8bxX2qso5Jeb4vzQITX95HJ3XsLMreGcM7ILMbl1GfG57WZIbbfv4O3DTaS++lsilPZLTnE+6LBWfjJJW4Ihtw6vtHlcjkG+DEQ3UkG3aM6ds62hzO2rjfvcjgfvTmp/0Lrog+uVW6jNTw7yLwx2kOB4AhzLhEZ2uO++7JB+Hr53O9nnbmn/iWH+6+biocNKu4vbsvwpEuLNBCfS5WHcK4rK7uLG+9z/bfbPIdy+Gjml/ReG+Z/qpUOH1vWILNf7mU+YkS8x661UDndquUfRb2Usc+c5MnRuLYEv7VUc8otOcYaKt2HggVbuhx5Ejiztces6LqN7BR1yc0C8zwN+d4e48N9oU5T2C09xMOhfUJ+fgiMbSHACezmtybH38aZj7vSEIWxkHznt/A9etTxBP+HkWf3EY3Oq5VZy/47NPHj7oAD1UYHG5pee4gLQT4hm7qeOT3Do01WoJrQVzuMk6MzMh9HJrUKR4C4/xYWgY63uTmzgKKogk1Otu83Rd22P43M33TlLNpMKRYLLQYrzQT8RbO709BNyUGNP7DThbY6KbaKYu+28RlXaLz/FAei+yZwCOmpQQ11EYolivlrRIR/SwONjPvQt1XwWqBJcHlIcE3TwLWCpnaWyx8hu8+GQCvgoHnObewVh81/5S3EOdAqXg1fUoMa1xE6x0ErGbd4xLsIcest2ZHWfu+08Srj6I38pzoJOVdtPYFCbiGBOM5PTONy+fgaUefBmQYS5zW7nVUj3/pnDFGf8Py2eqGQlOBbiE666Ph+Ssnr4Cjlo5tatBYijut3OYXyjRs9BijOgP7QgiDudyKcQ6zGslT2my6MXwsIzp7F7BZHgoPU+F6crF+5CfDunFmAepg4f1Ca8zPnqOuTOA1jmXpVHN/llBWXzm5taLlPcTbVw2wl5HLg87HRENxfMHL/oBr3bBA3zESbXjRoVRIIDn85nioNDB0bvEG0+4c1v7CZH3uCPljkK+8a8ukQVsf6SzxQXgt7xy8ccZnPByNGLbrjbtzIwh1L/rODY5jTFBaGbBu9ErA5bj2GN7NgV9jl6pRV/y97wGQtl6hu4+yMcNMHd5DfFgbPTbeh+4gGnl+ltTpzSEBug2C0e817evgiHLuE5TXEm9K9ZtLR7zKHLriLj2zw95kHoI3OPzC90VMtpigNPZxt6Bw4d0s3FDuaIYXyUjPx/A6zCVTFH0PKa4lzoFufZzHj1Q4fYXCRy1HL6KDF5f+cNnKiG45rbFOdA7zjQZ7OZy7x1ghxdYcvsuIOnqO1Po0Tl/pUKLMH5seY2xVnQ7QQ3s5nP7OWZE0toR2yEWqLzW2qNHMYcRDh8+c5vijOhn2YucdfpBnOW0E5ATnugfJS8vAj3Cx/T8pviAPQHAN1g7YcObN5oxNoBh90WE9Pkm+ADK3QQ4aqEPVA5TnGGKjZ0v9OhNudjHlqMmbMQj2BxLk5uXd7Sucile6V6SuibUpXINM8pzoTemgXVgdmcKcEhTc600hpljr+fLxX2+WhTICS4vKc4E3pHDSKffU3EIMdtbiXX9QgXivu207SGCkXp/pnnFOeDrqpObb9txArtrGsxI1HMbe548sMKKcHlPsUB6LemwW23x7Y5Y2lHwuFjvtkQmvukUqXYxZ7vFAeglwPFnSG0s+14hB5GE88cr+cKDc+cp7gbcH6Lr6d/teOEdszZC4wjWgyfY7hvSjWqk1VynuLMnu6UdrUzT8bm0FPRcFmLlzne7psCXdnOe4rzp3eVxeb0AW4OLew45DGZo37vsQI5VwWmPzlPcZbTTeStYazQjlt+G7IsvcVljqL+VvnDq583udPPp47B/BjL5kjkbHXdXGKLyxwe4ee/uJn/yB9zs6lDbC4ms0eo4xbUTWAimEd194dftRxCrxYf6G3OtBmKKbDbwAQwh0BfxmD+6+Yml9TvYxxDxY3mtC73eFEwj9y+mch98yMG8/ylOPvoaqX0PJnEXHWFXf2LFTmcuX1zdvvGnkdqr29QE+C1pzjb6xUDu1HhJz3G6/fSHzGnIA5jDrtft/POkc7psWyeyxTnw16pFO7vn5+NRGci7r33epQuJx9XoUIeZX7EiLa8/4mn2k2+Va3VKoWKrUIJPAHsSr9cwW4svYyJfBOHOTA62eqbY0zmv26uSeAJUCgULVlPANvsoRsaQTa5UjGPYGJjjre7kASX4xRHFfQCT4B7UAAsn9sXacUxH3Ey/3OMC32ziYs8vymOufkX3GfAo/UEAG43d59RT2lRTD94mCOpi7F5rlMcK3dbRggwWn+p9Gjo3mj+hu+NPs2e32IwP2KY/4mvmoSNeQLUCib7+/vl0ETNaPNo3vpxPPJjF5Hgri/FcbK30N9PlqblqRI7gvmfOMw3Qkr7Vac4VvQ1I+k9Pizv5jDw8GocZR7P6BsRpV2mOFbyhdLDw53JfUNwOQD3h9/oR9hS/A8OfvnfF5cG+Erp3gA/904+2SCQH3/EgQ5hjryaCE6/ZIoTs75XK9zfuacgIYhDjf5DKHOaMv1TpjiB3Cv3d5bNj/TMY0A/cp6m8EOmOKHLuabfA/08cOPuH0Khc66v/JQpTvgqrsU9anKE0f/8ATdr/rLv7E3PfPTAyU6muETqfMXIdSPb5QHm8IH6R/D+7HTU77kSnExxia7ZG+09RBxldD/1L0rmt7+4S7RMcUmW+crj/TxIHbNy9gOtCPLjpviLP4rJFJes3YvFh7vRcUwyOl7+rVMm8hHlSWoyxZ3J7oXi4/1o3I0BPVTdj5v7ShxuMsWlYfdCsVi6O36N8dWdhrmN/IY7wckUl6bdHx/vRt3u14+YzI/H+0rM8ixTXIp2N7HHq+2my29+xYthMsWlqULp8SEW86/Hys1N9U+8jixTXNpVvsRa3sc+lxdFMJMpLn394GS+uTORx0twMsWdR7+4mH89FASVZpnizqCfP9iZ2yaPneBkijtXV//BwvzLMPl9xenGAnapyxSXcasbPu/eF4XykinuXF2dkvqXQdxXemMnOJnisu/1X9Wq8LIsU9wZ+/pPstt/EhzKFb9kijs3918/flAyF5HgZIqTkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpLKhf4PbDyrlqARblEAAAAASUVORK5CYII=\",this.i18n=e}async Main(){const{contentEl:e}=this;this.contentEl.parentElement.addClass(\"i18n-wizard__container\"),this.contentEl.addClass(\"i18n-wizard__box\"),this.img=this.contentEl.doc.createElement(\"img\"),this.img.addClass(\"i18n-wizard__img\"),this.img.src=this.imgDate,this.contentEl.appendChild(this.img),this.title=this.contentEl.doc.createElement(\"p\"),this.title.addClass(\"i18n-wizard__title\"),this.title.innerHTML=\"Obsidian-I18N\",this.contentEl.appendChild(this.title),this.version=this.contentEl.doc.createElement(\"p\"),this.version.addClass(\"i18n-wizard__version\"),this.version.innerHTML=`${t(\"向导_通用_版本\")} ${this.i18n.manifest.version}`,this.contentEl.appendChild(this.version);const s=new import_obsidian16.Setting(e);s.setName(t(\"向导_视频_标题\")),s.setDesc(t(\"向导_视频_描述\")),s.controlEl.createEl(\"button\",{text:t(\"向导_通用_浏览\"),cls:[\"i18n-button\",`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`,`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`]},t=>{t.addEventListener(\"click\",async()=>{window.open(Url.VIDEO_TUTORIAL)})});const i=new import_obsidian16.Setting(e);i.setName(t(\"向导_文档_标题\")),i.setDesc(t(\"向导_文档_描述\")),i.controlEl.createEl(\"button\",{text:t(\"向导_通用_浏览\"),cls:[\"i18n-button\",`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-info`,`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`]},t=>{t.addEventListener(\"click\",async()=>{window.open(Url.DOCUMENTATION_TUTORIAL)})});const n=new import_obsidian16.Setting(e);n.setName(t(\"向导_QQ_标题\")),n.setDesc(t(\"向导_QQ_描述\")),n.controlEl.createEl(\"button\",{text:t(\"向导_通用_加入\"),cls:[\"i18n-button\",`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-info`,`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`]},t=>{t.addEventListener(\"click\",async()=>{window.open(Url.QQ_GROUP)})})}async onOpen(){await this.Main()}async onClose(){this.contentEl.empty()}},path=__toESM(require(\"path\")),fs3=__toESM(require_lib()),import_obsidian17=require(\"obsidian\"),NameTranslationModal=class extends import_obsidian17.Modal{constructor(t,e){super(t),this.i18n=e,this.i18n.originalPluginsManifests.forEach(t=>{!t.name||t.name in this.i18n.nameTranslationJSON||\"i18n\"==t.id||(this.i18n.nameTranslationJSON[t.name]=\"\")}),fs3.writeJSONSync(path.join(path.normalize(this.app.vault.adapter.getBasePath()),path.join(this.i18n.manifest.dir,\"name.json\")),this.i18n.nameTranslationJSON,{spaces:4})}async showHead(){this.contentEl.addClass(\"i18n__item-box\");const t=this.contentEl.parentElement;t.addClass(\"i18n-name__container\"),t.removeChild(t.getElementsByClassName(\"modal-close-button\")[0]),this.titleEl.addClass(\"i18n-share-history__title-box\");const e=new import_obsidian17.Setting(this.titleEl);e.setClass(\"i18n-share-history__title\"),e.setName(\"插件列表\");const s=new import_obsidian17.ButtonComponent(e.controlEl);s.setClass(\"i18n-button\"),s.setClass(\"i18n-button--primary\"),s.setButtonText(\"退出\"),s.onClick(()=>{this.close()})}async showMain(){for(const t in this.i18n.nameTranslationJSON){const e=new import_obsidian17.Setting(this.contentEl);e.setClass(\"i18n__item\"),e.nameEl.addClass(\"i18n__item-title\"),e.infoEl.remove();const s=new import_obsidian17.TextComponent(e.controlEl);s.inputEl.addClass(\"i18n-name__input-auto\"),s.setValue(t),s.setDisabled(!0);const i=new import_obsidian17.TextComponent(e.controlEl);i.inputEl.addClass(\"i18n-name__input-auto\"),i.setValue(this.i18n.nameTranslationJSON[t]),i.onChange(e=>{this.i18n.nameTranslationJSON[t]=e,fs3.writeJSONSync(path.join(this.app.vault.adapter.getBasePath(),path.join(this.i18n.manifest.dir,\"name.json\")),this.i18n.nameTranslationJSON,{spaces:4}),this.i18n.reloadPluginsName()})}}async reloadShowData(){let t=0;const e=this.contentEl;t=e.scrollTop,e.empty(),await this.showMain(),e.scrollTo(0,t)}async onOpen(){await this.showHead(),await this.showMain(),console.log(\"进入了\")}async onClose(){this.contentEl.empty(),console.log(\"推出了\")}},import_obsidian18=require(\"obsidian\"),ContributorModal=class extends import_obsidian18.Modal{constructor(t,e){super(t),this.i18n=e}async showHead(){var t;const e=this.contentEl.parentElement;e.addClass(\"i18n-share-history__container\"),e.removeChild(e.getElementsByClassName(\"modal-close-button\")[0]),null==(t=this.titleEl.parentElement)||t.addClass(\"i18n-contributor__title-box\"),this.contentEl.addClass(\"i18n-contributor__content\");const s=new import_obsidian18.Setting(this.titleEl).setClass(\"i18n-contributor__title\").setName(\"译文贡献榜单\");new import_obsidian18.ButtonComponent(s.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setIcon(\"refresh-ccw\").onClick(()=>{this.reloadShowData()})}async showMain(){if(void 0===this.i18n.contributorCache&&(this.i18n.contributorCache=(await this.i18n.api.giteeGetContributor()).data),void 0!==this.i18n.contributorCache){this.i18n.contributorCache.sort((t,e)=>{const s=t.translation+t.modification+t.erasure;return e.translation+e.modification+e.erasure-s});const t=this.contentEl.createEl(\"table\");t.addClass(\"i18n-contributor__table\");let e=1;for(const{name:s,url:i,translation:n,modification:a,erasure:o}of this.i18n.contributorCache){const r=t.createEl(\"tr\",{cls:[\"i18n-contributor__row\"]});r.addEventListener(\"click\",()=>{window.open(i)});const l=e<=3?`i18n-contributor__rank-${e}`:\"i18n-contributor__rank-4\";r.createEl(\"td\",{text:e.toString(),cls:[\"i18n-contributor__rank\",l]}),e++,r.createEl(\"td\",{text:s,cls:[\"i18n-contributor__name\"]}),r.createEl(\"td\",{text:(n+a+o).toString(),cls:[\"i18n-contributor__translation\"]})}}}async reloadShowData(){let t=0;const e=this.contentEl;t=e.scrollTop,e.empty(),await this.showMain(),e.scrollTo(0,t)}async onOpen(){await this.showHead(),await this.showMain()}async onClose(){this.contentEl.empty()}},path2=__toESM(require(\"path\")),fs4=__toESM(require_lib()),import_obsidian19=require(\"obsidian\"),I18NThemeModal=class extends import_obsidian19.Modal{constructor(t,e){super(t),this.themes=[],this.showThemes=[],this.developerMode=!1,this.i18n=e,this.basePath=path2.normalize(this.app.vault.adapter.getBasePath()),this.settings=e.settings,this.settingPlugins=this.app.setting}async showHead(){var e;const s=this.contentEl.parentElement;s.addClass(\"i18n__container\"),s.removeChild(s.getElementsByClassName(\"modal-close-button\")[0]),null==(e=this.titleEl.parentElement)||e.addClass(\"i18n__header\"),this.contentEl.addClass(\"i18n__item-box\"),this.detailsEl=document.createElement(\"div\"),this.detailsEl.addClass(\"i18n__item-details\"),this.detailsEl.innerText=\"无\",s.appendChild(this.detailsEl);const i=new import_obsidian19.Setting(this.titleEl).setClass(\"i18n__help\").setName(t(\"通用_标题_文本\"));new import_obsidian19.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"i18n_qq\").setTooltip(t(\"通用_QQ_描述\")).onClick(()=>{window.open(Url.QQ_GROUP)}),this.settings.I18N_MODE_NDT&&new import_obsidian19.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"i18n-contributor\").setTooltip(t(\"通用_贡献榜_描述\")).onClick(()=>{new ContributorModal(this.app,this.i18n).open()}),this.settings.I18N_MODE_LDT&&this.settings.I18N_NAME_TRANSLATION&&new import_obsidian19.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"name-setting\").setTooltip(t(\"通用_名称翻译_描述\")).onClick(()=>{this.close(),new NameTranslationModal(this.app,this.i18n).open()}),new import_obsidian19.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"settings\").setTooltip(t(\"通用_设置_描述\")).onClick(()=>{this.enabledPlugins.has(this.i18n.settings.I18N_STYLE_SETTINGS)?(this.settingPlugins.open(),this.settingPlugins.openTabById(this.i18n.settings.I18N_STYLE_SETTINGS),this.close()):this.i18n.notice.result(\"设置\",!1,\"插件未开启\")}),new import_obsidian19.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"circle-help\").setTooltip(t(\"通用_帮助_描述\")).onClick(()=>{new WizardModal(this.app,this.i18n).open()}),new import_obsidian19.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"chevrons-left-right-ellipsis\").setTooltip(t(\"通用_插件_描述\")).onClick(()=>{this.i18n.settings.I18N_MODE=0,this.i18n.saveSettings(),this.i18n.themeModal.close(),this.i18n.pluginModal=new I18NPluginModal(this.app,this.i18n),this.i18n.pluginModal.open()}),this.developerMode&&new import_obsidian19.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"refresh-ccw\").setTooltip(\"刷新插件\").onClick(async()=>{this.close(),await this.reloadPlugin(this.i18n.manifest.id)}),new import_obsidian19.Setting(this.titleEl).setClass(\"i18n__search\").setName(t(\"通用_搜索_标题\")).addSearch(t=>t.setValue(this.settings.I18N_SEARCH_TEXT).onChange(t=>{this.settings.I18N_SEARCH_TEXT=t,this.i18n.saveSettings(),this.reloadShowData()}).inputEl.addClass(\"i18n-input\")),this.i18n.settings.I18N_RE_TEMP_MODE&&new import_obsidian19.Setting(this.titleEl).setClass(\"i18n__search\").addText(e=>e.setValue(this.settings.I18N_RE_TEMP).setPlaceholder(t(\"功能_正则_占位符\")).onChange(t=>{this.settings.I18N_RE_TEMP=t,this.i18n.saveSettings(),this.regexps=[...this.settings.I18N_RE_DATAS[this.settings.I18N_RE_MODE],...this.i18n.settings.I18N_RE_TEMP.split(\"|\")].filter(t=>\"\"!==t)}).inputEl.addClass(\"i18n__re-input\",\"i18n-input\")).infoEl.remove()}async showData(){this.themes=Object.values(this.app.customCss.themes),this.enabledPlugins=this.app.plugins.enabledPlugins,\"\"==this.settings.I18N_SEARCH_TEXT?this.showThemes=this.themes:this.showThemes=this.themes.filter(t=>-1!=t.name.toLowerCase().indexOf(this.settings.I18N_SEARCH_TEXT.toLowerCase()));for(const e of this.showThemes){const s=path2.join(this.basePath,e.dir),i=path2.join(s,\"lang\"),n=path2.join(s,\"lang\",`${this.settings.I18N_LANGUAGE}.json`),a=path2.join(s,\"lang\",\"state.json\"),o=fs4.pathExistsSync(i),r=fs4.pathExistsSync(n),l=path2.join(s,\"manifest.json\"),c=path2.join(s,\"theme.css\"),_=path2.join(s,\"duplicate.css\"),d=new State(this.i18n,a);if(o&&!d.isStateDoc&&d.insert(),d.isStateDoc&&d.getState()&&e.version!=d.getPluginVersion())try{fs4.removeSync(_),d.reset(),this.i18n.notice.primary(t(\"通用_插件更新_前缀\"),e.name)}catch(e){this.i18n.notice.error(t(\"通用_插件更新_前缀\"),e)}let u,h,p,m,g=!0,f=!1;if(r)try{u=fs4.readJsonSync(n),g=isValidThemeTranslationFormat(u)}catch(t){g=!1}this.i18n.themeDirectoryMark&&(h=this.i18n.themeDirectory.find(t=>t.id===e.name)),this.i18n.themeDirectoryMark&&h&&g&&(p=e.version in h.translations?e.version:Object.keys(h.translations).slice(-1)[0],u&&u.manifest.translationVersion<h.translations[p]&&(f=!0)),m=!d.isStateDoc||(![\"0\",\"1\"].includes(d.getType())||\"0\"===d.getType());const E=new import_obsidian19.Setting(this.contentEl);E.setClass(\"i18n__item\"),E.nameEl.addClass(\"i18n__item-title\");const T={mark:1,label:{color:\"\",text:\"\"},text:\"\"};d.isStateDoc?u&&g?(1===compareVersions(e.version,u.manifest.pluginVersion)?(T.label.color=\"warning\",T.label.text=t(\"标签_已过时_文本\")):d.getState()?(T.label.color=\"success\",T.label.text=t(\"标签_已翻译_文本\")):(T.label.color=\"danger\",T.label.text=t(\"标签_未翻译_文本\")),T.text=`<span class=\"i18n-tag i18n-tag--${this.settings.I18N_TAG_TYPE}-primary is-${this.settings.I18N_TAG_SHAPE}\">修改日期</span> ${formatTimestamp(fs4.statSync(n).mtimeMs)} <span class=\"i18n-tag i18n-tag--${this.settings.I18N_TAG_TYPE}-primary is-${this.settings.I18N_TAG_SHAPE}\">支持版本</span> ${null==u?void 0:u.manifest.pluginVersion}`):(T.label.color=\"danger\",T.label.text=t(\"标签_译文有误_文本\"),T.text=t(\"标签_译文有误_描述\")):(T.label.color=\"info\",T.label.text=t(\"标签_无译文_文本\"),T.text=t(\"标签_无译文_描述\")),this.i18n.ignoreMark&&this.i18n.ignorePlugins.includes(\"这里需要修改\")&&(T.label.color=\"primary\",T.label.text=t(\"标签_自带翻译_文本\"),T.text=t(\"标签_自带翻译_描述\")),E.nameEl.innerHTML=`<span class=\"i18n-tag i18n-tag--${this.settings.I18N_TAG_TYPE}-${T.label.color} is-${this.settings.I18N_TAG_SHAPE}\">${T.label.text}</span><span class=\"i18n__item-name\">${e.name}</span> <span class=\"i18n__item-version\">[${e.version}]</span> `,E.settingEl.onmouseover=(t=>{this.detailsEl.innerHTML=T.text}),E.settingEl.onmouseout=(e=>{this.detailsEl.innerHTML=t(\"标签_无_文本\")});const b=new import_obsidian19.ExtraButtonComponent(E.controlEl).setIcon(\"folder-open\").setTooltip(t(\"功能_打开_描述\")).onClick(()=>{b.setDisabled(!0),i18nOpen(this.i18n,s),b.setDisabled(!1)});if(o){const e=new import_obsidian19.ExtraButtonComponent(E.controlEl).setIcon(\"trash\").setTooltip(t(\"功能_删除_描述\")).onClick(()=>{e.setDisabled(!0);try{d.stateObj.state&&(fs4.removeSync(c),fs4.renameSync(_,c)),fs4.removeSync(i),this.i18n.notice.result(t(\"功能_删除_前缀\"),!0)}catch(e){this.i18n.notice.result(t(\"功能_删除_前缀\"),!1,e)}this.reloadShowData()})}if(g&&r&&this.settings.I18N_EDIT_MODE&&new import_obsidian19.ExtraButtonComponent(E.controlEl).setIcon(\"pencil\").setTooltip(t(\"功能_编辑_描述\")).onClick(()=>{this.i18n.editorLoad(\"theme\",n,d)}),this.settings.I18N_SHARE_MODE&&g&&r){const s=new import_obsidian19.ExtraButtonComponent(E.controlEl);s.setIcon(\"cloud-upload\"),s.setTooltip(t(\"功能_共享_描述\")),s.onClick(()=>{this.i18n.shareLoad(1,n,e)})}this.settings.I18N_MODE_LDT&&!r&&E.controlEl.createEl(\"button\",{text:t(\"功能_提取_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},e=>{e.addEventListener(\"click\",()=>{try{const e=fs4.readFileSync(c).toString(),s=generateTheme(fs4.readJsonSync(l),e);fs4.ensureDirSync(i),fs4.writeJsonSync(n,s,{spaces:4}),d.insert(),d.setType(\"0\"),this.i18n.notice.result(t(\"功能_提取_前缀\"),!0)}catch(e){this.i18n.notice.result(t(\"功能_提取_前缀\"),!1,`${e}`)}this.reloadShowData()})}),this.settings.I18N_MODE_LDT&&this.settings.I18N_INCREMENTAL_EXTRACTION&&r&&g&&E.controlEl.createEl(\"button\",{text:t(\"功能_提取_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",()=>{if(d.isStateDoc&&!d.getState())try{const s=fs4.readJsonSync(n),a=generatePlugin(e.version,fs4.readJsonSync(l),fs4.readFileSync(c).toString(),this.settings.I18N_RE_LENGTH,this.regexps,this.settings.I18N_RE_FLAGS);a.manifest=s.manifest,a.description=s.description,a.dict={...a.dict,...s.dict},fs4.ensureDirSync(i),fs4.writeJsonSync(n,a,{spaces:4}),this.i18n.notice.result(t(\"功能_提取_前缀\"),!0,`提取译文${Object.keys(a.dict).length-Object.keys(s.dict).length}条`)}catch(e){this.i18n.notice.result(t(\"功能_提取_前缀\"),!1,`${e}`)}else this.i18n.notice.result(t(\"功能_提取_前缀\"),!1,t(\"功能_提取_通知一\"))})}),this.settings.I18N_MODE_NDT&&this.i18n.themeDirectory&&g&&null!=h&&m&&(r&&1!=f||E.controlEl.createEl(\"button\",{text:t(r?\"功能_更新_文本\":\"功能_下载_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",async()=>{let s;\"gitee\"===this.i18n.settings.I18N_NDT_URL?s=await this.i18n.api.giteeGetTranslation(\"theme\",e.name,p):\"github\"===this.i18n.settings.I18N_NDT_URL&&(s=await this.i18n.api.githubGetTranslation(\"theme\",e.name,p)),void 0!==s&&null==u&&(u=s.data),void 0!==u&&void 0!==s?(this.i18n.downloadType=\"1\",this.i18n.downloadPath=i,this.i18n.downloadCloudJson=s.data,void 0!==u&&(this.i18n.downloadLocalJson=u),this.i18n.downloadView=this,this.i18n.activateDownloadView(),await this.reloadShowData()):this.i18n.notice.result(t(r?\"功能_更新_文本\":\"功能_下载_文本\"),!1,t(\"功能_下载更新_通知一\"))})})),this.settings.I18N_MODE_NIT&&!r&&E.controlEl.createEl(\"button\",{text:\"AI\",cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},e=>{e.addEventListener(\"click\",async()=>{try{const e=fs4.readFileSync(c).toString(),s=generateTheme(fs4.readJsonSync(l),e);let a=0;for(const e in s.dict){this.i18n.notice.info(t(\"功能_AI_文本\"),`${a+=1}/${Object.keys(s.dict).length}`,this.settings.I18N_NIT_API_INTERVAL);const i=e.match(/title:(.*)|description:(.*)/),n=i?i[1]||i[2]:null;if(n&&i){const t=await ai(this.i18n,n);t&&(i[1]?s.dict[e]=e.replace(i[1],` ${t.data}`):i[2]&&(s.dict[e]=e.replace(i[2],` ${t.data}`))),await sleep(this.settings.I18N_NIT_API_INTERVAL)}}fs4.ensureDirSync(i),fs4.writeJsonSync(n,s,{spaces:4}),d.insert(),d.setType(\"0\"),this.reloadShowData()}catch(e){this.i18n.notice.result(t(\"功能_AI_文本\"),!1,e)}})}),r&&d.isStateDoc&&g&&(0==d.getState()&&E.controlEl.createEl(\"button\",{text:t(\"功能_替换_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",()=>{try{const s=fs4.readJsonSync(n);if(s&&Object.keys(s.dict).every(t=>s.dict[t]===t))return void this.i18n.notice.result(t(\"功能_替换_前缀\"),!1,t(\"功能_替换_通知一\"));fs4.copySync(c,_);let i=fs4.readFileSync(c).toString();i=this.translationMain(s,i),fs4.writeFileSync(c,i),d.setState(!0),d.setPluginVersion(e.version),d.setTranslationVersion(s.manifest.translationVersion),this.enabledPlugins.has(this.i18n.settings.I18N_STYLE_SETTINGS)&&this.reloadPlugin(this.i18n.settings.I18N_STYLE_SETTINGS)}catch(e){this.i18n.notice.result(t(\"功能_替换_前缀\"),!1,e)}this.reloadShowData()})}),1==d.getState()&&E.controlEl.createEl(\"button\",{text:t(\"功能_还原_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-danger`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},e=>{e.addEventListener(\"click\",()=>{try{fs4.unlinkSync(c),fs4.renameSync(_,c),d.reset(),this.enabledPlugins.has(this.i18n.settings.I18N_STYLE_SETTINGS)&&this.reloadPlugin(this.i18n.settings.I18N_STYLE_SETTINGS),this.i18n.notice.result(t(\"功能_还原_前缀\"),!0)}catch(e){this.i18n.notice.result(t(\"功能_还原_前缀\"),!1,e)}this.reloadShowData()})})),this.developerMode&&E.controlEl.createEl(\"button\",{text:\"测试\",cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},t=>{t.addEventListener(\"click\",async()=>{})})}}async reloadShowData(){let t=0;const e=this.contentEl;t=e.scrollTop,e.empty(),await this.showData(),e.scrollTo(0,t)}async onOpen(){await this.showHead(),await this.showData()}async onClose(){this.contentEl.empty()}async reloadPlugin(t){this.enabledPlugins.has(t)&&(await this.app.plugins.disablePlugin(t),await this.app.plugins.enablePlugin(t))}translationMain(e,s){for(const t in e.dict)s=s.replaceAll(t,e.dict[t]);return this.i18n.notice.result(t(\"功能_替换_前缀\"),!0,t(\"功能_替换_通知二\")),s}},I18NPluginModal=class extends import_obsidian20.Modal{constructor(t,e){super(t),this.plugins=[],this.showPlugins=[],this.developerMode=!1,this.i18n=e,this.basePath=path3.normalize(this.app.vault.adapter.getBasePath()),this.settings=e.settings,this.settingPlugins=this.app.setting,this.regexps=[...this.settings.I18N_RE_DATAS[this.settings.I18N_RE_MODE],...this.i18n.settings.I18N_RE_TEMP.split(\"|\")].filter(t=>\"\"!==t)}async showHead(){var e;const s=this.contentEl.parentElement;s.addClass(\"i18n__container\"),s.removeChild(s.getElementsByClassName(\"modal-close-button\")[0]),null==(e=this.titleEl.parentElement)||e.addClass(\"i18n__header\"),this.contentEl.addClass(\"i18n__item-box\"),this.detailsEl=document.createElement(\"div\"),this.detailsEl.addClass(\"i18n__item-details\"),this.detailsEl.innerText=\"无\",s.appendChild(this.detailsEl);const i=new import_obsidian20.Setting(this.titleEl).setClass(\"i18n__help\").setName(t(\"通用_标题_文本\"));new import_obsidian20.ButtonComponent(i.controlEl).setIcon(\"i18n_qq\").setTooltip(t(\"通用_QQ_描述\")).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).onClick(()=>{window.open(Url.QQ_GROUP)}),this.settings.I18N_MODE_NDT&&new import_obsidian20.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"i18n-contributor\").setTooltip(t(\"通用_贡献榜_描述\")).onClick(()=>{new ContributorModal(this.app,this.i18n).open()}),this.settings.I18N_MODE_LDT&&this.settings.I18N_NAME_TRANSLATION&&new import_obsidian20.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"name-setting\").setTooltip(t(\"通用_名称翻译_描述\")).onClick(()=>{this.close(),new NameTranslationModal(this.app,this.i18n).open()}),new import_obsidian20.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"settings\").setTooltip(t(\"通用_设置_描述\")).onClick(()=>{this.settingPlugins.open(),this.settingPlugins.openTabById(this.i18n.manifest.id),this.close()}),new import_obsidian20.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"circle-help\").setTooltip(t(\"通用_帮助_描述\")).onClick(()=>{new WizardModal(this.app,this.i18n).open()}),new import_obsidian20.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"palette\").setTooltip(t(\"通用_主题_描述\")).onClick(()=>{this.i18n.settings.I18N_MODE=1,this.i18n.saveSettings(),this.i18n.pluginModal.close(),this.i18n.themeModal=new I18NThemeModal(this.app,this.i18n),this.i18n.themeModal.open()}),this.developerMode&&new import_obsidian20.ButtonComponent(i.controlEl).setClass(\"i18n-button\").setClass(`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`).setClass(`is-${this.settings.I18N_BUTTON_SHAPE}`).setIcon(\"refresh-ccw\").setTooltip(\"刷新插件\").onClick(async()=>{this.close(),await this.reloadPlugin(this.i18n.manifest.id)});const n=new import_obsidian20.Setting(this.titleEl).setClass(\"i18n__search\").setName(t(\"通用_搜索_标题\"));n.addDropdown(t=>t.addOptions(I18N_SORT).setValue(this.settings.I18N_SORT).onChange(t=>{this.settings.I18N_SORT=t,this.i18n.saveSettings(),this.reloadShowData()}).selectEl.addClass(\"i18n-select\")),n.addDropdown(t=>t.addOptions(I18N_TYPE).setValue(this.settings.I18N_TYPE).onChange(t=>{this.settings.I18N_TYPE=t,this.i18n.saveSettings(),this.reloadShowData()}).selectEl.addClass(\"i18n-select\")),n.addSearch(t=>t.setValue(this.settings.I18N_SEARCH_TEXT).onChange(t=>{this.settings.I18N_SEARCH_TEXT=t,this.i18n.saveSettings(),this.reloadShowData()}).inputEl.addClass(\"i18n-input\")),this.i18n.settings.I18N_RE_TEMP_MODE&&new import_obsidian20.Setting(this.titleEl).setClass(\"i18n__search\").addText(e=>e.setValue(this.settings.I18N_RE_TEMP).setPlaceholder(t(\"功能_正则_占位符\")).onChange(t=>{this.settings.I18N_RE_TEMP=t,this.i18n.saveSettings(),this.regexps=[...this.settings.I18N_RE_DATAS[this.settings.I18N_RE_MODE],...this.i18n.settings.I18N_RE_TEMP.split(\"|\")].filter(t=>\"\"!==t)}).inputEl.addClass(\"i18n__re-input\",\"i18n-input\")).infoEl.remove()}async showData(){this.plugins=Object.values(this.app.plugins.manifests),this.plugins=this.plugins.filter(t=>t.id!==this.i18n.manifest.id),this.enabledPlugins=this.app.plugins.enabledPlugins,\"\"==this.settings.I18N_SEARCH_TEXT?this.showPlugins=this.plugins:this.showPlugins=this.plugins.filter(t=>-1!=t.name.toLowerCase().indexOf(this.settings.I18N_SEARCH_TEXT.toLowerCase()));const e=[];switch(this.settings.I18N_TYPE){case\"0\":break;case\"1\":for(const t of this.showPlugins)fs5.pathExistsSync(path3.join(this.basePath,t.dir,\"lang\",`${this.settings.I18N_LANGUAGE}.json`))&&e.push(t.id);this.showPlugins=this.showPlugins.filter(t=>!e.includes(t.id));break;case\"2\":for(const t of this.showPlugins){const s=path3.join(this.basePath,t.dir),i=path3.join(s,\"lang\",\"state.json\"),n=fs5.pathExistsSync(i);fs5.pathExistsSync(path3.join(s,\"lang\"))&&n?0!=fs5.readJsonSync(i).state&&e.push(t.id):e.push(t.id)}this.showPlugins=this.showPlugins.filter(t=>!e.includes(t.id));break;case\"3\":for(const t of this.showPlugins){const s=path3.join(this.basePath,t.dir),i=path3.join(s,\"lang\",\"state.json\"),n=fs5.pathExistsSync(i);fs5.pathExistsSync(path3.join(s,\"lang\"))&&n?1!=fs5.readJsonSync(i).state&&e.push(t.id):e.push(t.id)}this.showPlugins=this.showPlugins.filter(t=>!e.includes(t.id))}switch(this.settings.I18N_SORT){case\"0\":this.showPlugins.sort((t,e)=>t.name.localeCompare(e.name));break;case\"1\":this.showPlugins.sort((t,e)=>e.name.localeCompare(t.name))}for(const e of this.showPlugins){const s=path3.join(this.basePath,e.dir),i=path3.join(s,\"lang\"),n=path3.join(s,\"lang\",`${this.settings.I18N_LANGUAGE}.json`),a=path3.join(s,\"lang\",\"state.json\"),o=fs5.pathExistsSync(i),r=fs5.pathExistsSync(n),l=path3.join(s,\"manifest.json\"),c=path3.join(s,\"main.js\"),_=path3.join(s,\"duplicate.js\"),d=new State(this.i18n,a);if(o&&!d.isStateDoc&&d.insert(),d.isStateDoc&&d.getState()&&e.version!=d.getPluginVersion())try{fs5.removeSync(_),d.reset(),this.i18n.notice.primary(t(\"通用_插件更新_前缀\"),e.name)}catch(e){this.i18n.notice.error(t(\"通用_插件更新_前缀\"),e)}let u,h,p,m,g=!0,f=!1;if(r)try{u=fs5.readJsonSync(n),g=isValidpluginTranslationFormat(u)}catch(t){g=!1}if(u&&!(\"translationVersion\"in u.manifest)){if(d.getState()){fs5.unlinkSync(c),fs5.renameSync(_,c);const t=fs5.readJsonSync(n),e=fs5.readJsonSync(l);e.description=t.description.original,fs5.writeJsonSync(l,e,{spaces:4}),d.reset(),d.setType(\"extract\"),d.setState(!1),d.setTranslationVersion(0)}u={manifest:{translationVersion:new Date(\"1949-10-01T15:00:00+08:00\").getTime(),pluginVersion:u.manifest.pluginVersion},description:u.description,dict:u.dict},fs5.writeJsonSync(n,u,{spaces:4}),g=!0,this.i18n.notice.result(\"格式转换\",!0,e.name)}this.i18n.pluginDirectoryMark&&(h=this.i18n.pluginDirectory.find(t=>t.id===e.id)),this.i18n.pluginDirectoryMark&&h&&g&&(p=e.version in h.translations?e.version:Object.keys(h.translations).slice(-1)[0],u&&u.manifest.translationVersion<h.translations[p]&&(f=!0)),m=!d.isStateDoc||(![\"0\",\"1\"].includes(d.getType())||\"0\"===d.getType());const E=new import_obsidian20.Setting(this.contentEl);E.setClass(\"i18n__item\"),E.nameEl.addClass(\"i18n__item-title\");const T={mark:1,label:{color:\"\",text:\"\"},text:\"\"};if(d.isStateDoc?u&&g?(1===compareVersions(e.version,u.manifest.pluginVersion)?(T.label.color=\"warning\",T.label.text=t(\"标签_已过时_文本\")):d.getState()?(T.label.color=\"success\",T.label.text=t(\"标签_已翻译_文本\")):(T.label.color=\"danger\",T.label.text=t(\"标签_未翻译_文本\")),T.text=`<span class=\"i18n-tag i18n-tag--${this.settings.I18N_TAG_TYPE}-primary is-${this.settings.I18N_TAG_SHAPE}\">修改日期</span> ${formatTimestamp(fs5.statSync(n).mtimeMs)} <span class=\"i18n-tag i18n-tag--${this.settings.I18N_TAG_TYPE}-primary is-${this.settings.I18N_TAG_SHAPE}\">支持版本</span> ${null==u?void 0:u.manifest.pluginVersion}`):(T.label.color=\"danger\",T.label.text=t(\"标签_译文有误_文本\"),T.text=t(\"标签_译文有误_描述\")):(T.label.color=\"info\",T.label.text=t(\"标签_无译文_文本\"),T.text=t(\"标签_无译文_描述\")),this.i18n.ignoreMark&&this.i18n.ignorePlugins.includes(e.id)&&(T.label.color=\"primary\",T.label.text=t(\"标签_自带翻译_文本\"),T.text=t(\"标签_自带翻译_描述\")),E.nameEl.innerHTML=`<span class=\"i18n-tag i18n-tag--${this.settings.I18N_TAG_TYPE}-${T.label.color} is-${this.settings.I18N_TAG_SHAPE}\">${T.label.text}</span><span class=\"i18n__item-name\">${e.name}</span> <span class=\"i18n__item-version\">[${e.version}]</span> `,E.settingEl.onmouseover=(t=>{this.detailsEl.innerHTML=T.text}),E.settingEl.onmouseout=(e=>{this.detailsEl.innerHTML=t(\"标签_无_文本\")}),this.settings.I18N_OPEN_SETTINGS&&this.enabledPlugins.has(e.id)){const s=new import_obsidian20.ExtraButtonComponent(E.controlEl).setIcon(\"settings\").setTooltip(t(\"功能_打开_描述\")).onClick(()=>{s.setDisabled(!0),this.settingPlugins.open(),this.settingPlugins.openTabById(e.id),this.close()})}const b=new import_obsidian20.ExtraButtonComponent(E.controlEl).setIcon(\"folder-open\").setTooltip(t(\"功能_打开_描述\")).onClick(()=>{b.setDisabled(!0),i18nOpen(this.i18n,s),b.setDisabled(!1)});if(o){const s=new import_obsidian20.ExtraButtonComponent(E.controlEl).setIcon(\"trash\").setTooltip(t(\"功能_删除_描述\")).onClick(()=>{s.setDisabled(!0);try{if(d.stateObj.state){fs5.removeSync(c),fs5.renameSync(_,c);const t=fs5.readJsonSync(n);if(t.hasOwnProperty(\"description\")){const e=fs5.readJsonSync(l);e.description=t.description.original,fs5.writeJsonSync(l,e,{spaces:4})}}fs5.removeSync(i),this.reloadPlugin(e.id),this.i18n.notice.result(t(\"功能_删除_前缀\"),!0)}catch(e){this.i18n.notice.result(t(\"功能_删除_前缀\"),!1,e)}this.reloadShowData()})}if(g&&r&&this.settings.I18N_EDIT_MODE&&new import_obsidian20.ExtraButtonComponent(E.controlEl).setIcon(\"pencil\").setTooltip(t(\"功能_编辑_描述\")).onClick(()=>{this.i18n.editorPath=n,this.i18n.editorLoad(\"plugin\",n,d)}),this.settings.I18N_SHARE_MODE&&g&&r){const s=new import_obsidian20.ExtraButtonComponent(E.controlEl);s.setIcon(\"cloud-upload\"),s.setTooltip(t(\"功能_共享_描述\")),s.onClick(async()=>{this.i18n.shareLoad(0,n,e)})}this.settings.I18N_MODE_LDT&&!r&&E.controlEl.createEl(\"button\",{text:t(\"功能_提取_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",()=>{try{const s=fs5.readFileSync(c).toString(),a=fs5.readJsonSync(l),o=generatePlugin(e.version,a,s,this.settings.I18N_RE_LENGTH,this.regexps,this.settings.I18N_RE_FLAGS);fs5.ensureDirSync(i),fs5.writeJsonSync(n,o,{spaces:4}),d.insert(),d.setType(\"0\"),this.i18n.notice.result(t(\"功能_提取_前缀\"),!0)}catch(e){this.i18n.notice.result(t(\"功能_提取_前缀\"),!1,`${e}`)}this.reloadShowData()})}),this.settings.I18N_MODE_LDT&&this.settings.I18N_INCREMENTAL_EXTRACTION&&r&&g&&E.controlEl.createEl(\"button\",{text:t(\"功能_提取_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-info`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",()=>{if(d.isStateDoc&&!d.getState())try{const s=fs5.readJsonSync(n),a=generatePlugin(e.version,fs5.readJsonSync(l),fs5.readFileSync(c).toString(),this.settings.I18N_RE_LENGTH,this.regexps,this.settings.I18N_RE_FLAGS);a.manifest=s.manifest,a.description=s.description,a.dict={...a.dict,...s.dict},fs5.ensureDirSync(i),fs5.writeJsonSync(n,a,{spaces:4}),this.i18n.notice.result(t(\"功能_提取_前缀\"),!0,`提取译文${Object.keys(a.dict).length-Object.keys(s.dict).length}条`)}catch(e){this.i18n.notice.result(t(\"功能_提取_前缀\"),!1,`${e}`)}else this.i18n.notice.result(t(\"功能_提取_前缀\"),!1,t(\"功能_提取_通知一\"))})}),this.settings.I18N_MODE_NDT&&this.i18n.pluginDirectory&&g&&null!=h&&m&&(r&&1!=f||E.controlEl.createEl(\"button\",{text:t(r?\"功能_更新_文本\":\"功能_下载_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-success`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",async()=>{let s;\"gitee\"===this.i18n.settings.I18N_NDT_URL?s=await this.i18n.api.giteeGetTranslation(\"translation\",e.id,p):\"github\"===this.i18n.settings.I18N_NDT_URL&&(s=await this.i18n.api.githubGetTranslation(\"translation\",e.id,p)),void 0!==s&&null==u&&(u=s.data),void 0!==u&&void 0!==s?(this.i18n.downloadType=\"0\",this.i18n.downloadPath=i,this.i18n.downloadCloudJson=s.data,void 0!==u&&(this.i18n.downloadLocalJson=u),this.i18n.downloadView=this,this.i18n.activateDownloadView(),await this.reloadShowData()):this.i18n.notice.result(t(r?\"功能_更新_文本\":\"功能_下载_文本\"),!1,t(\"功能_下载更新_通知一\"))})})),this.settings.I18N_MODE_NIT&&!r&&E.controlEl.createEl(\"button\",{text:\"AI\",cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",async()=>{try{const s=fs5.readFileSync(c).toString(),a=fs5.readJsonSync(l),o=generatePlugin(e.version,a,s,this.settings.I18N_RE_LENGTH,this.regexps,this.settings.I18N_RE_FLAGS);let r=0;const _=/(['\"`])(.*)(\\1)/;for(const e in o.dict){this.i18n.notice.info(t(\"功能_AI_文本\"),`${r+=1}/${Object.keys(o.dict).length}`,this.settings.I18N_NIT_API_INTERVAL);const s=e.match(_);if(null!=s){const t=await ai(this.i18n,s[2]);t&&(o.dict[e]=t.state?e.replace(s[2],t.data):e),await sleep(this.settings.I18N_NIT_API_INTERVAL)}}fs5.ensureDirSync(i),fs5.writeJsonSync(n,o,{spaces:4}),d.insert(),d.setType(\"0\"),this.reloadShowData()}catch(e){this.i18n.notice.result(t(\"功能_AI_文本\"),!1,e)}})}),r&&d.isStateDoc&&g&&(0==d.getState()&&E.controlEl.createEl(\"button\",{text:t(\"功能_替换_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",()=>{try{const s=fs5.readJsonSync(n);if(s&&Object.keys(s.dict).every(t=>s.dict[t]===t))return void this.i18n.notice.result(t(\"功能_替换_前缀\"),!1,t(\"功能_替换_通知一\"));fs5.copySync(c,_);let i=fs5.readFileSync(c).toString();i=this.translationMain(s,i),fs5.writeFileSync(c,i);const a=fs5.readJsonSync(l);a.description=s.description.translation,fs5.writeJsonSync(l,a,{spaces:4}),d.setState(!0),d.setPluginVersion(e.version),d.setTranslationVersion(s.manifest.translationVersion),this.enabledPlugins.has(e.id)&&this.reloadPlugin(e.id)}catch(e){this.i18n.notice.result(t(\"功能_替换_前缀\"),!1,e)}this.reloadShowData()})}),1==d.getState()&&E.controlEl.createEl(\"button\",{text:t(\"功能_还原_文本\"),cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-danger`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},s=>{s.addEventListener(\"click\",()=>{try{fs5.unlinkSync(c),fs5.renameSync(_,c);const s=fs5.readJsonSync(n),i=fs5.readJsonSync(l);i.description=s.description.original,fs5.writeJsonSync(l,i,{spaces:4}),d.reset(),this.enabledPlugins.has(e.id)&&this.reloadPlugin(e.id),this.i18n.notice.result(t(\"功能_还原_前缀\"),!0)}catch(e){this.i18n.notice.result(t(\"功能_还原_前缀\"),!1,e)}this.reloadShowData()})})),this.developerMode&&E.controlEl.createEl(\"button\",{text:\"测试\",cls:[\"i18n-button\",`i18n-button--${this.settings.I18N_BUTTON_TYPE}-primary`,`is-${this.settings.I18N_BUTTON_SHAPE}`]},t=>{t.addEventListener(\"click\",async()=>{})})}}async getContents(t){const e=await this.i18n.api.giteeGetContents(t),s=e.state;let i=\"\",n=\"\";return s&&(i=e.data.sha,e.data.encoding,n=JSON.parse(Buffer.from(e.data.content,\"base64\").toString(\"utf8\"))),{state:s,count:n,sha:i}}async reloadShowData(){let t=0;const e=this.contentEl;t=e.scrollTop,e.empty(),await this.showData(),e.scrollTo(0,t)}async onOpen(){await this.showHead(),await this.showData()}async onClose(){this.contentEl.empty()}async reloadPlugin(t){this.enabledPlugins.has(t)&&(await this.app.plugins.disablePlugin(t),await this.app.plugins.enablePlugin(t))}translationMain(e,s){for(const t in e.dict)s=s.replaceAll(t,e.dict[t]);return this.i18n.notice.result(t(\"功能_替换_前缀\"),!0,t(\"功能_替换_通知二\")),s}},byteToHex=[];for(i=0;i<256;++i)byteToHex.push((i+256).toString(16).slice(1));function unsafeStringify(t,e=0){return(byteToHex[t[e+0]]+byteToHex[t[e+1]]+byteToHex[t[e+2]]+byteToHex[t[e+3]]+\"-\"+byteToHex[t[e+4]]+byteToHex[t[e+5]]+\"-\"+byteToHex[t[e+6]]+byteToHex[t[e+7]]+\"-\"+byteToHex[t[e+8]]+byteToHex[t[e+9]]+\"-\"+byteToHex[t[e+10]]+byteToHex[t[e+11]]+byteToHex[t[e+12]]+byteToHex[t[e+13]]+byteToHex[t[e+14]]+byteToHex[t[e+15]]).toLowerCase()}var rnds8=new Uint8Array(16);function rng(){if(!getRandomValues&&!(getRandomValues=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return getRandomValues(rnds8)}var randomUUID=\"undefined\"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),native_default={randomUUID:randomUUID};function v4(t,e,s){if(native_default.randomUUID&&!e&&!t)return native_default.randomUUID();var i=(t=t||{}).random||(t.rng||rng)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,e){s=s||0;for(var n=0;n<16;++n)e[s+n]=i[n];return e}return unsafeStringify(i)}var v4_default=v4,import_obsidian21=require(\"obsidian\"),Icons=()=>{(0,import_obsidian21.addIcon)(\"cloud-upload\",'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-cloud-upload\"><path d=\"M12 13v8\"/><path d=\"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242\"/><path d=\"m8 17 4-4 4 4\"/></svg>'),(0,import_obsidian21.addIcon)(\"circle-help\",'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-help\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"/><path d=\"M12 17h.01\"/></svg>'),(0,import_obsidian21.addIcon)(\"i18n_translate\",'<svg t=\"1726147647142\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5625\" width=\"100\" height=\"100\"><path d=\"M213.333333 640v85.333333a85.333333 85.333333 0 0 0 78.933334 85.077334L298.666667 810.666667h128v85.333333H298.666667a170.666667 170.666667 0 0 1-170.666667-170.666667v-85.333333h85.333333z m554.666667-213.333333l187.733333 469.333333h-91.946666l-51.242667-128h-174.506667l-51.157333 128h-91.904L682.666667 426.666667h85.333333z m-42.666667 123.093333L672.128 682.666667h106.325333L725.333333 549.76zM341.333333 85.333333v85.333334h170.666667v298.666666H341.333333v128H256v-128H85.333333V170.666667h170.666667V85.333333h85.333333z m384 42.666667a170.666667 170.666667 0 0 1 170.666667 170.666667v85.333333h-85.333333V298.666667a85.333333 85.333333 0 0 0-85.333334-85.333334h-128V128h128zM256 256H170.666667v128h85.333333V256z m170.666667 0H341.333333v128h85.333334V256z\" p-id=\"5626\" fill=\"currentColor\"></path></svg>'),(0,import_obsidian21.addIcon)(\"i18n_qq\",'<svg t=\"1727053933542\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"1762\" width=\"100\" height=\"100\"><path d=\"M538 902l-52 0c-12.667 0-21 2.333-25 7-12.667 12.667-30 22.167-52 28.5s-47.333 9.5-76 9.5c-36.667 0-71-6.333-103-19-4-2-7.833-4.167-11.5-6.5s-6.833-4.5-9.5-6.5-5.167-4.333-7.5-7-4.167-5.167-5.5-7.5-2.333-5-3-8-1-6.167-1-9.5c0-9.333 3.5-17.5 10.5-24.5S221 844.667 237 838c9.333-2.667 15.833-6 19.5-10s5.5-9 5.5-15c0-17.333-2-28-6-32-3.333-4-6.667-9-10-15l-12-16c-3.333-6-6.667-10.667-10-14-6.667-12.667-17.333-19-32-19-4 0-7.5 0.5-10.5 1.5s-6.833 2.833-11.5 5.5-8 4.667-10 6c-12.667 12-21.333 18.333-26 19-7.333 0-11.333-15.333-12-46l0-5c0-21.333 4-57.667 12-109 13.333-38.667 34.667-73 64-103 8.667-8 13-18.667 13-32l0-12c0-19.333 6.333-38.667 19-58 3.333-2.667 5.333-5.5 6-8.5s1-6.5 1-10.5l0-7c0-15.333 1-30.167 3-44.5s5.167-28.167 9.5-41.5 9.833-26.333 16.5-39 14.5-25.167 23.5-37.5 19.167-24.167 30.5-35.5c49.333-55.333 113.333-83 192-83 12.667 0 25 0.667 37 2s23.833 3.5 35.5 6.5 23 6.833 34 11.5 21.667 10 32 16 20.5 13 30.5 21 19.667 16.667 29 26c18 20 33 40 45 60s21.5 41.833 28.5 65.5S794 333.333 794 358l0 7c0 8.667 2 15 6 19 12.667 19.333 19 38.667 19 58l0 12c0 17.333 4.333 28 13 32 30 30 51.333 64.333 64 103 14 43.333 18.333 79.667 13 109 0 15.333-1.5 26.833-4.5 34.5s-7.833 13.167-14.5 16.5c-4.667 0-13.333-6.333-26-19-8.667-8.667-19.333-13-32-13l-12 0c-1.333 0-2.667 0.333-4 1s-2.833 1.167-4.5 1.5-3.167 1.167-4.5 2.5l-4 2-3.5 3.5c0 0-1 1.333-3 4s-2.833 4.167-2.5 4.5c-4.667 12.667-15.333 27.667-32 45-10 10-12.333 20.667-7 32 0 6 5.333 13.333 16 22l3 3c29.333 13.333 44.333 28.333 45 45 0 9.333-3 17.5-9 24.5s-15.667 13.833-29 20.5c-12.667 6-28 10.667-46 14s-37 5-57 5c-53.333 0-96-12.667-128-38 4.667 0 3.667-1.333-3-4L538 902zM685 1024c64 0 115-12.667 153-38 20.667-14 36.5-29.333 47.5-46s16.5-35.667 16.5-57c0-23.333-6.333-44.667-19-64l9 0c2 0 4.833-0.5 8.5-1.5s6.5-2.5 8.5-4.5c36-12 57.333-44 64-96 6-44.667-0.333-96-19-154-2.667-8.667-5.833-17.333-9.5-26s-7.667-17-12-25-9.167-16-14.5-24-10.833-15.667-16.5-23-11.833-15-18.5-23c0-28-6.333-58-19-90 0-32-3.667-62.5-11-91.5s-18.5-56.833-33.5-83.5-34.167-51.667-57.5-75c-10-10-20.333-19.167-31-27.5s-21.5-16-32.5-23-22.333-13.333-34-19S640.833 22 628.5 18 603.667 10.667 591 8s-25.5-4.667-38.5-6S526 0 512 0c-32 0-62.5 3.667-91.5 11S363.667 29.5 337 44.5s-51.667 34.167-75 57.5c-68 76-102 159.333-102 250-12.667 25.333-19 55.333-19 90l0 6c-9.333 7.333-17.833 15.833-25.5 25.5s-14.333 19.667-20 30-10.333 20.167-14 29.5S74 552.333 70 563c-18.667 58-25 109.333-19 154 3.333 24.667 10.667 45.167 22 61.5s25.333 27.833 42 34.5c2 0 6.333 1 13 3s11 3 13 3c-12.667 19.333-19 40.667-19 64 0 44 21.333 78.333 64 103 9.333 6 19.5 11.5 30.5 16.5s22.833 9 35.5 12 25.667 5.333 39 7c13.333 1.667 27.333 2.5 42 2.5 70.667 0 124-15 160-45l32 0C567 1009 620.333 1024 685 1024z\" fill=\"currentColor\" p-id=\"1763\"></path></svg>'),(0,import_obsidian21.addIcon)(\"square-check-big\",'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-check-big\"><path d=\"M21 10.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.5\"/><path d=\"m9 11 3 3L22 4\"/></svg>'),(0,import_obsidian21.addIcon)(\"name-setting\",'<svg t=\"1728458503829\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5311\" width=\"100\" height=\"100\"><path d=\"M85.357714 797.988571h307.2v121.929143h-307.2V797.988571z m0-313.636571h394.971429v121.856h-394.971429V484.352z m0-313.709714h877.714286V292.571429h-877.714286V170.642286zM806.473143 468.114286l10.24 52.516571c23.113143 7.606857 44.105143 20.187429 61.659428 36.425143l49.737143-17.261714 42.934857 76.068571-39.350857 35.328a179.931429 179.931429 0 0 1 0 72.704l39.350857 35.328-42.934857 76.068572-49.737143-17.188572a170.422857 170.422857 0 0 1-61.659428 36.425143l-10.24 52.443429H720.457143l-10.313143-52.516572a170.934857 170.934857 0 0 1-61.659429-36.425143l-49.737142 17.261715-42.934858-76.068572 39.350858-35.328a179.931429 179.931429 0 0 1 0-72.704L555.885714 615.862857l43.008-76.068571 49.664 17.188571a170.422857 170.422857 0 0 1 61.659429-36.425143l10.24-52.443428h86.016z m-43.008 175.542857a43.446857 43.446857 0 0 0-42.934857 43.885714c0 24.210286 19.236571 43.885714 42.934857 43.885714a43.446857 43.446857 0 0 0 43.008-43.885714c0-24.210286-19.236571-43.885714-43.008-43.885714z\" fill=\"currentColor\" p-id=\"5312\"></path></svg>'),(0,import_obsidian21.addIcon)(\"task\",'<svg t=\"1728534890459\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4292\" width=\"100\" height=\"100\"><path d=\"M663.608889 469.959111a22.186667 22.186667 0 0 0-5.176889 0.512 11.150222 11.150222 0 0 0-3.584-0.512H399.189333a10.126222 10.126222 0 0 0-2.218666 0.227556 27.136 27.136 0 0 0-21.390223 7.281777 28.103111 28.103111 0 0 0-8.931555 21.105778 28.387556 28.387556 0 0 0 8.931555 21.105778 27.591111 27.591111 0 0 0 21.390223 7.338667c0.739556 0.113778 1.422222 0.227556 2.218666 0.227555h255.715556a10.979556 10.979556 0 0 0 3.584-0.568889 22.186667 22.186667 0 0 0 5.176889 0.512 27.989333 27.989333 0 0 0 27.192889-28.615111 28.046222 28.046222 0 0 0-27.249778-28.615111z m103.253333 133.290667a27.761778 27.761778 0 0 0-5.233778 0.568889 12.344889 12.344889 0 0 0-3.527111-0.568889h-358.968889c-0.739556 0-1.422222 0.113778-2.218666 0.227555a27.192889 27.192889 0 0 0-21.390222 7.338667 28.387556 28.387556 0 0 0-8.931556 21.105778 28.273778 28.273778 0 0 0 8.931556 21.105778 26.794667 26.794667 0 0 0 21.390222 7.338666c0.739556 0.113778 1.422222 0.227556 2.218666 0.227556h359.025778a13.084444 13.084444 0 0 0 3.584-0.568889 27.591111 27.591111 0 0 0 32.256-28.103111 27.875556 27.875556 0 0 0-27.136-28.672z m0 133.404444a27.648 27.648 0 0 0-5.233778 0.512 12.288 12.288 0 0 0-3.527111-0.512h-358.968889a15.132444 15.132444 0 0 0-2.218666 0.170667 27.591111 27.591111 0 0 0-21.390222 7.338667 28.387556 28.387556 0 0 0-8.931556 21.105777 27.989333 27.989333 0 0 0 30.321778 28.387556 9.500444 9.500444 0 0 0 2.218666 0.227555h359.025778a12.913778 12.913778 0 0 0 3.584-0.455111 27.648 27.648 0 0 0 32.256-28.16 27.875556 27.875556 0 0 0-27.136-28.615111z m197.916445 223.459556V63.715556S966.314667 0 900.266667 0H119.182222C56.035556 0 54.613333 63.715556 54.613333 63.715556v896.512c0-0.113778-0.170667 63.715556 64.568889 63.715555h184.149334l1.820444 0.056889 1.934222-0.056889h593.180445c67.299556 0 64.512-63.886222 64.512-63.829333z m-712.305778 3.128889H140.572444v0.113777c-28.273778 0-30.606222-29.525333-30.606222-29.525333V86.528c0-28.16 30.663111-29.297778 30.663111-29.297778h111.786667l0.056889 906.012445z m628.622222 3.470222H306.744889V57.287111h286.037333v278.072889l85.560889-88.405333 86.357333 88.405333V57.287111h114.346667c32.028444 0 31.459556 29.354667 31.459556 29.354667v850.716444s0.512 29.354667-29.411556 29.354667z\" fill=\"currentColor\" p-id=\"4293\"></path></svg>'),(0,import_obsidian21.addIcon)(\"a-large-small\",'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-a-large-small\"><path d=\"M21 14h-5\"/><path d=\"M16 16v-3.5a2.5 2.5 0 0 1 5 0V16\"/><path d=\"M4.5 13h6\"/><path d=\"m3 16 4.5-9 4.5 9\"/></svg>'),(0,import_obsidian21.addIcon)(\"i18n-review\",'<svg t=\"1732064818725\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"  p-id=\"5189\" width=\"100\" height=\"100\"><path d=\"M296 250c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H296zM480 394H296c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\" fill=\"currentColor\" p-id=\"5190\"></path><path d=\"M432 852H208V148h560v320c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V108c0-17.7-14.3-32-32-32H168c-17.7 0-32 14.3-32 32v784c0 17.7 14.3 32 32 32h264c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8z\" fill=\"currentColor\" p-id=\"5191\"></path><path d=\"M872 764H728v-36.6c46.3-13.8 80-56.6 80-107.4 0-61.9-50.1-112-112-112s-112 50.1-112 112c0 50.7 33.7 93.6 80 107.4V764H520c-8.8 0-16 7.2-16 16v152c0 8.8 7.2 16 16 16h352c8.8 0 16-7.2 16-16V780c0-8.8-7.2-16-16-16zM646 620c0-27.6 22.4-50 50-50s50 22.4 50 50-22.4 50-50 50-50-22.4-50-50z m180 266H566v-60h260v60z\" fill=\"currentColor\" p-id=\"5192\"></path></svg>'),(0,import_obsidian21.addIcon)(\"i18n-contributor\",'<svg t=\"1729676848596\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4535\" width=\"100\" height=\"100\"><path d=\"M983.16843438 31.92001063l-44.12028343-22.05810365C878.4389764 105.02764549 708.40340055 173.63126834 507.70114909 173.63126834c-195.89389684 0-362.44310986-65.41888744-426.69353642-157.03848197l-41.89069684 26.20749977c57.67443505 81.55180576 173.78280475 137.50751488 306.48740073 163.96908804-156.33197079 58.38094623-267.93497025 209.75103282-267.93497024 387.83812157 0 228.72494218 183.69706262 414.09453498 410.35138222 414.09453498 226.65567786 0 422.39468552-185.41714682 422.39468551-414.09453498 0-88.58974697-29.59875589-170.49752553-78.77059584-237.83622253l-41.032013 20.74562242c44.57136429 60.20157159 71.53836369 133.81327573 71.53836368 213.54581442 0 202.72396043-172.52059409 367.04902125-372.25682655 367.04902127-199.74030863 0-361.63605618-164.32506085-361.63605622-367.04902127 0-202.71852602 161.8957489-367.04358685 361.63605622-367.04358685 4.14532001 0 7.0325068-0.10190075 10.06914702-0.25543166C697.16714958 228.26906315 897.00935893 169.17752959 983.16843438 31.92001063L983.16843438 31.92001063zM457.46138942 414.75277009l-140.74524009 140.74524006c-19.42906636 19.43042464-19.42906636 50.94491261 0 70.37533726l140.74524009 140.74524005c19.43042464 19.43042464 50.95034702 19.43042464 70.37533722 0l140.74524008-140.74524005c19.43042464-19.43042464 19.43042464-50.94491261 0-70.37533726l-140.74524008-140.74524006C508.41173642 395.32370373 476.89181404 395.32370373 457.46138942 414.75277009L457.46138942 414.75277009zM620.92776774 622.22666096l-94.70922322 94.66166921c-17.40327994 17.40327994-45.68547845 17.40327994-63.14174683 0l-94.65623479-94.66166921c-17.40327994-17.4494757-17.40327994-45.68004403 0-63.13495281l94.65623479-94.65623479c17.45626837-17.45626837 45.68547845-17.45626837 63.14174683 0l94.70922322 94.65623479C638.38267651 576.54661826 638.38267651 604.77718661 620.92776774 622.22666096L620.92776774 622.22666096zM620.92776774 622.22666096\" fill=\"currentColor\" p-id=\"4536\"></path></svg>')},icon_default=Icons,fs6=__toESM(require_lib()),path4=__toESM(require(\"path\")),import_obsidian22=require(\"obsidian\"),EDIT_VIEW_TYPE=\"i18n-edit-view\",EditorView=class extends import_obsidian22.ItemView{constructor(t,e){if(super(t),this.translationDict=[],this.i18n=e,this.path=this.i18n.editorPath,this.type=this.i18n.editorType,this.i18n.editorState){const t=this.i18n.editorState.getType();this.i18n.editorState.setType(\"0\"===t||\"1\"===t?t:\"0\")}}async onload(){var e,s;this.i18n.notice.reload();const i=this.contentEl;if(null==(e=i.parentElement)||e.getElementsByClassName(\"view-header\")[0].remove(),i.addClass(\"i18n-edit__container\"),\"\"!==this.type&&\"\"!==this.path&&(this.translationJson=fs6.readJsonSync(this.path),this.stats=fs6.statSync(this.path)),\"\"!==this.type&&\"\"!==this.path&&void 0!==this.translationJson){if(\"plugin\"===this.type&&isPlugin(this.translationJson)){const e=i.createEl(\"div\");e.addClass(\"i18n-edit__manifest\"),e.createEl(\"span\",{text:t(\"编辑器_行_修改日期\"),cls:[\"i18n-edit__label-wrap\"]}),e.createEl(\"input\",{value:formatTimestamp_concise(this.stats.mtimeMs),cls:[\"i18n-edit__plugin-version-input\"]}).disabled=!0,e.createEl(\"span\",{text:t(\"编辑器_行_源代码\"),cls:[\"i18n-edit__label-wrap\"]}),e.createEl(\"input\",{value:this.translationJson.description.original,cls:[\"i18n-edit__description-input\"]}).disabled=!0;const s=i.createEl(\"div\");s.addClass(\"i18n-edit__manifest\"),s.createEl(\"span\",{text:t(\"编辑器_行_插件版本\"),cls:[\"i18n-edit__label-wrap\"]});const n=s.createEl(\"input\",{value:this.translationJson.manifest.pluginVersion,cls:[\"i18n-edit__plugin-version-input\"]});n.addEventListener(\"input\",()=>{this.translationJson.manifest.pluginVersion=n.value}),s.createEl(\"span\",{text:t(\"编辑器_行_新描述\"),cls:[\"i18n-edit__label-wrap\"]});const a=s.createEl(\"input\",{value:this.translationJson.description.translation,cls:[\"i18n-edit__description-input\"]});a.addEventListener(\"input\",()=>{this.translationJson.description.translation=a.value})}if(\"theme\"===this.type&&isTheme(this.translationJson)){const e=i.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});e.createEl(\"span\",{text:t(\"编辑器_行_修改日期\"),cls:\"i18n-edit__label-wrap\"}),e.createEl(\"input\",{value:formatTimestamp_concise(this.stats.mtimeMs),cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0,e.createEl(\"span\",{text:t(\"编辑器_行_主题版本\"),cls:\"i18n-edit__label-wrap\"});const s=e.createEl(\"input\",{value:this.translationJson.manifest.pluginVersion,cls:[\"i18n-input\",\"i18n-edit__description-input\"]});s.addEventListener(\"input\",()=>{this.translationJson.manifest.pluginVersion=s.value}),e.createEl(\"span\",{text:t(\"编辑器_行_文件大小\"),cls:\"i18n-edit__label-wrap\"}),e.createEl(\"input\",{value:`${(this.stats.size/1024/1024).toFixed(2)}M`,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0}const e=i.createEl(\"div\",{cls:[\"i18n-edit__dict\"]}).createEl(\"table\",{cls:[\"i18n-edit__table\"]});for(const s in this.translationJson.dict)if(this.translationJson.dict.hasOwnProperty(s)){const i=e.createEl(\"tr\");i.addClass(\"i18n-edit__table-row\");const n={key:s,value:this.translationJson.dict[s],el:i};this.translationDict.push(n);const a=i.createEl(\"td\");a.addClass(\"i18n-edit__table-key\");const o=i.createEl(\"td\");o.addClass(\"i18n-edit__table-value\"),o.setAttribute(\"contenteditable\",\"true\"),o.addEventListener(\"input\",()=>{o.textContent&&(n.value=o.textContent);const t=diff2(n.key,n.value);a.innerHTML=t.s1}),o.addEventListener(\"blur\",()=>{const t=diff2(n.key,n.value);a.innerHTML=t.s1,o.innerHTML=t.s2}),this.i18n.settings.I18N_MODE_NIT&&i.createEl(\"td\").createEl(\"button\",{text:t(\"编辑器_通用_AI_按钮\"),cls:[\"i18n-basic-button\",\"i18n-basic-button--primary\"]},async e=>{e.addEventListener(\"click\",async()=>{const e=/(['\"`])(.*)(\\1)/;if(\"BAIDU\"==this.i18n.settings.I18N_NIT_API){const s=n.key.match(e);if(null!=s){const e=await this.i18n.api.baiduAPI(s[2]),i=e.state?n.key.replace(s[2],e.data):n.key,r=diff2(n.key,i);n.value=i,a.innerHTML=r.s1,o.innerHTML=r.s2,this.i18n.notice.success(t(\"编辑器_通知_前缀\"),t(\"编辑器_AI_通知一\"))}}if(\"OPENAI\"==this.i18n.settings.I18N_NIT_API){const i=n.key.match(e);if(null!=i){const e=await this.i18n.api.openAI(\"\",i[2]);let r=\"\";r=\"content\"in e?s.replace(i[2],e.content):s;const l=diff2(n.key,r);n.value=r,a.innerHTML=l.s1,o.innerHTML=l.s2,this.i18n.notice.success(t(\"编辑器_通知_前缀\"),t(\"编辑器_AI_通知一\"))}}})}),i.createEl(\"td\").createEl(\"button\",{text:t(\"编辑器_通用_还原_按钮\"),cls:[\"i18n-basic-button\",\"i18n-basic-button--warning\"]},async e=>{e.addEventListener(\"click\",async()=>{n.value=n.key,a.textContent=n.key,o.textContent=n.key,this.i18n.notice.success(t(\"编辑器_通知_前缀\"),t(\"编辑器_还原_通知一\"),1e3)})}),i.createEl(\"td\").createEl(\"button\",{text:t(\"编辑器_通用_删除_按钮\"),cls:[\"i18n-basic-button\",\"i18n-basic-button--danger\"]},async e=>{e.addEventListener(\"click\",async()=>{i.remove(),this.translationDict=this.translationDict.filter(t=>t.key!==n.key),this.i18n.notice.success(t(\"编辑器_通知_前缀\"),t(\"编辑器_删除_通知一\"),1e3)})});const r=diff2(n.key,n.value);a.innerHTML=r.s1,o.innerHTML=r.s2}const n=i.createEl(\"div\",{cls:[\"i18n-edit__search\"]}),a=i.createEl(\"div\",{cls:[\"i18n-edit__operate\"]});let o,r=0,l=!1,c=!1;const _=new import_obsidian22.SearchComponent(n);_.onChange(t=>{(o=c?this.translationDict.filter(e=>e.key.includes(t)||e.value.includes(t)):this.translationDict.filter(e=>e.key.toLowerCase().includes(t.toLowerCase())||e.value.toLowerCase().includes(t.toLowerCase()))).length>0&&\"\"!==t?(l=!0,u.setButtonText(`${r+1}/${o.length}`),o[r=0].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),o[r].el.classList.remove(\"animate\"),o[r].el.offsetWidth,o[r].el.classList.add(\"animate\")):(l=!1,u.setButtonText(\"0/0\"))}),_.setClass(\"i18n-edit__search-box\"),_.inputEl.addClass(\"i18n-edit__search-input\");const d=new import_obsidian22.ButtonComponent(n).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"a-large-small\").setTooltip(t(\"编辑器_大小_按钮_提示\")).onClick(()=>{c?(c=!1,d.buttonEl.removeClass(\"i18n-button--success\"),d.setClass(\"i18n-button--primary\")):(c=!0,d.buttonEl.removeClass(\"i18n-button--primary\"),d.setClass(\"i18n-button--success\"))});new import_obsidian22.ButtonComponent(n).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"arrow-up\").setTooltip(t(\"编辑器_上个_按钮_提示\")).onClick(()=>{l&&(r>0?r-=1:0==r&&(r=o.length-1),u.setButtonText(`${r+1}/${o.length}`),o[r].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),o[r].el.classList.remove(\"animate\"),o[r].el.offsetWidth,o[r].el.classList.add(\"animate\"))}),new import_obsidian22.ButtonComponent(n).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"arrow-down\").setTooltip(t(\"编辑器_下个_按钮_提示\")).onClick(()=>{l&&(r<o.length-1?r+=1:r==o.length-1&&(r=0),u.setButtonText(`${r+1}/${o.length}`),o[r].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),o[r].el.classList.remove(\"animate\"),o[r].el.offsetWidth,o[r].el.classList.add(\"animate\"))});const u=new import_obsidian22.ButtonComponent(n).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"0/0\").setTooltip(t(\"编辑器_数量_按钮_提示\")),h=new import_obsidian22.SearchComponent(a);null==(s=h.inputEl.parentElement)||s.addClass(\"i18n-edit__operate-input\");const p=new import_obsidian22.ButtonComponent(a);p.setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\"),p.setButtonText(t(\"编辑器_新增_按钮\")).setTooltip(t(\"编辑器_新增_按钮_提示\")),p.onClick(()=>{const s=h.inputEl.value;if(h.inputEl.value=\"\",void 0===this.translationDict.find(t=>t.key===s)){const i=e.createEl(\"tr\");i.addClass(\"i18n-edit__table-row\");const n={key:s,value:s,el:i};this.translationDict.push(n);const a=i.createEl(\"td\");a.addClass(\"i18n-edit__table-key\");const o=i.createEl(\"td\");o.addClass(\"i18n-edit__table-value\"),o.setAttribute(\"contenteditable\",\"true\"),o.addEventListener(\"input\",()=>{o.textContent&&(n.value=o.textContent);const t=diff2(n.key,n.value);a.innerHTML=t.s1}),o.addEventListener(\"blur\",()=>{const t=diff2(n.key,n.value);a.innerHTML=t.s1,o.innerHTML=t.s2}),this.i18n.settings.I18N_MODE_NIT&&i.createEl(\"td\").createEl(\"button\",{text:\"AI\",cls:[\"i18n-basic-button\",\"i18n-basic-button--primary\"]},async t=>{t.addEventListener(\"click\",async()=>{const t=/(['\"`])(.*)(\\1)/;if(\"BAIDU\"==this.i18n.settings.I18N_NIT_API){const e=n.key.match(t);if(null!=e){const t=await this.i18n.api.baiduAPI(e[2]),s=t.state?n.key.replace(e[2],t.data):n.key,i=diff2(n.key,s);n.value=s,a.innerHTML=i.s1,o.innerHTML=i.s2,this.i18n.notice.success(\"译文编辑器\",\"翻译成功\")}}if(\"OPENAI\"==this.i18n.settings.I18N_NIT_API){const e=n.key.match(t);if(null!=e){const t=await this.i18n.api.openAI(\"\",e[2]);let i=\"\";i=\"content\"in t?s.replace(e[2],t.content):s;const r=diff2(n.key,i);n.value=i,a.innerHTML=r.s1,o.innerHTML=r.s2,this.i18n.notice.success(\"译文编辑器\",\"翻译成功\")}}})}),i.createEl(\"td\").createEl(\"button\",{text:\"还原\",cls:[\"i18n-basic-button\",\"i18n-basic-button--warning\"]},async e=>{e.addEventListener(\"click\",async()=>{n.value=n.key,a.textContent=n.key,o.textContent=n.key,this.i18n.notice.success(t(\"编辑器_通知_前缀\"),t(\"编辑器_还原_通知一\"))})}),i.createEl(\"td\").createEl(\"button\",{text:\"删除\",cls:[\"i18n-basic-button\",\"i18n-basic-button--danger\"]},async e=>{e.addEventListener(\"click\",async()=>{i.remove(),this.translationDict=this.translationDict.filter(t=>t.key!==n.key),this.i18n.notice.success(t(\"编辑器_通知_前缀\"),t(\"编辑器_删除_通知一\"),1e3)})});const r=diff2(n.key,n.value);a.innerHTML=r.s1,o.innerHTML=r.s2,i.scrollIntoView({behavior:\"auto\",block:\"center\"}),this.i18n.notice.success(t(\"编辑器_通知_前缀\"),t(\"编辑器_新增_通知一\"),1e3)}else this.i18n.notice.error(t(\"编辑器_通知_前缀\"),t(\"编辑器_新增_通知二\"))}),new import_obsidian22.ButtonComponent(a).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-danger`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(t(\"编辑器_删除_按钮\")).setTooltip(t(\"编辑器_删除_按钮_提示\")).onClick(()=>{const e=this.translationDict.length;this.translationDict=this.translationDict.filter(t=>{const e=t.key===t.value;return e&&t.el.remove(),!e});const s=e-this.translationDict.length;this.i18n.notice.success(t(\"编辑器_通知_前缀\"),`共删除${s}项未翻译内容`)}),new import_obsidian22.ButtonComponent(a).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-warning`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(t(\"编辑器_源码_按钮\")).setTooltip(t(\"编辑器_源码_按钮_提示\")).onClick(async()=>{\"plugin\"===this.i18n.editorType?i18nOpen(this.i18n,path4.join(this.path.split(\"\\\\\").slice(0,-2).join(\"\\\\\"),\"main.js\")):\"theme\"===this.i18n.editorType&&i18nOpen(this.i18n,path4.join(this.path.split(\"\\\\\").slice(0,-2).join(\"\\\\\"),\"theme.css\"))}),new import_obsidian22.ButtonComponent(a).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-warning`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(t(\"编辑器_译文_按钮\")).setTooltip(t(\"编辑器_译文_按钮_提示\")).onClick(async()=>{i18nOpen(this.i18n,path4.join(this.path))}),new import_obsidian22.ButtonComponent(a).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(t(\"编辑器_保存_按钮\")).setTooltip(t(\"编辑器_保存_按钮_提示\")).onClick(async()=>{try{const e={};this.translationDict.forEach(t=>{e[t.key]=t.value}),this.translationJson.dict=e,console.log(this.translationJson.dict),fs6.writeJsonSync(this.path,this.translationJson,{spaces:4}),this.i18n.notice.result(t(\"编辑器_通知_前缀\"),!0,\"\")}catch(e){this.i18n.notice.result(t(\"编辑器_通知_前缀\"),!1,e)}});const m=new import_obsidian22.ButtonComponent(a).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"0\"===this.i18n.editorState.getType()?\"检查更新\":\"不检查更新\").setTooltip(t(\"编辑器_保存_按钮_提示\")).onClick(async()=>{this.i18n.editorState.setType(\"0\"===this.i18n.editorState.getType()?\"1\":\"0\"),m.setButtonText(\"0\"===this.i18n.editorState.getType()?\"检查更新\":\"不检查更新\")})}else i.createEl(\"h1\",{text:\"Oh~抱歉，您的数据走丢了\",cls:[\"i18n-empty\"]})}async onunload(){this.i18n.notice.reload(),this.path=\"\",this.contentEl.empty(),this.i18n.detachEditorView()}getViewType(){return EDIT_VIEW_TYPE}getDisplayText(){return t(\"编辑器_通用_名称\")}getIcon(){return\"i18n_translate\"}},import_obsidian23=require(\"obsidian\"),AgreementModal=class extends import_obsidian23.Modal{constructor(t,e){super(t),this.areement_1=!1,this.areement_2=!1,this.i18n=e}async Main(){this.contentEl.parentElement.addClass(\"i18n-areement__container\"),this.titleEl.innerHTML=\"使用协议(请仔细阅读)\";const t=this.contentEl;t.innerHTML=\"\\n        <p class='i18n-agreement__text'>1. 插件翻译过程涉及直接修改原插件的源代码。尽管i18n工具会事先备份原始文件，但操作仍存在一定风险。</p>\\n        <p class='i18n-agreement__text'>2. 强烈建议在首次尝试翻译插件之前，先备份您的插件目录。通常，插件目录位于 .obsidian/plugins 文件夹内。备份可以确保您的数据安全。</p>\\n        <p class='i18n-agreement__text'>3. 在进行翻译时，请耐心等待。直到翻译成功或明确得知失败结果后，再继续您的后续操作。</p>\\n        <p class='i18n-agreement__text'>4. 若在使用本插件进行翻译后，发现原插件的某些功能受到影响而失效，请卸载重新安装原插件，随后再次检验功能是否恢复正常。若问题依旧存在，再去原插件作者项目地址提交issues，避免因本插件导致原插件失效，去打扰原作者。(重要！重要！重要！)</p>\\n        \";const e=new import_obsidian23.Setting(t);e.setClass(\"i18n-agreement__item\"),e.setName(\"我已知晓风险\"),e.addButton(t=>t.setClass(\"i18n-agreement__check-button\").setIcon(this.areement_1?\"square-check-big\":\"square\").onClick(()=>{this.areement_1=!this.areement_1,t.setIcon(this.areement_1?\"square-check-big\":\"square\")}));const s=new import_obsidian23.Setting(t);s.setClass(\"i18n-agreement__item\"),s.setName(\"如果遇到翻译后插件失效，点击还原即可恢复正常\"),s.addButton(t=>t.setClass(\"i18n-agreement__check-button\").setIcon(this.areement_2?\"square-check-big\":\"square\").onClick(()=>{this.areement_2=!this.areement_2,t.setIcon(this.areement_2?\"square-check-big\":\"square\")}));const i=new import_obsidian23.Setting(t);i.setClass(\"i18n-agreement__operate\");const n=new import_obsidian23.ButtonComponent(i.controlEl);n.setButtonText(\"同意\"),n.setClass(\"i18n-button\"),n.setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-success`),n.setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`),n.onClick(async()=>{!0===this.areement_1&&!0===this.areement_2?(this.i18n.notice.result(\"I18N协议\",!0),this.i18n.settings.I18N_AGREEMENT=!0,this.i18n.saveSettings(),await this.app.plugins.disablePlugin(\"i18n\"),await this.app.plugins.enablePlugin(\"i18n\"),this.close()):this.i18n.notice.result(\"I18N协议\",!1,\"请勾选使用协议\")});const a=new import_obsidian23.ButtonComponent(i.controlEl);a.setButtonText(\"不同意\"),a.setClass(\"i18n-button\"),a.setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-danger`),a.setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`),a.onClick(async()=>{await this.app.plugins.disablePlugin(\"i18n\"),this.close()})}async onOpen(){await this.Main()}async onClose(){this.contentEl.empty()}},Commands=(e,s)=>{s.addCommand({id:\"i18n-translate\",name:t(\"命令_打开翻译面板\"),callback:()=>{new I18NPluginModal(e,s).open()}}),s.addCommand({id:\"i18n-help\",name:t(\"命令_打开帮助面板\"),callback:()=>{new WizardModal(e,s).open()}})},command_default=Commands,fs7=__toESM(require_lib()),import_obsidian25=require(\"obsidian\"),import_obsidian24=require(\"obsidian\"),AgreementConfirmModal=class extends import_obsidian24.Modal{constructor(t,e,s){super(t),this.name=\"\",this.i18n=e,this.onSubmit=s}async showHead(){const t=this.contentEl.parentElement;t.addClass(\"i18n-share-history__container\"),t.removeChild(t.getElementsByClassName(\"modal-close-button\")[0]),this.titleEl.addClass(\"i18n-share-history__title-box\");const e=new import_obsidian24.Setting(this.titleEl);e.setClass(\"i18n-share-history__title\"),e.setName(\"提交译文\")}async showMain(){new import_obsidian24.Setting(this.contentEl).setName(\"请输入\").addText(t=>t.setValue(\"我已仔细检查译文\").setDisabled(!0)),new import_obsidian24.Setting(this.contentEl).setName(\"请输入\").addText(t=>t.onChange(t=>{this.name=t}));const t=new import_obsidian24.Setting(this.contentEl);t.controlEl.createEl(\"button\",{text:\"确认\",cls:[\"i18n-button\",`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`,`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`]},t=>{t.addEventListener(\"click\",()=>{this.onSubmit(this.name),this.close()})}),t.controlEl.createEl(\"button\",{text:\"取消\",cls:[\"i18n-button\",`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-info`,`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`]},t=>{t.addEventListener(\"click\",()=>{this.close()})})}async onOpen(){await this.showHead(),await this.showMain()}async onClose(){this.contentEl.empty()}},SHARE_VIEW_TYPE=\"i18n-share-view\",ShareView=class extends import_obsidian25.ItemView{constructor(t,e){super(t),this.directory=[],this.i18n=e,this.i18n.notice.reload(),this.type=this.i18n.shareType,this.path=this.i18n.sharePath,0===this.type?this.pluginObj=this.i18n.shareObj:this.themeObj=this.i18n.shareObj}async onload(){var t;const e=this.contentEl;if(e.addClass(\"i18n-review__container\"),null==(t=e.parentElement)||t.getElementsByClassName(\"view-header\")[0].remove(),\"\"!==this.path&&(this.localJson=fs7.readJsonSync(this.path)),0===this.type&&isPlugin(this.localJson)){this.directory=(await this.i18n.api.giteeGetFile(`translation/directory/${this.i18n.settings.I18N_LANGUAGE}.json`)).data;const t=this.directory.find(t=>t.id===this.pluginObj.id);if(this.localJson&&t)this.localJson.manifest.pluginVersion in t.translations?(this.submissionType=2,this.cloudJson=(await this.i18n.api.giteeGetTranslation(\"translation\",this.pluginObj.id,this.localJson.manifest.pluginVersion)).data):(this.submissionType=1,this.cloudJson=(await this.i18n.api.giteeGetTranslation(\"translation\",this.pluginObj.id,Object.keys(t.translations).slice(-1)[0])).data);else if(this.localJson){this.submissionType=1;const t={manifest:{translationVersion:0,pluginVersion:this.localJson.manifest.pluginVersion},description:{original:this.localJson.description.original,translation:this.localJson.description.translation},dict:{}};this.cloudJson=t}}if(1===this.type&&isTheme(this.localJson)){this.directory=(await this.i18n.api.giteeGetFile(`theme/directory/${this.i18n.settings.I18N_LANGUAGE}.json`)).data;const t=this.directory.find(t=>t.id===this.themeObj.name);if(t&&this.localJson)this.localJson.manifest.pluginVersion in t.translations?(this.submissionType=2,this.cloudJson=(await this.i18n.api.giteeGetTranslation(\"theme\",this.themeObj.name,this.localJson.manifest.pluginVersion)).data):(this.submissionType=1,this.cloudJson=(await this.i18n.api.giteeGetTranslation(\"theme\",this.themeObj.name,Object.keys(t.translations).slice(-1)[0])).data);else if(this.localJson){this.submissionType=1;const t={manifest:{translationVersion:0,pluginVersion:this.localJson.manifest.pluginVersion},dict:{}};this.cloudJson=t}}if(null!=this.localJson&&void 0!==this.cloudJson){const t=this.getSubmissionTypeName();if(0===this.type&&isPlugin(this.localJson)&&isPlugin(this.cloudJson)){const s=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});s.createEl(\"span\",{text:\"提交类型\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:t,cls:[\"i18n-input\",\"i18n-edit__plugin-version-input\"]}).disabled=!0,s.createEl(\"span\",{text:\"源代码\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:this.localJson.description.original,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0;const i=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});i.createEl(\"span\",{text:\"插件标识\",cls:\"i18n-edit__label-wrap\"}),i.createEl(\"input\",{value:this.pluginObj.id,cls:\"i18n-edit__plugin-version-input\"}).disabled=!0,i.createEl(\"span\",{text:\"旧描述\",cls:\"i18n-edit__label-wrap\"}),i.createEl(\"input\",{value:this.cloudJson.description.translation,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0;const n=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});n.createEl(\"span\",{text:\"插件版本\",cls:\"i18n-edit__label-wrap\"}),n.createEl(\"input\",{value:this.localJson.manifest.pluginVersion,cls:[\"i18n-input\",\"i18n-edit__plugin-version-input\"]}).disabled=!0,n.createEl(\"span\",{text:\"新描述\",cls:\"i18n-edit__label-wrap\"}),n.createEl(\"input\",{value:this.localJson.description.translation,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0}if(1===this.type&&isTheme(this.localJson)&&isTheme(this.cloudJson)){const s=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});s.createEl(\"span\",{text:\"提交类型\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:t,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0,s.createEl(\"span\",{text:\"主题标识\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:this.themeObj.name,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0,s.createEl(\"span\",{text:\"主题版本\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:this.localJson.manifest.pluginVersion,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0}let s;0===this.type&&isPlugin(this.cloudJson)&&isPlugin(this.localJson)&&(s=comparePlugin(this.cloudJson,this.localJson)),1===this.type&&isTheme(this.cloudJson)&&isTheme(this.localJson)&&(s=compareTheme(this.cloudJson,this.localJson));const i=e.createEl(\"div\",{cls:[\"i18n-edit__dict\"]});if(s){const t=i.createEl(\"table\",{cls:[\"i18n-edit__table\"]});for(const e in s.modified){const i=diff2(s.modified[e].oldValue,s.modified[e].newValue),n=t.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns-added\"]});n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"修改\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-warning`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]}),n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=e,n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=i.s1,n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=i.s2}for(const e in s.added){const i=diff2(e,s.added[e]),n=t.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]});n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"新增\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-success`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]}),n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=i.s1,n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=i.s2}for(const e in s.removed){const i=diff2(e,s.removed[e]),n=t.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]});n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"删除\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-danger`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]}),n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=i.s1,n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=i.s2}for(const e in s.unchanged){const i=diff2(e,s.unchanged[e]),n=t.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]});n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"初始\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-info`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]}),n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=i.s1,n.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=i.s2}}const n=e.createEl(\"div\",{cls:[\"i18n-edit__search\"]}),a=new import_obsidian25.SearchComponent(n).onChange(t=>{});a.setClass(\"i18n-edit__search-box\"),a.inputEl.addClass(\"i18n-input\",\"i18n-edit__search-input\"),new import_obsidian25.ButtonComponent(n).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(t).onClick(()=>{new AgreementConfirmModal(this.app,this.i18n,async t=>{if(\"我已仔细检查译文\"===t){const t=await this.i18n.api.giteeGetAllIssue();let e;if(t.state&&(e=t.data.some(t=>t.title===`[${this.type}${this.submissionType}][${this.i18n.settings.I18N_LANGUAGE}][${0===this.type?this.pluginObj.id:this.themeObj.name}]`)),e)this.i18n.notice.result(\"共建云端\",!1,\"同一类型只能存在一个提交\");else{const t=await this.i18n.api.giteePostIssue(`[${this.type}${this.submissionType}][${this.i18n.settings.I18N_LANGUAGE}][${0===this.type?this.pluginObj.id:this.themeObj.name}]`,deflate(JSON.stringify(this.localJson)),\"\");(null==t?void 0:t.state)&&(this.i18n.settings.I18N_ADMIN_VERIFY&&this.i18n.settings.I18N_ADMIN_MODE?(this.i18n.issue=t.data,this.i18n.activateAdminView()):window.open(`https://gitee.com/zero--two/obsidian-i18n-translation/issues/${t.data.number}`),a.getValue()&&await this.i18n.api.giteePostIssueComments(t.data.number,a.getValue())),this.i18n.notice.result(\"共建云端\",!0)}}else this.i18n.notice.result(\"共建云端\",!1,'请输入 \"我已仔细检查译文\"')}).open()})}else e.createEl(\"h1\",{text:\"Oh~抱歉，您的数据走丢了\",cls:[\"i18n-empty\"]})}async onunload(){this.contentEl.empty()}getViewType(){return SHARE_VIEW_TYPE}getDisplayText(){return\"共建云端\"}getIcon(){return\"i18n_translate\"}getTypeName(){let t=\"\";switch(this.type){case 0:t=\"plugin\";break;case 1:t=\"theme\";break;default:t=\"未知类型\"}return t}getSubmissionTypeName(){let t=\"\";switch(this.submissionType){case 0:t=\"标记汉化\";break;case 1:t=`提交${0===this.type?\"插件\":\"主题\"}`;break;case 2:t=`更新${0===this.type?\"插件\":\"主题\"}`;break;default:t=\"未知提交类型\"}return t}},fs8=__toESM(require_lib()),path5=__toESM(require(\"path\")),import_obsidian26=require(\"obsidian\"),ADMIN_VIEW_TYPE=\"i18n-admin-view\",AdminView=class extends import_obsidian26.ItemView{constructor(t,e){if(super(t),this.updateTranslationObj=[],this.errorView=!1,this.i18n=e,this.i18n.notice.reload(),this.i18n.issue){this.issueJson=JSON.parse(inflate(this.i18n.issue.body));const[t,e,s]=parseIssueTitle(this.i18n.issue.title);this.id=s,this.language=e,this.type=t[0],this.submissionType=t[1]}else this.errorView=!0}async onload(){var t;const e=this.contentEl;if(e.addClass(\"i18n-review__container\"),null==(t=e.parentElement)||t.getElementsByClassName(\"view-header\")[0].remove(),this.errorView)e.createEl(\"h1\",{text:\"Oh~抱歉，您的数据走丢了\",cls:[\"i18n-empty\"]});else{if(\"0\"===this.type&&isPlugin(this.issueJson))if(\"0\"===this.submissionType);else if(\"1\"===this.submissionType){const t=(await this.i18n.api.giteeGetDirectoryAdmin(\"translation\",this.language)).data.find(t=>t.id===this.id);if(t)\"gitee\"===this.i18n.settings.I18N_NDT_URL?this.cloudJson=(await this.i18n.api.giteeGetTranslation(\"translation\",this.id,Object.keys(t.translations).slice(-1)[0])).data:\"github\"===this.i18n.settings.I18N_NDT_URL&&(this.cloudJson=(await this.i18n.api.githubGetTranslation(\"translation\",this.id,Object.keys(t.translations).slice(-1)[0])).data);else{const t={manifest:{translationVersion:0,pluginVersion:this.issueJson.manifest.pluginVersion},description:{original:this.issueJson.description.original,translation:this.issueJson.description.translation},dict:{}};this.cloudJson=t}}else\"2\"===this.submissionType&&(this.cloudJson=(await this.i18n.api.giteeGetTranslation(\"translation\",this.id,this.issueJson.manifest.pluginVersion)).data);if(\"1\"===this.type&&isTheme(this.issueJson))if(\"0\"===this.submissionType);else if(\"1\"===this.submissionType){const t=(await this.i18n.api.giteeGetDirectoryAdmin(\"theme\",this.language)).data.find(t=>t.id===this.id);if(t)\"gitee\"===this.i18n.settings.I18N_NDT_URL?this.cloudJson=(await this.i18n.api.giteeGetTranslation(\"theme\",this.id,Object.keys(t.translations).slice(-1)[0])).data:\"github\"===this.i18n.settings.I18N_NDT_URL&&(this.cloudJson=(await this.i18n.api.githubGetTranslation(\"theme\",this.id,Object.keys(t.translations).slice(-1)[0])).data);else{const t={manifest:{translationVersion:0,pluginVersion:this.issueJson.manifest.pluginVersion},dict:{}};this.cloudJson=t}}else\"2\"===this.submissionType&&(this.cloudJson=(await this.i18n.api.giteeGetTranslation(\"theme\",this.id,this.issueJson.manifest.pluginVersion)).data);let t;if(\"0\"===this.type&&isPlugin(this.issueJson)&&isPlugin(this.cloudJson)&&(t=comparePlugin(this.cloudJson,this.issueJson)),\"1\"===this.type&&isTheme(this.issueJson)&&isTheme(this.cloudJson)&&(t=compareTheme(this.cloudJson,this.issueJson)),\"0\"===this.type&&isPlugin(this.issueJson)&&isPlugin(this.cloudJson)){const t=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});t.createEl(\"span\",{text:\"译文作者\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.i18n.issue.user.name,cls:[\"i18n-input\",\"i18n-edit__plugin-version-input\"]}).disabled=!0,t.createEl(\"span\",{text:\"源代码\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.issueJson.description.original,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0;const s=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});s.createEl(\"span\",{text:\"插件标识\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:this.id,cls:\"i18n-edit__plugin-version-input\"}).disabled=!0,s.createEl(\"span\",{text:\"旧描述\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:this.cloudJson.description.translation,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0;const i=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});i.createEl(\"span\",{text:\"插件版本\",cls:\"i18n-edit__label-wrap\"}),i.createEl(\"input\",{value:this.issueJson.manifest.pluginVersion,cls:[\"i18n-input\",\"i18n-edit__plugin-version-input\"]}).disabled=!0,i.createEl(\"span\",{text:\"新描述\",cls:\"i18n-edit__label-wrap\"}),i.createEl(\"input\",{value:this.issueJson.description.translation,cls:[\"i18n-input\",\"i18n-edit__description-input\"]},t=>{t.addEventListener(\"input\",()=>{this.issueJson.description.translation=t.value})})}if(\"1\"===this.type&&isTheme(this.issueJson)&&isTheme(this.cloudJson)){const t=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});t.createEl(\"span\",{text:\"译文作者\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.i18n.issue.user.name,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0,t.createEl(\"span\",{text:\"主题标识\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.id,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0,t.createEl(\"span\",{text:\"主题版本\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.issueJson.manifest.pluginVersion,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0}const s=e.createEl(\"div\",{cls:[\"i18n-edit__dict\"]});if(t&&null!=this.issueJson&&void 0!==this.cloudJson){const e=s.createEl(\"table\",{cls:[\"i18n-edit__table\"]});for(const s in t.modified){const i=e.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns-added\"]}),n={type:\"modified\",key:s,value:t.modified[s].newValue,el:i,state:!0};this.updateTranslationObj.push(n);const a=diff2(n.key,n.value);i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"修改\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-warning`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]});const o=i.createEl(\"td\",{cls:[\"i18n-review__cell\"]});o.innerHTML=a.s1,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=t.modified[s].oldValue;const r=i.createEl(\"td\",{cls:[\"i18n-review__cell\"],attr:{contenteditable:\"true\"}});r.innerHTML=a.s2,r.addEventListener(\"input\",()=>{r.textContent&&(n.value=r.textContent);const t=diff2(n.key,n.value);o.innerHTML=t.s1}),r.addEventListener(\"blur\",()=>{const t=diff2(n.key,n.value);o.innerHTML=t.s1,r.innerHTML=t.s2}),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"button\",{text:n.state?\"否决\":\"批准\",cls:[\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"]},async t=>{t.addEventListener(\"click\",async()=>{t.removeClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),n.state=!n.state,t.addClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),t.textContent=n.state?\"否决\":\"批准\"})})}for(const s in t.added){const i=e.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]}),n={type:\"added\",key:s,value:t.added[s],el:i,state:!0};this.updateTranslationObj.push(n),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"新增\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-success`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]});const a=i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}),o=i.createEl(\"td\",{cls:[\"i18n-review__cell\"],attr:{contenteditable:\"true\"}});o.addEventListener(\"input\",()=>{o.textContent&&(n.value=o.textContent);const t=diff2(n.key,n.value);a.innerHTML=t.s1}),o.addEventListener(\"blur\",()=>{const t=diff2(n.key,n.value);a.innerHTML=t.s1,o.innerHTML=t.s2}),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"button\",{text:n.state?\"否决\":\"批准\",cls:[\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"]},async t=>{t.addEventListener(\"click\",async()=>{t.removeClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),n.state=!n.state,t.addClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),t.textContent=n.state?\"否决\":\"批准\"})});const r=diff2(n.key,n.value);a.innerHTML=r.s1,o.innerHTML=r.s2}for(const s in t.removed){const i=e.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]}),n={type:\"removed\",key:s,value:t.removed[s],el:i,state:!0};this.updateTranslationObj.push(n),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"删除\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-danger`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]});const a=i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}),o=i.createEl(\"td\",{cls:[\"i18n-review__cell\"]});i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"button\",{text:n.state?\"否决\":\"批准\",cls:[\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"]},async t=>{t.addEventListener(\"click\",async()=>{t.removeClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),n.state=!n.state,t.addClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),t.textContent=n.state?\"否决\":\"批准\"})});const r=diff2(n.key,n.value);a.innerHTML=r.s1,o.innerHTML=r.s2}for(const s in t.unchanged){const i=e.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]}),n={type:\"unchanged\",key:s,value:t.unchanged[s],el:i,state:!0};this.updateTranslationObj.push(n),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"初始\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-info`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]});const a=i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}),o=i.createEl(\"td\",{cls:[\"i18n-review__cell\"]});i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"button\",{text:n.state?\"否决\":\"批准\",cls:[\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"]},async t=>{t.addEventListener(\"click\",async()=>{t.removeClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),n.state=!n.state,t.addClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),t.textContent=n.state?\"否决\":\"批准\"})});const r=diff2(n.key,n.value);a.innerHTML=r.s1,o.innerHTML=r.s2}}const i=e.createEl(\"div\",{cls:[\"i18n-edit__search\"]});let n,a=0,o=!1,r=!1;const l=new import_obsidian26.SearchComponent(i).onChange(t=>{(n=r?this.updateTranslationObj.filter(e=>e.key.includes(t)||e.value.includes(t)):this.updateTranslationObj.filter(e=>e.key.toLowerCase().includes(t.toLowerCase())||e.value.toLowerCase().includes(t.toLowerCase()))).length>0&&\"\"!==t?(o=!0,_.setButtonText(`${a+1}/${n.length}`),n[a=0].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),n[a].el.classList.remove(\"animate\"),n[a].el.offsetWidth,n[a].el.classList.add(\"animate\")):(o=!1,_.setButtonText(\"0/0\"))});l.setClass(\"i18n-edit__search-box\"),l.inputEl.addClass(\"i18n-input\",\"i18n-edit__search-input\");const c=new import_obsidian26.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"a-large-small\").onClick(()=>{r?(r=!1,c.buttonEl.removeClass(\"i18n-button--success\"),c.setClass(\"i18n-button--primary\")):(r=!0,c.buttonEl.removeClass(\"i18n-button--primary\"),c.setClass(\"i18n-button--success\"))});new import_obsidian26.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"arrow-up\").onClick(()=>{o&&(a>0?a-=1:0==a&&(a=n.length-1),_.setButtonText(`${a+1}/${n.length}`),n[a].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),n[a].el.classList.remove(\"animate\"),n[a].el.offsetWidth,n[a].el.classList.add(\"animate\"))}),new import_obsidian26.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"arrow-down\").onClick(()=>{o&&(a<n.length-1?a+=1:a==n.length-1&&(a=0),_.setButtonText(`${a+1}/${n.length}`),n[a].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),n[a].el.classList.remove(\"animate\"),n[a].el.offsetWidth,n[a].el.classList.add(\"animate\"))});const _=new import_obsidian26.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"0/0\");new import_obsidian26.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"测试\").onClick(async()=>{const t=[...this.updateTranslationObj.filter(t=>\"unchanged\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),...this.updateTranslationObj.filter(t=>\"modified\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),...this.updateTranslationObj.filter(t=>\"added\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),...this.updateTranslationObj.filter(t=>\"removed\"===t.type&&!1===t.state).map(t=>[t.key,t.value])];this.issueJson.dict=Object.fromEntries(t);const e=path5.join(path5.normalize(this.app.vault.adapter.getBasePath()),\".obsidian\",\"0\"===this.type?\"plugins\":\"themes\",this.id);fs8.pathExistsSync(e)?(fs8.ensureDirSync(path5.join(e,\"lang\")),fs8.writeJSONSync(path5.join(e,\"lang\",`${this.language}.test.json`),this.issueJson,{spaces:4}),i18nOpen(this.i18n,path5.join(e,\"lang\")),this.i18n.notice.result(\"审核\",!0,\"下载成功\")):this.i18n.notice.result(\"审核\",!1,`请确保 ${\"0\"===this.type?\"插件\":\"主题\"} [${this.id}] 已经安装`)}),new import_obsidian26.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-danger`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"关闭\").onClick(async()=>{this.closeIssue()}),new import_obsidian26.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"合并\").onClick(async()=>{this.merge()})}}async onunload(){this.i18n.notice.reload(),this.contentEl.empty()}async closeIssue(){const t=await this.i18n.api.giteePatchIssue(this.i18n.issue.number,\"closed\");t.state?(this.i18n.notice.result(\"审核\",!0),this.i18n.issues=this.i18n.issues.filter(t=>t.number!==this.i18n.issue.number),this.i18n.admin.reloadShowData()):this.i18n.notice.result(\"审核\",!1,t.data)}async merge(){const t=this.updateTranslationObj.filter(t=>\"modified\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),e=this.updateTranslationObj.filter(t=>\"unchanged\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),s=this.updateTranslationObj.filter(t=>\"added\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),i=this.updateTranslationObj.filter(t=>\"removed\"===t.type&&!1===t.state).map(t=>[t.key,t.value]),n=this.updateTranslationObj.filter(t=>\"removed\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),a=[...e,...t,...s,...i];this.issueJson.manifest.translationVersion=Date.now(),this.issueJson.dict=Object.fromEntries(a);const o=\"0\"===this.type?\"translation\":\"theme\",r=await this.getContents(`${o}/directory/${this.language}.json`);if(!r.state)return void this.i18n.notice.result(\"Gitee\",!1,\"获取文件失败\");const l=await this.i18n.api.giteeUpdateFileContent(`${o}/directory/${this.language}.json`,this.updateDirectory(r.count),r.sha,`#${this.i18n.issue.number} - 第1步: 写入目录`);if(!l.state)return void this.i18n.notice.result(\"审核\",!1,`无法写入目录\\n${l.data}\\n请前往gitee手动还原后重试`);this.i18n.notice.result(\"审核\",!0,\"第1步: 写入目录\\n请耐心等待审核流程运行完毕\"),await sleep(1e3);const c=await this.getContents(`translation/contributor/${this.language}.json`);if(!c.state)return void this.i18n.notice.result(\"Gitee\",!1,\"获取文件失败\");const _=await this.i18n.api.giteeUpdateFileContent(`translation/contributor/${this.language}.json`,this.updateContributor(c.count,t,s,n),c.sha,`#${this.i18n.issue.number} - 第2步: 写入贡献`);if(!_.state)return void this.i18n.notice.result(\"审核\",!1,`无法写入贡献\\n${_.data}\\n请前往gitee手动还原后重试`);if(this.i18n.notice.result(\"审核\",!0,\"第2步: 写入目录\\n请耐心等待审核流程运行完毕\"),await sleep(1e3),\"1\"===this.submissionType){const t=await this.i18n.api.giteeCreateFileContent(`${o}/dict/${this.id}/${this.language}/${this.issueJson.manifest.pluginVersion}.json`,Buffer.from(JSON.stringify(this.issueJson,null,4)).toString(\"base64\"),`#${this.i18n.issue.number} - 第3步: 写入译文`);if(!t.state)return void this.i18n.notice.result(\"审核\",!1,`无法写入译文\\n${t.data}\\n请前往gitee手动还原后重试`);this.i18n.notice.result(\"审核\",!0,\"第3步: 写入译文\\n请耐心等待审核流程运行完毕\")}else if(\"2\"===this.submissionType){const t=await this.getContents(`${o}/dict/${this.id}/${this.language}/${this.issueJson.manifest.pluginVersion}.json`);if(!t.state)return void this.i18n.notice.result(\"Gitee\",!1,\"获取文件失败\");const e=await this.i18n.api.giteeUpdateFileContent(`${o}/dict/${this.id}/${this.language}/${this.issueJson.manifest.pluginVersion}.json`,Buffer.from(JSON.stringify(this.issueJson,null,4)).toString(\"base64\"),t.sha,`#${this.i18n.issue.number} - 第3步: 写入译文`);if(!e.state)return void this.i18n.notice.result(\"审核\",!1,`无法写入译文\\n${e.data}\\n请前往gitee手动还原后重试`);this.i18n.notice.result(\"审核\",!0,\"第3步: 写入译文\\n请耐心等待审核流程运行完毕\")}await sleep(1e3);const d=await this.i18n.api.giteePatchIssue(this.i18n.issue.number,\"closed\");d.state?(this.i18n.notice.result(\"审核\",!0,\"第4步: 关闭Issue\"),this.i18n.issues=this.i18n.issues.filter(t=>t.number!==this.i18n.issue.number),this.i18n.admin.reloadShowData()):this.i18n.notice.result(\"审核\",!1,`无法关闭Issue${d.data}\\n请前往gitee手动关闭`)}async getContents(t){const e=await this.i18n.api.giteeGetContents(t),s=e.state;let i=\"\",n=[];return s&&(i=e.data.sha,n=JSON.parse(Buffer.from(e.data.content,e.data.encoding).toString(\"utf8\"))),{state:s,count:n,sha:i}}updateDirectory(t){const e=t.find(t=>t.id===this.id),s={...(null==e?void 0:e.translations)||{},[this.issueJson.manifest.pluginVersion]:this.issueJson.manifest.translationVersion};return e?e.translations=s:t.push({id:this.id,translations:s}),Buffer.from(JSON.stringify(t,null,4)).toString(\"base64\")}updateContributor(t,e,s,i){const n=t.find(t=>t.login===this.i18n.issue.user.login);if(n)n.translation+=s.length,n.modification+=e.length,n.erasure+=i.length;else{const n={login:this.i18n.issue.user.login,name:this.i18n.issue.user.name,url:this.i18n.issue.user.html_url,translation:s.length,modification:e.length,erasure:i.length};t.push(n)}return Buffer.from(JSON.stringify(t,null,4)).toString(\"base64\")}getViewType(){return ADMIN_VIEW_TYPE}getDisplayText(){return\"审核面板\"}getIcon(){return\"i18n_translate\"}},fs9=__toESM(require_lib()),path6=__toESM(require(\"path\")),import_obsidian27=require(\"obsidian\"),DOWNLOAD_VIEW_TYPE=\"i18n-download-view\",DownloadView=class extends import_obsidian27.ItemView{constructor(t,e){super(t),this.updateTranslationObj=[],this.errorView=!1,this.i18n=e,this.i18n.notice.reload(),this.langDoc=this.i18n.downloadPath,this.localJson=this.i18n.downloadLocalJson,this.cloudJson=this.i18n.downloadCloudJson}async onload(){var t;const e=this.contentEl;if(e.addClass(\"i18n-review__container\"),null==(t=e.parentElement)||t.getElementsByClassName(\"view-header\")[0].remove(),this.errorView)e.createEl(\"h1\",{text:\"Oh~抱歉，您的数据走丢了\",cls:[\"i18n-empty\"]});else{let t;if(\"0\"===this.i18n.downloadType&&isPlugin(this.localJson)&&isPlugin(this.cloudJson)&&(t=comparePlugin(this.localJson,this.cloudJson)),\"1\"===this.i18n.downloadType&&isTheme(this.localJson)&&isTheme(this.cloudJson)&&(t=compareTheme(this.localJson,this.cloudJson)),\"0\"===this.i18n.downloadType&&isPlugin(this.localJson)&&isPlugin(this.cloudJson)){const t=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});t.createEl(\"span\",{text:\"译文版本\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.cloudJson.manifest.translationVersion.toString(),cls:[\"i18n-input\",\"i18n-edit__plugin-version-input\"]}).disabled=!0,t.createEl(\"span\",{text:\"源代码\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.cloudJson.description.original,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0;const s=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});s.createEl(\"span\",{text:\"插件版本\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:this.cloudJson.manifest.pluginVersion,cls:\"i18n-edit__plugin-version-input\"}).disabled=!0,s.createEl(\"span\",{text:\"新描述\",cls:\"i18n-edit__label-wrap\"}),s.createEl(\"input\",{value:this.cloudJson.description.translation,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0}if(\"1\"===this.i18n.downloadType&&isTheme(this.localJson)&&isTheme(this.cloudJson)){const t=e.createEl(\"div\",{cls:[\"i18n-edit__manifest\"]});t.createEl(\"span\",{text:\"译文版本\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.cloudJson.manifest.translationVersion.toString(),cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0,t.createEl(\"span\",{text:\"主题版本\",cls:\"i18n-edit__label-wrap\"}),t.createEl(\"input\",{value:this.cloudJson.manifest.pluginVersion,cls:[\"i18n-input\",\"i18n-edit__description-input\"]}).disabled=!0}const s=e.createEl(\"div\",{cls:[\"i18n-edit__dict\"]});if(t&&null!=this.localJson&&void 0!==this.cloudJson){const e=s.createEl(\"table\",{cls:[\"i18n-edit__table\"]});for(const s in t.modified){const i=e.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns-added\"]}),n={type:\"modified\",key:s,value:t.modified[s].newValue,el:i,state:!0};this.updateTranslationObj.push(n);const a=diff2(n.key,n.value);i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"修改\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-warning`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]}),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=a.s1,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=t.modified[s].oldValue,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=a.s2,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"button\",{text:n.state?\"禁止下载\":\"允许下载\",cls:[\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"]},async t=>{t.addEventListener(\"click\",async()=>{t.removeClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),n.state=!n.state,t.addClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),t.textContent=n.state?\"禁止下载\":\"允许下载\"})})}for(const s in t.added){const i=e.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]}),n={type:\"added\",key:s,value:t.added[s],el:i,state:!0};this.updateTranslationObj.push(n);const a=diff2(n.key,n.value);i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"新增\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-success`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]}),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=a.s1,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=a.s2,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"button\",{text:n.state?\"禁止下载\":\"允许下载\",cls:[\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"]},async t=>{t.addEventListener(\"click\",async()=>{t.removeClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),n.state=!n.state,t.addClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),t.textContent=n.state?\"禁止下载\":\"允许下载\"})})}for(const s in t.removed){const i=e.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]}),n={type:\"removed\",key:s,value:t.removed[s],el:i,state:!0};this.updateTranslationObj.push(n);const a=diff2(n.key,n.value);i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"删除\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-danger`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]}),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=a.s1,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=a.s2,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"button\",{text:n.state?\"禁止下载\":\"允许下载\",cls:[\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"]},async t=>{t.addEventListener(\"click\",async()=>{t.removeClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),n.state=!n.state,t.addClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),t.textContent=n.state?\"禁止下载\":\"允许下载\"})})}for(const s in t.unchanged){const i=e.createEl(\"tr\",{cls:[\"i18n-review__row\",\"i18n-review__row-columns\"]}),n={type:\"unchanged\",key:s,value:t.unchanged[s],el:i,state:!0};this.updateTranslationObj.push(n);const a=diff2(n.key,n.value);i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"span\",{text:\"初始\",cls:[\"i18n-tag\",`i18n-tag--${this.i18n.settings.I18N_TAG_TYPE}-info`,`is-${this.i18n.settings.I18N_TAG_SHAPE}`]}),i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=a.s1,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).innerHTML=a.s2,i.createEl(\"td\",{cls:[\"i18n-review__cell\"]}).createEl(\"button\",{text:n.state?\"禁止下载\":\"允许下载\",cls:[\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"]},async t=>{t.addEventListener(\"click\",async()=>{t.removeClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),n.state=!n.state,t.addClass(\"i18n-basic-button\",n.state?\"i18n-basic-button--danger\":\"i18n-basic-button--success\"),t.textContent=n.state?\"禁止下载\":\"允许下载\"})})}}const i=e.createEl(\"div\",{cls:[\"i18n-edit__search\"]});let n,a=0,o=!1,r=!1;const l=new import_obsidian27.SearchComponent(i).onChange(t=>{(n=r?this.updateTranslationObj.filter(e=>e.key.includes(t)||e.value.includes(t)):this.updateTranslationObj.filter(e=>e.key.toLowerCase().includes(t.toLowerCase())||e.value.toLowerCase().includes(t.toLowerCase()))).length>0&&\"\"!==t?(o=!0,_.setButtonText(`${a+1}/${n.length}`),n[a=0].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),n[a].el.classList.remove(\"animate\"),n[a].el.offsetWidth,n[a].el.classList.add(\"animate\")):(o=!1,_.setButtonText(\"0/0\"))});l.setClass(\"i18n-edit__search-box\"),l.inputEl.addClass(\"i18n-input\",\"i18n-edit__search-input\");const c=new import_obsidian27.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"a-large-small\").onClick(()=>{r?(r=!1,c.buttonEl.removeClass(\"i18n-button--success\"),c.setClass(\"i18n-button--primary\")):(r=!0,c.buttonEl.removeClass(\"i18n-button--primary\"),c.setClass(\"i18n-button--success\"))});new import_obsidian27.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"arrow-up\").onClick(()=>{o&&(a>0?a-=1:0==a&&(a=n.length-1),_.setButtonText(`${a+1}/${n.length}`),n[a].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),n[a].el.classList.remove(\"animate\"),n[a].el.offsetWidth,n[a].el.classList.add(\"animate\"))}),new import_obsidian27.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setIcon(\"arrow-down\").onClick(()=>{o&&(a<n.length-1?a+=1:a==n.length-1&&(a=0),_.setButtonText(`${a+1}/${n.length}`),n[a].el.scrollIntoView({behavior:\"auto\",block:\"center\"}),n[a].el.classList.remove(\"animate\"),n[a].el.offsetWidth,n[a].el.classList.add(\"animate\"))});const _=new import_obsidian27.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-primary`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"0/0\");new import_obsidian27.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-danger`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"译文失效\").onClick(async()=>{this.i18n.notice.result(\"下载视图\",!0,\"敬请期待\")}),new import_obsidian27.ButtonComponent(i).setClass(\"i18n-button\").setClass(`i18n-button--${this.i18n.settings.I18N_BUTTON_TYPE}-success`).setClass(`is-${this.i18n.settings.I18N_BUTTON_SHAPE}`).setClass(\"i18n-button--left\").setButtonText(\"保存\").onClick(async()=>{const t=[...this.updateTranslationObj.filter(t=>\"unchanged\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),...this.updateTranslationObj.filter(t=>\"modified\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),...this.updateTranslationObj.filter(t=>\"added\"===t.type&&!0===t.state).map(t=>[t.key,t.value]),...this.updateTranslationObj.filter(t=>\"removed\"===t.type&&!1===t.state).map(t=>[t.key,t.value])];this.cloudJson.dict=Object.fromEntries(t),fs9.ensureDirSync(this.langDoc),fs9.writeJSONSync(path6.join(this.langDoc,`${this.i18n.settings.I18N_LANGUAGE}.json`),this.cloudJson,{spaces:4}),await this.i18n.downloadView.reloadShowData(),this.i18n.notice.result(\"下载\",!0,\"下载成功\")})}}async onunload(){this.i18n.notice.reload(),this.contentEl.empty()}getViewType(){return DOWNLOAD_VIEW_TYPE}getDisplayText(){return\"下载视图\"}getIcon(){return\"i18n_translate\"}},I18N=class extends import_obsidian28.Plugin{constructor(){super(...arguments),this.updatesMark=!1,this.ignoreMark=!0,this.editorType=\"\",this.editorPath=\"\"}async onload(){const e=Date.now();icon_default(),this.notice=new Notification(this.app,this),await this.loadSettings(),console.log(`%c ${this.manifest.name} %c v${this.manifest.version} `,\"padding: 2px; border-radius: 2px 0 0 2px; color: #fff; background: #5B5B5B;\",\"padding: 2px; border-radius: 0 2px 2px 0; color: #fff; background: #409EFF;\"),this.settings.I18N_AGREEMENT?(this.api=new API(this),this.tapi=new TranslationAPI(this),this.firstRun(),this.settings.I18N_CHECK_UPDATES&&this.checkUpdates(),this.ignoreCache(),this.pliginDirectoryCache(),this.themeDirectoryCache(),this.settings.I18N_MODE_LDT&&this.settings.I18N_AUTOMATIC_UPDATE&&await this.i18nAutomaticUpdate(this.app),this.settings.I18N_MODE_IMT&&this.activateIMT(),this.addRibbonIcon(\"i18n_translate\",t(\"通用_I18N_文本\"),()=>{0===this.settings.I18N_MODE?(this.pluginModal=new I18NPluginModal(this.app,this),this.pluginModal.open()):1===this.settings.I18N_MODE&&(this.themeModal=new I18NThemeModal(this.app,this),this.themeModal.open())}),this.settings.I18N_ADMIN_VERIFY&&this.settings.I18N_ADMIN_MODE&&(this.i18nReviewEl=this.addRibbonIcon(\"i18n-review\",\"I18N审核\",t=>{this.admin=new AdminModal(this.app,this),this.admin.open()})),this.registerView(ADMIN_VIEW_TYPE,t=>new AdminView(t,this)),this.registerView(EDIT_VIEW_TYPE,t=>new EditorView(t,this)),this.registerView(SHARE_VIEW_TYPE,t=>new ShareView(t,this)),this.registerView(DOWNLOAD_VIEW_TYPE,t=>new DownloadView(t,this)),command_default(this.app,this),this.settings.I18N_MODE_LDT&&this.settings.I18N_NAME_TRANSLATION&&this.trenslatorPluginsName(),this.addSettingTab(new I18nSettingTab(this.app,this))):new AgreementModal(this.app,this).open();const s=Date.now();this.settings.I18N_START_TIME&&this.notice.success(t(\"设置_基础_启动耗时_标题\"),`${((s-e)/1e3).toFixed(5)}s`)}async onunload(){this.detachAdminView(),this.detachEditorView(),this.detachShareView(),this.detachDownloadView(),this.restorePluginsName(),this.settings.I18N_MODE_IMT&&await this.enableIMT()}onUserEnable(){}async loadSettings(){this.settings=Object.assign({},DEFAULT_SETTINGS,await this.loadData())}async saveSettings(){await this.saveData(this.settings)}async firstRun(){this.settings.I18N_WIZARD&&(new WizardModal(this.app,this).open(),this.settings.I18N_UUID=v4_default(),this.settings.I18N_WIZARD=!1,this.saveSettings())}async checkUpdates(){const e=await this.api.version();e.state?this.manifest.version!==e.data.version&&(this.notice.primary(t(\"功能_检查更新_前缀\"),`${t(\"功能_检查更新_通知一\")}(${e.data.version})\\n${e.data.content}`,1e4),this.updatesMark=!0,this.updatesVersion=e.data.version):this.notice.result(t(\"功能_检查更新_前缀\"),!1,e.data)}async ignoreCache(){if(!this.settings.I18N_MODE_NDT||!this.settings.I18N_IGNORE)return void(this.ignoreMark=!1);const e=await this.api.getMark();if(!e.state)return this.ignoreMark=!1,void this.notice.result(t(\"设置_云端_标记汉化_标题\"),!1,t(\"设置_云端_通知一\"));try{this.ignorePlugins=e.data,this.ignoreMark=!0,this.settings.I18N_NOTICE&&this.notice.result(t(\"设置_云端_标记汉化_标题\"),!0)}catch(e){this.ignoreMark=!1,this.notice.result(t(\"设置_云端_标记汉化_标题\"),!1,e)}}async pliginDirectoryCache(){if(!this.settings.I18N_MODE_NDT)return void(this.pluginDirectoryMark=!1);const e=await this.api.giteeGetDirectory(\"translation\");if(!e.state)return this.pluginDirectoryMark=!1,void this.notice.result(t(\"设置_云端_标题_缩写\"),!1,t(\"设置_云端_通知一\"));try{this.pluginDirectory=e.data,this.pluginDirectoryMark=!0,this.settings.I18N_NOTICE&&this.notice.result(t(\"设置_云端_标题_缩写\"),!0,t(\"设置_云端_通知三\"))}catch(e){this.pluginDirectoryMark=!1,this.notice.result(t(\"设置_云端_标题_缩写\"),!1,e)}}async themeDirectoryCache(){if(!this.settings.I18N_MODE_NDT)return void(this.themeDirectoryMark=!1);const e=await this.api.giteeGetDirectory(\"theme\");if(!e.state)return this.themeDirectoryMark=!1,void this.notice.result(t(\"设置_云端_标题_缩写\"),!1,t(\"设置_云端_通知一\"));try{this.themeDirectory=e.data,this.themeDirectoryMark=!0,this.settings.I18N_NOTICE&&this.notice.result(t(\"设置_云端_标题_缩写\"),!0,t(\"设置_云端_通知二\"))}catch(e){this.themeDirectoryMark=!1,this.notice.result(t(\"设置_云端_标题_缩写\"),!1,e)}}async i18nAutomaticUpdate(e){var s;if(this.settings.I18N_MODE_LDT&&this.settings.I18N_AUTOMATIC_UPDATE){let i=[];this.settings.I18N_NOTICE&&this.notice.success(t(\"设置_本地_智能更新_标题\"),t(\"设置_本地_智能更新_通知一\")),i=Object.values(e.plugins.manifests).filter(t=>\"i18n\"!==t.id);let n=0;for(const a of i){const i=path7.join(path7.normalize(e.vault.adapter.getBasePath()),null!=(s=a.dir)?s:\"\"),o=fs10.pathExistsSync(path7.join(i,\"lang\",\"state.json\"))?new State(this,path7.join(i,\"lang\",\"state.json\")):void 0;if(null!=o&&o.getState()&&a.version!=o.getPluginVersion())try{n+=1,fs10.removeSync(path7.join(i,\"duplicate.js\")),o.reset(),fs10.copySync(path7.join(i,\"main.js\"),path7.join(i,\"duplicate.js\"));const e=fs10.readJsonSync(path7.join(i,\"lang\",`${this.settings.I18N_LANGUAGE}.json`));let s=fs10.readFileSync(path7.join(i,\"main.js\")).toString();for(const t in e.dict)s=s.replaceAll(t,e.dict[t]);fs10.writeFileSync(path7.join(i,\"main.js\"),s);const r=fs10.readJsonSync(path7.join(i,\"manifest.json\"));r.description=e.description.translation,fs10.writeJsonSync(path7.join(i,\"manifest.json\"),r,{spaces:4}),o.setState(!0),o.setPluginVersion(a.version),o.setTranslationVersion(e.manifest.translationVersion),await this.app.plugins.disablePlugin(a.id),await this.app.plugins.enablePlugin(a.id)}catch(e){this.notice.error(t(\"设置_本地_智能更新_标题\"),e)}}this.settings.I18N_NOTICE&&(0==n?this.notice.success(t(\"设置_本地_智能更新_标题\"),t(\"设置_本地_智能更新_通知二\")):this.notice.success(t(\"设置_本地_智能更新_标题\"),`${t(\"设置_本地_智能更新_通知三\")}${n}${t(\"设置_本地_智能更新_通知四\")}`))}}trenslatorPluginsName(){const t=path7.join(path7.normalize(this.app.vault.adapter.getBasePath()),this.manifest.dir,\"name.json\");this.nameTranslationJSON=fs10.pathExistsSync(t)?fs10.readJsonSync(t):{},this.nameTranslationJSON=Object.keys(this.nameTranslationJSON).sort().reduce((t,e)=>(t[e]=this.nameTranslationJSON[e],t),{});const e=Object.values(this.app.plugins.manifests);this.originalPluginsManifests=JSON.parse(JSON.stringify(e)),e.forEach(t=>{this.nameTranslationJSON.hasOwnProperty(t.name)&&\"\"!==this.nameTranslationJSON[t.name]&&(t.name=`${t.name} ${this.settings.I18N_NAME_TRANSLATION_PREFIX}${this.nameTranslationJSON[t.name]}${this.settings.I18N_NAME_TRANSLATION_SUFFIX}`)})}restorePluginsName(){if(void 0!==this.originalPluginsManifests){const t=new Map(this.originalPluginsManifests.map(t=>[t.id,t]));Object.values(this.app.plugins.manifests).forEach(e=>{const s=t.get(e.id);s&&(e.name=s.name)})}}reloadPluginsName(){this.restorePluginsName(),this.trenslatorPluginsName()}async activateEditorView(){const{workspace:t}=this.app;this.detachEditorView();let e=null;const s=t.getLeavesOfType(EDIT_VIEW_TYPE);s.length>0?e=s[0]:null!=(e=t.getLeaf(\"window\"))&&await e.setViewState({type:EDIT_VIEW_TYPE,active:!0}),null!=e&&t.revealLeaf(e)}detachEditorView(){this.app.workspace.detachLeavesOfType(EDIT_VIEW_TYPE)}async activateAdminView(){const{workspace:t}=this.app;this.detachAdminView();let e=null;const s=t.getLeavesOfType(ADMIN_VIEW_TYPE);s.length>0?e=s[0]:null!=(e=t.getLeaf(\"window\"))&&await e.setViewState({type:ADMIN_VIEW_TYPE,active:!0}),null!=e&&t.revealLeaf(e)}detachAdminView(){this.app.workspace.detachLeavesOfType(ADMIN_VIEW_TYPE)}async activateShareView(){const{workspace:t}=this.app;this.detachShareView();let e=null;const s=t.getLeavesOfType(SHARE_VIEW_TYPE);s.length>0?e=s[0]:null!=(e=t.getLeaf(\"window\"))&&await e.setViewState({type:SHARE_VIEW_TYPE,active:!0}),null!=e&&t.revealLeaf(e)}detachShareView(){this.app.workspace.detachLeavesOfType(SHARE_VIEW_TYPE)}async activateDownloadView(){const{workspace:t}=this.app;this.detachDownloadView();let e=null;const s=t.getLeavesOfType(DOWNLOAD_VIEW_TYPE);s.length>0?e=s[0]:null!=(e=t.getLeaf(\"window\"))&&await e.setViewState({type:DOWNLOAD_VIEW_TYPE,active:!0}),null!=e&&t.revealLeaf(e)}detachDownloadView(){this.app.workspace.detachLeavesOfType(DOWNLOAD_VIEW_TYPE)}activateIMT(){if(!window.immersiveTranslateConfig){window.immersiveTranslateConfig={pageRule:this.settings.I18N_IMT_CONFIG},console.log(window.immersiveTranslateConfig);const t=document.createElement(\"script\");t.classList.add(\"imt-script\"),t.async=!0,t.src=Url.SDK_URL,t.onload=(()=>{setTimeout(()=>{var t;const e=null==(t=document.querySelector(\"#immersive-translate-popup\"))?void 0:t.shadowRoot;if(e){const t=e.querySelector(\".imt-fb-container>div\");t&&(t.style.display=\"none\");const s=e.querySelector(\".popup-container>footer\");s&&(s.style.display=\"none\")}},1e3)}),document.body.append(t)}}async enableIMT(){var t,e;const s=document.querySelector(\"#immersive-translate-popup\"),i=document.querySelector(\"html\");\"dual\"===(null==(t=null==i?void 0:i.getAttribute)?void 0:t.call(i,\"imt-state\"))&&restoreTranslate();const n=document.querySelector(\".imt-script\"),a=[...document.querySelectorAll('[data-id*=\"immersive-translate\"]')],o=[];[s,n,a].filter(t=>!!t).forEach(t=>Array.isArray(t)?t.forEach(t=>t&&o.push(t)):t&&o.push(t)),o.forEach(t=>{var e;return null==(e=null==t?void 0:t.remove)?void 0:e.call(t)}),null==(e=document.querySelectorAll(\"[data-immersive-translate-walked]\"))||e.forEach(t=>t.removeAttribute(\"data-immersive-translate-walked\")),null==i||i.removeAttribute(\"imt-state\"),null==i||i.removeAttribute(\"imt-trans-position\"),await clearStorage()}async getAdmin(){const t=await this.api.giteeGetAllIssue();t.state?t.data.length>0?(this.issues=t.data,this.notice.result(\"获取\",!0,`${this.issues.length}条待审核内容`)):this.notice.result(\"获取\",!0,\"暂时没有可审核任务\"):this.notice.result(\"获取\",!1,\"获取失败,请检查网络后重试\")}editorLoad(t,e,s){this.editorType=t,this.editorPath=e,this.editorState=s,this.activateEditorView()}shareLoad(t,e,s){this.shareType=t,this.sharePath=e,this.shareObj=s,this.activateShareView()}},main_default=I18N;"
  },
  {
    "path": ".obsidian/plugins/i18n/manifest.json",
    "content": "{\"id\":\"i18n\",\"name\":\"I18N\",\"version\":\"1.6.2\",\"minAppVersion\":\"1.5.8\",\"description\":\"专为Obsidian打造的插件国际化工具，助力用户轻松跨越语言障碍，实现插件界面的无缝汉化。\",\"author\":\"zero\",\"authorUrl\":\"https://github.com/0011000000110010/\",\"isDesktopOnly\":true}"
  },
  {
    "path": ".obsidian/plugins/i18n/styles.css",
    "content": ":root {\n    --i18n-color-primary: #409EFF;\n    --i18n-color-success: #67C23A;\n    --i18n-color-warning: #E6A23C;\n    --i18n-color-danger: #F56C6C;\n    --i18n-color-info: #909399;\n    --i18n-color-white: #FFF;\n\n    --i18n-border-radius: 4px;\n    --el-font-size-base: 14px;\n    --i18n-button-font-weight: 500px;\n    --i18n-tag-font-size: 10px;\n    --i18n-tag-border-radius: 3px;\n    --i18n-tag-border-radius-rounded: 9999px;\n}\n\nbody {\n    /* 3 5 7 8 9 */\n    --i18n-color-primary-1: #79BBFF;\n    --i18n-color-primary-2: #A0CFFF;\n    --i18n-color-primary-3: #C6E2FF;\n    --i18n-color-primary-4: #D9ECFF;\n    --i18n-color-primary-5: #ECF5FF;\n    --i18n-color-primary-dark: #66B1FF;\n    --i18n-color-success-1: #95D475;\n    --i18n-color-success-2: #B3E19D;\n    --i18n-color-success-3: #D1EDC4;\n    --i18n-color-success-4: #E1F3D8;\n    --i18n-color-success-5: #F0F9EB;\n    --i18n-color-success-dark: #85CE61;\n    --i18n-color-warning-1: #EEBE77;\n    --i18n-color-warning-2: #F3D19E;\n    --i18n-color-warning-3: #F8E3C5;\n    --i18n-color-warning-4: #FAECD8;\n    --i18n-color-warning-5: #FDF6EC;\n    --i18n-color-warning-dark: #EBB563;\n    --i18n-color-danger-1: #F89898;\n    --i18n-color-danger-2: #FAB6B6;\n    --i18n-color-danger-3: #FCD3D3;\n    --i18n-color-danger-4: #FDE2E2;\n    --i18n-color-danger-5: #FEF0F0;\n    --i18n-color-danger-dark: #F78989;\n    --i18n-color-info-1: #B1B3B8;\n    --i18n-color-info-2: #C8C9CC;\n    --i18n-color-info-3: #DEDFE0;\n    --i18n-color-info-4: #E9E9EB;\n    --i18n-color-info-5: #F4F4F5;\n    --i18n-color-info-dark: #A6A9AD;\n\n    --i18n-font-ui-medium: 15px;\n\n    --i18n-background-modifier-hover: #EEE;\n    --i18n-edit-selected: #d3d3d3;\n    --i18n-edit-border-color: #E6E6E6;\n    --i18n-edit-selected-input: #409EFF;\n    --i18n-contrast-highlight-a: #FFE9E9;\n    --i18n-contrast-highlight-b: #DDEEFF;\n}\n\nbody.theme-dark {\n    --i18n-color-primary-1: #3375B9;\n    --i18n-color-primary-2: #2A598A;\n    --i18n-color-primary-3: #213D5B;\n    --i18n-color-primary-4: #1D3043;\n    --i18n-color-primary-5: #18222C;\n    --i18n-color-primary-dark: #337ECC;\n    --i18n-color-success-1: #4E8E2F;\n    --i18n-color-success-2: #3E6B27;\n    --i18n-color-success-3: #2D481F;\n    --i18n-color-success-4: #25371C;\n    --i18n-color-success-5: #1C2518;\n    --i18n-color-success-dark: #529B2E;\n    --i18n-color-warning-1: #A77730;\n    --i18n-color-warning-2: #7D5B28;\n    --i18n-color-warning-3: #533F20;\n    --i18n-color-warning-4: #3E301C;\n    --i18n-color-warning-5: #292218;\n    --i18n-color-warning-dark: #B88230;\n    --i18n-color-danger-1: #B25252;\n    --i18n-color-danger-2: #854040;\n    --i18n-color-danger-3: #582E2E;\n    --i18n-color-danger-4: #412626;\n    --i18n-color-danger-5: #2B1D1D;\n    --i18n-color-danger-dark: #C45656;\n    --i18n-color-info-1: #6B6D71;\n    --i18n-color-info-2: #525457;\n    --i18n-color-info-3: #393A3C;\n    --i18n-color-info-4: #2D2D2F;\n    --i18n-color-info-5: #202121;\n    --i18n-color-info-dark: #73767A;\n\n    --i18n-background-modifier-hover: #323232;\n    --i18n-edit-selected: #373E48;\n    --i18n-edit-border-color: #363636;\n    --i18n-edit-selected-input: #409EFF;\n    --i18n-contrast-highlight-a: #F56C6C;\n    --i18n-contrast-highlight-b: #409EFF;\n}\n\n.setting-item-info {\n    justify-content: center;\n    /* 水平居中 */\n    align-items: center;\n    /* 垂直居中 */\n}\n\n.i18n--hidden {\n    display: none;\n}\n\n.i18n--none {}\n\n.i18n_bold {\n    font-weight: bold;\n}\n\n.i18n-empty {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    flex-grow: 1;\n    width: 100%;\n    height: 100%;\n    border: none;\n}\n\n/* 动画 模块\n---------------------------------------------------------------- */\n@keyframes moveAndFade {\n\n    0%,\n    100% {\n        background-color: transparent;\n        transition: background-color 1s ease-in-out;\n    }\n\n    50% {\n        background-color: var(--i18n-color-primary-2);\n    }\n}\n\n.animate {\n    animation: moveAndFade 1s forwards;\n}\n\n/* 通用 component(组件) 模块\n---------------------------------------------------------------- */\n/* 简单的工具提示样式 */\n.i18n-tooltip {\n    position: absolute;\n    background-color: #333;\n    color: #fff;\n    padding: 5px;\n    border-radius: var(--i18n-border-radius);\n    display: none;\n    z-index: 1000;\n}\n\n.i18n-checkbox.is-enabled {\n    background-color: var(--i18n-color-primary);\n}\n\n.i18n-input {\n    width: auto;\n    min-width: 0px;\n}\n\n/* [通用] Button (按钮)\n---------------------------------------------------------------- */\n.i18n-button {\n    align-items: center;\n    line-height: 1;\n    height: 30px;\n    white-space: nowrap;\n    cursor: pointer;\n    color: var(--i18n-button-text-color);\n    text-align: center;\n    box-sizing: border-box;\n    outline: none;\n    transition: .1s;\n    font-weight: var(--i18n-button-font-weight);\n    -webkit-user-select: none;\n    user-select: none;\n    vertical-align: middle;\n    border-radius: var(--i18n-border-radius);\n}\n\nbutton:not(.clickable-icon).i18n-button {\n    box-shadow: none;\n    color: var(--i18n-button-text-color);\n    background-color: var(--i18n-button-bg-color);\n    border: 1px solid var(--i18n-button-border-color);\n}\n\nbutton:not(.clickable-icon).i18n-button:hover {\n    color: var(--i18n-button-hover-text-color);\n    background-color: var(--i18n-button-hover-bg-color);\n    border-color: var(--i18n-button-hover-border-color);\n}\n\n.i18n-button.i18n-button--default-primary {\n    --i18n-button-text-color: var(--i18n-color-white);\n    --i18n-button-bg-color: var(--i18n-color-primary);\n    --i18n-button-border-color: var(--i18n-color-primary);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-primary-1);\n    --i18n-button-hover-border-color: var(--i18n-color-primary-1);\n}\n\n.i18n-button.i18n-button--default-success {\n    --i18n-button-text-color: var(--i18n-color-white);\n    --i18n-button-bg-color: var(--i18n-color-success);\n    --i18n-button-border-color: var(--i18n-color-success);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-success-1);\n    --i18n-button-hover-border-color: var(--i18n-color-success-1);\n}\n\n.i18n-button.i18n-button--default-warning {\n    --i18n-button-text-color: var(--i18n-color-white);\n    --i18n-button-bg-color: var(--i18n-color-warning);\n    --i18n-button-border-color: var(--i18n-color-warning);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-warning-1);\n    --i18n-button-hover-border-color: var(--i18n-color-warning-1);\n}\n\n.i18n-button.i18n-button--default-danger {\n    --i18n-button-text-color: var(--i18n-color-white);\n    --i18n-button-bg-color: var(--i18n-color-danger);\n    --i18n-button-border-color: var(--i18n-color-danger);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-danger-1);\n    --i18n-button-hover-border-color: var(--i18n-color-danger-1);\n}\n\n.i18n-button.i18n-button--default-info {\n    --i18n-button-text-color: var(--i18n-color-white);\n    --i18n-button-bg-color: var(--i18n-color-info);\n    --i18n-button-border-color: var(--i18n-color-info);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-info-1);\n    --i18n-button-hover-border-color: var(--i18n-color-info-1);\n}\n\n.i18n-button.i18n-button--plain-primary {\n    --i18n-button-text-color: var(--i18n-color-primary);\n    --i18n-button-bg-color: var(--i18n-color-primary-5);\n    --i18n-button-border-color: var(--i18n-color-primary-2);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-primary);\n    --i18n-button-hover-border-color: var(--i18n-color-primary);\n}\n\n.i18n-button.i18n-button--plain-success {\n    --i18n-button-text-color: var(--i18n-color-success);\n    --i18n-button-bg-color: var(--i18n-color-success-5);\n    --i18n-button-border-color: var(--i18n-color-success-2);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-success);\n    --i18n-button-hover-border-color: var(--i18n-color-success);\n}\n\n.i18n-button.i18n-button--plain-warning {\n    --i18n-button-text-color: var(--i18n-color-warning);\n    --i18n-button-bg-color: var(--i18n-color-warning-5);\n    --i18n-button-border-color: var(--i18n-color-warning-2);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-warning);\n    --i18n-button-hover-border-color: var(--i18n-color-warning);\n}\n\n.i18n-button.i18n-button--plain-danger {\n    --i18n-button-text-color: var(--i18n-color-danger);\n    --i18n-button-bg-color: var(--i18n-color-danger-5);\n    --i18n-button-border-color: var(--i18n-color-danger-2);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-danger);\n    --i18n-button-hover-border-color: var(--i18n-color-danger);\n}\n\n.i18n-button.i18n-button--plain-info {\n    --i18n-button-text-color: var(--i18n-color-info);\n    --i18n-button-bg-color: var(--i18n-color-info-5);\n    --i18n-button-border-color: var(--i18n-color-info-2);\n    --i18n-button-hover-text-color: var(--i18n-color-white);\n    --i18n-button-hover-bg-color: var(--i18n-color-info);\n    --i18n-button-hover-border-color: var(--i18n-color-info);\n}\n\n.i18n-button.is-round {\n    border-radius: 20px;\n}\n\n.i18n-button.is-square {\n    border-radius: var(--i18n-tag-border-radius);\n}\n\n.i18n-button.i18n-button--text-primary {\n    --i18n-button-text-color: var(--i18n-color-primary);\n    --i18n-button-bg-color: transparent;\n    --i18n-button-border-color: transparent;\n    --i18n-button-hover-text-color: var(--i18n-color-primary-1);\n    --i18n-button-hover-bg-color: transparent;\n    --i18n-button-hover-border-color: transparent;\n}\n\n.i18n-button.i18n-button--left {\n    margin-left: 10px;\n}\n\n.i18n-button.i18n-button--right {\n    margin-right: 10px;\n}\n\n/* [通用] Basic Button (基础按钮)\n---------------------------------------------------------------- */\n.i18n-basic-button {\n    display: inline-flex;\n    justify-content: center;\n    align-items: center;\n    line-height: 1;\n    height: 24px;\n    width: 40px;\n    white-space: nowrap;\n    cursor: pointer;\n    text-align: center;\n    box-sizing: border-box;\n    outline: none;\n    transition: .1s;\n    font-weight: var(--i18n-button-font-weight);\n    -webkit-user-select: none;\n    user-select: none;\n    vertical-align: middle;\n    /* -webkit-appearance: none; */\n    border-radius: var(--i18n-border-radius);\n}\n\nbutton:not(.clickable-icon).i18n-basic-button {\n    box-shadow: none;\n    color: var(--i18n-button-text-color);\n    background-color: transparent;\n    border: 0 solid transparent;\n}\n\n/* button:not(.clickable-icon).i18n-basic-button:hover {\n    color: var(--i18n-button-hover-text-color);\n    background-color: var(--i18n-button-hover-bg-color);\n    border-color: var(--i18n-button-hover-border-color);\n} */\n\n.i18n-basic-button.i18n-basic-button--primary {\n    --i18n-button-text-color: var(--i18n-color-primary);\n}\n\n.i18n-basic-button.i18n-basic-button--success {\n    --i18n-button-text-color: var(--i18n-color-success);\n}\n\n.i18n-basic-button.i18n-basic-button--warning {\n    --i18n-button-text-color: var(--i18n-color-warning);\n}\n\n.i18n-basic-button.i18n-basic-button--danger {\n    --i18n-button-text-color: var(--i18n-color-danger);\n}\n\n.i18n-basic-button.i18n-basic-button--info {\n    --i18n-button-text-color: var(--i18n-color-info);\n}\n\n.i18n-basic-button.i18n-basic-button--left {\n    margin-left: 10px;\n}\n\n.i18n-basic-button.i18n-basic-button--right {\n    margin-right: 10px;\n}\n\n/* [通用] Tag (标签)\n---------------------------------------------------------------- */\n.i18n-tag {\n    background-color: var(--i18n-tag-bg-color);\n    border-color: var(--i18n-tag-border-color);\n    color: var(--i18n-tag-text-color);\n    display: inline-flex;\n    justify-content: center;\n    align-items: center;\n    vertical-align: middle;\n    height: 20px;\n    padding: 0 6px;\n    font-size: var(--i18n-tag-font-size);\n    line-height: 1;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: var(--i18n-tag-border-radius);\n    box-sizing: border-box;\n    white-space: nowrap;\n}\n\n.i18n-tag.i18n-tag--light-primary {\n    --i18n-tag-text-color: var(--i18n-color-primary);\n    --i18n-tag-bg-color: var(--i18n-color-primary-5);\n    --i18n-tag-border-color: var(--i18n-color-primary-4);\n}\n\n.i18n-tag.i18n-tag--light-success {\n    --i18n-tag-text-color: var(--i18n-color-success);\n    --i18n-tag-bg-color: var(--i18n-color-success-5);\n    --i18n-tag-border-color: var(--i18n-color-success-4);\n}\n\n.i18n-tag.i18n-tag--light-warning {\n    --i18n-tag-text-color: var(--i18n-color-warning);\n    --i18n-tag-bg-color: var(--i18n-color-warning-5);\n    --i18n-tag-border-color: var(--i18n-color-warning-4);\n}\n\n.i18n-tag.i18n-tag--light-danger {\n    --i18n-tag-text-color: var(--i18n-color-danger);\n    --i18n-tag-bg-color: var(--i18n-color-danger-5);\n    --i18n-tag-border-color: var(--i18n-color-danger-4);\n}\n\n.i18n-tag.i18n-tag--light-info {\n    --i18n-tag-text-color: var(--i18n-color-info);\n    --i18n-tag-bg-color: var(--i18n-color-info-5);\n    --i18n-tag-border-color: var(--i18n-color-info-4);\n}\n\n.i18n-tag.i18n-tag--dark-primary {\n    --i18n-tag-text-color: var(--i18n-color-white);\n    --i18n-tag-bg-color: var(--i18n-color-primary);\n    --i18n-tag-border-color: var(--i18n-color-primary);\n}\n\n.i18n-tag.i18n-tag--dark-success {\n    --i18n-tag-text-color: var(--i18n-color-white);\n    --i18n-tag-bg-color: var(--i18n-color-success);\n    --i18n-tag-border-color: var(--i18n-color-success);\n}\n\n.i18n-tag.i18n-tag--dark-warning {\n    --i18n-tag-text-color: var(--i18n-color-white);\n    --i18n-tag-bg-color: var(--i18n-color-warning);\n    --i18n-tag-border-color: var(--i18n-color-warning);\n}\n\n.i18n-tag.i18n-tag--dark-danger {\n    --i18n-tag-text-color: var(--i18n-color-white);\n    --i18n-tag-bg-color: var(--i18n-color-danger);\n    --i18n-tag-border-color: var(--i18n-color-danger);\n}\n\n.i18n-tag.i18n-tag--dark-info {\n    --i18n-tag-text-color: var(--i18n-color-white);\n    --i18n-tag-bg-color: var(--i18n-color-info);\n    --i18n-tag-border-color: var(--i18n-color-info);\n}\n\n.i18n-tag.i18n-tag--plain-primary {\n    --i18n-tag-text-color: var(--i18n-color-primary);\n    --i18n-tag-bg-color: transparent;\n    --i18n-tag-border-color: var(--i18n-color-primary);\n}\n\n.i18n-tag.i18n-tag--plain-success {\n    --i18n-tag-text-color: var(--i18n-color-success);\n    --i18n-tag-bg-color: transparent;\n    --i18n-tag-border-color: var(--i18n-color-success);\n}\n\n.i18n-tag.i18n-tag--plain-warning {\n    --i18n-tag-text-color: var(--i18n-color-warning);\n    --i18n-tag-bg-color: transparent;\n    --i18n-tag-border-color: var(--i18n-color-warning);\n}\n\n.i18n-tag.i18n-tag--plain-danger {\n    --i18n-tag-text-color: var(--i18n-color-danger);\n    --i18n-tag-bg-color: transparent;\n    --i18n-tag-border-color: var(--i18n-color-danger);\n}\n\n.i18n-tag.i18n-tag--plain-info {\n    --i18n-tag-text-color: var(--i18n-color-info);\n    --i18n-tag-bg-color: transparent;\n    --i18n-tag-border-color: var(--i18n-color-info);\n}\n\n.i18n-tag.is-round {\n    border-radius: 20px;\n}\n\n.i18n-tag.is-square {\n    border-radius: var(--i18n-tag-border-radius);\n}\n\n/* [通用] Input (输入框)\n---------------------------------------------------------------- */\ninput[type='text'].i18n-input,\ninput[type='search'].i18n-input {\n    box-shadow: none;\n    /* padding-inline-start: 8px; */\n}\n\ninput[type='text'].i18n-input:focus,\ninput[type='search'].i18n-input:focus {\n    border-color: var(--i18n-color-primary);\n}\n\n/* input[type='search'].i18n-input:before {\n    content: '';\n    display: none;\n} */\n\n/* [通用] select (选择框)\n---------------------------------------------------------------- */\nselect,\n.dropdown.i18n-select {\n    border: 1px solid var(--background-modifier-border);\n    box-shadow: none;\n}\n\nselect,\n.dropdown.i18n-select:focus {\n    border: 1px solid var(--i18n-color-primary);\n}\n\n/* 通用 color(颜色) 模块\n---------------------------------------------------------------- */\n.color__text--danger {\n    color: var(--i18n-color-danger);\n}\n\n.color__bg--danger {\n    background-color: var(--i18n-color-danger);\n}\n\n.color__text--success {\n    color: var(--i18n-color-success);\n}\n\n.color__bg--success {\n    background-color: var(--i18n-color-success);\n}\n\n.color__text--warning {\n    color: var(--i18n-color-warning);\n}\n\n.color__text--info {\n    color: var(--i18n-color-info);\n}\n\n.color__text--primary {\n    color: var(--i18n-color-primary);\n}\n\n/* i18n(国际化) 模块\n---------------------------------------------------------------- */\n.i18n__container {\n    display: flex;\n    flex-direction: column;\n    z-index: 100;\n    width: auto;\n    border-radius: var(--i18n-border-radius);\n    background-color: var(--background-primary);\n}\n\n.i18n__container::-webkit-scrollbar {\n    display: none;\n}\n\n.i18n__header {\n    margin: 0;\n}\n\n.i18n__title {\n    margin: 0;\n    border: #fff solid 0px;\n}\n\n.i18n__help {\n    margin: 0;\n    padding-top: 10px;\n    padding-bottom: 10px;\n    padding-left: 10px;\n    padding-right: 10px;\n    border: #fff solid 0px;\n}\n\n.i18n__help:first-child {\n    padding-top: 0px;\n}\n\n.i18n__search {\n    margin: 0;\n    padding-top: 0px;\n    padding-bottom: 10px;\n    padding-left: 10px;\n    padding-right: 10px;\n    border: #fff solid 0px;\n}\n\n.i18n__re-input {\n    width: 100%;\n}\n\n.i18n__item-box {\n    overflow: auto;\n}\n\n.i18n__item-box::-webkit-scrollbar {\n    display: none;\n}\n\n.i18n__item {\n    display: flex;\n    align-items: center;\n    height: 100%;\n    padding: 6px 10px;\n    border: #fff solid 0px;\n    border-radius: var(--i18n-border-radius);\n}\n\n.i18n__item:first-child {\n    padding-top: 6px;\n}\n\n.i18n__item:hover {\n    background-color: var(--i18n-background-modifier-hover);\n}\n\n.i18n__item-state {\n    font-size: 10px;\n    padding: 2px;\n    border-radius: 0px;\n    background-color: rgba(0, 0, 0, 0);\n}\n\n.i18n__item-title {\n    display: flex;\n    align-items: center;\n    height: auto;\n    line-height: 20px;\n    font-weight: bold;\n    font-size: 15px;\n}\n\n.i18n__item-name {\n    margin-left: 5px;\n}\n\n.i18n__item-version {\n    font-size: 10px;\n}\n\n.i18n__item-state--green {\n    color: var(--i18n-color-green);\n    border: 1px solid var(--i18n-color-green);\n}\n\n.i18n__item-state--orange {\n    color: var(--i18n-color-orange);\n    border: 1px solid var(--i18n-color-orange);\n}\n\n.i18n__item-state--red {\n    color: var(--i18n-color-red);\n    border: 1px solid var(--i18n-color-red);\n}\n\n.i18n__item-state--blue {\n    color: var(--i18n-color-blue);\n    border: 1px solid var(--i18n-color-blue);\n}\n\n.i18n__item-state--grey {\n    color: var(--i18n-color-grey);\n    border: 1px solid var(--i18n-color-grey);\n}\n\n.i18n__item-details {\n    display: flex;\n    flex-direction: row;\n    font-size: var(--font-ui-medium);\n    padding: 10px;\n    padding-bottom: 0px;\n}\n\n/* editor(编辑器) 模块\n---------------------------------------------------------------- */\n.i18n-edit__container {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    height: 100%;\n}\n\n.workspace-leaf-content .i18n-edit__container {\n    padding: 10px;\n}\n\n.i18n-edit__manifest {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    width: 100%;\n    margin-bottom: 10px;\n}\n\n.i18n-edit__description {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    width: 100%;\n    margin-bottom: 10px;\n}\n\n.i18n-edit__label-wrap {\n    padding: 0px 10px;\n    height: 32px;\n    line-height: 35px;\n    font-size: 14px;\n    font-weight: bold;\n}\n\n.i18n-edit__author-input,\n.i18n-edit__translation-version-input,\n.i18n-edit__plugin-version-input,\n.i18n-edit__description-input {\n    padding-left: 5px;\n    padding-right: 5px;\n    height: 32px;\n    background-color: transparent;\n    border: 1px solid var(--i18n-edit-border-color);\n    border-radius: 3px;\n}\n\n.i18n-edit__plugin-version-input {\n    min-width: 80px;\n    max-width: none;\n    width: 140px;\n    text-align: center;\n}\n\n.i18n-edit__author-input:focus,\n.i18n-edit__translation-version-input:focus,\n.i18n-edit__plugin-version-input:focus,\n.i18n-edit__description-input:focus {\n    border-color: var(--i18n-color-primary);\n    box-shadow: none;\n}\n\n.i18n-edit__author-input,\n.i18n-edit__translation-version-input {\n    min-width: 50px;\n    max-width: none;\n    flex-grow: 1;\n}\n\n.i18n-edit__description-input {\n    min-width: 50px;\n    max-width: none;\n    flex-grow: 1;\n}\n\n.i18n-edit__dict {\n    flex-grow: 1;\n    width: auto;\n    height: auto;\n    padding: 10px;\n    border: 1px solid var(--i18n-edit-border-color);\n    overflow-y: scroll;\n    /* overflow-x: scroll; */\n    margin-bottom: 10px;\n    font-size: var(--i18n-font-ui-medium);\n    border-radius: var(--i18n-border-radius);\n}\n\n/* .i18n-edit__dict::-webkit-scrollbar {\n    display: none;\n} */\n\n.i18n-edit__table {\n    width: 100%;\n    table-layout: fixed;\n    border-collapse: collapse;\n    user-select: text;\n}\n\n.i18n-edit__table-row {\n    /* display: flex;\n    flex-direction: row;\n    align-items: center;\n    width: auto;\n    border-bottom: 1px solid var(--i18n-edit-border-color); */\n\n    display: grid;\n    align-items: center;\n    width: 100%;\n    height: auto;\n    border-bottom: 1px solid var(--i18n-edit-border-color);\n    grid-template-columns: 1fr 1fr auto auto auto;\n}\n\n/* display: grid;\n    align-items: center;\n    width: 100%;\n    height: auto;\n    border-bottom: 1px solid var(--i18n-edit-border-color);\n    grid-template-columns: auto 1fr 1fr auto;\n\n     */\n\n.i18n-edit__table-row:first-child {\n    border-top: 1px solid var(--i18n-edit-border-color);\n}\n\n/* .i18n-edit__table-row:nth-child(even) {\n    background-color: #21252B;\n}\n\n.i18n-edit__table-row:nth-child(odd) {\n    background-color: #262B32;\n} */\n\n.i18n-edit__table-row:hover {\n    background-color: var(--i18n-background-modifier-hover);\n}\n\n.i18n-edit__table-key,\n.i18n-edit__table-value {\n    flex: 1;\n    width: auto;\n    min-width: 0px;\n    height: auto;\n    padding: 10px 8px;\n    word-wrap: break-word;\n    white-space: pre-wrap;\n}\n\n.i18n-edit__table-operate {\n    display: flex;\n    width: auto;\n}\n\nbutton:not(.clickable-icon).i18n-edit__operate-operate-button {\n    width: 40px;\n    height: 25px;\n    background-color: transparent;\n    border: 1px solid var(--i18n-color-primary);\n    border-radius: 2px;\n    box-shadow: none;\n    color: var(--i18n-color-primary);\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n}\n\nbutton:not(.clickable-icon).i18n-edit__operate-operate-button:hover {\n    color: var(--i18n-color-primary);\n    border: 1px solid var(--i18n-color-primary);\n}\n\n.i18n-edit__operate {\n    display: flex;\n    width: 100%;\n    margin-bottom: 10px;\n}\n\n.i18n-edit__operate-button {\n    margin-left: 10px;\n}\n\n.i18n-edit__operate-input {\n    flex: 1;\n}\n\n.i18n-edit__search {\n    display: flex;\n    flex-direction: row;\n    width: 100%;\n    margin-bottom: 10px;\n}\n\n.i18n-edit__search-button {\n    margin-left: 10px;\n}\n\n.i18n-edit__search-box {\n    flex-grow: 1;\n}\n\n.i18n-edit__search-input {\n    border: 1px solid #fff;\n}\n\n.i18n-edit__search-input:focus {\n    border-color: var(--i18n-color-primary);\n    box-shadow: none;\n}\n\n.i18n-edit__selected {\n    background-color: var(--i18n-edit-selected);\n    /* background-color: var(--i18n-color-primary); */\n}\n\n.i18n-edit__selected:hover {\n    background-color: var(--i18n-edit-selected);\n    /* background-color: var(--i18n-color-primary); */\n}\n\n.i18n-edit__modify {\n    min-height: 200px;\n}\n\n.i18n-edit__modify-input {\n    width: 100%;\n    height: 100%;\n    font-size: 15px;\n    border-radius: var(--i18n-border-radius);\n    resize: none;\n}\n\n.i18n-edit__modify-input:focus {\n    border-color: var(--i18n-color-primary);\n    box-shadow: none;\n}\n\n/* wizard(向导) 模块\n---------------------------------------------------------------- */\n.i18n-wizard__container {\n    border-radius: var(--i18n-border-radius);\n}\n\n.i18n-wizard__box {\n    z-index: 10;\n    height: 400px;\n    margin: 40px;\n    margin-top: 20px;\n    margin-bottom: 20px;\n    margin-left: 40px;\n    margin-right: 40px;\n}\n\n.i18n-wizard__img {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n    width: 100px;\n    height: 120px;\n}\n\n.i18n-wizard__title {\n    text-align: center;\n    font-size: 25px;\n    font-weight: bold;\n    margin-top: 5px;\n    margin-bottom: 5px;\n}\n\n.i18n-wizard__version {\n    text-align: center;\n    font-size: 13px;\n    margin-top: 0px;\n    margin-bottom: 30px;\n}\n\n/* share(共享) 模块\n---------------------------------------------------------------- */\n.i18n-share__container {\n    display: flex;\n    flex-direction: column;\n    z-index: 100;\n    border-radius: var(--i18n-border-radius);\n    background-color: var(--background-primary);\n}\n\n.i18n-share__title {\n    margin: 0;\n    border: #fff solid 0px;\n}\n\n.i18n-share__item {\n    margin: 0;\n    padding: 10px;\n    border: #fff solid 0px;\n}\n\n.i18n-share__item:first-child {\n    padding-top: 10px;\n}\n\n.i18n-share-history__container {\n    display: flex;\n    flex-direction: column;\n    z-index: 100;\n    width: auto;\n    border-radius: var(--i18n-border-radius);\n    background-color: var(--background-primary);\n}\n\n.i18n-share-history__title-box {\n    margin: 0;\n    border: #fff solid 0px;\n}\n\n.i18n-share-history__title {\n    margin: 0;\n    padding-bottom: 10px;\n    padding-left: 6px;\n    padding-right: 6px;\n    border: #fff solid 0px;\n}\n\n.i18n-share-history__title:first-child {\n    padding-top: 0px;\n}\n\n/* agreement(协议) 模块\n---------------------------------------------------------------- */\n.i18n-areement__container {\n    border-radius: var(--i18n-border-radius);\n}\n\n.i18n-agreement__text {\n    color: var(--i18n-color-danger);\n    font-weight: bold;\n}\n\n.i18n-agreement__item {\n    padding: 0px;\n    border: 0px solid #fff;\n}\n\nbutton.i18n-agreement__check-button {\n    border: none;\n    box-shadow: none;\n    background-color: transparent;\n}\n\nbutton.i18n-agreement__check-button:hover {\n    box-shadow: none;\n    border: none;\n}\n\n.i18n-agreement__operate {\n    padding-bottom: 0px;\n}\n\n/* settings(设置) 模块\n---------------------------------------------------------------- */\n.i18n-setting__container {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    height: 100%;\n}\n\n.i18n-setting__tabs {\n    display: flex;\n    flex-direction: row;\n    height: 40px;\n    border-bottom: 1px solid var(--i18n-color-primary);\n}\n\n.i18n-setting__content {\n    display: flex;\n    flex-direction: column;\n    flex-grow: 1;\n    margin-top: 25px;\n    overflow-y: auto;\n    overflow-x: hidden;\n}\n\n.i18n-setting__content::-webkit-scrollbar {\n    display: none;\n}\n\n.i18n-setting__tabs-item {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 15px;\n    height: 40px;\n    font-weight: bold;\n    font-size: 14px;\n    border-top: 1px solid var(--i18n-color-primary);\n    border-right: 1px solid var(--i18n-color-primary);\n}\n\n.i18n-setting__tabs-item:first-child {\n    border-top-left-radius: 4px;\n    border-left: 1px solid var(--i18n-color-primary);\n}\n\n.i18n-setting__tabs-item:last-child {\n    border-top-right-radius: 4px;\n}\n\n.i18n-setting__tabs-item_is-active {\n    color: var(--i18n-color-primary);\n}\n\n/* (提示) 模块\n---------------------------------------------------------------- */\n.notice__container {\n    border-radius: var(--i18n-border-radius);\n}\n\n.notice__light--primary {\n    color: #fff;\n    background-color: var(--i18n-color-primary);\n}\n\n.notice__light--success {\n    color: var(--i18n-color-white);\n    background-color: var(--i18n-color-success);\n}\n\n.notice__light--info {\n    color: var(--i18n-color-white);\n    background-color: var(--i18n-color-info);\n}\n\n.notice__light--warning {\n    color: var(--i18n-color-white);\n    background-color: var(--i18n-color-warning);\n}\n\n.notice__light--error {\n    color: var(--i18n-color-white);\n    background-color: var(--i18n-color-danger);\n}\n\n.notice__dark--primary {\n    color: var(--i18n-color-primary);\n    background-color: #1b2731;\n}\n\n.notice__dark--success {\n    color: var(--i18n-color-success);\n    background-color: #1c2518;\n}\n\n.notice__dark--info {\n    color: var(--i18n-color-info);\n    background-color: #202121;\n}\n\n.notice__dark--warning {\n    color: var(--i18n-color-warning);\n    background-color: #292218;\n}\n\n.notice__dark--error {\n    color: var(--i18n-color-danger);\n    background-color: #2b1d1d;\n}\n\n/* 名称翻译 模块\n---------------------------------------------------------------- */\n.i18n-name__container {\n    display: flex;\n    flex-direction: column;\n    z-index: 100;\n    width: auto;\n    border-radius: var(--i18n-border-radius);\n    background-color: var(--background-primary);\n}\n\ninput[type='text'].i18n-name__input {\n    width: 50px;\n    text-align: center;\n}\n\n\n/* share 模块\n---------------------------------------------------------------- */\n.i18n-share__container {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    height: 100%;\n}\n\n.workspace-leaf-content .i18n-share__container {\n    padding: 10px;\n}\n\n.i18n-share__manifest {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    width: 100%;\n    margin-bottom: 10px;\n}\n\n.i18n-share__description {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    width: 100%;\n    margin-bottom: 10px;\n}\n\n.i18n-share__label-wrap {\n    padding: 0px 10px;\n    height: 32px;\n    line-height: 35px;\n    font-size: 14px;\n    font-weight: bold;\n}\n\n.i18n-share__label-version-input,\n.i18n-share__description-input {\n    padding-left: 5px;\n    padding-right: 5px;\n    height: 32px;\n    background-color: transparent;\n    border: 1px solid var(--i18n-edit-border-color);\n    border-radius: 3px;\n}\n\n.i18n-share__label-version-input {\n    min-width: 80px;\n    max-width: none;\n    width: 80px;\n    text-align: center;\n}\n\n.i18n-share__label-version-input:focus,\n.i18n-share__description-input:focus {\n    border-color: var(--i18n-color-primary);\n    box-shadow: none;\n}\n\n.i18n-share__description-input {\n    min-width: 50px;\n    max-width: none;\n    flex-grow: 1;\n}\n\n.i18n-share__dict {\n    flex-grow: 1;\n    width: auto;\n    height: auto;\n    padding: 10px;\n    border: 1px solid var(--i18n-edit-border-color);\n    overflow-y: scroll;\n    /* overflow-x: scroll; */\n    margin-bottom: 10px;\n    font-size: var(--i18n-font-ui-medium);\n    border-radius: var(--i18n-border-radius);\n}\n\n.i18n-share__table {\n    width: 100%;\n    table-layout: fixed;\n    border-collapse: collapse;\n    user-select: text;\n}\n\n.i18n-share__table-row {\n    width: auto;\n}\n\n.i18n-share__table-row:hover {\n    background-color: var(--i18n-background-modifier-hover);\n}\n\n.i18n-share__table-count {\n    padding: 10px 8px;\n    width: 50px;\n    height: auto;\n    min-width: 20px;\n    text-align: center;\n    border-bottom: 1px solid var(--i18n-edit-border-color);\n}\n\n.i18n-share__table-key,\n.i18n-share__table-value {\n    padding: 10px 8px;\n    width: auto;\n    height: auto;\n    min-width: 20px;\n    border-bottom: 1px solid var(--i18n-edit-border-color);\n    word-wrap: break-word;\n    white-space: normal;\n}\n\n.i18n-share__events {\n    pointer-events: none;\n}\n\n.i18n-share__tip-warning {\n    color: var(--i18n-color-warning);\n    width: auto;\n    margin-bottom: 10px;\n    word-wrap: break-word;\n}\n\n.i18n-share__tip-danger {\n    color: var(--i18n-color-danger);\n    width: auto;\n    margin-bottom: 10px;\n    word-wrap: break-word;\n}\n\n.i18n-share-update__container {\n    display: flex;\n    flex-direction: column;\n}\n\n.i18n-share-update__operate {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    margin-bottom: 10px;\n}\n\n.i18n-share-update__contrast {\n    display: flex;\n    flex-direction: row;\n    flex: 1;\n    overflow: hidden;\n}\n\n.workspace-leaf-content .i18n-contrast__container {\n    padding: 10px;\n}\n\n.i18n-share-update__pre {\n    margin: 0;\n    padding: 0;\n    white-space: pre-wrap;\n}\n\n.i18n-share-update__local-translation {\n    padding: 10px;\n    margin-left: 5px;\n    width: 50%;\n    height: 100%;\n    border: 1px solid var(--i18n-color-grey);\n    overflow-y: auto;\n    user-select: text;\n}\n\n.i18n-share-update__cloud-translation {\n    padding: 10px;\n    margin-right: 5px;\n    width: 50%;\n    height: 100%;\n    border: 1px solid var(--i18n-color-grey);\n    overflow-y: auto;\n    user-select: text;\n}\n\n.i18n-share-update__highlight-a {\n    background-color: var(--i18n-contrast-highlight-a);\n}\n\n.i18n-share-update__highlight-b {\n    background-color: var(--i18n-contrast-highlight-b);\n}\n\n/* admin 模块\n---------------------------------------------------------------- */\n.i18n-admin__container {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    height: 100%;\n}\n\n.i18n-admin__issues-list {\n    display: flex;\n    flex-direction: row;\n    width: 100%;\n    margin-bottom: 10px;\n}\n\n.i18n-admin__editor {\n    flex: 1;\n}\n\n.workspace-leaf-content .i18n-admin__container {\n    padding: 10px;\n}\n\n\n\n/* white-space: pre-wrap; */\n\n/* review 模块\n---------------------------------------------------------------- */\n.i18n-review__container {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    height: 100%;\n}\n\n.workspace-leaf-content .i18n-review__container {\n    padding: 12px;\n}\n\n/* .i18n-review__row-added {\n    display: grid;\n    grid-template-columns: auto 1fr 1fr 1fr auto;\n    align-items: center;\n    width: 100%;\n    border-bottom: 1px solid var(--i18n-edit-border-color);\n}\n\n.i18n-review__row-added:first-child {\n    border-top: 1px solid var(--i18n-edit-border-color);\n} */\n\n.i18n-review__row {\n    display: grid;\n    align-items: center;\n    width: 100%;\n    height: auto;\n    border-bottom: 1px solid var(--i18n-edit-border-color);\n}\n\n.i18n-review__row:first-child {\n    border-top: 1px solid var(--i18n-edit-border-color);\n}\n\n.i18n-review__row-columns {\n    grid-template-columns: auto 1fr 1fr auto;\n}\n\n.i18n-review__row-columns-added {\n    grid-template-columns: auto 1fr 1fr 1fr auto;\n}\n\n.i18n-review__cell {\n    height: auto;\n    min-width: 0px;\n    padding: 10px 8px;\n    word-wrap: break-word;\n    white-space: pre-wrap;\n}\n\n/* white-space: pre-wrap; */\n\n/* admin 模块\n---------------------------------------------------------------- */\n.i18n-contributor__title-box {\n    margin: 0;\n    border: #fff solid 0px;\n}\n\n.i18n-contributor__title {\n    margin: 0;\n    padding: 0px;\n    border: #fff solid 0px;\n}\n\n.i18n-contributor__title:first-child {\n    padding-top: 0px;\n}\n\n.i18n-contributor__content {\n    overflow: auto;\n}\n\n.i18n-contributor__content::-webkit-scrollbar {\n    display: none;\n}\n\n.i18n-contributor__table {\n    width: auto;\n    table-layout: fixed;\n    border-collapse: collapse;\n    user-select: text;\n}\n\n.i18n-contributor__row {\n    width: auto;\n    height: 30px;\n    border-radius: 10px;\n}\n\n.i18n-contributor__row:hover {\n    background-color: var(--i18n-color-primary-4);\n}\n\n.i18n-contributor__rank {\n    padding-right: 10px;\n    width: auto;\n    min-width: 35px;\n    text-align: center;\n    font-weight: bold;\n}\n\n.i18n-contributor__name {\n    padding: 0 10px;\n    width: auto;\n    min-width: 50px;\n    font-weight: 500;\n}\n\n.i18n-contributor__translation {\n    padding-left: 10px;\n    width: auto;\n    min-width: 50px;\n    text-align: right;\n    font-weight: 500;\n}\n\n.i18n-edit__container {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    height: 100%;\n}\n\n.i18n-contributor__rank-1 {\n    color: #F1D074;\n}\n\n.i18n-contributor__rank-2 {\n    color: #D4D9E1;\n}\n\n.i18n-contributor__rank-3 {\n    color: #E7C5A5;\n}\n\n.i18n-contributor__rank-4 {\n    color: var(--i18n-color-info);\n}"
  },
  {
    "path": ".obsidian/plugins/obsidian-custom-attachment-location/data.json",
    "content": "{\n  \"attachmentFolderPath\": \"./media\",\n  \"attachmentRenameMode\": \"Only pasted images\",\n  \"duplicateNameSeparator\": \" \",\n  \"generatedAttachmentFilename\": \"file-${date:YYYYMMDDHHmmssSSS}\",\n  \"jpegQuality\": 0.8,\n  \"shouldConvertPastedImagesToJpeg\": false,\n  \"shouldDeleteOrphanAttachments\": false,\n  \"shouldKeepEmptyAttachmentFolders\": false,\n  \"shouldRenameAttachmentFiles\": false,\n  \"shouldRenameAttachmentFolder\": true,\n  \"shouldRenameAttachmentsToLowerCase\": false,\n  \"shouldRenameCollectedAttachments\": false,\n  \"specialCharacters\": \"#^[]|*\\\\<>:?\",\n  \"specialCharactersReplacement\": \"-\",\n  \"warningVersion\": \"7.1.0\",\n  \"customTokensStr\": \"\",\n  \"excludePaths\": [],\n  \"includePaths\": []\n}"
  },
  {
    "path": ".obsidian/plugins/obsidian-custom-attachment-location/duplicate.js",
    "content": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source, please visit the github repository of this plugin\n*/\n\n(function initCjs() {\n  const globalThisRecord = globalThis;\n  globalThisRecord[\"__name\"] ??= name;\n  const originalRequire = require;\n  if (originalRequire && !originalRequire.__isPatched) {\n    require = Object.assign(\n      (id) => requirePatched(id),\n      originalRequire,\n      {\n        __isPatched: true\n      }\n    );\n  }\n  const newFuncs = {\n    __extractDefault: () => extractDefault,\n    process: () => {\n      const browserProcess = {\n        browser: true,\n        cwd: () => \"/\",\n        env: {},\n        platform: \"android\"\n      };\n      return browserProcess;\n    }\n  };\n  for (const key of Object.keys(newFuncs)) {\n    globalThisRecord[key] ??= newFuncs[key]?.();\n  }\n  function name(obj) {\n    return obj;\n  }\n  function extractDefault(module2) {\n    return module2 && module2.__esModule && module2.default ? module2.default : module2;\n  }\n  function requirePatched(id) {\n    const module2 = originalRequire?.(id);\n    if (module2) {\n      return extractDefault(module2);\n    }\n    if (id === \"process\" || id === \"node:process\") {\n      console.error(`Module not found: ${id}. Fake process object is returned instead.`);\n      return globalThis.process;\n    }\n    console.error(`Module not found: ${id}. Empty object is returned instead.`);\n    return {};\n  }\n})();\n\n\"use strict\";var Mw=Object.create;var Pi=Object.defineProperty;var Nw=Object.getOwnPropertyDescriptor;var $w=Object.getOwnPropertyNames;var Yw=Object.getPrototypeOf,Bw=Object.prototype.hasOwnProperty;var B=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Iu=(e,t)=>{for(var n in t)Pi(e,n,{get:t[n],enumerable:!0})},Pu=(e,t,n,r)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let o of $w(t))!Bw.call(e,o)&&o!==n&&Pi(e,o,{get:()=>t[o],enumerable:!(r=Nw(t,o))||r.enumerable});return e};var Le=(e,t,n)=>(n=e!=null?Mw(Yw(e)):{},Pu(t||!e||!e.__esModule?Pi(n,\"default\",{value:e,enumerable:!0}):n,e)),zw=e=>Pu(Pi({},\"__esModule\",{value:!0}),e);var Wt=B((Bs,Un)=>{(function(e,t){typeof Bs==\"object\"&&typeof Un<\"u\"?Un.exports=t():typeof define==\"function\"&&define.amd?define(t):e.moment=t()})(Bs,function(){\"use strict\";var e;function t(){return e.apply(null,arguments)}function n(i){e=i}function r(i){return i instanceof Array||Object.prototype.toString.call(i)===\"[object Array]\"}function o(i){return i!=null&&Object.prototype.toString.call(i)===\"[object Object]\"}function s(i,a){return Object.prototype.hasOwnProperty.call(i,a)}function l(i){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(i).length===0;var a;for(a in i)if(s(i,a))return!1;return!0}function u(i){return i===void 0}function f(i){return typeof i==\"number\"||Object.prototype.toString.call(i)===\"[object Number]\"}function h(i){return i instanceof Date||Object.prototype.toString.call(i)===\"[object Date]\"}function m(i,a){var c=[],d,y=i.length;for(d=0;d<y;++d)c.push(a(i[d],d));return c}function p(i,a){for(var c in a)s(a,c)&&(i[c]=a[c]);return s(a,\"toString\")&&(i.toString=a.toString),s(a,\"valueOf\")&&(i.valueOf=a.valueOf),i}function g(i,a,c,d){return au(i,a,c,d,!0).utc()}function w(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function E(i){return i._pf==null&&(i._pf=w()),i._pf}var F;Array.prototype.some?F=Array.prototype.some:F=function(i){var a=Object(this),c=a.length>>>0,d;for(d=0;d<c;d++)if(d in a&&i.call(this,a[d],d,a))return!0;return!1};function T(i){var a=null,c=!1,d=i._d&&!isNaN(i._d.getTime());if(d&&(a=E(i),c=F.call(a.parsedDateParts,function(y){return y!=null}),d=a.overflow<0&&!a.empty&&!a.invalidEra&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&c),i._strict&&(d=d&&a.charsLeftOver===0&&a.unusedTokens.length===0&&a.bigHour===void 0)),Object.isFrozen==null||!Object.isFrozen(i))i._isValid=d;else return d;return i._isValid}function A(i){var a=g(NaN);return i!=null?p(E(a),i):E(a).userInvalidated=!0,a}var _=t.momentProperties=[],I=!1;function z(i,a){var c,d,y,b=_.length;if(u(a._isAMomentObject)||(i._isAMomentObject=a._isAMomentObject),u(a._i)||(i._i=a._i),u(a._f)||(i._f=a._f),u(a._l)||(i._l=a._l),u(a._strict)||(i._strict=a._strict),u(a._tzm)||(i._tzm=a._tzm),u(a._isUTC)||(i._isUTC=a._isUTC),u(a._offset)||(i._offset=a._offset),u(a._pf)||(i._pf=E(a)),u(a._locale)||(i._locale=a._locale),b>0)for(c=0;c<b;c++)d=_[c],y=a[d],u(y)||(i[d]=y);return i}function H(i){z(this,i),this._d=new Date(i._d!=null?i._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),I===!1&&(I=!0,t.updateOffset(this),I=!1)}function v(i){return i instanceof H||i!=null&&i._isAMomentObject!=null}function te(i){t.suppressDeprecationWarnings===!1&&typeof console<\"u\"&&console.warn&&console.warn(\"Deprecation warning: \"+i)}function J(i,a){var c=!0;return p(function(){if(t.deprecationHandler!=null&&t.deprecationHandler(null,i),c){var d=[],y,b,C,L=arguments.length;for(b=0;b<L;b++){if(y=\"\",typeof arguments[b]==\"object\"){y+=`\n[`+b+\"] \";for(C in arguments[0])s(arguments[0],C)&&(y+=C+\": \"+arguments[0][C]+\", \");y=y.slice(0,-2)}else y=arguments[b];d.push(y)}te(i+`\nArguments: `+Array.prototype.slice.call(d).join(\"\")+`\n`+new Error().stack),c=!1}return a.apply(this,arguments)},a)}var Z={};function se(i,a){t.deprecationHandler!=null&&t.deprecationHandler(i,a),Z[i]||(te(a),Z[i]=!0)}t.suppressDeprecationWarnings=!1,t.deprecationHandler=null;function ue(i){return typeof Function<\"u\"&&i instanceof Function||Object.prototype.toString.call(i)===\"[object Function]\"}function re(i){var a,c;for(c in i)s(i,c)&&(a=i[c],ue(a)?this[c]=a:this[\"_\"+c]=a);this._config=i,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)}function Y(i,a){var c=p({},i),d;for(d in a)s(a,d)&&(o(i[d])&&o(a[d])?(c[d]={},p(c[d],i[d]),p(c[d],a[d])):a[d]!=null?c[d]=a[d]:delete c[d]);for(d in i)s(i,d)&&!s(a,d)&&o(i[d])&&(c[d]=p({},c[d]));return c}function j(i){i!=null&&this.set(i)}var V;Object.keys?V=Object.keys:V=function(i){var a,c=[];for(a in i)s(i,a)&&c.push(a);return c};var ie={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"};function he(i,a,c){var d=this._calendar[i]||this._calendar.sameElse;return ue(d)?d.call(a,c):d}function me(i,a,c){var d=\"\"+Math.abs(i),y=a-d.length,b=i>=0;return(b?c?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,y)).toString().substr(1)+d}var Xe=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,x=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ie={},Pe={};function k(i,a,c,d){var y=d;typeof d==\"string\"&&(y=function(){return this[d]()}),i&&(Pe[i]=y),a&&(Pe[a[0]]=function(){return me(y.apply(this,arguments),a[1],a[2])}),c&&(Pe[c]=function(){return this.localeData().ordinal(y.apply(this,arguments),i)})}function Ye(i){return i.match(/\\[[\\s\\S]/)?i.replace(/^\\[|\\]$/g,\"\"):i.replace(/\\\\/g,\"\")}function Rt(i){var a=i.match(Xe),c,d;for(c=0,d=a.length;c<d;c++)Pe[a[c]]?a[c]=Pe[a[c]]:a[c]=Ye(a[c]);return function(y){var b=\"\",C;for(C=0;C<d;C++)b+=ue(a[C])?a[C].call(y,i):a[C];return b}}function Kt(i,a){return i.isValid()?(a=gn(a,i.localeData()),Ie[a]=Ie[a]||Rt(a),Ie[a](i)):i.localeData().invalidDate()}function gn(i,a){var c=5;function d(y){return a.longDateFormat(y)||y}for(x.lastIndex=0;c>=0&&x.test(i);)i=i.replace(x,d),x.lastIndex=0,c-=1;return i}var Ee={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};function wn(i){var a=this._longDateFormat[i],c=this._longDateFormat[i.toUpperCase()];return a||!c?a:(this._longDateFormat[i]=c.match(Xe).map(function(d){return d===\"MMMM\"||d===\"MM\"||d===\"DD\"||d===\"dddd\"?d.slice(1):d}).join(\"\"),this._longDateFormat[i])}var gt=\"Invalid date\";function Ot(){return this._invalidDate}var Qt=\"%d\",xr=/\\d{1,2}/;function ws(i){return this._ordinal.replace(\"%d\",i)}var di={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function hi(i,a,c,d){var y=this._relativeTime[c];return ue(y)?y(i,a,c,d):y.replace(/%d/i,i)}function mi(i,a){var c=this._relativeTime[i>0?\"future\":\"past\"];return ue(c)?c(a):c.replace(/%s/i,a)}var pi={D:\"date\",dates:\"date\",date:\"date\",d:\"day\",days:\"day\",day:\"day\",e:\"weekday\",weekdays:\"weekday\",weekday:\"weekday\",E:\"isoWeekday\",isoweekdays:\"isoWeekday\",isoweekday:\"isoWeekday\",DDD:\"dayOfYear\",dayofyears:\"dayOfYear\",dayofyear:\"dayOfYear\",h:\"hour\",hours:\"hour\",hour:\"hour\",ms:\"millisecond\",milliseconds:\"millisecond\",millisecond:\"millisecond\",m:\"minute\",minutes:\"minute\",minute:\"minute\",M:\"month\",months:\"month\",month:\"month\",Q:\"quarter\",quarters:\"quarter\",quarter:\"quarter\",s:\"second\",seconds:\"second\",second:\"second\",gg:\"weekYear\",weekyears:\"weekYear\",weekyear:\"weekYear\",GG:\"isoWeekYear\",isoweekyears:\"isoWeekYear\",isoweekyear:\"isoWeekYear\",w:\"week\",weeks:\"week\",week:\"week\",W:\"isoWeek\",isoweeks:\"isoWeek\",isoweek:\"isoWeek\",y:\"year\",years:\"year\",year:\"year\"};function Be(i){return typeof i==\"string\"?pi[i]||pi[i.toLowerCase()]:void 0}function Mn(i){var a={},c,d;for(d in i)s(i,d)&&(c=Be(d),c&&(a[c]=i[d]));return a}var ys={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function ks(i){var a=[],c;for(c in i)s(i,c)&&a.push({unit:c,priority:ys[c]});return a.sort(function(d,y){return d.priority-y.priority}),a}var gi=/\\d/,ze=/\\d\\d/,wi=/\\d{3}/,S=/\\d{4}/,R=/[+-]?\\d{6}/,O=/\\d\\d?/,K=/\\d\\d\\d\\d?/,ae=/\\d\\d\\d\\d\\d\\d?/,Re=/\\d{1,3}/,wt=/\\d{1,4}/,Je=/[+-]?\\d{1,6}/,at=/\\d+/,At=/[+-]?\\d+/,Ve=/Z|[+-]\\d\\d:?\\d\\d/gi,yt=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,kt=/[+-]?\\d+(\\.\\d{1,3})?/,Er=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,Nn=/^[1-9]\\d?/,bs=/^([1-9]\\d|\\d)/,yi;yi={};function N(i,a,c){yi[i]=ue(a)?a:function(d,y){return d&&c?c:a}}function rp(i,a){return s(yi,i)?yi[i](a._strict,a._locale):new RegExp(ip(i))}function ip(i){return Lt(i.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(a,c,d,y,b){return c||d||y||b}))}function Lt(i){return i.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function lt(i){return i<0?Math.ceil(i)||0:Math.floor(i)}function Q(i){var a=+i,c=0;return a!==0&&isFinite(a)&&(c=lt(a)),c}var xs={};function le(i,a){var c,d=a,y;for(typeof i==\"string\"&&(i=[i]),f(a)&&(d=function(b,C){C[a]=Q(b)}),y=i.length,c=0;c<y;c++)xs[i[c]]=d}function Ar(i,a){le(i,function(c,d,y,b){y._w=y._w||{},a(c,y._w,y,b)})}function op(i,a,c){a!=null&&s(xs,i)&&xs[i](a,c._a,c,i)}function ki(i){return i%4===0&&i%100!==0||i%400===0}var Oe=0,Dt=1,Ct=2,Ae=3,bt=4,Mt=5,yn=6,sp=7,ap=8;k(\"Y\",0,0,function(){var i=this.year();return i<=9999?me(i,4):\"+\"+i}),k(0,[\"YY\",2],0,function(){return this.year()%100}),k(0,[\"YYYY\",4],0,\"year\"),k(0,[\"YYYYY\",5],0,\"year\"),k(0,[\"YYYYYY\",6,!0],0,\"year\"),N(\"Y\",At),N(\"YY\",O,ze),N(\"YYYY\",wt,S),N(\"YYYYY\",Je,R),N(\"YYYYYY\",Je,R),le([\"YYYYY\",\"YYYYYY\"],Oe),le(\"YYYY\",function(i,a){a[Oe]=i.length===2?t.parseTwoDigitYear(i):Q(i)}),le(\"YY\",function(i,a){a[Oe]=t.parseTwoDigitYear(i)}),le(\"Y\",function(i,a){a[Oe]=parseInt(i,10)});function Cr(i){return ki(i)?366:365}t.parseTwoDigitYear=function(i){return Q(i)+(Q(i)>68?1900:2e3)};var Hl=$n(\"FullYear\",!0);function lp(){return ki(this.year())}function $n(i,a){return function(c){return c!=null?(jl(this,i,c),t.updateOffset(this,a),this):vr(this,i)}}function vr(i,a){if(!i.isValid())return NaN;var c=i._d,d=i._isUTC;switch(a){case\"Milliseconds\":return d?c.getUTCMilliseconds():c.getMilliseconds();case\"Seconds\":return d?c.getUTCSeconds():c.getSeconds();case\"Minutes\":return d?c.getUTCMinutes():c.getMinutes();case\"Hours\":return d?c.getUTCHours():c.getHours();case\"Date\":return d?c.getUTCDate():c.getDate();case\"Day\":return d?c.getUTCDay():c.getDay();case\"Month\":return d?c.getUTCMonth():c.getMonth();case\"FullYear\":return d?c.getUTCFullYear():c.getFullYear();default:return NaN}}function jl(i,a,c){var d,y,b,C,L;if(!(!i.isValid()||isNaN(c))){switch(d=i._d,y=i._isUTC,a){case\"Milliseconds\":return void(y?d.setUTCMilliseconds(c):d.setMilliseconds(c));case\"Seconds\":return void(y?d.setUTCSeconds(c):d.setSeconds(c));case\"Minutes\":return void(y?d.setUTCMinutes(c):d.setMinutes(c));case\"Hours\":return void(y?d.setUTCHours(c):d.setHours(c));case\"Date\":return void(y?d.setUTCDate(c):d.setDate(c));case\"FullYear\":break;default:return}b=c,C=i.month(),L=i.date(),L=L===29&&C===1&&!ki(b)?28:L,y?d.setUTCFullYear(b,C,L):d.setFullYear(b,C,L)}}function up(i){return i=Be(i),ue(this[i])?this[i]():this}function cp(i,a){if(typeof i==\"object\"){i=Mn(i);var c=ks(i),d,y=c.length;for(d=0;d<y;d++)this[c[d].unit](i[c[d].unit])}else if(i=Be(i),ue(this[i]))return this[i](a);return this}function fp(i,a){return(i%a+a)%a}var ge;Array.prototype.indexOf?ge=Array.prototype.indexOf:ge=function(i){var a;for(a=0;a<this.length;++a)if(this[a]===i)return a;return-1};function Es(i,a){if(isNaN(i)||isNaN(a))return NaN;var c=fp(a,12);return i+=(a-c)/12,c===1?ki(i)?29:28:31-c%7%2}k(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),k(\"MMM\",0,0,function(i){return this.localeData().monthsShort(this,i)}),k(\"MMMM\",0,0,function(i){return this.localeData().months(this,i)}),N(\"M\",O,Nn),N(\"MM\",O,ze),N(\"MMM\",function(i,a){return a.monthsShortRegex(i)}),N(\"MMMM\",function(i,a){return a.monthsRegex(i)}),le([\"M\",\"MM\"],function(i,a){a[Dt]=Q(i)-1}),le([\"MMM\",\"MMMM\"],function(i,a,c,d){var y=c._locale.monthsParse(i,d,c._strict);y!=null?a[Dt]=y:E(c).invalidMonth=i});var dp=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ql=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),Gl=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,hp=Er,mp=Er;function pp(i,a){return i?r(this._months)?this._months[i.month()]:this._months[(this._months.isFormat||Gl).test(a)?\"format\":\"standalone\"][i.month()]:r(this._months)?this._months:this._months.standalone}function gp(i,a){return i?r(this._monthsShort)?this._monthsShort[i.month()]:this._monthsShort[Gl.test(a)?\"format\":\"standalone\"][i.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function wp(i,a,c){var d,y,b,C=i.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)b=g([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(b,\"\").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(b,\"\").toLocaleLowerCase();return c?a===\"MMM\"?(y=ge.call(this._shortMonthsParse,C),y!==-1?y:null):(y=ge.call(this._longMonthsParse,C),y!==-1?y:null):a===\"MMM\"?(y=ge.call(this._shortMonthsParse,C),y!==-1?y:(y=ge.call(this._longMonthsParse,C),y!==-1?y:null)):(y=ge.call(this._longMonthsParse,C),y!==-1?y:(y=ge.call(this._shortMonthsParse,C),y!==-1?y:null))}function yp(i,a,c){var d,y,b;if(this._monthsParseExact)return wp.call(this,i,a,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){if(y=g([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp(\"^\"+this.months(y,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[d]=new RegExp(\"^\"+this.monthsShort(y,\"\").replace(\".\",\"\")+\"$\",\"i\")),!c&&!this._monthsParse[d]&&(b=\"^\"+this.months(y,\"\")+\"|^\"+this.monthsShort(y,\"\"),this._monthsParse[d]=new RegExp(b.replace(\".\",\"\"),\"i\")),c&&a===\"MMMM\"&&this._longMonthsParse[d].test(i))return d;if(c&&a===\"MMM\"&&this._shortMonthsParse[d].test(i))return d;if(!c&&this._monthsParse[d].test(i))return d}}function Xl(i,a){if(!i.isValid())return i;if(typeof a==\"string\"){if(/^\\d+$/.test(a))a=Q(a);else if(a=i.localeData().monthsParse(a),!f(a))return i}var c=a,d=i.date();return d=d<29?d:Math.min(d,Es(i.year(),c)),i._isUTC?i._d.setUTCMonth(c,d):i._d.setMonth(c,d),i}function Jl(i){return i!=null?(Xl(this,i),t.updateOffset(this,!0),this):vr(this,\"Month\")}function kp(){return Es(this.year(),this.month())}function bp(i){return this._monthsParseExact?(s(this,\"_monthsRegex\")||Zl.call(this),i?this._monthsShortStrictRegex:this._monthsShortRegex):(s(this,\"_monthsShortRegex\")||(this._monthsShortRegex=hp),this._monthsShortStrictRegex&&i?this._monthsShortStrictRegex:this._monthsShortRegex)}function xp(i){return this._monthsParseExact?(s(this,\"_monthsRegex\")||Zl.call(this),i?this._monthsStrictRegex:this._monthsRegex):(s(this,\"_monthsRegex\")||(this._monthsRegex=mp),this._monthsStrictRegex&&i?this._monthsStrictRegex:this._monthsRegex)}function Zl(){function i(U,ee){return ee.length-U.length}var a=[],c=[],d=[],y,b,C,L;for(y=0;y<12;y++)b=g([2e3,y]),C=Lt(this.monthsShort(b,\"\")),L=Lt(this.months(b,\"\")),a.push(C),c.push(L),d.push(L),d.push(C);a.sort(i),c.sort(i),d.sort(i),this._monthsRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\")}function Ep(i,a,c,d,y,b,C){var L;return i<100&&i>=0?(L=new Date(i+400,a,c,d,y,b,C),isFinite(L.getFullYear())&&L.setFullYear(i)):L=new Date(i,a,c,d,y,b,C),L}function Sr(i){var a,c;return i<100&&i>=0?(c=Array.prototype.slice.call(arguments),c[0]=i+400,a=new Date(Date.UTC.apply(null,c)),isFinite(a.getUTCFullYear())&&a.setUTCFullYear(i)):a=new Date(Date.UTC.apply(null,arguments)),a}function bi(i,a,c){var d=7+a-c,y=(7+Sr(i,0,d).getUTCDay()-a)%7;return-y+d-1}function Kl(i,a,c,d,y){var b=(7+c-d)%7,C=bi(i,d,y),L=1+7*(a-1)+b+C,U,ee;return L<=0?(U=i-1,ee=Cr(U)+L):L>Cr(i)?(U=i+1,ee=L-Cr(i)):(U=i,ee=L),{year:U,dayOfYear:ee}}function Tr(i,a,c){var d=bi(i.year(),a,c),y=Math.floor((i.dayOfYear()-d-1)/7)+1,b,C;return y<1?(C=i.year()-1,b=y+Nt(C,a,c)):y>Nt(i.year(),a,c)?(b=y-Nt(i.year(),a,c),C=i.year()+1):(C=i.year(),b=y),{week:b,year:C}}function Nt(i,a,c){var d=bi(i,a,c),y=bi(i+1,a,c);return(Cr(i)-d+y)/7}k(\"w\",[\"ww\",2],\"wo\",\"week\"),k(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),N(\"w\",O,Nn),N(\"ww\",O,ze),N(\"W\",O,Nn),N(\"WW\",O,ze),Ar([\"w\",\"ww\",\"W\",\"WW\"],function(i,a,c,d){a[d.substr(0,1)]=Q(i)});function Ap(i){return Tr(i,this._week.dow,this._week.doy).week}var Cp={dow:0,doy:6};function vp(){return this._week.dow}function Sp(){return this._week.doy}function Tp(i){var a=this.localeData().week(this);return i==null?a:this.add((i-a)*7,\"d\")}function _p(i){var a=Tr(this,1,4).week;return i==null?a:this.add((i-a)*7,\"d\")}k(\"d\",0,\"do\",\"day\"),k(\"dd\",0,0,function(i){return this.localeData().weekdaysMin(this,i)}),k(\"ddd\",0,0,function(i){return this.localeData().weekdaysShort(this,i)}),k(\"dddd\",0,0,function(i){return this.localeData().weekdays(this,i)}),k(\"e\",0,0,\"weekday\"),k(\"E\",0,0,\"isoWeekday\"),N(\"d\",O),N(\"e\",O),N(\"E\",O),N(\"dd\",function(i,a){return a.weekdaysMinRegex(i)}),N(\"ddd\",function(i,a){return a.weekdaysShortRegex(i)}),N(\"dddd\",function(i,a){return a.weekdaysRegex(i)}),Ar([\"dd\",\"ddd\",\"dddd\"],function(i,a,c,d){var y=c._locale.weekdaysParse(i,d,c._strict);y!=null?a.d=y:E(c).invalidWeekday=i}),Ar([\"d\",\"e\",\"E\"],function(i,a,c,d){a[d]=Q(i)});function Fp(i,a){return typeof i!=\"string\"?i:isNaN(i)?(i=a.weekdaysParse(i),typeof i==\"number\"?i:null):parseInt(i,10)}function Ip(i,a){return typeof i==\"string\"?a.weekdaysParse(i)%7||7:isNaN(i)?null:i}function As(i,a){return i.slice(a,7).concat(i.slice(0,a))}var Pp=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Ql=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Rp=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),Op=Er,Lp=Er,Dp=Er;function Mp(i,a){var c=r(this._weekdays)?this._weekdays:this._weekdays[i&&i!==!0&&this._weekdays.isFormat.test(a)?\"format\":\"standalone\"];return i===!0?As(c,this._week.dow):i?c[i.day()]:c}function Np(i){return i===!0?As(this._weekdaysShort,this._week.dow):i?this._weekdaysShort[i.day()]:this._weekdaysShort}function $p(i){return i===!0?As(this._weekdaysMin,this._week.dow):i?this._weekdaysMin[i.day()]:this._weekdaysMin}function Yp(i,a,c){var d,y,b,C=i.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)b=g([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(b,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(b,\"\").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(b,\"\").toLocaleLowerCase();return c?a===\"dddd\"?(y=ge.call(this._weekdaysParse,C),y!==-1?y:null):a===\"ddd\"?(y=ge.call(this._shortWeekdaysParse,C),y!==-1?y:null):(y=ge.call(this._minWeekdaysParse,C),y!==-1?y:null):a===\"dddd\"?(y=ge.call(this._weekdaysParse,C),y!==-1||(y=ge.call(this._shortWeekdaysParse,C),y!==-1)?y:(y=ge.call(this._minWeekdaysParse,C),y!==-1?y:null)):a===\"ddd\"?(y=ge.call(this._shortWeekdaysParse,C),y!==-1||(y=ge.call(this._weekdaysParse,C),y!==-1)?y:(y=ge.call(this._minWeekdaysParse,C),y!==-1?y:null)):(y=ge.call(this._minWeekdaysParse,C),y!==-1||(y=ge.call(this._weekdaysParse,C),y!==-1)?y:(y=ge.call(this._shortWeekdaysParse,C),y!==-1?y:null))}function Bp(i,a,c){var d,y,b;if(this._weekdaysParseExact)return Yp.call(this,i,a,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){if(y=g([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp(\"^\"+this.weekdays(y,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[d]=new RegExp(\"^\"+this.weekdaysShort(y,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[d]=new RegExp(\"^\"+this.weekdaysMin(y,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[d]||(b=\"^\"+this.weekdays(y,\"\")+\"|^\"+this.weekdaysShort(y,\"\")+\"|^\"+this.weekdaysMin(y,\"\"),this._weekdaysParse[d]=new RegExp(b.replace(\".\",\"\"),\"i\")),c&&a===\"dddd\"&&this._fullWeekdaysParse[d].test(i))return d;if(c&&a===\"ddd\"&&this._shortWeekdaysParse[d].test(i))return d;if(c&&a===\"dd\"&&this._minWeekdaysParse[d].test(i))return d;if(!c&&this._weekdaysParse[d].test(i))return d}}function zp(i){if(!this.isValid())return i!=null?this:NaN;var a=vr(this,\"Day\");return i!=null?(i=Fp(i,this.localeData()),this.add(i-a,\"d\")):a}function Vp(i){if(!this.isValid())return i!=null?this:NaN;var a=(this.day()+7-this.localeData()._week.dow)%7;return i==null?a:this.add(i-a,\"d\")}function Wp(i){if(!this.isValid())return i!=null?this:NaN;if(i!=null){var a=Ip(i,this.localeData());return this.day(this.day()%7?a:a-7)}else return this.day()||7}function Up(i){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Cs.call(this),i?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,\"_weekdaysRegex\")||(this._weekdaysRegex=Op),this._weekdaysStrictRegex&&i?this._weekdaysStrictRegex:this._weekdaysRegex)}function Hp(i){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Cs.call(this),i?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=Lp),this._weekdaysShortStrictRegex&&i?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function jp(i){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Cs.call(this),i?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=Dp),this._weekdaysMinStrictRegex&&i?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Cs(){function i(We,Vt){return Vt.length-We.length}var a=[],c=[],d=[],y=[],b,C,L,U,ee;for(b=0;b<7;b++)C=g([2e3,1]).day(b),L=Lt(this.weekdaysMin(C,\"\")),U=Lt(this.weekdaysShort(C,\"\")),ee=Lt(this.weekdays(C,\"\")),a.push(L),c.push(U),d.push(ee),y.push(L),y.push(U),y.push(ee);a.sort(i),c.sort(i),d.sort(i),y.sort(i),this._weekdaysRegex=new RegExp(\"^(\"+y.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\")}function vs(){return this.hours()%12||12}function qp(){return this.hours()||24}k(\"H\",[\"HH\",2],0,\"hour\"),k(\"h\",[\"hh\",2],0,vs),k(\"k\",[\"kk\",2],0,qp),k(\"hmm\",0,0,function(){return\"\"+vs.apply(this)+me(this.minutes(),2)}),k(\"hmmss\",0,0,function(){return\"\"+vs.apply(this)+me(this.minutes(),2)+me(this.seconds(),2)}),k(\"Hmm\",0,0,function(){return\"\"+this.hours()+me(this.minutes(),2)}),k(\"Hmmss\",0,0,function(){return\"\"+this.hours()+me(this.minutes(),2)+me(this.seconds(),2)});function eu(i,a){k(i,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}eu(\"a\",!0),eu(\"A\",!1);function tu(i,a){return a._meridiemParse}N(\"a\",tu),N(\"A\",tu),N(\"H\",O,bs),N(\"h\",O,Nn),N(\"k\",O,Nn),N(\"HH\",O,ze),N(\"hh\",O,ze),N(\"kk\",O,ze),N(\"hmm\",K),N(\"hmmss\",ae),N(\"Hmm\",K),N(\"Hmmss\",ae),le([\"H\",\"HH\"],Ae),le([\"k\",\"kk\"],function(i,a,c){var d=Q(i);a[Ae]=d===24?0:d}),le([\"a\",\"A\"],function(i,a,c){c._isPm=c._locale.isPM(i),c._meridiem=i}),le([\"h\",\"hh\"],function(i,a,c){a[Ae]=Q(i),E(c).bigHour=!0}),le(\"hmm\",function(i,a,c){var d=i.length-2;a[Ae]=Q(i.substr(0,d)),a[bt]=Q(i.substr(d)),E(c).bigHour=!0}),le(\"hmmss\",function(i,a,c){var d=i.length-4,y=i.length-2;a[Ae]=Q(i.substr(0,d)),a[bt]=Q(i.substr(d,2)),a[Mt]=Q(i.substr(y)),E(c).bigHour=!0}),le(\"Hmm\",function(i,a,c){var d=i.length-2;a[Ae]=Q(i.substr(0,d)),a[bt]=Q(i.substr(d))}),le(\"Hmmss\",function(i,a,c){var d=i.length-4,y=i.length-2;a[Ae]=Q(i.substr(0,d)),a[bt]=Q(i.substr(d,2)),a[Mt]=Q(i.substr(y))});function Gp(i){return(i+\"\").toLowerCase().charAt(0)===\"p\"}var Xp=/[ap]\\.?m?\\.?/i,Jp=$n(\"Hours\",!0);function Zp(i,a,c){return i>11?c?\"pm\":\"PM\":c?\"am\":\"AM\"}var nu={calendar:ie,longDateFormat:Ee,invalidDate:gt,ordinal:Qt,dayOfMonthOrdinalParse:xr,relativeTime:di,months:dp,monthsShort:ql,week:Cp,weekdays:Pp,weekdaysMin:Rp,weekdaysShort:Ql,meridiemParse:Xp},de={},_r={},Fr;function Kp(i,a){var c,d=Math.min(i.length,a.length);for(c=0;c<d;c+=1)if(i[c]!==a[c])return c;return d}function ru(i){return i&&i.toLowerCase().replace(\"_\",\"-\")}function Qp(i){for(var a=0,c,d,y,b;a<i.length;){for(b=ru(i[a]).split(\"-\"),c=b.length,d=ru(i[a+1]),d=d?d.split(\"-\"):null;c>0;){if(y=xi(b.slice(0,c).join(\"-\")),y)return y;if(d&&d.length>=c&&Kp(b,d)>=c-1)break;c--}a++}return Fr}function eg(i){return!!(i&&i.match(\"^[^/\\\\\\\\]*$\"))}function xi(i){var a=null,c;if(de[i]===void 0&&typeof Un<\"u\"&&Un&&Un.exports&&eg(i))try{a=Fr._abbr,c=require,c(\"./locale/\"+i),en(a)}catch{de[i]=null}return de[i]}function en(i,a){var c;return i&&(u(a)?c=$t(i):c=Ss(i,a),c?Fr=c:typeof console<\"u\"&&console.warn&&console.warn(\"Locale \"+i+\" not found. Did you forget to load it?\")),Fr._abbr}function Ss(i,a){if(a!==null){var c,d=nu;if(a.abbr=i,de[i]!=null)se(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),d=de[i]._config;else if(a.parentLocale!=null)if(de[a.parentLocale]!=null)d=de[a.parentLocale]._config;else if(c=xi(a.parentLocale),c!=null)d=c._config;else return _r[a.parentLocale]||(_r[a.parentLocale]=[]),_r[a.parentLocale].push({name:i,config:a}),null;return de[i]=new j(Y(d,a)),_r[i]&&_r[i].forEach(function(y){Ss(y.name,y.config)}),en(i),de[i]}else return delete de[i],null}function tg(i,a){if(a!=null){var c,d,y=nu;de[i]!=null&&de[i].parentLocale!=null?de[i].set(Y(de[i]._config,a)):(d=xi(i),d!=null&&(y=d._config),a=Y(y,a),d==null&&(a.abbr=i),c=new j(a),c.parentLocale=de[i],de[i]=c),en(i)}else de[i]!=null&&(de[i].parentLocale!=null?(de[i]=de[i].parentLocale,i===en()&&en(i)):de[i]!=null&&delete de[i]);return de[i]}function $t(i){var a;if(i&&i._locale&&i._locale._abbr&&(i=i._locale._abbr),!i)return Fr;if(!r(i)){if(a=xi(i),a)return a;i=[i]}return Qp(i)}function ng(){return V(de)}function Ts(i){var a,c=i._a;return c&&E(i).overflow===-2&&(a=c[Dt]<0||c[Dt]>11?Dt:c[Ct]<1||c[Ct]>Es(c[Oe],c[Dt])?Ct:c[Ae]<0||c[Ae]>24||c[Ae]===24&&(c[bt]!==0||c[Mt]!==0||c[yn]!==0)?Ae:c[bt]<0||c[bt]>59?bt:c[Mt]<0||c[Mt]>59?Mt:c[yn]<0||c[yn]>999?yn:-1,E(i)._overflowDayOfYear&&(a<Oe||a>Ct)&&(a=Ct),E(i)._overflowWeeks&&a===-1&&(a=sp),E(i)._overflowWeekday&&a===-1&&(a=ap),E(i).overflow=a),i}var rg=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,ig=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,og=/Z|[+-]\\d\\d(?::?\\d\\d)?/,Ei=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],_s=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],sg=/^\\/?Date\\((-?\\d+)/i,ag=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,lg={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function iu(i){var a,c,d=i._i,y=rg.exec(d)||ig.exec(d),b,C,L,U,ee=Ei.length,We=_s.length;if(y){for(E(i).iso=!0,a=0,c=ee;a<c;a++)if(Ei[a][1].exec(y[1])){C=Ei[a][0],b=Ei[a][2]!==!1;break}if(C==null){i._isValid=!1;return}if(y[3]){for(a=0,c=We;a<c;a++)if(_s[a][1].exec(y[3])){L=(y[2]||\" \")+_s[a][0];break}if(L==null){i._isValid=!1;return}}if(!b&&L!=null){i._isValid=!1;return}if(y[4])if(og.exec(y[4]))U=\"Z\";else{i._isValid=!1;return}i._f=C+(L||\"\")+(U||\"\"),Is(i)}else i._isValid=!1}function ug(i,a,c,d,y,b){var C=[cg(i),ql.indexOf(a),parseInt(c,10),parseInt(d,10),parseInt(y,10)];return b&&C.push(parseInt(b,10)),C}function cg(i){var a=parseInt(i,10);return a<=49?2e3+a:a<=999?1900+a:a}function fg(i){return i.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function dg(i,a,c){if(i){var d=Ql.indexOf(i),y=new Date(a[0],a[1],a[2]).getDay();if(d!==y)return E(c).weekdayMismatch=!0,c._isValid=!1,!1}return!0}function hg(i,a,c){if(i)return lg[i];if(a)return 0;var d=parseInt(c,10),y=d%100,b=(d-y)/100;return b*60+y}function ou(i){var a=ag.exec(fg(i._i)),c;if(a){if(c=ug(a[4],a[3],a[2],a[5],a[6],a[7]),!dg(a[1],c,i))return;i._a=c,i._tzm=hg(a[8],a[9],a[10]),i._d=Sr.apply(null,i._a),i._d.setUTCMinutes(i._d.getUTCMinutes()-i._tzm),E(i).rfc2822=!0}else i._isValid=!1}function mg(i){var a=sg.exec(i._i);if(a!==null){i._d=new Date(+a[1]);return}if(iu(i),i._isValid===!1)delete i._isValid;else return;if(ou(i),i._isValid===!1)delete i._isValid;else return;i._strict?i._isValid=!1:t.createFromInputFallback(i)}t.createFromInputFallback=J(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(i){i._d=new Date(i._i+(i._useUTC?\" UTC\":\"\"))});function Yn(i,a,c){return i??a??c}function pg(i){var a=new Date(t.now());return i._useUTC?[a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate()]:[a.getFullYear(),a.getMonth(),a.getDate()]}function Fs(i){var a,c,d=[],y,b,C;if(!i._d){for(y=pg(i),i._w&&i._a[Ct]==null&&i._a[Dt]==null&&gg(i),i._dayOfYear!=null&&(C=Yn(i._a[Oe],y[Oe]),(i._dayOfYear>Cr(C)||i._dayOfYear===0)&&(E(i)._overflowDayOfYear=!0),c=Sr(C,0,i._dayOfYear),i._a[Dt]=c.getUTCMonth(),i._a[Ct]=c.getUTCDate()),a=0;a<3&&i._a[a]==null;++a)i._a[a]=d[a]=y[a];for(;a<7;a++)i._a[a]=d[a]=i._a[a]==null?a===2?1:0:i._a[a];i._a[Ae]===24&&i._a[bt]===0&&i._a[Mt]===0&&i._a[yn]===0&&(i._nextDay=!0,i._a[Ae]=0),i._d=(i._useUTC?Sr:Ep).apply(null,d),b=i._useUTC?i._d.getUTCDay():i._d.getDay(),i._tzm!=null&&i._d.setUTCMinutes(i._d.getUTCMinutes()-i._tzm),i._nextDay&&(i._a[Ae]=24),i._w&&typeof i._w.d<\"u\"&&i._w.d!==b&&(E(i).weekdayMismatch=!0)}}function gg(i){var a,c,d,y,b,C,L,U,ee;a=i._w,a.GG!=null||a.W!=null||a.E!=null?(b=1,C=4,c=Yn(a.GG,i._a[Oe],Tr(ce(),1,4).year),d=Yn(a.W,1),y=Yn(a.E,1),(y<1||y>7)&&(U=!0)):(b=i._locale._week.dow,C=i._locale._week.doy,ee=Tr(ce(),b,C),c=Yn(a.gg,i._a[Oe],ee.year),d=Yn(a.w,ee.week),a.d!=null?(y=a.d,(y<0||y>6)&&(U=!0)):a.e!=null?(y=a.e+b,(a.e<0||a.e>6)&&(U=!0)):y=b),d<1||d>Nt(c,b,C)?E(i)._overflowWeeks=!0:U!=null?E(i)._overflowWeekday=!0:(L=Kl(c,d,y,b,C),i._a[Oe]=L.year,i._dayOfYear=L.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function Is(i){if(i._f===t.ISO_8601){iu(i);return}if(i._f===t.RFC_2822){ou(i);return}i._a=[],E(i).empty=!0;var a=\"\"+i._i,c,d,y,b,C,L=a.length,U=0,ee,We;for(y=gn(i._f,i._locale).match(Xe)||[],We=y.length,c=0;c<We;c++)b=y[c],d=(a.match(rp(b,i))||[])[0],d&&(C=a.substr(0,a.indexOf(d)),C.length>0&&E(i).unusedInput.push(C),a=a.slice(a.indexOf(d)+d.length),U+=d.length),Pe[b]?(d?E(i).empty=!1:E(i).unusedTokens.push(b),op(b,d,i)):i._strict&&!d&&E(i).unusedTokens.push(b);E(i).charsLeftOver=L-U,a.length>0&&E(i).unusedInput.push(a),i._a[Ae]<=12&&E(i).bigHour===!0&&i._a[Ae]>0&&(E(i).bigHour=void 0),E(i).parsedDateParts=i._a.slice(0),E(i).meridiem=i._meridiem,i._a[Ae]=wg(i._locale,i._a[Ae],i._meridiem),ee=E(i).era,ee!==null&&(i._a[Oe]=i._locale.erasConvertYear(ee,i._a[Oe])),Fs(i),Ts(i)}function wg(i,a,c){var d;return c==null?a:i.meridiemHour!=null?i.meridiemHour(a,c):(i.isPM!=null&&(d=i.isPM(c),d&&a<12&&(a+=12),!d&&a===12&&(a=0)),a)}function yg(i){var a,c,d,y,b,C,L=!1,U=i._f.length;if(U===0){E(i).invalidFormat=!0,i._d=new Date(NaN);return}for(y=0;y<U;y++)b=0,C=!1,a=z({},i),i._useUTC!=null&&(a._useUTC=i._useUTC),a._f=i._f[y],Is(a),T(a)&&(C=!0),b+=E(a).charsLeftOver,b+=E(a).unusedTokens.length*10,E(a).score=b,L?b<d&&(d=b,c=a):(d==null||b<d||C)&&(d=b,c=a,C&&(L=!0));p(i,c||a)}function kg(i){if(!i._d){var a=Mn(i._i),c=a.day===void 0?a.date:a.day;i._a=m([a.year,a.month,c,a.hour,a.minute,a.second,a.millisecond],function(d){return d&&parseInt(d,10)}),Fs(i)}}function bg(i){var a=new H(Ts(su(i)));return a._nextDay&&(a.add(1,\"d\"),a._nextDay=void 0),a}function su(i){var a=i._i,c=i._f;return i._locale=i._locale||$t(i._l),a===null||c===void 0&&a===\"\"?A({nullInput:!0}):(typeof a==\"string\"&&(i._i=a=i._locale.preparse(a)),v(a)?new H(Ts(a)):(h(a)?i._d=a:r(c)?yg(i):c?Is(i):xg(i),T(i)||(i._d=null),i))}function xg(i){var a=i._i;u(a)?i._d=new Date(t.now()):h(a)?i._d=new Date(a.valueOf()):typeof a==\"string\"?mg(i):r(a)?(i._a=m(a.slice(0),function(c){return parseInt(c,10)}),Fs(i)):o(a)?kg(i):f(a)?i._d=new Date(a):t.createFromInputFallback(i)}function au(i,a,c,d,y){var b={};return(a===!0||a===!1)&&(d=a,a=void 0),(c===!0||c===!1)&&(d=c,c=void 0),(o(i)&&l(i)||r(i)&&i.length===0)&&(i=void 0),b._isAMomentObject=!0,b._useUTC=b._isUTC=y,b._l=c,b._i=i,b._f=a,b._strict=d,bg(b)}function ce(i,a,c,d){return au(i,a,c,d,!1)}var Eg=J(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var i=ce.apply(null,arguments);return this.isValid()&&i.isValid()?i<this?this:i:A()}),Ag=J(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var i=ce.apply(null,arguments);return this.isValid()&&i.isValid()?i>this?this:i:A()});function lu(i,a){var c,d;if(a.length===1&&r(a[0])&&(a=a[0]),!a.length)return ce();for(c=a[0],d=1;d<a.length;++d)(!a[d].isValid()||a[d][i](c))&&(c=a[d]);return c}function Cg(){var i=[].slice.call(arguments,0);return lu(\"isBefore\",i)}function vg(){var i=[].slice.call(arguments,0);return lu(\"isAfter\",i)}var Sg=function(){return Date.now?Date.now():+new Date},Ir=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Tg(i){var a,c=!1,d,y=Ir.length;for(a in i)if(s(i,a)&&!(ge.call(Ir,a)!==-1&&(i[a]==null||!isNaN(i[a]))))return!1;for(d=0;d<y;++d)if(i[Ir[d]]){if(c)return!1;parseFloat(i[Ir[d]])!==Q(i[Ir[d]])&&(c=!0)}return!0}function _g(){return this._isValid}function Fg(){return xt(NaN)}function Ai(i){var a=Mn(i),c=a.year||0,d=a.quarter||0,y=a.month||0,b=a.week||a.isoWeek||0,C=a.day||0,L=a.hour||0,U=a.minute||0,ee=a.second||0,We=a.millisecond||0;this._isValid=Tg(a),this._milliseconds=+We+ee*1e3+U*6e4+L*1e3*60*60,this._days=+C+b*7,this._months=+y+d*3+c*12,this._data={},this._locale=$t(),this._bubble()}function Ci(i){return i instanceof Ai}function Ps(i){return i<0?Math.round(-1*i)*-1:Math.round(i)}function Ig(i,a,c){var d=Math.min(i.length,a.length),y=Math.abs(i.length-a.length),b=0,C;for(C=0;C<d;C++)(c&&i[C]!==a[C]||!c&&Q(i[C])!==Q(a[C]))&&b++;return b+y}function uu(i,a){k(i,0,0,function(){var c=this.utcOffset(),d=\"+\";return c<0&&(c=-c,d=\"-\"),d+me(~~(c/60),2)+a+me(~~c%60,2)})}uu(\"Z\",\":\"),uu(\"ZZ\",\"\"),N(\"Z\",yt),N(\"ZZ\",yt),le([\"Z\",\"ZZ\"],function(i,a,c){c._useUTC=!0,c._tzm=Rs(yt,i)});var Pg=/([\\+\\-]|\\d\\d)/gi;function Rs(i,a){var c=(a||\"\").match(i),d,y,b;return c===null?null:(d=c[c.length-1]||[],y=(d+\"\").match(Pg)||[\"-\",0,0],b=+(y[1]*60)+Q(y[2]),b===0?0:y[0]===\"+\"?b:-b)}function Os(i,a){var c,d;return a._isUTC?(c=a.clone(),d=(v(i)||h(i)?i.valueOf():ce(i).valueOf())-c.valueOf(),c._d.setTime(c._d.valueOf()+d),t.updateOffset(c,!1),c):ce(i).local()}function Ls(i){return-Math.round(i._d.getTimezoneOffset())}t.updateOffset=function(){};function Rg(i,a,c){var d=this._offset||0,y;if(!this.isValid())return i!=null?this:NaN;if(i!=null){if(typeof i==\"string\"){if(i=Rs(yt,i),i===null)return this}else Math.abs(i)<16&&!c&&(i=i*60);return!this._isUTC&&a&&(y=Ls(this)),this._offset=i,this._isUTC=!0,y!=null&&this.add(y,\"m\"),d!==i&&(!a||this._changeInProgress?hu(this,xt(i-d,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this}else return this._isUTC?d:Ls(this)}function Og(i,a){return i!=null?(typeof i!=\"string\"&&(i=-i),this.utcOffset(i,a),this):-this.utcOffset()}function Lg(i){return this.utcOffset(0,i)}function Dg(i){return this._isUTC&&(this.utcOffset(0,i),this._isUTC=!1,i&&this.subtract(Ls(this),\"m\")),this}function Mg(){if(this._tzm!=null)this.utcOffset(this._tzm,!1,!0);else if(typeof this._i==\"string\"){var i=Rs(Ve,this._i);i!=null?this.utcOffset(i):this.utcOffset(0,!0)}return this}function Ng(i){return this.isValid()?(i=i?ce(i).utcOffset():0,(this.utcOffset()-i)%60===0):!1}function $g(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Yg(){if(!u(this._isDSTShifted))return this._isDSTShifted;var i={},a;return z(i,this),i=su(i),i._a?(a=i._isUTC?g(i._a):ce(i._a),this._isDSTShifted=this.isValid()&&Ig(i._a,a.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Bg(){return this.isValid()?!this._isUTC:!1}function zg(){return this.isValid()?this._isUTC:!1}function cu(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Vg=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,Wg=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function xt(i,a){var c=i,d=null,y,b,C;return Ci(i)?c={ms:i._milliseconds,d:i._days,M:i._months}:f(i)||!isNaN(+i)?(c={},a?c[a]=+i:c.milliseconds=+i):(d=Vg.exec(i))?(y=d[1]===\"-\"?-1:1,c={y:0,d:Q(d[Ct])*y,h:Q(d[Ae])*y,m:Q(d[bt])*y,s:Q(d[Mt])*y,ms:Q(Ps(d[yn]*1e3))*y}):(d=Wg.exec(i))?(y=d[1]===\"-\"?-1:1,c={y:kn(d[2],y),M:kn(d[3],y),w:kn(d[4],y),d:kn(d[5],y),h:kn(d[6],y),m:kn(d[7],y),s:kn(d[8],y)}):c==null?c={}:typeof c==\"object\"&&(\"from\"in c||\"to\"in c)&&(C=Ug(ce(c.from),ce(c.to)),c={},c.ms=C.milliseconds,c.M=C.months),b=new Ai(c),Ci(i)&&s(i,\"_locale\")&&(b._locale=i._locale),Ci(i)&&s(i,\"_isValid\")&&(b._isValid=i._isValid),b}xt.fn=Ai.prototype,xt.invalid=Fg;function kn(i,a){var c=i&&parseFloat(i.replace(\",\",\".\"));return(isNaN(c)?0:c)*a}function fu(i,a){var c={};return c.months=a.month()-i.month()+(a.year()-i.year())*12,i.clone().add(c.months,\"M\").isAfter(a)&&--c.months,c.milliseconds=+a-+i.clone().add(c.months,\"M\"),c}function Ug(i,a){var c;return i.isValid()&&a.isValid()?(a=Os(a,i),i.isBefore(a)?c=fu(i,a):(c=fu(a,i),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function du(i,a){return function(c,d){var y,b;return d!==null&&!isNaN(+d)&&(se(a,\"moment().\"+a+\"(period, number) is deprecated. Please use moment().\"+a+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),b=c,c=d,d=b),y=xt(c,d),hu(this,y,i),this}}function hu(i,a,c,d){var y=a._milliseconds,b=Ps(a._days),C=Ps(a._months);i.isValid()&&(d=d??!0,C&&Xl(i,vr(i,\"Month\")+C*c),b&&jl(i,\"Date\",vr(i,\"Date\")+b*c),y&&i._d.setTime(i._d.valueOf()+y*c),d&&t.updateOffset(i,b||C))}var Hg=du(1,\"add\"),jg=du(-1,\"subtract\");function mu(i){return typeof i==\"string\"||i instanceof String}function qg(i){return v(i)||h(i)||mu(i)||f(i)||Xg(i)||Gg(i)||i===null||i===void 0}function Gg(i){var a=o(i)&&!l(i),c=!1,d=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],y,b,C=d.length;for(y=0;y<C;y+=1)b=d[y],c=c||s(i,b);return a&&c}function Xg(i){var a=r(i),c=!1;return a&&(c=i.filter(function(d){return!f(d)&&mu(i)}).length===0),a&&c}function Jg(i){var a=o(i)&&!l(i),c=!1,d=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"],y,b;for(y=0;y<d.length;y+=1)b=d[y],c=c||s(i,b);return a&&c}function Zg(i,a){var c=i.diff(a,\"days\",!0);return c<-6?\"sameElse\":c<-1?\"lastWeek\":c<0?\"lastDay\":c<1?\"sameDay\":c<2?\"nextDay\":c<7?\"nextWeek\":\"sameElse\"}function Kg(i,a){arguments.length===1&&(arguments[0]?qg(arguments[0])?(i=arguments[0],a=void 0):Jg(arguments[0])&&(a=arguments[0],i=void 0):(i=void 0,a=void 0));var c=i||ce(),d=Os(c,this).startOf(\"day\"),y=t.calendarFormat(this,d)||\"sameElse\",b=a&&(ue(a[y])?a[y].call(this,c):a[y]);return this.format(b||this.localeData().calendar(y,this,ce(c)))}function Qg(){return new H(this)}function e0(i,a){var c=v(i)?i:ce(i);return this.isValid()&&c.isValid()?(a=Be(a)||\"millisecond\",a===\"millisecond\"?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(a).valueOf()):!1}function t0(i,a){var c=v(i)?i:ce(i);return this.isValid()&&c.isValid()?(a=Be(a)||\"millisecond\",a===\"millisecond\"?this.valueOf()<c.valueOf():this.clone().endOf(a).valueOf()<c.valueOf()):!1}function n0(i,a,c,d){var y=v(i)?i:ce(i),b=v(a)?a:ce(a);return this.isValid()&&y.isValid()&&b.isValid()?(d=d||\"()\",(d[0]===\"(\"?this.isAfter(y,c):!this.isBefore(y,c))&&(d[1]===\")\"?this.isBefore(b,c):!this.isAfter(b,c))):!1}function r0(i,a){var c=v(i)?i:ce(i),d;return this.isValid()&&c.isValid()?(a=Be(a)||\"millisecond\",a===\"millisecond\"?this.valueOf()===c.valueOf():(d=c.valueOf(),this.clone().startOf(a).valueOf()<=d&&d<=this.clone().endOf(a).valueOf())):!1}function i0(i,a){return this.isSame(i,a)||this.isAfter(i,a)}function o0(i,a){return this.isSame(i,a)||this.isBefore(i,a)}function s0(i,a,c){var d,y,b;if(!this.isValid())return NaN;if(d=Os(i,this),!d.isValid())return NaN;switch(y=(d.utcOffset()-this.utcOffset())*6e4,a=Be(a),a){case\"year\":b=vi(this,d)/12;break;case\"month\":b=vi(this,d);break;case\"quarter\":b=vi(this,d)/3;break;case\"second\":b=(this-d)/1e3;break;case\"minute\":b=(this-d)/6e4;break;case\"hour\":b=(this-d)/36e5;break;case\"day\":b=(this-d-y)/864e5;break;case\"week\":b=(this-d-y)/6048e5;break;default:b=this-d}return c?b:lt(b)}function vi(i,a){if(i.date()<a.date())return-vi(a,i);var c=(a.year()-i.year())*12+(a.month()-i.month()),d=i.clone().add(c,\"months\"),y,b;return a-d<0?(y=i.clone().add(c-1,\"months\"),b=(a-d)/(d-y)):(y=i.clone().add(c+1,\"months\"),b=(a-d)/(y-d)),-(c+b)||0}t.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",t.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";function a0(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function l0(i){if(!this.isValid())return null;var a=i!==!0,c=a?this.clone().utc():this;return c.year()<0||c.year()>9999?Kt(c,a?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):ue(Date.prototype.toISOString)?a?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace(\"Z\",Kt(c,\"Z\")):Kt(c,a?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")}function u0(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var i=\"moment\",a=\"\",c,d,y,b;return this.isLocal()||(i=this.utcOffset()===0?\"moment.utc\":\"moment.parseZone\",a=\"Z\"),c=\"[\"+i+'(\"]',d=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",y=\"-MM-DD[T]HH:mm:ss.SSS\",b=a+'[\")]',this.format(c+d+y+b)}function c0(i){i||(i=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var a=Kt(this,i);return this.localeData().postformat(a)}function f0(i,a){return this.isValid()&&(v(i)&&i.isValid()||ce(i).isValid())?xt({to:this,from:i}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()}function d0(i){return this.from(ce(),i)}function h0(i,a){return this.isValid()&&(v(i)&&i.isValid()||ce(i).isValid())?xt({from:this,to:i}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()}function m0(i){return this.to(ce(),i)}function pu(i){var a;return i===void 0?this._locale._abbr:(a=$t(i),a!=null&&(this._locale=a),this)}var gu=J(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(i){return i===void 0?this.localeData():this.locale(i)});function wu(){return this._locale}var Si=1e3,Bn=60*Si,Ti=60*Bn,yu=(365*400+97)*24*Ti;function zn(i,a){return(i%a+a)%a}function ku(i,a,c){return i<100&&i>=0?new Date(i+400,a,c)-yu:new Date(i,a,c).valueOf()}function bu(i,a,c){return i<100&&i>=0?Date.UTC(i+400,a,c)-yu:Date.UTC(i,a,c)}function p0(i){var a,c;if(i=Be(i),i===void 0||i===\"millisecond\"||!this.isValid())return this;switch(c=this._isUTC?bu:ku,i){case\"year\":a=c(this.year(),0,1);break;case\"quarter\":a=c(this.year(),this.month()-this.month()%3,1);break;case\"month\":a=c(this.year(),this.month(),1);break;case\"week\":a=c(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":a=c(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":a=c(this.year(),this.month(),this.date());break;case\"hour\":a=this._d.valueOf(),a-=zn(a+(this._isUTC?0:this.utcOffset()*Bn),Ti);break;case\"minute\":a=this._d.valueOf(),a-=zn(a,Bn);break;case\"second\":a=this._d.valueOf(),a-=zn(a,Si);break}return this._d.setTime(a),t.updateOffset(this,!0),this}function g0(i){var a,c;if(i=Be(i),i===void 0||i===\"millisecond\"||!this.isValid())return this;switch(c=this._isUTC?bu:ku,i){case\"year\":a=c(this.year()+1,0,1)-1;break;case\"quarter\":a=c(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":a=c(this.year(),this.month()+1,1)-1;break;case\"week\":a=c(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":a=c(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":a=c(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":a=this._d.valueOf(),a+=Ti-zn(a+(this._isUTC?0:this.utcOffset()*Bn),Ti)-1;break;case\"minute\":a=this._d.valueOf(),a+=Bn-zn(a,Bn)-1;break;case\"second\":a=this._d.valueOf(),a+=Si-zn(a,Si)-1;break}return this._d.setTime(a),t.updateOffset(this,!0),this}function w0(){return this._d.valueOf()-(this._offset||0)*6e4}function y0(){return Math.floor(this.valueOf()/1e3)}function k0(){return new Date(this.valueOf())}function b0(){var i=this;return[i.year(),i.month(),i.date(),i.hour(),i.minute(),i.second(),i.millisecond()]}function x0(){var i=this;return{years:i.year(),months:i.month(),date:i.date(),hours:i.hours(),minutes:i.minutes(),seconds:i.seconds(),milliseconds:i.milliseconds()}}function E0(){return this.isValid()?this.toISOString():null}function A0(){return T(this)}function C0(){return p({},E(this))}function v0(){return E(this).overflow}function S0(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}k(\"N\",0,0,\"eraAbbr\"),k(\"NN\",0,0,\"eraAbbr\"),k(\"NNN\",0,0,\"eraAbbr\"),k(\"NNNN\",0,0,\"eraName\"),k(\"NNNNN\",0,0,\"eraNarrow\"),k(\"y\",[\"y\",1],\"yo\",\"eraYear\"),k(\"y\",[\"yy\",2],0,\"eraYear\"),k(\"y\",[\"yyy\",3],0,\"eraYear\"),k(\"y\",[\"yyyy\",4],0,\"eraYear\"),N(\"N\",Ds),N(\"NN\",Ds),N(\"NNN\",Ds),N(\"NNNN\",N0),N(\"NNNNN\",$0),le([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],function(i,a,c,d){var y=c._locale.erasParse(i,d,c._strict);y?E(c).era=y:E(c).invalidEra=i}),N(\"y\",at),N(\"yy\",at),N(\"yyy\",at),N(\"yyyy\",at),N(\"yo\",Y0),le([\"y\",\"yy\",\"yyy\",\"yyyy\"],Oe),le([\"yo\"],function(i,a,c,d){var y;c._locale._eraYearOrdinalRegex&&(y=i.match(c._locale._eraYearOrdinalRegex)),c._locale.eraYearOrdinalParse?a[Oe]=c._locale.eraYearOrdinalParse(i,y):a[Oe]=parseInt(i,10)});function T0(i,a){var c,d,y,b=this._eras||$t(\"en\")._eras;for(c=0,d=b.length;c<d;++c){switch(typeof b[c].since){case\"string\":y=t(b[c].since).startOf(\"day\"),b[c].since=y.valueOf();break}switch(typeof b[c].until){case\"undefined\":b[c].until=1/0;break;case\"string\":y=t(b[c].until).startOf(\"day\").valueOf(),b[c].until=y.valueOf();break}}return b}function _0(i,a,c){var d,y,b=this.eras(),C,L,U;for(i=i.toUpperCase(),d=0,y=b.length;d<y;++d)if(C=b[d].name.toUpperCase(),L=b[d].abbr.toUpperCase(),U=b[d].narrow.toUpperCase(),c)switch(a){case\"N\":case\"NN\":case\"NNN\":if(L===i)return b[d];break;case\"NNNN\":if(C===i)return b[d];break;case\"NNNNN\":if(U===i)return b[d];break}else if([C,L,U].indexOf(i)>=0)return b[d]}function F0(i,a){var c=i.since<=i.until?1:-1;return a===void 0?t(i.since).year():t(i.since).year()+(a-i.offset)*c}function I0(){var i,a,c,d=this.localeData().eras();for(i=0,a=d.length;i<a;++i)if(c=this.clone().startOf(\"day\").valueOf(),d[i].since<=c&&c<=d[i].until||d[i].until<=c&&c<=d[i].since)return d[i].name;return\"\"}function P0(){var i,a,c,d=this.localeData().eras();for(i=0,a=d.length;i<a;++i)if(c=this.clone().startOf(\"day\").valueOf(),d[i].since<=c&&c<=d[i].until||d[i].until<=c&&c<=d[i].since)return d[i].narrow;return\"\"}function R0(){var i,a,c,d=this.localeData().eras();for(i=0,a=d.length;i<a;++i)if(c=this.clone().startOf(\"day\").valueOf(),d[i].since<=c&&c<=d[i].until||d[i].until<=c&&c<=d[i].since)return d[i].abbr;return\"\"}function O0(){var i,a,c,d,y=this.localeData().eras();for(i=0,a=y.length;i<a;++i)if(c=y[i].since<=y[i].until?1:-1,d=this.clone().startOf(\"day\").valueOf(),y[i].since<=d&&d<=y[i].until||y[i].until<=d&&d<=y[i].since)return(this.year()-t(y[i].since).year())*c+y[i].offset;return this.year()}function L0(i){return s(this,\"_erasNameRegex\")||Ms.call(this),i?this._erasNameRegex:this._erasRegex}function D0(i){return s(this,\"_erasAbbrRegex\")||Ms.call(this),i?this._erasAbbrRegex:this._erasRegex}function M0(i){return s(this,\"_erasNarrowRegex\")||Ms.call(this),i?this._erasNarrowRegex:this._erasRegex}function Ds(i,a){return a.erasAbbrRegex(i)}function N0(i,a){return a.erasNameRegex(i)}function $0(i,a){return a.erasNarrowRegex(i)}function Y0(i,a){return a._eraYearOrdinalRegex||at}function Ms(){var i=[],a=[],c=[],d=[],y,b,C,L,U,ee=this.eras();for(y=0,b=ee.length;y<b;++y)C=Lt(ee[y].name),L=Lt(ee[y].abbr),U=Lt(ee[y].narrow),a.push(C),i.push(L),c.push(U),d.push(C),d.push(L),d.push(U);this._erasRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\")}k(0,[\"gg\",2],0,function(){return this.weekYear()%100}),k(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100});function _i(i,a){k(0,[i,i.length],0,a)}_i(\"gggg\",\"weekYear\"),_i(\"ggggg\",\"weekYear\"),_i(\"GGGG\",\"isoWeekYear\"),_i(\"GGGGG\",\"isoWeekYear\"),N(\"G\",At),N(\"g\",At),N(\"GG\",O,ze),N(\"gg\",O,ze),N(\"GGGG\",wt,S),N(\"gggg\",wt,S),N(\"GGGGG\",Je,R),N(\"ggggg\",Je,R),Ar([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(i,a,c,d){a[d.substr(0,2)]=Q(i)}),Ar([\"gg\",\"GG\"],function(i,a,c,d){a[d]=t.parseTwoDigitYear(i)});function B0(i){return xu.call(this,i,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function z0(i){return xu.call(this,i,this.isoWeek(),this.isoWeekday(),1,4)}function V0(){return Nt(this.year(),1,4)}function W0(){return Nt(this.isoWeekYear(),1,4)}function U0(){var i=this.localeData()._week;return Nt(this.year(),i.dow,i.doy)}function H0(){var i=this.localeData()._week;return Nt(this.weekYear(),i.dow,i.doy)}function xu(i,a,c,d,y){var b;return i==null?Tr(this,d,y).year:(b=Nt(i,d,y),a>b&&(a=b),j0.call(this,i,a,c,d,y))}function j0(i,a,c,d,y){var b=Kl(i,a,c,d,y),C=Sr(b.year,0,b.dayOfYear);return this.year(C.getUTCFullYear()),this.month(C.getUTCMonth()),this.date(C.getUTCDate()),this}k(\"Q\",0,\"Qo\",\"quarter\"),N(\"Q\",gi),le(\"Q\",function(i,a){a[Dt]=(Q(i)-1)*3});function q0(i){return i==null?Math.ceil((this.month()+1)/3):this.month((i-1)*3+this.month()%3)}k(\"D\",[\"DD\",2],\"Do\",\"date\"),N(\"D\",O,Nn),N(\"DD\",O,ze),N(\"Do\",function(i,a){return i?a._dayOfMonthOrdinalParse||a._ordinalParse:a._dayOfMonthOrdinalParseLenient}),le([\"D\",\"DD\"],Ct),le(\"Do\",function(i,a){a[Ct]=Q(i.match(O)[0])});var Eu=$n(\"Date\",!0);k(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),N(\"DDD\",Re),N(\"DDDD\",wi),le([\"DDD\",\"DDDD\"],function(i,a,c){c._dayOfYear=Q(i)});function G0(i){var a=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return i==null?a:this.add(i-a,\"d\")}k(\"m\",[\"mm\",2],0,\"minute\"),N(\"m\",O,bs),N(\"mm\",O,ze),le([\"m\",\"mm\"],bt);var X0=$n(\"Minutes\",!1);k(\"s\",[\"ss\",2],0,\"second\"),N(\"s\",O,bs),N(\"ss\",O,ze),le([\"s\",\"ss\"],Mt);var J0=$n(\"Seconds\",!1);k(\"S\",0,0,function(){return~~(this.millisecond()/100)}),k(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),k(0,[\"SSS\",3],0,\"millisecond\"),k(0,[\"SSSS\",4],0,function(){return this.millisecond()*10}),k(0,[\"SSSSS\",5],0,function(){return this.millisecond()*100}),k(0,[\"SSSSSS\",6],0,function(){return this.millisecond()*1e3}),k(0,[\"SSSSSSS\",7],0,function(){return this.millisecond()*1e4}),k(0,[\"SSSSSSSS\",8],0,function(){return this.millisecond()*1e5}),k(0,[\"SSSSSSSSS\",9],0,function(){return this.millisecond()*1e6}),N(\"S\",Re,gi),N(\"SS\",Re,ze),N(\"SSS\",Re,wi);var tn,Au;for(tn=\"SSSS\";tn.length<=9;tn+=\"S\")N(tn,at);function Z0(i,a){a[yn]=Q((\"0.\"+i)*1e3)}for(tn=\"S\";tn.length<=9;tn+=\"S\")le(tn,Z0);Au=$n(\"Milliseconds\",!1),k(\"z\",0,0,\"zoneAbbr\"),k(\"zz\",0,0,\"zoneName\");function K0(){return this._isUTC?\"UTC\":\"\"}function Q0(){return this._isUTC?\"Coordinated Universal Time\":\"\"}var P=H.prototype;P.add=Hg,P.calendar=Kg,P.clone=Qg,P.diff=s0,P.endOf=g0,P.format=c0,P.from=f0,P.fromNow=d0,P.to=h0,P.toNow=m0,P.get=up,P.invalidAt=v0,P.isAfter=e0,P.isBefore=t0,P.isBetween=n0,P.isSame=r0,P.isSameOrAfter=i0,P.isSameOrBefore=o0,P.isValid=A0,P.lang=gu,P.locale=pu,P.localeData=wu,P.max=Ag,P.min=Eg,P.parsingFlags=C0,P.set=cp,P.startOf=p0,P.subtract=jg,P.toArray=b0,P.toObject=x0,P.toDate=k0,P.toISOString=l0,P.inspect=u0,typeof Symbol<\"u\"&&Symbol.for!=null&&(P[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),P.toJSON=E0,P.toString=a0,P.unix=y0,P.valueOf=w0,P.creationData=S0,P.eraName=I0,P.eraNarrow=P0,P.eraAbbr=R0,P.eraYear=O0,P.year=Hl,P.isLeapYear=lp,P.weekYear=B0,P.isoWeekYear=z0,P.quarter=P.quarters=q0,P.month=Jl,P.daysInMonth=kp,P.week=P.weeks=Tp,P.isoWeek=P.isoWeeks=_p,P.weeksInYear=U0,P.weeksInWeekYear=H0,P.isoWeeksInYear=V0,P.isoWeeksInISOWeekYear=W0,P.date=Eu,P.day=P.days=zp,P.weekday=Vp,P.isoWeekday=Wp,P.dayOfYear=G0,P.hour=P.hours=Jp,P.minute=P.minutes=X0,P.second=P.seconds=J0,P.millisecond=P.milliseconds=Au,P.utcOffset=Rg,P.utc=Lg,P.local=Dg,P.parseZone=Mg,P.hasAlignedHourOffset=Ng,P.isDST=$g,P.isLocal=Bg,P.isUtcOffset=zg,P.isUtc=cu,P.isUTC=cu,P.zoneAbbr=K0,P.zoneName=Q0,P.dates=J(\"dates accessor is deprecated. Use date instead.\",Eu),P.months=J(\"months accessor is deprecated. Use month instead\",Jl),P.years=J(\"years accessor is deprecated. Use year instead\",Hl),P.zone=J(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",Og),P.isDSTShifted=J(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",Yg);function ew(i){return ce(i*1e3)}function tw(){return ce.apply(null,arguments).parseZone()}function Cu(i){return i}var oe=j.prototype;oe.calendar=he,oe.longDateFormat=wn,oe.invalidDate=Ot,oe.ordinal=ws,oe.preparse=Cu,oe.postformat=Cu,oe.relativeTime=hi,oe.pastFuture=mi,oe.set=re,oe.eras=T0,oe.erasParse=_0,oe.erasConvertYear=F0,oe.erasAbbrRegex=D0,oe.erasNameRegex=L0,oe.erasNarrowRegex=M0,oe.months=pp,oe.monthsShort=gp,oe.monthsParse=yp,oe.monthsRegex=xp,oe.monthsShortRegex=bp,oe.week=Ap,oe.firstDayOfYear=Sp,oe.firstDayOfWeek=vp,oe.weekdays=Mp,oe.weekdaysMin=$p,oe.weekdaysShort=Np,oe.weekdaysParse=Bp,oe.weekdaysRegex=Up,oe.weekdaysShortRegex=Hp,oe.weekdaysMinRegex=jp,oe.isPM=Gp,oe.meridiem=Zp;function Fi(i,a,c,d){var y=$t(),b=g().set(d,a);return y[c](b,i)}function vu(i,a,c){if(f(i)&&(a=i,i=void 0),i=i||\"\",a!=null)return Fi(i,a,c,\"month\");var d,y=[];for(d=0;d<12;d++)y[d]=Fi(i,d,c,\"month\");return y}function Ns(i,a,c,d){typeof i==\"boolean\"?(f(a)&&(c=a,a=void 0),a=a||\"\"):(a=i,c=a,i=!1,f(a)&&(c=a,a=void 0),a=a||\"\");var y=$t(),b=i?y._week.dow:0,C,L=[];if(c!=null)return Fi(a,(c+b)%7,d,\"day\");for(C=0;C<7;C++)L[C]=Fi(a,(C+b)%7,d,\"day\");return L}function nw(i,a){return vu(i,a,\"months\")}function rw(i,a){return vu(i,a,\"monthsShort\")}function iw(i,a,c){return Ns(i,a,c,\"weekdays\")}function ow(i,a,c){return Ns(i,a,c,\"weekdaysShort\")}function sw(i,a,c){return Ns(i,a,c,\"weekdaysMin\")}en(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(i){var a=i%10,c=Q(i%100/10)===1?\"th\":a===1?\"st\":a===2?\"nd\":a===3?\"rd\":\"th\";return i+c}}),t.lang=J(\"moment.lang is deprecated. Use moment.locale instead.\",en),t.langData=J(\"moment.langData is deprecated. Use moment.localeData instead.\",$t);var Yt=Math.abs;function aw(){var i=this._data;return this._milliseconds=Yt(this._milliseconds),this._days=Yt(this._days),this._months=Yt(this._months),i.milliseconds=Yt(i.milliseconds),i.seconds=Yt(i.seconds),i.minutes=Yt(i.minutes),i.hours=Yt(i.hours),i.months=Yt(i.months),i.years=Yt(i.years),this}function Su(i,a,c,d){var y=xt(a,c);return i._milliseconds+=d*y._milliseconds,i._days+=d*y._days,i._months+=d*y._months,i._bubble()}function lw(i,a){return Su(this,i,a,1)}function uw(i,a){return Su(this,i,a,-1)}function Tu(i){return i<0?Math.floor(i):Math.ceil(i)}function cw(){var i=this._milliseconds,a=this._days,c=this._months,d=this._data,y,b,C,L,U;return i>=0&&a>=0&&c>=0||i<=0&&a<=0&&c<=0||(i+=Tu($s(c)+a)*864e5,a=0,c=0),d.milliseconds=i%1e3,y=lt(i/1e3),d.seconds=y%60,b=lt(y/60),d.minutes=b%60,C=lt(b/60),d.hours=C%24,a+=lt(C/24),U=lt(_u(a)),c+=U,a-=Tu($s(U)),L=lt(c/12),c%=12,d.days=a,d.months=c,d.years=L,this}function _u(i){return i*4800/146097}function $s(i){return i*146097/4800}function fw(i){if(!this.isValid())return NaN;var a,c,d=this._milliseconds;if(i=Be(i),i===\"month\"||i===\"quarter\"||i===\"year\")switch(a=this._days+d/864e5,c=this._months+_u(a),i){case\"month\":return c;case\"quarter\":return c/3;case\"year\":return c/12}else switch(a=this._days+Math.round($s(this._months)),i){case\"week\":return a/7+d/6048e5;case\"day\":return a+d/864e5;case\"hour\":return a*24+d/36e5;case\"minute\":return a*1440+d/6e4;case\"second\":return a*86400+d/1e3;case\"millisecond\":return Math.floor(a*864e5)+d;default:throw new Error(\"Unknown unit \"+i)}}function Bt(i){return function(){return this.as(i)}}var Fu=Bt(\"ms\"),dw=Bt(\"s\"),hw=Bt(\"m\"),mw=Bt(\"h\"),pw=Bt(\"d\"),gw=Bt(\"w\"),ww=Bt(\"M\"),yw=Bt(\"Q\"),kw=Bt(\"y\"),bw=Fu;function xw(){return xt(this)}function Ew(i){return i=Be(i),this.isValid()?this[i+\"s\"]():NaN}function bn(i){return function(){return this.isValid()?this._data[i]:NaN}}var Aw=bn(\"milliseconds\"),Cw=bn(\"seconds\"),vw=bn(\"minutes\"),Sw=bn(\"hours\"),Tw=bn(\"days\"),_w=bn(\"months\"),Fw=bn(\"years\");function Iw(){return lt(this.days()/7)}var zt=Math.round,Vn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Pw(i,a,c,d,y){return y.relativeTime(a||1,!!c,i,d)}function Rw(i,a,c,d){var y=xt(i).abs(),b=zt(y.as(\"s\")),C=zt(y.as(\"m\")),L=zt(y.as(\"h\")),U=zt(y.as(\"d\")),ee=zt(y.as(\"M\")),We=zt(y.as(\"w\")),Vt=zt(y.as(\"y\")),nn=b<=c.ss&&[\"s\",b]||b<c.s&&[\"ss\",b]||C<=1&&[\"m\"]||C<c.m&&[\"mm\",C]||L<=1&&[\"h\"]||L<c.h&&[\"hh\",L]||U<=1&&[\"d\"]||U<c.d&&[\"dd\",U];return c.w!=null&&(nn=nn||We<=1&&[\"w\"]||We<c.w&&[\"ww\",We]),nn=nn||ee<=1&&[\"M\"]||ee<c.M&&[\"MM\",ee]||Vt<=1&&[\"y\"]||[\"yy\",Vt],nn[2]=a,nn[3]=+i>0,nn[4]=d,Pw.apply(null,nn)}function Ow(i){return i===void 0?zt:typeof i==\"function\"?(zt=i,!0):!1}function Lw(i,a){return Vn[i]===void 0?!1:a===void 0?Vn[i]:(Vn[i]=a,i===\"s\"&&(Vn.ss=a-1),!0)}function Dw(i,a){if(!this.isValid())return this.localeData().invalidDate();var c=!1,d=Vn,y,b;return typeof i==\"object\"&&(a=i,i=!1),typeof i==\"boolean\"&&(c=i),typeof a==\"object\"&&(d=Object.assign({},Vn,a),a.s!=null&&a.ss==null&&(d.ss=a.s-1)),y=this.localeData(),b=Rw(this,!c,d,y),c&&(b=y.pastFuture(+this,b)),y.postformat(b)}var Ys=Math.abs;function Wn(i){return(i>0)-(i<0)||+i}function Ii(){if(!this.isValid())return this.localeData().invalidDate();var i=Ys(this._milliseconds)/1e3,a=Ys(this._days),c=Ys(this._months),d,y,b,C,L=this.asSeconds(),U,ee,We,Vt;return L?(d=lt(i/60),y=lt(d/60),i%=60,d%=60,b=lt(c/12),c%=12,C=i?i.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",U=L<0?\"-\":\"\",ee=Wn(this._months)!==Wn(L)?\"-\":\"\",We=Wn(this._days)!==Wn(L)?\"-\":\"\",Vt=Wn(this._milliseconds)!==Wn(L)?\"-\":\"\",U+\"P\"+(b?ee+b+\"Y\":\"\")+(c?ee+c+\"M\":\"\")+(a?We+a+\"D\":\"\")+(y||d||i?\"T\":\"\")+(y?Vt+y+\"H\":\"\")+(d?Vt+d+\"M\":\"\")+(i?Vt+C+\"S\":\"\")):\"P0D\"}var ne=Ai.prototype;ne.isValid=_g,ne.abs=aw,ne.add=lw,ne.subtract=uw,ne.as=fw,ne.asMilliseconds=Fu,ne.asSeconds=dw,ne.asMinutes=hw,ne.asHours=mw,ne.asDays=pw,ne.asWeeks=gw,ne.asMonths=ww,ne.asQuarters=yw,ne.asYears=kw,ne.valueOf=bw,ne._bubble=cw,ne.clone=xw,ne.get=Ew,ne.milliseconds=Aw,ne.seconds=Cw,ne.minutes=vw,ne.hours=Sw,ne.days=Tw,ne.weeks=Iw,ne.months=_w,ne.years=Fw,ne.humanize=Dw,ne.toISOString=Ii,ne.toString=Ii,ne.toJSON=Ii,ne.locale=pu,ne.localeData=wu,ne.toIsoString=J(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",Ii),ne.lang=gu,k(\"X\",0,0,\"unix\"),k(\"x\",0,0,\"valueOf\"),N(\"x\",At),N(\"X\",kt),le(\"X\",function(i,a,c){c._d=new Date(parseFloat(i)*1e3)}),le(\"x\",function(i,a,c){c._d=new Date(Q(i))});return t.version=\"2.30.1\",n(ce),t.fn=P,t.min=Cg,t.max=vg,t.now=Sg,t.utc=g,t.unix=ew,t.months=nw,t.isDate=h,t.locale=en,t.invalid=A,t.duration=xt,t.isMoment=v,t.weekdays=iw,t.parseZone=tw,t.localeData=$t,t.isDuration=Ci,t.monthsShort=rw,t.weekdaysMin=sw,t.defineLocale=Ss,t.updateLocale=tg,t.locales=ng,t.weekdaysShort=ow,t.normalizeUnits=Be,t.relativeTimeRounding=Ow,t.relativeTimeThreshold=Lw,t.calendarFormat=Zg,t.prototype=P,t.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},t})});var $u=B((ev,Nu)=>{\"use strict\";function St(e){if(typeof e!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(e))}function Mu(e,t){for(var n=\"\",r=0,o=-1,s=0,l,u=0;u<=e.length;++u){if(u<e.length)l=e.charCodeAt(u);else{if(l===47)break;l=47}if(l===47){if(!(o===u-1||s===1))if(o!==u-1&&s===2){if(n.length<2||r!==2||n.charCodeAt(n.length-1)!==46||n.charCodeAt(n.length-2)!==46){if(n.length>2){var f=n.lastIndexOf(\"/\");if(f!==n.length-1){f===-1?(n=\"\",r=0):(n=n.slice(0,f),r=n.length-1-n.lastIndexOf(\"/\")),o=u,s=0;continue}}else if(n.length===2||n.length===1){n=\"\",r=0,o=u,s=0;continue}}t&&(n.length>0?n+=\"/..\":n=\"..\",r=2)}else n.length>0?n+=\"/\"+e.slice(o+1,u):n=e.slice(o+1,u),r=u-o-1;o=u,s=0}else l===46&&s!==-1?++s:s=-1}return n}function Gw(e,t){var n=t.dir||t.root,r=t.base||(t.name||\"\")+(t.ext||\"\");return n?n===t.root?n+r:n+e+r:r}var jn={resolve:function(){for(var t=\"\",n=!1,r,o=arguments.length-1;o>=-1&&!n;o--){var s;o>=0?s=arguments[o]:(r===void 0&&(r=process.cwd()),s=r),St(s),s.length!==0&&(t=s+\"/\"+t,n=s.charCodeAt(0)===47)}return t=Mu(t,!n),n?t.length>0?\"/\"+t:\"/\":t.length>0?t:\".\"},normalize:function(t){if(St(t),t.length===0)return\".\";var n=t.charCodeAt(0)===47,r=t.charCodeAt(t.length-1)===47;return t=Mu(t,!n),t.length===0&&!n&&(t=\".\"),t.length>0&&r&&(t+=\"/\"),n?\"/\"+t:t},isAbsolute:function(t){return St(t),t.length>0&&t.charCodeAt(0)===47},join:function(){if(arguments.length===0)return\".\";for(var t,n=0;n<arguments.length;++n){var r=arguments[n];St(r),r.length>0&&(t===void 0?t=r:t+=\"/\"+r)}return t===void 0?\".\":jn.normalize(t)},relative:function(t,n){if(St(t),St(n),t===n||(t=jn.resolve(t),n=jn.resolve(n),t===n))return\"\";for(var r=1;r<t.length&&t.charCodeAt(r)===47;++r);for(var o=t.length,s=o-r,l=1;l<n.length&&n.charCodeAt(l)===47;++l);for(var u=n.length,f=u-l,h=s<f?s:f,m=-1,p=0;p<=h;++p){if(p===h){if(f>h){if(n.charCodeAt(l+p)===47)return n.slice(l+p+1);if(p===0)return n.slice(l+p)}else s>h&&(t.charCodeAt(r+p)===47?m=p:p===0&&(m=0));break}var g=t.charCodeAt(r+p),w=n.charCodeAt(l+p);if(g!==w)break;g===47&&(m=p)}var E=\"\";for(p=r+m+1;p<=o;++p)(p===o||t.charCodeAt(p)===47)&&(E.length===0?E+=\"..\":E+=\"/..\");return E.length>0?E+n.slice(l+m):(l+=m,n.charCodeAt(l)===47&&++l,n.slice(l))},_makeLong:function(t){return t},dirname:function(t){if(St(t),t.length===0)return\".\";for(var n=t.charCodeAt(0),r=n===47,o=-1,s=!0,l=t.length-1;l>=1;--l)if(n=t.charCodeAt(l),n===47){if(!s){o=l;break}}else s=!1;return o===-1?r?\"/\":\".\":r&&o===1?\"//\":t.slice(0,o)},basename:function(t,n){if(n!==void 0&&typeof n!=\"string\")throw new TypeError('\"ext\" argument must be a string');St(t);var r=0,o=-1,s=!0,l;if(n!==void 0&&n.length>0&&n.length<=t.length){if(n.length===t.length&&n===t)return\"\";var u=n.length-1,f=-1;for(l=t.length-1;l>=0;--l){var h=t.charCodeAt(l);if(h===47){if(!s){r=l+1;break}}else f===-1&&(s=!1,f=l+1),u>=0&&(h===n.charCodeAt(u)?--u===-1&&(o=l):(u=-1,o=f))}return r===o?o=f:o===-1&&(o=t.length),t.slice(r,o)}else{for(l=t.length-1;l>=0;--l)if(t.charCodeAt(l)===47){if(!s){r=l+1;break}}else o===-1&&(s=!1,o=l+1);return o===-1?\"\":t.slice(r,o)}},extname:function(t){St(t);for(var n=-1,r=0,o=-1,s=!0,l=0,u=t.length-1;u>=0;--u){var f=t.charCodeAt(u);if(f===47){if(!s){r=u+1;break}continue}o===-1&&(s=!1,o=u+1),f===46?n===-1?n=u:l!==1&&(l=1):n!==-1&&(l=-1)}return n===-1||o===-1||l===0||l===1&&n===o-1&&n===r+1?\"\":t.slice(n,o)},format:function(t){if(t===null||typeof t!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return Gw(\"/\",t)},parse:function(t){St(t);var n={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(t.length===0)return n;var r=t.charCodeAt(0),o=r===47,s;o?(n.root=\"/\",s=1):s=0;for(var l=-1,u=0,f=-1,h=!0,m=t.length-1,p=0;m>=s;--m){if(r=t.charCodeAt(m),r===47){if(!h){u=m+1;break}continue}f===-1&&(h=!1,f=m+1),r===46?l===-1?l=m:p!==1&&(p=1):l!==-1&&(p=-1)}return l===-1||f===-1||p===0||p===1&&l===f-1&&l===u+1?f!==-1&&(u===0&&o?n.base=n.name=t.slice(1,f):n.base=n.name=t.slice(u,f)):(u===0&&o?(n.name=t.slice(1,l),n.base=t.slice(1,f)):(n.name=t.slice(u,l),n.base=t.slice(u,f)),n.ext=t.slice(l,f)),u>0?n.dir=t.slice(0,u-1):o&&(n.dir=\"/\"),n},sep:\"/\",delimiter:\":\",win32:null,posix:null};jn.posix=jn;Nu.exports=jn});var Bu=B((tv,zs)=>{\"use strict\";var Xw=Object.prototype.hasOwnProperty,Ue=\"~\";function Pr(){}Object.create&&(Pr.prototype=Object.create(null),new Pr().__proto__||(Ue=!1));function Jw(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function Yu(e,t,n,r,o){if(typeof n!=\"function\")throw new TypeError(\"The listener must be a function\");var s=new Jw(n,r||e,o),l=Ue?Ue+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],s]:e._events[l].push(s):(e._events[l]=s,e._eventsCount++),e}function Oi(e,t){--e._eventsCount===0?e._events=new Pr:delete e._events[t]}function De(){this._events=new Pr,this._eventsCount=0}De.prototype.eventNames=function(){var t=[],n,r;if(this._eventsCount===0)return t;for(r in n=this._events)Xw.call(n,r)&&t.push(Ue?r.slice(1):r);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(n)):t};De.prototype.listeners=function(t){var n=Ue?Ue+t:t,r=this._events[n];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,s=r.length,l=new Array(s);o<s;o++)l[o]=r[o].fn;return l};De.prototype.listenerCount=function(t){var n=Ue?Ue+t:t,r=this._events[n];return r?r.fn?1:r.length:0};De.prototype.emit=function(t,n,r,o,s,l){var u=Ue?Ue+t:t;if(!this._events[u])return!1;var f=this._events[u],h=arguments.length,m,p;if(f.fn){switch(f.once&&this.removeListener(t,f.fn,void 0,!0),h){case 1:return f.fn.call(f.context),!0;case 2:return f.fn.call(f.context,n),!0;case 3:return f.fn.call(f.context,n,r),!0;case 4:return f.fn.call(f.context,n,r,o),!0;case 5:return f.fn.call(f.context,n,r,o,s),!0;case 6:return f.fn.call(f.context,n,r,o,s,l),!0}for(p=1,m=new Array(h-1);p<h;p++)m[p-1]=arguments[p];f.fn.apply(f.context,m)}else{var g=f.length,w;for(p=0;p<g;p++)switch(f[p].once&&this.removeListener(t,f[p].fn,void 0,!0),h){case 1:f[p].fn.call(f[p].context);break;case 2:f[p].fn.call(f[p].context,n);break;case 3:f[p].fn.call(f[p].context,n,r);break;case 4:f[p].fn.call(f[p].context,n,r,o);break;default:if(!m)for(w=1,m=new Array(h-1);w<h;w++)m[w-1]=arguments[w];f[p].fn.apply(f[p].context,m)}}return!0};De.prototype.on=function(t,n,r){return Yu(this,t,n,r,!1)};De.prototype.once=function(t,n,r){return Yu(this,t,n,r,!0)};De.prototype.removeListener=function(t,n,r,o){var s=Ue?Ue+t:t;if(!this._events[s])return this;if(!n)return Oi(this,s),this;var l=this._events[s];if(l.fn)l.fn===n&&(!o||l.once)&&(!r||l.context===r)&&Oi(this,s);else{for(var u=0,f=[],h=l.length;u<h;u++)(l[u].fn!==n||o&&!l[u].once||r&&l[u].context!==r)&&f.push(l[u]);f.length?this._events[s]=f.length===1?f[0]:f:Oi(this,s)}return this};De.prototype.removeAllListeners=function(t){var n;return t?(n=Ue?Ue+t:t,this._events[n]&&Oi(this,n)):(this._events=new Pr,this._eventsCount=0),this};De.prototype.off=De.prototype.removeListener;De.prototype.addListener=De.prototype.on;De.prefixed=Ue;De.EventEmitter=De;typeof zs<\"u\"&&(zs.exports=De)});var sc=B((Mv,oc)=>{var Kn=1e3,Qn=Kn*60,er=Qn*60,vn=er*24,oy=vn*7,sy=vn*365.25;oc.exports=function(e,t){t=t||{};var n=typeof e;if(n===\"string\"&&e.length>0)return ay(e);if(n===\"number\"&&isFinite(e))return t.long?uy(e):ly(e);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(e))};function ay(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var n=parseFloat(t[1]),r=(t[2]||\"ms\").toLowerCase();switch(r){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return n*sy;case\"weeks\":case\"week\":case\"w\":return n*oy;case\"days\":case\"day\":case\"d\":return n*vn;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return n*er;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return n*Qn;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return n*Kn;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return n;default:return}}}}function ly(e){var t=Math.abs(e);return t>=vn?Math.round(e/vn)+\"d\":t>=er?Math.round(e/er)+\"h\":t>=Qn?Math.round(e/Qn)+\"m\":t>=Kn?Math.round(e/Kn)+\"s\":e+\"ms\"}function uy(e){var t=Math.abs(e);return t>=vn?$i(e,t,vn,\"day\"):t>=er?$i(e,t,er,\"hour\"):t>=Qn?$i(e,t,Qn,\"minute\"):t>=Kn?$i(e,t,Kn,\"second\"):e+\" ms\"}function $i(e,t,n,r){var o=t>=n*1.5;return Math.round(e/n)+\" \"+r+(o?\"s\":\"\")}});var Js=B((Nv,ac)=>{function cy(e){n.debug=n,n.default=n,n.coerce=f,n.disable=l,n.enable=o,n.enabled=u,n.humanize=sc(),n.destroy=h,Object.keys(e).forEach(m=>{n[m]=e[m]}),n.names=[],n.skips=[],n.formatters={};function t(m){let p=0;for(let g=0;g<m.length;g++)p=(p<<5)-p+m.charCodeAt(g),p|=0;return n.colors[Math.abs(p)%n.colors.length]}n.selectColor=t;function n(m){let p,g=null,w,E;function F(...T){if(!F.enabled)return;let A=F,_=Number(new Date),I=_-(p||_);A.diff=I,A.prev=p,A.curr=_,p=_,T[0]=n.coerce(T[0]),typeof T[0]!=\"string\"&&T.unshift(\"%O\");let z=0;T[0]=T[0].replace(/%([a-zA-Z%])/g,(v,te)=>{if(v===\"%%\")return\"%\";z++;let J=n.formatters[te];if(typeof J==\"function\"){let Z=T[z];v=J.call(A,Z),T.splice(z,1),z--}return v}),n.formatArgs.call(A,T),(A.log||n.log).apply(A,T)}return F.namespace=m,F.useColors=n.useColors(),F.color=n.selectColor(m),F.extend=r,F.destroy=n.destroy,Object.defineProperty(F,\"enabled\",{enumerable:!0,configurable:!1,get:()=>g!==null?g:(w!==n.namespaces&&(w=n.namespaces,E=n.enabled(m)),E),set:T=>{g=T}}),typeof n.init==\"function\"&&n.init(F),F}function r(m,p){let g=n(this.namespace+(typeof p>\"u\"?\":\":p)+m);return g.log=this.log,g}function o(m){n.save(m),n.namespaces=m,n.names=[],n.skips=[];let p=(typeof m==\"string\"?m:\"\").trim().replace(\" \",\",\").split(\",\").filter(Boolean);for(let g of p)g[0]===\"-\"?n.skips.push(g.slice(1)):n.names.push(g)}function s(m,p){let g=0,w=0,E=-1,F=0;for(;g<m.length;)if(w<p.length&&(p[w]===m[g]||p[w]===\"*\"))p[w]===\"*\"?(E=w,F=g,w++):(g++,w++);else if(E!==-1)w=E+1,F++,g=F;else return!1;for(;w<p.length&&p[w]===\"*\";)w++;return w===p.length}function l(){let m=[...n.names,...n.skips.map(p=>\"-\"+p)].join(\",\");return n.enable(\"\"),m}function u(m){for(let p of n.skips)if(s(m,p))return!1;for(let p of n.names)if(s(m,p))return!0;return!1}function f(m){return m instanceof Error?m.stack||m.message:m}function h(){console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\")}return n.enable(n.load()),n}ac.exports=cy});var lc=B((it,Yi)=>{it.formatArgs=dy;it.save=hy;it.load=my;it.useColors=fy;it.storage=py();it.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\"))}})();it.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"];function fy(){if(typeof window<\"u\"&&window.process&&(window.process.type===\"renderer\"||window.process.__nwjs))return!0;if(typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/))return!1;let e;return typeof document<\"u\"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<\"u\"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<\"u\"&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)}function dy(e){if(e[0]=(this.useColors?\"%c\":\"\")+this.namespace+(this.useColors?\" %c\":\" \")+e[0]+(this.useColors?\"%c \":\" \")+\"+\"+Yi.exports.humanize(this.diff),!this.useColors)return;let t=\"color: \"+this.color;e.splice(1,0,t,\"color: inherit\");let n=0,r=0;e[0].replace(/%[a-zA-Z%]/g,o=>{o!==\"%%\"&&(n++,o===\"%c\"&&(r=n))}),e.splice(r,0,t)}it.log=console.debug||console.log||(()=>{});function hy(e){try{e?it.storage.setItem(\"debug\",e):it.storage.removeItem(\"debug\")}catch{}}function my(){let e;try{e=it.storage.getItem(\"debug\")}catch{}return!e&&typeof process<\"u\"&&\"env\"in process&&(e=process.env.DEBUG),e}function py(){try{return localStorage}catch{}}Yi.exports=Js()(it);var{formatters:gy}=Yi.exports;gy.j=function(e){try{return JSON.stringify(e)}catch(t){return\"[UnexpectedJSONParseError]: \"+t.message}}});var cc=B(($v,uc)=>{\"use strict\";uc.exports=(e,t=process.argv)=>{let n=e.startsWith(\"-\")?\"\":e.length===1?\"-\":\"--\",r=t.indexOf(n+e),o=t.indexOf(\"--\");return r!==-1&&(o===-1||r<o)}});var hc=B((Yv,dc)=>{\"use strict\";var wy=require(\"os\"),fc=require(\"tty\"),dt=cc(),{env:Se}=process,sn;dt(\"no-color\")||dt(\"no-colors\")||dt(\"color=false\")||dt(\"color=never\")?sn=0:(dt(\"color\")||dt(\"colors\")||dt(\"color=true\")||dt(\"color=always\"))&&(sn=1);\"FORCE_COLOR\"in Se&&(Se.FORCE_COLOR===\"true\"?sn=1:Se.FORCE_COLOR===\"false\"?sn=0:sn=Se.FORCE_COLOR.length===0?1:Math.min(parseInt(Se.FORCE_COLOR,10),3));function Zs(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Ks(e,t){if(sn===0)return 0;if(dt(\"color=16m\")||dt(\"color=full\")||dt(\"color=truecolor\"))return 3;if(dt(\"color=256\"))return 2;if(e&&!t&&sn===void 0)return 0;let n=sn||0;if(Se.TERM===\"dumb\")return n;if(process.platform===\"win32\"){let r=wy.release().split(\".\");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if(\"CI\"in Se)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\",\"GITHUB_ACTIONS\",\"BUILDKITE\"].some(r=>r in Se)||Se.CI_NAME===\"codeship\"?1:n;if(\"TEAMCITY_VERSION\"in Se)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(Se.TEAMCITY_VERSION)?1:0;if(Se.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in Se){let r=parseInt((Se.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(Se.TERM_PROGRAM){case\"iTerm.app\":return r>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(Se.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Se.TERM)||\"COLORTERM\"in Se?1:n}function yy(e){let t=Ks(e,e&&e.isTTY);return Zs(t)}dc.exports={supportsColor:yy,stdout:Zs(Ks(!0,fc.isatty(1))),stderr:Zs(Ks(!0,fc.isatty(2)))}});var pc=B((Te,zi)=>{var ky=require(\"tty\"),Bi=require(\"util\");Te.init=Sy;Te.log=Ay;Te.formatArgs=xy;Te.save=Cy;Te.load=vy;Te.useColors=by;Te.destroy=Bi.deprecate(()=>{},\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\");Te.colors=[6,2,3,4,5,1];try{let e=hc();e&&(e.stderr||e).level>=2&&(Te.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}Te.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,t)=>{let n=t.substring(6).toLowerCase().replace(/_([a-z])/g,(o,s)=>s.toUpperCase()),r=process.env[t];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r===\"null\"?r=null:r=Number(r),e[n]=r,e},{});function by(){return\"colors\"in Te.inspectOpts?!!Te.inspectOpts.colors:ky.isatty(process.stderr.fd)}function xy(e){let{namespace:t,useColors:n}=this;if(n){let r=this.color,o=\"\\x1B[3\"+(r<8?r:\"8;5;\"+r),s=`  ${o};1m${t} \\x1B[0m`;e[0]=s+e[0].split(`\n`).join(`\n`+s),e.push(o+\"m+\"+zi.exports.humanize(this.diff)+\"\\x1B[0m\")}else e[0]=Ey()+t+\" \"+e[0]}function Ey(){return Te.inspectOpts.hideDate?\"\":new Date().toISOString()+\" \"}function Ay(...e){return process.stderr.write(Bi.formatWithOptions(Te.inspectOpts,...e)+`\n`)}function Cy(e){e?process.env.DEBUG=e:delete process.env.DEBUG}function vy(){return process.env.DEBUG}function Sy(e){e.inspectOpts={};let t=Object.keys(Te.inspectOpts);for(let n=0;n<t.length;n++)e.inspectOpts[t[n]]=Te.inspectOpts[t[n]]}zi.exports=Js()(Te);var{formatters:mc}=zi.exports;mc.o=function(e){return this.inspectOpts.colors=this.useColors,Bi.inspect(e,this.inspectOpts).split(`\n`).map(t=>t.trim()).join(\" \")};mc.O=function(e){return this.inspectOpts.colors=this.useColors,Bi.inspect(e,this.inspectOpts)}});var gc=B((Bv,Qs)=>{typeof process>\"u\"||process.type===\"renderer\"||process.browser===!0||process.__nwjs?Qs.exports=lc():Qs.exports=pc()});var vc=B((ji,Cc)=>{(function(e,t){typeof ji==\"object\"&&typeof Cc<\"u\"?t(ji):typeof define==\"function\"&&define.amd?define([\"exports\"],t):(e=typeof globalThis<\"u\"?globalThis:e||self,t(e.compareVersions={}))})(ji,function(e){\"use strict\";let t=/^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i,n=T=>{if(typeof T!=\"string\")throw new TypeError(\"Invalid argument expected string\");let A=T.match(t);if(!A)throw new Error(`Invalid argument not valid semver ('${T}' received)`);return A.shift(),A},r=T=>T===\"*\"||T===\"x\"||T===\"X\",o=T=>{let A=parseInt(T,10);return isNaN(A)?T:A},s=(T,A)=>typeof T!=typeof A?[String(T),String(A)]:[T,A],l=(T,A)=>{if(r(T)||r(A))return 0;let[_,I]=s(o(T),o(A));return _>I?1:_<I?-1:0},u=(T,A)=>{for(let _=0;_<Math.max(T.length,A.length);_++){let I=l(T[_]||\"0\",A[_]||\"0\");if(I!==0)return I}return 0},f=(T,A)=>{let _=n(T),I=n(A),z=_.pop(),H=I.pop(),v=u(_,I);return v!==0?v:z&&H?u(z.split(\".\"),H.split(\".\")):z||H?z?-1:1:0},h=(T,A,_)=>{g(_);let I=f(T,A);return m[_].includes(I)},m={\">\":[1],\">=\":[0,1],\"=\":[0],\"<=\":[-1,0],\"<\":[-1],\"!=\":[-1,1]},p=Object.keys(m),g=T=>{if(typeof T!=\"string\")throw new TypeError(`Invalid operator type, expected string but got ${typeof T}`);if(p.indexOf(T)===-1)throw new Error(`Invalid operator, expected one of ${p.join(\"|\")}`)},w=(T,A)=>{if(A=A.replace(/([><=]+)\\s+/g,\"$1\"),A.includes(\"||\"))return A.split(\"||\").some(ie=>w(T,ie));if(A.includes(\" - \")){let[ie,he]=A.split(\" - \",2);return w(T,`>=${ie} <=${he}`)}else if(A.includes(\" \"))return A.trim().replace(/\\s{2,}/g,\" \").split(\" \").every(ie=>w(T,ie));let _=A.match(/^([<>=~^]+)/),I=_?_[1]:\"=\";if(I!==\"^\"&&I!==\"~\")return h(T,A,I);let[z,H,v,,te]=n(T),[J,Z,se,,ue]=n(A),re=[z,H,v],Y=[J,Z??\"x\",se??\"x\"];if(ue&&(!te||u(re,Y)!==0||u(te.split(\".\"),ue.split(\".\"))===-1))return!1;let j=Y.findIndex(ie=>ie!==\"0\")+1,V=I===\"~\"?2:j>1?j:1;return!(u(re.slice(0,V),Y.slice(0,V))!==0||u(re.slice(V),Y.slice(V))===-1)},E=T=>typeof T==\"string\"&&/^[v\\d]/.test(T)&&t.test(T),F=T=>typeof T==\"string\"&&/^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/.test(T);e.compare=h,e.compareVersions=f,e.satisfies=w,e.validate=E,e.validateStrict=F})});var Zf=B((lI,Jf)=>{\"use strict\";var go=Object.prototype.hasOwnProperty,Xf=Object.prototype.toString,Wf=Object.defineProperty,Uf=Object.getOwnPropertyDescriptor,Hf=function(t){return typeof Array.isArray==\"function\"?Array.isArray(t):Xf.call(t)===\"[object Array]\"},jf=function(t){if(!t||Xf.call(t)!==\"[object Object]\")return!1;var n=go.call(t,\"constructor\"),r=t.constructor&&t.constructor.prototype&&go.call(t.constructor.prototype,\"isPrototypeOf\");if(t.constructor&&!n&&!r)return!1;var o;for(o in t);return typeof o>\"u\"||go.call(t,o)},qf=function(t,n){Wf&&n.name===\"__proto__\"?Wf(t,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):t[n.name]=n.newValue},Gf=function(t,n){if(n===\"__proto__\")if(go.call(t,n)){if(Uf)return Uf(t,n).value}else return;return t[n]};Jf.exports=function e(){var t,n,r,o,s,l,u=arguments[0],f=1,h=arguments.length,m=!1;for(typeof u==\"boolean\"&&(m=u,u=arguments[1]||{},f=2),(u==null||typeof u!=\"object\"&&typeof u!=\"function\")&&(u={});f<h;++f)if(t=arguments[f],t!=null)for(n in t)r=Gf(u,n),o=Gf(t,n),u!==o&&(m&&o&&(jf(o)||(s=Hf(o)))?(s?(s=!1,l=r&&Hf(r)?r:[]):l=r&&jf(r)?r:{},qf(u,{name:n,newValue:e(m,l,o)})):typeof o<\"u\"&&qf(u,{name:n,newValue:o}));return u}});var ti=B((dR,Md)=>{var Px=\"2.0.0\",Rx=Number.MAX_SAFE_INTEGER||9007199254740991,Ox=16,Lx=250,Dx=[\"major\",\"premajor\",\"minor\",\"preminor\",\"patch\",\"prepatch\",\"prerelease\"];Md.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Ox,MAX_SAFE_BUILD_LENGTH:Lx,MAX_SAFE_INTEGER:Rx,RELEASE_TYPES:Dx,SEMVER_SPEC_VERSION:Px,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var ni=B((hR,Nd)=>{var Mx=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{};Nd.exports=Mx});var wr=B((Pt,$d)=>{var{MAX_SAFE_COMPONENT_LENGTH:hl,MAX_SAFE_BUILD_LENGTH:Nx,MAX_LENGTH:$x}=ti(),Yx=ni();Pt=$d.exports={};var Bx=Pt.re=[],zx=Pt.safeRe=[],D=Pt.src=[],Vx=Pt.safeSrc=[],M=Pt.t={},Wx=0,ml=\"[a-zA-Z0-9-]\",Ux=[[\"\\\\s\",1],[\"\\\\d\",$x],[ml,Nx]],Hx=e=>{for(let[t,n]of Ux)e=e.split(`${t}*`).join(`${t}{0,${n}}`).split(`${t}+`).join(`${t}{1,${n}}`);return e},X=(e,t,n)=>{let r=Hx(t),o=Wx++;Yx(e,o,t),M[e]=o,D[o]=t,Vx[o]=r,Bx[o]=new RegExp(t,n?\"g\":void 0),zx[o]=new RegExp(r,n?\"g\":void 0)};X(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");X(\"NUMERICIDENTIFIERLOOSE\",\"\\\\d+\");X(\"NONNUMERICIDENTIFIER\",`\\\\d*[a-zA-Z-]${ml}*`);X(\"MAINVERSION\",`(${D[M.NUMERICIDENTIFIER]})\\\\.(${D[M.NUMERICIDENTIFIER]})\\\\.(${D[M.NUMERICIDENTIFIER]})`);X(\"MAINVERSIONLOOSE\",`(${D[M.NUMERICIDENTIFIERLOOSE]})\\\\.(${D[M.NUMERICIDENTIFIERLOOSE]})\\\\.(${D[M.NUMERICIDENTIFIERLOOSE]})`);X(\"PRERELEASEIDENTIFIER\",`(?:${D[M.NUMERICIDENTIFIER]}|${D[M.NONNUMERICIDENTIFIER]})`);X(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${D[M.NUMERICIDENTIFIERLOOSE]}|${D[M.NONNUMERICIDENTIFIER]})`);X(\"PRERELEASE\",`(?:-(${D[M.PRERELEASEIDENTIFIER]}(?:\\\\.${D[M.PRERELEASEIDENTIFIER]})*))`);X(\"PRERELEASELOOSE\",`(?:-?(${D[M.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${D[M.PRERELEASEIDENTIFIERLOOSE]})*))`);X(\"BUILDIDENTIFIER\",`${ml}+`);X(\"BUILD\",`(?:\\\\+(${D[M.BUILDIDENTIFIER]}(?:\\\\.${D[M.BUILDIDENTIFIER]})*))`);X(\"FULLPLAIN\",`v?${D[M.MAINVERSION]}${D[M.PRERELEASE]}?${D[M.BUILD]}?`);X(\"FULL\",`^${D[M.FULLPLAIN]}$`);X(\"LOOSEPLAIN\",`[v=\\\\s]*${D[M.MAINVERSIONLOOSE]}${D[M.PRERELEASELOOSE]}?${D[M.BUILD]}?`);X(\"LOOSE\",`^${D[M.LOOSEPLAIN]}$`);X(\"GTLT\",\"((?:<|>)?=?)\");X(\"XRANGEIDENTIFIERLOOSE\",`${D[M.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);X(\"XRANGEIDENTIFIER\",`${D[M.NUMERICIDENTIFIER]}|x|X|\\\\*`);X(\"XRANGEPLAIN\",`[v=\\\\s]*(${D[M.XRANGEIDENTIFIER]})(?:\\\\.(${D[M.XRANGEIDENTIFIER]})(?:\\\\.(${D[M.XRANGEIDENTIFIER]})(?:${D[M.PRERELEASE]})?${D[M.BUILD]}?)?)?`);X(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${D[M.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${D[M.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${D[M.XRANGEIDENTIFIERLOOSE]})(?:${D[M.PRERELEASELOOSE]})?${D[M.BUILD]}?)?)?`);X(\"XRANGE\",`^${D[M.GTLT]}\\\\s*${D[M.XRANGEPLAIN]}$`);X(\"XRANGELOOSE\",`^${D[M.GTLT]}\\\\s*${D[M.XRANGEPLAINLOOSE]}$`);X(\"COERCEPLAIN\",`(^|[^\\\\d])(\\\\d{1,${hl}})(?:\\\\.(\\\\d{1,${hl}}))?(?:\\\\.(\\\\d{1,${hl}}))?`);X(\"COERCE\",`${D[M.COERCEPLAIN]}(?:$|[^\\\\d])`);X(\"COERCEFULL\",D[M.COERCEPLAIN]+`(?:${D[M.PRERELEASE]})?(?:${D[M.BUILD]})?(?:$|[^\\\\d])`);X(\"COERCERTL\",D[M.COERCE],!0);X(\"COERCERTLFULL\",D[M.COERCEFULL],!0);X(\"LONETILDE\",\"(?:~>?)\");X(\"TILDETRIM\",`(\\\\s*)${D[M.LONETILDE]}\\\\s+`,!0);Pt.tildeTrimReplace=\"$1~\";X(\"TILDE\",`^${D[M.LONETILDE]}${D[M.XRANGEPLAIN]}$`);X(\"TILDELOOSE\",`^${D[M.LONETILDE]}${D[M.XRANGEPLAINLOOSE]}$`);X(\"LONECARET\",\"(?:\\\\^)\");X(\"CARETTRIM\",`(\\\\s*)${D[M.LONECARET]}\\\\s+`,!0);Pt.caretTrimReplace=\"$1^\";X(\"CARET\",`^${D[M.LONECARET]}${D[M.XRANGEPLAIN]}$`);X(\"CARETLOOSE\",`^${D[M.LONECARET]}${D[M.XRANGEPLAINLOOSE]}$`);X(\"COMPARATORLOOSE\",`^${D[M.GTLT]}\\\\s*(${D[M.LOOSEPLAIN]})$|^$`);X(\"COMPARATOR\",`^${D[M.GTLT]}\\\\s*(${D[M.FULLPLAIN]})$|^$`);X(\"COMPARATORTRIM\",`(\\\\s*)${D[M.GTLT]}\\\\s*(${D[M.LOOSEPLAIN]}|${D[M.XRANGEPLAIN]})`,!0);Pt.comparatorTrimReplace=\"$1$2$3\";X(\"HYPHENRANGE\",`^\\\\s*(${D[M.XRANGEPLAIN]})\\\\s+-\\\\s+(${D[M.XRANGEPLAIN]})\\\\s*$`);X(\"HYPHENRANGELOOSE\",`^\\\\s*(${D[M.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${D[M.XRANGEPLAINLOOSE]})\\\\s*$`);X(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");X(\"GTE0\",\"^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$\");X(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$\")});var Io=B((mR,Yd)=>{var jx=Object.freeze({loose:!0}),qx=Object.freeze({}),Gx=e=>e?typeof e!=\"object\"?jx:e:qx;Yd.exports=Gx});var pl=B((pR,Vd)=>{var Bd=/^[0-9]+$/,zd=(e,t)=>{let n=Bd.test(e),r=Bd.test(t);return n&&r&&(e=+e,t=+t),e===t?0:n&&!r?-1:r&&!n?1:e<t?-1:1},Xx=(e,t)=>zd(t,e);Vd.exports={compareIdentifiers:zd,rcompareIdentifiers:Xx}});var $e=B((gR,jd)=>{var Po=ni(),{MAX_LENGTH:Wd,MAX_SAFE_INTEGER:Ro}=ti(),{safeRe:Ud,safeSrc:Hd,t:Oo}=wr(),Jx=Io(),{compareIdentifiers:yr}=pl(),gl=class e{constructor(t,n){if(n=Jx(n),t instanceof e){if(t.loose===!!n.loose&&t.includePrerelease===!!n.includePrerelease)return t;t=t.version}else if(typeof t!=\"string\")throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof t}\".`);if(t.length>Wd)throw new TypeError(`version is longer than ${Wd} characters`);Po(\"SemVer\",t,n),this.options=n,this.loose=!!n.loose,this.includePrerelease=!!n.includePrerelease;let r=t.trim().match(n.loose?Ud[Oo.LOOSE]:Ud[Oo.FULL]);if(!r)throw new TypeError(`Invalid Version: ${t}`);if(this.raw=t,this.major=+r[1],this.minor=+r[2],this.patch=+r[3],this.major>Ro||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>Ro||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>Ro||this.patch<0)throw new TypeError(\"Invalid patch version\");r[4]?this.prerelease=r[4].split(\".\").map(o=>{if(/^[0-9]+$/.test(o)){let s=+o;if(s>=0&&s<Ro)return s}return o}):this.prerelease=[],this.build=r[5]?r[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(t){if(Po(\"SemVer.compare\",this.version,this.options,t),!(t instanceof e)){if(typeof t==\"string\"&&t===this.version)return 0;t=new e(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(t){return t instanceof e||(t=new e(t,this.options)),yr(this.major,t.major)||yr(this.minor,t.minor)||yr(this.patch,t.patch)}comparePre(t){if(t instanceof e||(t=new e(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let n=0;do{let r=this.prerelease[n],o=t.prerelease[n];if(Po(\"prerelease compare\",n,r,o),r===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(r===void 0)return-1;if(r===o)continue;return yr(r,o)}while(++n)}compareBuild(t){t instanceof e||(t=new e(t,this.options));let n=0;do{let r=this.build[n],o=t.build[n];if(Po(\"build compare\",n,r,o),r===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(r===void 0)return-1;if(r===o)continue;return yr(r,o)}while(++n)}inc(t,n,r){if(t.startsWith(\"pre\")){if(!n&&r===!1)throw new Error(\"invalid increment argument: identifier is empty\");if(n){let o=new RegExp(`^${this.options.loose?Hd[Oo.PRERELEASELOOSE]:Hd[Oo.PRERELEASE]}$`),s=`-${n}`.match(o);if(!s||s[1]!==n)throw new Error(`invalid identifier: ${n}`)}}switch(t){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",n,r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",n,r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",n,r),this.inc(\"pre\",n,r);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",n,r),this.inc(\"pre\",n,r);break;case\"release\":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":{let o=Number(r)?1:0;if(this.prerelease.length===0)this.prerelease=[o];else{let s=this.prerelease.length;for(;--s>=0;)typeof this.prerelease[s]==\"number\"&&(this.prerelease[s]++,s=-2);if(s===-1){if(n===this.prerelease.join(\".\")&&r===!1)throw new Error(\"invalid increment argument: identifier already exists\");this.prerelease.push(o)}}if(n){let s=[n,o];r===!1&&(s=[n]),yr(this.prerelease[0],n)===0?isNaN(this.prerelease[1])&&(this.prerelease=s):this.prerelease=s}break}default:throw new Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(\".\")}`),this}};jd.exports=gl});var Ln=B((wR,Gd)=>{var qd=$e(),Zx=(e,t,n=!1)=>{if(e instanceof qd)return e;try{return new qd(e,t)}catch(r){if(!n)return null;throw r}};Gd.exports=Zx});var Jd=B((yR,Xd)=>{var Kx=Ln(),Qx=(e,t)=>{let n=Kx(e,t);return n?n.version:null};Xd.exports=Qx});var Kd=B((kR,Zd)=>{var eE=Ln(),tE=(e,t)=>{let n=eE(e.trim().replace(/^[=v]+/,\"\"),t);return n?n.version:null};Zd.exports=tE});var th=B((bR,eh)=>{var Qd=$e(),nE=(e,t,n,r,o)=>{typeof n==\"string\"&&(o=r,r=n,n=void 0);try{return new Qd(e instanceof Qd?e.version:e,n).inc(t,r,o).version}catch{return null}};eh.exports=nE});var ih=B((xR,rh)=>{var nh=Ln(),rE=(e,t)=>{let n=nh(e,null,!0),r=nh(t,null,!0),o=n.compare(r);if(o===0)return null;let s=o>0,l=s?n:r,u=s?r:n,f=!!l.prerelease.length;if(!!u.prerelease.length&&!f){if(!u.patch&&!u.minor)return\"major\";if(u.compareMain(l)===0)return u.minor&&!u.patch?\"minor\":\"patch\"}let m=f?\"pre\":\"\";return n.major!==r.major?m+\"major\":n.minor!==r.minor?m+\"minor\":n.patch!==r.patch?m+\"patch\":\"prerelease\"};rh.exports=rE});var sh=B((ER,oh)=>{var iE=$e(),oE=(e,t)=>new iE(e,t).major;oh.exports=oE});var lh=B((AR,ah)=>{var sE=$e(),aE=(e,t)=>new sE(e,t).minor;ah.exports=aE});var ch=B((CR,uh)=>{var lE=$e(),uE=(e,t)=>new lE(e,t).patch;uh.exports=uE});var dh=B((vR,fh)=>{var cE=Ln(),fE=(e,t)=>{let n=cE(e,t);return n&&n.prerelease.length?n.prerelease:null};fh.exports=fE});var mt=B((SR,mh)=>{var hh=$e(),dE=(e,t,n)=>new hh(e,n).compare(new hh(t,n));mh.exports=dE});var gh=B((TR,ph)=>{var hE=mt(),mE=(e,t,n)=>hE(t,e,n);ph.exports=mE});var yh=B((_R,wh)=>{var pE=mt(),gE=(e,t)=>pE(e,t,!0);wh.exports=gE});var Lo=B((FR,bh)=>{var kh=$e(),wE=(e,t,n)=>{let r=new kh(e,n),o=new kh(t,n);return r.compare(o)||r.compareBuild(o)};bh.exports=wE});var Eh=B((IR,xh)=>{var yE=Lo(),kE=(e,t)=>e.sort((n,r)=>yE(n,r,t));xh.exports=kE});var Ch=B((PR,Ah)=>{var bE=Lo(),xE=(e,t)=>e.sort((n,r)=>bE(r,n,t));Ah.exports=xE});var ri=B((RR,vh)=>{var EE=mt(),AE=(e,t,n)=>EE(e,t,n)>0;vh.exports=AE});var Do=B((OR,Sh)=>{var CE=mt(),vE=(e,t,n)=>CE(e,t,n)<0;Sh.exports=vE});var wl=B((LR,Th)=>{var SE=mt(),TE=(e,t,n)=>SE(e,t,n)===0;Th.exports=TE});var yl=B((DR,_h)=>{var _E=mt(),FE=(e,t,n)=>_E(e,t,n)!==0;_h.exports=FE});var Mo=B((MR,Fh)=>{var IE=mt(),PE=(e,t,n)=>IE(e,t,n)>=0;Fh.exports=PE});var No=B((NR,Ih)=>{var RE=mt(),OE=(e,t,n)=>RE(e,t,n)<=0;Ih.exports=OE});var kl=B(($R,Ph)=>{var LE=wl(),DE=yl(),ME=ri(),NE=Mo(),$E=Do(),YE=No(),BE=(e,t,n,r)=>{switch(t){case\"===\":return typeof e==\"object\"&&(e=e.version),typeof n==\"object\"&&(n=n.version),e===n;case\"!==\":return typeof e==\"object\"&&(e=e.version),typeof n==\"object\"&&(n=n.version),e!==n;case\"\":case\"=\":case\"==\":return LE(e,n,r);case\"!=\":return DE(e,n,r);case\">\":return ME(e,n,r);case\">=\":return NE(e,n,r);case\"<\":return $E(e,n,r);case\"<=\":return YE(e,n,r);default:throw new TypeError(`Invalid operator: ${t}`)}};Ph.exports=BE});var Oh=B((YR,Rh)=>{var zE=$e(),VE=Ln(),{safeRe:$o,t:Yo}=wr(),WE=(e,t)=>{if(e instanceof zE)return e;if(typeof e==\"number\"&&(e=String(e)),typeof e!=\"string\")return null;t=t||{};let n=null;if(!t.rtl)n=e.match(t.includePrerelease?$o[Yo.COERCEFULL]:$o[Yo.COERCE]);else{let f=t.includePrerelease?$o[Yo.COERCERTLFULL]:$o[Yo.COERCERTL],h;for(;(h=f.exec(e))&&(!n||n.index+n[0].length!==e.length);)(!n||h.index+h[0].length!==n.index+n[0].length)&&(n=h),f.lastIndex=h.index+h[1].length+h[2].length;f.lastIndex=-1}if(n===null)return null;let r=n[2],o=n[3]||\"0\",s=n[4]||\"0\",l=t.includePrerelease&&n[5]?`-${n[5]}`:\"\",u=t.includePrerelease&&n[6]?`+${n[6]}`:\"\";return VE(`${r}.${o}.${s}${l}${u}`,t)};Rh.exports=WE});var Dh=B((BR,Lh)=>{var bl=class{constructor(){this.max=1e3,this.map=new Map}get(t){let n=this.map.get(t);if(n!==void 0)return this.map.delete(t),this.map.set(t,n),n}delete(t){return this.map.delete(t)}set(t,n){if(!this.delete(t)&&n!==void 0){if(this.map.size>=this.max){let o=this.map.keys().next().value;this.delete(o)}this.map.set(t,n)}return this}};Lh.exports=bl});var pt=B((zR,Yh)=>{var UE=/\\s+/g,xl=class e{constructor(t,n){if(n=jE(n),t instanceof e)return t.loose===!!n.loose&&t.includePrerelease===!!n.includePrerelease?t:new e(t.raw,n);if(t instanceof El)return this.raw=t.value,this.set=[[t]],this.formatted=void 0,this;if(this.options=n,this.loose=!!n.loose,this.includePrerelease=!!n.includePrerelease,this.raw=t.trim().replace(UE,\" \"),this.set=this.raw.split(\"||\").map(r=>this.parseRange(r.trim())).filter(r=>r.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let r=this.set[0];if(this.set=this.set.filter(o=>!Nh(o[0])),this.set.length===0)this.set=[r];else if(this.set.length>1){for(let o of this.set)if(o.length===1&&QE(o[0])){this.set=[o];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted=\"\";for(let t=0;t<this.set.length;t++){t>0&&(this.formatted+=\"||\");let n=this.set[t];for(let r=0;r<n.length;r++)r>0&&(this.formatted+=\" \"),this.formatted+=n[r].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(t){let r=((this.options.includePrerelease&&ZE)|(this.options.loose&&KE))+\":\"+t,o=Mh.get(r);if(o)return o;let s=this.options.loose,l=s?et[qe.HYPHENRANGELOOSE]:et[qe.HYPHENRANGE];t=t.replace(l,uA(this.options.includePrerelease)),fe(\"hyphen replace\",t),t=t.replace(et[qe.COMPARATORTRIM],GE),fe(\"comparator trim\",t),t=t.replace(et[qe.TILDETRIM],XE),fe(\"tilde trim\",t),t=t.replace(et[qe.CARETTRIM],JE),fe(\"caret trim\",t);let u=t.split(\" \").map(p=>eA(p,this.options)).join(\" \").split(/\\s+/).map(p=>lA(p,this.options));s&&(u=u.filter(p=>(fe(\"loose invalid filter\",p,this.options),!!p.match(et[qe.COMPARATORLOOSE])))),fe(\"range list\",u);let f=new Map,h=u.map(p=>new El(p,this.options));for(let p of h){if(Nh(p))return[p];f.set(p.value,p)}f.size>1&&f.has(\"\")&&f.delete(\"\");let m=[...f.values()];return Mh.set(r,m),m}intersects(t,n){if(!(t instanceof e))throw new TypeError(\"a Range is required\");return this.set.some(r=>$h(r,n)&&t.set.some(o=>$h(o,n)&&r.every(s=>o.every(l=>s.intersects(l,n)))))}test(t){if(!t)return!1;if(typeof t==\"string\")try{t=new qE(t,this.options)}catch{return!1}for(let n=0;n<this.set.length;n++)if(cA(this.set[n],t,this.options))return!0;return!1}};Yh.exports=xl;var HE=Dh(),Mh=new HE,jE=Io(),El=ii(),fe=ni(),qE=$e(),{safeRe:et,t:qe,comparatorTrimReplace:GE,tildeTrimReplace:XE,caretTrimReplace:JE}=wr(),{FLAG_INCLUDE_PRERELEASE:ZE,FLAG_LOOSE:KE}=ti(),Nh=e=>e.value===\"<0.0.0-0\",QE=e=>e.value===\"\",$h=(e,t)=>{let n=!0,r=e.slice(),o=r.pop();for(;n&&r.length;)n=r.every(s=>o.intersects(s,t)),o=r.pop();return n},eA=(e,t)=>(fe(\"comp\",e,t),e=rA(e,t),fe(\"caret\",e),e=tA(e,t),fe(\"tildes\",e),e=oA(e,t),fe(\"xrange\",e),e=aA(e,t),fe(\"stars\",e),e),Ge=e=>!e||e.toLowerCase()===\"x\"||e===\"*\",tA=(e,t)=>e.trim().split(/\\s+/).map(n=>nA(n,t)).join(\" \"),nA=(e,t)=>{let n=t.loose?et[qe.TILDELOOSE]:et[qe.TILDE];return e.replace(n,(r,o,s,l,u)=>{fe(\"tilde\",e,r,o,s,l,u);let f;return Ge(o)?f=\"\":Ge(s)?f=`>=${o}.0.0 <${+o+1}.0.0-0`:Ge(l)?f=`>=${o}.${s}.0 <${o}.${+s+1}.0-0`:u?(fe(\"replaceTilde pr\",u),f=`>=${o}.${s}.${l}-${u} <${o}.${+s+1}.0-0`):f=`>=${o}.${s}.${l} <${o}.${+s+1}.0-0`,fe(\"tilde return\",f),f})},rA=(e,t)=>e.trim().split(/\\s+/).map(n=>iA(n,t)).join(\" \"),iA=(e,t)=>{fe(\"caret\",e,t);let n=t.loose?et[qe.CARETLOOSE]:et[qe.CARET],r=t.includePrerelease?\"-0\":\"\";return e.replace(n,(o,s,l,u,f)=>{fe(\"caret\",e,o,s,l,u,f);let h;return Ge(s)?h=\"\":Ge(l)?h=`>=${s}.0.0${r} <${+s+1}.0.0-0`:Ge(u)?s===\"0\"?h=`>=${s}.${l}.0${r} <${s}.${+l+1}.0-0`:h=`>=${s}.${l}.0${r} <${+s+1}.0.0-0`:f?(fe(\"replaceCaret pr\",f),s===\"0\"?l===\"0\"?h=`>=${s}.${l}.${u}-${f} <${s}.${l}.${+u+1}-0`:h=`>=${s}.${l}.${u}-${f} <${s}.${+l+1}.0-0`:h=`>=${s}.${l}.${u}-${f} <${+s+1}.0.0-0`):(fe(\"no pr\"),s===\"0\"?l===\"0\"?h=`>=${s}.${l}.${u}${r} <${s}.${l}.${+u+1}-0`:h=`>=${s}.${l}.${u}${r} <${s}.${+l+1}.0-0`:h=`>=${s}.${l}.${u} <${+s+1}.0.0-0`),fe(\"caret return\",h),h})},oA=(e,t)=>(fe(\"replaceXRanges\",e,t),e.split(/\\s+/).map(n=>sA(n,t)).join(\" \")),sA=(e,t)=>{e=e.trim();let n=t.loose?et[qe.XRANGELOOSE]:et[qe.XRANGE];return e.replace(n,(r,o,s,l,u,f)=>{fe(\"xRange\",e,r,o,s,l,u,f);let h=Ge(s),m=h||Ge(l),p=m||Ge(u),g=p;return o===\"=\"&&g&&(o=\"\"),f=t.includePrerelease?\"-0\":\"\",h?o===\">\"||o===\"<\"?r=\"<0.0.0-0\":r=\"*\":o&&g?(m&&(l=0),u=0,o===\">\"?(o=\">=\",m?(s=+s+1,l=0,u=0):(l=+l+1,u=0)):o===\"<=\"&&(o=\"<\",m?s=+s+1:l=+l+1),o===\"<\"&&(f=\"-0\"),r=`${o+s}.${l}.${u}${f}`):m?r=`>=${s}.0.0${f} <${+s+1}.0.0-0`:p&&(r=`>=${s}.${l}.0${f} <${s}.${+l+1}.0-0`),fe(\"xRange return\",r),r})},aA=(e,t)=>(fe(\"replaceStars\",e,t),e.trim().replace(et[qe.STAR],\"\")),lA=(e,t)=>(fe(\"replaceGTE0\",e,t),e.trim().replace(et[t.includePrerelease?qe.GTE0PRE:qe.GTE0],\"\")),uA=e=>(t,n,r,o,s,l,u,f,h,m,p,g)=>(Ge(r)?n=\"\":Ge(o)?n=`>=${r}.0.0${e?\"-0\":\"\"}`:Ge(s)?n=`>=${r}.${o}.0${e?\"-0\":\"\"}`:l?n=`>=${n}`:n=`>=${n}${e?\"-0\":\"\"}`,Ge(h)?f=\"\":Ge(m)?f=`<${+h+1}.0.0-0`:Ge(p)?f=`<${h}.${+m+1}.0-0`:g?f=`<=${h}.${m}.${p}-${g}`:e?f=`<${h}.${m}.${+p+1}-0`:f=`<=${f}`,`${n} ${f}`.trim()),cA=(e,t,n)=>{for(let r=0;r<e.length;r++)if(!e[r].test(t))return!1;if(t.prerelease.length&&!n.includePrerelease){for(let r=0;r<e.length;r++)if(fe(e[r].semver),e[r].semver!==El.ANY&&e[r].semver.prerelease.length>0){let o=e[r].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}});var ii=B((VR,Hh)=>{var oi=Symbol(\"SemVer ANY\"),vl=class e{static get ANY(){return oi}constructor(t,n){if(n=Bh(n),t instanceof e){if(t.loose===!!n.loose)return t;t=t.value}t=t.trim().split(/\\s+/).join(\" \"),Cl(\"comparator\",t,n),this.options=n,this.loose=!!n.loose,this.parse(t),this.semver===oi?this.value=\"\":this.value=this.operator+this.semver.version,Cl(\"comp\",this)}parse(t){let n=this.options.loose?zh[Vh.COMPARATORLOOSE]:zh[Vh.COMPARATOR],r=t.match(n);if(!r)throw new TypeError(`Invalid comparator: ${t}`);this.operator=r[1]!==void 0?r[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),r[2]?this.semver=new Wh(r[2],this.options.loose):this.semver=oi}toString(){return this.value}test(t){if(Cl(\"Comparator.test\",t,this.options.loose),this.semver===oi||t===oi)return!0;if(typeof t==\"string\")try{t=new Wh(t,this.options)}catch{return!1}return Al(t,this.operator,this.semver,this.options)}intersects(t,n){if(!(t instanceof e))throw new TypeError(\"a Comparator is required\");return this.operator===\"\"?this.value===\"\"?!0:new Uh(t.value,n).test(this.value):t.operator===\"\"?t.value===\"\"?!0:new Uh(this.value,n).test(t.semver):(n=Bh(n),n.includePrerelease&&(this.value===\"<0.0.0-0\"||t.value===\"<0.0.0-0\")||!n.includePrerelease&&(this.value.startsWith(\"<0.0.0\")||t.value.startsWith(\"<0.0.0\"))?!1:!!(this.operator.startsWith(\">\")&&t.operator.startsWith(\">\")||this.operator.startsWith(\"<\")&&t.operator.startsWith(\"<\")||this.semver.version===t.semver.version&&this.operator.includes(\"=\")&&t.operator.includes(\"=\")||Al(this.semver,\"<\",t.semver,n)&&this.operator.startsWith(\">\")&&t.operator.startsWith(\"<\")||Al(this.semver,\">\",t.semver,n)&&this.operator.startsWith(\"<\")&&t.operator.startsWith(\">\")))}};Hh.exports=vl;var Bh=Io(),{safeRe:zh,t:Vh}=wr(),Al=kl(),Cl=ni(),Wh=$e(),Uh=pt()});var si=B((WR,jh)=>{var fA=pt(),dA=(e,t,n)=>{try{t=new fA(t,n)}catch{return!1}return t.test(e)};jh.exports=dA});var Gh=B((UR,qh)=>{var hA=pt(),mA=(e,t)=>new hA(e,t).set.map(n=>n.map(r=>r.value).join(\" \").trim().split(\" \"));qh.exports=mA});var Jh=B((HR,Xh)=>{var pA=$e(),gA=pt(),wA=(e,t,n)=>{let r=null,o=null,s=null;try{s=new gA(t,n)}catch{return null}return e.forEach(l=>{s.test(l)&&(!r||o.compare(l)===-1)&&(r=l,o=new pA(r,n))}),r};Xh.exports=wA});var Kh=B((jR,Zh)=>{var yA=$e(),kA=pt(),bA=(e,t,n)=>{let r=null,o=null,s=null;try{s=new kA(t,n)}catch{return null}return e.forEach(l=>{s.test(l)&&(!r||o.compare(l)===1)&&(r=l,o=new yA(r,n))}),r};Zh.exports=bA});var tm=B((qR,em)=>{var Sl=$e(),xA=pt(),Qh=ri(),EA=(e,t)=>{e=new xA(e,t);let n=new Sl(\"0.0.0\");if(e.test(n)||(n=new Sl(\"0.0.0-0\"),e.test(n)))return n;n=null;for(let r=0;r<e.set.length;++r){let o=e.set[r],s=null;o.forEach(l=>{let u=new Sl(l.semver.version);switch(l.operator){case\">\":u.prerelease.length===0?u.patch++:u.prerelease.push(0),u.raw=u.format();case\"\":case\">=\":(!s||Qh(u,s))&&(s=u);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${l.operator}`)}}),s&&(!n||Qh(n,s))&&(n=s)}return n&&e.test(n)?n:null};em.exports=EA});var rm=B((GR,nm)=>{var AA=pt(),CA=(e,t)=>{try{return new AA(e,t).range||\"*\"}catch{return null}};nm.exports=CA});var Bo=B((XR,am)=>{var vA=$e(),sm=ii(),{ANY:SA}=sm,TA=pt(),_A=si(),im=ri(),om=Do(),FA=No(),IA=Mo(),PA=(e,t,n,r)=>{e=new vA(e,r),t=new TA(t,r);let o,s,l,u,f;switch(n){case\">\":o=im,s=FA,l=om,u=\">\",f=\">=\";break;case\"<\":o=om,s=IA,l=im,u=\"<\",f=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(_A(e,t,r))return!1;for(let h=0;h<t.set.length;++h){let m=t.set[h],p=null,g=null;if(m.forEach(w=>{w.semver===SA&&(w=new sm(\">=0.0.0\")),p=p||w,g=g||w,o(w.semver,p.semver,r)?p=w:l(w.semver,g.semver,r)&&(g=w)}),p.operator===u||p.operator===f||(!g.operator||g.operator===u)&&s(e,g.semver))return!1;if(g.operator===f&&l(e,g.semver))return!1}return!0};am.exports=PA});var um=B((JR,lm)=>{var RA=Bo(),OA=(e,t,n)=>RA(e,t,\">\",n);lm.exports=OA});var fm=B((ZR,cm)=>{var LA=Bo(),DA=(e,t,n)=>LA(e,t,\"<\",n);cm.exports=DA});var mm=B((KR,hm)=>{var dm=pt(),MA=(e,t,n)=>(e=new dm(e,n),t=new dm(t,n),e.intersects(t,n));hm.exports=MA});var gm=B((QR,pm)=>{var NA=si(),$A=mt();pm.exports=(e,t,n)=>{let r=[],o=null,s=null,l=e.sort((m,p)=>$A(m,p,n));for(let m of l)NA(m,t,n)?(s=m,o||(o=m)):(s&&r.push([o,s]),s=null,o=null);o&&r.push([o,null]);let u=[];for(let[m,p]of r)m===p?u.push(m):!p&&m===l[0]?u.push(\"*\"):p?m===l[0]?u.push(`<=${p}`):u.push(`${m} - ${p}`):u.push(`>=${m}`);let f=u.join(\" || \"),h=typeof t.raw==\"string\"?t.raw:String(t);return f.length<h.length?f:t}});var Em=B((eO,xm)=>{var wm=pt(),_l=ii(),{ANY:Tl}=_l,ai=si(),Fl=mt(),YA=(e,t,n={})=>{if(e===t)return!0;e=new wm(e,n),t=new wm(t,n);let r=!1;e:for(let o of e.set){for(let s of t.set){let l=zA(o,s,n);if(r=r||l!==null,l)continue e}if(r)return!1}return!0},BA=[new _l(\">=0.0.0-0\")],ym=[new _l(\">=0.0.0\")],zA=(e,t,n)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===Tl){if(t.length===1&&t[0].semver===Tl)return!0;n.includePrerelease?e=BA:e=ym}if(t.length===1&&t[0].semver===Tl){if(n.includePrerelease)return!0;t=ym}let r=new Set,o,s;for(let w of e)w.operator===\">\"||w.operator===\">=\"?o=km(o,w,n):w.operator===\"<\"||w.operator===\"<=\"?s=bm(s,w,n):r.add(w.semver);if(r.size>1)return null;let l;if(o&&s){if(l=Fl(o.semver,s.semver,n),l>0)return null;if(l===0&&(o.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let w of r){if(o&&!ai(w,String(o),n)||s&&!ai(w,String(s),n))return null;for(let E of t)if(!ai(w,String(E),n))return!1;return!0}let u,f,h,m,p=s&&!n.includePrerelease&&s.semver.prerelease.length?s.semver:!1,g=o&&!n.includePrerelease&&o.semver.prerelease.length?o.semver:!1;p&&p.prerelease.length===1&&s.operator===\"<\"&&p.prerelease[0]===0&&(p=!1);for(let w of t){if(m=m||w.operator===\">\"||w.operator===\">=\",h=h||w.operator===\"<\"||w.operator===\"<=\",o){if(g&&w.semver.prerelease&&w.semver.prerelease.length&&w.semver.major===g.major&&w.semver.minor===g.minor&&w.semver.patch===g.patch&&(g=!1),w.operator===\">\"||w.operator===\">=\"){if(u=km(o,w,n),u===w&&u!==o)return!1}else if(o.operator===\">=\"&&!ai(o.semver,String(w),n))return!1}if(s){if(p&&w.semver.prerelease&&w.semver.prerelease.length&&w.semver.major===p.major&&w.semver.minor===p.minor&&w.semver.patch===p.patch&&(p=!1),w.operator===\"<\"||w.operator===\"<=\"){if(f=bm(s,w,n),f===w&&f!==s)return!1}else if(s.operator===\"<=\"&&!ai(s.semver,String(w),n))return!1}if(!w.operator&&(s||o)&&l!==0)return!1}return!(o&&h&&!s&&l!==0||s&&m&&!o&&l!==0||g||p)},km=(e,t,n)=>{if(!e)return t;let r=Fl(e.semver,t.semver,n);return r>0?e:r<0||t.operator===\">\"&&e.operator===\">=\"?t:e},bm=(e,t,n)=>{if(!e)return t;let r=Fl(e.semver,t.semver,n);return r<0?e:r>0||t.operator===\"<\"&&e.operator===\"<=\"?t:e};xm.exports=YA});var Sm=B((tO,vm)=>{var Il=wr(),Am=ti(),VA=$e(),Cm=pl(),WA=Ln(),UA=Jd(),HA=Kd(),jA=th(),qA=ih(),GA=sh(),XA=lh(),JA=ch(),ZA=dh(),KA=mt(),QA=gh(),eC=yh(),tC=Lo(),nC=Eh(),rC=Ch(),iC=ri(),oC=Do(),sC=wl(),aC=yl(),lC=Mo(),uC=No(),cC=kl(),fC=Oh(),dC=ii(),hC=pt(),mC=si(),pC=Gh(),gC=Jh(),wC=Kh(),yC=tm(),kC=rm(),bC=Bo(),xC=um(),EC=fm(),AC=mm(),CC=gm(),vC=Em();vm.exports={parse:WA,valid:UA,clean:HA,inc:jA,diff:qA,major:GA,minor:XA,patch:JA,prerelease:ZA,compare:KA,rcompare:QA,compareLoose:eC,compareBuild:tC,sort:nC,rsort:rC,gt:iC,lt:oC,eq:sC,neq:aC,gte:lC,lte:uC,cmp:cC,coerce:fC,Comparator:dC,Range:hC,satisfies:mC,toComparators:pC,maxSatisfying:gC,minSatisfying:wC,minVersion:yC,validRange:kC,outside:bC,gtr:xC,ltr:EC,intersects:AC,simplifyRange:CC,subset:vC,SemVer:VA,re:Il.re,src:Il.src,tokens:Il.t,SEMVER_SPEC_VERSION:Am.SEMVER_SPEC_VERSION,RELEASE_TYPES:Am.RELEASE_TYPES,compareIdentifiers:Cm.compareIdentifiers,rcompareIdentifiers:Cm.rcompareIdentifiers}});var jC={};Iu(jC,{default:()=>HC});module.exports=zw(jC);var Wl=require(\"electron\"),Ul=Le(Wt(),1);function Hn(e,t){let n=Object.keys(t).map(r=>Vw(e,r,t[r]));return n.length===1?n[0]:function(){n.forEach(r=>r())}}function Vw(e,t,n){let r=e[t],o=e.hasOwnProperty(t),s=o?r:function(){return Object.getPrototypeOf(e)[t].apply(this,arguments)},l=n(s);return r&&Object.setPrototypeOf(l,r),Object.setPrototypeOf(u,l),e[t]=u,f;function u(...h){return l===s&&e[t]===u&&f(),l.apply(this,h)}function f(){e[t]===u&&(o?e[t]=s:delete e[t]),l!==s&&(l=s,Object.setPrototypeOf(u,r||Function))}}var tp=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function Ww(e){return await new Promise(t=>{let n=new FileReader;n.addEventListener(\"loadend\",r),n.readAsDataURL(e);function r(){t(n.result)}})}async function Ru(e,t){let n=await Ww(e);return new Promise(r=>{let o=new Image;o.addEventListener(\"load\",s),o.src=n;function s(){let l=document.createElement(\"canvas\"),u=l.getContext(\"2d\");if(!u)throw new Error(\"Could not get 2D context.\");let f=o.width,h=o.height;l.width=f,l.height=h,u.fillStyle=\"#fff\",u.fillRect(0,0,f,h),u.save();let m=.5;u.translate(f*m,h*m),u.drawImage(o,0,0,f,h,-f*m,-h*m,f,h),u.restore();let p=l.toDataURL(\"image/jpeg\",t),g=Uw(p);r(g)}})}function Uw(e){let n=e.split(\";base64,\")[1];if(!n)throw new Error(\"Invalid data URL\");let r=window.atob(n),o=r.length,s=new Uint8Array(o);for(let l=0;l<o;l++)s[l]=r.charCodeAt(l);return s.buffer}var Hw=require(\"obsidian\"),Ou=require(\"obsidian\"),Lu=require(\"obsidian\"),ZC=require(\"obsidian\"),KC=require(\"obsidian\");var Ut={AudioRecorder:\"audio-recorder\",Backlink:\"backlink\",Bookmarks:\"bookmarks\",Browser:\"browser\",Canvas:\"canvas\",CommandPalette:\"command-palette\",DailyNotes:\"daily-notes\",EditorStatus:\"editor-status\",FileExplorer:\"file-explorer\",FileRecovery:\"file-recovery\",GlobalSearch:\"global-search\",Graph:\"graph\",MarkdownImporter:\"markdown-importer\",NoteComposer:\"note-composer\",OutgoingLink:\"outgoing-link\",Outline:\"outline\",PagePreview:\"page-preview\",Properties:\"properties\",Publish:\"publish\",RandomNote:\"random-note\",SlashCommand:\"slash-command\",Slides:\"slides\",Switcher:\"switcher\",Sync:\"sync\",TagPane:\"tag-pane\",Templates:\"templates\",WordCount:\"word-count\",Workspaces:\"workspaces\",ZkPrefixer:\"zk-prefixer\"},JC={AllProperties:\"all-properties\",Audio:\"audio\",Backlink:Ut.Backlink,Bookmarks:Ut.Bookmarks,Browser:\"browser\",BrowserHistory:\"browser-history\",Canvas:Ut.Canvas,Empty:\"empty\",FileExplorer:Ut.FileExplorer,FileProperties:\"file-properties\",Graph:Ut.Graph,Image:\"image\",LocalGraph:\"localgraph\",Markdown:\"markdown\",OutgoingLink:Ut.OutgoingLink,Outline:Ut.Outline,Pdf:\"pdf\",ReleaseNotes:\"release-notes\",Search:\"search\",Sync:\"sync\",Tag:\"tag\",Video:\"video\"};function jw(){return Ou.TFile}function qw(){return Lu.TFolder}function ut(e){return e.replace(/\\/?[^\\/]*$/,\"\")||\"/\"}function Ri(e,t){let n=e.vault.getFolderByPath(t);return n||(n=new(qw())(e.vault,t),n.parent=Ri(e,ut(t)),n.deleted=!0,n)}function Du(e,t){let n=e.vault.getFileByPath(t);return n||(n=new(jw())(e.vault,t),n.parent=Ri(e,ut(t)),n.deleted=!0,n)}function rn(e){return!!e.position}function vt(e){return!!e.key}var Us=Le($u(),1);var Vs=Le(Bu(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Li=\"asyncError\",Di=new Vs.default;Di.on(Li,Zw);function Mi(e){Di.emit(Li,e)}function zu(e){return Ws(e).map(t=>\"  \".repeat(t.level)+t.message).join(`\n`)}function xn(e=0){return(new Error().stack??\"\").split(`\n`).slice(e+2).join(`\n`)}function Rr(e,t){t??=globalThis.console;let n=Ws(e);for(let r of n)r.shouldClearAnsiSequence?t.error(`\\x1B[0m${r.message}\\x1B[0m`):t.error(r.message)}function Vu(e){return Di.on(Li,e),()=>Di.off(Li,e)}function Ht(e){throw e}function Zw(e){Rr(new Error(\"An unhandled error occurred executing async operation\",{cause:e}))}function Ws(e,t=0,n=[]){if(e===void 0)return n;if(!(e instanceof Error)){let o;return e===null?o=\"(null)\":typeof e==\"string\"?o=e:o=JSON.stringify(e)??\"undefined\",n.push({level:t,message:o}),n}let r=`${e.name}: ${e.message}`;if(n.push({level:t,message:r,shouldClearAnsiSequence:!0}),e.stack){let o=e.stack.startsWith(r)?e.stack.slice(r.length+1):e.stack;n.push({level:t,message:`Error stack:\n${o}`})}return e.cause!==void 0&&(n.push({level:t,message:\"Caused by:\"}),Ws(e.cause,t+1,n)),n}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function qn(e){return e.replaceAll(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function Wu(e){try{return new RegExp(e),!0}catch{return!1}}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function En(e,...t){return Kw(e)?await e(...t):e}function Kw(e){return typeof e==\"function\"}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Qw={\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\t\":\"\\\\t\",\"\\b\":\"\\\\b\",\"\\f\":\"\\\\f\",\"'\":\"\\\\'\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},ey={};for(let[e,t]of Object.entries(Qw))ey[t]=e;function Uu(e,t,n,r){return r??=n,e.slice(0,n)+t+e.slice(r)}function Or(e){return Ce(e,/\\u00A0|\\u202F/g,\" \").normalize(\"NFC\")}function Ce(e,t,n){return typeof n>\"u\"?e:(t instanceof RegExp&&!t.global&&(t=new RegExp(t.source,`${t.flags}g`)),typeof n==\"string\"?e.replaceAll(t,n):e.replaceAll(t,(r,...o)=>{let l=typeof o.at(-1)==\"object\",u=l?o.length-2:o.length-1,f={groups:l?o.at(-1):void 0,offset:o.at(u-1),source:o.at(u),substring:r},h=o.slice(0,u-1);return n(f,...h)??f.substring}))}async function Hu(e,t,n){if(typeof n==\"string\")return Ce(e,t,n);let r=[];Ce(e,t,(s,...l)=>(r.push(En(n,s,...l)),\"\"));let o=await Promise.all(r);return Ce(e,t,s=>o.shift()??s.substring)}function Ni(e,t,n){if(e.endsWith(t))return e.slice(0,-t.length);if(n)throw new Error(`String ${e} does not end with suffix ${t}`);return e}function Gn(e,t,n){if(e.startsWith(t))return e.slice(t.length);if(n)throw new Error(`String ${e} does not start with prefix ${t}`);return e}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ty=/[a-zA-Z]:\\/[^:]*$/,Tt=Us.default.posix,hv=Tt.delimiter,mv=Us.default.posix.sep,pe=Tt.basename,ke=Tt.dirname,ve=Tt.extname,pv=Tt.format;var be=Tt.join,gv=Tt.normalize,wv=Tt.parse,Xn=Tt.relative;function An(e,t){return t?`${e}.${t}`:e}function ju(...e){let t=Tt.resolve(...e);return t=ny(t),ty.exec(t)?.[0]??t}function ny(e){return Ce(e,\"\\\\\",\"/\")}var jt=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Gu=\"md\",ry=\"canvas\";function Xu(e,t,n){if(ct(t))return t.extension===n;if(typeof t==\"string\"){let r=Ze(e,t);return r?r.extension===n:ve(t).slice(1)===n}return!1}function Cn(e,t,n){if(t===null)return null;if(Ju(t))return t;let r=qu(e,t,n);if(r)return r;let o=Ku(t);return o===t?null:qu(e,o,n)}function Me(e,t,n,r){let o=Ze(e,t,r);if(!o)if(n)o=Du(e,t);else throw new Error(`File not found: ${t}`);return o}function Ze(e,t,n){let r=Cn(e,t,n);return ct(r)?r:null}function Lr(e,t,n,r){let o=_t(e,t,r);if(!o)if(n)o=Ri(e,t);else throw new Error(`Folder not found: ${t}`);return o}function _t(e,t,n){let r=Cn(e,t,n);return Hs(r)?r:null}function we(e,t){if(Ju(t))return t.path;let n=Cn(e,t);return n?n.path:Ku(t)}function Ju(e){return e instanceof jt.TAbstractFile}function qt(e,t){return Xu(e,t,ry)}function ct(e){return e instanceof jt.TFile}function Hs(e){return e instanceof jt.TFolder}function Gt(e,t){return Xu(e,t,Gu)}function Ke(e,t){return Gt(e,t)||qt(e,t)}function Zu(e,t){return Gt(e,t)?Ni(t.path,`.${Gu}`):t.path}function qu(e,t,n){return n?e.vault.getAbstractFileByPathInsensitive(t):e.vault.getAbstractFileByPath(t)}function Ku(e){return(0,jt.normalizePath)(ju(\"/\",e))}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function iy(e,t,n){let r=we(e,t),o=we(e,n),s=Me(e,o,!0),l=ve(r),u=pe(r,l),f=e.vault.getAvailablePathForAttachments;return f.isExtended?f(u,l.slice(1),s,!0):await js(e,u,l.slice(1),s,!0)}async function Jn(e,t){return ut(await iy(e,\"DUMMY_FILE.pdf\",t))}async function js(e,t,n,r,o){let s=e.vault.getConfig(\"attachmentFolderPath\"),l=s===\".\"||s===\"./\",u=null;s.startsWith(\"./\")&&(u=Gn(s,\"./\")),l?s=r?r.parent?.path??\"\":\"\":u&&(s=(r?r.parent?.getParentPrefix()??\"\":\"\")+u),s=Or(Qu(s)),t=Or(Qu(t));let f=_t(e,s,!0);!f&&u&&(o?f=Lr(e,s,!0):f=await e.vault.createFolder(s));let h=f?.getParentPrefix()??\"\";return e.vault.getAvailablePath(h+t,n)}async function qs(e,t){let n=await Jn(e,t),r=await Jn(e,be(ke(t),\"DUMMY_FILE.md\"));return n!==r}function Qu(e){return e=Ce(e,/(?:[\\\\/])+/g,\"/\"),e=Ce(e,/^\\/+|\\/+$/g,\"\"),e||\"/\"}var rc=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var W=(e=>(e.AlertModal=\"alert-modal\",e.CancelButton=\"cancel-button\",e.ConfirmModal=\"confirm-modal\",e.DateComponent=\"date-component\",e.DateTimeComponent=\"datetime-component\",e.EmailComponent=\"email-component\",e.FileComponent=\"file-component\",e.LibraryName=\"obsidian-dev-utils\",e.MonthComponent=\"month-component\",e.MultipleDropdownComponent=\"multiple-dropdown-component\",e.MultipleEmailComponent=\"multiple-email-component\",e.MultipleFileComponent=\"multiple-file-component\",e.MultipleTextComponent=\"multiple-text-component\",e.NumberComponent=\"number-component\",e.OkButton=\"ok-button\",e.PluginSettingsTab=\"plugin-settings-tab\",e.PromptModal=\"prompt-modal\",e.SelectItemModal=\"select-item-modal\",e.TextBox=\"text-box\",e.TimeComponent=\"time-component\",e.UrlComponent=\"url-component\",e.WeekComponent=\"week-component\",e))(W||{});var nc=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Gs=\"__no-plugin-id-initialized__\",ec=Gs;function ft(){return ec}function tc(e){e&&(ec=e)}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var on=class extends nc.Modal{constructor(t,n,r){super(t.app),this.resolve=n,this.containerEl.addClass(W.LibraryName,ft(),r),t.cssClass&&this.containerEl.addClass(t.cssClass)}};async function Zn(e){return await new Promise(t=>{e(t).open()})}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Xs=class extends on{options;constructor(t,n){super(t,n,W.AlertModal);let r={app:t.app,cssClass:\"\",message:t.message,okButtonText:\"OK\",title:\"\"};this.options={...r,...t}}onClose(){this.resolve()}onOpen(){this.titleEl.setText(this.options.title),this.contentEl.createEl(\"p\",{text:this.options.message});let t=new rc.ButtonComponent(this.contentEl);t.setButtonText(this.options.okButtonText),t.setCta(),t.onClick(this.close.bind(this)),t.setClass(W.OkButton)}};async function ic(e){await Zn(t=>new Xs(e,t))}var Gi=require(\"obsidian\");var ra=Le(gc(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ea=\"19.17.5\",Vi=\"obsidian-dev-utils\",wc=`.obsidian-dev-utils input[type=url] {\n  height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n  -webkit-app-region: no-drag;\n  background: var(--background-modifier-form-field);\n  border: var(--input-border-width) solid var(--background-modifier-border);\n  color: var(--text-normal);\n  font-family: inherit;\n  padding: var(--size-4-1) var(--size-4-2);\n  font-size: var(--font-ui-small);\n  border-radius: var(--input-radius);\n  outline: none;\n}\n@media (hover: hover) {\n  .obsidian-dev-utils input[type=month]:hover,\n  .obsidian-dev-utils input[type=time]:hover,\n  .obsidian-dev-utils input[type=url]:hover,\n  .obsidian-dev-utils input[type=week]:hover {\n    border-color: var(--background-modifier-border-hover);\n    transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n  }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n  border-color: var(--background-modifier-border-focus);\n  transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n  box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n  color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n  direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n  right: var(--size-4-1);\n  left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n  font-variant-numeric: tabular-nums;\n  position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n  color: var(--text-faint);\n  padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n  position: absolute;\n  left: var(--size-4-1);\n  right: auto;\n  opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n  background-color: var(--text-selection);\n  color: var(--text-normal);\n  cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n  direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n  left: auto;\n  right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n  padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n  margin-inline-start: 0;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n  margin-right: 10px;\n  margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n  height: auto;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n  background-color: #1967d2;\n  color: #fff;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n  width: 100%;\n}\n\n.obsidian-dev-utils :invalid {\n  box-shadow: 0 0 0 2px var(--text-error);\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AACE;EACE;;AAGF;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC5DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;AChDF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;EACE;EACA;;;ACPJ;EACE;;;ACFJ;EACE%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n`;(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function Ft(){}async function ta(){}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var na=class{constructor(t){this.value=t}};function yc(){try{return globalThis.require(\"obsidian/app\")}catch{return globalThis.app??Ht(new Error(\"Obsidian app not found\"))}}function an(e,t,n){let r=e;return r.obsidianDevUtilsState??={},r.obsidianDevUtilsState[t]??=new na(n)}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var kc=\",\",Wi=\"-\";function bc(){return{disable:Ty,enable:_y,get:Hi,set:Dr}}function Ui(e,t=0){let n=tr()(e);return n.log=(r,...o)=>{Fy(e,t,r,...o)},n.printStackTrace=(r,o)=>{Ac(e,r,o)},n}function Qe(e){let t=ft(),n=t===Gs?\"\":`${t}:`;return Ui(`${n}${Vi}:${e}`)}function xc(e){let t=tr().enabled(e),n=t?\"enabled\":\"disabled\",r=t?\"disable\":\"enable\",o=Hi();Dr(e),Ui(e)(`Debug messages for plugin ${e} are ${n}. See https://github.com/mnaoumov/obsidian-dev-utils/?tab=readme-ov-file#debugging how to ${r} them.`),Dr(o)}function Ty(e){let t=new Set(Hi());for(let n of Mr(e)){if(n.startsWith(Wi))continue;let r=Wi+n;t.has(n)&&t.delete(n),t.add(r)}Dr(Array.from(t))}function _y(e){let t=new Set(Hi());for(let n of Mr(e)){if(!n.startsWith(Wi)){let r=Wi+n;t.has(r)&&t.delete(r)}t.add(n)}Dr(Array.from(t))}function Hi(){return Mr(tr().load()??\"\")}function tr(){if(typeof window>\"u\")return ra.default;let e=yc();return an(e,\"debug\",ra.default).value}function Ec(){return typeof window<\"u\"}function Fy(e,t,n,...r){if(!tr().enabled(e))return;let l=(new Error().stack?.split(`\n`)??[])[4+t]??\"\";console.debug(n,...r),Ec()&&Ac(e,l,\"Debug message caller\")}function Ac(e,t,n){let r=tr()(e);if(!r.enabled)return;t||(t=\"(unavailable)\"),n||(n=\"Caller stack trace\"),r(n);let o=Ec()?`StackTraceFakeError\n`:\"\";console.debug(`${o}${t}`)}function Dr(e){tr().enable(Mr(e).join(kc))}function Mr(e){return typeof e==\"string\"?e.split(kc).filter(Boolean):e.flatMap(Mr)}var Tc=Le(vc(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Sc=`${Vi}-styles`;function _c(e,t){tc(t),xc(t);let n=an(e,\"lastLibraryVersion\",\"0.0.0\");if((0,Tc.compareVersions)(ea,n.value)<=0)return;n.value=ea;let r=Iy();r.DEBUG=bc(),document.head.querySelector(`#${Sc}`)?.remove(),document.head.createEl(\"style\",{attr:{id:Sc},text:wc})}function Iy(){return window}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var qi=class extends Gi.Plugin{get abortSignal(){return this._abortSignal}get settings(){return this._settings}get settingsClone(){return this.createPluginSettings(this.settings.toJSON())}_abortSignal;_settings;notice;consoleDebug(t,...n){Ui(this.manifest.id,1)(t,...n)}async onExternalSettingsChange(){await this.loadSettings()}async onload(){_c(this.app,this.manifest.id),this.register(Vu(()=>{this.showNotice(\"An unhandled error occurred. Please check the console for more information.\")})),await this.loadSettings();let t=this.createPluginSettingsTab();t&&this.addSettingTab(t);let n=new AbortController;this._abortSignal=n.signal,this.register(()=>{n.abort()}),await this.onloadComplete(),setTimeout(()=>{this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this))},0)}async saveSettings(t){let n=t.toJSON();this._settings=this.createPluginSettings(n),await this.saveData(n)}onLayoutReady(){}onloadComplete(){}showNotice(t){this.notice&&this.notice.hide(),this.notice=new Gi.Notice(`${this.manifest.name}\n${t}`)}async loadSettings(){let t=await this.loadData();this._settings=this.createPluginSettings(t),this.settings.shouldSaveAfterLoad&&await this.saveSettings(this._settings)}};var Rd=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Fc=\".\";function oa(e,t){if(e===t)return!0;if(typeof e!=\"object\"||typeof t!=\"object\"||e===null||t===null)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;let o=e,s=t;for(let l of n)if(!r.includes(l)||!oa(o[l],s[l]))return!1;return!0}function Ic(e,t){let n=!1;for(let r of t)n=Py(e,r)||n;return n}function Py(e,t){return Object.hasOwn(e,t)?(delete e[t],!0):!1}function nr(e,t){let n=e,r=t.split(Fc);for(let o of r){if(n===void 0)return;n=n[o]}return n}function Pc(e,t,n){let r=new Error(`Property path ${t} not found`),o=e,s=t.split(Fc);for(let u of s.slice(0,-1)){if(o===void 0)throw r;o=o[u]}let l=s.at(-1);if(o===void 0||l===void 0)throw r;o[l]=n}function rr(e,t={}){let n={functionHandlingMode:\"exclude\",maxDepth:-1,shouldCatchToJSONErrors:!1,shouldHandleCircularReferences:!1,shouldHandleErrors:!1,shouldHandleUndefined:!1,shouldSortKeys:!1,space:2,tokenSubstitutions:{circularReference:ia(\"CircularReference\"),maxDepthLimitReached:ia(\"MaxDepthLimitReached\"),toJSONFailed:ia(\"ToJSONFailed\")}},r={...n,...t,tokenSubstitutions:{...n.tokenSubstitutions,...t.tokenSubstitutions}};r.maxDepth===-1&&(r.maxDepth=1/0);let o=[],l=Xi(e,\"\",0,!0,r,o,new WeakSet),u=JSON.stringify(l,null,r.space)??\"\";return u=Ce(u,/\"\\[\\[(?<Key>[A-Za-z]+)(?<Index>\\d*)\\]\\]\"/g,(f,h,m)=>Ry({functionTexts:o,index:m?parseInt(m,10):0,key:h,substitutions:r.tokenSubstitutions})),u}function Ry(e){switch(e.key){case\"CircularReference\":return e.substitutions.circularReference;case\"Function\":return e.functionTexts[e.index]??Ht(new Error(`Function with index ${e.index.toString()} not found`));case\"MaxDepthLimitReached\":return e.substitutions.maxDepthLimitReached;case\"MaxDepthLimitReachedArray\":return`Array(${e.index.toString()})`;case\"ToJSONFailed\":return e.substitutions.toJSONFailed;case\"Undefined\":return\"undefined\";default:break}}function Oy(e,t,n,r,o,s){return t>r.maxDepth?ir(\"MaxDepthLimitReachedArray\",e.length):e.map((l,u)=>Xi(l,u.toString(),t+1,n,r,o,s))}function Ly(e,t,n){if(n.shouldHandleCircularReferences)return ir(\"CircularReference\");let r=e.constructor.name||\"Object\";throw new TypeError(`Converting circular structure to JSON\n--> starting at object with constructor '${r}'\n--- property '${t}' closes the circle`)}function Dy(e,t,n){if(n.functionHandlingMode===\"exclude\")return;let r=t.length,o=n.functionHandlingMode===\"full\"?e.toString():`function ${e.name||\"anonymous\"}() { /* ... */ }`;return t.push(o),ir(\"Function\",r)}function My(e,t,n,r,o,s,l){if(l.has(e))return Ly(e,t,o);if(l.add(e),r){let u=$y(e,t,n,o,s,l);if(u!==void 0)return u}return Array.isArray(e)?Oy(e,n,r,o,s,l):n>o.maxDepth?ir(\"MaxDepthLimitReached\"):e instanceof Error&&o.shouldHandleErrors?zu(e):Ny(e,n,r,o,s,l)}function Ny(e,t,n,r,o,s){let l=Object.entries(e);return r.shouldSortKeys&&l.sort(([u],[f])=>u.localeCompare(f)),Object.fromEntries(l.map(([u,f])=>[u,Xi(f,u,t+1,n,r,o,s)]))}function ia(e){return`{ \"[[${e}]]\": null }`}function ir(e,t){return`[[${e}${t?.toString()??\"\"}]]`}function Xi(e,t,n,r,o,s,l){return e===void 0?n===0||o.shouldHandleUndefined?ir(\"Undefined\"):void 0:typeof e==\"function\"?Dy(e,s,o):typeof e!=\"object\"||e===null?e:My(e,t,n,r,o,s,l)}function $y(e,t,n,r,o,s){let l=e.toJSON;if(typeof l==\"function\")try{let u=l.call(e,t);return Xi(u,t,n,!1,r,o,s)}catch(u){if(r.shouldCatchToJSONErrors)return ir(\"ToJSONFailed\");throw u}}var So=require(\"obsidian\");var Yy={};function Sn(e,t){let n=t||Yy,r=typeof n.includeImageAlt==\"boolean\"?n.includeImageAlt:!0,o=typeof n.includeHtml==\"boolean\"?n.includeHtml:!0;return Oc(e,r,o)}function Oc(e,t,n){if(By(e)){if(\"value\"in e)return e.type===\"html\"&&!n?\"\":e.value;if(t&&\"alt\"in e&&e.alt)return e.alt;if(\"children\"in e)return Rc(e.children,t,n)}return Array.isArray(e)?Rc(e,t,n):\"\"}function Rc(e,t,n){let r=[],o=-1;for(;++o<e.length;)r[o]=Oc(e[o],t,n);return r.join(\"\")}function By(e){return!!(e&&typeof e==\"object\")}var Lc=document.createElement(\"i\");function or(e){let t=\"&\"+e+\";\";Lc.innerHTML=t;let n=Lc.textContent;return n.charCodeAt(n.length-1)===59&&e!==\"semi\"||n===t?!1:n}function Fe(e,t,n,r){let o=e.length,s=0,l;if(t<0?t=-t>o?0:o+t:t=t>o?o:t,n=n>0?n:0,r.length<1e4)l=Array.from(r),l.unshift(t,n),e.splice(...l);else for(n&&e.splice(t,n);s<r.length;)l=r.slice(s,s+1e4),l.unshift(t,0),e.splice(...l),s+=1e4,t+=1e4}function He(e,t){return e.length>0?(Fe(e,e.length,0,t),e):t}var Dc={}.hasOwnProperty;function Mc(e){let t={},n=-1;for(;++n<e.length;)zy(t,e[n]);return t}function zy(e,t){let n;for(n in t){let o=(Dc.call(e,n)?e[n]:void 0)||(e[n]={}),s=t[n],l;if(s)for(l in s){Dc.call(o,l)||(o[l]=[]);let u=s[l];Vy(o[l],Array.isArray(u)?u:u?[u]:[])}}}function Vy(e,t){let n=-1,r=[];for(;++n<t.length;)(t[n].add===\"after\"?e:r).push(t[n]);Fe(e,0,0,r)}function Ji(e,t){let n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?\"\\uFFFD\":String.fromCodePoint(n)}function Xt(e){return e.replace(/[\\t\\n\\r ]+/g,\" \").replace(/^ | $/g,\"\").toLowerCase().toUpperCase()}var ot=ln(/[A-Za-z]/),je=ln(/[\\dA-Za-z]/),Nc=ln(/[#-'*+\\--9=?A-Z^-~]/);function Nr(e){return e!==null&&(e<32||e===127)}var $r=ln(/\\d/),$c=ln(/[\\dA-Fa-f]/),Yc=ln(/[!-/:-@[-`{-~]/);function $(e){return e!==null&&e<-2}function ye(e){return e!==null&&(e<0||e===32)}function q(e){return e===-2||e===-1||e===32}var Bc=ln(/\\p{P}|\\p{S}/u),zc=ln(/\\s/);function ln(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function G(e,t,n,r){let o=r?r-1:Number.POSITIVE_INFINITY,s=0;return l;function l(f){return q(f)?(e.enter(n),u(f)):t(f)}function u(f){return q(f)&&s++<o?(e.consume(f),u):(e.exit(n),t(f))}}var Vc={tokenize:Wy};function Wy(e){let t=e.attempt(this.parser.constructs.contentInitial,r,o),n;return t;function r(u){if(u===null){e.consume(u);return}return e.enter(\"lineEnding\"),e.consume(u),e.exit(\"lineEnding\"),G(e,t,\"linePrefix\")}function o(u){return e.enter(\"paragraph\"),s(u)}function s(u){let f=e.enter(\"chunkText\",{contentType:\"text\",previous:n});return n&&(n.next=f),n=f,l(u)}function l(u){if(u===null){e.exit(\"chunkText\"),e.exit(\"paragraph\"),e.consume(u);return}return $(u)?(e.consume(u),e.exit(\"chunkText\"),s):(e.consume(u),l)}}var Uc={tokenize:Uy},Wc={tokenize:Hy};function Uy(e){let t=this,n=[],r=0,o,s,l;return u;function u(I){if(r<n.length){let z=n[r];return t.containerState=z[1],e.attempt(z[0].continuation,f,h)(I)}return h(I)}function f(I){if(r++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,o&&_();let z=t.events.length,H=z,v;for(;H--;)if(t.events[H][0]===\"exit\"&&t.events[H][1].type===\"chunkFlow\"){v=t.events[H][1].end;break}A(r);let te=z;for(;te<t.events.length;)t.events[te][1].end={...v},te++;return Fe(t.events,H+1,0,t.events.slice(z)),t.events.length=te,h(I)}return u(I)}function h(I){if(r===n.length){if(!o)return g(I);if(o.currentConstruct&&o.currentConstruct.concrete)return E(I);t.interrupt=!!(o.currentConstruct&&!o._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(Wc,m,p)(I)}function m(I){return o&&_(),A(r),g(I)}function p(I){return t.parser.lazy[t.now().line]=r!==n.length,l=t.now().offset,E(I)}function g(I){return t.containerState={},e.attempt(Wc,w,E)(I)}function w(I){return r++,n.push([t.currentConstruct,t.containerState]),g(I)}function E(I){if(I===null){o&&_(),A(0),e.consume(I);return}return o=o||t.parser.flow(t.now()),e.enter(\"chunkFlow\",{_tokenizer:o,contentType:\"flow\",previous:s}),F(I)}function F(I){if(I===null){T(e.exit(\"chunkFlow\"),!0),A(0),e.consume(I);return}return $(I)?(e.consume(I),T(e.exit(\"chunkFlow\")),r=0,t.interrupt=void 0,u):(e.consume(I),F)}function T(I,z){let H=t.sliceStream(I);if(z&&H.push(null),I.previous=s,s&&(s.next=I),s=I,o.defineSkip(I.start),o.write(H),t.parser.lazy[I.start.line]){let v=o.events.length;for(;v--;)if(o.events[v][1].start.offset<l&&(!o.events[v][1].end||o.events[v][1].end.offset>l))return;let te=t.events.length,J=te,Z,se;for(;J--;)if(t.events[J][0]===\"exit\"&&t.events[J][1].type===\"chunkFlow\"){if(Z){se=t.events[J][1].end;break}Z=!0}for(A(r),v=te;v<t.events.length;)t.events[v][1].end={...se},v++;Fe(t.events,J+1,0,t.events.slice(te)),t.events.length=v}}function A(I){let z=n.length;for(;z-- >I;){let H=n[z];t.containerState=H[1],H[0].exit.call(t,e)}n.length=I}function _(){o.write([null]),s=void 0,o=void 0,t.containerState._closeFlow=void 0}}function Hy(e,t,n){return G(e,e.attempt(this.parser.constructs.document,t,n),\"linePrefix\",this.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)}function sr(e){if(e===null||ye(e)||zc(e))return 1;if(Bc(e))return 2}function ar(e,t,n){let r=[],o=-1;for(;++o<e.length;){let s=e[o].resolveAll;s&&!r.includes(s)&&(t=s(t,n),r.push(s))}return t}var Yr={name:\"attention\",resolveAll:jy,tokenize:qy};function jy(e,t){let n=-1,r,o,s,l,u,f,h,m;for(;++n<e.length;)if(e[n][0]===\"enter\"&&e[n][1].type===\"attentionSequence\"&&e[n][1]._close){for(r=n;r--;)if(e[r][0]===\"exit\"&&e[r][1].type===\"attentionSequence\"&&e[r][1]._open&&t.sliceSerialize(e[r][1]).charCodeAt(0)===t.sliceSerialize(e[n][1]).charCodeAt(0)){if((e[r][1]._close||e[n][1]._open)&&(e[n][1].end.offset-e[n][1].start.offset)%3&&!((e[r][1].end.offset-e[r][1].start.offset+e[n][1].end.offset-e[n][1].start.offset)%3))continue;f=e[r][1].end.offset-e[r][1].start.offset>1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;let p={...e[r][1].end},g={...e[n][1].start};Hc(p,-f),Hc(g,f),l={type:f>1?\"strongSequence\":\"emphasisSequence\",start:p,end:{...e[r][1].end}},u={type:f>1?\"strongSequence\":\"emphasisSequence\",start:{...e[n][1].start},end:g},s={type:f>1?\"strongText\":\"emphasisText\",start:{...e[r][1].end},end:{...e[n][1].start}},o={type:f>1?\"strong\":\"emphasis\",start:{...l.start},end:{...u.end}},e[r][1].end={...l.start},e[n][1].start={...u.end},h=[],e[r][1].end.offset-e[r][1].start.offset&&(h=He(h,[[\"enter\",e[r][1],t],[\"exit\",e[r][1],t]])),h=He(h,[[\"enter\",o,t],[\"enter\",l,t],[\"exit\",l,t],[\"enter\",s,t]]),h=He(h,ar(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),h=He(h,[[\"exit\",s,t],[\"enter\",u,t],[\"exit\",u,t],[\"exit\",o,t]]),e[n][1].end.offset-e[n][1].start.offset?(m=2,h=He(h,[[\"enter\",e[n][1],t],[\"exit\",e[n][1],t]])):m=0,Fe(e,r-1,n-r+3,h),n=r+h.length-m-2;break}}for(n=-1;++n<e.length;)e[n][1].type===\"attentionSequence\"&&(e[n][1].type=\"data\");return e}function qy(e,t){let n=this.parser.constructs.attentionMarkers.null,r=this.previous,o=sr(r),s;return l;function l(f){return s=f,e.enter(\"attentionSequence\"),u(f)}function u(f){if(f===s)return e.consume(f),u;let h=e.exit(\"attentionSequence\"),m=sr(f),p=!m||m===2&&o||n.includes(f),g=!o||o===2&&m||n.includes(r);return h._open=!!(s===42?p:p&&(o||!g)),h._close=!!(s===42?g:g&&(m||!p)),t(f)}}function Hc(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}var sa={name:\"autolink\",tokenize:Gy};function Gy(e,t,n){let r=0;return o;function o(w){return e.enter(\"autolink\"),e.enter(\"autolinkMarker\"),e.consume(w),e.exit(\"autolinkMarker\"),e.enter(\"autolinkProtocol\"),s}function s(w){return ot(w)?(e.consume(w),l):w===64?n(w):h(w)}function l(w){return w===43||w===45||w===46||je(w)?(r=1,u(w)):h(w)}function u(w){return w===58?(e.consume(w),r=0,f):(w===43||w===45||w===46||je(w))&&r++<32?(e.consume(w),u):(r=0,h(w))}function f(w){return w===62?(e.exit(\"autolinkProtocol\"),e.enter(\"autolinkMarker\"),e.consume(w),e.exit(\"autolinkMarker\"),e.exit(\"autolink\"),t):w===null||w===32||w===60||Nr(w)?n(w):(e.consume(w),f)}function h(w){return w===64?(e.consume(w),m):Nc(w)?(e.consume(w),h):n(w)}function m(w){return je(w)?p(w):n(w)}function p(w){return w===46?(e.consume(w),r=0,m):w===62?(e.exit(\"autolinkProtocol\").type=\"autolinkEmail\",e.enter(\"autolinkMarker\"),e.consume(w),e.exit(\"autolinkMarker\"),e.exit(\"autolink\"),t):g(w)}function g(w){if((w===45||je(w))&&r++<63){let E=w===45?g:p;return e.consume(w),E}return n(w)}}var un={partial:!0,tokenize:Xy};function Xy(e,t,n){return r;function r(s){return q(s)?G(e,o,\"linePrefix\")(s):o(s)}function o(s){return s===null||$(s)?t(s):n(s)}}var Zi={continuation:{tokenize:Zy},exit:Ky,name:\"blockQuote\",tokenize:Jy};function Jy(e,t,n){let r=this;return o;function o(l){if(l===62){let u=r.containerState;return u.open||(e.enter(\"blockQuote\",{_container:!0}),u.open=!0),e.enter(\"blockQuotePrefix\"),e.enter(\"blockQuoteMarker\"),e.consume(l),e.exit(\"blockQuoteMarker\"),s}return n(l)}function s(l){return q(l)?(e.enter(\"blockQuotePrefixWhitespace\"),e.consume(l),e.exit(\"blockQuotePrefixWhitespace\"),e.exit(\"blockQuotePrefix\"),t):(e.exit(\"blockQuotePrefix\"),t(l))}}function Zy(e,t,n){let r=this;return o;function o(l){return q(l)?G(e,s,\"linePrefix\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)(l):s(l)}function s(l){return e.attempt(Zi,t,n)(l)}}function Ky(e){e.exit(\"blockQuote\")}var Ki={name:\"characterEscape\",tokenize:Qy};function Qy(e,t,n){return r;function r(s){return e.enter(\"characterEscape\"),e.enter(\"escapeMarker\"),e.consume(s),e.exit(\"escapeMarker\"),o}function o(s){return Yc(s)?(e.enter(\"characterEscapeValue\"),e.consume(s),e.exit(\"characterEscapeValue\"),e.exit(\"characterEscape\"),t):n(s)}}var Qi={name:\"characterReference\",tokenize:ek};function ek(e,t,n){let r=this,o=0,s,l;return u;function u(p){return e.enter(\"characterReference\"),e.enter(\"characterReferenceMarker\"),e.consume(p),e.exit(\"characterReferenceMarker\"),f}function f(p){return p===35?(e.enter(\"characterReferenceMarkerNumeric\"),e.consume(p),e.exit(\"characterReferenceMarkerNumeric\"),h):(e.enter(\"characterReferenceValue\"),s=31,l=je,m(p))}function h(p){return p===88||p===120?(e.enter(\"characterReferenceMarkerHexadecimal\"),e.consume(p),e.exit(\"characterReferenceMarkerHexadecimal\"),e.enter(\"characterReferenceValue\"),s=6,l=$c,m):(e.enter(\"characterReferenceValue\"),s=7,l=$r,m(p))}function m(p){if(p===59&&o){let g=e.exit(\"characterReferenceValue\");return l===je&&!or(r.sliceSerialize(g))?n(p):(e.enter(\"characterReferenceMarker\"),e.consume(p),e.exit(\"characterReferenceMarker\"),e.exit(\"characterReference\"),t)}return l(p)&&o++<s?(e.consume(p),m):n(p)}}var jc={partial:!0,tokenize:nk},eo={concrete:!0,name:\"codeFenced\",tokenize:tk};function tk(e,t,n){let r=this,o={partial:!0,tokenize:H},s=0,l=0,u;return f;function f(v){return h(v)}function h(v){let te=r.events[r.events.length-1];return s=te&&te[1].type===\"linePrefix\"?te[2].sliceSerialize(te[1],!0).length:0,u=v,e.enter(\"codeFenced\"),e.enter(\"codeFencedFence\"),e.enter(\"codeFencedFenceSequence\"),m(v)}function m(v){return v===u?(l++,e.consume(v),m):l<3?n(v):(e.exit(\"codeFencedFenceSequence\"),q(v)?G(e,p,\"whitespace\")(v):p(v))}function p(v){return v===null||$(v)?(e.exit(\"codeFencedFence\"),r.interrupt?t(v):e.check(jc,F,z)(v)):(e.enter(\"codeFencedFenceInfo\"),e.enter(\"chunkString\",{contentType:\"string\"}),g(v))}function g(v){return v===null||$(v)?(e.exit(\"chunkString\"),e.exit(\"codeFencedFenceInfo\"),p(v)):q(v)?(e.exit(\"chunkString\"),e.exit(\"codeFencedFenceInfo\"),G(e,w,\"whitespace\")(v)):v===96&&v===u?n(v):(e.consume(v),g)}function w(v){return v===null||$(v)?p(v):(e.enter(\"codeFencedFenceMeta\"),e.enter(\"chunkString\",{contentType:\"string\"}),E(v))}function E(v){return v===null||$(v)?(e.exit(\"chunkString\"),e.exit(\"codeFencedFenceMeta\"),p(v)):v===96&&v===u?n(v):(e.consume(v),E)}function F(v){return e.attempt(o,z,T)(v)}function T(v){return e.enter(\"lineEnding\"),e.consume(v),e.exit(\"lineEnding\"),A}function A(v){return s>0&&q(v)?G(e,_,\"linePrefix\",s+1)(v):_(v)}function _(v){return v===null||$(v)?e.check(jc,F,z)(v):(e.enter(\"codeFlowValue\"),I(v))}function I(v){return v===null||$(v)?(e.exit(\"codeFlowValue\"),_(v)):(e.consume(v),I)}function z(v){return e.exit(\"codeFenced\"),t(v)}function H(v,te,J){let Z=0;return se;function se(V){return v.enter(\"lineEnding\"),v.consume(V),v.exit(\"lineEnding\"),ue}function ue(V){return v.enter(\"codeFencedFence\"),q(V)?G(v,re,\"linePrefix\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)(V):re(V)}function re(V){return V===u?(v.enter(\"codeFencedFenceSequence\"),Y(V)):J(V)}function Y(V){return V===u?(Z++,v.consume(V),Y):Z>=l?(v.exit(\"codeFencedFenceSequence\"),q(V)?G(v,j,\"whitespace\")(V):j(V)):J(V)}function j(V){return V===null||$(V)?(v.exit(\"codeFencedFence\"),te(V)):J(V)}}}function nk(e,t,n){let r=this;return o;function o(l){return l===null?n(l):(e.enter(\"lineEnding\"),e.consume(l),e.exit(\"lineEnding\"),s)}function s(l){return r.parser.lazy[r.now().line]?n(l):t(l)}}var Br={name:\"codeIndented\",tokenize:ik},rk={partial:!0,tokenize:ok};function ik(e,t,n){let r=this;return o;function o(h){return e.enter(\"codeIndented\"),G(e,s,\"linePrefix\",5)(h)}function s(h){let m=r.events[r.events.length-1];return m&&m[1].type===\"linePrefix\"&&m[2].sliceSerialize(m[1],!0).length>=4?l(h):n(h)}function l(h){return h===null?f(h):$(h)?e.attempt(rk,l,f)(h):(e.enter(\"codeFlowValue\"),u(h))}function u(h){return h===null||$(h)?(e.exit(\"codeFlowValue\"),l(h)):(e.consume(h),u)}function f(h){return e.exit(\"codeIndented\"),t(h)}}function ok(e,t,n){let r=this;return o;function o(l){return r.parser.lazy[r.now().line]?n(l):$(l)?(e.enter(\"lineEnding\"),e.consume(l),e.exit(\"lineEnding\"),o):G(e,s,\"linePrefix\",5)(l)}function s(l){let u=r.events[r.events.length-1];return u&&u[1].type===\"linePrefix\"&&u[2].sliceSerialize(u[1],!0).length>=4?t(l):$(l)?o(l):n(l)}}var aa={name:\"codeText\",previous:ak,resolve:sk,tokenize:lk};function sk(e){let t=e.length-4,n=3,r,o;if((e[n][1].type===\"lineEnding\"||e[n][1].type===\"space\")&&(e[t][1].type===\"lineEnding\"||e[t][1].type===\"space\")){for(r=n;++r<t;)if(e[r][1].type===\"codeTextData\"){e[n][1].type=\"codeTextPadding\",e[t][1].type=\"codeTextPadding\",n+=2,t-=2;break}}for(r=n-1,t++;++r<=t;)o===void 0?r!==t&&e[r][1].type!==\"lineEnding\"&&(o=r):(r===t||e[r][1].type===\"lineEnding\")&&(e[o][1].type=\"codeTextData\",r!==o+2&&(e[o][1].end=e[r-1][1].end,e.splice(o+2,r-o-2),t-=r-o-2,r=o+2),o=void 0);return e}function ak(e){return e!==96||this.events[this.events.length-1][1].type===\"characterEscape\"}function lk(e,t,n){let r=this,o=0,s,l;return u;function u(g){return e.enter(\"codeText\"),e.enter(\"codeTextSequence\"),f(g)}function f(g){return g===96?(e.consume(g),o++,f):(e.exit(\"codeTextSequence\"),h(g))}function h(g){return g===null?n(g):g===32?(e.enter(\"space\"),e.consume(g),e.exit(\"space\"),h):g===96?(l=e.enter(\"codeTextSequence\"),s=0,p(g)):$(g)?(e.enter(\"lineEnding\"),e.consume(g),e.exit(\"lineEnding\"),h):(e.enter(\"codeTextData\"),m(g))}function m(g){return g===null||g===32||g===96||$(g)?(e.exit(\"codeTextData\"),h(g)):(e.consume(g),m)}function p(g){return g===96?(e.consume(g),s++,p):s===o?(e.exit(\"codeTextSequence\"),e.exit(\"codeText\"),t(g)):(l.type=\"codeTextData\",m(g))}}var to=class{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError(\"Cannot access index `\"+t+\"` in a splice buffer of size `\"+(this.left.length+this.right.length)+\"`\");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,n){let r=n??Number.POSITIVE_INFINITY;return r<this.left.length?this.left.slice(t,r):t>this.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(t,n,r){let o=n||0;this.setCursor(Math.trunc(t));let s=this.right.splice(this.right.length-o,Number.POSITIVE_INFINITY);return r&&zr(this.left,r),s.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),zr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),zr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){let n=this.left.splice(t,Number.POSITIVE_INFINITY);zr(this.right,n.reverse())}else{let n=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);zr(this.left,n.reverse())}}};function zr(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function no(e){let t={},n=-1,r,o,s,l,u,f,h,m=new to(e);for(;++n<m.length;){for(;n in t;)n=t[n];if(r=m.get(n),n&&r[1].type===\"chunkFlow\"&&m.get(n-1)[1].type===\"listItemPrefix\"&&(f=r[1]._tokenizer.events,s=0,s<f.length&&f[s][1].type===\"lineEndingBlank\"&&(s+=2),s<f.length&&f[s][1].type===\"content\"))for(;++s<f.length&&f[s][1].type!==\"content\";)f[s][1].type===\"chunkText\"&&(f[s][1]._isInFirstContentOfListItem=!0,s++);if(r[0]===\"enter\")r[1].contentType&&(Object.assign(t,uk(m,n)),n=t[n],h=!0);else if(r[1]._container){for(s=n,o=void 0;s--&&(l=m.get(s),l[1].type===\"lineEnding\"||l[1].type===\"lineEndingBlank\");)l[0]===\"enter\"&&(o&&(m.get(o)[1].type=\"lineEndingBlank\"),l[1].type=\"lineEnding\",o=s);o&&(r[1].end={...m.get(o)[1].start},u=m.slice(o,n),u.unshift(r),m.splice(o,n-o+1,u))}}return Fe(e,0,Number.POSITIVE_INFINITY,m.slice(0)),!h}function uk(e,t){let n=e.get(t)[1],r=e.get(t)[2],o=t-1,s=[],l=n._tokenizer||r.parser[n.contentType](n.start),u=l.events,f=[],h={},m,p,g=-1,w=n,E=0,F=0,T=[F];for(;w;){for(;e.get(++o)[1]!==w;);s.push(o),w._tokenizer||(m=r.sliceStream(w),w.next||m.push(null),p&&l.defineSkip(w.start),w._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=!0),l.write(m),w._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=void 0)),p=w,w=w.next}for(w=n;++g<u.length;)u[g][0]===\"exit\"&&u[g-1][0]===\"enter\"&&u[g][1].type===u[g-1][1].type&&u[g][1].start.line!==u[g][1].end.line&&(F=g+1,T.push(F),w._tokenizer=void 0,w.previous=void 0,w=w.next);for(l.events=[],w?(w._tokenizer=void 0,w.previous=void 0):T.pop(),g=T.length;g--;){let A=u.slice(T[g],T[g+1]),_=s.pop();f.push([_,_+A.length-1]),e.splice(_,2,A)}for(f.reverse(),g=-1;++g<f.length;)h[E+f[g][0]]=E+f[g][1],E+=f[g][1]-f[g][0]-1;return h}var la={resolve:fk,tokenize:dk},ck={partial:!0,tokenize:hk};function fk(e){return no(e),e}function dk(e,t){let n;return r;function r(u){return e.enter(\"content\"),n=e.enter(\"chunkContent\",{contentType:\"content\"}),o(u)}function o(u){return u===null?s(u):$(u)?e.check(ck,l,s)(u):(e.consume(u),o)}function s(u){return e.exit(\"chunkContent\"),e.exit(\"content\"),t(u)}function l(u){return e.consume(u),e.exit(\"chunkContent\"),n.next=e.enter(\"chunkContent\",{contentType:\"content\",previous:n}),n=n.next,o}}function hk(e,t,n){let r=this;return o;function o(l){return e.exit(\"chunkContent\"),e.enter(\"lineEnding\"),e.consume(l),e.exit(\"lineEnding\"),G(e,s,\"linePrefix\")}function s(l){if(l===null||$(l))return n(l);let u=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes(\"codeIndented\")&&u&&u[1].type===\"linePrefix\"&&u[2].sliceSerialize(u[1],!0).length>=4?t(l):e.interrupt(r.parser.constructs.flow,n,t)(l)}}function ro(e,t,n,r,o,s,l,u,f){let h=f||Number.POSITIVE_INFINITY,m=0;return p;function p(A){return A===60?(e.enter(r),e.enter(o),e.enter(s),e.consume(A),e.exit(s),g):A===null||A===32||A===41||Nr(A)?n(A):(e.enter(r),e.enter(l),e.enter(u),e.enter(\"chunkString\",{contentType:\"string\"}),F(A))}function g(A){return A===62?(e.enter(s),e.consume(A),e.exit(s),e.exit(o),e.exit(r),t):(e.enter(u),e.enter(\"chunkString\",{contentType:\"string\"}),w(A))}function w(A){return A===62?(e.exit(\"chunkString\"),e.exit(u),g(A)):A===null||A===60||$(A)?n(A):(e.consume(A),A===92?E:w)}function E(A){return A===60||A===62||A===92?(e.consume(A),w):w(A)}function F(A){return!m&&(A===null||A===41||ye(A))?(e.exit(\"chunkString\"),e.exit(u),e.exit(l),e.exit(r),t(A)):m<h&&A===40?(e.consume(A),m++,F):A===41?(e.consume(A),m--,F):A===null||A===32||A===40||Nr(A)?n(A):(e.consume(A),A===92?T:F)}function T(A){return A===40||A===41||A===92?(e.consume(A),F):F(A)}}function io(e,t,n,r,o,s){let l=this,u=0,f;return h;function h(w){return e.enter(r),e.enter(o),e.consume(w),e.exit(o),e.enter(s),m}function m(w){return u>999||w===null||w===91||w===93&&!f||w===94&&!u&&\"_hiddenFootnoteSupport\"in l.parser.constructs?n(w):w===93?(e.exit(s),e.enter(o),e.consume(w),e.exit(o),e.exit(r),t):$(w)?(e.enter(\"lineEnding\"),e.consume(w),e.exit(\"lineEnding\"),m):(e.enter(\"chunkString\",{contentType:\"string\"}),p(w))}function p(w){return w===null||w===91||w===93||$(w)||u++>999?(e.exit(\"chunkString\"),m(w)):(e.consume(w),f||(f=!q(w)),w===92?g:p)}function g(w){return w===91||w===92||w===93?(e.consume(w),u++,p):p(w)}}function oo(e,t,n,r,o,s){let l;return u;function u(g){return g===34||g===39||g===40?(e.enter(r),e.enter(o),e.consume(g),e.exit(o),l=g===40?41:g,f):n(g)}function f(g){return g===l?(e.enter(o),e.consume(g),e.exit(o),e.exit(r),t):(e.enter(s),h(g))}function h(g){return g===l?(e.exit(s),f(l)):g===null?n(g):$(g)?(e.enter(\"lineEnding\"),e.consume(g),e.exit(\"lineEnding\"),G(e,h,\"linePrefix\")):(e.enter(\"chunkString\",{contentType:\"string\"}),m(g))}function m(g){return g===l||g===null||$(g)?(e.exit(\"chunkString\"),h(g)):(e.consume(g),g===92?p:m)}function p(g){return g===l||g===92?(e.consume(g),m):m(g)}}function Tn(e,t){let n;return r;function r(o){return $(o)?(e.enter(\"lineEnding\"),e.consume(o),e.exit(\"lineEnding\"),n=!0,r):q(o)?G(e,r,n?\"linePrefix\":\"lineSuffix\")(o):t(o)}}var ua={name:\"definition\",tokenize:pk},mk={partial:!0,tokenize:gk};function pk(e,t,n){let r=this,o;return s;function s(w){return e.enter(\"definition\"),l(w)}function l(w){return io.call(r,e,u,n,\"definitionLabel\",\"definitionLabelMarker\",\"definitionLabelString\")(w)}function u(w){return o=Xt(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),w===58?(e.enter(\"definitionMarker\"),e.consume(w),e.exit(\"definitionMarker\"),f):n(w)}function f(w){return ye(w)?Tn(e,h)(w):h(w)}function h(w){return ro(e,m,n,\"definitionDestination\",\"definitionDestinationLiteral\",\"definitionDestinationLiteralMarker\",\"definitionDestinationRaw\",\"definitionDestinationString\")(w)}function m(w){return e.attempt(mk,p,p)(w)}function p(w){return q(w)?G(e,g,\"whitespace\")(w):g(w)}function g(w){return w===null||$(w)?(e.exit(\"definition\"),r.parser.defined.push(o),t(w)):n(w)}}function gk(e,t,n){return r;function r(u){return ye(u)?Tn(e,o)(u):n(u)}function o(u){return oo(e,s,n,\"definitionTitle\",\"definitionTitleMarker\",\"definitionTitleString\")(u)}function s(u){return q(u)?G(e,l,\"whitespace\")(u):l(u)}function l(u){return u===null||$(u)?t(u):n(u)}}var ca={name:\"hardBreakEscape\",tokenize:wk};function wk(e,t,n){return r;function r(s){return e.enter(\"hardBreakEscape\"),e.consume(s),o}function o(s){return $(s)?(e.exit(\"hardBreakEscape\"),t(s)):n(s)}}var fa={name:\"headingAtx\",resolve:yk,tokenize:kk};function yk(e,t){let n=e.length-2,r=3,o,s;return e[r][1].type===\"whitespace\"&&(r+=2),n-2>r&&e[n][1].type===\"whitespace\"&&(n-=2),e[n][1].type===\"atxHeadingSequence\"&&(r===n-1||n-4>r&&e[n-2][1].type===\"whitespace\")&&(n-=r+1===n?2:4),n>r&&(o={type:\"atxHeadingText\",start:e[r][1].start,end:e[n][1].end},s={type:\"chunkText\",start:e[r][1].start,end:e[n][1].end,contentType:\"text\"},Fe(e,r,n-r+1,[[\"enter\",o,t],[\"enter\",s,t],[\"exit\",s,t],[\"exit\",o,t]])),e}function kk(e,t,n){let r=0;return o;function o(m){return e.enter(\"atxHeading\"),s(m)}function s(m){return e.enter(\"atxHeadingSequence\"),l(m)}function l(m){return m===35&&r++<6?(e.consume(m),l):m===null||ye(m)?(e.exit(\"atxHeadingSequence\"),u(m)):n(m)}function u(m){return m===35?(e.enter(\"atxHeadingSequence\"),f(m)):m===null||$(m)?(e.exit(\"atxHeading\"),t(m)):q(m)?G(e,u,\"whitespace\")(m):(e.enter(\"atxHeadingText\"),h(m))}function f(m){return m===35?(e.consume(m),f):(e.exit(\"atxHeadingSequence\"),u(m))}function h(m){return m===null||m===35||ye(m)?(e.exit(\"atxHeadingText\"),u(m)):(e.consume(m),h)}}var qc=[\"address\",\"article\",\"aside\",\"base\",\"basefont\",\"blockquote\",\"body\",\"caption\",\"center\",\"col\",\"colgroup\",\"dd\",\"details\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"frame\",\"frameset\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hr\",\"html\",\"iframe\",\"legend\",\"li\",\"link\",\"main\",\"menu\",\"menuitem\",\"nav\",\"noframes\",\"ol\",\"optgroup\",\"option\",\"p\",\"param\",\"search\",\"section\",\"summary\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"title\",\"tr\",\"track\",\"ul\"],da=[\"pre\",\"script\",\"style\",\"textarea\"];var ha={concrete:!0,name:\"htmlFlow\",resolveTo:Ek,tokenize:Ak},bk={partial:!0,tokenize:vk},xk={partial:!0,tokenize:Ck};function Ek(e){let t=e.length;for(;t--&&!(e[t][0]===\"enter\"&&e[t][1].type===\"htmlFlow\"););return t>1&&e[t-2][1].type===\"linePrefix\"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function Ak(e,t,n){let r=this,o,s,l,u,f;return h;function h(k){return m(k)}function m(k){return e.enter(\"htmlFlow\"),e.enter(\"htmlFlowData\"),e.consume(k),p}function p(k){return k===33?(e.consume(k),g):k===47?(e.consume(k),s=!0,F):k===63?(e.consume(k),o=3,r.interrupt?t:x):ot(k)?(e.consume(k),l=String.fromCharCode(k),T):n(k)}function g(k){return k===45?(e.consume(k),o=2,w):k===91?(e.consume(k),o=5,u=0,E):ot(k)?(e.consume(k),o=4,r.interrupt?t:x):n(k)}function w(k){return k===45?(e.consume(k),r.interrupt?t:x):n(k)}function E(k){let Ye=\"CDATA[\";return k===Ye.charCodeAt(u++)?(e.consume(k),u===Ye.length?r.interrupt?t:re:E):n(k)}function F(k){return ot(k)?(e.consume(k),l=String.fromCharCode(k),T):n(k)}function T(k){if(k===null||k===47||k===62||ye(k)){let Ye=k===47,Rt=l.toLowerCase();return!Ye&&!s&&da.includes(Rt)?(o=1,r.interrupt?t(k):re(k)):qc.includes(l.toLowerCase())?(o=6,Ye?(e.consume(k),A):r.interrupt?t(k):re(k)):(o=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(k):s?_(k):I(k))}return k===45||je(k)?(e.consume(k),l+=String.fromCharCode(k),T):n(k)}function A(k){return k===62?(e.consume(k),r.interrupt?t:re):n(k)}function _(k){return q(k)?(e.consume(k),_):se(k)}function I(k){return k===47?(e.consume(k),se):k===58||k===95||ot(k)?(e.consume(k),z):q(k)?(e.consume(k),I):se(k)}function z(k){return k===45||k===46||k===58||k===95||je(k)?(e.consume(k),z):H(k)}function H(k){return k===61?(e.consume(k),v):q(k)?(e.consume(k),H):I(k)}function v(k){return k===null||k===60||k===61||k===62||k===96?n(k):k===34||k===39?(e.consume(k),f=k,te):q(k)?(e.consume(k),v):J(k)}function te(k){return k===f?(e.consume(k),f=null,Z):k===null||$(k)?n(k):(e.consume(k),te)}function J(k){return k===null||k===34||k===39||k===47||k===60||k===61||k===62||k===96||ye(k)?H(k):(e.consume(k),J)}function Z(k){return k===47||k===62||q(k)?I(k):n(k)}function se(k){return k===62?(e.consume(k),ue):n(k)}function ue(k){return k===null||$(k)?re(k):q(k)?(e.consume(k),ue):n(k)}function re(k){return k===45&&o===2?(e.consume(k),ie):k===60&&o===1?(e.consume(k),he):k===62&&o===4?(e.consume(k),Ie):k===63&&o===3?(e.consume(k),x):k===93&&o===5?(e.consume(k),Xe):$(k)&&(o===6||o===7)?(e.exit(\"htmlFlowData\"),e.check(bk,Pe,Y)(k)):k===null||$(k)?(e.exit(\"htmlFlowData\"),Y(k)):(e.consume(k),re)}function Y(k){return e.check(xk,j,Pe)(k)}function j(k){return e.enter(\"lineEnding\"),e.consume(k),e.exit(\"lineEnding\"),V}function V(k){return k===null||$(k)?Y(k):(e.enter(\"htmlFlowData\"),re(k))}function ie(k){return k===45?(e.consume(k),x):re(k)}function he(k){return k===47?(e.consume(k),l=\"\",me):re(k)}function me(k){if(k===62){let Ye=l.toLowerCase();return da.includes(Ye)?(e.consume(k),Ie):re(k)}return ot(k)&&l.length<8?(e.consume(k),l+=String.fromCharCode(k),me):re(k)}function Xe(k){return k===93?(e.consume(k),x):re(k)}function x(k){return k===62?(e.consume(k),Ie):k===45&&o===2?(e.consume(k),x):re(k)}function Ie(k){return k===null||$(k)?(e.exit(\"htmlFlowData\"),Pe(k)):(e.consume(k),Ie)}function Pe(k){return e.exit(\"htmlFlow\"),t(k)}}function Ck(e,t,n){let r=this;return o;function o(l){return $(l)?(e.enter(\"lineEnding\"),e.consume(l),e.exit(\"lineEnding\"),s):n(l)}function s(l){return r.parser.lazy[r.now().line]?n(l):t(l)}}function vk(e,t,n){return r;function r(o){return e.enter(\"lineEnding\"),e.consume(o),e.exit(\"lineEnding\"),e.attempt(un,t,n)}}var ma={name:\"htmlText\",tokenize:Sk};function Sk(e,t,n){let r=this,o,s,l;return u;function u(x){return e.enter(\"htmlText\"),e.enter(\"htmlTextData\"),e.consume(x),f}function f(x){return x===33?(e.consume(x),h):x===47?(e.consume(x),H):x===63?(e.consume(x),I):ot(x)?(e.consume(x),J):n(x)}function h(x){return x===45?(e.consume(x),m):x===91?(e.consume(x),s=0,E):ot(x)?(e.consume(x),_):n(x)}function m(x){return x===45?(e.consume(x),w):n(x)}function p(x){return x===null?n(x):x===45?(e.consume(x),g):$(x)?(l=p,he(x)):(e.consume(x),p)}function g(x){return x===45?(e.consume(x),w):p(x)}function w(x){return x===62?ie(x):x===45?g(x):p(x)}function E(x){let Ie=\"CDATA[\";return x===Ie.charCodeAt(s++)?(e.consume(x),s===Ie.length?F:E):n(x)}function F(x){return x===null?n(x):x===93?(e.consume(x),T):$(x)?(l=F,he(x)):(e.consume(x),F)}function T(x){return x===93?(e.consume(x),A):F(x)}function A(x){return x===62?ie(x):x===93?(e.consume(x),A):F(x)}function _(x){return x===null||x===62?ie(x):$(x)?(l=_,he(x)):(e.consume(x),_)}function I(x){return x===null?n(x):x===63?(e.consume(x),z):$(x)?(l=I,he(x)):(e.consume(x),I)}function z(x){return x===62?ie(x):I(x)}function H(x){return ot(x)?(e.consume(x),v):n(x)}function v(x){return x===45||je(x)?(e.consume(x),v):te(x)}function te(x){return $(x)?(l=te,he(x)):q(x)?(e.consume(x),te):ie(x)}function J(x){return x===45||je(x)?(e.consume(x),J):x===47||x===62||ye(x)?Z(x):n(x)}function Z(x){return x===47?(e.consume(x),ie):x===58||x===95||ot(x)?(e.consume(x),se):$(x)?(l=Z,he(x)):q(x)?(e.consume(x),Z):ie(x)}function se(x){return x===45||x===46||x===58||x===95||je(x)?(e.consume(x),se):ue(x)}function ue(x){return x===61?(e.consume(x),re):$(x)?(l=ue,he(x)):q(x)?(e.consume(x),ue):Z(x)}function re(x){return x===null||x===60||x===61||x===62||x===96?n(x):x===34||x===39?(e.consume(x),o=x,Y):$(x)?(l=re,he(x)):q(x)?(e.consume(x),re):(e.consume(x),j)}function Y(x){return x===o?(e.consume(x),o=void 0,V):x===null?n(x):$(x)?(l=Y,he(x)):(e.consume(x),Y)}function j(x){return x===null||x===34||x===39||x===60||x===61||x===96?n(x):x===47||x===62||ye(x)?Z(x):(e.consume(x),j)}function V(x){return x===47||x===62||ye(x)?Z(x):n(x)}function ie(x){return x===62?(e.consume(x),e.exit(\"htmlTextData\"),e.exit(\"htmlText\"),t):n(x)}function he(x){return e.exit(\"htmlTextData\"),e.enter(\"lineEnding\"),e.consume(x),e.exit(\"lineEnding\"),me}function me(x){return q(x)?G(e,Xe,\"linePrefix\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)(x):Xe(x)}function Xe(x){return e.enter(\"htmlTextData\"),l(x)}}var _n={name:\"labelEnd\",resolveAll:Ik,resolveTo:Pk,tokenize:Rk},Tk={tokenize:Ok},_k={tokenize:Lk},Fk={tokenize:Dk};function Ik(e){let t=-1,n=[];for(;++t<e.length;){let r=e[t][1];if(n.push(e[t]),r.type===\"labelImage\"||r.type===\"labelLink\"||r.type===\"labelEnd\"){let o=r.type===\"labelImage\"?4:2;r.type=\"data\",t+=o}}return e.length!==n.length&&Fe(e,0,e.length,n),e}function Pk(e,t){let n=e.length,r=0,o,s,l,u;for(;n--;)if(o=e[n][1],s){if(o.type===\"link\"||o.type===\"labelLink\"&&o._inactive)break;e[n][0]===\"enter\"&&o.type===\"labelLink\"&&(o._inactive=!0)}else if(l){if(e[n][0]===\"enter\"&&(o.type===\"labelImage\"||o.type===\"labelLink\")&&!o._balanced&&(s=n,o.type!==\"labelLink\")){r=2;break}}else o.type===\"labelEnd\"&&(l=n);let f={type:e[s][1].type===\"labelLink\"?\"link\":\"image\",start:{...e[s][1].start},end:{...e[e.length-1][1].end}},h={type:\"label\",start:{...e[s][1].start},end:{...e[l][1].end}},m={type:\"labelText\",start:{...e[s+r+2][1].end},end:{...e[l-2][1].start}};return u=[[\"enter\",f,t],[\"enter\",h,t]],u=He(u,e.slice(s+1,s+r+3)),u=He(u,[[\"enter\",m,t]]),u=He(u,ar(t.parser.constructs.insideSpan.null,e.slice(s+r+4,l-3),t)),u=He(u,[[\"exit\",m,t],e[l-2],e[l-1],[\"exit\",h,t]]),u=He(u,e.slice(l+1)),u=He(u,[[\"exit\",f,t]]),Fe(e,s,e.length,u),e}function Rk(e,t,n){let r=this,o=r.events.length,s,l;for(;o--;)if((r.events[o][1].type===\"labelImage\"||r.events[o][1].type===\"labelLink\")&&!r.events[o][1]._balanced){s=r.events[o][1];break}return u;function u(g){return s?s._inactive?p(g):(l=r.parser.defined.includes(Xt(r.sliceSerialize({start:s.end,end:r.now()}))),e.enter(\"labelEnd\"),e.enter(\"labelMarker\"),e.consume(g),e.exit(\"labelMarker\"),e.exit(\"labelEnd\"),f):n(g)}function f(g){return g===40?e.attempt(Tk,m,l?m:p)(g):g===91?e.attempt(_k,m,l?h:p)(g):l?m(g):p(g)}function h(g){return e.attempt(Fk,m,p)(g)}function m(g){return t(g)}function p(g){return s._balanced=!0,n(g)}}function Ok(e,t,n){return r;function r(p){return e.enter(\"resource\"),e.enter(\"resourceMarker\"),e.consume(p),e.exit(\"resourceMarker\"),o}function o(p){return ye(p)?Tn(e,s)(p):s(p)}function s(p){return p===41?m(p):ro(e,l,u,\"resourceDestination\",\"resourceDestinationLiteral\",\"resourceDestinationLiteralMarker\",\"resourceDestinationRaw\",\"resourceDestinationString\",32)(p)}function l(p){return ye(p)?Tn(e,f)(p):m(p)}function u(p){return n(p)}function f(p){return p===34||p===39||p===40?oo(e,h,n,\"resourceTitle\",\"resourceTitleMarker\",\"resourceTitleString\")(p):m(p)}function h(p){return ye(p)?Tn(e,m)(p):m(p)}function m(p){return p===41?(e.enter(\"resourceMarker\"),e.consume(p),e.exit(\"resourceMarker\"),e.exit(\"resource\"),t):n(p)}}function Lk(e,t,n){let r=this;return o;function o(u){return io.call(r,e,s,l,\"reference\",\"referenceMarker\",\"referenceString\")(u)}function s(u){return r.parser.defined.includes(Xt(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?t(u):n(u)}function l(u){return n(u)}}function Dk(e,t,n){return r;function r(s){return e.enter(\"reference\"),e.enter(\"referenceMarker\"),e.consume(s),e.exit(\"referenceMarker\"),o}function o(s){return s===93?(e.enter(\"referenceMarker\"),e.consume(s),e.exit(\"referenceMarker\"),e.exit(\"reference\"),t):n(s)}}var pa={name:\"labelStartImage\",resolveAll:_n.resolveAll,tokenize:Mk};function Mk(e,t,n){let r=this;return o;function o(u){return e.enter(\"labelImage\"),e.enter(\"labelImageMarker\"),e.consume(u),e.exit(\"labelImageMarker\"),s}function s(u){return u===91?(e.enter(\"labelMarker\"),e.consume(u),e.exit(\"labelMarker\"),e.exit(\"labelImage\"),l):n(u)}function l(u){return u===94&&\"_hiddenFootnoteSupport\"in r.parser.constructs?n(u):t(u)}}var ga={name:\"labelStartLink\",resolveAll:_n.resolveAll,tokenize:Nk};function Nk(e,t,n){let r=this;return o;function o(l){return e.enter(\"labelLink\"),e.enter(\"labelMarker\"),e.consume(l),e.exit(\"labelMarker\"),e.exit(\"labelLink\"),s}function s(l){return l===94&&\"_hiddenFootnoteSupport\"in r.parser.constructs?n(l):t(l)}}var Vr={name:\"lineEnding\",tokenize:$k};function $k(e,t){return n;function n(r){return e.enter(\"lineEnding\"),e.consume(r),e.exit(\"lineEnding\"),G(e,t,\"linePrefix\")}}var Fn={name:\"thematicBreak\",tokenize:Yk};function Yk(e,t,n){let r=0,o;return s;function s(h){return e.enter(\"thematicBreak\"),l(h)}function l(h){return o=h,u(h)}function u(h){return h===o?(e.enter(\"thematicBreakSequence\"),f(h)):r>=3&&(h===null||$(h))?(e.exit(\"thematicBreak\"),t(h)):n(h)}function f(h){return h===o?(e.consume(h),r++,f):(e.exit(\"thematicBreakSequence\"),q(h)?G(e,u,\"whitespace\")(h):u(h))}}var Ne={continuation:{tokenize:Wk},exit:Hk,name:\"list\",tokenize:Vk},Bk={partial:!0,tokenize:jk},zk={partial:!0,tokenize:Uk};function Vk(e,t,n){let r=this,o=r.events[r.events.length-1],s=o&&o[1].type===\"linePrefix\"?o[2].sliceSerialize(o[1],!0).length:0,l=0;return u;function u(w){let E=r.containerState.type||(w===42||w===43||w===45?\"listUnordered\":\"listOrdered\");if(E===\"listUnordered\"?!r.containerState.marker||w===r.containerState.marker:$r(w)){if(r.containerState.type||(r.containerState.type=E,e.enter(E,{_container:!0})),E===\"listUnordered\")return e.enter(\"listItemPrefix\"),w===42||w===45?e.check(Fn,n,h)(w):h(w);if(!r.interrupt||w===49)return e.enter(\"listItemPrefix\"),e.enter(\"listItemValue\"),f(w)}return n(w)}function f(w){return $r(w)&&++l<10?(e.consume(w),f):(!r.interrupt||l<2)&&(r.containerState.marker?w===r.containerState.marker:w===41||w===46)?(e.exit(\"listItemValue\"),h(w)):n(w)}function h(w){return e.enter(\"listItemMarker\"),e.consume(w),e.exit(\"listItemMarker\"),r.containerState.marker=r.containerState.marker||w,e.check(un,r.interrupt?n:m,e.attempt(Bk,g,p))}function m(w){return r.containerState.initialBlankLine=!0,s++,g(w)}function p(w){return q(w)?(e.enter(\"listItemPrefixWhitespace\"),e.consume(w),e.exit(\"listItemPrefixWhitespace\"),g):n(w)}function g(w){return r.containerState.size=s+r.sliceSerialize(e.exit(\"listItemPrefix\"),!0).length,t(w)}}function Wk(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(un,o,s);function o(u){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,G(e,t,\"listItemIndent\",r.containerState.size+1)(u)}function s(u){return r.containerState.furtherBlankLines||!q(u)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,l(u)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(zk,t,l)(u))}function l(u){return r.containerState._closeFlow=!0,r.interrupt=void 0,G(e,e.attempt(Ne,t,n),\"linePrefix\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)(u)}}function Uk(e,t,n){let r=this;return G(e,o,\"listItemIndent\",r.containerState.size+1);function o(s){let l=r.events[r.events.length-1];return l&&l[1].type===\"listItemIndent\"&&l[2].sliceSerialize(l[1],!0).length===r.containerState.size?t(s):n(s)}}function Hk(e){e.exit(this.containerState.type)}function jk(e,t,n){let r=this;return G(e,o,\"listItemPrefixWhitespace\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:5);function o(s){let l=r.events[r.events.length-1];return!q(s)&&l&&l[1].type===\"listItemPrefixWhitespace\"?t(s):n(s)}}var so={name:\"setextUnderline\",resolveTo:qk,tokenize:Gk};function qk(e,t){let n=e.length,r,o,s;for(;n--;)if(e[n][0]===\"enter\"){if(e[n][1].type===\"content\"){r=n;break}e[n][1].type===\"paragraph\"&&(o=n)}else e[n][1].type===\"content\"&&e.splice(n,1),!s&&e[n][1].type===\"definition\"&&(s=n);let l={type:\"setextHeading\",start:{...e[o][1].start},end:{...e[e.length-1][1].end}};return e[o][1].type=\"setextHeadingText\",s?(e.splice(o,0,[\"enter\",l,t]),e.splice(s+1,0,[\"exit\",e[r][1],t]),e[r][1].end={...e[s][1].end}):e[r][1]=l,e.push([\"exit\",l,t]),e}function Gk(e,t,n){let r=this,o;return s;function s(h){let m=r.events.length,p;for(;m--;)if(r.events[m][1].type!==\"lineEnding\"&&r.events[m][1].type!==\"linePrefix\"&&r.events[m][1].type!==\"content\"){p=r.events[m][1].type===\"paragraph\";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||p)?(e.enter(\"setextHeadingLine\"),o=h,l(h)):n(h)}function l(h){return e.enter(\"setextHeadingLineSequence\"),u(h)}function u(h){return h===o?(e.consume(h),u):(e.exit(\"setextHeadingLineSequence\"),q(h)?G(e,f,\"lineSuffix\")(h):f(h))}function f(h){return h===null||$(h)?(e.exit(\"setextHeadingLine\"),t(h)):n(h)}}var Gc={tokenize:Xk};function Xk(e){let t=this,n=e.attempt(un,r,e.attempt(this.parser.constructs.flowInitial,o,G(e,e.attempt(this.parser.constructs.flow,o,e.attempt(la,o)),\"linePrefix\")));return n;function r(s){if(s===null){e.consume(s);return}return e.enter(\"lineEndingBlank\"),e.consume(s),e.exit(\"lineEndingBlank\"),t.currentConstruct=void 0,n}function o(s){if(s===null){e.consume(s);return}return e.enter(\"lineEnding\"),e.consume(s),e.exit(\"lineEnding\"),t.currentConstruct=void 0,n}}var Xc={resolveAll:Qc()},Jc=Kc(\"string\"),Zc=Kc(\"text\");function Kc(e){return{resolveAll:Qc(e===\"text\"?Jk:void 0),tokenize:t};function t(n){let r=this,o=this.parser.constructs[e],s=n.attempt(o,l,u);return l;function l(m){return h(m)?s(m):u(m)}function u(m){if(m===null){n.consume(m);return}return n.enter(\"data\"),n.consume(m),f}function f(m){return h(m)?(n.exit(\"data\"),s(m)):(n.consume(m),f)}function h(m){if(m===null)return!0;let p=o[m],g=-1;if(p)for(;++g<p.length;){let w=p[g];if(!w.previous||w.previous.call(r,r.previous))return!0}return!1}}}function Qc(e){return t;function t(n,r){let o=-1,s;for(;++o<=n.length;)s===void 0?n[o]&&n[o][1].type===\"data\"&&(s=o,o++):(!n[o]||n[o][1].type!==\"data\")&&(o!==s+2&&(n[s][1].end=n[o-1][1].end,n.splice(s+2,o-s-2),o=s+2),s=void 0);return e?e(n,r):n}}function Jk(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||e[n][1].type===\"lineEnding\")&&e[n-1][1].type===\"data\"){let r=e[n-1][1],o=t.sliceStream(r),s=o.length,l=-1,u=0,f;for(;s--;){let h=o[s];if(typeof h==\"string\"){for(l=h.length;h.charCodeAt(l-1)===32;)u++,l--;if(l)break;l=-1}else if(h===-2)f=!0,u++;else if(h!==-1){s++;break}}if(u){let h={type:n===e.length||f||u<2?\"lineSuffix\":\"hardBreakTrailing\",start:{_bufferIndex:s?l:r.start._bufferIndex+l,_index:r.start._index+s,line:r.end.line,column:r.end.column-u,offset:r.end.offset-u},end:{...r.end}};r.end={...h.start},r.start.offset===r.end.offset?Object.assign(r,h):(e.splice(n,0,[\"enter\",h,t],[\"exit\",h,t]),n+=2)}n++}return e}var wa={};Iu(wa,{attentionMarkers:()=>ib,contentInitial:()=>Kk,disable:()=>ob,document:()=>Zk,flow:()=>eb,flowInitial:()=>Qk,insideSpan:()=>rb,string:()=>tb,text:()=>nb});var Zk={42:Ne,43:Ne,45:Ne,48:Ne,49:Ne,50:Ne,51:Ne,52:Ne,53:Ne,54:Ne,55:Ne,56:Ne,57:Ne,62:Zi},Kk={91:ua},Qk={[-2]:Br,[-1]:Br,32:Br},eb={35:fa,42:Fn,45:[so,Fn],60:ha,61:so,95:Fn,96:eo,126:eo},tb={38:Qi,92:Ki},nb={[-5]:Vr,[-4]:Vr,[-3]:Vr,33:pa,38:Qi,42:Yr,60:[sa,ma],91:ga,92:[ca,Ki],93:_n,95:Yr,96:aa},rb={null:[Yr,Xc]},ib={null:[42,95]},ob={null:[]};function ef(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},o={},s=[],l=[],u=[],f=!0,h={attempt:Z(te),check:Z(J),consume:z,enter:H,exit:v,interrupt:Z(J,{interrupt:!0})},m={code:null,containerState:{},defineSkip:A,events:[],now:T,parser:e,previous:null,sliceSerialize:E,sliceStream:F,write:w},p=t.tokenize.call(m,h),g;return t.resolveAll&&s.push(t),m;function w(Y){return l=He(l,Y),_(),l[l.length-1]!==null?[]:(se(t,0),m.events=ar(s,m.events,m),m.events)}function E(Y,j){return ab(F(Y),j)}function F(Y){return sb(l,Y)}function T(){let{_bufferIndex:Y,_index:j,line:V,column:ie,offset:he}=r;return{_bufferIndex:Y,_index:j,line:V,column:ie,offset:he}}function A(Y){o[Y.line]=Y.column,re()}function _(){let Y;for(;r._index<l.length;){let j=l[r._index];if(typeof j==\"string\")for(Y=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===Y&&r._bufferIndex<j.length;)I(j.charCodeAt(r._bufferIndex));else I(j)}}function I(Y){f=void 0,g=Y,p=p(Y)}function z(Y){$(Y)?(r.line++,r.column=1,r.offset+=Y===-3?2:1,re()):Y!==-1&&(r.column++,r.offset++),r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===l[r._index].length&&(r._bufferIndex=-1,r._index++)),m.previous=Y,f=!0}function H(Y,j){let V=j||{};return V.type=Y,V.start=T(),m.events.push([\"enter\",V,m]),u.push(V),V}function v(Y){let j=u.pop();return j.end=T(),m.events.push([\"exit\",j,m]),j}function te(Y,j){se(Y,j.from)}function J(Y,j){j.restore()}function Z(Y,j){return V;function V(ie,he,me){let Xe,x,Ie,Pe;return Array.isArray(ie)?Ye(ie):\"tokenize\"in ie?Ye([ie]):k(ie);function k(Ee){return wn;function wn(gt){let Ot=gt!==null&&Ee[gt],Qt=gt!==null&&Ee.null,xr=[...Array.isArray(Ot)?Ot:Ot?[Ot]:[],...Array.isArray(Qt)?Qt:Qt?[Qt]:[]];return Ye(xr)(gt)}}function Ye(Ee){return Xe=Ee,x=0,Ee.length===0?me:Rt(Ee[x])}function Rt(Ee){return wn;function wn(gt){return Pe=ue(),Ie=Ee,Ee.partial||(m.currentConstruct=Ee),Ee.name&&m.parser.constructs.disable.null.includes(Ee.name)?gn(gt):Ee.tokenize.call(j?Object.assign(Object.create(m),j):m,h,Kt,gn)(gt)}}function Kt(Ee){return f=!0,Y(Ie,Pe),he}function gn(Ee){return f=!0,Pe.restore(),++x<Xe.length?Rt(Xe[x]):me}}}function se(Y,j){Y.resolveAll&&!s.includes(Y)&&s.push(Y),Y.resolve&&Fe(m.events,j,m.events.length-j,Y.resolve(m.events.slice(j),m)),Y.resolveTo&&(m.events=Y.resolveTo(m.events,m))}function ue(){let Y=T(),j=m.previous,V=m.currentConstruct,ie=m.events.length,he=Array.from(u);return{from:ie,restore:me};function me(){r=Y,m.previous=j,m.currentConstruct=V,m.events.length=ie,u=he,re()}}function re(){r.line in o&&r.column<2&&(r.column=o[r.line],r.offset+=o[r.line]-1)}}function sb(e,t){let n=t.start._index,r=t.start._bufferIndex,o=t.end._index,s=t.end._bufferIndex,l;if(n===o)l=[e[n].slice(r,s)];else{if(l=e.slice(n,o),r>-1){let u=l[0];typeof u==\"string\"?l[0]=u.slice(r):l.shift()}s>0&&l.push(e[o].slice(0,s))}return l}function ab(e,t){let n=-1,r=[],o;for(;++n<e.length;){let s=e[n],l;if(typeof s==\"string\")l=s;else switch(s){case-5:{l=\"\\r\";break}case-4:{l=`\n`;break}case-3:{l=`\\r\n`;break}case-2:{l=t?\" \":\"\t\";break}case-1:{if(!t&&o)continue;l=\" \";break}default:l=String.fromCharCode(s)}o=s===-2,r.push(l)}return r.join(\"\")}function ya(e){let r={constructs:Mc([wa,...(e||{}).extensions||[]]),content:o(Vc),defined:[],document:o(Uc),flow:o(Gc),lazy:{},string:o(Jc),text:o(Zc)};return r;function o(s){return l;function l(u){return ef(r,s,u)}}}function ka(e){for(;!no(e););return e}var tf=/[\\0\\t\\n\\r]/g;function ba(){let e=1,t=\"\",n=!0,r;return o;function o(s,l,u){let f=[],h,m,p,g,w;for(s=t+(typeof s==\"string\"?s.toString():new TextDecoder(l||void 0).decode(s)),p=0,t=\"\",n&&(s.charCodeAt(0)===65279&&p++,n=void 0);p<s.length;){if(tf.lastIndex=p,h=tf.exec(s),g=h&&h.index!==void 0?h.index:s.length,w=s.charCodeAt(g),!h){t=s.slice(p);break}if(w===10&&p===g&&r)f.push(-3),r=void 0;else switch(r&&(f.push(-5),r=void 0),p<g&&(f.push(s.slice(p,g)),e+=g-p),w){case 0:{f.push(65533),e++;break}case 9:{for(m=Math.ceil(e/4)*4,f.push(-2);e++<m;)f.push(-1);break}case 10:{f.push(-4),e=1;break}default:r=!0,e=1}p=g+1}return u&&(r&&f.push(-5),t&&f.push(t),f.push(null)),f}}var lb=/\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;function ao(e){return e.replace(lb,ub)}function ub(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){let o=n.charCodeAt(1),s=o===120||o===88;return Ji(n.slice(s?2:1),s?16:10)}return or(n)||e}function cn(e){return!e||typeof e!=\"object\"?\"\":\"position\"in e||\"type\"in e?nf(e.position):\"start\"in e||\"end\"in e?nf(e):\"line\"in e||\"column\"in e?xa(e):\"\"}function xa(e){return rf(e&&e.line)+\":\"+rf(e&&e.column)}function nf(e){return xa(e&&e.start)+\"-\"+xa(e&&e.end)}function rf(e){return e&&typeof e==\"number\"?e:1}var sf={}.hasOwnProperty;function Ea(e,t,n){return typeof t!=\"string\"&&(n=t,t=void 0),cb(n)(ka(ya(n).document().write(ba()(e,t,!0))))}function cb(e){let t={transforms:[],canContainEols:[\"emphasis\",\"fragment\",\"heading\",\"paragraph\",\"strong\"],enter:{autolink:s(Be),autolinkProtocol:Z,autolinkEmail:Z,atxHeading:s(di),blockQuote:s(gt),characterEscape:Z,characterReference:Z,codeFenced:s(Ot),codeFencedFenceInfo:l,codeFencedFenceMeta:l,codeIndented:s(Ot,l),codeText:s(Qt,l),codeTextData:Z,data:Z,codeFlowValue:Z,definition:s(xr),definitionDestinationString:l,definitionLabelString:l,definitionTitleString:l,emphasis:s(ws),hardBreakEscape:s(hi),hardBreakTrailing:s(hi),htmlFlow:s(mi,l),htmlFlowData:Z,htmlText:s(mi,l),htmlTextData:Z,image:s(pi),label:l,link:s(Be),listItem:s(ys),listItemValue:g,listOrdered:s(Mn,p),listUnordered:s(Mn),paragraph:s(ks),reference:k,referenceString:l,resourceDestinationString:l,resourceTitleString:l,setextHeading:s(di),strong:s(gi),thematicBreak:s(wi)},exit:{atxHeading:f(),atxHeadingSequence:H,autolink:f(),autolinkEmail:wn,autolinkProtocol:Ee,blockQuote:f(),characterEscapeValue:se,characterReferenceMarkerHexadecimal:Rt,characterReferenceMarkerNumeric:Rt,characterReferenceValue:Kt,characterReference:gn,codeFenced:f(T),codeFencedFence:F,codeFencedFenceInfo:w,codeFencedFenceMeta:E,codeFlowValue:se,codeIndented:f(A),codeText:f(V),codeTextData:se,data:se,definition:f(),definitionDestinationString:z,definitionLabelString:_,definitionTitleString:I,emphasis:f(),hardBreakEscape:f(re),hardBreakTrailing:f(re),htmlFlow:f(Y),htmlFlowData:se,htmlText:f(j),htmlTextData:se,image:f(he),label:Xe,labelText:me,lineEnding:ue,link:f(ie),listItem:f(),listOrdered:f(),listUnordered:f(),paragraph:f(),referenceString:Ye,resourceDestinationString:x,resourceTitleString:Ie,resource:Pe,setextHeading:f(J),setextHeadingLineSequence:te,setextHeadingText:v,strong:f(),thematicBreak:f()}};af(t,(e||{}).mdastExtensions||[]);let n={};return r;function r(S){let R={type:\"root\",children:[]},O={stack:[R],tokenStack:[],config:t,enter:u,exit:h,buffer:l,resume:m,data:n},K=[],ae=-1;for(;++ae<S.length;)if(S[ae][1].type===\"listOrdered\"||S[ae][1].type===\"listUnordered\")if(S[ae][0]===\"enter\")K.push(ae);else{let Re=K.pop();ae=o(S,Re,ae)}for(ae=-1;++ae<S.length;){let Re=t[S[ae][0]];sf.call(Re,S[ae][1].type)&&Re[S[ae][1].type].call(Object.assign({sliceSerialize:S[ae][2].sliceSerialize},O),S[ae][1])}if(O.tokenStack.length>0){let Re=O.tokenStack[O.tokenStack.length-1];(Re[1]||of).call(O,void 0,Re[0])}for(R.position={start:fn(S.length>0?S[0][1].start:{line:1,column:1,offset:0}),end:fn(S.length>0?S[S.length-2][1].end:{line:1,column:1,offset:0})},ae=-1;++ae<t.transforms.length;)R=t.transforms[ae](R)||R;return R}function o(S,R,O){let K=R-1,ae=-1,Re=!1,wt,Je,at,At;for(;++K<=O;){let Ve=S[K];switch(Ve[1].type){case\"listUnordered\":case\"listOrdered\":case\"blockQuote\":{Ve[0]===\"enter\"?ae++:ae--,At=void 0;break}case\"lineEndingBlank\":{Ve[0]===\"enter\"&&(wt&&!At&&!ae&&!at&&(at=K),At=void 0);break}case\"linePrefix\":case\"listItemValue\":case\"listItemMarker\":case\"listItemPrefix\":case\"listItemPrefixWhitespace\":break;default:At=void 0}if(!ae&&Ve[0]===\"enter\"&&Ve[1].type===\"listItemPrefix\"||ae===-1&&Ve[0]===\"exit\"&&(Ve[1].type===\"listUnordered\"||Ve[1].type===\"listOrdered\")){if(wt){let yt=K;for(Je=void 0;yt--;){let kt=S[yt];if(kt[1].type===\"lineEnding\"||kt[1].type===\"lineEndingBlank\"){if(kt[0]===\"exit\")continue;Je&&(S[Je][1].type=\"lineEndingBlank\",Re=!0),kt[1].type=\"lineEnding\",Je=yt}else if(!(kt[1].type===\"linePrefix\"||kt[1].type===\"blockQuotePrefix\"||kt[1].type===\"blockQuotePrefixWhitespace\"||kt[1].type===\"blockQuoteMarker\"||kt[1].type===\"listItemIndent\"))break}at&&(!Je||at<Je)&&(wt._spread=!0),wt.end=Object.assign({},Je?S[Je][1].start:Ve[1].end),S.splice(Je||K,0,[\"exit\",wt,Ve[2]]),K++,O++}if(Ve[1].type===\"listItemPrefix\"){let yt={type:\"listItem\",_spread:!1,start:Object.assign({},Ve[1].start),end:void 0};wt=yt,S.splice(K,0,[\"enter\",yt,Ve[2]]),K++,O++,at=void 0,At=!0}}}return S[R][1]._spread=Re,O}function s(S,R){return O;function O(K){u.call(this,S(K),K),R&&R.call(this,K)}}function l(){this.stack.push({type:\"fragment\",children:[]})}function u(S,R,O){this.stack[this.stack.length-1].children.push(S),this.stack.push(S),this.tokenStack.push([R,O||void 0]),S.position={start:fn(R.start),end:void 0}}function f(S){return R;function R(O){S&&S.call(this,O),h.call(this,O)}}function h(S,R){let O=this.stack.pop(),K=this.tokenStack.pop();if(K)K[0].type!==S.type&&(R?R.call(this,S,K[0]):(K[1]||of).call(this,S,K[0]));else throw new Error(\"Cannot close `\"+S.type+\"` (\"+cn({start:S.start,end:S.end})+\"): it\\u2019s not open\");O.position.end=fn(S.end)}function m(){return Sn(this.stack.pop())}function p(){this.data.expectingFirstListItemValue=!0}function g(S){if(this.data.expectingFirstListItemValue){let R=this.stack[this.stack.length-2];R.start=Number.parseInt(this.sliceSerialize(S),10),this.data.expectingFirstListItemValue=void 0}}function w(){let S=this.resume(),R=this.stack[this.stack.length-1];R.lang=S}function E(){let S=this.resume(),R=this.stack[this.stack.length-1];R.meta=S}function F(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function T(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g,\"\"),this.data.flowCodeInside=void 0}function A(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S.replace(/(\\r?\\n|\\r)$/g,\"\")}function _(S){let R=this.resume(),O=this.stack[this.stack.length-1];O.label=R,O.identifier=Xt(this.sliceSerialize(S)).toLowerCase()}function I(){let S=this.resume(),R=this.stack[this.stack.length-1];R.title=S}function z(){let S=this.resume(),R=this.stack[this.stack.length-1];R.url=S}function H(S){let R=this.stack[this.stack.length-1];if(!R.depth){let O=this.sliceSerialize(S).length;R.depth=O}}function v(){this.data.setextHeadingSlurpLineEnding=!0}function te(S){let R=this.stack[this.stack.length-1];R.depth=this.sliceSerialize(S).codePointAt(0)===61?1:2}function J(){this.data.setextHeadingSlurpLineEnding=void 0}function Z(S){let O=this.stack[this.stack.length-1].children,K=O[O.length-1];(!K||K.type!==\"text\")&&(K=ze(),K.position={start:fn(S.start),end:void 0},O.push(K)),this.stack.push(K)}function se(S){let R=this.stack.pop();R.value+=this.sliceSerialize(S),R.position.end=fn(S.end)}function ue(S){let R=this.stack[this.stack.length-1];if(this.data.atHardBreak){let O=R.children[R.children.length-1];O.position.end=fn(S.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(R.type)&&(Z.call(this,S),se.call(this,S))}function re(){this.data.atHardBreak=!0}function Y(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S}function j(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S}function V(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S}function ie(){let S=this.stack[this.stack.length-1];if(this.data.inReference){let R=this.data.referenceType||\"shortcut\";S.type+=\"Reference\",S.referenceType=R,delete S.url,delete S.title}else delete S.identifier,delete S.label;this.data.referenceType=void 0}function he(){let S=this.stack[this.stack.length-1];if(this.data.inReference){let R=this.data.referenceType||\"shortcut\";S.type+=\"Reference\",S.referenceType=R,delete S.url,delete S.title}else delete S.identifier,delete S.label;this.data.referenceType=void 0}function me(S){let R=this.sliceSerialize(S),O=this.stack[this.stack.length-2];O.label=ao(R),O.identifier=Xt(R).toLowerCase()}function Xe(){let S=this.stack[this.stack.length-1],R=this.resume(),O=this.stack[this.stack.length-1];if(this.data.inReference=!0,O.type===\"link\"){let K=S.children;O.children=K}else O.alt=R}function x(){let S=this.resume(),R=this.stack[this.stack.length-1];R.url=S}function Ie(){let S=this.resume(),R=this.stack[this.stack.length-1];R.title=S}function Pe(){this.data.inReference=void 0}function k(){this.data.referenceType=\"collapsed\"}function Ye(S){let R=this.resume(),O=this.stack[this.stack.length-1];O.label=R,O.identifier=Xt(this.sliceSerialize(S)).toLowerCase(),this.data.referenceType=\"full\"}function Rt(S){this.data.characterReferenceType=S.type}function Kt(S){let R=this.sliceSerialize(S),O=this.data.characterReferenceType,K;O?(K=Ji(R,O===\"characterReferenceMarkerNumeric\"?10:16),this.data.characterReferenceType=void 0):K=or(R);let ae=this.stack[this.stack.length-1];ae.value+=K}function gn(S){let R=this.stack.pop();R.position.end=fn(S.end)}function Ee(S){se.call(this,S);let R=this.stack[this.stack.length-1];R.url=this.sliceSerialize(S)}function wn(S){se.call(this,S);let R=this.stack[this.stack.length-1];R.url=\"mailto:\"+this.sliceSerialize(S)}function gt(){return{type:\"blockquote\",children:[]}}function Ot(){return{type:\"code\",lang:null,meta:null,value:\"\"}}function Qt(){return{type:\"inlineCode\",value:\"\"}}function xr(){return{type:\"definition\",identifier:\"\",label:null,title:null,url:\"\"}}function ws(){return{type:\"emphasis\",children:[]}}function di(){return{type:\"heading\",depth:0,children:[]}}function hi(){return{type:\"break\"}}function mi(){return{type:\"html\",value:\"\"}}function pi(){return{type:\"image\",title:null,url:\"\",alt:null}}function Be(){return{type:\"link\",title:null,url:\"\",children:[]}}function Mn(S){return{type:\"list\",ordered:S.type===\"listOrdered\",start:null,spread:S._spread,children:[]}}function ys(S){return{type:\"listItem\",spread:S._spread,checked:null,children:[]}}function ks(){return{type:\"paragraph\",children:[]}}function gi(){return{type:\"strong\",children:[]}}function ze(){return{type:\"text\",value:\"\"}}function wi(){return{type:\"thematicBreak\"}}}function fn(e){return{line:e.line,column:e.column,offset:e.offset}}function af(e,t){let n=-1;for(;++n<t.length;){let r=t[n];Array.isArray(r)?af(e,r):fb(e,r)}}function fb(e,t){let n;for(n in t)if(sf.call(t,n))switch(n){case\"canContainEols\":{let r=t[n];r&&e[n].push(...r);break}case\"transforms\":{let r=t[n];r&&e[n].push(...r);break}case\"enter\":case\"exit\":{let r=t[n];r&&Object.assign(e[n],r);break}}}function of(e,t){throw e?new Error(\"Cannot close `\"+e.type+\"` (\"+cn({start:e.start,end:e.end})+\"): a different token (`\"+t.type+\"`, \"+cn({start:t.start,end:t.end})+\") is open\"):new Error(\"Cannot close document, a token (`\"+t.type+\"`, \"+cn({start:t.start,end:t.end})+\") is still open\")}function lr(e){let t=this;t.parser=n;function n(r){return Ea(r,{...t.data(\"settings\"),...e,extensions:t.data(\"micromarkExtensions\")||[],mdastExtensions:t.data(\"fromMarkdownExtensions\")||[]})}}var lf={}.hasOwnProperty;function uf(e,t){let n=t||{};function r(o,...s){let l=r.invalid,u=r.handlers;if(o&&lf.call(o,e)){let f=String(o[e]);l=lf.call(u,f)?u[f]:r.unknown}if(l)return l.call(this,o,...s)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var db={}.hasOwnProperty;function Aa(e,t){let n=-1,r;if(t.extensions)for(;++n<t.extensions.length;)Aa(e,t.extensions[n]);for(r in t)if(db.call(t,r))switch(r){case\"extensions\":break;case\"unsafe\":{cf(e[r],t[r]);break}case\"join\":{cf(e[r],t[r]);break}case\"handlers\":{hb(e[r],t[r]);break}default:e.options[r]=t[r]}return e}function cf(e,t){t&&e.push(...t)}function hb(e,t){t&&Object.assign(e,t)}function ff(e,t,n,r){let o=n.enter(\"blockquote\"),s=n.createTracker(r);s.move(\"> \"),s.shift(2);let l=n.indentLines(n.containerFlow(e,s.current()),mb);return o(),l}function mb(e,t,n){return\">\"+(n?\"\":\" \")+e}function lo(e,t){return df(e,t.inConstruct,!0)&&!df(e,t.notInConstruct,!1)}function df(e,t,n){if(typeof t==\"string\"&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++r<t.length;)if(e.includes(t[r]))return!0;return!1}function Ca(e,t,n,r){let o=-1;for(;++o<n.unsafe.length;)if(n.unsafe[o].character===`\n`&&lo(n.stack,n.unsafe[o]))return/[ \\t]/.test(r.before)?\"\":\" \";return`\\\\\n`}function hf(e,t){let n=String(e),r=n.indexOf(t),o=r,s=0,l=0;if(typeof t!=\"string\")throw new TypeError(\"Expected substring\");for(;r!==-1;)r===o?++s>l&&(l=s):s=1,o=r+t.length,r=n.indexOf(t,o);return l}function Wr(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \\r\\n]/.test(e.value)&&!/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(e.value))}function mf(e){let t=e.options.fence||\"`\";if(t!==\"`\"&&t!==\"~\")throw new Error(\"Cannot serialize code with `\"+t+\"` for `options.fence`, expected `` ` `` or `~`\");return t}function pf(e,t,n,r){let o=mf(n),s=e.value||\"\",l=o===\"`\"?\"GraveAccent\":\"Tilde\";if(Wr(e,n)){let p=n.enter(\"codeIndented\"),g=n.indentLines(s,pb);return p(),g}let u=n.createTracker(r),f=o.repeat(Math.max(hf(s,o)+1,3)),h=n.enter(\"codeFenced\"),m=u.move(f);if(e.lang){let p=n.enter(`codeFencedLang${l}`);m+=u.move(n.safe(e.lang,{before:m,after:\" \",encode:[\"`\"],...u.current()})),p()}if(e.lang&&e.meta){let p=n.enter(`codeFencedMeta${l}`);m+=u.move(\" \"),m+=u.move(n.safe(e.meta,{before:m,after:`\n`,encode:[\"`\"],...u.current()})),p()}return m+=u.move(`\n`),s&&(m+=u.move(s+`\n`)),m+=u.move(f),h(),m}function pb(e,t,n){return(n?\"\":\"    \")+e}function ur(e){let t=e.options.quote||'\"';if(t!=='\"'&&t!==\"'\")throw new Error(\"Cannot serialize title with `\"+t+\"` for `options.quote`, expected `\\\"`, or `'`\");return t}function gf(e,t,n,r){let o=ur(n),s=o==='\"'?\"Quote\":\"Apostrophe\",l=n.enter(\"definition\"),u=n.enter(\"label\"),f=n.createTracker(r),h=f.move(\"[\");return h+=f.move(n.safe(n.associationId(e),{before:h,after:\"]\",...f.current()})),h+=f.move(\"]: \"),u(),!e.url||/[\\0- \\u007F]/.test(e.url)?(u=n.enter(\"destinationLiteral\"),h+=f.move(\"<\"),h+=f.move(n.safe(e.url,{before:h,after:\">\",...f.current()})),h+=f.move(\">\")):(u=n.enter(\"destinationRaw\"),h+=f.move(n.safe(e.url,{before:h,after:e.title?\" \":`\n`,...f.current()}))),u(),e.title&&(u=n.enter(`title${s}`),h+=f.move(\" \"+o),h+=f.move(n.safe(e.title,{before:h,after:o,...f.current()})),h+=f.move(o),u()),l(),h}function wf(e){let t=e.options.emphasis||\"*\";if(t!==\"*\"&&t!==\"_\")throw new Error(\"Cannot serialize emphasis with `\"+t+\"` for `options.emphasis`, expected `*`, or `_`\");return t}function st(e){return\"&#x\"+e.toString(16).toUpperCase()+\";\"}function cr(e,t,n){let r=sr(e),o=sr(t);return r===void 0?o===void 0?n===\"_\"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:o===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?o===void 0?{inside:!1,outside:!1}:o===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:o===void 0?{inside:!1,outside:!1}:o===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}va.peek=gb;function va(e,t,n,r){let o=wf(n),s=n.enter(\"emphasis\"),l=n.createTracker(r),u=l.move(o),f=l.move(n.containerPhrasing(e,{after:o,before:u,...l.current()})),h=f.charCodeAt(0),m=cr(r.before.charCodeAt(r.before.length-1),h,o);m.inside&&(f=st(h)+f.slice(1));let p=f.charCodeAt(f.length-1),g=cr(r.after.charCodeAt(0),p,o);g.inside&&(f=f.slice(0,-1)+st(p));let w=l.move(o);return s(),n.attentionEncodeSurroundingInfo={after:g.outside,before:m.outside},u+f+w}function gb(e,t,n){return n.options.emphasis||\"*\"}var fr=function(e){if(e==null)return bb;if(typeof e==\"function\")return uo(e);if(typeof e==\"object\")return Array.isArray(e)?wb(e):yb(e);if(typeof e==\"string\")return kb(e);throw new Error(\"Expected function, string, or object as test\")};function wb(e){let t=[],n=-1;for(;++n<e.length;)t[n]=fr(e[n]);return uo(r);function r(...o){let s=-1;for(;++s<t.length;)if(t[s].apply(this,o))return!0;return!1}}function yb(e){let t=e;return uo(n);function n(r){let o=r,s;for(s in e)if(o[s]!==t[s])return!1;return!0}}function kb(e){return uo(t);function t(n){return n&&n.type===e}}function uo(e){return t;function t(n,r,o){return!!(xb(n)&&e.call(this,n,typeof r==\"number\"?r:void 0,o||void 0))}}function bb(){return!0}function xb(e){return e!==null&&typeof e==\"object\"&&\"type\"in e}function yf(e){return\"\\x1B[33m\"+e+\"\\x1B[39m\"}var kf=[],co=!0,In=!1,fo=\"skip\";function Sa(e,t,n,r){let o;typeof t==\"function\"&&typeof n!=\"function\"?(r=n,n=t):o=t;let s=fr(o),l=r?-1:1;u(e,void 0,[])();function u(f,h,m){let p=f&&typeof f==\"object\"?f:{};if(typeof p.type==\"string\"){let w=typeof p.tagName==\"string\"?p.tagName:typeof p.name==\"string\"?p.name:void 0;Object.defineProperty(g,\"name\",{value:\"node (\"+yf(f.type+(w?\"<\"+w+\">\":\"\"))+\")\"})}return g;function g(){let w=kf,E,F,T;if((!t||s(f,h,m[m.length-1]||void 0))&&(w=Eb(n(f,m)),w[0]===In))return w;if(\"children\"in f&&f.children){let A=f;if(A.children&&w[0]!==fo)for(F=(r?A.children.length:-1)+l,T=m.concat(A);F>-1&&F<A.children.length;){let _=A.children[F];if(E=u(_,F,T)(),E[0]===In)return E;F=typeof E[1]==\"number\"?E[1]:F+l}}return w}}}function Eb(e){return Array.isArray(e)?e:typeof e==\"number\"?[co,e]:e==null?kf:[e]}function Ta(e,t,n,r){let o,s,l;typeof t==\"function\"&&typeof n!=\"function\"?(s=void 0,l=t,o=n):(s=t,l=n,o=r),Sa(e,s,u,o);function u(f,h){let m=h[h.length-1],p=m?m.children.indexOf(f):void 0;return l(f,p,m)}}function ho(e,t){let n=!1;return Ta(e,function(r){if(\"value\"in r&&/\\r?\\n|\\r/.test(r.value)||r.type===\"break\")return n=!0,In}),!!((!e.depth||e.depth<3)&&Sn(e)&&(t.options.setext||n))}function bf(e,t,n,r){let o=Math.max(Math.min(6,e.depth||1),1),s=n.createTracker(r);if(ho(e,n)){let m=n.enter(\"headingSetext\"),p=n.enter(\"phrasing\"),g=n.containerPhrasing(e,{...s.current(),before:`\n`,after:`\n`});return p(),m(),g+`\n`+(o===1?\"=\":\"-\").repeat(g.length-(Math.max(g.lastIndexOf(\"\\r\"),g.lastIndexOf(`\n`))+1))}let l=\"#\".repeat(o),u=n.enter(\"headingAtx\"),f=n.enter(\"phrasing\");s.move(l+\" \");let h=n.containerPhrasing(e,{before:\"# \",after:`\n`,...s.current()});return/^[\\t ]/.test(h)&&(h=st(h.charCodeAt(0))+h.slice(1)),h=h?l+\" \"+h:l,n.options.closeAtx&&(h+=\" \"+l),f(),u(),h}_a.peek=Ab;function _a(e){return e.value||\"\"}function Ab(){return\"<\"}Fa.peek=Cb;function Fa(e,t,n,r){let o=ur(n),s=o==='\"'?\"Quote\":\"Apostrophe\",l=n.enter(\"image\"),u=n.enter(\"label\"),f=n.createTracker(r),h=f.move(\"![\");return h+=f.move(n.safe(e.alt,{before:h,after:\"]\",...f.current()})),h+=f.move(\"](\"),u(),!e.url&&e.title||/[\\0- \\u007F]/.test(e.url)?(u=n.enter(\"destinationLiteral\"),h+=f.move(\"<\"),h+=f.move(n.safe(e.url,{before:h,after:\">\",...f.current()})),h+=f.move(\">\")):(u=n.enter(\"destinationRaw\"),h+=f.move(n.safe(e.url,{before:h,after:e.title?\" \":\")\",...f.current()}))),u(),e.title&&(u=n.enter(`title${s}`),h+=f.move(\" \"+o),h+=f.move(n.safe(e.title,{before:h,after:o,...f.current()})),h+=f.move(o),u()),h+=f.move(\")\"),l(),h}function Cb(){return\"!\"}Ia.peek=vb;function Ia(e,t,n,r){let o=e.referenceType,s=n.enter(\"imageReference\"),l=n.enter(\"label\"),u=n.createTracker(r),f=u.move(\"![\"),h=n.safe(e.alt,{before:f,after:\"]\",...u.current()});f+=u.move(h+\"][\"),l();let m=n.stack;n.stack=[],l=n.enter(\"reference\");let p=n.safe(n.associationId(e),{before:f,after:\"]\",...u.current()});return l(),n.stack=m,s(),o===\"full\"||!h||h!==p?f+=u.move(p+\"]\"):o===\"shortcut\"?f=f.slice(0,-1):f+=u.move(\"]\"),f}function vb(){return\"!\"}Pa.peek=Sb;function Pa(e,t,n){let r=e.value||\"\",o=\"`\",s=-1;for(;new RegExp(\"(^|[^`])\"+o+\"([^`]|$)\").test(r);)o+=\"`\";for(/[^ \\r\\n]/.test(r)&&(/^[ \\r\\n]/.test(r)&&/[ \\r\\n]$/.test(r)||/^`|`$/.test(r))&&(r=\" \"+r+\" \");++s<n.unsafe.length;){let l=n.unsafe[s],u=n.compilePattern(l),f;if(l.atBreak)for(;f=u.exec(r);){let h=f.index;r.charCodeAt(h)===10&&r.charCodeAt(h-1)===13&&h--,r=r.slice(0,h)+\" \"+r.slice(f.index+1)}}return o+r+o}function Sb(){return\"`\"}function Ra(e,t){let n=Sn(e);return!!(!t.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type===\"text\"&&(n===e.url||\"mailto:\"+n===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\\0- <>\\u007F]/.test(e.url))}Oa.peek=Tb;function Oa(e,t,n,r){let o=ur(n),s=o==='\"'?\"Quote\":\"Apostrophe\",l=n.createTracker(r),u,f;if(Ra(e,n)){let m=n.stack;n.stack=[],u=n.enter(\"autolink\");let p=l.move(\"<\");return p+=l.move(n.containerPhrasing(e,{before:p,after:\">\",...l.current()})),p+=l.move(\">\"),u(),n.stack=m,p}u=n.enter(\"link\"),f=n.enter(\"label\");let h=l.move(\"[\");return h+=l.move(n.containerPhrasing(e,{before:h,after:\"](\",...l.current()})),h+=l.move(\"](\"),f(),!e.url&&e.title||/[\\0- \\u007F]/.test(e.url)?(f=n.enter(\"destinationLiteral\"),h+=l.move(\"<\"),h+=l.move(n.safe(e.url,{before:h,after:\">\",...l.current()})),h+=l.move(\">\")):(f=n.enter(\"destinationRaw\"),h+=l.move(n.safe(e.url,{before:h,after:e.title?\" \":\")\",...l.current()}))),f(),e.title&&(f=n.enter(`title${s}`),h+=l.move(\" \"+o),h+=l.move(n.safe(e.title,{before:h,after:o,...l.current()})),h+=l.move(o),f()),h+=l.move(\")\"),u(),h}function Tb(e,t,n){return Ra(e,n)?\"<\":\"[\"}La.peek=_b;function La(e,t,n,r){let o=e.referenceType,s=n.enter(\"linkReference\"),l=n.enter(\"label\"),u=n.createTracker(r),f=u.move(\"[\"),h=n.containerPhrasing(e,{before:f,after:\"]\",...u.current()});f+=u.move(h+\"][\"),l();let m=n.stack;n.stack=[],l=n.enter(\"reference\");let p=n.safe(n.associationId(e),{before:f,after:\"]\",...u.current()});return l(),n.stack=m,s(),o===\"full\"||!h||h!==p?f+=u.move(p+\"]\"):o===\"shortcut\"?f=f.slice(0,-1):f+=u.move(\"]\"),f}function _b(){return\"[\"}function dr(e){let t=e.options.bullet||\"*\";if(t!==\"*\"&&t!==\"+\"&&t!==\"-\")throw new Error(\"Cannot serialize items with `\"+t+\"` for `options.bullet`, expected `*`, `+`, or `-`\");return t}function xf(e){let t=dr(e),n=e.options.bulletOther;if(!n)return t===\"*\"?\"-\":\"*\";if(n!==\"*\"&&n!==\"+\"&&n!==\"-\")throw new Error(\"Cannot serialize items with `\"+n+\"` for `options.bulletOther`, expected `*`, `+`, or `-`\");if(n===t)throw new Error(\"Expected `bullet` (`\"+t+\"`) and `bulletOther` (`\"+n+\"`) to be different\");return n}function Ef(e){let t=e.options.bulletOrdered||\".\";if(t!==\".\"&&t!==\")\")throw new Error(\"Cannot serialize items with `\"+t+\"` for `options.bulletOrdered`, expected `.` or `)`\");return t}function mo(e){let t=e.options.rule||\"*\";if(t!==\"*\"&&t!==\"-\"&&t!==\"_\")throw new Error(\"Cannot serialize rules with `\"+t+\"` for `options.rule`, expected `*`, `-`, or `_`\");return t}function Af(e,t,n,r){let o=n.enter(\"list\"),s=n.bulletCurrent,l=e.ordered?Ef(n):dr(n),u=e.ordered?l===\".\"?\")\":\".\":xf(n),f=t&&n.bulletLastUsed?l===n.bulletLastUsed:!1;if(!e.ordered){let m=e.children?e.children[0]:void 0;if((l===\"*\"||l===\"-\")&&m&&(!m.children||!m.children[0])&&n.stack[n.stack.length-1]===\"list\"&&n.stack[n.stack.length-2]===\"listItem\"&&n.stack[n.stack.length-3]===\"list\"&&n.stack[n.stack.length-4]===\"listItem\"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(f=!0),mo(n)===l&&m){let p=-1;for(;++p<e.children.length;){let g=e.children[p];if(g&&g.type===\"listItem\"&&g.children&&g.children[0]&&g.children[0].type===\"thematicBreak\"){f=!0;break}}}}f&&(l=u),n.bulletCurrent=l;let h=n.containerFlow(e,r);return n.bulletLastUsed=l,n.bulletCurrent=s,o(),h}function Cf(e){let t=e.options.listItemIndent||\"one\";if(t!==\"tab\"&&t!==\"one\"&&t!==\"mixed\")throw new Error(\"Cannot serialize items with `\"+t+\"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`\");return t}function vf(e,t,n,r){let o=Cf(n),s=n.bulletCurrent||dr(n);t&&t.type===\"list\"&&t.ordered&&(s=(typeof t.start==\"number\"&&t.start>-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+s);let l=s.length+1;(o===\"tab\"||o===\"mixed\"&&(t&&t.type===\"list\"&&t.spread||e.spread))&&(l=Math.ceil(l/4)*4);let u=n.createTracker(r);u.move(s+\" \".repeat(l-s.length)),u.shift(l);let f=n.enter(\"listItem\"),h=n.indentLines(n.containerFlow(e,u.current()),m);return f(),h;function m(p,g,w){return g?(w?\"\":\" \".repeat(l))+p:(w?s:s+\" \".repeat(l-s.length))+p}}function Sf(e,t,n,r){let o=n.enter(\"paragraph\"),s=n.enter(\"phrasing\"),l=n.containerPhrasing(e,r);return s(),o(),l}var Da=fr([\"break\",\"delete\",\"emphasis\",\"footnote\",\"footnoteReference\",\"image\",\"imageReference\",\"inlineCode\",\"inlineMath\",\"link\",\"linkReference\",\"mdxJsxTextElement\",\"mdxTextExpression\",\"strong\",\"text\",\"textDirective\"]);function Tf(e,t,n,r){return(e.children.some(function(l){return Da(l)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function _f(e){let t=e.options.strong||\"*\";if(t!==\"*\"&&t!==\"_\")throw new Error(\"Cannot serialize strong with `\"+t+\"` for `options.strong`, expected `*`, or `_`\");return t}Ma.peek=Fb;function Ma(e,t,n,r){let o=_f(n),s=n.enter(\"strong\"),l=n.createTracker(r),u=l.move(o+o),f=l.move(n.containerPhrasing(e,{after:o,before:u,...l.current()})),h=f.charCodeAt(0),m=cr(r.before.charCodeAt(r.before.length-1),h,o);m.inside&&(f=st(h)+f.slice(1));let p=f.charCodeAt(f.length-1),g=cr(r.after.charCodeAt(0),p,o);g.inside&&(f=f.slice(0,-1)+st(p));let w=l.move(o+o);return s(),n.attentionEncodeSurroundingInfo={after:g.outside,before:m.outside},u+f+w}function Fb(e,t,n){return n.options.strong||\"*\"}function Ff(e,t,n,r){return n.safe(e.value,r)}function If(e){let t=e.options.ruleRepetition||3;if(t<3)throw new Error(\"Cannot serialize rules with repetition `\"+t+\"` for `options.ruleRepetition`, expected `3` or more\");return t}function Pf(e,t,n){let r=(mo(n)+(n.options.ruleSpaces?\" \":\"\")).repeat(If(n));return n.options.ruleSpaces?r.slice(0,-1):r}var Rf={blockquote:ff,break:Ca,code:pf,definition:gf,emphasis:va,hardBreak:Ca,heading:bf,html:_a,image:Fa,imageReference:Ia,inlineCode:Pa,link:Oa,linkReference:La,list:Af,listItem:vf,paragraph:Sf,root:Tf,strong:Ma,text:Ff,thematicBreak:Pf};var Of=[Ib];function Ib(e,t,n,r){if(t.type===\"code\"&&Wr(t,r)&&(e.type===\"list\"||e.type===t.type&&Wr(e,r)))return!1;if(\"spread\"in n&&typeof n.spread==\"boolean\")return e.type===\"paragraph\"&&(e.type===t.type||t.type===\"definition\"||t.type===\"heading\"&&ho(t,r))?void 0:n.spread?1:0}var Pn=[\"autolink\",\"destinationLiteral\",\"destinationRaw\",\"reference\",\"titleQuote\",\"titleApostrophe\"],Lf=[{character:\"\t\",after:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\"\t\",before:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\"\t\",inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedLangTilde\"]},{character:\"\\r\",inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedLangTilde\",\"codeFencedMetaGraveAccent\",\"codeFencedMetaTilde\",\"destinationLiteral\",\"headingAtx\"]},{character:`\n`,inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedLangTilde\",\"codeFencedMetaGraveAccent\",\"codeFencedMetaTilde\",\"destinationLiteral\",\"headingAtx\"]},{character:\" \",after:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\" \",before:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\" \",inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedLangTilde\"]},{character:\"!\",after:\"\\\\[\",inConstruct:\"phrasing\",notInConstruct:Pn},{character:'\"',inConstruct:\"titleQuote\"},{atBreak:!0,character:\"#\"},{character:\"#\",inConstruct:\"headingAtx\",after:`(?:[\\r\n]|$)`},{character:\"&\",after:\"[#A-Za-z]\",inConstruct:\"phrasing\"},{character:\"'\",inConstruct:\"titleApostrophe\"},{character:\"(\",inConstruct:\"destinationRaw\"},{before:\"\\\\]\",character:\"(\",inConstruct:\"phrasing\",notInConstruct:Pn},{atBreak:!0,before:\"\\\\d+\",character:\")\"},{character:\")\",inConstruct:\"destinationRaw\"},{atBreak:!0,character:\"*\",after:`(?:[ \t\\r\n*])`},{character:\"*\",inConstruct:\"phrasing\",notInConstruct:Pn},{atBreak:!0,character:\"+\",after:`(?:[ \t\\r\n])`},{atBreak:!0,character:\"-\",after:`(?:[ \t\\r\n-])`},{atBreak:!0,before:\"\\\\d+\",character:\".\",after:`(?:[ \t\\r\n]|$)`},{atBreak:!0,character:\"<\",after:\"[!/?A-Za-z]\"},{character:\"<\",after:\"[!/?A-Za-z]\",inConstruct:\"phrasing\",notInConstruct:Pn},{character:\"<\",inConstruct:\"destinationLiteral\"},{atBreak:!0,character:\"=\"},{atBreak:!0,character:\">\"},{character:\">\",inConstruct:\"destinationLiteral\"},{atBreak:!0,character:\"[\"},{character:\"[\",inConstruct:\"phrasing\",notInConstruct:Pn},{character:\"[\",inConstruct:[\"label\",\"reference\"]},{character:\"\\\\\",after:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\"]\",inConstruct:[\"label\",\"reference\"]},{atBreak:!0,character:\"_\"},{character:\"_\",inConstruct:\"phrasing\",notInConstruct:Pn},{atBreak:!0,character:\"`\"},{character:\"`\",inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedMetaGraveAccent\"]},{character:\"`\",inConstruct:\"phrasing\",notInConstruct:Pn},{atBreak:!0,character:\"~\"}];function Df(e){return e.label||!e.identifier?e.label||\"\":ao(e.identifier)}function Mf(e){if(!e._compiled){let t=(e.atBreak?\"[\\\\r\\\\n][\\\\t ]*\":\"\")+(e.before?\"(?:\"+e.before+\")\":\"\");e._compiled=new RegExp((t?\"(\"+t+\")\":\"\")+(/[|\\\\{}()[\\]^$+*?.-]/.test(e.character)?\"\\\\\":\"\")+e.character+(e.after?\"(?:\"+e.after+\")\":\"\"),\"g\")}return e._compiled}function Nf(e,t,n){let r=t.indexStack,o=e.children||[],s=[],l=-1,u=n.before,f;r.push(-1);let h=t.createTracker(n);for(;++l<o.length;){let m=o[l],p;if(r[r.length-1]=l,l+1<o.length){let E=t.handle.handlers[o[l+1].type];E&&E.peek&&(E=E.peek),p=E?E(o[l+1],e,t,{before:\"\",after:\"\",...h.current()}).charAt(0):\"\"}else p=n.after;s.length>0&&(u===\"\\r\"||u===`\n`)&&m.type===\"html\"&&(s[s.length-1]=s[s.length-1].replace(/(\\r?\\n|\\r)$/,\" \"),u=\" \",h=t.createTracker(n),h.move(s.join(\"\")));let g=t.handle(m,e,t,{...h.current(),after:p,before:u});f&&f===g.slice(0,1)&&(g=st(f.charCodeAt(0))+g.slice(1));let w=t.attentionEncodeSurroundingInfo;t.attentionEncodeSurroundingInfo=void 0,f=void 0,w&&(s.length>0&&w.before&&u===s[s.length-1].slice(-1)&&(s[s.length-1]=s[s.length-1].slice(0,-1)+st(u.charCodeAt(0))),w.after&&(f=p)),h.move(g),s.push(g),u=g.slice(-1)}return r.pop(),s.join(\"\")}function $f(e,t,n){let r=t.indexStack,o=e.children||[],s=t.createTracker(n),l=[],u=-1;for(r.push(-1);++u<o.length;){let f=o[u];r[r.length-1]=u,l.push(s.move(t.handle(f,e,t,{before:`\n`,after:`\n`,...s.current()}))),f.type!==\"list\"&&(t.bulletLastUsed=void 0),u<o.length-1&&l.push(s.move(Pb(f,o[u+1],e,t)))}return r.pop(),l.join(\"\")}function Pb(e,t,n,r){let o=r.join.length;for(;o--;){let s=r.join[o](e,t,n,r);if(s===!0||s===1)break;if(typeof s==\"number\")return`\n`.repeat(1+s);if(s===!1)return`\n\n<!---->\n\n`}return`\n\n`}var Rb=/\\r?\\n|\\r/g;function Yf(e,t){let n=[],r=0,o=0,s;for(;s=Rb.exec(e);)l(e.slice(r,s.index)),n.push(s[0]),r=s.index+s[0].length,o++;return l(e.slice(r)),n.join(\"\");function l(u){n.push(t(u,o,!u))}}function zf(e,t,n){let r=(n.before||\"\")+(t||\"\")+(n.after||\"\"),o=[],s=[],l={},u=-1;for(;++u<e.unsafe.length;){let m=e.unsafe[u];if(!lo(e.stack,m))continue;let p=e.compilePattern(m),g;for(;g=p.exec(r);){let w=\"before\"in m||!!m.atBreak,E=\"after\"in m,F=g.index+(w?g[1].length:0);o.includes(F)?(l[F].before&&!w&&(l[F].before=!1),l[F].after&&!E&&(l[F].after=!1)):(o.push(F),l[F]={before:w,after:E})}}o.sort(Ob);let f=n.before?n.before.length:0,h=r.length-(n.after?n.after.length:0);for(u=-1;++u<o.length;){let m=o[u];m<f||m>=h||m+1<h&&o[u+1]===m+1&&l[m].after&&!l[m+1].before&&!l[m+1].after||o[u-1]===m-1&&l[m].before&&!l[m-1].before&&!l[m-1].after||(f!==m&&s.push(Bf(r.slice(f,m),\"\\\\\")),f=m,/[!-/:-@[-`{-~]/.test(r.charAt(m))&&(!n.encode||!n.encode.includes(r.charAt(m)))?s.push(\"\\\\\"):(s.push(st(r.charCodeAt(m))),f++))}return s.push(Bf(r.slice(f,h),n.after)),s.join(\"\")}function Ob(e,t){return e-t}function Bf(e,t){let n=/\\\\(?=[!-/:-@[-`{-~])/g,r=[],o=[],s=e+t,l=-1,u=0,f;for(;f=n.exec(s);)r.push(f.index);for(;++l<r.length;)u!==r[l]&&o.push(e.slice(u,r[l])),o.push(\"\\\\\"),u=r[l];return o.push(e.slice(u)),o.join(\"\")}function Vf(e){let t=e||{},n=t.now||{},r=t.lineShift||0,o=n.line||1,s=n.column||1;return{move:f,current:l,shift:u};function l(){return{now:{line:o,column:s},lineShift:r}}function u(h){r+=h}function f(h){let m=h||\"\",p=m.split(/\\r?\\n|\\r/g),g=p[p.length-1];return o+=p.length-1,s=p.length===1?s+g.length:1+g.length+r,m}}function Na(e,t){let n=t||{},r={associationId:Df,containerPhrasing:Nb,containerFlow:$b,createTracker:Vf,compilePattern:Mf,enter:s,handlers:{...Rf},handle:void 0,indentLines:Yf,indexStack:[],join:[...Of],options:{},safe:Yb,stack:[],unsafe:[...Lf]};Aa(r,n),r.options.tightDefinitions&&r.join.push(Mb),r.handle=uf(\"type\",{invalid:Lb,unknown:Db,handlers:r.handlers});let o=r.handle(e,void 0,r,{before:`\n`,after:`\n`,now:{line:1,column:1},lineShift:0});return o&&o.charCodeAt(o.length-1)!==10&&o.charCodeAt(o.length-1)!==13&&(o+=`\n`),o;function s(l){return r.stack.push(l),u;function u(){r.stack.pop()}}}function Lb(e){throw new Error(\"Cannot handle value `\"+e+\"`, expected node\")}function Db(e){let t=e;throw new Error(\"Cannot handle unknown node `\"+t.type+\"`\")}function Mb(e,t){if(e.type===\"definition\"&&e.type===t.type)return 0}function Nb(e,t){return Nf(e,this,t)}function $b(e,t){return $f(e,this,t)}function Yb(e,t){return zf(this,e,t)}function po(e){let t=this;t.compiler=n;function n(r){return Na(r,{...t.data(\"settings\"),...e,extensions:t.data(\"toMarkdownExtensions\")||[]})}}function $a(e){if(e)throw e}var ko=Le(Zf(),1);function Ur(e){if(typeof e!=\"object\"||e===null)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function Ya(){let e=[],t={run:n,use:r};return t;function n(...o){let s=-1,l=o.pop();if(typeof l!=\"function\")throw new TypeError(\"Expected function as last argument, not \"+l);u(null,...o);function u(f,...h){let m=e[++s],p=-1;if(f){l(f);return}for(;++p<o.length;)(h[p]===null||h[p]===void 0)&&(h[p]=o[p]);o=h,m?Kf(m,u)(...h):l(null,...h)}}function r(o){if(typeof o!=\"function\")throw new TypeError(\"Expected `middelware` to be a function, not \"+o);return e.push(o),t}}function Kf(e,t){let n;return r;function r(...l){let u=e.length>l.length,f;u&&l.push(o);try{f=e.apply(this,l)}catch(h){let m=h;if(u&&n)throw m;return o(m)}u||(f&&f.then&&typeof f.then==\"function\"?f.then(s,o):f instanceof Error?o(f):s(f))}function o(l,...u){n||(n=!0,t(l,...u))}function s(l){o(null,l)}}var _e=class extends Error{constructor(t,n,r){super(),typeof n==\"string\"&&(r=n,n=void 0);let o=\"\",s={},l=!1;if(n&&(\"line\"in n&&\"column\"in n?s={place:n}:\"start\"in n&&\"end\"in n?s={place:n}:\"type\"in n?s={ancestors:[n],place:n.position}:s={...n}),typeof t==\"string\"?o=t:!s.cause&&t&&(l=!0,o=t.message,s.cause=t),!s.ruleId&&!s.source&&typeof r==\"string\"){let f=r.indexOf(\":\");f===-1?s.ruleId=r:(s.source=r.slice(0,f),s.ruleId=r.slice(f+1))}if(!s.place&&s.ancestors&&s.ancestors){let f=s.ancestors[s.ancestors.length-1];f&&(s.place=f.position)}let u=s.place&&\"start\"in s.place?s.place.start:s.place;this.ancestors=s.ancestors||void 0,this.cause=s.cause||void 0,this.column=u?u.column:void 0,this.fatal=void 0,this.file,this.message=o,this.line=u?u.line:void 0,this.name=cn(s.place)||\"1:1\",this.place=s.place||void 0,this.reason=this.message,this.ruleId=s.ruleId||void 0,this.source=s.source||void 0,this.stack=l&&s.cause&&typeof s.cause.stack==\"string\"?s.cause.stack:\"\",this.actual,this.expected,this.note,this.url}};_e.prototype.file=\"\";_e.prototype.name=\"\";_e.prototype.reason=\"\";_e.prototype.message=\"\";_e.prototype.stack=\"\";_e.prototype.column=void 0;_e.prototype.line=void 0;_e.prototype.ancestors=void 0;_e.prototype.cause=void 0;_e.prototype.fatal=void 0;_e.prototype.place=void 0;_e.prototype.ruleId=void 0;_e.prototype.source=void 0;var ht=Le(require(\"node:path\"),1);var Ba=Le(require(\"node:process\"),1);var za=require(\"node:url\");function wo(e){return!!(e!==null&&typeof e==\"object\"&&\"href\"in e&&e.href&&\"protocol\"in e&&e.protocol&&e.auth===void 0)}var Va=[\"history\",\"path\",\"basename\",\"stem\",\"extname\",\"dirname\"],Hr=class{constructor(t){let n;t?wo(t)?n={path:t}:typeof t==\"string\"||Bb(t)?n={value:t}:n=t:n={},this.cwd=\"cwd\"in n?\"\":Ba.default.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let r=-1;for(;++r<Va.length;){let s=Va[r];s in n&&n[s]!==void 0&&n[s]!==null&&(this[s]=s===\"history\"?[...n[s]]:n[s])}let o;for(o in n)Va.includes(o)||(this[o]=n[o])}get basename(){return typeof this.path==\"string\"?ht.default.basename(this.path):void 0}set basename(t){Ua(t,\"basename\"),Wa(t,\"basename\"),this.path=ht.default.join(this.dirname||\"\",t)}get dirname(){return typeof this.path==\"string\"?ht.default.dirname(this.path):void 0}set dirname(t){Qf(this.basename,\"dirname\"),this.path=ht.default.join(t||\"\",this.basename)}get extname(){return typeof this.path==\"string\"?ht.default.extname(this.path):void 0}set extname(t){if(Wa(t,\"extname\"),Qf(this.dirname,\"extname\"),t){if(t.codePointAt(0)!==46)throw new Error(\"`extname` must start with `.`\");if(t.includes(\".\",1))throw new Error(\"`extname` cannot contain multiple dots\")}this.path=ht.default.join(this.dirname,this.stem+(t||\"\"))}get path(){return this.history[this.history.length-1]}set path(t){wo(t)&&(t=(0,za.fileURLToPath)(t)),Ua(t,\"path\"),this.path!==t&&this.history.push(t)}get stem(){return typeof this.path==\"string\"?ht.default.basename(this.path,this.extname):void 0}set stem(t){Ua(t,\"stem\"),Wa(t,\"stem\"),this.path=ht.default.join(this.dirname||\"\",t+(this.extname||\"\"))}fail(t,n,r){let o=this.message(t,n,r);throw o.fatal=!0,o}info(t,n,r){let o=this.message(t,n,r);return o.fatal=void 0,o}message(t,n,r){let o=new _e(t,n,r);return this.path&&(o.name=this.path+\":\"+o.name,o.file=this.path),o.fatal=!1,this.messages.push(o),o}toString(t){return this.value===void 0?\"\":typeof this.value==\"string\"?this.value:new TextDecoder(t||void 0).decode(this.value)}};function Wa(e,t){if(e&&e.includes(ht.default.sep))throw new Error(\"`\"+t+\"` cannot be a path: did not expect `\"+ht.default.sep+\"`\")}function Ua(e,t){if(!e)throw new Error(\"`\"+t+\"` cannot be empty\")}function Qf(e,t){if(!e)throw new Error(\"Setting `\"+t+\"` requires `path` to be set too\")}function Bb(e){return!!(e&&typeof e==\"object\"&&\"byteLength\"in e&&\"byteOffset\"in e)}var ed=function(e){let r=this.constructor.prototype,o=r[e],s=function(){return o.apply(s,arguments)};return Object.setPrototypeOf(s,r),s};var zb={}.hasOwnProperty,Ga=class e extends ed{constructor(){super(\"copy\"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=Ya()}copy(){let t=new e,n=-1;for(;++n<this.attachers.length;){let r=this.attachers[n];t.use(...r)}return t.data((0,ko.default)(!0,{},this.namespace)),t}data(t,n){return typeof t==\"string\"?arguments.length===2?(qa(\"data\",this.frozen),this.namespace[t]=n,this):zb.call(this.namespace,t)&&this.namespace[t]||void 0:t?(qa(\"data\",this.frozen),this.namespace=t,this):this.namespace}freeze(){if(this.frozen)return this;let t=this;for(;++this.freezeIndex<this.attachers.length;){let[n,...r]=this.attachers[this.freezeIndex];if(r[0]===!1)continue;r[0]===!0&&(r[0]=void 0);let o=n.call(t,...r);typeof o==\"function\"&&this.transformers.use(o)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(t){this.freeze();let n=yo(t),r=this.parser||this.Parser;return Ha(\"parse\",r),r(String(n),n)}process(t,n){let r=this;return this.freeze(),Ha(\"process\",this.parser||this.Parser),ja(\"process\",this.compiler||this.Compiler),n?o(void 0,n):new Promise(o);function o(s,l){let u=yo(t),f=r.parse(u);r.run(f,u,function(m,p,g){if(m||!p||!g)return h(m);let w=p,E=r.stringify(w,g);Wb(E)?g.value=E:g.result=E,h(m,g)});function h(m,p){m||!p?l(m):s?s(p):n(void 0,p)}}}processSync(t){let n=!1,r;return this.freeze(),Ha(\"processSync\",this.parser||this.Parser),ja(\"processSync\",this.compiler||this.Compiler),this.process(t,o),nd(\"processSync\",\"process\",n),r;function o(s,l){n=!0,$a(s),r=l}}run(t,n,r){td(t),this.freeze();let o=this.transformers;return!r&&typeof n==\"function\"&&(r=n,n=void 0),r?s(void 0,r):new Promise(s);function s(l,u){let f=yo(n);o.run(t,f,h);function h(m,p,g){let w=p||t;m?u(m):l?l(w):r(void 0,w,g)}}}runSync(t,n){let r=!1,o;return this.run(t,n,s),nd(\"runSync\",\"run\",r),o;function s(l,u){$a(l),o=u,r=!0}}stringify(t,n){this.freeze();let r=yo(n),o=this.compiler||this.Compiler;return ja(\"stringify\",o),td(t),o(t,r)}use(t,...n){let r=this.attachers,o=this.namespace;if(qa(\"use\",this.frozen),t!=null)if(typeof t==\"function\")f(t,n);else if(typeof t==\"object\")Array.isArray(t)?u(t):l(t);else throw new TypeError(\"Expected usable value, not `\"+t+\"`\");return this;function s(h){if(typeof h==\"function\")f(h,[]);else if(typeof h==\"object\")if(Array.isArray(h)){let[m,...p]=h;f(m,p)}else l(h);else throw new TypeError(\"Expected usable value, not `\"+h+\"`\")}function l(h){if(!(\"plugins\"in h)&&!(\"settings\"in h))throw new Error(\"Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither\");u(h.plugins),h.settings&&(o.settings=(0,ko.default)(!0,o.settings,h.settings))}function u(h){let m=-1;if(h!=null)if(Array.isArray(h))for(;++m<h.length;){let p=h[m];s(p)}else throw new TypeError(\"Expected a list of plugins, not `\"+h+\"`\")}function f(h,m){let p=-1,g=-1;for(;++p<r.length;)if(r[p][0]===h){g=p;break}if(g===-1)r.push([h,...m]);else if(m.length>0){let[w,...E]=m,F=r[g][1];Ur(F)&&Ur(w)&&(w=(0,ko.default)(!0,F,w)),r[g]=[h,w,...E]}}}},Xa=new Ga().freeze();function Ha(e,t){if(typeof t!=\"function\")throw new TypeError(\"Cannot `\"+e+\"` without `parser`\")}function ja(e,t){if(typeof t!=\"function\")throw new TypeError(\"Cannot `\"+e+\"` without `compiler`\")}function qa(e,t){if(t)throw new Error(\"Cannot call `\"+e+\"` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.\")}function td(e){if(!Ur(e)||typeof e.type!=\"string\")throw new TypeError(\"Expected node, got `\"+e+\"`\")}function nd(e,t,n){if(!n)throw new Error(\"`\"+e+\"` finished async. Use `\"+t+\"` instead\")}function yo(e){return Vb(e)?e:new Hr(e)}function Vb(e){return!!(e&&typeof e==\"object\"&&\"message\"in e&&\"messages\"in e)}function Wb(e){return typeof e==\"string\"||Ub(e)}function Ub(e){return!!(e&&typeof e==\"object\"&&\"byteLength\"in e&&\"byteOffset\"in e)}var rd=Xa().use(lr).use(po).freeze();var Za={d:(e,t)=>{for(var n in t)Za.o(t,n)&&!Za.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},Ka={};Za.d(Ka,{Z:()=>Gb,$:()=>ad});var hr={horizontalTab:-2,virtualSpace:-1,nul:0,eof:null,space:32};function id(e){return e<hr.nul||e===hr.space}function Ja(e){return e<hr.horizontalTab}var Hb={553:e=>{e.exports=function(t){var n,r;return t._compiled||(n=t.before?\"(?:\"+t.before+\")\":\"\",r=t.after?\"(?:\"+t.after+\")\":\"\",t.atBreak&&(n=\"[\\\\r\\\\n][\\\\t ]*\"+n),t._compiled=new RegExp((n?\"(\"+n+\")\":\"\")+(/[|\\\\{}()[\\]^$+*?.-]/.test(t.character)?\"\\\\\":\"\")+t.character+(r||\"\"),\"g\")),t._compiled}},112:e=>{function t(n,r,o){var s;if(!r)return o;for(typeof r==\"string\"&&(r=[r]),s=-1;++s<r.length;)if(n.indexOf(r[s])!==-1)return!0;return!1}e.exports=function(n,r){return t(n,r.inConstruct,!0)&&!t(n,r.notInConstruct)}},113:(e,t,n)=>{e.exports=function(u,f,h){for(var m,p,g,w,E,F,T,A,_=(h.before||\"\")+(f||\"\")+(h.after||\"\"),I=[],z=[],H={},v=-1;++v<u.unsafe.length;)if(w=u.unsafe[v],o(u.stack,w))for(E=r(w);F=E.exec(_);)m=\"before\"in w||w.atBreak,p=\"after\"in w,g=F.index+(m?F[1].length:0),I.indexOf(g)===-1?(I.push(g),H[g]={before:m,after:p}):(H[g].before&&!m&&(H[g].before=!1),H[g].after&&!p&&(H[g].after=!1));for(I.sort(s),T=h.before?h.before.length:0,A=_.length-(h.after?h.after.length:0),v=-1;++v<I.length;)(g=I[v])<T||g>=A||g+1<A&&I[v+1]===g+1&&H[g].after&&!H[g+1].before&&!H[g+1].after||(T!==g&&z.push(l(_.slice(T,g),\"\\\\\")),T=g,!/[!-/:-@[-`{-~]/.test(_.charAt(g))||h.encode&&h.encode.indexOf(_.charAt(g))!==-1?(z.push(\"&#x\"+_.charCodeAt(g).toString(16).toUpperCase()+\";\"),T++):z.push(\"\\\\\"));return z.push(l(_.slice(T,A),h.after)),z.join(\"\")};var r=n(553),o=n(112);function s(u,f){return u-f}function l(u,f){for(var h,m=/\\\\(?=[!-/:-@[-`{-~])/g,p=[],g=[],w=-1,E=0,F=u+f;h=m.exec(F);)p.push(h.index);for(;++w<p.length;)E!==p[w]&&g.push(u.slice(E,p[w])),g.push(\"\\\\\"),E=p[w];return g.push(u.slice(E)),g.join(\"\")}}},od={};function It(e){var t=od[e];if(t!==void 0)return t.exports;var n=od[e]={exports:{}};return Hb[e](n,n.exports,It),n.exports}It.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return It.d(t,{a:t}),t},It.d=(e,t)=>{for(var n in t)It.o(t,n)&&!It.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},It.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Qa={};(()=>{function e(o={}){let s=o.permalinks||[],l=o.pageResolver||(g=>[g.replace(/ /g,\"_\").toLowerCase()]),u=o.newClassName||\"new\",f=o.wikiLinkClassName||\"internal\",h=o.hrefTemplate||(g=>`#/page/${g}`),m;function p(g){return g[g.length-1]}return{enter:{wikiLink:function(g){m={type:\"wikiLink\",value:null,data:{alias:null,permalink:null,exists:null}},this.enter(m,g)}},exit:{wikiLinkTarget:function(g){let w=this.sliceSerialize(g);p(this.stack).value=w},wikiLinkAlias:function(g){let w=this.sliceSerialize(g);p(this.stack).data.alias=w},wikiLink:function(g){this.exit(g);let w=m,E=l(w.value),F=E.find(z=>s.indexOf(z)!==-1),T=F!==void 0,A;A=T?F:E[0]||\"\";let _=w.value;w.data.alias&&(_=w.data.alias);let I=f;T||(I+=\" \"+u),w.data.alias=_,w.data.permalink=A,w.data.exists=T,w.data.hName=\"a\",w.data.hProperties={className:I,href:h(A)},w.data.hChildren=[{type:\"text\",value:_}]}}}}It.d(Qa,{V:()=>e,x:()=>r});var t=It(113),n=It.n(t);function r(o={}){let s=o.aliasDivider||\":\";return{unsafe:[{character:\"[\",inConstruct:[\"phrasing\",\"label\",\"reference\"]},{character:\"]\",inConstruct:[\"label\",\"reference\"]}],handlers:{wikiLink:function(l,u,f){let h=f.enter(\"wikiLink\"),m=n()(f,l.value,{before:\"[\",after:\"]\"}),p=n()(f,l.data.alias,{before:\"[\",after:\"]\"}),g;return g=p!==m?`[[${m}${s}${p}]]`:`[[${m}]]`,h(),g}}}}})();var jb=Qa.V,qb=Qa.x,sd=!1;function ad(e={}){let t=this.data();function n(r,o){t[r]?t[r].push(o):t[r]=[o]}!sd&&(this.Parser&&this.Parser.prototype&&this.Parser.prototype.blockTokenizers||this.Compiler&&this.Compiler.prototype&&this.Compiler.prototype.visitors)&&(sd=!0,console.warn(\"[remark-wiki-link] Warning: please upgrade to remark 13 to use this plugin\")),n(\"micromarkExtensions\",function(){var r=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}).aliasDivider||\":\",o=\"]]\";return{text:{91:{tokenize:function(s,l,u){var f,h,m=0,p=0,g=0;return function(_){return _!==\"[[\".charCodeAt(p)?u(_):(s.enter(\"wikiLink\"),s.enter(\"wikiLinkMarker\"),w(_))};function w(_){return p===2?(s.exit(\"wikiLinkMarker\"),function(I){return Ja(I)||I===hr.eof?u(I):(s.enter(\"wikiLinkData\"),s.enter(\"wikiLinkTarget\"),E(I))}(_)):_!==\"[[\".charCodeAt(p)?u(_):(s.consume(_),p++,w)}function E(_){return _===r.charCodeAt(m)?f?(s.exit(\"wikiLinkTarget\"),s.enter(\"wikiLinkAliasMarker\"),F(_)):u(_):_===o.charCodeAt(g)?f?(s.exit(\"wikiLinkTarget\"),s.exit(\"wikiLinkData\"),s.enter(\"wikiLinkMarker\"),A(_)):u(_):Ja(_)||_===hr.eof?u(_):(id(_)||(f=!0),s.consume(_),E)}function F(_){return m===r.length?(s.exit(\"wikiLinkAliasMarker\"),s.enter(\"wikiLinkAlias\"),T(_)):_!==r.charCodeAt(m)?u(_):(s.consume(_),m++,F)}function T(_){return _===o.charCodeAt(g)?h?(s.exit(\"wikiLinkAlias\"),s.exit(\"wikiLinkData\"),s.enter(\"wikiLinkMarker\"),A(_)):u(_):Ja(_)||_===hr.eof?u(_):(id(_)||(h=!0),s.consume(_),T)}function A(_){return g===2?(s.exit(\"wikiLinkMarker\"),s.exit(\"wikiLink\"),l(_)):_!==o.charCodeAt(g)?u(_):(s.consume(_),g++,A)}}}}}}(e)),n(\"fromMarkdownExtensions\",jb(e)),n(\"toMarkdownExtensions\",qb(e))}var Gb=ad,VI=Ka.Z,ld=Ka.$;(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function el(e){try{return!e.includes(\"://\")||e.trim()!==e?!1:(new URL(e),!0)}catch{return!1}}var Rn=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function bo(e){let t=(0,Rn.getFrontMatterInfo)(e);return(0,Rn.parseYaml)(t.frontmatter)??{}}function ud(e,t){let n=(0,Rn.getFrontMatterInfo)(e);if(Object.keys(t).length===0)return e.slice(n.contentStart);let r=(0,Rn.stringifyYaml)(t);return n.exists?Uu(e,r,n.from,n.to):`---\n${r}---\n${e}`}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function tl(e){return cd(e)&&e.type===\"file\"}function cd(e){return vt(e)&&!!e.isCanvas}function Xb(e){return cd(e)&&e.type===\"text\"}function mr(e,t){if(rn(e))return{endIndex:e.position.end.offset,newContent:t,oldContent:e.original,startIndex:e.position.start.offset};if(tl(e))return{isCanvas:!0,newContent:t,nodeIndex:e.nodeIndex,oldContent:e.original,type:\"file\"};if(Xb(e))return{isCanvas:!0,newContent:t,nodeIndex:e.nodeIndex,oldContent:e.original,originalReference:e.originalReference,type:\"text\"};if(vt(e))return{frontmatterKey:e.key,newContent:t,oldContent:e.original};throw new Error(\"Unknown link type\")}function fd(e){return e.sort((t,n)=>vt(t)&&vt(n)?t.key.localeCompare(n.key):rn(t)&&rn(n)?t.position.start.offset-n.position.start.offset:vt(t)?1:-1)}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function nl(e){try{await e()}catch(t){Mi(t)}}function pr(e){return(...t)=>{On(()=>e(...t))}}function On(e){nl(e)}async function jr(e,t,n){let r=Qe(\"Async:retryWithTimeout\");n??=xn(1);let s={...{retryDelayInMilliseconds:100,shouldRetryOnError:!1,timeoutInMilliseconds:5e3},...t};await rl(s.timeoutInMilliseconds,async()=>{let l=0;for(;;){s.abortSignal?.throwIfAborted(),l++;let u;try{u=await e()}catch(f){if(!s.shouldRetryOnError||f.__terminateRetry)throw f;Rr(f),u=!1}if(u){l>1&&(r(`Retry completed successfully after ${l.toString()} attempts`),r.printStackTrace(n));return}r(`Retry attempt ${l.toString()} completed unsuccessfully. Trying again in ${s.retryDelayInMilliseconds.toString()} milliseconds`,{fn:e}),r.printStackTrace(n),await dd(s.retryDelayInMilliseconds)}})}async function rl(e,t){let n=!0,r=null,o=performance.now();if(await Promise.race([s(),l()]),n)throw new Error(\"Timed out\");return r;async function s(){r=await t(),n=!1;let u=performance.now()-o;Qe(\"Async:runWithTimeout\")(`Execution time: ${u.toString()} milliseconds`,{fn:t})}async function l(){if(!n||(await dd(e),!n))return;let u=performance.now()-o;console.warn(`Timed out in ${u.toString()} milliseconds`,{fn:t});let f=Qe(\"Async:runWithTimeout:timeout\");f.enabled&&(f(`The execution is not terminated because debugger ${f.namespace} is enabled. See https://github.com/mnaoumov/obsidian-dev-utils/?tab=readme-ov-file#debugging for more information`),await l())}}async function dd(e){await new Promise(t=>{setTimeout(t,e)})}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function hd(e,t,n){let r=Me(e,t),o=ut(n);await xo(e,o);let s=md(e,n);try{await e.vault.copy(r,s)}catch(l){if(!await e.vault.exists(s))throw l}return s}async function xo(e,t){if(await e.vault.adapter.exists(t))return!1;try{return await e.vault.createFolder(t),!0}catch(n){if(!await e.vault.exists(t))throw n;return!0}}function md(e,t){let n=ve(t);return e.vault.getAvailablePath(be(ke(t),pe(t,n)),n.slice(1))}function il(e,t,n){let r=we(e,t);if(e.vault.adapter.insensitive){let o=ke(n),s=pe(n),l;for(;l=_t(e,o,!0),!l;)s=be(pe(o),s),o=ke(o);n=be(l.getParentPrefix(),s)}return r.toLowerCase()===n.toLowerCase()?n:md(e,n)}async function ol(e,t){let n=await sl(e,we(e,t));return n.files.length===0&&n.folders.length===0}async function sl(e,t){let n=we(e,t),r={files:[],folders:[]};if((await e.vault.adapter.stat(n))?.type!==\"folder\")return r;try{return await e.vault.adapter.list(n)}catch(o){if(await e.vault.exists(n))throw o;return r}}async function Eo(e,t,n,r={}){let s={...{shouldFailOnMissingFile:!0},...r};await jr(async()=>{let l=await al(e,t);if(l===null)return m();let u=await En(n,l);if(u===null)return!1;let f=!0;if(!await pd(e,t,async p=>{await e.vault.process(p,g=>g!==l?(console.warn(\"Content has changed since it was read. Retrying...\",{actualContent:g,expectedContent:l,path:p.path}),f=!1,g):u)}))return m();return f;function m(){if(s.shouldFailOnMissingFile){let p=we(e,t);throw new Error(`File '${p}' not found`)}return!0}},s)}async function al(e,t){let n=null;return await pd(e,t,async r=>{n=await e.vault.read(r)}),n}async function Ao(e,t,n){let r=Me(e,t,!1,!0),o=il(e,t,n);if(r.path.toLowerCase()===o.toLowerCase())return r.path!==n&&await e.vault.rename(r,o),o;let s=ut(o);await xo(e,s);try{await e.vault.rename(r,o)}catch(l){if(!await e.vault.exists(o)||await e.vault.exists(r.path))throw l}return o}async function pd(e,t,n){let r=we(e,t),o=Ze(e,r);if(!o||o.deleted)return!1;try{return await n(o),!0}catch(s){if(o=Ze(e,r),!o||o.deleted)return!1;throw s}}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function vo(e,t,n,r={}){await Eo(e,t,async o=>qt(e,t)?Kb(o,we(e,t),n):await gd(o,we(e,t),n),r)}function qr(e){return!!e.isCanvas}function Jb(e){return qr(e)&&e.type===\"file\"}function Zb(e){return qr(e)&&e.type===\"text\"}function Jt(e){return e.startIndex!==void 0}function Co(e){return e.frontmatterKey!==void 0}async function Kb(e,t,n){let r=await En(n),o=Qb(e),s=new Map;for(let l of r){if(!qr(l))return console.warn(\"Only canvas changes are supported for canvas files\",{change:l,path:t}),null;let u=o.nodes[l.nodeIndex];if(!u)return console.warn(\"Node not found\",{nodeIndex:l.nodeIndex,path:t}),null;if(Jb(l)){if(u.file!==l.oldContent)return console.warn(\"Content mismatch\",{actualContent:u.file,expectedContent:l.oldContent,nodeIndex:l.nodeIndex,path:t,type:\"file\"}),null;u.file=l.newContent}else if(Zb(l)){let f=s.get(l.nodeIndex);f||(f=[],s.set(l.nodeIndex,f)),f.push(l)}}for(let[l,u]of s.entries()){let f=o.nodes[l];if(!f)return console.warn(\"Node not found\",{nodeIndex:l,path:t}),null;if(typeof f.text!=\"string\")return console.warn(\"Node text is not a string\",{nodeIndex:l,path:t}),null;let h=u.map(m=>mr(m.originalReference,m.newContent));f.text=await gd(f.text,`${t}.node${l.toString()}.VIRTUAL_FILE.md`,h)}return JSON.stringify(o,null,\"\t\")}async function gd(e,t,n){let r=await En(n),o=bo(e);for(let f of r)if(Jt(f)){let h=e.slice(f.startIndex,f.endIndex);if(h!==f.oldContent)return console.warn(\"Content mismatch\",{actualContent:h,endIndex:f.endIndex,expectedContent:f.oldContent,path:t,startIndex:f.startIndex}),null}else if(Co(f)){let h=nr(o,f.frontmatterKey);if(h!==f.oldContent)return console.warn(\"Content mismatch\",{actualContent:h,expectedContent:f.oldContent,frontmatterKey:f.frontmatterKey,path:t}),null}r.sort((f,h)=>Jt(f)&&Jt(h)?f.startIndex-h.startIndex:Co(f)&&Co(h)?f.frontmatterKey.localeCompare(h.frontmatterKey):Jt(f)?-1:1),r=r.filter((f,h)=>f.oldContent===f.newContent?!1:h===0?!0:!oa(f,r[h-1]));for(let f=1;f<r.length;f++){let h=r[f];if(!h)continue;let m=r[f-1];if(m&&Jt(m)&&Jt(h)&&m.endIndex&&h.startIndex&&m.endIndex>h.startIndex)return console.warn(\"Overlapping changes\",{change:h,previousChange:m}),null}let s=\"\",l=0,u=!1;for(let f of r)Jt(f)?(s+=e.slice(l,f.startIndex),s+=f.newContent,l=f.endIndex):Co(f)&&(Pc(o,f.frontmatterKey,f.newContent),u=!0);return s+=e.slice(l),u&&(s=ud(s,o)),s}function Qb(e){let t;try{t=JSON.parse(e)}catch{t=null}return(t===null||typeof t!=\"object\")&&(t={}),t}var wd=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function ex(e){for(let[t,n]of Object.entries(e.metadataCache.fileCache))n.hash&&(e.metadataCache.metadataCache[n.hash]||await Gr(e,t))}function dn(e){let t=[];return e.links&&t.push(...e.links),e.embeds&&t.push(...e.embeds),e.frontmatterLinks&&t.push(...e.frontmatterLinks),fd(t),t=t.filter((n,r)=>{if(r===0)return!0;let o=t[r-1];return o?rn(n)&&rn(o)?n.position.start.offset!==o.position.start.offset:vt(n)&&vt(o)?n.key!==o.key:!0:!0}),t}function ll(e,t){let n=Me(e,t,!0);return Xr(e,n,()=>e.metadataCache.getBacklinksForFile(n))}async function Zt(e,t,n={}){let r=e.metadataCache.getBacklinksForFile.safe;if(r)return r(t);let o=null;return await jr(async()=>{let s=Me(e,t);await ex(e),o=ll(e,s);for(let l of o.keys()){let u=Ze(e,l);if(!u)return!1;await yd(e,u);let f=await al(e,u);if(!f)return!1;let h=bo(f),m=o.get(l);if(!m)return!1;for(let p of m){let g;if(rn(p))g=f.slice(p.position.start.offset,p.position.end.offset);else if(vt(p)){let w=nr(h,p.key);if(typeof w!=\"string\")return!1;g=w}else return!0;if(g!==p.original)return!1}}return!0},n),o}async function Gr(e,t,n={}){let r=Qe(\"MetadataCache:getCacheSafe\"),o=null;return await jr(async()=>{let s=Ze(e,t);if(!s||s.deleted)return o=null,!0;await yd(e,s);let l=e.metadataCache.getFileInfo(s.path),u=await e.vault.adapter.stat(s.path);return l?u?s.stat.mtime<u.mtime?(e.vault.onChange(\"modified\",s.path,void 0,u),r(`Cached timestamp for ${s.path} is from ${new Date(s.stat.mtime).toString()} which is older than the file system modification timestamp ${new Date(u.mtime).toString()}`),!1):l.mtime<u.mtime?(r(`File cache info for ${s.path} is from ${new Date(l.mtime).toString()} which is older than the file modification timestamp ${new Date(u.mtime).toString()}`),!1):(o=e.metadataCache.getFileCache(s),o?!0:(r(`File cache for ${s.path} is missing`),!1)):(r(`File stat for ${s.path} is missing`),!1):(r(`File cache info for ${s.path} is missing`),!1)},n),o}function tx(e,t){if(!t.deleted)return Ft;let n=[],r=t;for(;r.deleted;)n.push(r.path),e.vault.fileMap[r.path]=r,r=r.parent??Lr(e,ut(r.path),!0);return ct(t)&&e.metadataCache.uniqueFileLookup.add(t.name.toLowerCase(),t),()=>{for(let o of n)delete e.vault.fileMap[o];ct(t)&&e.metadataCache.uniqueFileLookup.remove(t.name.toLowerCase(),t)}}function Xr(e,t,n){let r=tx(e,t);try{return n()}finally{r()}}async function yd(e,t){if(!Gt(e,t))return;let n=we(e,t);for(let r of e.workspace.getLeavesOfType(\"markdown\"))r.view instanceof wd.MarkdownView&&r.view.file?.path===n&&await r.view.save()}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function kd(e){return e.vault.getConfig(\"newLinkFormat\")===\"relative\"}function bd(e){return!e.vault.getConfig(\"useMarkdownLinks\")}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var rx=\"\\\\|\",ix=/[\\\\\\x00\\x08\\x0B\\x0C\\x0E-\\x1F ]/g,ox=/[\\\\[\\]<>_*~=`$]/g,xd=/(?<!\\\\)\\|/g,Ed=\"|\";function sx(e){let t=gr(e.app,e.link,e.oldSourcePathOrFile??e.newSourcePathOrFile);return t?Zr({app:e.app,link:e.link,newSourcePathOrFile:e.newSourcePathOrFile,newTargetPathOrFile:t,oldSourcePathOrFile:e.oldSourcePathOrFile,shouldForceMarkdownLinks:e.shouldForceMarkdownLinks,shouldUpdateFilenameAlias:e.shouldUpdateFilenameAlias}):e.link.original}async function ul(e,t,n,r={}){await vo(e,t,async()=>{let o=await Gr(e,t);if(!o)return[];let s=[],l=(o.sections??[]).filter(u=>u.type===\"table\").map(u=>({end:u.position.end.offset,start:u.position.start.offset}));for(let u of dn(o)){let f=await n(u);if(f===void 0)continue;let h=mr(u,f);qt(e,t)?qr(h)?s.push(h):console.warn(\"Unsupported file change\",h):(kx(h,l)&&(h.newContent=h.newContent.replaceAll(xd,rx)),s.push(h))}return s},r)}function gr(e,t,n){let{linkPath:r}=Ad(t.link);return e.metadataCache.getFirstLinkpathDest(r,we(e,n))}function ax(e){let{app:t}=e,r=(t.fileManager.generateMarkdownLink.defaultOptionsFn??(()=>({})))();e={...{isEmptyEmbedAliasAllowed:!0},...r,...e};let s=Me(t,e.targetPathOrFile,e.isNonExistingFileAllowed);return Xr(t,s,()=>dx(e))}function Jr(e){let t=wx(e);if(t)return t;let n=\"!\",r=e.startsWith(n);r&&(e=Gn(e,n));let s=rd().use(lr).use(ld,{aliasDivider:Ed}).parse(e);if(s.children.length!==1)return null;let l=s.children[0];if(l?.type!==\"paragraph\"||l.children.length!==1)return null;let u=l.children[0];if(u?.position?.start.offset!==0||u.position.end.offset!==e.length)return null;switch(u.type){case\"link\":return gx(u,e,r);case\"wikiLink\":return yx(u,e,r);default:return null}}function lx(e){let{app:t,displayText:n,isWikilink:r,newSourcePathOrFile:o,oldSourcePathOrFile:s,oldTargetPath:l,targetPathOrFile:u}=e;if(r===!1)return!1;if(!n)return!0;let f=Me(t,u,!0),h=we(t,o),m=we(t,s??o),p=ke(h),g=ke(m),w=new Set;for(let F of[f.path,l]){if(!F)continue;let T=we(t,F);w.add(T),w.add(pe(T)),w.add(Xn(p,T)),w.add(Xn(g,T))}for(let F of[m,h])w.add(t.metadataCache.fileToLinktext(f,F,!1));let E=Ce((0,So.normalizePath)(n.split(\" > \")[0]??\"\"),/^\\.\\//g,\"\").toLowerCase();for(let F of w){if(F.toLowerCase()===E)return!0;let T=ke(F),A=pe(F,ve(F));if(be(T,A).toLowerCase()===E)return!0}return!1}function Ad(e){let t=(0,So.parseLinktext)(Or(e));return{linkPath:t.path,subpath:t.subpath}}function ux(e){return Jr(e)?.hasAngleBrackets??!1}function Cd(e){return Jr(e)?.isEmbed??!1}function cx(e){return Jr(e)?.url.startsWith(\"./\")??!1}function vd(e){return Jr(e)?.isWikilink??!1}function Zr(e){let{app:t,link:n,newSourcePathOrFile:r,newTargetPathOrFile:o,oldSourcePathOrFile:s,oldTargetPathOrFile:l,shouldForceMarkdownLinks:u,shouldUpdateFilenameAlias:f}=e;if(!o)return n.original;let h=Me(t,o,!0),m=we(t,l??o),p=vd(n.original)&&u!==!0,{subpath:g}=Ad(n.link),w=!f;if(qt(t,r)&&tl(n))return h.path+g;let E;if(p){let T=Jr(n.original);T?.alias&&(E=T.alias,w=!0)}return E??=lx({app:t,displayText:n.displayText,isWikilink:p,newSourcePathOrFile:r,oldSourcePathOrFile:s,oldTargetPath:m,targetPathOrFile:h})?void 0:n.displayText,w||(E===pe(m,ve(m))?E=h.basename:E===pe(m)&&(E=h.name)),ax({alias:E,app:t,isWikilink:u?!1:void 0,originalLink:n.original,sourcePathOrFile:r,subpath:g,targetPathOrFile:h})}async function Sd(e){let{app:t,newSourcePathOrFile:n,oldSourcePathOrFile:r,shouldForceMarkdownLinks:o,shouldUpdateEmbedOnlyLinks:s,shouldUpdateFilenameAlias:l}=e;qt(t,n)&&!t.internalPlugins.getEnabledPluginById(Ut.Canvas)||await ul(t,n,u=>{let f=Cd(u.original);if(!(s!==void 0&&s!==f))return sx({app:t,link:u,newSourcePathOrFile:n,oldSourcePathOrFile:r,shouldForceMarkdownLinks:o,shouldUpdateFilenameAlias:l})},e)}function fx(e,t,n,r,o){let s;return t.path===n&&r?s=r:o.shouldForceRelativePath?s=Xn(ke(n),o.isWikilink?Zu(e,t):t.path)+r:s=e.metadataCache.fileToLinktext(t,n,o.isWikilink)+r,o.shouldForceRelativePath&&o.shouldUseLeadingDot&&!s.startsWith(\".\")&&!s.startsWith(\"#\")&&(s=`./${s}`),s}function dx(e){let{app:t}=e,n=Me(t,e.targetPathOrFile,e.isNonExistingFileAllowed),r=we(t,e.sourcePathOrFile),o=e.subpath??\"\",s=px(e,n),l=fx(t,n,r,o,s);return s.isWikilink?mx(l,e.alias,s.isEmbed):hx(l,n,e,s)}function hx(e,t,n,r){let{app:o}=n,s=r.isEmbed?\"!\":\"\",l=r.shouldUseAngleBrackets?`<${e}>`:Ce(e,ix,({substring:h})=>encodeURIComponent(h)),u=n.alias??\"\";!u&&(!r.isEmbed||!n.isEmptyEmbedAliasAllowed)&&(u=!n.shouldIncludeAttachmentExtensionToEmbedAlias||Gt(o,t)?t.basename:t.name);let f=Ce(u,ox,\"\\\\$&\");return`${s}[${f}](${l})`}function mx(e,t,n){let r=n?\"!\":\"\",o=t??\"\";if(o&&o.toLowerCase()===e.toLowerCase())return`${r}[[${o}]]`;let s=o?`|${o}`:\"\";return`${r}[[${e}${s}]]`}function px(e,t){let{app:n}=e;return{isEmbed:e.isEmbed??(e.originalLink?Cd(e.originalLink):void 0)??!Gt(n,t),isWikilink:e.isWikilink??(e.originalLink?vd(e.originalLink):void 0)??bd(n),shouldForceRelativePath:e.shouldForceRelativePath??kd(n),shouldUseAngleBrackets:e.shouldUseAngleBrackets??(e.originalLink?ux(e.originalLink):void 0)??!1,shouldUseLeadingDot:e.shouldUseLeadingDot??(e.originalLink?cx(e.originalLink):void 0)??!1}}function gx(e,t,n){let r=\"<\",o=\"](\",s=\")\",l=e.children[0],u=t.slice((l?.position?.end.offset??1)+o.length,(e.position?.end.offset??0)-s.length),f=t.startsWith(r)||u.startsWith(r),h=el(e.url),m=e.url;if(!h&&!f)try{m=decodeURIComponent(m)}catch(p){console.error(`Failed to decode URL ${m}`,p)}return{alias:l?.value,hasAngleBrackets:f,isEmbed:n,isExternal:h,isWikilink:!1,title:e.title??void 0,url:m}}function wx(e){return el(e)?{isEmbed:!1,isExternal:!0,isWikilink:!1,url:e}:null}function yx(e,t,n){return{alias:t.includes(Ed)?e.data.alias:void 0,isEmbed:n,isExternal:!1,isWikilink:!0,url:e.value}}function kx(e,t){return!Jt(e)||!xd.test(e.newContent)?!1:t.some(n=>n.start<=e.startIndex&&e.endIndex<=n.end)}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function Td(e,t,n){let r=Qe(\"Logger:invokeAsyncAndLog\"),o=performance.now();n??=xn(1),r(`${e}:start`,{fn:t,timestampStart:o}),r.printStackTrace(n);try{await t();let s=performance.now();r(`${e}:end`,{duration:s-o,fn:t,timestampEnd:s,timestampStart:o}),r.printStackTrace(n)}catch(s){let l=performance.now();throw r(`${e}:error`,{duration:l-o,error:s,fn:t,timestampEnd:l,timestampStart:o}),r.printStackTrace(n),s}}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function hn(e,t,n,r){r??=xn(1),On(()=>bx(e,t,n,r))}async function bx(e,t,n,r){n??=6e4,r??=xn(1);let s=_d(e).value;s.items.push({fn:t,stackTrace:r,timeoutInMilliseconds:n}),s.promise=s.promise.then(()=>Fd(e)),await s.promise}function _d(e){return an(e,\"queue\",{items:[],promise:Promise.resolve()})}async function Fd(e){let t=_d(e).value,n=t.items[0];n&&(await nl(()=>rl(n.timeoutInMilliseconds,()=>Td(Fd.name,n.fn,n.stackTrace))),t.items.shift())}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function To(e,t){let n=_t(e,t);for(;n;){if(!await ol(e,n))return;let r=n.parent;await Kr(e,n.path),n=r}}async function Kr(e,t,n,r,o){let s=Cn(e,t);if(!s)return!1;let l=ct(s)||(o??!0);if(ct(s)){let u=await Zt(e,s);n&&u.clear(n),u.count()!==0&&(r&&new Notice(`Attachment ${s.path} is still used by other notes. It will not be deleted.`),l=!1)}else if(Hs(s)){let u=await sl(e,s);for(let f of[...u.files,...u.folders])l&&=await Kr(e,f,n,r);l&&=await ol(e,s)}if(l)try{await e.fileManager.trashFile(s)}catch(u){await e.vault.exists(s.path)&&(Rr(new Error(`Failed to delete ${s.path}`,{cause:u})),l=!1)}return l}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var cl=new Map,Qr=new Set,_o=new Map;function Od(e,t){let n=Fo(e.app),r=e.manifest.id;n.set(r,t),Pd(e.app),e.register(()=>{n.delete(r),Pd(e.app)});let o=e.app;e.registerEvent(o.vault.on(\"delete\",s=>{vx(e,s)})),e.registerEvent(o.vault.on(\"rename\",(s,l)=>{Fx(e,s,l)})),e.registerEvent(o.metadataCache.on(\"deleted\",(s,l)=>{Tx(e,s,l)}))}async function xx(e,t,n,r,o){let s=_o.get(t);if(s){_o.delete(t);for(let l of s)await fl(e,l.oldPath,n,r,o,l.combinedBacklinksMap)}}async function Ex(e,t,n,r,o){if(r.set(t,n),!Ke(e,t))return;let s=ei(e),l=await Jn(e,t),u=s.shouldRenameAttachmentFolder?await Jn(e,n):l,f=_t(e,l);if(!f||l===u&&!s.shouldRenameAttachmentFiles)return;let h=[];if(await qs(e,t))Rd.Vault.recurseChildren(f,g=>{ct(g)&&h.push(g)});else for(let g of o){let w=gr(e,g,t);w&&w.path.startsWith(l)&&(await Zt(e,w)).keys().length===1&&h.push(w)}let m=pe(t,ve(t)),p=pe(n,ve(n));for(let g of h){if(Ke(e,g))continue;let w=Xn(l,g.path),E=be(u,ke(w)),F=s.shouldRenameAttachmentFiles?Ce(g.basename,m,p):g.basename,T=be(E,An(F,g.extension));if(g.path!==T){if(s.shouldDeleteConflictingAttachments){let A=Ze(e,T);A&&await e.fileManager.trashFile(A)}else T=e.vault.getAvailablePath(be(E,F),g.extension);r.set(g.path,T)}}}function Fo(e){return an(e,\"renameDeleteHandlersMap\",new Map).value}function ei(e){let t=Fo(e),n=Array.from(t.values()).reverse(),r={};for(let o of n){let s=o();r.shouldDeleteConflictingAttachments||=s.shouldDeleteConflictingAttachments??!1,r.shouldDeleteEmptyFolders||=s.shouldDeleteEmptyFolders??!1,r.shouldHandleDeletions||=s.shouldHandleDeletions??!1,r.shouldHandleRenames||=s.shouldHandleRenames??!1,r.shouldRenameAttachmentFiles||=s.shouldRenameAttachmentFiles??!1,r.shouldRenameAttachmentFolder||=s.shouldRenameAttachmentFolder??!1,r.shouldUpdateFilenameAliases||=s.shouldUpdateFilenameAliases??!1;let l=r.isPathIgnored;r.isPathIgnored=u=>l?.(u)??s.isPathIgnored?.(u)??!1}return r}async function Ax(e,t,n,r,o){if(!e.vault.adapter.insensitive||t.toLowerCase()!==n.toLowerCase())return!1;let s=be(ke(n),`__temp__${pe(n)}`);return await Dd(e,n,s),await fl(e,t,s,r,o),await e.vault.rename(Me(e,s),n),!0}async function Cx(e,t){if(Qe(\"RenameDeleteHandler:handleDelete\")(`Handle Delete ${t}`),!Ke(e,t))return;let n=ei(e);if(!n.shouldHandleDeletions||n.isPathIgnored?.(t))return;let r=cl.get(t);if(cl.delete(t),r){let l=dn(r);for(let u of l){let f=gr(e,u,t);f&&(Ke(e,f)||await Kr(e,f,t,n.shouldDeleteEmptyFolders))}}let o=await Jn(e,t),s=_t(e,o);s&&await qs(e,t)&&await Kr(e,s,t,!1,n.shouldDeleteEmptyFolders)}function vx(e,t){let n=e.app;if(!dl(e))return;let r=t.path;hn(n,()=>Cx(n,r))}function Sx(e,t,n){let r=ei(e);r.isPathIgnored?.(t.path)||r.shouldHandleDeletions&&Gt(e,t)&&n&&cl.set(t.path,n)}function Tx(e,t,n){dl(e)&&Sx(e.app,t,n)}function _x(e,t,n){let r=Ld(t,n);if(Qe(\"RenameDeleteHandler:handleRename\")(`Handle Rename ${r}`),Qr.has(r)){Qr.delete(r);return}let o=ei(e);if(!o.shouldHandleRenames||o.isPathIgnored?.(t)||o.isPathIgnored?.(n))return;let s=e.metadataCache.getCache(t)??e.metadataCache.getCache(n),l=s?dn(s):[],u=ll(e,t).data;hn(e,()=>fl(e,t,n,u,l))}async function fl(e,t,n,r,o,s){if(await xx(e,t,n,r,o),await Ix(e,t,n,r,o),await Ax(e,t,n,r,o))return;let l=Hn(e.fileManager,{updateAllLinks:()=>ta});try{let u=new Map;await Ex(e,t,n,u,o);let f=new Map;Id(r,u,f,t);for(let p of u.keys()){if(p===t)continue;let g=(await Zt(e,p)).data;Id(g,u,f,p)}let h=new Set;for(let[p,g]of u.entries()){if(p===t)continue;let w=await Dd(e,p,g);u.set(p,w),h.add(ke(p))}let m=ei(e);if(m.shouldDeleteEmptyFolders)for(let p of h)await To(e,p);for(let[p,g]of Array.from(f.entries()).concat(Array.from(s?.entries()??[])))await ul(e,p,w=>{let E=g.get(rr(w));if(!E)return;let F=u.get(E);if(F)return Zr({app:e,link:w,newSourcePathOrFile:p,newTargetPathOrFile:F,oldTargetPathOrFile:E,shouldUpdateFilenameAlias:m.shouldUpdateFilenameAliases})},{shouldFailOnMissingFile:!1});if(Ke(e,n)&&await Sd({app:e,newSourcePathOrFile:n,oldSourcePathOrFile:t,shouldFailOnMissingFile:!1,shouldUpdateFilenameAlias:m.shouldUpdateFilenameAliases}),!Ze(e,n)){let p=_o.get(n);p||(p=[],_o.set(n,p)),p.push({combinedBacklinksMap:f,oldPath:t})}}finally{l();let u=Array.from(Qr);hn(e,()=>{for(let f of u)Qr.delete(f)})}}function Fx(e,t,n){if(!dl(e)||!ct(t))return;let r=t.path;_x(e.app,n,r)}function Id(e,t,n,r){for(let[o,s]of e.entries()){let l=t.get(o)??o,u=n.get(l)??new Map;n.set(l,u);for(let f of s)u.set(rr(f),r)}}function Pd(e){let t=Fo(e);Qe(\"RenameDeleteHandler:logRegisteredHandlers\")(`Plugins with registered rename/delete handlers: ${JSON.stringify(Array.from(t.keys()))}`)}function Ld(e,t){return`${e} -> ${t}`}async function Ix(e,t,n,r,o){let s=e.metadataCache.getCache(t)??e.metadataCache.getCache(n),l=s?dn(s):[],u=Me(e,t,!0),f=new Map;await Xr(e,u,async()=>{f=(await Zt(e,u)).data});for(let h of l)o.includes(h)||o.push(h);for(let[h,m]of f.entries()){let p=r.get(h);p||(p=[],r.set(h,p));for(let g of m)p.includes(g)||p.push(g)}}async function Dd(e,t,n){if(n=il(e,t,n),t===n)return n;let r=Ld(t,n);return Qr.add(r),n=await Ao(e,t,n),n}function dl(e){let t=e.app,n=e.manifest.id,r=Fo(t);return Array.from(r.keys())[0]===n}var np=Le(Sm(),1);var Dn=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function tt(e,t){e.createEl(\"strong\",{cls:\"markdown-rendered code\"},n=>{n.createEl(\"code\",{text:t})})}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function Tm(e){let t=e.items,n=0,r=new Notice(\"\",0);for(let o of t){if(e.abortSignal?.aborted){r.hide();return}n++;let s=`# ${n.toString()} / ${t.length.toString()}`,l=e.buildNoticeMessage(o,s);r.setMessage(l),Qe(\"Loop\")(l);try{await e.processItem(o)}catch(u){if(e.shouldContinueOnError)throw r.hide(),u;Mi(u)}}r.hide()}var Pl=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Rl=class extends on{isConfirmed=!1;options;constructor(t,n){super(t,n,W.ConfirmModal);let r={app:t.app,cancelButtonText:\"Cancel\",cssClass:\"\",message:t.message,okButtonText:\"OK\",title:\"\"};this.options={...r,...t}}onClose(){this.resolve(this.isConfirmed)}onOpen(){this.titleEl.setText(this.options.title),this.contentEl.createEl(\"p\",{text:this.options.message});let t=new Pl.ButtonComponent(this.contentEl);t.setButtonText(this.options.okButtonText),t.setCta(),t.onClick(()=>{this.isConfirmed=!0,this.close()}),t.setClass(W.OkButton);let n=new Pl.ButtonComponent(this.contentEl);n.setButtonText(this.options.cancelButtonText),n.onClick(this.close.bind(this)),n.setClass(W.CancelButton)}};async function _m(e){return await Zn(t=>new Rl(e,t))}var Om=require(\"obsidian\");var Ll=Le(Wt(),1);var li=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Ol=class extends on{isOkClicked=!1;options;value;constructor(t,n){super(t,n,W.PromptModal);let r={app:t.app,cancelButtonText:\"Cancel\",defaultValue:\"\",okButtonText:\"OK\",placeholder:\"\",title:\"\",valueValidator:Ft};this.options={...r,...t},this.value=t.defaultValue??\"\"}onClose(){this.resolve(this.isOkClicked?this.value:null)}onOpen(){this.titleEl.setText(this.options.title);let t=new li.TextComponent(this.contentEl),n=t.inputEl,r=async()=>{let l=await this.options.valueValidator(n.value);n.setCustomValidity(l??\"\"),n.reportValidity()};t.setValue(this.value),t.setPlaceholder(this.options.placeholder),n.addClass(W.TextBox),t.onChange(l=>{this.value=l}),n.addEventListener(\"keydown\",l=>{l.key===\"Enter\"?this.handleOk(l,t):l.key===\"Escape\"&&this.close()}),n.addEventListener(\"input\",pr(r)),n.addEventListener(\"focus\",pr(r)),On(r);let o=new li.ButtonComponent(this.contentEl);o.setButtonText(this.options.okButtonText),o.setCta(),o.onClick(l=>{this.handleOk(l,t)}),o.setClass(W.OkButton);let s=new li.ButtonComponent(this.contentEl);s.setButtonText(this.options.cancelButtonText),s.onClick(this.close.bind(this)),s.setClass(W.CancelButton)}handleOk(t,n){t.preventDefault(),n.inputEl.checkValidity()&&(this.isOkClicked=!0,this.close())}};async function Fm(e){return await Zn(t=>new Ol(e,t))}var SC=/^\\.{3,}$/,TC=/[. ]+$/,Dl=/[\\\\/:*?\"<>|]/,ui=/\\${(?<Token>.+?)(?::(?<Format>.+?))?}/g;function Ml(e){let t=new Map;try{let n=new Function(\"exports\",e),r={};n(r);for(let[o,s]of Object.entries(r))t.set(o,s);return t}catch(n){throw new Error(\"Error initializing custom token formatters\",{cause:n})}}function _C(e){return(0,Ll.default)().format(e)}function Im(e,t,n,r){let o=Ze(e,t);return o?(0,Ll.default)(r(o)).format(n):\"\"}function FC(){return Nl(\"0123456789\")}function IC(){return Nl(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\")}function PC(){return Nl(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")}function RC(){return crypto.randomUUID()}function OC(e,t,n){let r=Ze(e,t);if(!r)return\"\";let o=e.metadataCache.getFileCache(r);if(!o?.frontmatter)return\"\";let s=nr(o.frontmatter,n)??\"\";return String(s)}var Et=class e{constructor(t,n,r=\"\"){this.app=t;this.filePath=n;this.originalCopiedFileName=r;this.fileName=pe(n,ve(n)),this.folderName=pe(ke(n)),this.folderPath=ke(n);let o=ve(r);this.originalCopiedFileName=pe(r,o),this.originalCopiedFileExtension=o.slice(1)}static formatters=new Map;static{this.registerCustomFormatters(\"\")}fileName;folderName;folderPath;originalCopiedFileExtension;static isRegisteredToken(t){return e.formatters.has(t.toLowerCase())}static registerCustomFormatters(t){this.formatters.clear(),this.registerFormatter(\"date\",(r,o)=>_C(o)),this.registerFormatter(\"fileCreationDate\",(r,o)=>Im(r.app,r.filePath,o,s=>s.stat.ctime)),this.registerFormatter(\"fileModificationDate\",(r,o)=>Im(r.app,r.filePath,o,s=>s.stat.mtime)),this.registerFormatter(\"fileName\",r=>r.fileName),this.registerFormatter(\"filePath\",r=>r.filePath),this.registerFormatter(\"folderName\",r=>r.folderName),this.registerFormatter(\"folderPath\",r=>r.folderPath),this.registerFormatter(\"frontmatter\",(r,o)=>OC(r.app,r.filePath,o)),this.registerFormatter(\"originalCopiedFileExtension\",r=>r.originalCopiedFileExtension),this.registerFormatter(\"originalCopiedFileName\",r=>r.originalCopiedFileName),this.registerFormatter(\"prompt\",r=>r.prompt()),this.registerFormatter(\"randomDigit\",()=>FC()),this.registerFormatter(\"randomDigitOrLetter\",()=>IC()),this.registerFormatter(\"randomLetter\",()=>PC()),this.registerFormatter(\"uuid\",()=>RC());let n=Ml(t)??new Map;for(let[r,o]of n.entries())this.registerFormatter(r,o)}static registerFormatter(t,n){this.formatters.set(t.toLowerCase(),n)}async fillTemplate(t){return await Hu(t,ui,async(n,r,o)=>{let s=e.formatters.get(r.toLowerCase());if(!s)throw new Error(`Invalid token: ${r}`);try{return String(await s(this,o)??\"\")}catch(l){throw new Error(`Error formatting token \\${${r}}`,{cause:l})}})}async prompt(){let t=await Fm({app:this.app,defaultValue:this.originalCopiedFileName,title:\"Provide a value for ${prompt} template\",valueValidator:n=>zo(n,!1)});if(t===null)throw new Error(\"Prompt cancelled\");return t}};function zo(e,t=!0){if(t){e=Pm(e);let n=Rm(e);if(n)return`Unknown token: ${n}`}else if(e.match(ui))return\"Tokens are not allowed in file name\";return e===\".\"||e===\"..\"?\"\":e?Dl.test(e)?`File name \"${e}\" contains invalid symbols`:SC.test(e)?`File name \"${e}\" contains more than two dots`:TC.test(e)?`File name \"${e}\" contains trailing dots or spaces`:\"\":\"File name is empty\"}function ci(e,t=!0){if(t){e=Pm(e);let r=Rm(e);if(r)return`Unknown token: ${r}`}else if(e.match(ui))return\"Tokens are not allowed in path\";if(e=Gn(e,\"/\"),e=Ni(e,\"/\"),e===\"\")return\"\";let n=e.split(\"/\");for(let r of n){let o=zo(r);if(o)return o}return\"\"}function Nl(e){return e[Math.floor(Math.random()*e.length)]??\"\"}function Pm(e){return Ce(e,ui,(t,n)=>`\\${${n}}`)}function Rm(e){let t=e.matchAll(ui);for(let n of t){let r=n[1]??\"\";if(!Et.isRegisteredToken(r))return r}return null}async function Vo(e,t,n){return await DC(e,new Et(e.app,t,n))}async function Wo(e,t){return await Lm(e,e.settings.generatedAttachmentFilename,t)}function LC(e,t){if(!e.settings.specialCharacters)return t;t=t.replace(e.settings.specialCharactersRegExp,e.settings.specialCharactersReplacement);let n=qn(e.settings.specialCharactersReplacement);return t=t.replace(new RegExp(`${n}{2,}`,\"g\"),e.settings.specialCharactersReplacement),t}async function DC(e,t){return await Lm(e,e.settings.attachmentFolderPath,t)}async function Lm(e,t,n){let r=await n.fillTemplate(t),o=ci(r,!1);if(o)throw new Error(`Resolved path ${r} is invalid: ${o}`);return e.settings.shouldRenameAttachmentsToLowerCase&&(r=r.toLowerCase()),r=LC(e,r),(r.startsWith(\"./\")||r.startsWith(\"../\"))&&(r=be(n.folderPath,r)),r=(0,Om.normalizePath)(r),r}async function Dm(e,t,n,r){let o=e.app;n??=t.path,r??=()=>!0;let s=new Dn.Notice(`Collecting attachments for ${t.path}`),l=new Map,u=qt(o,t);await vo(o,t,async()=>{let f=await Gr(o,t);if(!f)return[];let h=u?await MC(o,t):dn(f),m=[];for(let p of h){let g=await NC(e,p,t.path,n);if(!g||!r(g.oldAttachmentPath))continue;if((await Zt(o,g.oldAttachmentPath)).count()>1?g.newAttachmentPath=await hd(o,g.oldAttachmentPath,g.newAttachmentPath):(g.newAttachmentPath=await Ao(o,g.oldAttachmentPath,g.newAttachmentPath),await To(o,ke(g.oldAttachmentPath))),l.set(g.oldAttachmentPath,g.newAttachmentPath),!u){let E=Zr({app:o,link:p,newSourcePathOrFile:t,newTargetPathOrFile:g.newAttachmentPath,oldTargetPathOrFile:g.oldAttachmentPath});m.push(mr(p,E))}}return m}),u&&await Eo(o,t,f=>{let h=JSON.parse(f);for(let m of h.nodes){if(m.type!==\"file\")continue;let p=l.get(m.file);p&&(m.file=p)}return rr(h)}),s.hide()}function Mm(e,t){let n=e.app.workspace.getActiveFile();return Ke(e.app,n)?(t||hn(e.app,()=>Uo(e,n?.parent??Ht(new Error(\"Parent folder not found\")))),!0):!1}function Nm(e,t){let n=e.app.workspace.getActiveFile();if(!n||!Ke(e.app,n))return!1;if(!t){if(e.settings.isPathIgnored(n.path))return new Dn.Notice(\"Note path is ignored\"),!0;hn(e.app,()=>Dm(e,n))}return!0}function $m(e){hn(e.app,()=>Uo(e,e.app.vault.getRoot()))}async function Uo(e,t){if(!await _m({app:e.app,message:createFragment(r=>{r.appendText(\"Do you want to collect attachments for all notes in folder: \"),tt(r,t.path),r.appendText(\" and all its subfolders?\"),r.createEl(\"br\"),r.appendText(\"This operation cannot be undone.\")}),title:createFragment(r=>{(0,Dn.setIcon)(r.createSpan(),\"lucide-alert-triangle\"),r.appendText(\" Collect attachments in folder\")})}))return;e.consoleDebug(`Collect attachments in folder: ${t.path}`);let n=[];Dn.Vault.recurseChildren(t,r=>{Ke(e.app,r)&&n.push(r)}),n.sort((r,o)=>r.path.localeCompare(o.path)),await Tm({abortSignal:e.abortSignal,buildNoticeMessage:(r,o)=>`Collecting attachments ${o} - ${r.path}`,items:n,processItem:async r=>{e.settings.isPathIgnored(r.path)||await Dm(e,r)},shouldContinueOnError:!0})}async function MC(e,t){return(await e.vault.readJson(t.path)).nodes.filter(o=>o.type===\"file\").map(o=>o.file).map(o=>({link:o,original:o,position:{end:{col:0,line:0,loc:0,offset:0},start:{col:0,line:0,loc:0,offset:0}}}))}async function NC(e,t,n,r){let o=e.app,s=gr(o,t,r);if(!s||Ke(e.app,s))return null;let l=s.path,u=s.name,f=pe(r,ve(r)),h=pe(n,ve(n)),m;e.settings.shouldRenameCollectedAttachments?m=An(await Wo(e,new Et(e.app,n,s.name)),s.extension):e.settings.shouldRenameAttachmentFiles?m=u.replaceAll(f,h):m=u;let p=await Vo(e,n,m),g=be(p,m);return l===g?null:{newAttachmentPath:g,oldAttachmentPath:l}}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var mn=class{getTransformer(t){if(t===this.id)return this;throw new Error(`Transformer with id ${t} not found`)}transformObjectRecursively(t){return this.transformValueRecursively(t,\"\")}getTransformerId(t,n){return this.canTransform(t,n)?this.id:null}transformValueRecursively(t,n){let r=this.getTransformerId(t,n);if(r){let s=this.transformValue(t,n);return s===void 0?void 0:{__transformerId:r,transformedValue:s}}if(t===null)return null;if(typeof t!=\"object\")return t;if(Array.isArray(t))return t.map((s,l)=>this.transformValueRecursively(s,l.toString()));let o=t;return o.__transformerId?this.getTransformer(o.__transformerId).restoreValue(o.transformedValue,n):Object.fromEntries(Object.entries(t).map(([s,l])=>[s,this.transformValueRecursively(l,s)]))}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var kr=class extends mn{};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Ho=class extends kr{get id(){return\"date\"}canTransform(t){return t instanceof Date}restoreValue(t){return new Date(t)}transformValue(t){return t.toISOString()}};var Ym=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var jo=class extends kr{get id(){return\"duration\"}canTransform(t){let n=t;return!!n.asHours&&!!n.asMinutes&&!!n.asSeconds&&!!n.asMilliseconds}restoreValue(t){return(0,Ym.duration)(t)}transformValue(t){return t.toISOString()}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var qo=class extends mn{constructor(t){super(),this.transformers=t}get id(){return\"group\"}canTransform(t,n){return this.getFirstTransformerThatCanTransform(t,n)!==null}getTransformer(t){return this.transformers.find(n=>n.id===t)??Ht(`No transformer with id ${t} found`)}transformValue(t,n){let r=this.getFirstTransformerThatCanTransform(t,n);if(r===null)throw new Error(\"No transformer can transform the value\");return r.transformValue(t,n)}getTransformerId(t,n){let r=this.getFirstTransformerThatCanTransform(t,n);return r===null?null:r.id}restoreValue(){throw new Error(\"GroupTransformer does not support restoring values\")}getFirstTransformerThatCanTransform(t,n){return this.transformers.find(r=>r.canTransform(t,n))??null}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var $C=\"_\",Go=class extends mn{get id(){return\"skip-private-property\"}canTransform(t,n){return n.startsWith($C)}transformValue(){}restoreValue(){throw new Error(\"SkipPrivatePropertyTransformer does not support restoring values\")}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var YC=new qo([new Go,new Ho,new jo]),Xo=class{get shouldSaveAfterLoad(){return this._shouldSaveAfterLoad}_shouldSaveAfterLoad=!1;init(t){if(t!=null){if(typeof t!=\"object\"||Array.isArray(t)){let n=Array.isArray(t)?\"Array\":typeof t;console.error(`Invalid data type. Expected Object, got: ${n}`);return}this.initFromRecord(t)}}toJSON(){return this.getTransformer().transformObjectRecursively(this)}getTransformer(){return YC}initFromRecord(t){t=this.getTransformer().transformObjectRecursively(t);for(let[n,r]of Object.entries(t)){if(!(n in this)){console.warn(`Unknown property: ${n}`);continue}this[n]=r}}};var Bm=/(?:)/,zm=/$./,br=(r=>(r.None=\"None\",r.OnlyPastedImages=\"Only pasted images\",r.All=\"All\",r))(br||{}),Jo=class extends Xo{attachmentFolderPath=\"./assets/${filename}\";attachmentRenameMode=\"Only pasted images\";duplicateNameSeparator=\" \";generatedAttachmentFilename=\"file-${date:YYYYMMDDHHmmssSSS}\";jpegQuality=.8;shouldConvertPastedImagesToJpeg=!1;shouldDeleteOrphanAttachments=!1;shouldKeepEmptyAttachmentFolders=!1;shouldRenameAttachmentFiles=!1;shouldRenameAttachmentFolder=!0;shouldRenameAttachmentsToLowerCase=!1;shouldRenameCollectedAttachments=!1;specialCharacters=\"#^[]|*\\\\<>:?\";specialCharactersReplacement=\"-\";warningVersion=\"0.0.0\";get customTokensStr(){return this._customTokensStr}set customTokensStr(t){this._customTokensStr=t,Et.registerCustomFormatters(this._customTokensStr)}get excludePaths(){return this._excludePaths}set excludePaths(t){this._excludePaths=t.filter(Boolean),this._excludePathsRegExp=Wm(this._excludePaths,zm)}get includePaths(){return this._includePaths}set includePaths(t){this._includePaths=t.filter(Boolean),this._includePathsRegExp=Wm(this._includePaths,Bm)}get specialCharactersRegExp(){return new RegExp(`[${qn(this.specialCharacters)}]`,\"g\")}_customTokensStr=\"\";_excludePaths=[];_excludePathsRegExp=zm;_includePaths=[];_includePathsRegExp=Bm;constructor(t){super(),this.init(t)}isPathIgnored(t){return!this._includePathsRegExp.test(t)||this._excludePathsRegExp.test(t)}toJSON(){return{...super.toJSON(),customTokensStr:this.customTokensStr,excludePaths:this.excludePaths,includePaths:this.includePaths}}initFromRecord(t){let n=t,r=n.dateTimeFormat??\"YYYYMMDDHHmmssSSS\";n.attachmentFolderPath=Vm(n.attachmentFolderPath??\"\",r),n.generatedAttachmentFilename=Vm(n.generatedAttachmentFilename??n.pastedFileName??n.pastedImageFileName??\"file-${date}\",r),n.replaceWhitespace!==void 0&&(n.whitespaceReplacement=n.replaceWhitespace?\"-\":\"\"),n.autoRenameFiles!==void 0&&(n.shouldRenameAttachmentFiles=n.autoRenameFiles),n.autoRenameFolder!==void 0&&(n.shouldRenameAttachmentFolder=n.autoRenameFolder),n.deleteOrphanAttachments!==void 0&&(n.shouldDeleteOrphanAttachments=n.deleteOrphanAttachments),n.keepEmptyAttachmentFolders!==void 0&&(n.shouldKeepEmptyAttachmentFolders=n.keepEmptyAttachmentFolders),n.renameCollectedFiles!==void 0&&(n.shouldRenameCollectedAttachments=n.renameCollectedFiles),n.toLowerCase!==void 0&&(n.shouldRenameAttachmentsToLowerCase=n.toLowerCase),n.convertImagesToJpeg!==void 0&&(n.shouldConvertPastedImagesToJpeg=n.convertImagesToJpeg),n.whitespaceReplacement&&(n.specialCharacters=`${n.specialCharacters??\"\"} `,n.specialCharactersReplacement=n.whitespaceReplacement),this._shouldSaveAfterLoad=Ic(n,[\"autoRenameFiles\",\"autoRenameFolder\",\"convertImagesOnDragAndDrop\",\"convertImagesToJpeg\",\"dateTimeFormat\",\"deleteOrphanAttachments\",\"keepEmptyAttachmentFolders\",\"pastedFileName\",\"pastedImageFileName\",\"renameAttachmentsOnDragAndDrop\",\"renameCollectedFiles\",\"renameOnlyImages\",\"renamePastedFilesWithKnownNames\",\"replaceWhitespace\",\"toLowerCase\",\"whitespaceReplacement\"]),super.initFromRecord(n)}};function Vm(e,t){return e.replaceAll(\"${date}\",`\\${date:${t}}`)}function Wm(e,t){if(e.length===0)return t;let n=e.map(r=>r.startsWith(\"/\")&&r.endsWith(\"/\")?r.slice(1,-1):`^${qn(r)}`).map(r=>`(${r})`).join(\"|\");return new RegExp(n)}var ep=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function Um(e,t){let n=Object.keys(e).find(r=>e[r]===t);if(n===void 0)throw new Error(`Invalid enum value: ${t}`);return n}function Hm(e,t){let n=e[t];if(n===void 0)throw new Error(`Invalid enum key: ${t}`);return n}var qm=require(\"obsidian\");var pn=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function jm(e){let t=e;return t.validatorEl?t:e instanceof pn.DropdownComponent?{get validatorEl(){return e.selectEl}}:e instanceof pn.SliderComponent?{get validatorEl(){return e.sliderEl}}:e instanceof pn.TextAreaComponent?{get validatorEl(){return e.inputEl}}:e instanceof pn.TextComponent?{get validatorEl(){return e.inputEl}}:null}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Zo=class extends qm.PluginSettingTab{constructor(t){super(t.app,t),this.plugin=t,this.containerEl.addClass(W.LibraryName,ft(),W.PluginSettingsTab)}validatorsMap=new WeakMap;bind(t,n,r){let s={...{componentToPluginSettingsValueConverter:h=>h,onChanged:Ft,pluginSettings:void 0,pluginSettingsToComponentValueConverter:h=>h,shouldAutoSave:!0,shouldShowValidationMessage:!0,valueValidator:Ft},...r},l=()=>s.pluginSettings??this.plugin.settingsClone,u=jm(t)?.validatorEl,f=async h=>{h??=t.getValue();let m=await s.valueValidator(h);return u&&(m||(u.setCustomValidity(\"\"),u.checkValidity(),m=u.validationMessage),u.setCustomValidity(m),u.title=m,u.isActiveElement()&&s.shouldShowValidationMessage&&u.reportValidity()),!m};return t.setValue(s.pluginSettingsToComponentValueConverter(l()[n])).onChange(async h=>{if(!await f(h))return;let m=l();m[n]=s.componentToPluginSettingsValueConverter(h),s.shouldAutoSave&&await this.plugin.saveSettings(m),await s.onChanged()}),u?.addEventListener(\"focus\",pr(()=>f())),u?.addEventListener(\"blur\",pr(()=>f())),this.validatorsMap.set(t,()=>f()),On(()=>f()),t}async revalidate(t){let n=this.validatorsMap.get(t);return n?await n():!0}};var Km=require(\"obsidian\");var $l=Le(Wt(),1);var Ko=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var nt=class extends Ko.ValueComponent{inputEl;get validatorEl(){return this.inputEl}textComponent;constructor(t,n,r){super(),this.textComponent=new Ko.TextComponent(t),this.inputEl=this.textComponent.inputEl,this.inputEl.type=n,t.addClass(W.LibraryName,ft(),r)}getValue(){return this.valueFromString(this.inputEl.value)}onChange(t){return this.textComponent.onChange(()=>t(this.getValue())),this}onChanged(){this.textComponent.onChanged()}setDisabled(t){return this.textComponent.setDisabled(t),this.disabled=t,this}setPlaceholder(t){return this.textComponent.setPlaceholder(t),this}setValue(t){return this.inputEl.value=this.valueToString(t),this}valueToString(t){return String(t)}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var rt=class extends nt{setMax(t){return this.inputEl.max=this.valueToString(t),this}setMin(t){return this.inputEl.min=this.valueToString(t),this}setStep(t){return this.inputEl.step=t.toString(),this}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Gm=\"YYYY-MM-DD\",Qo=class extends rt{constructor(t){super(t,\"date\",W.DateComponent)}valueFromString(t){return(0,$l.default)(t,Gm).toDate()}valueToString(t){return(0,$l.default)(t).format(Gm)}};var Yl=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Xm=\"YYYY-MM-DDTHH:mm\",es=class extends rt{constructor(t){super(t,\"datetime-local\",W.DateTimeComponent)}valueFromString(t){return(0,Yl.default)(t,Xm).toDate()}valueToString(t){return(0,Yl.default)(t).format(Xm)}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ts=class extends nt{constructor(t){super(t,\"email\",W.EmailComponent)}valueFromString(t){return t}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ns=class extends nt{constructor(t){super(t,\"file\",W.FileComponent)}getValue(){return this.inputEl.files?.[0]??null}valueFromString(){return this.getValue()}valueToString(t){return t?.name??\"\"}};var Bl=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Jm=\"YYYY-MM\",rs=class extends rt{constructor(t){super(t,\"month\",W.MonthComponent)}valueFromString(t){let n=(0,Bl.default)(t,Jm);if(!n.isValid())throw new Error(\"Invalid month\");return{month:n.month()+1,year:n.year()}}valueToString(t){return(0,Bl.default)().year(t.year).month(t.month-1).format(Jm)}};var os=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var is=class extends os.ValueComponent{get validatorEl(){return this.dropdownComponent.selectEl}dropdownComponent;constructor(t){super(),this.dropdownComponent=new os.DropdownComponent(t),this.dropdownComponent.selectEl.multiple=!0,t.addClass(W.LibraryName,ft(),W.MultipleDropdownComponent)}addOption(t,n){return this.dropdownComponent.addOption(t,n),this}addOptions(t){return this.dropdownComponent.addOptions(t),this}getValue(){return Array.from(this.dropdownComponent.selectEl.selectedOptions).map(t=>t.value)}onChange(t){return this.dropdownComponent.onChange(()=>t(this.getValue())),this}setDisabled(t){return this.dropdownComponent.setDisabled(t),this.disabled=t,this}setValue(t){for(let n of Array.from(this.dropdownComponent.selectEl.options))n.selected=t.includes(n.value);return this}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ss=class extends nt{constructor(t){super(t,\"email\",W.MultipleEmailComponent),this.inputEl.multiple=!0}valueFromString(t){return t.split(\",\").map(n=>n.trim())}valueToString(t){return t.join(\", \")}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var as=class extends nt{constructor(t){super(t,\"file\",W.MultipleFileComponent),this.inputEl.multiple=!0}getValue(){return Array.from(this.inputEl.files??[])}valueFromString(){return this.getValue()}valueToString(t){return t[0]?.name??\"\"}};var us=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ls=class extends us.ValueComponent{get validatorEl(){return this.textAreaComponent.inputEl}textAreaComponent;constructor(t){super(),this.textAreaComponent=new us.TextAreaComponent(t),t.addClass(W.LibraryName,ft(),W.MultipleTextComponent)}getValue(){return this.textAreaComponent.getValue().split(`\n`)}onChange(t){return this.textAreaComponent.onChange(()=>t(this.getValue())),this}setDisabled(t){return this.textAreaComponent.setDisabled(t),this.disabled=t,this}setPlaceholder(t){return this.textAreaComponent.setPlaceholder(t),this}setValue(t){return this.textAreaComponent.setValue(t.join(`\n`)),this}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var cs=class extends rt{constructor(t){super(t,\"number\",W.NumberComponent)}valueFromString(t){return parseInt(t,10)}};var ds=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var fs=class extends rt{constructor(t){super(t,\"time\",W.TimeComponent)}valueFromString(t){return(0,ds.duration)(t)}valueToString(t){let n;return t.milliseconds()>0?n=\"HH:mm:ss.SSS\":t.seconds()>0?n=\"HH:mm:ss\":n=\"HH:mm\",(0,ds.utc)(t.asMilliseconds()).format(n)}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var hs=class extends nt{constructor(t){super(t,\"url\",W.UrlComponent)}valueFromString(t){return t}};var zl=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Zm=\"YYYY-[W]WW\",ms=class extends rt{constructor(t){super(t,\"week\",W.WeekComponent)}valueFromString(t){let n=(0,zl.default)(t,Zm);if(!n.isValid())throw new Error(\"Invalid week\");return{weekNumber:n.isoWeek(),year:n.year()}}valueToString(t){return(0,zl.default)().year(t.year).isoWeek(t.weekNumber).format(Zm)}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var xe=class extends Km.Setting{addComponent(t,n){let r=new t(this.controlEl);return this.components.push(r),n(r),this}addDate(t){return this.addComponent(Qo,t)}addDateTime(t){return this.addComponent(es,t)}addEmail(t){return this.addComponent(ts,t)}addFile(t){return this.addComponent(ns,t)}addMonth(t){return this.addComponent(rs,t)}addMultipleDropdown(t){return this.addComponent(is,t)}addMultipleEmail(t){return this.addComponent(ss,t)}addMultipleFile(t){return this.addComponent(as,t)}addMultipleText(t){return this.addComponent(ls,t)}addNumber(t){return this.addComponent(cs,t)}addTime(t){return this.addComponent(fs,t)}addUrl(t){return this.addComponent(hs,t)}addWeek(t){return this.addComponent(ms,t)}};var fi=\"\\u2423\",ps=class extends Zo{display(){this.containerEl.empty(),new xe(this.containerEl).setName(\"Location for new attachments\").setDesc(createFragment(t=>{t.appendText(\"Start with \"),tt(t,\".\"),t.appendText(\" to use relative path.\"),t.createEl(\"br\"),t.appendText(\"See available \"),t.createEl(\"a\",{href:\"https://github.com/RainCat1998/obsidian-custom-attachment-location?tab=readme-ov-file#tokens\",text:\"tokens\"}),t.appendChild(createEl(\"br\")),t.appendText(\"Dot-folders like \"),tt(t,\".attachments\"),t.appendText(\" are not recommended, because Obsidian doesn't track them. You might need to use \"),t.createEl(\"a\",{href:\"https://github.com/polyipseity/obsidian-show-hidden-files/\",text:\"Show Hidden Files\"}),t.appendText(\" Plugin to manage them.\")})).addText(t=>this.bind(t,\"attachmentFolderPath\",{componentToPluginSettingsValueConverter(n){return(0,ep.normalizePath)(n)},pluginSettingsToComponentValueConverter(n){return n},valueValidator(n){return ci(n)}}).setPlaceholder(\"./assets/${filename}\")),new xe(this.containerEl).setName(\"Generated attachment filename\").setDesc(createFragment(t=>{t.appendText(\"See available \"),t.createEl(\"a\",{href:\"https://github.com/RainCat1998/obsidian-custom-attachment-location?tab=readme-ov-file#tokens\",text:\"tokens\"})})).addText(t=>this.bind(t,\"generatedAttachmentFilename\",{valueValidator(n){return ci(n)}}).setPlaceholder(\"file-${date:YYYYMMDDHHmmssSSS}\")),new xe(this.containerEl).setName(\"Attachment rename mode\").addDropdown(t=>{t.addOptions(br),this.bind(t,\"attachmentRenameMode\",{componentToPluginSettingsValueConverter:n=>Hm(br,n),pluginSettingsToComponentValueConverter:n=>Um(br,n)})}),new xe(this.containerEl).setName(\"Should rename attachment folder\").setDesc(createFragment(t=>{t.appendText(\"When renaming md files, automatically rename attachment folder if folder name contains \"),tt(t,\"${filename}\"),t.appendText(\".\")})).addToggle(t=>{this.bind(t,\"shouldRenameAttachmentFolder\")}),new xe(this.containerEl).setName(\"Should rename attachment files\").setDesc(createFragment(t=>{t.appendText(\"When renaming md files, automatically rename attachment files if file name contains \"),tt(t,\"${filename}\"),t.appendText(\".\")})).addToggle(t=>{this.bind(t,\"shouldRenameAttachmentFiles\")}),new xe(this.containerEl).setName(\"Special characters\").setDesc(createFragment(t=>{t.appendText(\"Special characters in attachment folder and file name to be replaced or removed.\"),t.createEl(\"br\"),t.appendText(\"Leave blank to preserve special characters.\")})).addText(t=>{this.bind(t,\"specialCharacters\",{componentToPluginSettingsValueConverter:n=>n.replaceAll(fi,\"\"),pluginSettingsToComponentValueConverter:n=>n.replaceAll(\" \",fi),valueValidator(n){if(n.includes(\"/\"))return\"Special characters must not contain /\"}}).setPlaceholder(\"#^[]|*\\\\<>:?\"),t.inputEl.addEventListener(\"input\",()=>{t.inputEl.value=Vl(t.inputEl.value)})}),new xe(this.containerEl).setName(\"Special characters replacement\").setDesc(createFragment(t=>{t.appendText(\"Replacement string for special characters in attachment folder and file name.\"),t.createEl(\"br\"),t.appendText(\"Leave blank to remove special characters.\")})).addText(t=>{this.bind(t,\"specialCharactersReplacement\",{valueValidator(n){if(Dl.exec(n))return\"Special character replacement must not contain invalid filename path characters.\"}}).setPlaceholder(\"-\")}),new xe(this.containerEl).setName(\"Should rename attachments to lowercase\").setDesc(\"Automatically set all characters in folder name and pasted image name to be lowercase.\").addToggle(t=>{this.bind(t,\"shouldRenameAttachmentsToLowerCase\")}),new xe(this.containerEl).setName(\"Should convert pasted images to JPEG\").setDesc(\"Paste images from clipboard converting them to JPEG.\").addToggle(t=>{this.bind(t,\"shouldConvertPastedImagesToJpeg\")}),new xe(this.containerEl).setName(\"JPEG Quality\").setDesc(\"The smaller the quality, the greater the compression ratio.\").addDropdown(t=>{t.addOptions(zC()),this.bind(t,\"jpegQuality\",{componentToPluginSettingsValueConverter:n=>Number(n),pluginSettingsToComponentValueConverter:n=>n.toString()})}),new xe(this.containerEl).setName(\"Should rename collected attachments\").setDesc(createFragment(t=>{t.appendText(\"If enabled, attachments processed via \"),tt(t,\"Collect attachments\"),t.appendText(\" commands will be renamed according to the \"),tt(t,\"Pasted File Name\"),t.appendText(\" setting.\")})).addToggle(t=>{this.bind(t,\"shouldRenameCollectedAttachments\")}),new xe(this.containerEl).setName(\"Duplicate name separator\").setDesc(createFragment(t=>{t.appendText(\"When you are pasting/dragging a file with the same name as an existing file, this separator will be added to the file name.\"),t.appendChild(createEl(\"br\")),t.appendText(\"E.g., when you are dragging file \"),tt(t,\"existingFile.pdf\"),t.appendText(\", it will be renamed to \"),tt(t,\"existingFile 1.pdf\"),t.appendText(\", \"),tt(t,\"existingFile 2.pdf\"),t.appendText(\", etc, getting the first name available.\")})).addText(t=>{this.bind(t,\"duplicateNameSeparator\",{componentToPluginSettingsValueConverter:n=>n.replaceAll(fi,\" \"),pluginSettingsToComponentValueConverter:Vl,valueValidator(n){return zo(`filename${n}1`,!1)}}).setPlaceholder(fi),t.inputEl.addEventListener(\"input\",()=>{t.inputEl.value=Vl(t.inputEl.value)})}),new xe(this.containerEl).setName(\"Should keep empty attachment folders\").setDesc(\"If enabled, empty attachment folders will be preserved, useful for source control purposes.\").addToggle(t=>{this.bind(t,\"shouldKeepEmptyAttachmentFolders\")}),new xe(this.containerEl).setName(\"Should delete orphan attachments\").setDesc(\"If enabled, when the note is deleted, its orphan attachments are deleted as well.\").addToggle(t=>{this.bind(t,\"shouldDeleteOrphanAttachments\")}),new xe(this.containerEl).setName(\"Include paths\").setDesc(createFragment(t=>{t.appendText(\"Include notes from the following paths\"),t.createEl(\"br\"),t.appendText(\"Insert each path on a new line\"),t.createEl(\"br\"),t.appendText(\"You can use path string or \"),tt(t,\"/regular expression/\"),t.createEl(\"br\"),t.appendText(\"If the setting is empty, all notes are included\")})).addMultipleText(t=>{this.bind(t,\"includePaths\",{valueValidator:Qm})}),new xe(this.containerEl).setName(\"Exclude paths\").setDesc(createFragment(t=>{t.appendText(\"Exclude notes from the following paths\"),t.createEl(\"br\"),t.appendText(\"Insert each path on a new line\"),t.createEl(\"br\"),t.appendText(\"You can use path string or \"),tt(t,\"/regular expression/\"),t.createEl(\"br\"),t.appendText(\"If the setting is empty, no notes are excluded\")})).addMultipleText(t=>{this.bind(t,\"excludePaths\",{valueValidator:Qm})}),new xe(this.containerEl).setName(\"Custom tokens\").setDesc(createFragment(t=>{t.appendText(\"Custom tokens to be used in the attachment folder path and pasted file name.\"),t.appendChild(createEl(\"br\")),t.appendText(\"See \"),t.createEl(\"a\",{href:\"https://github.com/RainCat1998/obsidian-custom-attachment-location?tab=readme-ov-file#custom-tokens\",text:\"documentation\"}),t.appendText(\" for more information.\")})).addTextArea(t=>{this.bind(t,\"customTokensStr\",{valueValidator:BC})})}};function BC(e){if(Ml(e)===null)return\"Invalid custom tokens code\"}function zC(){let t={};for(let n=1;n<=10;n++){let r=(n/10).toFixed(1);t[r]=r}return t}function Qm(e){for(let t of e)if(t.startsWith(\"/\")&&t.endsWith(\"/\")){let n=t.slice(1,-1);if(!Wu(n))return`Invalid regular expression ${t}`}}function Vl(e){return e.replaceAll(\" \",fi)}var VC=/Pasted image (?<Timestamp>\\d{14})/,WC=\"YYYYMMDDHHmmss\",UC=10,gs=class extends qi{createPluginSettings(t){return new Jo(t)}createPluginSettingsTab(){return new ps(this)}async onLayoutReady(){if(this.register(Hn(this.app.vault,{getAvailablePath:()=>this.getAvailablePath.bind(this),getAvailablePathForAttachments:()=>{let t={isExtended:!0};return Object.assign(this.getAvailablePathForAttachments.bind(this),t)}})),Wl.webUtils&&this.register(Hn(Wl.webUtils,{getPathForFile:t=>n=>this.getPathForFile(n,t)})),(0,np.compare)(this.settings.warningVersion,\"7.0.0\")<0){this.settings.customTokensStr&&await ic({app:this.app,message:createFragment(n=>{n.appendText(\"In plugin version 7.0.0, the format for custom tokens has changed. Please update your custom tokens accordingly. Refer to the \"),n.createEl(\"a\",{href:\"https://github.com/RainCat1998/obsidian-custom-attachment-location?tab=readme-ov-file#custom-tokens\",text:\"documentation\"}),n.appendText(\" for more information.\")})});let t=this.settingsClone;t.warningVersion=this.manifest.version,await this.saveSettings(t)}}onloadComplete(){Od(this,()=>({isPathIgnored:n=>this.settings.isPathIgnored(n),shouldDeleteEmptyFolders:!this.settings.shouldKeepEmptyAttachmentFolders,shouldHandleDeletions:this.settings.shouldDeleteOrphanAttachments,shouldHandleRenames:!0,shouldRenameAttachmentFiles:this.settings.shouldRenameAttachmentFiles,shouldRenameAttachmentFolder:this.settings.shouldRenameAttachmentFolder,shouldUpdateFilenameAliases:!0})),this.addCommand({checkCallback:t=>Nm(this,t),id:\"collect-attachments-current-note\",name:\"Collect attachments in current note\"}),this.addCommand({checkCallback:t=>Mm(this,t),id:\"collect-attachments-current-folder\",name:\"Collect attachments in current folder\"}),this.addCommand({callback:()=>{$m(this)},id:\"collect-attachments-entire-vault\",name:\"Collect attachments in entire vault\"}),this.registerEvent(this.app.workspace.on(\"file-menu\",this.handleFileMenu.bind(this))),this.register(Hn(this.app,{saveAttachment:t=>(n,r,o)=>this.saveAttachment(t,n,r,o)}))}getAvailablePath(t,n){let r=0;for(;;){let o=An(r===0?t:`${t}${this.settings.duplicateNameSeparator}${r.toString()}`,n);if(!Cn(this.app,o,!0))return o;r++}}async getAvailablePathForAttachments(t,n,r,o){let s;if(!r||!Ke(this.app,r))s=await js(this.app,t,n,r,!0);else{let l=await Vo(this,r.path,An(t,n));s=this.app.vault.getAvailablePath(be(l,t),n)}if(!o){let l=ut(s);await this.app.vault.exists(l)||(await xo(this.app,l),this.settings.shouldKeepEmptyAttachmentFolders&&await this.app.vault.create(be(l,\".gitkeep\"),\"\"))}return s}getPathForFile(t,n){return t.path||n(t)}handleFileMenu(t,n){n instanceof tp.TFolder&&t.addItem(r=>{r.setTitle(\"Collect attachments in folder\").setIcon(\"download\").onClick(()=>Uo(this,n))})}async saveAttachment(t,n,r,o){let s=this.app.workspace.getActiveFile();if(!s||this.settings.isPathIgnored(s.path))return t.call(this.app,n,r,o);let l=!1,u=VC.exec(n);if(u){let h=u.groups?.Timestamp;if(h){let m=(0,Ul.default)(h,WC);m.isValid()&&(0,Ul.default)().diff(m,\"seconds\")<UC&&(l=!0)}}l&&r===\"png\"&&this.settings.shouldConvertPastedImagesToJpeg&&(r=\"jpg\",o=await Ru(new Blob([o],{type:\"image/png\"}),this.settings.jpegQuality));let f=!1;switch(this.settings.attachmentRenameMode){case\"All\":f=!0;break;case\"None\":break;case\"Only pasted images\":f=l;break;default:throw new Error(\"Invalid attachment rename mode\")}return f&&(n=await Wo(this,new Et(this.app,s.path,n))),await t.call(this.app,n,r,o)}};var HC=gs;\n/*! Bundled license information:\n\nmoment/moment.js:\n  (*! moment.js *)\n  (*! version : 2.30.1 *)\n  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)\n  (*! license : MIT *)\n  (*! momentjs.com *)\n*/\n\n/* nosourcemap */"
  },
  {
    "path": ".obsidian/plugins/obsidian-custom-attachment-location/lang/state.json",
    "content": "{\"type\":\"0\",\"state\":true,\"pluginVersion\":\"7.1.0\",\"translationVersion\":1741567288260}\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-custom-attachment-location/lang/zh-cn.json",
    "content": "{\n    \"manifest\": {\n        \"translationVersion\": 1741567288260,\n        \"pluginVersion\": \"7.0.2\"\n    },\n    \"description\": {\n        \"original\": \"Customize attachment location with variables($filename, $data, etc) like typora.\",\n        \"translation\": \"像 typora 一样使用变量($filename,$data,etc）自定义附件位置。\"\n    },\n    \"dict\": {\n        \".setName(\\\"JPEG Quality\\\")\": \".setName(\\\"JPEG 质量\\\")\",\n        \".setName(\\\"Duplicate name separator\\\")\": \".setName(\\\"重复名称分隔符\\\")\",\n        \".setDesc(\\\"Paste images from clipboard converting them to JPEG.\\\")\": \".setDesc(\\\"从剪贴板粘贴图像并将其转换为 JPEG。\\\")\",\n        \".setDesc(\\\"The smaller the quality, the greater the compression ratio.\\\")\": \".setDesc(\\\"质量越小，压缩比越大。\\\")\",\n        \".appendText(\\\" and all its subfolders?\\\")\": \".appendText(\\\"及其所有子文件夹？\\\")\",\n        \".appendText(\\\" Collect attachments in folder\\\")\": \".appendText(\\\"收集文件夹中的附件\\\")\",\n        \".appendText(\\\" Plugin to manage them.\\\")\": \".appendText(\\\"插件来管理它们。\\\")\",\n        \".appendText(\\\"If enabled, attachments processed via \\\")\": \".appendText(\\\"如果启用，通过 \\\")\",\n        \".appendText(\\\" commands will be renamed according to the \\\")\": \".appendText(\\\"命令处理的附件将根据 \\\")\",\n        \".setTitle(\\\"Collect attachments in folder\\\")\": \".setTitle(\\\"收集文件夹中的附件\\\")\",\n        \"Notice(t)\": \"Notice(t)\",\n        \"Notice(`${this.manifest.name}\\n${t}`)\": \"Notice(`${this.manifest.name}\\n${t}`)\",\n        \"Notice(`Attachment ${o.path} is still used by other notes. It will not be deleted.`)\": \"Notice(`附件 ${o.path} 仍被其他笔记使用，不会被删除。`)\",\n        \"Notice(\\\"\\\",0)\": \"Notice(\\\"\\\",0)\",\n        \"Notice(`Collecting attachments for ${t.path}`)\": \"Notice(`正在为 ${t.path} 收集附件`)\",\n        \"Notice(\\\"Note path is ignored\\\")\": \"Notice(\\\"笔记路径被忽略\\\")\",\n        \".error(`Module not found: ${id}. Fake process object is returned instead.`)\": \".error(`未找到模块：${id}。返回了伪造的进程对象。`)\",\n        \".error(`Module not found: ${id}. Empty object is returned instead.`)\": \".error(`未找到模块：${id}。返回了空对象。`)\",\n        \".error(\\\"SEMVER\\\",...e)\": \".error(\\\"SEMVER\\\",...e)\",\n        \".error(`\\\\x1B[0m${r.message}\\\\x1B[0m`)\": \".error(`\\\\x1B[0m${r.message}\\\\x1B[0m`)\",\n        \".error(r.message)\": \".error(r.message)\",\n        \".error(`Failed to decode URL ${h}`,p)\": \".error(`解码 URL ${h} 失败`,p)\",\n        \".error(`Invalid data type. Expected Object, got: ${n}`)\": \".error(`无效的数据类型。预期为对象，实际为：${n}`)\",\n        \"name:\\\"Anno Domini\\\"\": \"name:\\\"公元\\\"\",\n        \"name:\\\"Before Christ\\\"\": \"name:\\\"公元前\\\"\",\n        \"name:\\\"\\\"};if(t.length===0)return n;var r=t.charCodeAt(0),s=r===47,o;s?(n.root=\\\"\": \"name:\\\"\\\"};if(t.length===0)return n;var r=t.charCodeAt(0),s=r===47,o;s?(n.root=\\\"\",\n        \"name:\\\"attention\\\"\": \"name:\\\"注意\\\"\",\n        \"name:\\\"autolink\\\"\": \"name:\\\"自动链接\\\"\",\n        \"name:\\\"blockQuote\\\"\": \"name:\\\"块引用\\\"\",\n        \"name:\\\"characterEscape\\\"\": \"name:\\\"字符转义\\\"\",\n        \"name:\\\"characterReference\\\"\": \"name:\\\"字符引用\\\"\",\n        \"name:\\\"codeFenced\\\"\": \"name:\\\"围栏代码\\\"\",\n        \"name:\\\"codeIndented\\\"\": \"name:\\\"缩进代码\\\"\",\n        \"name:\\\"codeText\\\"\": \"name:\\\"代码文本\\\"\",\n        \"name:\\\"definition\\\"\": \"name:\\\"定义\\\"\",\n        \"name:\\\"hardBreakEscape\\\"\": \"name:\\\"硬换行转义\\\"\",\n        \"name:\\\"headingAtx\\\"\": \"name:\\\"ATX 标题\\\"\",\n        \"name:\\\"htmlFlow\\\"\": \"name:\\\"HTML 流\\\"\",\n        \"name:\\\"htmlText\\\"\": \"name:\\\"HTML 文本\\\"\",\n        \"name:\\\"labelEnd\\\"\": \"name:\\\"标签结束\\\"\",\n        \"name:\\\"labelStartImage\\\"\": \"name:\\\"图片标签开始\\\"\",\n        \"name:\\\"labelStartLink\\\"\": \"name:\\\"链接标签开始\\\"\",\n        \"name:\\\"lineEnding\\\"\": \"name:\\\"行尾\\\"\",\n        \"name:\\\"thematicBreak\\\"\": \"name:\\\"主题分隔线\\\"\",\n        \"name:\\\"list\\\"\": \"name:\\\"列表\\\"\",\n        \"name:\\\"setextUnderline\\\"\": \"name:\\\"Setext 下划线\\\"\",\n        \"name:\\\"Collect attachments in current note\\\"\": \"name:\\\"收集当前笔记中的附件\\\"\",\n        \"name:\\\"Collect attachments in current folder\\\"\": \"name:\\\"收集当前文件夹中的附件\\\"\",\n        \"name:\\\"Collect attachments in entire vault\\\"\": \"name:\\\"收集整个仓库中的附件\\\"\",\n        \"link:\\\"backlink\\\"\": \"link:\\\"反向链接\\\"\",\n        \"text:\\\"tokens\\\"\": \"text:\\\"令牌\\\"\",\n        \"text:\\\"Show Hidden Files\\\"\": \"text:\\\"显示隐藏文件\\\"\",\n        \"text:\\\"documentation\\\"\": \"text:\\\"文档\\\"\",\n        \".setName(\\\"Location for new attachments\\\")\": \".setName(\\\"新附件的位置\\\")\",\n        \".setName(\\\"Generated attachment filename\\\")\": \".setName(\\\"生成的附件文件名\\\")\",\n        \".setName(\\\"Attachment rename mode\\\")\": \".setName(\\\"附件重命名模式\\\")\",\n        \".setName(\\\"Should rename attachment folder\\\")\": \".setName(\\\"是否重命名附件文件夹\\\")\",\n        \".setName(\\\"Should rename attachment files\\\")\": \".setName(\\\"是否重命名附件文件\\\")\",\n        \".setName(\\\"Whitespace replacement\\\")\": \".setName(\\\"空格替换\\\")\",\n        \".setName(\\\"Should rename attachments to lowercase\\\")\": \".setName(\\\"是否将附件重命名为小写\\\")\",\n        \".setName(\\\"Should convert pasted images to JPEG\\\")\": \".setName(\\\"是否将粘贴的图像转换为 JPEG\\\")\",\n        \".setName(\\\"Should rename collected attachments\\\")\": \".setName(\\\"是否重命名已收集的附件\\\")\",\n        \".setName(\\\"Should keep empty attachment folders\\\")\": \".setName(\\\"是否保留空附件文件夹\\\")\",\n        \".setName(\\\"Should delete orphan attachments\\\")\": \".setName(\\\"是否删除孤立的附件\\\")\",\n        \".setName(\\\"Include paths\\\")\": \".setName(\\\"包含路径\\\")\",\n        \".setName(\\\"Exclude paths\\\")\": \".setName(\\\"排除路径\\\")\",\n        \".setName(\\\"Custom tokens\\\")\": \".setName(\\\"自定义令牌\\\")\",\n        \".setPlaceholder(\\\"./assets/${filename}\\\")\": \".setPlaceholder(\\\"./assets/${filename}\\\")\",\n        \".setPlaceholder(\\\"file-${date:YYYYMMDDHHmmssSSS}\\\")\": \".setPlaceholder(\\\"file-${date:YYYYMMDDHHmmssSSS}\\\")\",\n        \".setPlaceholder(\\\"-\\\")\": \".setPlaceholder(\\\"-\\\")\",\n        \".appendText(\\\" to use relative path.\\\")\": \".appendText(\\\"开头以使用相对路径。\\\")\",\n        \".appendText(\\\"See available \\\")\": \".appendText(\\\"查看可用的 \\\")\",\n        \".appendText(\\\".\\\")\": \".appendText(\\\"。\\\")\",\n        \".appendText(\\\"Automatically replace whitespace in attachment folder and file name with the specified character.\\\")\": \".appendText(\\\"自动将附件文件夹和文件名中的空格替换为指定字符。\\\")\",\n        \".appendText(\\\"Leave blank to disable replacement.\\\")\": \".appendText(\\\"留空以禁用替换。\\\")\",\n        \".appendText(\\\" setting.\\\")\": \".appendText(\\\"设置进行重命名。\\\")\",\n        \".appendText(\\\", \\\")\": \".appendText(\\\"，\\\")\",\n        \".appendText(\\\"Include notes from the following paths\\\")\": \".appendText(\\\"包含以下路径中的笔记\\\")\",\n        \".appendText(\\\"Insert each path on a new line\\\")\": \".appendText(\\\"每行插入一个路径\\\")\",\n        \".appendText(\\\"You can use path string or \\\")\": \".appendText(\\\"您可以使用路径字符串或 \\\")\",\n        \".appendText(\\\"If the setting is empty, all notes are included\\\")\": \".appendText(\\\"如果设置为空，则包含所有笔记\\\")\",\n        \".appendText(\\\"Exclude notes from the following paths\\\")\": \".appendText(\\\"排除以下路径中的笔记\\\")\",\n        \".appendText(\\\"If the setting is empty, no notes are excluded\\\")\": \".appendText(\\\"如果设置为空，则不排除任何笔记\\\")\",\n        \".appendText(\\\"Custom tokens to be used in the attachment folder path and pasted file name.\\\")\": \".appendText(\\\"自定义令牌，用于附件文件夹路径和粘贴的文件名。\\\")\",\n        \".appendText(\\\"See \\\")\": \".appendText(\\\"查看 \\\")\",\n        \".appendText(\\\" for more information.\\\")\": \".appendText(\\\"以获取更多信息。\\\")\",\n        \".appendText(\\\"In plugin version 7.0.0, the format for custom tokens has changed. Please update your custom tokens accordingly. Refer to the \\\")\": \".appendText(\\\"在插件版本 7.0.0 中，自定义令牌的格式已更改。请相应地更新您的自定义令牌。请参阅 \\\")\",\n        \"Notice(`Attachment ${file.path} is still used by other notes. It will not be deleted.`)\": \"Notice(`附件 ${file.path} 仍被其他笔记使用。它将不会被删除。`)\",\n        \"Notice(`Collecting attachments for ${note.path}`)\": \"Notice(`正在收集 ${note.path} 的附件`)\",\n        \"name: \\\"Anno Domini\\\"\": \"name: \\\"公元\\\"\",\n        \"name: \\\"Before Christ\\\"\": \"name: \\\"公元前\\\"\",\n        \"name: \\\"Collect attachments in current note\\\"\": \"name: \\\"收集当前笔记中的附件\\\"\",\n        \"name: \\\"Collect attachments in current folder\\\"\": \"name: \\\"收集当前文件夹中的附件\\\"\",\n        \"name: \\\"Collect attachments in entire vault\\\"\": \"name: \\\"收集整个保险库中的附件\\\"\",\n        \"link: \\\"backlink\\\"\": \"link: \\\"反向链接\\\"\",\n        \"text: \\\"Show Hidden Files\\\"\": \"text: \\\"显示隐藏文件\\\"\",\n        \".setName(\\\"Location for New Attachments\\\")\": \".setName(\\\"新附件的位置\\\")\",\n        \".setName(\\\"Pasted File Name\\\")\": \".setName(\\\"粘贴的文件名\\\")\",\n        \".setName(\\\"Automatically rename attachment folder\\\")\": \".setName(\\\"自动重命名附件文件夹\\\")\",\n        \".setName(\\\"Automatically rename attachment files\\\")\": \".setName(\\\"自动重命名附件文件\\\")\",\n        \".setName(\\\"Replace whitespace with hyphen\\\")\": \".setName(\\\"用连字符替换空格\\\")\",\n        \".setName(\\\"All lowercase names\\\")\": \".setName(\\\"全部小写名称\\\")\",\n        \".setName(\\\"Convert pasted images to JPEG\\\")\": \".setName(\\\"将粘贴的图像转换为 JPEG\\\")\",\n        \".setName(\\\"Convert images on drag&drop\\\")\": \".setName(\\\"拖放时转换图像\\\")\",\n        \".setName(\\\"Rename only images\\\")\": \".setName(\\\"仅重命名图像\\\")\",\n        \".setName(\\\"Rename pasted files with known names\\\")\": \".setName(\\\"重命名具有已知名称的粘贴文件\\\")\",\n        \".setName(\\\"Rename attachments on drag&drop\\\")\": \".setName(\\\"拖放时重命名附件\\\")\",\n        \".setName(\\\"Rename attachments on collecting\\\")\": \".setName(\\\"收集时重命名附件\\\")\",\n        \".setName(\\\"Keep empty attachment folders\\\")\": \".setName(\\\"保留空附件文件夹\\\")\",\n        \".setName(\\\"Delete orphan attachments\\\")\": \".setName(\\\"删除孤立附件\\\")\",\n        \".setDesc(\\\"Automatically replace whitespace in attachment folder and file name with hyphens.\\\")\": \".setDesc(\\\"自动将附件文件夹和文件名中的空格替换为连字符。\\\")\",\n        \".appendText(\\\" to use relative path. Available variables: \\\")\": \".appendText(\\\"开始使用相对路径。可用变量：\\\")\",\n        \".appendText(\\\"Available variables: \\\")\": \".appendText(\\\"可用变量：\\\")\",\n        \".appendText(\\\"If enabled and \\\")\": \".appendText(\\\"如果启用并且\\\")\",\n        \".appendText(\\\" setting is enabled, images drag&dropped into the editor will be converted to JPEG.\\\")\": \".appendText(\\\"设置已启用，拖放到编辑器中的图像将被转换为 JPEG 格式。\\\")\",\n        \".appendText(\\\"If enabled, only image files will be renamed.\\\")\": \".appendText(\\\"如果启用，仅图像文件将被重命名。\\\")\",\n        \".appendText(\\\"If disabled, all attachment files will be renamed.\\\")\": \".appendText(\\\"如果禁用，所有附件文件将被重命名。\\\")\",\n        \".appendText(\\\"If enabled, pasted copied files with known names will be renamed.\\\")\": \".appendText(\\\"如果启用，粘贴的复制文件如果有已知名称将被重命名。\\\")\",\n        \".appendText(\\\"If disabled, only clipboard image objects (e.g., screenshots) will be renamed.\\\")\": \".appendText(\\\"如果禁用，仅剪贴板图像对象（例如，屏幕截图）将被重命名。\\\")\",\n        \".appendText(\\\"If enabled, attachments dragged and dropped into the editor will be renamed according to the \\\")\": \".appendText(\\\"如果启用，拖放到编辑器中的附件将根据 \\\")\"\n    }\n}\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-custom-attachment-location/main.js",
    "content": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source, please visit the github repository of this plugin\n*/\n\n(function initCjs() {\n  const globalThisRecord = globalThis;\n  globalThisRecord[\"__name\"] ??= name;\n  const originalRequire = require;\n  if (originalRequire && !originalRequire.__isPatched) {\n    require = Object.assign(\n      (id) => requirePatched(id),\n      originalRequire,\n      {\n        __isPatched: true\n      }\n    );\n  }\n  const newFuncs = {\n    __extractDefault: () => extractDefault,\n    process: () => {\n      const browserProcess = {\n        browser: true,\n        cwd: () => \"/\",\n        env: {},\n        platform: \"android\"\n      };\n      return browserProcess;\n    }\n  };\n  for (const key of Object.keys(newFuncs)) {\n    globalThisRecord[key] ??= newFuncs[key]?.();\n  }\n  function name(obj) {\n    return obj;\n  }\n  function extractDefault(module2) {\n    return module2 && module2.__esModule && module2.default ? module2.default : module2;\n  }\n  function requirePatched(id) {\n    const module2 = originalRequire?.(id);\n    if (module2) {\n      return extractDefault(module2);\n    }\n    if (id === \"process\" || id === \"node:process\") {\n      console.error(`未找到模块：${id}。返回了伪造的进程对象。`);\n      return globalThis.process;\n    }\n    console.error(`未找到模块：${id}。返回了空对象。`);\n    return {};\n  }\n})();\n\n\"use strict\";var Mw=Object.create;var Pi=Object.defineProperty;var Nw=Object.getOwnPropertyDescriptor;var $w=Object.getOwnPropertyNames;var Yw=Object.getPrototypeOf,Bw=Object.prototype.hasOwnProperty;var B=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Iu=(e,t)=>{for(var n in t)Pi(e,n,{get:t[n],enumerable:!0})},Pu=(e,t,n,r)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let o of $w(t))!Bw.call(e,o)&&o!==n&&Pi(e,o,{get:()=>t[o],enumerable:!(r=Nw(t,o))||r.enumerable});return e};var Le=(e,t,n)=>(n=e!=null?Mw(Yw(e)):{},Pu(t||!e||!e.__esModule?Pi(n,\"default\",{value:e,enumerable:!0}):n,e)),zw=e=>Pu(Pi({},\"__esModule\",{value:!0}),e);var Wt=B((Bs,Un)=>{(function(e,t){typeof Bs==\"object\"&&typeof Un<\"u\"?Un.exports=t():typeof define==\"function\"&&define.amd?define(t):e.moment=t()})(Bs,function(){\"use strict\";var e;function t(){return e.apply(null,arguments)}function n(i){e=i}function r(i){return i instanceof Array||Object.prototype.toString.call(i)===\"[object Array]\"}function o(i){return i!=null&&Object.prototype.toString.call(i)===\"[object Object]\"}function s(i,a){return Object.prototype.hasOwnProperty.call(i,a)}function l(i){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(i).length===0;var a;for(a in i)if(s(i,a))return!1;return!0}function u(i){return i===void 0}function f(i){return typeof i==\"number\"||Object.prototype.toString.call(i)===\"[object Number]\"}function h(i){return i instanceof Date||Object.prototype.toString.call(i)===\"[object Date]\"}function m(i,a){var c=[],d,y=i.length;for(d=0;d<y;++d)c.push(a(i[d],d));return c}function p(i,a){for(var c in a)s(a,c)&&(i[c]=a[c]);return s(a,\"toString\")&&(i.toString=a.toString),s(a,\"valueOf\")&&(i.valueOf=a.valueOf),i}function g(i,a,c,d){return au(i,a,c,d,!0).utc()}function w(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function E(i){return i._pf==null&&(i._pf=w()),i._pf}var F;Array.prototype.some?F=Array.prototype.some:F=function(i){var a=Object(this),c=a.length>>>0,d;for(d=0;d<c;d++)if(d in a&&i.call(this,a[d],d,a))return!0;return!1};function T(i){var a=null,c=!1,d=i._d&&!isNaN(i._d.getTime());if(d&&(a=E(i),c=F.call(a.parsedDateParts,function(y){return y!=null}),d=a.overflow<0&&!a.empty&&!a.invalidEra&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&c),i._strict&&(d=d&&a.charsLeftOver===0&&a.unusedTokens.length===0&&a.bigHour===void 0)),Object.isFrozen==null||!Object.isFrozen(i))i._isValid=d;else return d;return i._isValid}function A(i){var a=g(NaN);return i!=null?p(E(a),i):E(a).userInvalidated=!0,a}var _=t.momentProperties=[],I=!1;function z(i,a){var c,d,y,b=_.length;if(u(a._isAMomentObject)||(i._isAMomentObject=a._isAMomentObject),u(a._i)||(i._i=a._i),u(a._f)||(i._f=a._f),u(a._l)||(i._l=a._l),u(a._strict)||(i._strict=a._strict),u(a._tzm)||(i._tzm=a._tzm),u(a._isUTC)||(i._isUTC=a._isUTC),u(a._offset)||(i._offset=a._offset),u(a._pf)||(i._pf=E(a)),u(a._locale)||(i._locale=a._locale),b>0)for(c=0;c<b;c++)d=_[c],y=a[d],u(y)||(i[d]=y);return i}function H(i){z(this,i),this._d=new Date(i._d!=null?i._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),I===!1&&(I=!0,t.updateOffset(this),I=!1)}function v(i){return i instanceof H||i!=null&&i._isAMomentObject!=null}function te(i){t.suppressDeprecationWarnings===!1&&typeof console<\"u\"&&console.warn&&console.warn(\"Deprecation warning: \"+i)}function J(i,a){var c=!0;return p(function(){if(t.deprecationHandler!=null&&t.deprecationHandler(null,i),c){var d=[],y,b,C,L=arguments.length;for(b=0;b<L;b++){if(y=\"\",typeof arguments[b]==\"object\"){y+=`\n[`+b+\"] \";for(C in arguments[0])s(arguments[0],C)&&(y+=C+\": \"+arguments[0][C]+\", \");y=y.slice(0,-2)}else y=arguments[b];d.push(y)}te(i+`\nArguments: `+Array.prototype.slice.call(d).join(\"\")+`\n`+new Error().stack),c=!1}return a.apply(this,arguments)},a)}var Z={};function se(i,a){t.deprecationHandler!=null&&t.deprecationHandler(i,a),Z[i]||(te(a),Z[i]=!0)}t.suppressDeprecationWarnings=!1,t.deprecationHandler=null;function ue(i){return typeof Function<\"u\"&&i instanceof Function||Object.prototype.toString.call(i)===\"[object Function]\"}function re(i){var a,c;for(c in i)s(i,c)&&(a=i[c],ue(a)?this[c]=a:this[\"_\"+c]=a);this._config=i,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)}function Y(i,a){var c=p({},i),d;for(d in a)s(a,d)&&(o(i[d])&&o(a[d])?(c[d]={},p(c[d],i[d]),p(c[d],a[d])):a[d]!=null?c[d]=a[d]:delete c[d]);for(d in i)s(i,d)&&!s(a,d)&&o(i[d])&&(c[d]=p({},c[d]));return c}function j(i){i!=null&&this.set(i)}var V;Object.keys?V=Object.keys:V=function(i){var a,c=[];for(a in i)s(i,a)&&c.push(a);return c};var ie={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"};function he(i,a,c){var d=this._calendar[i]||this._calendar.sameElse;return ue(d)?d.call(a,c):d}function me(i,a,c){var d=\"\"+Math.abs(i),y=a-d.length,b=i>=0;return(b?c?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,y)).toString().substr(1)+d}var Xe=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,x=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ie={},Pe={};function k(i,a,c,d){var y=d;typeof d==\"string\"&&(y=function(){return this[d]()}),i&&(Pe[i]=y),a&&(Pe[a[0]]=function(){return me(y.apply(this,arguments),a[1],a[2])}),c&&(Pe[c]=function(){return this.localeData().ordinal(y.apply(this,arguments),i)})}function Ye(i){return i.match(/\\[[\\s\\S]/)?i.replace(/^\\[|\\]$/g,\"\"):i.replace(/\\\\/g,\"\")}function Rt(i){var a=i.match(Xe),c,d;for(c=0,d=a.length;c<d;c++)Pe[a[c]]?a[c]=Pe[a[c]]:a[c]=Ye(a[c]);return function(y){var b=\"\",C;for(C=0;C<d;C++)b+=ue(a[C])?a[C].call(y,i):a[C];return b}}function Kt(i,a){return i.isValid()?(a=gn(a,i.localeData()),Ie[a]=Ie[a]||Rt(a),Ie[a](i)):i.localeData().invalidDate()}function gn(i,a){var c=5;function d(y){return a.longDateFormat(y)||y}for(x.lastIndex=0;c>=0&&x.test(i);)i=i.replace(x,d),x.lastIndex=0,c-=1;return i}var Ee={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};function wn(i){var a=this._longDateFormat[i],c=this._longDateFormat[i.toUpperCase()];return a||!c?a:(this._longDateFormat[i]=c.match(Xe).map(function(d){return d===\"MMMM\"||d===\"MM\"||d===\"DD\"||d===\"dddd\"?d.slice(1):d}).join(\"\"),this._longDateFormat[i])}var gt=\"Invalid date\";function Ot(){return this._invalidDate}var Qt=\"%d\",xr=/\\d{1,2}/;function ws(i){return this._ordinal.replace(\"%d\",i)}var di={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function hi(i,a,c,d){var y=this._relativeTime[c];return ue(y)?y(i,a,c,d):y.replace(/%d/i,i)}function mi(i,a){var c=this._relativeTime[i>0?\"future\":\"past\"];return ue(c)?c(a):c.replace(/%s/i,a)}var pi={D:\"date\",dates:\"date\",date:\"date\",d:\"day\",days:\"day\",day:\"day\",e:\"weekday\",weekdays:\"weekday\",weekday:\"weekday\",E:\"isoWeekday\",isoweekdays:\"isoWeekday\",isoweekday:\"isoWeekday\",DDD:\"dayOfYear\",dayofyears:\"dayOfYear\",dayofyear:\"dayOfYear\",h:\"hour\",hours:\"hour\",hour:\"hour\",ms:\"millisecond\",milliseconds:\"millisecond\",millisecond:\"millisecond\",m:\"minute\",minutes:\"minute\",minute:\"minute\",M:\"month\",months:\"month\",month:\"month\",Q:\"quarter\",quarters:\"quarter\",quarter:\"quarter\",s:\"second\",seconds:\"second\",second:\"second\",gg:\"weekYear\",weekyears:\"weekYear\",weekyear:\"weekYear\",GG:\"isoWeekYear\",isoweekyears:\"isoWeekYear\",isoweekyear:\"isoWeekYear\",w:\"week\",weeks:\"week\",week:\"week\",W:\"isoWeek\",isoweeks:\"isoWeek\",isoweek:\"isoWeek\",y:\"year\",years:\"year\",year:\"year\"};function Be(i){return typeof i==\"string\"?pi[i]||pi[i.toLowerCase()]:void 0}function Mn(i){var a={},c,d;for(d in i)s(i,d)&&(c=Be(d),c&&(a[c]=i[d]));return a}var ys={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function ks(i){var a=[],c;for(c in i)s(i,c)&&a.push({unit:c,priority:ys[c]});return a.sort(function(d,y){return d.priority-y.priority}),a}var gi=/\\d/,ze=/\\d\\d/,wi=/\\d{3}/,S=/\\d{4}/,R=/[+-]?\\d{6}/,O=/\\d\\d?/,K=/\\d\\d\\d\\d?/,ae=/\\d\\d\\d\\d\\d\\d?/,Re=/\\d{1,3}/,wt=/\\d{1,4}/,Je=/[+-]?\\d{1,6}/,at=/\\d+/,At=/[+-]?\\d+/,Ve=/Z|[+-]\\d\\d:?\\d\\d/gi,yt=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,kt=/[+-]?\\d+(\\.\\d{1,3})?/,Er=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,Nn=/^[1-9]\\d?/,bs=/^([1-9]\\d|\\d)/,yi;yi={};function N(i,a,c){yi[i]=ue(a)?a:function(d,y){return d&&c?c:a}}function rp(i,a){return s(yi,i)?yi[i](a._strict,a._locale):new RegExp(ip(i))}function ip(i){return Lt(i.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(a,c,d,y,b){return c||d||y||b}))}function Lt(i){return i.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function lt(i){return i<0?Math.ceil(i)||0:Math.floor(i)}function Q(i){var a=+i,c=0;return a!==0&&isFinite(a)&&(c=lt(a)),c}var xs={};function le(i,a){var c,d=a,y;for(typeof i==\"string\"&&(i=[i]),f(a)&&(d=function(b,C){C[a]=Q(b)}),y=i.length,c=0;c<y;c++)xs[i[c]]=d}function Ar(i,a){le(i,function(c,d,y,b){y._w=y._w||{},a(c,y._w,y,b)})}function op(i,a,c){a!=null&&s(xs,i)&&xs[i](a,c._a,c,i)}function ki(i){return i%4===0&&i%100!==0||i%400===0}var Oe=0,Dt=1,Ct=2,Ae=3,bt=4,Mt=5,yn=6,sp=7,ap=8;k(\"Y\",0,0,function(){var i=this.year();return i<=9999?me(i,4):\"+\"+i}),k(0,[\"YY\",2],0,function(){return this.year()%100}),k(0,[\"YYYY\",4],0,\"year\"),k(0,[\"YYYYY\",5],0,\"year\"),k(0,[\"YYYYYY\",6,!0],0,\"year\"),N(\"Y\",At),N(\"YY\",O,ze),N(\"YYYY\",wt,S),N(\"YYYYY\",Je,R),N(\"YYYYYY\",Je,R),le([\"YYYYY\",\"YYYYYY\"],Oe),le(\"YYYY\",function(i,a){a[Oe]=i.length===2?t.parseTwoDigitYear(i):Q(i)}),le(\"YY\",function(i,a){a[Oe]=t.parseTwoDigitYear(i)}),le(\"Y\",function(i,a){a[Oe]=parseInt(i,10)});function Cr(i){return ki(i)?366:365}t.parseTwoDigitYear=function(i){return Q(i)+(Q(i)>68?1900:2e3)};var Hl=$n(\"FullYear\",!0);function lp(){return ki(this.year())}function $n(i,a){return function(c){return c!=null?(jl(this,i,c),t.updateOffset(this,a),this):vr(this,i)}}function vr(i,a){if(!i.isValid())return NaN;var c=i._d,d=i._isUTC;switch(a){case\"Milliseconds\":return d?c.getUTCMilliseconds():c.getMilliseconds();case\"Seconds\":return d?c.getUTCSeconds():c.getSeconds();case\"Minutes\":return d?c.getUTCMinutes():c.getMinutes();case\"Hours\":return d?c.getUTCHours():c.getHours();case\"Date\":return d?c.getUTCDate():c.getDate();case\"Day\":return d?c.getUTCDay():c.getDay();case\"Month\":return d?c.getUTCMonth():c.getMonth();case\"FullYear\":return d?c.getUTCFullYear():c.getFullYear();default:return NaN}}function jl(i,a,c){var d,y,b,C,L;if(!(!i.isValid()||isNaN(c))){switch(d=i._d,y=i._isUTC,a){case\"Milliseconds\":return void(y?d.setUTCMilliseconds(c):d.setMilliseconds(c));case\"Seconds\":return void(y?d.setUTCSeconds(c):d.setSeconds(c));case\"Minutes\":return void(y?d.setUTCMinutes(c):d.setMinutes(c));case\"Hours\":return void(y?d.setUTCHours(c):d.setHours(c));case\"Date\":return void(y?d.setUTCDate(c):d.setDate(c));case\"FullYear\":break;default:return}b=c,C=i.month(),L=i.date(),L=L===29&&C===1&&!ki(b)?28:L,y?d.setUTCFullYear(b,C,L):d.setFullYear(b,C,L)}}function up(i){return i=Be(i),ue(this[i])?this[i]():this}function cp(i,a){if(typeof i==\"object\"){i=Mn(i);var c=ks(i),d,y=c.length;for(d=0;d<y;d++)this[c[d].unit](i[c[d].unit])}else if(i=Be(i),ue(this[i]))return this[i](a);return this}function fp(i,a){return(i%a+a)%a}var ge;Array.prototype.indexOf?ge=Array.prototype.indexOf:ge=function(i){var a;for(a=0;a<this.length;++a)if(this[a]===i)return a;return-1};function Es(i,a){if(isNaN(i)||isNaN(a))return NaN;var c=fp(a,12);return i+=(a-c)/12,c===1?ki(i)?29:28:31-c%7%2}k(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),k(\"MMM\",0,0,function(i){return this.localeData().monthsShort(this,i)}),k(\"MMMM\",0,0,function(i){return this.localeData().months(this,i)}),N(\"M\",O,Nn),N(\"MM\",O,ze),N(\"MMM\",function(i,a){return a.monthsShortRegex(i)}),N(\"MMMM\",function(i,a){return a.monthsRegex(i)}),le([\"M\",\"MM\"],function(i,a){a[Dt]=Q(i)-1}),le([\"MMM\",\"MMMM\"],function(i,a,c,d){var y=c._locale.monthsParse(i,d,c._strict);y!=null?a[Dt]=y:E(c).invalidMonth=i});var dp=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ql=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),Gl=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,hp=Er,mp=Er;function pp(i,a){return i?r(this._months)?this._months[i.month()]:this._months[(this._months.isFormat||Gl).test(a)?\"format\":\"standalone\"][i.month()]:r(this._months)?this._months:this._months.standalone}function gp(i,a){return i?r(this._monthsShort)?this._monthsShort[i.month()]:this._monthsShort[Gl.test(a)?\"format\":\"standalone\"][i.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function wp(i,a,c){var d,y,b,C=i.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)b=g([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(b,\"\").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(b,\"\").toLocaleLowerCase();return c?a===\"MMM\"?(y=ge.call(this._shortMonthsParse,C),y!==-1?y:null):(y=ge.call(this._longMonthsParse,C),y!==-1?y:null):a===\"MMM\"?(y=ge.call(this._shortMonthsParse,C),y!==-1?y:(y=ge.call(this._longMonthsParse,C),y!==-1?y:null)):(y=ge.call(this._longMonthsParse,C),y!==-1?y:(y=ge.call(this._shortMonthsParse,C),y!==-1?y:null))}function yp(i,a,c){var d,y,b;if(this._monthsParseExact)return wp.call(this,i,a,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){if(y=g([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp(\"^\"+this.months(y,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[d]=new RegExp(\"^\"+this.monthsShort(y,\"\").replace(\".\",\"\")+\"$\",\"i\")),!c&&!this._monthsParse[d]&&(b=\"^\"+this.months(y,\"\")+\"|^\"+this.monthsShort(y,\"\"),this._monthsParse[d]=new RegExp(b.replace(\".\",\"\"),\"i\")),c&&a===\"MMMM\"&&this._longMonthsParse[d].test(i))return d;if(c&&a===\"MMM\"&&this._shortMonthsParse[d].test(i))return d;if(!c&&this._monthsParse[d].test(i))return d}}function Xl(i,a){if(!i.isValid())return i;if(typeof a==\"string\"){if(/^\\d+$/.test(a))a=Q(a);else if(a=i.localeData().monthsParse(a),!f(a))return i}var c=a,d=i.date();return d=d<29?d:Math.min(d,Es(i.year(),c)),i._isUTC?i._d.setUTCMonth(c,d):i._d.setMonth(c,d),i}function Jl(i){return i!=null?(Xl(this,i),t.updateOffset(this,!0),this):vr(this,\"Month\")}function kp(){return Es(this.year(),this.month())}function bp(i){return this._monthsParseExact?(s(this,\"_monthsRegex\")||Zl.call(this),i?this._monthsShortStrictRegex:this._monthsShortRegex):(s(this,\"_monthsShortRegex\")||(this._monthsShortRegex=hp),this._monthsShortStrictRegex&&i?this._monthsShortStrictRegex:this._monthsShortRegex)}function xp(i){return this._monthsParseExact?(s(this,\"_monthsRegex\")||Zl.call(this),i?this._monthsStrictRegex:this._monthsRegex):(s(this,\"_monthsRegex\")||(this._monthsRegex=mp),this._monthsStrictRegex&&i?this._monthsStrictRegex:this._monthsRegex)}function Zl(){function i(U,ee){return ee.length-U.length}var a=[],c=[],d=[],y,b,C,L;for(y=0;y<12;y++)b=g([2e3,y]),C=Lt(this.monthsShort(b,\"\")),L=Lt(this.months(b,\"\")),a.push(C),c.push(L),d.push(L),d.push(C);a.sort(i),c.sort(i),d.sort(i),this._monthsRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\")}function Ep(i,a,c,d,y,b,C){var L;return i<100&&i>=0?(L=new Date(i+400,a,c,d,y,b,C),isFinite(L.getFullYear())&&L.setFullYear(i)):L=new Date(i,a,c,d,y,b,C),L}function Sr(i){var a,c;return i<100&&i>=0?(c=Array.prototype.slice.call(arguments),c[0]=i+400,a=new Date(Date.UTC.apply(null,c)),isFinite(a.getUTCFullYear())&&a.setUTCFullYear(i)):a=new Date(Date.UTC.apply(null,arguments)),a}function bi(i,a,c){var d=7+a-c,y=(7+Sr(i,0,d).getUTCDay()-a)%7;return-y+d-1}function Kl(i,a,c,d,y){var b=(7+c-d)%7,C=bi(i,d,y),L=1+7*(a-1)+b+C,U,ee;return L<=0?(U=i-1,ee=Cr(U)+L):L>Cr(i)?(U=i+1,ee=L-Cr(i)):(U=i,ee=L),{year:U,dayOfYear:ee}}function Tr(i,a,c){var d=bi(i.year(),a,c),y=Math.floor((i.dayOfYear()-d-1)/7)+1,b,C;return y<1?(C=i.year()-1,b=y+Nt(C,a,c)):y>Nt(i.year(),a,c)?(b=y-Nt(i.year(),a,c),C=i.year()+1):(C=i.year(),b=y),{week:b,year:C}}function Nt(i,a,c){var d=bi(i,a,c),y=bi(i+1,a,c);return(Cr(i)-d+y)/7}k(\"w\",[\"ww\",2],\"wo\",\"week\"),k(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),N(\"w\",O,Nn),N(\"ww\",O,ze),N(\"W\",O,Nn),N(\"WW\",O,ze),Ar([\"w\",\"ww\",\"W\",\"WW\"],function(i,a,c,d){a[d.substr(0,1)]=Q(i)});function Ap(i){return Tr(i,this._week.dow,this._week.doy).week}var Cp={dow:0,doy:6};function vp(){return this._week.dow}function Sp(){return this._week.doy}function Tp(i){var a=this.localeData().week(this);return i==null?a:this.add((i-a)*7,\"d\")}function _p(i){var a=Tr(this,1,4).week;return i==null?a:this.add((i-a)*7,\"d\")}k(\"d\",0,\"do\",\"day\"),k(\"dd\",0,0,function(i){return this.localeData().weekdaysMin(this,i)}),k(\"ddd\",0,0,function(i){return this.localeData().weekdaysShort(this,i)}),k(\"dddd\",0,0,function(i){return this.localeData().weekdays(this,i)}),k(\"e\",0,0,\"weekday\"),k(\"E\",0,0,\"isoWeekday\"),N(\"d\",O),N(\"e\",O),N(\"E\",O),N(\"dd\",function(i,a){return a.weekdaysMinRegex(i)}),N(\"ddd\",function(i,a){return a.weekdaysShortRegex(i)}),N(\"dddd\",function(i,a){return a.weekdaysRegex(i)}),Ar([\"dd\",\"ddd\",\"dddd\"],function(i,a,c,d){var y=c._locale.weekdaysParse(i,d,c._strict);y!=null?a.d=y:E(c).invalidWeekday=i}),Ar([\"d\",\"e\",\"E\"],function(i,a,c,d){a[d]=Q(i)});function Fp(i,a){return typeof i!=\"string\"?i:isNaN(i)?(i=a.weekdaysParse(i),typeof i==\"number\"?i:null):parseInt(i,10)}function Ip(i,a){return typeof i==\"string\"?a.weekdaysParse(i)%7||7:isNaN(i)?null:i}function As(i,a){return i.slice(a,7).concat(i.slice(0,a))}var Pp=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Ql=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Rp=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),Op=Er,Lp=Er,Dp=Er;function Mp(i,a){var c=r(this._weekdays)?this._weekdays:this._weekdays[i&&i!==!0&&this._weekdays.isFormat.test(a)?\"format\":\"standalone\"];return i===!0?As(c,this._week.dow):i?c[i.day()]:c}function Np(i){return i===!0?As(this._weekdaysShort,this._week.dow):i?this._weekdaysShort[i.day()]:this._weekdaysShort}function $p(i){return i===!0?As(this._weekdaysMin,this._week.dow):i?this._weekdaysMin[i.day()]:this._weekdaysMin}function Yp(i,a,c){var d,y,b,C=i.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)b=g([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(b,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(b,\"\").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(b,\"\").toLocaleLowerCase();return c?a===\"dddd\"?(y=ge.call(this._weekdaysParse,C),y!==-1?y:null):a===\"ddd\"?(y=ge.call(this._shortWeekdaysParse,C),y!==-1?y:null):(y=ge.call(this._minWeekdaysParse,C),y!==-1?y:null):a===\"dddd\"?(y=ge.call(this._weekdaysParse,C),y!==-1||(y=ge.call(this._shortWeekdaysParse,C),y!==-1)?y:(y=ge.call(this._minWeekdaysParse,C),y!==-1?y:null)):a===\"ddd\"?(y=ge.call(this._shortWeekdaysParse,C),y!==-1||(y=ge.call(this._weekdaysParse,C),y!==-1)?y:(y=ge.call(this._minWeekdaysParse,C),y!==-1?y:null)):(y=ge.call(this._minWeekdaysParse,C),y!==-1||(y=ge.call(this._weekdaysParse,C),y!==-1)?y:(y=ge.call(this._shortWeekdaysParse,C),y!==-1?y:null))}function Bp(i,a,c){var d,y,b;if(this._weekdaysParseExact)return Yp.call(this,i,a,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){if(y=g([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp(\"^\"+this.weekdays(y,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[d]=new RegExp(\"^\"+this.weekdaysShort(y,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[d]=new RegExp(\"^\"+this.weekdaysMin(y,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[d]||(b=\"^\"+this.weekdays(y,\"\")+\"|^\"+this.weekdaysShort(y,\"\")+\"|^\"+this.weekdaysMin(y,\"\"),this._weekdaysParse[d]=new RegExp(b.replace(\".\",\"\"),\"i\")),c&&a===\"dddd\"&&this._fullWeekdaysParse[d].test(i))return d;if(c&&a===\"ddd\"&&this._shortWeekdaysParse[d].test(i))return d;if(c&&a===\"dd\"&&this._minWeekdaysParse[d].test(i))return d;if(!c&&this._weekdaysParse[d].test(i))return d}}function zp(i){if(!this.isValid())return i!=null?this:NaN;var a=vr(this,\"Day\");return i!=null?(i=Fp(i,this.localeData()),this.add(i-a,\"d\")):a}function Vp(i){if(!this.isValid())return i!=null?this:NaN;var a=(this.day()+7-this.localeData()._week.dow)%7;return i==null?a:this.add(i-a,\"d\")}function Wp(i){if(!this.isValid())return i!=null?this:NaN;if(i!=null){var a=Ip(i,this.localeData());return this.day(this.day()%7?a:a-7)}else return this.day()||7}function Up(i){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Cs.call(this),i?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,\"_weekdaysRegex\")||(this._weekdaysRegex=Op),this._weekdaysStrictRegex&&i?this._weekdaysStrictRegex:this._weekdaysRegex)}function Hp(i){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Cs.call(this),i?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=Lp),this._weekdaysShortStrictRegex&&i?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function jp(i){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Cs.call(this),i?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=Dp),this._weekdaysMinStrictRegex&&i?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Cs(){function i(We,Vt){return Vt.length-We.length}var a=[],c=[],d=[],y=[],b,C,L,U,ee;for(b=0;b<7;b++)C=g([2e3,1]).day(b),L=Lt(this.weekdaysMin(C,\"\")),U=Lt(this.weekdaysShort(C,\"\")),ee=Lt(this.weekdays(C,\"\")),a.push(L),c.push(U),d.push(ee),y.push(L),y.push(U),y.push(ee);a.sort(i),c.sort(i),d.sort(i),y.sort(i),this._weekdaysRegex=new RegExp(\"^(\"+y.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\")}function vs(){return this.hours()%12||12}function qp(){return this.hours()||24}k(\"H\",[\"HH\",2],0,\"hour\"),k(\"h\",[\"hh\",2],0,vs),k(\"k\",[\"kk\",2],0,qp),k(\"hmm\",0,0,function(){return\"\"+vs.apply(this)+me(this.minutes(),2)}),k(\"hmmss\",0,0,function(){return\"\"+vs.apply(this)+me(this.minutes(),2)+me(this.seconds(),2)}),k(\"Hmm\",0,0,function(){return\"\"+this.hours()+me(this.minutes(),2)}),k(\"Hmmss\",0,0,function(){return\"\"+this.hours()+me(this.minutes(),2)+me(this.seconds(),2)});function eu(i,a){k(i,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}eu(\"a\",!0),eu(\"A\",!1);function tu(i,a){return a._meridiemParse}N(\"a\",tu),N(\"A\",tu),N(\"H\",O,bs),N(\"h\",O,Nn),N(\"k\",O,Nn),N(\"HH\",O,ze),N(\"hh\",O,ze),N(\"kk\",O,ze),N(\"hmm\",K),N(\"hmmss\",ae),N(\"Hmm\",K),N(\"Hmmss\",ae),le([\"H\",\"HH\"],Ae),le([\"k\",\"kk\"],function(i,a,c){var d=Q(i);a[Ae]=d===24?0:d}),le([\"a\",\"A\"],function(i,a,c){c._isPm=c._locale.isPM(i),c._meridiem=i}),le([\"h\",\"hh\"],function(i,a,c){a[Ae]=Q(i),E(c).bigHour=!0}),le(\"hmm\",function(i,a,c){var d=i.length-2;a[Ae]=Q(i.substr(0,d)),a[bt]=Q(i.substr(d)),E(c).bigHour=!0}),le(\"hmmss\",function(i,a,c){var d=i.length-4,y=i.length-2;a[Ae]=Q(i.substr(0,d)),a[bt]=Q(i.substr(d,2)),a[Mt]=Q(i.substr(y)),E(c).bigHour=!0}),le(\"Hmm\",function(i,a,c){var d=i.length-2;a[Ae]=Q(i.substr(0,d)),a[bt]=Q(i.substr(d))}),le(\"Hmmss\",function(i,a,c){var d=i.length-4,y=i.length-2;a[Ae]=Q(i.substr(0,d)),a[bt]=Q(i.substr(d,2)),a[Mt]=Q(i.substr(y))});function Gp(i){return(i+\"\").toLowerCase().charAt(0)===\"p\"}var Xp=/[ap]\\.?m?\\.?/i,Jp=$n(\"Hours\",!0);function Zp(i,a,c){return i>11?c?\"pm\":\"PM\":c?\"am\":\"AM\"}var nu={calendar:ie,longDateFormat:Ee,invalidDate:gt,ordinal:Qt,dayOfMonthOrdinalParse:xr,relativeTime:di,months:dp,monthsShort:ql,week:Cp,weekdays:Pp,weekdaysMin:Rp,weekdaysShort:Ql,meridiemParse:Xp},de={},_r={},Fr;function Kp(i,a){var c,d=Math.min(i.length,a.length);for(c=0;c<d;c+=1)if(i[c]!==a[c])return c;return d}function ru(i){return i&&i.toLowerCase().replace(\"_\",\"-\")}function Qp(i){for(var a=0,c,d,y,b;a<i.length;){for(b=ru(i[a]).split(\"-\"),c=b.length,d=ru(i[a+1]),d=d?d.split(\"-\"):null;c>0;){if(y=xi(b.slice(0,c).join(\"-\")),y)return y;if(d&&d.length>=c&&Kp(b,d)>=c-1)break;c--}a++}return Fr}function eg(i){return!!(i&&i.match(\"^[^/\\\\\\\\]*$\"))}function xi(i){var a=null,c;if(de[i]===void 0&&typeof Un<\"u\"&&Un&&Un.exports&&eg(i))try{a=Fr._abbr,c=require,c(\"./locale/\"+i),en(a)}catch{de[i]=null}return de[i]}function en(i,a){var c;return i&&(u(a)?c=$t(i):c=Ss(i,a),c?Fr=c:typeof console<\"u\"&&console.warn&&console.warn(\"Locale \"+i+\" not found. Did you forget to load it?\")),Fr._abbr}function Ss(i,a){if(a!==null){var c,d=nu;if(a.abbr=i,de[i]!=null)se(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),d=de[i]._config;else if(a.parentLocale!=null)if(de[a.parentLocale]!=null)d=de[a.parentLocale]._config;else if(c=xi(a.parentLocale),c!=null)d=c._config;else return _r[a.parentLocale]||(_r[a.parentLocale]=[]),_r[a.parentLocale].push({name:i,config:a}),null;return de[i]=new j(Y(d,a)),_r[i]&&_r[i].forEach(function(y){Ss(y.name,y.config)}),en(i),de[i]}else return delete de[i],null}function tg(i,a){if(a!=null){var c,d,y=nu;de[i]!=null&&de[i].parentLocale!=null?de[i].set(Y(de[i]._config,a)):(d=xi(i),d!=null&&(y=d._config),a=Y(y,a),d==null&&(a.abbr=i),c=new j(a),c.parentLocale=de[i],de[i]=c),en(i)}else de[i]!=null&&(de[i].parentLocale!=null?(de[i]=de[i].parentLocale,i===en()&&en(i)):de[i]!=null&&delete de[i]);return de[i]}function $t(i){var a;if(i&&i._locale&&i._locale._abbr&&(i=i._locale._abbr),!i)return Fr;if(!r(i)){if(a=xi(i),a)return a;i=[i]}return Qp(i)}function ng(){return V(de)}function Ts(i){var a,c=i._a;return c&&E(i).overflow===-2&&(a=c[Dt]<0||c[Dt]>11?Dt:c[Ct]<1||c[Ct]>Es(c[Oe],c[Dt])?Ct:c[Ae]<0||c[Ae]>24||c[Ae]===24&&(c[bt]!==0||c[Mt]!==0||c[yn]!==0)?Ae:c[bt]<0||c[bt]>59?bt:c[Mt]<0||c[Mt]>59?Mt:c[yn]<0||c[yn]>999?yn:-1,E(i)._overflowDayOfYear&&(a<Oe||a>Ct)&&(a=Ct),E(i)._overflowWeeks&&a===-1&&(a=sp),E(i)._overflowWeekday&&a===-1&&(a=ap),E(i).overflow=a),i}var rg=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,ig=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,og=/Z|[+-]\\d\\d(?::?\\d\\d)?/,Ei=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],_s=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],sg=/^\\/?Date\\((-?\\d+)/i,ag=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,lg={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function iu(i){var a,c,d=i._i,y=rg.exec(d)||ig.exec(d),b,C,L,U,ee=Ei.length,We=_s.length;if(y){for(E(i).iso=!0,a=0,c=ee;a<c;a++)if(Ei[a][1].exec(y[1])){C=Ei[a][0],b=Ei[a][2]!==!1;break}if(C==null){i._isValid=!1;return}if(y[3]){for(a=0,c=We;a<c;a++)if(_s[a][1].exec(y[3])){L=(y[2]||\" \")+_s[a][0];break}if(L==null){i._isValid=!1;return}}if(!b&&L!=null){i._isValid=!1;return}if(y[4])if(og.exec(y[4]))U=\"Z\";else{i._isValid=!1;return}i._f=C+(L||\"\")+(U||\"\"),Is(i)}else i._isValid=!1}function ug(i,a,c,d,y,b){var C=[cg(i),ql.indexOf(a),parseInt(c,10),parseInt(d,10),parseInt(y,10)];return b&&C.push(parseInt(b,10)),C}function cg(i){var a=parseInt(i,10);return a<=49?2e3+a:a<=999?1900+a:a}function fg(i){return i.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function dg(i,a,c){if(i){var d=Ql.indexOf(i),y=new Date(a[0],a[1],a[2]).getDay();if(d!==y)return E(c).weekdayMismatch=!0,c._isValid=!1,!1}return!0}function hg(i,a,c){if(i)return lg[i];if(a)return 0;var d=parseInt(c,10),y=d%100,b=(d-y)/100;return b*60+y}function ou(i){var a=ag.exec(fg(i._i)),c;if(a){if(c=ug(a[4],a[3],a[2],a[5],a[6],a[7]),!dg(a[1],c,i))return;i._a=c,i._tzm=hg(a[8],a[9],a[10]),i._d=Sr.apply(null,i._a),i._d.setUTCMinutes(i._d.getUTCMinutes()-i._tzm),E(i).rfc2822=!0}else i._isValid=!1}function mg(i){var a=sg.exec(i._i);if(a!==null){i._d=new Date(+a[1]);return}if(iu(i),i._isValid===!1)delete i._isValid;else return;if(ou(i),i._isValid===!1)delete i._isValid;else return;i._strict?i._isValid=!1:t.createFromInputFallback(i)}t.createFromInputFallback=J(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(i){i._d=new Date(i._i+(i._useUTC?\" UTC\":\"\"))});function Yn(i,a,c){return i??a??c}function pg(i){var a=new Date(t.now());return i._useUTC?[a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate()]:[a.getFullYear(),a.getMonth(),a.getDate()]}function Fs(i){var a,c,d=[],y,b,C;if(!i._d){for(y=pg(i),i._w&&i._a[Ct]==null&&i._a[Dt]==null&&gg(i),i._dayOfYear!=null&&(C=Yn(i._a[Oe],y[Oe]),(i._dayOfYear>Cr(C)||i._dayOfYear===0)&&(E(i)._overflowDayOfYear=!0),c=Sr(C,0,i._dayOfYear),i._a[Dt]=c.getUTCMonth(),i._a[Ct]=c.getUTCDate()),a=0;a<3&&i._a[a]==null;++a)i._a[a]=d[a]=y[a];for(;a<7;a++)i._a[a]=d[a]=i._a[a]==null?a===2?1:0:i._a[a];i._a[Ae]===24&&i._a[bt]===0&&i._a[Mt]===0&&i._a[yn]===0&&(i._nextDay=!0,i._a[Ae]=0),i._d=(i._useUTC?Sr:Ep).apply(null,d),b=i._useUTC?i._d.getUTCDay():i._d.getDay(),i._tzm!=null&&i._d.setUTCMinutes(i._d.getUTCMinutes()-i._tzm),i._nextDay&&(i._a[Ae]=24),i._w&&typeof i._w.d<\"u\"&&i._w.d!==b&&(E(i).weekdayMismatch=!0)}}function gg(i){var a,c,d,y,b,C,L,U,ee;a=i._w,a.GG!=null||a.W!=null||a.E!=null?(b=1,C=4,c=Yn(a.GG,i._a[Oe],Tr(ce(),1,4).year),d=Yn(a.W,1),y=Yn(a.E,1),(y<1||y>7)&&(U=!0)):(b=i._locale._week.dow,C=i._locale._week.doy,ee=Tr(ce(),b,C),c=Yn(a.gg,i._a[Oe],ee.year),d=Yn(a.w,ee.week),a.d!=null?(y=a.d,(y<0||y>6)&&(U=!0)):a.e!=null?(y=a.e+b,(a.e<0||a.e>6)&&(U=!0)):y=b),d<1||d>Nt(c,b,C)?E(i)._overflowWeeks=!0:U!=null?E(i)._overflowWeekday=!0:(L=Kl(c,d,y,b,C),i._a[Oe]=L.year,i._dayOfYear=L.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function Is(i){if(i._f===t.ISO_8601){iu(i);return}if(i._f===t.RFC_2822){ou(i);return}i._a=[],E(i).empty=!0;var a=\"\"+i._i,c,d,y,b,C,L=a.length,U=0,ee,We;for(y=gn(i._f,i._locale).match(Xe)||[],We=y.length,c=0;c<We;c++)b=y[c],d=(a.match(rp(b,i))||[])[0],d&&(C=a.substr(0,a.indexOf(d)),C.length>0&&E(i).unusedInput.push(C),a=a.slice(a.indexOf(d)+d.length),U+=d.length),Pe[b]?(d?E(i).empty=!1:E(i).unusedTokens.push(b),op(b,d,i)):i._strict&&!d&&E(i).unusedTokens.push(b);E(i).charsLeftOver=L-U,a.length>0&&E(i).unusedInput.push(a),i._a[Ae]<=12&&E(i).bigHour===!0&&i._a[Ae]>0&&(E(i).bigHour=void 0),E(i).parsedDateParts=i._a.slice(0),E(i).meridiem=i._meridiem,i._a[Ae]=wg(i._locale,i._a[Ae],i._meridiem),ee=E(i).era,ee!==null&&(i._a[Oe]=i._locale.erasConvertYear(ee,i._a[Oe])),Fs(i),Ts(i)}function wg(i,a,c){var d;return c==null?a:i.meridiemHour!=null?i.meridiemHour(a,c):(i.isPM!=null&&(d=i.isPM(c),d&&a<12&&(a+=12),!d&&a===12&&(a=0)),a)}function yg(i){var a,c,d,y,b,C,L=!1,U=i._f.length;if(U===0){E(i).invalidFormat=!0,i._d=new Date(NaN);return}for(y=0;y<U;y++)b=0,C=!1,a=z({},i),i._useUTC!=null&&(a._useUTC=i._useUTC),a._f=i._f[y],Is(a),T(a)&&(C=!0),b+=E(a).charsLeftOver,b+=E(a).unusedTokens.length*10,E(a).score=b,L?b<d&&(d=b,c=a):(d==null||b<d||C)&&(d=b,c=a,C&&(L=!0));p(i,c||a)}function kg(i){if(!i._d){var a=Mn(i._i),c=a.day===void 0?a.date:a.day;i._a=m([a.year,a.month,c,a.hour,a.minute,a.second,a.millisecond],function(d){return d&&parseInt(d,10)}),Fs(i)}}function bg(i){var a=new H(Ts(su(i)));return a._nextDay&&(a.add(1,\"d\"),a._nextDay=void 0),a}function su(i){var a=i._i,c=i._f;return i._locale=i._locale||$t(i._l),a===null||c===void 0&&a===\"\"?A({nullInput:!0}):(typeof a==\"string\"&&(i._i=a=i._locale.preparse(a)),v(a)?new H(Ts(a)):(h(a)?i._d=a:r(c)?yg(i):c?Is(i):xg(i),T(i)||(i._d=null),i))}function xg(i){var a=i._i;u(a)?i._d=new Date(t.now()):h(a)?i._d=new Date(a.valueOf()):typeof a==\"string\"?mg(i):r(a)?(i._a=m(a.slice(0),function(c){return parseInt(c,10)}),Fs(i)):o(a)?kg(i):f(a)?i._d=new Date(a):t.createFromInputFallback(i)}function au(i,a,c,d,y){var b={};return(a===!0||a===!1)&&(d=a,a=void 0),(c===!0||c===!1)&&(d=c,c=void 0),(o(i)&&l(i)||r(i)&&i.length===0)&&(i=void 0),b._isAMomentObject=!0,b._useUTC=b._isUTC=y,b._l=c,b._i=i,b._f=a,b._strict=d,bg(b)}function ce(i,a,c,d){return au(i,a,c,d,!1)}var Eg=J(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var i=ce.apply(null,arguments);return this.isValid()&&i.isValid()?i<this?this:i:A()}),Ag=J(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var i=ce.apply(null,arguments);return this.isValid()&&i.isValid()?i>this?this:i:A()});function lu(i,a){var c,d;if(a.length===1&&r(a[0])&&(a=a[0]),!a.length)return ce();for(c=a[0],d=1;d<a.length;++d)(!a[d].isValid()||a[d][i](c))&&(c=a[d]);return c}function Cg(){var i=[].slice.call(arguments,0);return lu(\"isBefore\",i)}function vg(){var i=[].slice.call(arguments,0);return lu(\"isAfter\",i)}var Sg=function(){return Date.now?Date.now():+new Date},Ir=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Tg(i){var a,c=!1,d,y=Ir.length;for(a in i)if(s(i,a)&&!(ge.call(Ir,a)!==-1&&(i[a]==null||!isNaN(i[a]))))return!1;for(d=0;d<y;++d)if(i[Ir[d]]){if(c)return!1;parseFloat(i[Ir[d]])!==Q(i[Ir[d]])&&(c=!0)}return!0}function _g(){return this._isValid}function Fg(){return xt(NaN)}function Ai(i){var a=Mn(i),c=a.year||0,d=a.quarter||0,y=a.month||0,b=a.week||a.isoWeek||0,C=a.day||0,L=a.hour||0,U=a.minute||0,ee=a.second||0,We=a.millisecond||0;this._isValid=Tg(a),this._milliseconds=+We+ee*1e3+U*6e4+L*1e3*60*60,this._days=+C+b*7,this._months=+y+d*3+c*12,this._data={},this._locale=$t(),this._bubble()}function Ci(i){return i instanceof Ai}function Ps(i){return i<0?Math.round(-1*i)*-1:Math.round(i)}function Ig(i,a,c){var d=Math.min(i.length,a.length),y=Math.abs(i.length-a.length),b=0,C;for(C=0;C<d;C++)(c&&i[C]!==a[C]||!c&&Q(i[C])!==Q(a[C]))&&b++;return b+y}function uu(i,a){k(i,0,0,function(){var c=this.utcOffset(),d=\"+\";return c<0&&(c=-c,d=\"-\"),d+me(~~(c/60),2)+a+me(~~c%60,2)})}uu(\"Z\",\":\"),uu(\"ZZ\",\"\"),N(\"Z\",yt),N(\"ZZ\",yt),le([\"Z\",\"ZZ\"],function(i,a,c){c._useUTC=!0,c._tzm=Rs(yt,i)});var Pg=/([\\+\\-]|\\d\\d)/gi;function Rs(i,a){var c=(a||\"\").match(i),d,y,b;return c===null?null:(d=c[c.length-1]||[],y=(d+\"\").match(Pg)||[\"-\",0,0],b=+(y[1]*60)+Q(y[2]),b===0?0:y[0]===\"+\"?b:-b)}function Os(i,a){var c,d;return a._isUTC?(c=a.clone(),d=(v(i)||h(i)?i.valueOf():ce(i).valueOf())-c.valueOf(),c._d.setTime(c._d.valueOf()+d),t.updateOffset(c,!1),c):ce(i).local()}function Ls(i){return-Math.round(i._d.getTimezoneOffset())}t.updateOffset=function(){};function Rg(i,a,c){var d=this._offset||0,y;if(!this.isValid())return i!=null?this:NaN;if(i!=null){if(typeof i==\"string\"){if(i=Rs(yt,i),i===null)return this}else Math.abs(i)<16&&!c&&(i=i*60);return!this._isUTC&&a&&(y=Ls(this)),this._offset=i,this._isUTC=!0,y!=null&&this.add(y,\"m\"),d!==i&&(!a||this._changeInProgress?hu(this,xt(i-d,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this}else return this._isUTC?d:Ls(this)}function Og(i,a){return i!=null?(typeof i!=\"string\"&&(i=-i),this.utcOffset(i,a),this):-this.utcOffset()}function Lg(i){return this.utcOffset(0,i)}function Dg(i){return this._isUTC&&(this.utcOffset(0,i),this._isUTC=!1,i&&this.subtract(Ls(this),\"m\")),this}function Mg(){if(this._tzm!=null)this.utcOffset(this._tzm,!1,!0);else if(typeof this._i==\"string\"){var i=Rs(Ve,this._i);i!=null?this.utcOffset(i):this.utcOffset(0,!0)}return this}function Ng(i){return this.isValid()?(i=i?ce(i).utcOffset():0,(this.utcOffset()-i)%60===0):!1}function $g(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Yg(){if(!u(this._isDSTShifted))return this._isDSTShifted;var i={},a;return z(i,this),i=su(i),i._a?(a=i._isUTC?g(i._a):ce(i._a),this._isDSTShifted=this.isValid()&&Ig(i._a,a.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Bg(){return this.isValid()?!this._isUTC:!1}function zg(){return this.isValid()?this._isUTC:!1}function cu(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Vg=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,Wg=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function xt(i,a){var c=i,d=null,y,b,C;return Ci(i)?c={ms:i._milliseconds,d:i._days,M:i._months}:f(i)||!isNaN(+i)?(c={},a?c[a]=+i:c.milliseconds=+i):(d=Vg.exec(i))?(y=d[1]===\"-\"?-1:1,c={y:0,d:Q(d[Ct])*y,h:Q(d[Ae])*y,m:Q(d[bt])*y,s:Q(d[Mt])*y,ms:Q(Ps(d[yn]*1e3))*y}):(d=Wg.exec(i))?(y=d[1]===\"-\"?-1:1,c={y:kn(d[2],y),M:kn(d[3],y),w:kn(d[4],y),d:kn(d[5],y),h:kn(d[6],y),m:kn(d[7],y),s:kn(d[8],y)}):c==null?c={}:typeof c==\"object\"&&(\"from\"in c||\"to\"in c)&&(C=Ug(ce(c.from),ce(c.to)),c={},c.ms=C.milliseconds,c.M=C.months),b=new Ai(c),Ci(i)&&s(i,\"_locale\")&&(b._locale=i._locale),Ci(i)&&s(i,\"_isValid\")&&(b._isValid=i._isValid),b}xt.fn=Ai.prototype,xt.invalid=Fg;function kn(i,a){var c=i&&parseFloat(i.replace(\",\",\".\"));return(isNaN(c)?0:c)*a}function fu(i,a){var c={};return c.months=a.month()-i.month()+(a.year()-i.year())*12,i.clone().add(c.months,\"M\").isAfter(a)&&--c.months,c.milliseconds=+a-+i.clone().add(c.months,\"M\"),c}function Ug(i,a){var c;return i.isValid()&&a.isValid()?(a=Os(a,i),i.isBefore(a)?c=fu(i,a):(c=fu(a,i),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function du(i,a){return function(c,d){var y,b;return d!==null&&!isNaN(+d)&&(se(a,\"moment().\"+a+\"(period, number) is deprecated. Please use moment().\"+a+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),b=c,c=d,d=b),y=xt(c,d),hu(this,y,i),this}}function hu(i,a,c,d){var y=a._milliseconds,b=Ps(a._days),C=Ps(a._months);i.isValid()&&(d=d??!0,C&&Xl(i,vr(i,\"Month\")+C*c),b&&jl(i,\"Date\",vr(i,\"Date\")+b*c),y&&i._d.setTime(i._d.valueOf()+y*c),d&&t.updateOffset(i,b||C))}var Hg=du(1,\"add\"),jg=du(-1,\"subtract\");function mu(i){return typeof i==\"string\"||i instanceof String}function qg(i){return v(i)||h(i)||mu(i)||f(i)||Xg(i)||Gg(i)||i===null||i===void 0}function Gg(i){var a=o(i)&&!l(i),c=!1,d=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],y,b,C=d.length;for(y=0;y<C;y+=1)b=d[y],c=c||s(i,b);return a&&c}function Xg(i){var a=r(i),c=!1;return a&&(c=i.filter(function(d){return!f(d)&&mu(i)}).length===0),a&&c}function Jg(i){var a=o(i)&&!l(i),c=!1,d=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"],y,b;for(y=0;y<d.length;y+=1)b=d[y],c=c||s(i,b);return a&&c}function Zg(i,a){var c=i.diff(a,\"days\",!0);return c<-6?\"sameElse\":c<-1?\"lastWeek\":c<0?\"lastDay\":c<1?\"sameDay\":c<2?\"nextDay\":c<7?\"nextWeek\":\"sameElse\"}function Kg(i,a){arguments.length===1&&(arguments[0]?qg(arguments[0])?(i=arguments[0],a=void 0):Jg(arguments[0])&&(a=arguments[0],i=void 0):(i=void 0,a=void 0));var c=i||ce(),d=Os(c,this).startOf(\"day\"),y=t.calendarFormat(this,d)||\"sameElse\",b=a&&(ue(a[y])?a[y].call(this,c):a[y]);return this.format(b||this.localeData().calendar(y,this,ce(c)))}function Qg(){return new H(this)}function e0(i,a){var c=v(i)?i:ce(i);return this.isValid()&&c.isValid()?(a=Be(a)||\"millisecond\",a===\"millisecond\"?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(a).valueOf()):!1}function t0(i,a){var c=v(i)?i:ce(i);return this.isValid()&&c.isValid()?(a=Be(a)||\"millisecond\",a===\"millisecond\"?this.valueOf()<c.valueOf():this.clone().endOf(a).valueOf()<c.valueOf()):!1}function n0(i,a,c,d){var y=v(i)?i:ce(i),b=v(a)?a:ce(a);return this.isValid()&&y.isValid()&&b.isValid()?(d=d||\"()\",(d[0]===\"(\"?this.isAfter(y,c):!this.isBefore(y,c))&&(d[1]===\")\"?this.isBefore(b,c):!this.isAfter(b,c))):!1}function r0(i,a){var c=v(i)?i:ce(i),d;return this.isValid()&&c.isValid()?(a=Be(a)||\"millisecond\",a===\"millisecond\"?this.valueOf()===c.valueOf():(d=c.valueOf(),this.clone().startOf(a).valueOf()<=d&&d<=this.clone().endOf(a).valueOf())):!1}function i0(i,a){return this.isSame(i,a)||this.isAfter(i,a)}function o0(i,a){return this.isSame(i,a)||this.isBefore(i,a)}function s0(i,a,c){var d,y,b;if(!this.isValid())return NaN;if(d=Os(i,this),!d.isValid())return NaN;switch(y=(d.utcOffset()-this.utcOffset())*6e4,a=Be(a),a){case\"year\":b=vi(this,d)/12;break;case\"month\":b=vi(this,d);break;case\"quarter\":b=vi(this,d)/3;break;case\"second\":b=(this-d)/1e3;break;case\"minute\":b=(this-d)/6e4;break;case\"hour\":b=(this-d)/36e5;break;case\"day\":b=(this-d-y)/864e5;break;case\"week\":b=(this-d-y)/6048e5;break;default:b=this-d}return c?b:lt(b)}function vi(i,a){if(i.date()<a.date())return-vi(a,i);var c=(a.year()-i.year())*12+(a.month()-i.month()),d=i.clone().add(c,\"months\"),y,b;return a-d<0?(y=i.clone().add(c-1,\"months\"),b=(a-d)/(d-y)):(y=i.clone().add(c+1,\"months\"),b=(a-d)/(y-d)),-(c+b)||0}t.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",t.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";function a0(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function l0(i){if(!this.isValid())return null;var a=i!==!0,c=a?this.clone().utc():this;return c.year()<0||c.year()>9999?Kt(c,a?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):ue(Date.prototype.toISOString)?a?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace(\"Z\",Kt(c,\"Z\")):Kt(c,a?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")}function u0(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var i=\"moment\",a=\"\",c,d,y,b;return this.isLocal()||(i=this.utcOffset()===0?\"moment.utc\":\"moment.parseZone\",a=\"Z\"),c=\"[\"+i+'(\"]',d=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",y=\"-MM-DD[T]HH:mm:ss.SSS\",b=a+'[\")]',this.format(c+d+y+b)}function c0(i){i||(i=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var a=Kt(this,i);return this.localeData().postformat(a)}function f0(i,a){return this.isValid()&&(v(i)&&i.isValid()||ce(i).isValid())?xt({to:this,from:i}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()}function d0(i){return this.from(ce(),i)}function h0(i,a){return this.isValid()&&(v(i)&&i.isValid()||ce(i).isValid())?xt({from:this,to:i}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()}function m0(i){return this.to(ce(),i)}function pu(i){var a;return i===void 0?this._locale._abbr:(a=$t(i),a!=null&&(this._locale=a),this)}var gu=J(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(i){return i===void 0?this.localeData():this.locale(i)});function wu(){return this._locale}var Si=1e3,Bn=60*Si,Ti=60*Bn,yu=(365*400+97)*24*Ti;function zn(i,a){return(i%a+a)%a}function ku(i,a,c){return i<100&&i>=0?new Date(i+400,a,c)-yu:new Date(i,a,c).valueOf()}function bu(i,a,c){return i<100&&i>=0?Date.UTC(i+400,a,c)-yu:Date.UTC(i,a,c)}function p0(i){var a,c;if(i=Be(i),i===void 0||i===\"millisecond\"||!this.isValid())return this;switch(c=this._isUTC?bu:ku,i){case\"year\":a=c(this.year(),0,1);break;case\"quarter\":a=c(this.year(),this.month()-this.month()%3,1);break;case\"month\":a=c(this.year(),this.month(),1);break;case\"week\":a=c(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":a=c(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":a=c(this.year(),this.month(),this.date());break;case\"hour\":a=this._d.valueOf(),a-=zn(a+(this._isUTC?0:this.utcOffset()*Bn),Ti);break;case\"minute\":a=this._d.valueOf(),a-=zn(a,Bn);break;case\"second\":a=this._d.valueOf(),a-=zn(a,Si);break}return this._d.setTime(a),t.updateOffset(this,!0),this}function g0(i){var a,c;if(i=Be(i),i===void 0||i===\"millisecond\"||!this.isValid())return this;switch(c=this._isUTC?bu:ku,i){case\"year\":a=c(this.year()+1,0,1)-1;break;case\"quarter\":a=c(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":a=c(this.year(),this.month()+1,1)-1;break;case\"week\":a=c(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":a=c(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":a=c(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":a=this._d.valueOf(),a+=Ti-zn(a+(this._isUTC?0:this.utcOffset()*Bn),Ti)-1;break;case\"minute\":a=this._d.valueOf(),a+=Bn-zn(a,Bn)-1;break;case\"second\":a=this._d.valueOf(),a+=Si-zn(a,Si)-1;break}return this._d.setTime(a),t.updateOffset(this,!0),this}function w0(){return this._d.valueOf()-(this._offset||0)*6e4}function y0(){return Math.floor(this.valueOf()/1e3)}function k0(){return new Date(this.valueOf())}function b0(){var i=this;return[i.year(),i.month(),i.date(),i.hour(),i.minute(),i.second(),i.millisecond()]}function x0(){var i=this;return{years:i.year(),months:i.month(),date:i.date(),hours:i.hours(),minutes:i.minutes(),seconds:i.seconds(),milliseconds:i.milliseconds()}}function E0(){return this.isValid()?this.toISOString():null}function A0(){return T(this)}function C0(){return p({},E(this))}function v0(){return E(this).overflow}function S0(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}k(\"N\",0,0,\"eraAbbr\"),k(\"NN\",0,0,\"eraAbbr\"),k(\"NNN\",0,0,\"eraAbbr\"),k(\"NNNN\",0,0,\"eraName\"),k(\"NNNNN\",0,0,\"eraNarrow\"),k(\"y\",[\"y\",1],\"yo\",\"eraYear\"),k(\"y\",[\"yy\",2],0,\"eraYear\"),k(\"y\",[\"yyy\",3],0,\"eraYear\"),k(\"y\",[\"yyyy\",4],0,\"eraYear\"),N(\"N\",Ds),N(\"NN\",Ds),N(\"NNN\",Ds),N(\"NNNN\",N0),N(\"NNNNN\",$0),le([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],function(i,a,c,d){var y=c._locale.erasParse(i,d,c._strict);y?E(c).era=y:E(c).invalidEra=i}),N(\"y\",at),N(\"yy\",at),N(\"yyy\",at),N(\"yyyy\",at),N(\"yo\",Y0),le([\"y\",\"yy\",\"yyy\",\"yyyy\"],Oe),le([\"yo\"],function(i,a,c,d){var y;c._locale._eraYearOrdinalRegex&&(y=i.match(c._locale._eraYearOrdinalRegex)),c._locale.eraYearOrdinalParse?a[Oe]=c._locale.eraYearOrdinalParse(i,y):a[Oe]=parseInt(i,10)});function T0(i,a){var c,d,y,b=this._eras||$t(\"en\")._eras;for(c=0,d=b.length;c<d;++c){switch(typeof b[c].since){case\"string\":y=t(b[c].since).startOf(\"day\"),b[c].since=y.valueOf();break}switch(typeof b[c].until){case\"undefined\":b[c].until=1/0;break;case\"string\":y=t(b[c].until).startOf(\"day\").valueOf(),b[c].until=y.valueOf();break}}return b}function _0(i,a,c){var d,y,b=this.eras(),C,L,U;for(i=i.toUpperCase(),d=0,y=b.length;d<y;++d)if(C=b[d].name.toUpperCase(),L=b[d].abbr.toUpperCase(),U=b[d].narrow.toUpperCase(),c)switch(a){case\"N\":case\"NN\":case\"NNN\":if(L===i)return b[d];break;case\"NNNN\":if(C===i)return b[d];break;case\"NNNNN\":if(U===i)return b[d];break}else if([C,L,U].indexOf(i)>=0)return b[d]}function F0(i,a){var c=i.since<=i.until?1:-1;return a===void 0?t(i.since).year():t(i.since).year()+(a-i.offset)*c}function I0(){var i,a,c,d=this.localeData().eras();for(i=0,a=d.length;i<a;++i)if(c=this.clone().startOf(\"day\").valueOf(),d[i].since<=c&&c<=d[i].until||d[i].until<=c&&c<=d[i].since)return d[i].name;return\"\"}function P0(){var i,a,c,d=this.localeData().eras();for(i=0,a=d.length;i<a;++i)if(c=this.clone().startOf(\"day\").valueOf(),d[i].since<=c&&c<=d[i].until||d[i].until<=c&&c<=d[i].since)return d[i].narrow;return\"\"}function R0(){var i,a,c,d=this.localeData().eras();for(i=0,a=d.length;i<a;++i)if(c=this.clone().startOf(\"day\").valueOf(),d[i].since<=c&&c<=d[i].until||d[i].until<=c&&c<=d[i].since)return d[i].abbr;return\"\"}function O0(){var i,a,c,d,y=this.localeData().eras();for(i=0,a=y.length;i<a;++i)if(c=y[i].since<=y[i].until?1:-1,d=this.clone().startOf(\"day\").valueOf(),y[i].since<=d&&d<=y[i].until||y[i].until<=d&&d<=y[i].since)return(this.year()-t(y[i].since).year())*c+y[i].offset;return this.year()}function L0(i){return s(this,\"_erasNameRegex\")||Ms.call(this),i?this._erasNameRegex:this._erasRegex}function D0(i){return s(this,\"_erasAbbrRegex\")||Ms.call(this),i?this._erasAbbrRegex:this._erasRegex}function M0(i){return s(this,\"_erasNarrowRegex\")||Ms.call(this),i?this._erasNarrowRegex:this._erasRegex}function Ds(i,a){return a.erasAbbrRegex(i)}function N0(i,a){return a.erasNameRegex(i)}function $0(i,a){return a.erasNarrowRegex(i)}function Y0(i,a){return a._eraYearOrdinalRegex||at}function Ms(){var i=[],a=[],c=[],d=[],y,b,C,L,U,ee=this.eras();for(y=0,b=ee.length;y<b;++y)C=Lt(ee[y].name),L=Lt(ee[y].abbr),U=Lt(ee[y].narrow),a.push(C),i.push(L),c.push(U),d.push(C),d.push(L),d.push(U);this._erasRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\")}k(0,[\"gg\",2],0,function(){return this.weekYear()%100}),k(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100});function _i(i,a){k(0,[i,i.length],0,a)}_i(\"gggg\",\"weekYear\"),_i(\"ggggg\",\"weekYear\"),_i(\"GGGG\",\"isoWeekYear\"),_i(\"GGGGG\",\"isoWeekYear\"),N(\"G\",At),N(\"g\",At),N(\"GG\",O,ze),N(\"gg\",O,ze),N(\"GGGG\",wt,S),N(\"gggg\",wt,S),N(\"GGGGG\",Je,R),N(\"ggggg\",Je,R),Ar([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(i,a,c,d){a[d.substr(0,2)]=Q(i)}),Ar([\"gg\",\"GG\"],function(i,a,c,d){a[d]=t.parseTwoDigitYear(i)});function B0(i){return xu.call(this,i,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function z0(i){return xu.call(this,i,this.isoWeek(),this.isoWeekday(),1,4)}function V0(){return Nt(this.year(),1,4)}function W0(){return Nt(this.isoWeekYear(),1,4)}function U0(){var i=this.localeData()._week;return Nt(this.year(),i.dow,i.doy)}function H0(){var i=this.localeData()._week;return Nt(this.weekYear(),i.dow,i.doy)}function xu(i,a,c,d,y){var b;return i==null?Tr(this,d,y).year:(b=Nt(i,d,y),a>b&&(a=b),j0.call(this,i,a,c,d,y))}function j0(i,a,c,d,y){var b=Kl(i,a,c,d,y),C=Sr(b.year,0,b.dayOfYear);return this.year(C.getUTCFullYear()),this.month(C.getUTCMonth()),this.date(C.getUTCDate()),this}k(\"Q\",0,\"Qo\",\"quarter\"),N(\"Q\",gi),le(\"Q\",function(i,a){a[Dt]=(Q(i)-1)*3});function q0(i){return i==null?Math.ceil((this.month()+1)/3):this.month((i-1)*3+this.month()%3)}k(\"D\",[\"DD\",2],\"Do\",\"date\"),N(\"D\",O,Nn),N(\"DD\",O,ze),N(\"Do\",function(i,a){return i?a._dayOfMonthOrdinalParse||a._ordinalParse:a._dayOfMonthOrdinalParseLenient}),le([\"D\",\"DD\"],Ct),le(\"Do\",function(i,a){a[Ct]=Q(i.match(O)[0])});var Eu=$n(\"Date\",!0);k(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),N(\"DDD\",Re),N(\"DDDD\",wi),le([\"DDD\",\"DDDD\"],function(i,a,c){c._dayOfYear=Q(i)});function G0(i){var a=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return i==null?a:this.add(i-a,\"d\")}k(\"m\",[\"mm\",2],0,\"minute\"),N(\"m\",O,bs),N(\"mm\",O,ze),le([\"m\",\"mm\"],bt);var X0=$n(\"Minutes\",!1);k(\"s\",[\"ss\",2],0,\"second\"),N(\"s\",O,bs),N(\"ss\",O,ze),le([\"s\",\"ss\"],Mt);var J0=$n(\"Seconds\",!1);k(\"S\",0,0,function(){return~~(this.millisecond()/100)}),k(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),k(0,[\"SSS\",3],0,\"millisecond\"),k(0,[\"SSSS\",4],0,function(){return this.millisecond()*10}),k(0,[\"SSSSS\",5],0,function(){return this.millisecond()*100}),k(0,[\"SSSSSS\",6],0,function(){return this.millisecond()*1e3}),k(0,[\"SSSSSSS\",7],0,function(){return this.millisecond()*1e4}),k(0,[\"SSSSSSSS\",8],0,function(){return this.millisecond()*1e5}),k(0,[\"SSSSSSSSS\",9],0,function(){return this.millisecond()*1e6}),N(\"S\",Re,gi),N(\"SS\",Re,ze),N(\"SSS\",Re,wi);var tn,Au;for(tn=\"SSSS\";tn.length<=9;tn+=\"S\")N(tn,at);function Z0(i,a){a[yn]=Q((\"0.\"+i)*1e3)}for(tn=\"S\";tn.length<=9;tn+=\"S\")le(tn,Z0);Au=$n(\"Milliseconds\",!1),k(\"z\",0,0,\"zoneAbbr\"),k(\"zz\",0,0,\"zoneName\");function K0(){return this._isUTC?\"UTC\":\"\"}function Q0(){return this._isUTC?\"Coordinated Universal Time\":\"\"}var P=H.prototype;P.add=Hg,P.calendar=Kg,P.clone=Qg,P.diff=s0,P.endOf=g0,P.format=c0,P.from=f0,P.fromNow=d0,P.to=h0,P.toNow=m0,P.get=up,P.invalidAt=v0,P.isAfter=e0,P.isBefore=t0,P.isBetween=n0,P.isSame=r0,P.isSameOrAfter=i0,P.isSameOrBefore=o0,P.isValid=A0,P.lang=gu,P.locale=pu,P.localeData=wu,P.max=Ag,P.min=Eg,P.parsingFlags=C0,P.set=cp,P.startOf=p0,P.subtract=jg,P.toArray=b0,P.toObject=x0,P.toDate=k0,P.toISOString=l0,P.inspect=u0,typeof Symbol<\"u\"&&Symbol.for!=null&&(P[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),P.toJSON=E0,P.toString=a0,P.unix=y0,P.valueOf=w0,P.creationData=S0,P.eraName=I0,P.eraNarrow=P0,P.eraAbbr=R0,P.eraYear=O0,P.year=Hl,P.isLeapYear=lp,P.weekYear=B0,P.isoWeekYear=z0,P.quarter=P.quarters=q0,P.month=Jl,P.daysInMonth=kp,P.week=P.weeks=Tp,P.isoWeek=P.isoWeeks=_p,P.weeksInYear=U0,P.weeksInWeekYear=H0,P.isoWeeksInYear=V0,P.isoWeeksInISOWeekYear=W0,P.date=Eu,P.day=P.days=zp,P.weekday=Vp,P.isoWeekday=Wp,P.dayOfYear=G0,P.hour=P.hours=Jp,P.minute=P.minutes=X0,P.second=P.seconds=J0,P.millisecond=P.milliseconds=Au,P.utcOffset=Rg,P.utc=Lg,P.local=Dg,P.parseZone=Mg,P.hasAlignedHourOffset=Ng,P.isDST=$g,P.isLocal=Bg,P.isUtcOffset=zg,P.isUtc=cu,P.isUTC=cu,P.zoneAbbr=K0,P.zoneName=Q0,P.dates=J(\"dates accessor is deprecated. Use date instead.\",Eu),P.months=J(\"months accessor is deprecated. Use month instead\",Jl),P.years=J(\"years accessor is deprecated. Use year instead\",Hl),P.zone=J(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",Og),P.isDSTShifted=J(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",Yg);function ew(i){return ce(i*1e3)}function tw(){return ce.apply(null,arguments).parseZone()}function Cu(i){return i}var oe=j.prototype;oe.calendar=he,oe.longDateFormat=wn,oe.invalidDate=Ot,oe.ordinal=ws,oe.preparse=Cu,oe.postformat=Cu,oe.relativeTime=hi,oe.pastFuture=mi,oe.set=re,oe.eras=T0,oe.erasParse=_0,oe.erasConvertYear=F0,oe.erasAbbrRegex=D0,oe.erasNameRegex=L0,oe.erasNarrowRegex=M0,oe.months=pp,oe.monthsShort=gp,oe.monthsParse=yp,oe.monthsRegex=xp,oe.monthsShortRegex=bp,oe.week=Ap,oe.firstDayOfYear=Sp,oe.firstDayOfWeek=vp,oe.weekdays=Mp,oe.weekdaysMin=$p,oe.weekdaysShort=Np,oe.weekdaysParse=Bp,oe.weekdaysRegex=Up,oe.weekdaysShortRegex=Hp,oe.weekdaysMinRegex=jp,oe.isPM=Gp,oe.meridiem=Zp;function Fi(i,a,c,d){var y=$t(),b=g().set(d,a);return y[c](b,i)}function vu(i,a,c){if(f(i)&&(a=i,i=void 0),i=i||\"\",a!=null)return Fi(i,a,c,\"month\");var d,y=[];for(d=0;d<12;d++)y[d]=Fi(i,d,c,\"month\");return y}function Ns(i,a,c,d){typeof i==\"boolean\"?(f(a)&&(c=a,a=void 0),a=a||\"\"):(a=i,c=a,i=!1,f(a)&&(c=a,a=void 0),a=a||\"\");var y=$t(),b=i?y._week.dow:0,C,L=[];if(c!=null)return Fi(a,(c+b)%7,d,\"day\");for(C=0;C<7;C++)L[C]=Fi(a,(C+b)%7,d,\"day\");return L}function nw(i,a){return vu(i,a,\"months\")}function rw(i,a){return vu(i,a,\"monthsShort\")}function iw(i,a,c){return Ns(i,a,c,\"weekdays\")}function ow(i,a,c){return Ns(i,a,c,\"weekdaysShort\")}function sw(i,a,c){return Ns(i,a,c,\"weekdaysMin\")}en(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"公元\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"公元前\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(i){var a=i%10,c=Q(i%100/10)===1?\"th\":a===1?\"st\":a===2?\"nd\":a===3?\"rd\":\"th\";return i+c}}),t.lang=J(\"moment.lang is deprecated. Use moment.locale instead.\",en),t.langData=J(\"moment.langData is deprecated. Use moment.localeData instead.\",$t);var Yt=Math.abs;function aw(){var i=this._data;return this._milliseconds=Yt(this._milliseconds),this._days=Yt(this._days),this._months=Yt(this._months),i.milliseconds=Yt(i.milliseconds),i.seconds=Yt(i.seconds),i.minutes=Yt(i.minutes),i.hours=Yt(i.hours),i.months=Yt(i.months),i.years=Yt(i.years),this}function Su(i,a,c,d){var y=xt(a,c);return i._milliseconds+=d*y._milliseconds,i._days+=d*y._days,i._months+=d*y._months,i._bubble()}function lw(i,a){return Su(this,i,a,1)}function uw(i,a){return Su(this,i,a,-1)}function Tu(i){return i<0?Math.floor(i):Math.ceil(i)}function cw(){var i=this._milliseconds,a=this._days,c=this._months,d=this._data,y,b,C,L,U;return i>=0&&a>=0&&c>=0||i<=0&&a<=0&&c<=0||(i+=Tu($s(c)+a)*864e5,a=0,c=0),d.milliseconds=i%1e3,y=lt(i/1e3),d.seconds=y%60,b=lt(y/60),d.minutes=b%60,C=lt(b/60),d.hours=C%24,a+=lt(C/24),U=lt(_u(a)),c+=U,a-=Tu($s(U)),L=lt(c/12),c%=12,d.days=a,d.months=c,d.years=L,this}function _u(i){return i*4800/146097}function $s(i){return i*146097/4800}function fw(i){if(!this.isValid())return NaN;var a,c,d=this._milliseconds;if(i=Be(i),i===\"month\"||i===\"quarter\"||i===\"year\")switch(a=this._days+d/864e5,c=this._months+_u(a),i){case\"month\":return c;case\"quarter\":return c/3;case\"year\":return c/12}else switch(a=this._days+Math.round($s(this._months)),i){case\"week\":return a/7+d/6048e5;case\"day\":return a+d/864e5;case\"hour\":return a*24+d/36e5;case\"minute\":return a*1440+d/6e4;case\"second\":return a*86400+d/1e3;case\"millisecond\":return Math.floor(a*864e5)+d;default:throw new Error(\"Unknown unit \"+i)}}function Bt(i){return function(){return this.as(i)}}var Fu=Bt(\"ms\"),dw=Bt(\"s\"),hw=Bt(\"m\"),mw=Bt(\"h\"),pw=Bt(\"d\"),gw=Bt(\"w\"),ww=Bt(\"M\"),yw=Bt(\"Q\"),kw=Bt(\"y\"),bw=Fu;function xw(){return xt(this)}function Ew(i){return i=Be(i),this.isValid()?this[i+\"s\"]():NaN}function bn(i){return function(){return this.isValid()?this._data[i]:NaN}}var Aw=bn(\"milliseconds\"),Cw=bn(\"seconds\"),vw=bn(\"minutes\"),Sw=bn(\"hours\"),Tw=bn(\"days\"),_w=bn(\"months\"),Fw=bn(\"years\");function Iw(){return lt(this.days()/7)}var zt=Math.round,Vn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Pw(i,a,c,d,y){return y.relativeTime(a||1,!!c,i,d)}function Rw(i,a,c,d){var y=xt(i).abs(),b=zt(y.as(\"s\")),C=zt(y.as(\"m\")),L=zt(y.as(\"h\")),U=zt(y.as(\"d\")),ee=zt(y.as(\"M\")),We=zt(y.as(\"w\")),Vt=zt(y.as(\"y\")),nn=b<=c.ss&&[\"s\",b]||b<c.s&&[\"ss\",b]||C<=1&&[\"m\"]||C<c.m&&[\"mm\",C]||L<=1&&[\"h\"]||L<c.h&&[\"hh\",L]||U<=1&&[\"d\"]||U<c.d&&[\"dd\",U];return c.w!=null&&(nn=nn||We<=1&&[\"w\"]||We<c.w&&[\"ww\",We]),nn=nn||ee<=1&&[\"M\"]||ee<c.M&&[\"MM\",ee]||Vt<=1&&[\"y\"]||[\"yy\",Vt],nn[2]=a,nn[3]=+i>0,nn[4]=d,Pw.apply(null,nn)}function Ow(i){return i===void 0?zt:typeof i==\"function\"?(zt=i,!0):!1}function Lw(i,a){return Vn[i]===void 0?!1:a===void 0?Vn[i]:(Vn[i]=a,i===\"s\"&&(Vn.ss=a-1),!0)}function Dw(i,a){if(!this.isValid())return this.localeData().invalidDate();var c=!1,d=Vn,y,b;return typeof i==\"object\"&&(a=i,i=!1),typeof i==\"boolean\"&&(c=i),typeof a==\"object\"&&(d=Object.assign({},Vn,a),a.s!=null&&a.ss==null&&(d.ss=a.s-1)),y=this.localeData(),b=Rw(this,!c,d,y),c&&(b=y.pastFuture(+this,b)),y.postformat(b)}var Ys=Math.abs;function Wn(i){return(i>0)-(i<0)||+i}function Ii(){if(!this.isValid())return this.localeData().invalidDate();var i=Ys(this._milliseconds)/1e3,a=Ys(this._days),c=Ys(this._months),d,y,b,C,L=this.asSeconds(),U,ee,We,Vt;return L?(d=lt(i/60),y=lt(d/60),i%=60,d%=60,b=lt(c/12),c%=12,C=i?i.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",U=L<0?\"-\":\"\",ee=Wn(this._months)!==Wn(L)?\"-\":\"\",We=Wn(this._days)!==Wn(L)?\"-\":\"\",Vt=Wn(this._milliseconds)!==Wn(L)?\"-\":\"\",U+\"P\"+(b?ee+b+\"Y\":\"\")+(c?ee+c+\"M\":\"\")+(a?We+a+\"D\":\"\")+(y||d||i?\"T\":\"\")+(y?Vt+y+\"H\":\"\")+(d?Vt+d+\"M\":\"\")+(i?Vt+C+\"S\":\"\")):\"P0D\"}var ne=Ai.prototype;ne.isValid=_g,ne.abs=aw,ne.add=lw,ne.subtract=uw,ne.as=fw,ne.asMilliseconds=Fu,ne.asSeconds=dw,ne.asMinutes=hw,ne.asHours=mw,ne.asDays=pw,ne.asWeeks=gw,ne.asMonths=ww,ne.asQuarters=yw,ne.asYears=kw,ne.valueOf=bw,ne._bubble=cw,ne.clone=xw,ne.get=Ew,ne.milliseconds=Aw,ne.seconds=Cw,ne.minutes=vw,ne.hours=Sw,ne.days=Tw,ne.weeks=Iw,ne.months=_w,ne.years=Fw,ne.humanize=Dw,ne.toISOString=Ii,ne.toString=Ii,ne.toJSON=Ii,ne.locale=pu,ne.localeData=wu,ne.toIsoString=J(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",Ii),ne.lang=gu,k(\"X\",0,0,\"unix\"),k(\"x\",0,0,\"valueOf\"),N(\"x\",At),N(\"X\",kt),le(\"X\",function(i,a,c){c._d=new Date(parseFloat(i)*1e3)}),le(\"x\",function(i,a,c){c._d=new Date(Q(i))});return t.version=\"2.30.1\",n(ce),t.fn=P,t.min=Cg,t.max=vg,t.now=Sg,t.utc=g,t.unix=ew,t.months=nw,t.isDate=h,t.locale=en,t.invalid=A,t.duration=xt,t.isMoment=v,t.weekdays=iw,t.parseZone=tw,t.localeData=$t,t.isDuration=Ci,t.monthsShort=rw,t.weekdaysMin=sw,t.defineLocale=Ss,t.updateLocale=tg,t.locales=ng,t.weekdaysShort=ow,t.normalizeUnits=Be,t.relativeTimeRounding=Ow,t.relativeTimeThreshold=Lw,t.calendarFormat=Zg,t.prototype=P,t.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},t})});var $u=B((ev,Nu)=>{\"use strict\";function St(e){if(typeof e!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(e))}function Mu(e,t){for(var n=\"\",r=0,o=-1,s=0,l,u=0;u<=e.length;++u){if(u<e.length)l=e.charCodeAt(u);else{if(l===47)break;l=47}if(l===47){if(!(o===u-1||s===1))if(o!==u-1&&s===2){if(n.length<2||r!==2||n.charCodeAt(n.length-1)!==46||n.charCodeAt(n.length-2)!==46){if(n.length>2){var f=n.lastIndexOf(\"/\");if(f!==n.length-1){f===-1?(n=\"\",r=0):(n=n.slice(0,f),r=n.length-1-n.lastIndexOf(\"/\")),o=u,s=0;continue}}else if(n.length===2||n.length===1){n=\"\",r=0,o=u,s=0;continue}}t&&(n.length>0?n+=\"/..\":n=\"..\",r=2)}else n.length>0?n+=\"/\"+e.slice(o+1,u):n=e.slice(o+1,u),r=u-o-1;o=u,s=0}else l===46&&s!==-1?++s:s=-1}return n}function Gw(e,t){var n=t.dir||t.root,r=t.base||(t.name||\"\")+(t.ext||\"\");return n?n===t.root?n+r:n+e+r:r}var jn={resolve:function(){for(var t=\"\",n=!1,r,o=arguments.length-1;o>=-1&&!n;o--){var s;o>=0?s=arguments[o]:(r===void 0&&(r=process.cwd()),s=r),St(s),s.length!==0&&(t=s+\"/\"+t,n=s.charCodeAt(0)===47)}return t=Mu(t,!n),n?t.length>0?\"/\"+t:\"/\":t.length>0?t:\".\"},normalize:function(t){if(St(t),t.length===0)return\".\";var n=t.charCodeAt(0)===47,r=t.charCodeAt(t.length-1)===47;return t=Mu(t,!n),t.length===0&&!n&&(t=\".\"),t.length>0&&r&&(t+=\"/\"),n?\"/\"+t:t},isAbsolute:function(t){return St(t),t.length>0&&t.charCodeAt(0)===47},join:function(){if(arguments.length===0)return\".\";for(var t,n=0;n<arguments.length;++n){var r=arguments[n];St(r),r.length>0&&(t===void 0?t=r:t+=\"/\"+r)}return t===void 0?\".\":jn.normalize(t)},relative:function(t,n){if(St(t),St(n),t===n||(t=jn.resolve(t),n=jn.resolve(n),t===n))return\"\";for(var r=1;r<t.length&&t.charCodeAt(r)===47;++r);for(var o=t.length,s=o-r,l=1;l<n.length&&n.charCodeAt(l)===47;++l);for(var u=n.length,f=u-l,h=s<f?s:f,m=-1,p=0;p<=h;++p){if(p===h){if(f>h){if(n.charCodeAt(l+p)===47)return n.slice(l+p+1);if(p===0)return n.slice(l+p)}else s>h&&(t.charCodeAt(r+p)===47?m=p:p===0&&(m=0));break}var g=t.charCodeAt(r+p),w=n.charCodeAt(l+p);if(g!==w)break;g===47&&(m=p)}var E=\"\";for(p=r+m+1;p<=o;++p)(p===o||t.charCodeAt(p)===47)&&(E.length===0?E+=\"..\":E+=\"/..\");return E.length>0?E+n.slice(l+m):(l+=m,n.charCodeAt(l)===47&&++l,n.slice(l))},_makeLong:function(t){return t},dirname:function(t){if(St(t),t.length===0)return\".\";for(var n=t.charCodeAt(0),r=n===47,o=-1,s=!0,l=t.length-1;l>=1;--l)if(n=t.charCodeAt(l),n===47){if(!s){o=l;break}}else s=!1;return o===-1?r?\"/\":\".\":r&&o===1?\"//\":t.slice(0,o)},basename:function(t,n){if(n!==void 0&&typeof n!=\"string\")throw new TypeError('\"ext\" argument must be a string');St(t);var r=0,o=-1,s=!0,l;if(n!==void 0&&n.length>0&&n.length<=t.length){if(n.length===t.length&&n===t)return\"\";var u=n.length-1,f=-1;for(l=t.length-1;l>=0;--l){var h=t.charCodeAt(l);if(h===47){if(!s){r=l+1;break}}else f===-1&&(s=!1,f=l+1),u>=0&&(h===n.charCodeAt(u)?--u===-1&&(o=l):(u=-1,o=f))}return r===o?o=f:o===-1&&(o=t.length),t.slice(r,o)}else{for(l=t.length-1;l>=0;--l)if(t.charCodeAt(l)===47){if(!s){r=l+1;break}}else o===-1&&(s=!1,o=l+1);return o===-1?\"\":t.slice(r,o)}},extname:function(t){St(t);for(var n=-1,r=0,o=-1,s=!0,l=0,u=t.length-1;u>=0;--u){var f=t.charCodeAt(u);if(f===47){if(!s){r=u+1;break}continue}o===-1&&(s=!1,o=u+1),f===46?n===-1?n=u:l!==1&&(l=1):n!==-1&&(l=-1)}return n===-1||o===-1||l===0||l===1&&n===o-1&&n===r+1?\"\":t.slice(n,o)},format:function(t){if(t===null||typeof t!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return Gw(\"/\",t)},parse:function(t){St(t);var n={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(t.length===0)return n;var r=t.charCodeAt(0),o=r===47,s;o?(n.root=\"/\",s=1):s=0;for(var l=-1,u=0,f=-1,h=!0,m=t.length-1,p=0;m>=s;--m){if(r=t.charCodeAt(m),r===47){if(!h){u=m+1;break}continue}f===-1&&(h=!1,f=m+1),r===46?l===-1?l=m:p!==1&&(p=1):l!==-1&&(p=-1)}return l===-1||f===-1||p===0||p===1&&l===f-1&&l===u+1?f!==-1&&(u===0&&o?n.base=n.name=t.slice(1,f):n.base=n.name=t.slice(u,f)):(u===0&&o?(n.name=t.slice(1,l),n.base=t.slice(1,f)):(n.name=t.slice(u,l),n.base=t.slice(u,f)),n.ext=t.slice(l,f)),u>0?n.dir=t.slice(0,u-1):o&&(n.dir=\"/\"),n},sep:\"/\",delimiter:\":\",win32:null,posix:null};jn.posix=jn;Nu.exports=jn});var Bu=B((tv,zs)=>{\"use strict\";var Xw=Object.prototype.hasOwnProperty,Ue=\"~\";function Pr(){}Object.create&&(Pr.prototype=Object.create(null),new Pr().__proto__||(Ue=!1));function Jw(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function Yu(e,t,n,r,o){if(typeof n!=\"function\")throw new TypeError(\"The listener must be a function\");var s=new Jw(n,r||e,o),l=Ue?Ue+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],s]:e._events[l].push(s):(e._events[l]=s,e._eventsCount++),e}function Oi(e,t){--e._eventsCount===0?e._events=new Pr:delete e._events[t]}function De(){this._events=new Pr,this._eventsCount=0}De.prototype.eventNames=function(){var t=[],n,r;if(this._eventsCount===0)return t;for(r in n=this._events)Xw.call(n,r)&&t.push(Ue?r.slice(1):r);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(n)):t};De.prototype.listeners=function(t){var n=Ue?Ue+t:t,r=this._events[n];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,s=r.length,l=new Array(s);o<s;o++)l[o]=r[o].fn;return l};De.prototype.listenerCount=function(t){var n=Ue?Ue+t:t,r=this._events[n];return r?r.fn?1:r.length:0};De.prototype.emit=function(t,n,r,o,s,l){var u=Ue?Ue+t:t;if(!this._events[u])return!1;var f=this._events[u],h=arguments.length,m,p;if(f.fn){switch(f.once&&this.removeListener(t,f.fn,void 0,!0),h){case 1:return f.fn.call(f.context),!0;case 2:return f.fn.call(f.context,n),!0;case 3:return f.fn.call(f.context,n,r),!0;case 4:return f.fn.call(f.context,n,r,o),!0;case 5:return f.fn.call(f.context,n,r,o,s),!0;case 6:return f.fn.call(f.context,n,r,o,s,l),!0}for(p=1,m=new Array(h-1);p<h;p++)m[p-1]=arguments[p];f.fn.apply(f.context,m)}else{var g=f.length,w;for(p=0;p<g;p++)switch(f[p].once&&this.removeListener(t,f[p].fn,void 0,!0),h){case 1:f[p].fn.call(f[p].context);break;case 2:f[p].fn.call(f[p].context,n);break;case 3:f[p].fn.call(f[p].context,n,r);break;case 4:f[p].fn.call(f[p].context,n,r,o);break;default:if(!m)for(w=1,m=new Array(h-1);w<h;w++)m[w-1]=arguments[w];f[p].fn.apply(f[p].context,m)}}return!0};De.prototype.on=function(t,n,r){return Yu(this,t,n,r,!1)};De.prototype.once=function(t,n,r){return Yu(this,t,n,r,!0)};De.prototype.removeListener=function(t,n,r,o){var s=Ue?Ue+t:t;if(!this._events[s])return this;if(!n)return Oi(this,s),this;var l=this._events[s];if(l.fn)l.fn===n&&(!o||l.once)&&(!r||l.context===r)&&Oi(this,s);else{for(var u=0,f=[],h=l.length;u<h;u++)(l[u].fn!==n||o&&!l[u].once||r&&l[u].context!==r)&&f.push(l[u]);f.length?this._events[s]=f.length===1?f[0]:f:Oi(this,s)}return this};De.prototype.removeAllListeners=function(t){var n;return t?(n=Ue?Ue+t:t,this._events[n]&&Oi(this,n)):(this._events=new Pr,this._eventsCount=0),this};De.prototype.off=De.prototype.removeListener;De.prototype.addListener=De.prototype.on;De.prefixed=Ue;De.EventEmitter=De;typeof zs<\"u\"&&(zs.exports=De)});var sc=B((Mv,oc)=>{var Kn=1e3,Qn=Kn*60,er=Qn*60,vn=er*24,oy=vn*7,sy=vn*365.25;oc.exports=function(e,t){t=t||{};var n=typeof e;if(n===\"string\"&&e.length>0)return ay(e);if(n===\"number\"&&isFinite(e))return t.long?uy(e):ly(e);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(e))};function ay(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var n=parseFloat(t[1]),r=(t[2]||\"ms\").toLowerCase();switch(r){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return n*sy;case\"weeks\":case\"week\":case\"w\":return n*oy;case\"days\":case\"day\":case\"d\":return n*vn;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return n*er;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return n*Qn;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return n*Kn;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return n;default:return}}}}function ly(e){var t=Math.abs(e);return t>=vn?Math.round(e/vn)+\"d\":t>=er?Math.round(e/er)+\"h\":t>=Qn?Math.round(e/Qn)+\"m\":t>=Kn?Math.round(e/Kn)+\"s\":e+\"ms\"}function uy(e){var t=Math.abs(e);return t>=vn?$i(e,t,vn,\"day\"):t>=er?$i(e,t,er,\"hour\"):t>=Qn?$i(e,t,Qn,\"minute\"):t>=Kn?$i(e,t,Kn,\"second\"):e+\" ms\"}function $i(e,t,n,r){var o=t>=n*1.5;return Math.round(e/n)+\" \"+r+(o?\"s\":\"\")}});var Js=B((Nv,ac)=>{function cy(e){n.debug=n,n.default=n,n.coerce=f,n.disable=l,n.enable=o,n.enabled=u,n.humanize=sc(),n.destroy=h,Object.keys(e).forEach(m=>{n[m]=e[m]}),n.names=[],n.skips=[],n.formatters={};function t(m){let p=0;for(let g=0;g<m.length;g++)p=(p<<5)-p+m.charCodeAt(g),p|=0;return n.colors[Math.abs(p)%n.colors.length]}n.selectColor=t;function n(m){let p,g=null,w,E;function F(...T){if(!F.enabled)return;let A=F,_=Number(new Date),I=_-(p||_);A.diff=I,A.prev=p,A.curr=_,p=_,T[0]=n.coerce(T[0]),typeof T[0]!=\"string\"&&T.unshift(\"%O\");let z=0;T[0]=T[0].replace(/%([a-zA-Z%])/g,(v,te)=>{if(v===\"%%\")return\"%\";z++;let J=n.formatters[te];if(typeof J==\"function\"){let Z=T[z];v=J.call(A,Z),T.splice(z,1),z--}return v}),n.formatArgs.call(A,T),(A.log||n.log).apply(A,T)}return F.namespace=m,F.useColors=n.useColors(),F.color=n.selectColor(m),F.extend=r,F.destroy=n.destroy,Object.defineProperty(F,\"enabled\",{enumerable:!0,configurable:!1,get:()=>g!==null?g:(w!==n.namespaces&&(w=n.namespaces,E=n.enabled(m)),E),set:T=>{g=T}}),typeof n.init==\"function\"&&n.init(F),F}function r(m,p){let g=n(this.namespace+(typeof p>\"u\"?\":\":p)+m);return g.log=this.log,g}function o(m){n.save(m),n.namespaces=m,n.names=[],n.skips=[];let p=(typeof m==\"string\"?m:\"\").trim().replace(\" \",\",\").split(\",\").filter(Boolean);for(let g of p)g[0]===\"-\"?n.skips.push(g.slice(1)):n.names.push(g)}function s(m,p){let g=0,w=0,E=-1,F=0;for(;g<m.length;)if(w<p.length&&(p[w]===m[g]||p[w]===\"*\"))p[w]===\"*\"?(E=w,F=g,w++):(g++,w++);else if(E!==-1)w=E+1,F++,g=F;else return!1;for(;w<p.length&&p[w]===\"*\";)w++;return w===p.length}function l(){let m=[...n.names,...n.skips.map(p=>\"-\"+p)].join(\",\");return n.enable(\"\"),m}function u(m){for(let p of n.skips)if(s(m,p))return!1;for(let p of n.names)if(s(m,p))return!0;return!1}function f(m){return m instanceof Error?m.stack||m.message:m}function h(){console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\")}return n.enable(n.load()),n}ac.exports=cy});var lc=B((it,Yi)=>{it.formatArgs=dy;it.save=hy;it.load=my;it.useColors=fy;it.storage=py();it.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\"))}})();it.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"];function fy(){if(typeof window<\"u\"&&window.process&&(window.process.type===\"renderer\"||window.process.__nwjs))return!0;if(typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/))return!1;let e;return typeof document<\"u\"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<\"u\"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<\"u\"&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)}function dy(e){if(e[0]=(this.useColors?\"%c\":\"\")+this.namespace+(this.useColors?\" %c\":\" \")+e[0]+(this.useColors?\"%c \":\" \")+\"+\"+Yi.exports.humanize(this.diff),!this.useColors)return;let t=\"color: \"+this.color;e.splice(1,0,t,\"color: inherit\");let n=0,r=0;e[0].replace(/%[a-zA-Z%]/g,o=>{o!==\"%%\"&&(n++,o===\"%c\"&&(r=n))}),e.splice(r,0,t)}it.log=console.debug||console.log||(()=>{});function hy(e){try{e?it.storage.setItem(\"debug\",e):it.storage.removeItem(\"debug\")}catch{}}function my(){let e;try{e=it.storage.getItem(\"debug\")}catch{}return!e&&typeof process<\"u\"&&\"env\"in process&&(e=process.env.DEBUG),e}function py(){try{return localStorage}catch{}}Yi.exports=Js()(it);var{formatters:gy}=Yi.exports;gy.j=function(e){try{return JSON.stringify(e)}catch(t){return\"[UnexpectedJSONParseError]: \"+t.message}}});var cc=B(($v,uc)=>{\"use strict\";uc.exports=(e,t=process.argv)=>{let n=e.startsWith(\"-\")?\"\":e.length===1?\"-\":\"--\",r=t.indexOf(n+e),o=t.indexOf(\"--\");return r!==-1&&(o===-1||r<o)}});var hc=B((Yv,dc)=>{\"use strict\";var wy=require(\"os\"),fc=require(\"tty\"),dt=cc(),{env:Se}=process,sn;dt(\"no-color\")||dt(\"no-colors\")||dt(\"color=false\")||dt(\"color=never\")?sn=0:(dt(\"color\")||dt(\"colors\")||dt(\"color=true\")||dt(\"color=always\"))&&(sn=1);\"FORCE_COLOR\"in Se&&(Se.FORCE_COLOR===\"true\"?sn=1:Se.FORCE_COLOR===\"false\"?sn=0:sn=Se.FORCE_COLOR.length===0?1:Math.min(parseInt(Se.FORCE_COLOR,10),3));function Zs(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Ks(e,t){if(sn===0)return 0;if(dt(\"color=16m\")||dt(\"color=full\")||dt(\"color=truecolor\"))return 3;if(dt(\"color=256\"))return 2;if(e&&!t&&sn===void 0)return 0;let n=sn||0;if(Se.TERM===\"dumb\")return n;if(process.platform===\"win32\"){let r=wy.release().split(\".\");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if(\"CI\"in Se)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\",\"GITHUB_ACTIONS\",\"BUILDKITE\"].some(r=>r in Se)||Se.CI_NAME===\"codeship\"?1:n;if(\"TEAMCITY_VERSION\"in Se)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(Se.TEAMCITY_VERSION)?1:0;if(Se.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in Se){let r=parseInt((Se.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(Se.TERM_PROGRAM){case\"iTerm.app\":return r>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(Se.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Se.TERM)||\"COLORTERM\"in Se?1:n}function yy(e){let t=Ks(e,e&&e.isTTY);return Zs(t)}dc.exports={supportsColor:yy,stdout:Zs(Ks(!0,fc.isatty(1))),stderr:Zs(Ks(!0,fc.isatty(2)))}});var pc=B((Te,zi)=>{var ky=require(\"tty\"),Bi=require(\"util\");Te.init=Sy;Te.log=Ay;Te.formatArgs=xy;Te.save=Cy;Te.load=vy;Te.useColors=by;Te.destroy=Bi.deprecate(()=>{},\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\");Te.colors=[6,2,3,4,5,1];try{let e=hc();e&&(e.stderr||e).level>=2&&(Te.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}Te.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,t)=>{let n=t.substring(6).toLowerCase().replace(/_([a-z])/g,(o,s)=>s.toUpperCase()),r=process.env[t];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r===\"null\"?r=null:r=Number(r),e[n]=r,e},{});function by(){return\"colors\"in Te.inspectOpts?!!Te.inspectOpts.colors:ky.isatty(process.stderr.fd)}function xy(e){let{namespace:t,useColors:n}=this;if(n){let r=this.color,o=\"\\x1B[3\"+(r<8?r:\"8;5;\"+r),s=`  ${o};1m${t} \\x1B[0m`;e[0]=s+e[0].split(`\n`).join(`\n`+s),e.push(o+\"m+\"+zi.exports.humanize(this.diff)+\"\\x1B[0m\")}else e[0]=Ey()+t+\" \"+e[0]}function Ey(){return Te.inspectOpts.hideDate?\"\":new Date().toISOString()+\" \"}function Ay(...e){return process.stderr.write(Bi.formatWithOptions(Te.inspectOpts,...e)+`\n`)}function Cy(e){e?process.env.DEBUG=e:delete process.env.DEBUG}function vy(){return process.env.DEBUG}function Sy(e){e.inspectOpts={};let t=Object.keys(Te.inspectOpts);for(let n=0;n<t.length;n++)e.inspectOpts[t[n]]=Te.inspectOpts[t[n]]}zi.exports=Js()(Te);var{formatters:mc}=zi.exports;mc.o=function(e){return this.inspectOpts.colors=this.useColors,Bi.inspect(e,this.inspectOpts).split(`\n`).map(t=>t.trim()).join(\" \")};mc.O=function(e){return this.inspectOpts.colors=this.useColors,Bi.inspect(e,this.inspectOpts)}});var gc=B((Bv,Qs)=>{typeof process>\"u\"||process.type===\"renderer\"||process.browser===!0||process.__nwjs?Qs.exports=lc():Qs.exports=pc()});var vc=B((ji,Cc)=>{(function(e,t){typeof ji==\"object\"&&typeof Cc<\"u\"?t(ji):typeof define==\"function\"&&define.amd?define([\"exports\"],t):(e=typeof globalThis<\"u\"?globalThis:e||self,t(e.compareVersions={}))})(ji,function(e){\"use strict\";let t=/^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i,n=T=>{if(typeof T!=\"string\")throw new TypeError(\"Invalid argument expected string\");let A=T.match(t);if(!A)throw new Error(`Invalid argument not valid semver ('${T}' received)`);return A.shift(),A},r=T=>T===\"*\"||T===\"x\"||T===\"X\",o=T=>{let A=parseInt(T,10);return isNaN(A)?T:A},s=(T,A)=>typeof T!=typeof A?[String(T),String(A)]:[T,A],l=(T,A)=>{if(r(T)||r(A))return 0;let[_,I]=s(o(T),o(A));return _>I?1:_<I?-1:0},u=(T,A)=>{for(let _=0;_<Math.max(T.length,A.length);_++){let I=l(T[_]||\"0\",A[_]||\"0\");if(I!==0)return I}return 0},f=(T,A)=>{let _=n(T),I=n(A),z=_.pop(),H=I.pop(),v=u(_,I);return v!==0?v:z&&H?u(z.split(\".\"),H.split(\".\")):z||H?z?-1:1:0},h=(T,A,_)=>{g(_);let I=f(T,A);return m[_].includes(I)},m={\">\":[1],\">=\":[0,1],\"=\":[0],\"<=\":[-1,0],\"<\":[-1],\"!=\":[-1,1]},p=Object.keys(m),g=T=>{if(typeof T!=\"string\")throw new TypeError(`Invalid operator type, expected string but got ${typeof T}`);if(p.indexOf(T)===-1)throw new Error(`Invalid operator, expected one of ${p.join(\"|\")}`)},w=(T,A)=>{if(A=A.replace(/([><=]+)\\s+/g,\"$1\"),A.includes(\"||\"))return A.split(\"||\").some(ie=>w(T,ie));if(A.includes(\" - \")){let[ie,he]=A.split(\" - \",2);return w(T,`>=${ie} <=${he}`)}else if(A.includes(\" \"))return A.trim().replace(/\\s{2,}/g,\" \").split(\" \").every(ie=>w(T,ie));let _=A.match(/^([<>=~^]+)/),I=_?_[1]:\"=\";if(I!==\"^\"&&I!==\"~\")return h(T,A,I);let[z,H,v,,te]=n(T),[J,Z,se,,ue]=n(A),re=[z,H,v],Y=[J,Z??\"x\",se??\"x\"];if(ue&&(!te||u(re,Y)!==0||u(te.split(\".\"),ue.split(\".\"))===-1))return!1;let j=Y.findIndex(ie=>ie!==\"0\")+1,V=I===\"~\"?2:j>1?j:1;return!(u(re.slice(0,V),Y.slice(0,V))!==0||u(re.slice(V),Y.slice(V))===-1)},E=T=>typeof T==\"string\"&&/^[v\\d]/.test(T)&&t.test(T),F=T=>typeof T==\"string\"&&/^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/.test(T);e.compare=h,e.compareVersions=f,e.satisfies=w,e.validate=E,e.validateStrict=F})});var Zf=B((lI,Jf)=>{\"use strict\";var go=Object.prototype.hasOwnProperty,Xf=Object.prototype.toString,Wf=Object.defineProperty,Uf=Object.getOwnPropertyDescriptor,Hf=function(t){return typeof Array.isArray==\"function\"?Array.isArray(t):Xf.call(t)===\"[object Array]\"},jf=function(t){if(!t||Xf.call(t)!==\"[object Object]\")return!1;var n=go.call(t,\"constructor\"),r=t.constructor&&t.constructor.prototype&&go.call(t.constructor.prototype,\"isPrototypeOf\");if(t.constructor&&!n&&!r)return!1;var o;for(o in t);return typeof o>\"u\"||go.call(t,o)},qf=function(t,n){Wf&&n.name===\"__proto__\"?Wf(t,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):t[n.name]=n.newValue},Gf=function(t,n){if(n===\"__proto__\")if(go.call(t,n)){if(Uf)return Uf(t,n).value}else return;return t[n]};Jf.exports=function e(){var t,n,r,o,s,l,u=arguments[0],f=1,h=arguments.length,m=!1;for(typeof u==\"boolean\"&&(m=u,u=arguments[1]||{},f=2),(u==null||typeof u!=\"object\"&&typeof u!=\"function\")&&(u={});f<h;++f)if(t=arguments[f],t!=null)for(n in t)r=Gf(u,n),o=Gf(t,n),u!==o&&(m&&o&&(jf(o)||(s=Hf(o)))?(s?(s=!1,l=r&&Hf(r)?r:[]):l=r&&jf(r)?r:{},qf(u,{name:n,newValue:e(m,l,o)})):typeof o<\"u\"&&qf(u,{name:n,newValue:o}));return u}});var ti=B((dR,Md)=>{var Px=\"2.0.0\",Rx=Number.MAX_SAFE_INTEGER||9007199254740991,Ox=16,Lx=250,Dx=[\"major\",\"premajor\",\"minor\",\"preminor\",\"patch\",\"prepatch\",\"prerelease\"];Md.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Ox,MAX_SAFE_BUILD_LENGTH:Lx,MAX_SAFE_INTEGER:Rx,RELEASE_TYPES:Dx,SEMVER_SPEC_VERSION:Px,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var ni=B((hR,Nd)=>{var Mx=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{};Nd.exports=Mx});var wr=B((Pt,$d)=>{var{MAX_SAFE_COMPONENT_LENGTH:hl,MAX_SAFE_BUILD_LENGTH:Nx,MAX_LENGTH:$x}=ti(),Yx=ni();Pt=$d.exports={};var Bx=Pt.re=[],zx=Pt.safeRe=[],D=Pt.src=[],Vx=Pt.safeSrc=[],M=Pt.t={},Wx=0,ml=\"[a-zA-Z0-9-]\",Ux=[[\"\\\\s\",1],[\"\\\\d\",$x],[ml,Nx]],Hx=e=>{for(let[t,n]of Ux)e=e.split(`${t}*`).join(`${t}{0,${n}}`).split(`${t}+`).join(`${t}{1,${n}}`);return e},X=(e,t,n)=>{let r=Hx(t),o=Wx++;Yx(e,o,t),M[e]=o,D[o]=t,Vx[o]=r,Bx[o]=new RegExp(t,n?\"g\":void 0),zx[o]=new RegExp(r,n?\"g\":void 0)};X(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");X(\"NUMERICIDENTIFIERLOOSE\",\"\\\\d+\");X(\"NONNUMERICIDENTIFIER\",`\\\\d*[a-zA-Z-]${ml}*`);X(\"MAINVERSION\",`(${D[M.NUMERICIDENTIFIER]})\\\\.(${D[M.NUMERICIDENTIFIER]})\\\\.(${D[M.NUMERICIDENTIFIER]})`);X(\"MAINVERSIONLOOSE\",`(${D[M.NUMERICIDENTIFIERLOOSE]})\\\\.(${D[M.NUMERICIDENTIFIERLOOSE]})\\\\.(${D[M.NUMERICIDENTIFIERLOOSE]})`);X(\"PRERELEASEIDENTIFIER\",`(?:${D[M.NUMERICIDENTIFIER]}|${D[M.NONNUMERICIDENTIFIER]})`);X(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${D[M.NUMERICIDENTIFIERLOOSE]}|${D[M.NONNUMERICIDENTIFIER]})`);X(\"PRERELEASE\",`(?:-(${D[M.PRERELEASEIDENTIFIER]}(?:\\\\.${D[M.PRERELEASEIDENTIFIER]})*))`);X(\"PRERELEASELOOSE\",`(?:-?(${D[M.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${D[M.PRERELEASEIDENTIFIERLOOSE]})*))`);X(\"BUILDIDENTIFIER\",`${ml}+`);X(\"BUILD\",`(?:\\\\+(${D[M.BUILDIDENTIFIER]}(?:\\\\.${D[M.BUILDIDENTIFIER]})*))`);X(\"FULLPLAIN\",`v?${D[M.MAINVERSION]}${D[M.PRERELEASE]}?${D[M.BUILD]}?`);X(\"FULL\",`^${D[M.FULLPLAIN]}$`);X(\"LOOSEPLAIN\",`[v=\\\\s]*${D[M.MAINVERSIONLOOSE]}${D[M.PRERELEASELOOSE]}?${D[M.BUILD]}?`);X(\"LOOSE\",`^${D[M.LOOSEPLAIN]}$`);X(\"GTLT\",\"((?:<|>)?=?)\");X(\"XRANGEIDENTIFIERLOOSE\",`${D[M.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);X(\"XRANGEIDENTIFIER\",`${D[M.NUMERICIDENTIFIER]}|x|X|\\\\*`);X(\"XRANGEPLAIN\",`[v=\\\\s]*(${D[M.XRANGEIDENTIFIER]})(?:\\\\.(${D[M.XRANGEIDENTIFIER]})(?:\\\\.(${D[M.XRANGEIDENTIFIER]})(?:${D[M.PRERELEASE]})?${D[M.BUILD]}?)?)?`);X(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${D[M.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${D[M.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${D[M.XRANGEIDENTIFIERLOOSE]})(?:${D[M.PRERELEASELOOSE]})?${D[M.BUILD]}?)?)?`);X(\"XRANGE\",`^${D[M.GTLT]}\\\\s*${D[M.XRANGEPLAIN]}$`);X(\"XRANGELOOSE\",`^${D[M.GTLT]}\\\\s*${D[M.XRANGEPLAINLOOSE]}$`);X(\"COERCEPLAIN\",`(^|[^\\\\d])(\\\\d{1,${hl}})(?:\\\\.(\\\\d{1,${hl}}))?(?:\\\\.(\\\\d{1,${hl}}))?`);X(\"COERCE\",`${D[M.COERCEPLAIN]}(?:$|[^\\\\d])`);X(\"COERCEFULL\",D[M.COERCEPLAIN]+`(?:${D[M.PRERELEASE]})?(?:${D[M.BUILD]})?(?:$|[^\\\\d])`);X(\"COERCERTL\",D[M.COERCE],!0);X(\"COERCERTLFULL\",D[M.COERCEFULL],!0);X(\"LONETILDE\",\"(?:~>?)\");X(\"TILDETRIM\",`(\\\\s*)${D[M.LONETILDE]}\\\\s+`,!0);Pt.tildeTrimReplace=\"$1~\";X(\"TILDE\",`^${D[M.LONETILDE]}${D[M.XRANGEPLAIN]}$`);X(\"TILDELOOSE\",`^${D[M.LONETILDE]}${D[M.XRANGEPLAINLOOSE]}$`);X(\"LONECARET\",\"(?:\\\\^)\");X(\"CARETTRIM\",`(\\\\s*)${D[M.LONECARET]}\\\\s+`,!0);Pt.caretTrimReplace=\"$1^\";X(\"CARET\",`^${D[M.LONECARET]}${D[M.XRANGEPLAIN]}$`);X(\"CARETLOOSE\",`^${D[M.LONECARET]}${D[M.XRANGEPLAINLOOSE]}$`);X(\"COMPARATORLOOSE\",`^${D[M.GTLT]}\\\\s*(${D[M.LOOSEPLAIN]})$|^$`);X(\"COMPARATOR\",`^${D[M.GTLT]}\\\\s*(${D[M.FULLPLAIN]})$|^$`);X(\"COMPARATORTRIM\",`(\\\\s*)${D[M.GTLT]}\\\\s*(${D[M.LOOSEPLAIN]}|${D[M.XRANGEPLAIN]})`,!0);Pt.comparatorTrimReplace=\"$1$2$3\";X(\"HYPHENRANGE\",`^\\\\s*(${D[M.XRANGEPLAIN]})\\\\s+-\\\\s+(${D[M.XRANGEPLAIN]})\\\\s*$`);X(\"HYPHENRANGELOOSE\",`^\\\\s*(${D[M.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${D[M.XRANGEPLAINLOOSE]})\\\\s*$`);X(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");X(\"GTE0\",\"^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$\");X(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$\")});var Io=B((mR,Yd)=>{var jx=Object.freeze({loose:!0}),qx=Object.freeze({}),Gx=e=>e?typeof e!=\"object\"?jx:e:qx;Yd.exports=Gx});var pl=B((pR,Vd)=>{var Bd=/^[0-9]+$/,zd=(e,t)=>{let n=Bd.test(e),r=Bd.test(t);return n&&r&&(e=+e,t=+t),e===t?0:n&&!r?-1:r&&!n?1:e<t?-1:1},Xx=(e,t)=>zd(t,e);Vd.exports={compareIdentifiers:zd,rcompareIdentifiers:Xx}});var $e=B((gR,jd)=>{var Po=ni(),{MAX_LENGTH:Wd,MAX_SAFE_INTEGER:Ro}=ti(),{safeRe:Ud,safeSrc:Hd,t:Oo}=wr(),Jx=Io(),{compareIdentifiers:yr}=pl(),gl=class e{constructor(t,n){if(n=Jx(n),t instanceof e){if(t.loose===!!n.loose&&t.includePrerelease===!!n.includePrerelease)return t;t=t.version}else if(typeof t!=\"string\")throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof t}\".`);if(t.length>Wd)throw new TypeError(`version is longer than ${Wd} characters`);Po(\"SemVer\",t,n),this.options=n,this.loose=!!n.loose,this.includePrerelease=!!n.includePrerelease;let r=t.trim().match(n.loose?Ud[Oo.LOOSE]:Ud[Oo.FULL]);if(!r)throw new TypeError(`Invalid Version: ${t}`);if(this.raw=t,this.major=+r[1],this.minor=+r[2],this.patch=+r[3],this.major>Ro||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>Ro||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>Ro||this.patch<0)throw new TypeError(\"Invalid patch version\");r[4]?this.prerelease=r[4].split(\".\").map(o=>{if(/^[0-9]+$/.test(o)){let s=+o;if(s>=0&&s<Ro)return s}return o}):this.prerelease=[],this.build=r[5]?r[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(t){if(Po(\"SemVer.compare\",this.version,this.options,t),!(t instanceof e)){if(typeof t==\"string\"&&t===this.version)return 0;t=new e(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(t){return t instanceof e||(t=new e(t,this.options)),yr(this.major,t.major)||yr(this.minor,t.minor)||yr(this.patch,t.patch)}comparePre(t){if(t instanceof e||(t=new e(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let n=0;do{let r=this.prerelease[n],o=t.prerelease[n];if(Po(\"prerelease compare\",n,r,o),r===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(r===void 0)return-1;if(r===o)continue;return yr(r,o)}while(++n)}compareBuild(t){t instanceof e||(t=new e(t,this.options));let n=0;do{let r=this.build[n],o=t.build[n];if(Po(\"build compare\",n,r,o),r===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(r===void 0)return-1;if(r===o)continue;return yr(r,o)}while(++n)}inc(t,n,r){if(t.startsWith(\"pre\")){if(!n&&r===!1)throw new Error(\"invalid increment argument: identifier is empty\");if(n){let o=new RegExp(`^${this.options.loose?Hd[Oo.PRERELEASELOOSE]:Hd[Oo.PRERELEASE]}$`),s=`-${n}`.match(o);if(!s||s[1]!==n)throw new Error(`invalid identifier: ${n}`)}}switch(t){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",n,r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",n,r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",n,r),this.inc(\"pre\",n,r);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",n,r),this.inc(\"pre\",n,r);break;case\"release\":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":{let o=Number(r)?1:0;if(this.prerelease.length===0)this.prerelease=[o];else{let s=this.prerelease.length;for(;--s>=0;)typeof this.prerelease[s]==\"number\"&&(this.prerelease[s]++,s=-2);if(s===-1){if(n===this.prerelease.join(\".\")&&r===!1)throw new Error(\"invalid increment argument: identifier already exists\");this.prerelease.push(o)}}if(n){let s=[n,o];r===!1&&(s=[n]),yr(this.prerelease[0],n)===0?isNaN(this.prerelease[1])&&(this.prerelease=s):this.prerelease=s}break}default:throw new Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(\".\")}`),this}};jd.exports=gl});var Ln=B((wR,Gd)=>{var qd=$e(),Zx=(e,t,n=!1)=>{if(e instanceof qd)return e;try{return new qd(e,t)}catch(r){if(!n)return null;throw r}};Gd.exports=Zx});var Jd=B((yR,Xd)=>{var Kx=Ln(),Qx=(e,t)=>{let n=Kx(e,t);return n?n.version:null};Xd.exports=Qx});var Kd=B((kR,Zd)=>{var eE=Ln(),tE=(e,t)=>{let n=eE(e.trim().replace(/^[=v]+/,\"\"),t);return n?n.version:null};Zd.exports=tE});var th=B((bR,eh)=>{var Qd=$e(),nE=(e,t,n,r,o)=>{typeof n==\"string\"&&(o=r,r=n,n=void 0);try{return new Qd(e instanceof Qd?e.version:e,n).inc(t,r,o).version}catch{return null}};eh.exports=nE});var ih=B((xR,rh)=>{var nh=Ln(),rE=(e,t)=>{let n=nh(e,null,!0),r=nh(t,null,!0),o=n.compare(r);if(o===0)return null;let s=o>0,l=s?n:r,u=s?r:n,f=!!l.prerelease.length;if(!!u.prerelease.length&&!f){if(!u.patch&&!u.minor)return\"major\";if(u.compareMain(l)===0)return u.minor&&!u.patch?\"minor\":\"patch\"}let m=f?\"pre\":\"\";return n.major!==r.major?m+\"major\":n.minor!==r.minor?m+\"minor\":n.patch!==r.patch?m+\"patch\":\"prerelease\"};rh.exports=rE});var sh=B((ER,oh)=>{var iE=$e(),oE=(e,t)=>new iE(e,t).major;oh.exports=oE});var lh=B((AR,ah)=>{var sE=$e(),aE=(e,t)=>new sE(e,t).minor;ah.exports=aE});var ch=B((CR,uh)=>{var lE=$e(),uE=(e,t)=>new lE(e,t).patch;uh.exports=uE});var dh=B((vR,fh)=>{var cE=Ln(),fE=(e,t)=>{let n=cE(e,t);return n&&n.prerelease.length?n.prerelease:null};fh.exports=fE});var mt=B((SR,mh)=>{var hh=$e(),dE=(e,t,n)=>new hh(e,n).compare(new hh(t,n));mh.exports=dE});var gh=B((TR,ph)=>{var hE=mt(),mE=(e,t,n)=>hE(t,e,n);ph.exports=mE});var yh=B((_R,wh)=>{var pE=mt(),gE=(e,t)=>pE(e,t,!0);wh.exports=gE});var Lo=B((FR,bh)=>{var kh=$e(),wE=(e,t,n)=>{let r=new kh(e,n),o=new kh(t,n);return r.compare(o)||r.compareBuild(o)};bh.exports=wE});var Eh=B((IR,xh)=>{var yE=Lo(),kE=(e,t)=>e.sort((n,r)=>yE(n,r,t));xh.exports=kE});var Ch=B((PR,Ah)=>{var bE=Lo(),xE=(e,t)=>e.sort((n,r)=>bE(r,n,t));Ah.exports=xE});var ri=B((RR,vh)=>{var EE=mt(),AE=(e,t,n)=>EE(e,t,n)>0;vh.exports=AE});var Do=B((OR,Sh)=>{var CE=mt(),vE=(e,t,n)=>CE(e,t,n)<0;Sh.exports=vE});var wl=B((LR,Th)=>{var SE=mt(),TE=(e,t,n)=>SE(e,t,n)===0;Th.exports=TE});var yl=B((DR,_h)=>{var _E=mt(),FE=(e,t,n)=>_E(e,t,n)!==0;_h.exports=FE});var Mo=B((MR,Fh)=>{var IE=mt(),PE=(e,t,n)=>IE(e,t,n)>=0;Fh.exports=PE});var No=B((NR,Ih)=>{var RE=mt(),OE=(e,t,n)=>RE(e,t,n)<=0;Ih.exports=OE});var kl=B(($R,Ph)=>{var LE=wl(),DE=yl(),ME=ri(),NE=Mo(),$E=Do(),YE=No(),BE=(e,t,n,r)=>{switch(t){case\"===\":return typeof e==\"object\"&&(e=e.version),typeof n==\"object\"&&(n=n.version),e===n;case\"!==\":return typeof e==\"object\"&&(e=e.version),typeof n==\"object\"&&(n=n.version),e!==n;case\"\":case\"=\":case\"==\":return LE(e,n,r);case\"!=\":return DE(e,n,r);case\">\":return ME(e,n,r);case\">=\":return NE(e,n,r);case\"<\":return $E(e,n,r);case\"<=\":return YE(e,n,r);default:throw new TypeError(`Invalid operator: ${t}`)}};Ph.exports=BE});var Oh=B((YR,Rh)=>{var zE=$e(),VE=Ln(),{safeRe:$o,t:Yo}=wr(),WE=(e,t)=>{if(e instanceof zE)return e;if(typeof e==\"number\"&&(e=String(e)),typeof e!=\"string\")return null;t=t||{};let n=null;if(!t.rtl)n=e.match(t.includePrerelease?$o[Yo.COERCEFULL]:$o[Yo.COERCE]);else{let f=t.includePrerelease?$o[Yo.COERCERTLFULL]:$o[Yo.COERCERTL],h;for(;(h=f.exec(e))&&(!n||n.index+n[0].length!==e.length);)(!n||h.index+h[0].length!==n.index+n[0].length)&&(n=h),f.lastIndex=h.index+h[1].length+h[2].length;f.lastIndex=-1}if(n===null)return null;let r=n[2],o=n[3]||\"0\",s=n[4]||\"0\",l=t.includePrerelease&&n[5]?`-${n[5]}`:\"\",u=t.includePrerelease&&n[6]?`+${n[6]}`:\"\";return VE(`${r}.${o}.${s}${l}${u}`,t)};Rh.exports=WE});var Dh=B((BR,Lh)=>{var bl=class{constructor(){this.max=1e3,this.map=new Map}get(t){let n=this.map.get(t);if(n!==void 0)return this.map.delete(t),this.map.set(t,n),n}delete(t){return this.map.delete(t)}set(t,n){if(!this.delete(t)&&n!==void 0){if(this.map.size>=this.max){let o=this.map.keys().next().value;this.delete(o)}this.map.set(t,n)}return this}};Lh.exports=bl});var pt=B((zR,Yh)=>{var UE=/\\s+/g,xl=class e{constructor(t,n){if(n=jE(n),t instanceof e)return t.loose===!!n.loose&&t.includePrerelease===!!n.includePrerelease?t:new e(t.raw,n);if(t instanceof El)return this.raw=t.value,this.set=[[t]],this.formatted=void 0,this;if(this.options=n,this.loose=!!n.loose,this.includePrerelease=!!n.includePrerelease,this.raw=t.trim().replace(UE,\" \"),this.set=this.raw.split(\"||\").map(r=>this.parseRange(r.trim())).filter(r=>r.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let r=this.set[0];if(this.set=this.set.filter(o=>!Nh(o[0])),this.set.length===0)this.set=[r];else if(this.set.length>1){for(let o of this.set)if(o.length===1&&QE(o[0])){this.set=[o];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted=\"\";for(let t=0;t<this.set.length;t++){t>0&&(this.formatted+=\"||\");let n=this.set[t];for(let r=0;r<n.length;r++)r>0&&(this.formatted+=\" \"),this.formatted+=n[r].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(t){let r=((this.options.includePrerelease&&ZE)|(this.options.loose&&KE))+\":\"+t,o=Mh.get(r);if(o)return o;let s=this.options.loose,l=s?et[qe.HYPHENRANGELOOSE]:et[qe.HYPHENRANGE];t=t.replace(l,uA(this.options.includePrerelease)),fe(\"hyphen replace\",t),t=t.replace(et[qe.COMPARATORTRIM],GE),fe(\"comparator trim\",t),t=t.replace(et[qe.TILDETRIM],XE),fe(\"tilde trim\",t),t=t.replace(et[qe.CARETTRIM],JE),fe(\"caret trim\",t);let u=t.split(\" \").map(p=>eA(p,this.options)).join(\" \").split(/\\s+/).map(p=>lA(p,this.options));s&&(u=u.filter(p=>(fe(\"loose invalid filter\",p,this.options),!!p.match(et[qe.COMPARATORLOOSE])))),fe(\"range list\",u);let f=new Map,h=u.map(p=>new El(p,this.options));for(let p of h){if(Nh(p))return[p];f.set(p.value,p)}f.size>1&&f.has(\"\")&&f.delete(\"\");let m=[...f.values()];return Mh.set(r,m),m}intersects(t,n){if(!(t instanceof e))throw new TypeError(\"a Range is required\");return this.set.some(r=>$h(r,n)&&t.set.some(o=>$h(o,n)&&r.every(s=>o.every(l=>s.intersects(l,n)))))}test(t){if(!t)return!1;if(typeof t==\"string\")try{t=new qE(t,this.options)}catch{return!1}for(let n=0;n<this.set.length;n++)if(cA(this.set[n],t,this.options))return!0;return!1}};Yh.exports=xl;var HE=Dh(),Mh=new HE,jE=Io(),El=ii(),fe=ni(),qE=$e(),{safeRe:et,t:qe,comparatorTrimReplace:GE,tildeTrimReplace:XE,caretTrimReplace:JE}=wr(),{FLAG_INCLUDE_PRERELEASE:ZE,FLAG_LOOSE:KE}=ti(),Nh=e=>e.value===\"<0.0.0-0\",QE=e=>e.value===\"\",$h=(e,t)=>{let n=!0,r=e.slice(),o=r.pop();for(;n&&r.length;)n=r.every(s=>o.intersects(s,t)),o=r.pop();return n},eA=(e,t)=>(fe(\"comp\",e,t),e=rA(e,t),fe(\"caret\",e),e=tA(e,t),fe(\"tildes\",e),e=oA(e,t),fe(\"xrange\",e),e=aA(e,t),fe(\"stars\",e),e),Ge=e=>!e||e.toLowerCase()===\"x\"||e===\"*\",tA=(e,t)=>e.trim().split(/\\s+/).map(n=>nA(n,t)).join(\" \"),nA=(e,t)=>{let n=t.loose?et[qe.TILDELOOSE]:et[qe.TILDE];return e.replace(n,(r,o,s,l,u)=>{fe(\"tilde\",e,r,o,s,l,u);let f;return Ge(o)?f=\"\":Ge(s)?f=`>=${o}.0.0 <${+o+1}.0.0-0`:Ge(l)?f=`>=${o}.${s}.0 <${o}.${+s+1}.0-0`:u?(fe(\"replaceTilde pr\",u),f=`>=${o}.${s}.${l}-${u} <${o}.${+s+1}.0-0`):f=`>=${o}.${s}.${l} <${o}.${+s+1}.0-0`,fe(\"tilde return\",f),f})},rA=(e,t)=>e.trim().split(/\\s+/).map(n=>iA(n,t)).join(\" \"),iA=(e,t)=>{fe(\"caret\",e,t);let n=t.loose?et[qe.CARETLOOSE]:et[qe.CARET],r=t.includePrerelease?\"-0\":\"\";return e.replace(n,(o,s,l,u,f)=>{fe(\"caret\",e,o,s,l,u,f);let h;return Ge(s)?h=\"\":Ge(l)?h=`>=${s}.0.0${r} <${+s+1}.0.0-0`:Ge(u)?s===\"0\"?h=`>=${s}.${l}.0${r} <${s}.${+l+1}.0-0`:h=`>=${s}.${l}.0${r} <${+s+1}.0.0-0`:f?(fe(\"replaceCaret pr\",f),s===\"0\"?l===\"0\"?h=`>=${s}.${l}.${u}-${f} <${s}.${l}.${+u+1}-0`:h=`>=${s}.${l}.${u}-${f} <${s}.${+l+1}.0-0`:h=`>=${s}.${l}.${u}-${f} <${+s+1}.0.0-0`):(fe(\"no pr\"),s===\"0\"?l===\"0\"?h=`>=${s}.${l}.${u}${r} <${s}.${l}.${+u+1}-0`:h=`>=${s}.${l}.${u}${r} <${s}.${+l+1}.0-0`:h=`>=${s}.${l}.${u} <${+s+1}.0.0-0`),fe(\"caret return\",h),h})},oA=(e,t)=>(fe(\"replaceXRanges\",e,t),e.split(/\\s+/).map(n=>sA(n,t)).join(\" \")),sA=(e,t)=>{e=e.trim();let n=t.loose?et[qe.XRANGELOOSE]:et[qe.XRANGE];return e.replace(n,(r,o,s,l,u,f)=>{fe(\"xRange\",e,r,o,s,l,u,f);let h=Ge(s),m=h||Ge(l),p=m||Ge(u),g=p;return o===\"=\"&&g&&(o=\"\"),f=t.includePrerelease?\"-0\":\"\",h?o===\">\"||o===\"<\"?r=\"<0.0.0-0\":r=\"*\":o&&g?(m&&(l=0),u=0,o===\">\"?(o=\">=\",m?(s=+s+1,l=0,u=0):(l=+l+1,u=0)):o===\"<=\"&&(o=\"<\",m?s=+s+1:l=+l+1),o===\"<\"&&(f=\"-0\"),r=`${o+s}.${l}.${u}${f}`):m?r=`>=${s}.0.0${f} <${+s+1}.0.0-0`:p&&(r=`>=${s}.${l}.0${f} <${s}.${+l+1}.0-0`),fe(\"xRange return\",r),r})},aA=(e,t)=>(fe(\"replaceStars\",e,t),e.trim().replace(et[qe.STAR],\"\")),lA=(e,t)=>(fe(\"replaceGTE0\",e,t),e.trim().replace(et[t.includePrerelease?qe.GTE0PRE:qe.GTE0],\"\")),uA=e=>(t,n,r,o,s,l,u,f,h,m,p,g)=>(Ge(r)?n=\"\":Ge(o)?n=`>=${r}.0.0${e?\"-0\":\"\"}`:Ge(s)?n=`>=${r}.${o}.0${e?\"-0\":\"\"}`:l?n=`>=${n}`:n=`>=${n}${e?\"-0\":\"\"}`,Ge(h)?f=\"\":Ge(m)?f=`<${+h+1}.0.0-0`:Ge(p)?f=`<${h}.${+m+1}.0-0`:g?f=`<=${h}.${m}.${p}-${g}`:e?f=`<${h}.${m}.${+p+1}-0`:f=`<=${f}`,`${n} ${f}`.trim()),cA=(e,t,n)=>{for(let r=0;r<e.length;r++)if(!e[r].test(t))return!1;if(t.prerelease.length&&!n.includePrerelease){for(let r=0;r<e.length;r++)if(fe(e[r].semver),e[r].semver!==El.ANY&&e[r].semver.prerelease.length>0){let o=e[r].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}});var ii=B((VR,Hh)=>{var oi=Symbol(\"SemVer ANY\"),vl=class e{static get ANY(){return oi}constructor(t,n){if(n=Bh(n),t instanceof e){if(t.loose===!!n.loose)return t;t=t.value}t=t.trim().split(/\\s+/).join(\" \"),Cl(\"comparator\",t,n),this.options=n,this.loose=!!n.loose,this.parse(t),this.semver===oi?this.value=\"\":this.value=this.operator+this.semver.version,Cl(\"comp\",this)}parse(t){let n=this.options.loose?zh[Vh.COMPARATORLOOSE]:zh[Vh.COMPARATOR],r=t.match(n);if(!r)throw new TypeError(`Invalid comparator: ${t}`);this.operator=r[1]!==void 0?r[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),r[2]?this.semver=new Wh(r[2],this.options.loose):this.semver=oi}toString(){return this.value}test(t){if(Cl(\"Comparator.test\",t,this.options.loose),this.semver===oi||t===oi)return!0;if(typeof t==\"string\")try{t=new Wh(t,this.options)}catch{return!1}return Al(t,this.operator,this.semver,this.options)}intersects(t,n){if(!(t instanceof e))throw new TypeError(\"a Comparator is required\");return this.operator===\"\"?this.value===\"\"?!0:new Uh(t.value,n).test(this.value):t.operator===\"\"?t.value===\"\"?!0:new Uh(this.value,n).test(t.semver):(n=Bh(n),n.includePrerelease&&(this.value===\"<0.0.0-0\"||t.value===\"<0.0.0-0\")||!n.includePrerelease&&(this.value.startsWith(\"<0.0.0\")||t.value.startsWith(\"<0.0.0\"))?!1:!!(this.operator.startsWith(\">\")&&t.operator.startsWith(\">\")||this.operator.startsWith(\"<\")&&t.operator.startsWith(\"<\")||this.semver.version===t.semver.version&&this.operator.includes(\"=\")&&t.operator.includes(\"=\")||Al(this.semver,\"<\",t.semver,n)&&this.operator.startsWith(\">\")&&t.operator.startsWith(\"<\")||Al(this.semver,\">\",t.semver,n)&&this.operator.startsWith(\"<\")&&t.operator.startsWith(\">\")))}};Hh.exports=vl;var Bh=Io(),{safeRe:zh,t:Vh}=wr(),Al=kl(),Cl=ni(),Wh=$e(),Uh=pt()});var si=B((WR,jh)=>{var fA=pt(),dA=(e,t,n)=>{try{t=new fA(t,n)}catch{return!1}return t.test(e)};jh.exports=dA});var Gh=B((UR,qh)=>{var hA=pt(),mA=(e,t)=>new hA(e,t).set.map(n=>n.map(r=>r.value).join(\" \").trim().split(\" \"));qh.exports=mA});var Jh=B((HR,Xh)=>{var pA=$e(),gA=pt(),wA=(e,t,n)=>{let r=null,o=null,s=null;try{s=new gA(t,n)}catch{return null}return e.forEach(l=>{s.test(l)&&(!r||o.compare(l)===-1)&&(r=l,o=new pA(r,n))}),r};Xh.exports=wA});var Kh=B((jR,Zh)=>{var yA=$e(),kA=pt(),bA=(e,t,n)=>{let r=null,o=null,s=null;try{s=new kA(t,n)}catch{return null}return e.forEach(l=>{s.test(l)&&(!r||o.compare(l)===1)&&(r=l,o=new yA(r,n))}),r};Zh.exports=bA});var tm=B((qR,em)=>{var Sl=$e(),xA=pt(),Qh=ri(),EA=(e,t)=>{e=new xA(e,t);let n=new Sl(\"0.0.0\");if(e.test(n)||(n=new Sl(\"0.0.0-0\"),e.test(n)))return n;n=null;for(let r=0;r<e.set.length;++r){let o=e.set[r],s=null;o.forEach(l=>{let u=new Sl(l.semver.version);switch(l.operator){case\">\":u.prerelease.length===0?u.patch++:u.prerelease.push(0),u.raw=u.format();case\"\":case\">=\":(!s||Qh(u,s))&&(s=u);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${l.operator}`)}}),s&&(!n||Qh(n,s))&&(n=s)}return n&&e.test(n)?n:null};em.exports=EA});var rm=B((GR,nm)=>{var AA=pt(),CA=(e,t)=>{try{return new AA(e,t).range||\"*\"}catch{return null}};nm.exports=CA});var Bo=B((XR,am)=>{var vA=$e(),sm=ii(),{ANY:SA}=sm,TA=pt(),_A=si(),im=ri(),om=Do(),FA=No(),IA=Mo(),PA=(e,t,n,r)=>{e=new vA(e,r),t=new TA(t,r);let o,s,l,u,f;switch(n){case\">\":o=im,s=FA,l=om,u=\">\",f=\">=\";break;case\"<\":o=om,s=IA,l=im,u=\"<\",f=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(_A(e,t,r))return!1;for(let h=0;h<t.set.length;++h){let m=t.set[h],p=null,g=null;if(m.forEach(w=>{w.semver===SA&&(w=new sm(\">=0.0.0\")),p=p||w,g=g||w,o(w.semver,p.semver,r)?p=w:l(w.semver,g.semver,r)&&(g=w)}),p.operator===u||p.operator===f||(!g.operator||g.operator===u)&&s(e,g.semver))return!1;if(g.operator===f&&l(e,g.semver))return!1}return!0};am.exports=PA});var um=B((JR,lm)=>{var RA=Bo(),OA=(e,t,n)=>RA(e,t,\">\",n);lm.exports=OA});var fm=B((ZR,cm)=>{var LA=Bo(),DA=(e,t,n)=>LA(e,t,\"<\",n);cm.exports=DA});var mm=B((KR,hm)=>{var dm=pt(),MA=(e,t,n)=>(e=new dm(e,n),t=new dm(t,n),e.intersects(t,n));hm.exports=MA});var gm=B((QR,pm)=>{var NA=si(),$A=mt();pm.exports=(e,t,n)=>{let r=[],o=null,s=null,l=e.sort((m,p)=>$A(m,p,n));for(let m of l)NA(m,t,n)?(s=m,o||(o=m)):(s&&r.push([o,s]),s=null,o=null);o&&r.push([o,null]);let u=[];for(let[m,p]of r)m===p?u.push(m):!p&&m===l[0]?u.push(\"*\"):p?m===l[0]?u.push(`<=${p}`):u.push(`${m} - ${p}`):u.push(`>=${m}`);let f=u.join(\" || \"),h=typeof t.raw==\"string\"?t.raw:String(t);return f.length<h.length?f:t}});var Em=B((eO,xm)=>{var wm=pt(),_l=ii(),{ANY:Tl}=_l,ai=si(),Fl=mt(),YA=(e,t,n={})=>{if(e===t)return!0;e=new wm(e,n),t=new wm(t,n);let r=!1;e:for(let o of e.set){for(let s of t.set){let l=zA(o,s,n);if(r=r||l!==null,l)continue e}if(r)return!1}return!0},BA=[new _l(\">=0.0.0-0\")],ym=[new _l(\">=0.0.0\")],zA=(e,t,n)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===Tl){if(t.length===1&&t[0].semver===Tl)return!0;n.includePrerelease?e=BA:e=ym}if(t.length===1&&t[0].semver===Tl){if(n.includePrerelease)return!0;t=ym}let r=new Set,o,s;for(let w of e)w.operator===\">\"||w.operator===\">=\"?o=km(o,w,n):w.operator===\"<\"||w.operator===\"<=\"?s=bm(s,w,n):r.add(w.semver);if(r.size>1)return null;let l;if(o&&s){if(l=Fl(o.semver,s.semver,n),l>0)return null;if(l===0&&(o.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let w of r){if(o&&!ai(w,String(o),n)||s&&!ai(w,String(s),n))return null;for(let E of t)if(!ai(w,String(E),n))return!1;return!0}let u,f,h,m,p=s&&!n.includePrerelease&&s.semver.prerelease.length?s.semver:!1,g=o&&!n.includePrerelease&&o.semver.prerelease.length?o.semver:!1;p&&p.prerelease.length===1&&s.operator===\"<\"&&p.prerelease[0]===0&&(p=!1);for(let w of t){if(m=m||w.operator===\">\"||w.operator===\">=\",h=h||w.operator===\"<\"||w.operator===\"<=\",o){if(g&&w.semver.prerelease&&w.semver.prerelease.length&&w.semver.major===g.major&&w.semver.minor===g.minor&&w.semver.patch===g.patch&&(g=!1),w.operator===\">\"||w.operator===\">=\"){if(u=km(o,w,n),u===w&&u!==o)return!1}else if(o.operator===\">=\"&&!ai(o.semver,String(w),n))return!1}if(s){if(p&&w.semver.prerelease&&w.semver.prerelease.length&&w.semver.major===p.major&&w.semver.minor===p.minor&&w.semver.patch===p.patch&&(p=!1),w.operator===\"<\"||w.operator===\"<=\"){if(f=bm(s,w,n),f===w&&f!==s)return!1}else if(s.operator===\"<=\"&&!ai(s.semver,String(w),n))return!1}if(!w.operator&&(s||o)&&l!==0)return!1}return!(o&&h&&!s&&l!==0||s&&m&&!o&&l!==0||g||p)},km=(e,t,n)=>{if(!e)return t;let r=Fl(e.semver,t.semver,n);return r>0?e:r<0||t.operator===\">\"&&e.operator===\">=\"?t:e},bm=(e,t,n)=>{if(!e)return t;let r=Fl(e.semver,t.semver,n);return r<0?e:r>0||t.operator===\"<\"&&e.operator===\"<=\"?t:e};xm.exports=YA});var Sm=B((tO,vm)=>{var Il=wr(),Am=ti(),VA=$e(),Cm=pl(),WA=Ln(),UA=Jd(),HA=Kd(),jA=th(),qA=ih(),GA=sh(),XA=lh(),JA=ch(),ZA=dh(),KA=mt(),QA=gh(),eC=yh(),tC=Lo(),nC=Eh(),rC=Ch(),iC=ri(),oC=Do(),sC=wl(),aC=yl(),lC=Mo(),uC=No(),cC=kl(),fC=Oh(),dC=ii(),hC=pt(),mC=si(),pC=Gh(),gC=Jh(),wC=Kh(),yC=tm(),kC=rm(),bC=Bo(),xC=um(),EC=fm(),AC=mm(),CC=gm(),vC=Em();vm.exports={parse:WA,valid:UA,clean:HA,inc:jA,diff:qA,major:GA,minor:XA,patch:JA,prerelease:ZA,compare:KA,rcompare:QA,compareLoose:eC,compareBuild:tC,sort:nC,rsort:rC,gt:iC,lt:oC,eq:sC,neq:aC,gte:lC,lte:uC,cmp:cC,coerce:fC,Comparator:dC,Range:hC,satisfies:mC,toComparators:pC,maxSatisfying:gC,minSatisfying:wC,minVersion:yC,validRange:kC,outside:bC,gtr:xC,ltr:EC,intersects:AC,simplifyRange:CC,subset:vC,SemVer:VA,re:Il.re,src:Il.src,tokens:Il.t,SEMVER_SPEC_VERSION:Am.SEMVER_SPEC_VERSION,RELEASE_TYPES:Am.RELEASE_TYPES,compareIdentifiers:Cm.compareIdentifiers,rcompareIdentifiers:Cm.rcompareIdentifiers}});var jC={};Iu(jC,{default:()=>HC});module.exports=zw(jC);var Wl=require(\"electron\"),Ul=Le(Wt(),1);function Hn(e,t){let n=Object.keys(t).map(r=>Vw(e,r,t[r]));return n.length===1?n[0]:function(){n.forEach(r=>r())}}function Vw(e,t,n){let r=e[t],o=e.hasOwnProperty(t),s=o?r:function(){return Object.getPrototypeOf(e)[t].apply(this,arguments)},l=n(s);return r&&Object.setPrototypeOf(l,r),Object.setPrototypeOf(u,l),e[t]=u,f;function u(...h){return l===s&&e[t]===u&&f(),l.apply(this,h)}function f(){e[t]===u&&(o?e[t]=s:delete e[t]),l!==s&&(l=s,Object.setPrototypeOf(u,r||Function))}}var tp=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function Ww(e){return await new Promise(t=>{let n=new FileReader;n.addEventListener(\"loadend\",r),n.readAsDataURL(e);function r(){t(n.result)}})}async function Ru(e,t){let n=await Ww(e);return new Promise(r=>{let o=new Image;o.addEventListener(\"load\",s),o.src=n;function s(){let l=document.createElement(\"canvas\"),u=l.getContext(\"2d\");if(!u)throw new Error(\"Could not get 2D context.\");let f=o.width,h=o.height;l.width=f,l.height=h,u.fillStyle=\"#fff\",u.fillRect(0,0,f,h),u.save();let m=.5;u.translate(f*m,h*m),u.drawImage(o,0,0,f,h,-f*m,-h*m,f,h),u.restore();let p=l.toDataURL(\"image/jpeg\",t),g=Uw(p);r(g)}})}function Uw(e){let n=e.split(\";base64,\")[1];if(!n)throw new Error(\"Invalid data URL\");let r=window.atob(n),o=r.length,s=new Uint8Array(o);for(let l=0;l<o;l++)s[l]=r.charCodeAt(l);return s.buffer}var Hw=require(\"obsidian\"),Ou=require(\"obsidian\"),Lu=require(\"obsidian\"),ZC=require(\"obsidian\"),KC=require(\"obsidian\");var Ut={AudioRecorder:\"audio-recorder\",Backlink:\"反向链接\",Bookmarks:\"bookmarks\",Browser:\"browser\",Canvas:\"canvas\",CommandPalette:\"command-palette\",DailyNotes:\"daily-notes\",EditorStatus:\"editor-status\",FileExplorer:\"file-explorer\",FileRecovery:\"file-recovery\",GlobalSearch:\"global-search\",Graph:\"graph\",MarkdownImporter:\"markdown-importer\",NoteComposer:\"note-composer\",OutgoingLink:\"outgoing-link\",Outline:\"outline\",PagePreview:\"page-preview\",Properties:\"properties\",Publish:\"publish\",RandomNote:\"random-note\",SlashCommand:\"slash-command\",Slides:\"slides\",Switcher:\"switcher\",Sync:\"sync\",TagPane:\"tag-pane\",Templates:\"templates\",WordCount:\"word-count\",Workspaces:\"workspaces\",ZkPrefixer:\"zk-prefixer\"},JC={AllProperties:\"all-properties\",Audio:\"audio\",Backlink:Ut.Backlink,Bookmarks:Ut.Bookmarks,Browser:\"browser\",BrowserHistory:\"browser-history\",Canvas:Ut.Canvas,Empty:\"empty\",FileExplorer:Ut.FileExplorer,FileProperties:\"file-properties\",Graph:Ut.Graph,Image:\"image\",LocalGraph:\"localgraph\",Markdown:\"markdown\",OutgoingLink:Ut.OutgoingLink,Outline:Ut.Outline,Pdf:\"pdf\",ReleaseNotes:\"release-notes\",Search:\"search\",Sync:\"sync\",Tag:\"tag\",Video:\"video\"};function jw(){return Ou.TFile}function qw(){return Lu.TFolder}function ut(e){return e.replace(/\\/?[^\\/]*$/,\"\")||\"/\"}function Ri(e,t){let n=e.vault.getFolderByPath(t);return n||(n=new(qw())(e.vault,t),n.parent=Ri(e,ut(t)),n.deleted=!0,n)}function Du(e,t){let n=e.vault.getFileByPath(t);return n||(n=new(jw())(e.vault,t),n.parent=Ri(e,ut(t)),n.deleted=!0,n)}function rn(e){return!!e.position}function vt(e){return!!e.key}var Us=Le($u(),1);var Vs=Le(Bu(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Li=\"asyncError\",Di=new Vs.default;Di.on(Li,Zw);function Mi(e){Di.emit(Li,e)}function zu(e){return Ws(e).map(t=>\"  \".repeat(t.level)+t.message).join(`\n`)}function xn(e=0){return(new Error().stack??\"\").split(`\n`).slice(e+2).join(`\n`)}function Rr(e,t){t??=globalThis.console;let n=Ws(e);for(let r of n)r.shouldClearAnsiSequence?t.error(`\\x1B[0m${r.message}\\x1B[0m`):t.error(r.message)}function Vu(e){return Di.on(Li,e),()=>Di.off(Li,e)}function Ht(e){throw e}function Zw(e){Rr(new Error(\"An unhandled error occurred executing async operation\",{cause:e}))}function Ws(e,t=0,n=[]){if(e===void 0)return n;if(!(e instanceof Error)){let o;return e===null?o=\"(null)\":typeof e==\"string\"?o=e:o=JSON.stringify(e)??\"undefined\",n.push({level:t,message:o}),n}let r=`${e.name}: ${e.message}`;if(n.push({level:t,message:r,shouldClearAnsiSequence:!0}),e.stack){let o=e.stack.startsWith(r)?e.stack.slice(r.length+1):e.stack;n.push({level:t,message:`Error stack:\n${o}`})}return e.cause!==void 0&&(n.push({level:t,message:\"Caused by:\"}),Ws(e.cause,t+1,n)),n}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function qn(e){return e.replaceAll(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function Wu(e){try{return new RegExp(e),!0}catch{return!1}}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function En(e,...t){return Kw(e)?await e(...t):e}function Kw(e){return typeof e==\"function\"}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Qw={\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\t\":\"\\\\t\",\"\\b\":\"\\\\b\",\"\\f\":\"\\\\f\",\"'\":\"\\\\'\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},ey={};for(let[e,t]of Object.entries(Qw))ey[t]=e;function Uu(e,t,n,r){return r??=n,e.slice(0,n)+t+e.slice(r)}function Or(e){return Ce(e,/\\u00A0|\\u202F/g,\" \").normalize(\"NFC\")}function Ce(e,t,n){return typeof n>\"u\"?e:(t instanceof RegExp&&!t.global&&(t=new RegExp(t.source,`${t.flags}g`)),typeof n==\"string\"?e.replaceAll(t,n):e.replaceAll(t,(r,...o)=>{let l=typeof o.at(-1)==\"object\",u=l?o.length-2:o.length-1,f={groups:l?o.at(-1):void 0,offset:o.at(u-1),source:o.at(u),substring:r},h=o.slice(0,u-1);return n(f,...h)??f.substring}))}async function Hu(e,t,n){if(typeof n==\"string\")return Ce(e,t,n);let r=[];Ce(e,t,(s,...l)=>(r.push(En(n,s,...l)),\"\"));let o=await Promise.all(r);return Ce(e,t,s=>o.shift()??s.substring)}function Ni(e,t,n){if(e.endsWith(t))return e.slice(0,-t.length);if(n)throw new Error(`String ${e} does not end with suffix ${t}`);return e}function Gn(e,t,n){if(e.startsWith(t))return e.slice(t.length);if(n)throw new Error(`String ${e} does not start with prefix ${t}`);return e}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ty=/[a-zA-Z]:\\/[^:]*$/,Tt=Us.default.posix,hv=Tt.delimiter,mv=Us.default.posix.sep,pe=Tt.basename,ke=Tt.dirname,ve=Tt.extname,pv=Tt.format;var be=Tt.join,gv=Tt.normalize,wv=Tt.parse,Xn=Tt.relative;function An(e,t){return t?`${e}.${t}`:e}function ju(...e){let t=Tt.resolve(...e);return t=ny(t),ty.exec(t)?.[0]??t}function ny(e){return Ce(e,\"\\\\\",\"/\")}var jt=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Gu=\"md\",ry=\"canvas\";function Xu(e,t,n){if(ct(t))return t.extension===n;if(typeof t==\"string\"){let r=Ze(e,t);return r?r.extension===n:ve(t).slice(1)===n}return!1}function Cn(e,t,n){if(t===null)return null;if(Ju(t))return t;let r=qu(e,t,n);if(r)return r;let o=Ku(t);return o===t?null:qu(e,o,n)}function Me(e,t,n,r){let o=Ze(e,t,r);if(!o)if(n)o=Du(e,t);else throw new Error(`File not found: ${t}`);return o}function Ze(e,t,n){let r=Cn(e,t,n);return ct(r)?r:null}function Lr(e,t,n,r){let o=_t(e,t,r);if(!o)if(n)o=Ri(e,t);else throw new Error(`Folder not found: ${t}`);return o}function _t(e,t,n){let r=Cn(e,t,n);return Hs(r)?r:null}function we(e,t){if(Ju(t))return t.path;let n=Cn(e,t);return n?n.path:Ku(t)}function Ju(e){return e instanceof jt.TAbstractFile}function qt(e,t){return Xu(e,t,ry)}function ct(e){return e instanceof jt.TFile}function Hs(e){return e instanceof jt.TFolder}function Gt(e,t){return Xu(e,t,Gu)}function Ke(e,t){return Gt(e,t)||qt(e,t)}function Zu(e,t){return Gt(e,t)?Ni(t.path,`.${Gu}`):t.path}function qu(e,t,n){return n?e.vault.getAbstractFileByPathInsensitive(t):e.vault.getAbstractFileByPath(t)}function Ku(e){return(0,jt.normalizePath)(ju(\"/\",e))}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function iy(e,t,n){let r=we(e,t),o=we(e,n),s=Me(e,o,!0),l=ve(r),u=pe(r,l),f=e.vault.getAvailablePathForAttachments;return f.isExtended?f(u,l.slice(1),s,!0):await js(e,u,l.slice(1),s,!0)}async function Jn(e,t){return ut(await iy(e,\"DUMMY_FILE.pdf\",t))}async function js(e,t,n,r,o){let s=e.vault.getConfig(\"attachmentFolderPath\"),l=s===\".\"||s===\"./\",u=null;s.startsWith(\"./\")&&(u=Gn(s,\"./\")),l?s=r?r.parent?.path??\"\":\"\":u&&(s=(r?r.parent?.getParentPrefix()??\"\":\"\")+u),s=Or(Qu(s)),t=Or(Qu(t));let f=_t(e,s,!0);!f&&u&&(o?f=Lr(e,s,!0):f=await e.vault.createFolder(s));let h=f?.getParentPrefix()??\"\";return e.vault.getAvailablePath(h+t,n)}async function qs(e,t){let n=await Jn(e,t),r=await Jn(e,be(ke(t),\"DUMMY_FILE.md\"));return n!==r}function Qu(e){return e=Ce(e,/(?:[\\\\/])+/g,\"/\"),e=Ce(e,/^\\/+|\\/+$/g,\"\"),e||\"/\"}var rc=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var W=(e=>(e.AlertModal=\"alert-modal\",e.CancelButton=\"cancel-button\",e.ConfirmModal=\"confirm-modal\",e.DateComponent=\"date-component\",e.DateTimeComponent=\"datetime-component\",e.EmailComponent=\"email-component\",e.FileComponent=\"file-component\",e.LibraryName=\"obsidian-dev-utils\",e.MonthComponent=\"month-component\",e.MultipleDropdownComponent=\"multiple-dropdown-component\",e.MultipleEmailComponent=\"multiple-email-component\",e.MultipleFileComponent=\"multiple-file-component\",e.MultipleTextComponent=\"multiple-text-component\",e.NumberComponent=\"number-component\",e.OkButton=\"ok-button\",e.PluginSettingsTab=\"plugin-settings-tab\",e.PromptModal=\"prompt-modal\",e.SelectItemModal=\"select-item-modal\",e.TextBox=\"text-box\",e.TimeComponent=\"time-component\",e.UrlComponent=\"url-component\",e.WeekComponent=\"week-component\",e))(W||{});var nc=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Gs=\"__no-plugin-id-initialized__\",ec=Gs;function ft(){return ec}function tc(e){e&&(ec=e)}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var on=class extends nc.Modal{constructor(t,n,r){super(t.app),this.resolve=n,this.containerEl.addClass(W.LibraryName,ft(),r),t.cssClass&&this.containerEl.addClass(t.cssClass)}};async function Zn(e){return await new Promise(t=>{e(t).open()})}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Xs=class extends on{options;constructor(t,n){super(t,n,W.AlertModal);let r={app:t.app,cssClass:\"\",message:t.message,okButtonText:\"OK\",title:\"\"};this.options={...r,...t}}onClose(){this.resolve()}onOpen(){this.titleEl.setText(this.options.title),this.contentEl.createEl(\"p\",{text:this.options.message});let t=new rc.ButtonComponent(this.contentEl);t.setButtonText(this.options.okButtonText),t.setCta(),t.onClick(this.close.bind(this)),t.setClass(W.OkButton)}};async function ic(e){await Zn(t=>new Xs(e,t))}var Gi=require(\"obsidian\");var ra=Le(gc(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ea=\"19.17.5\",Vi=\"obsidian-dev-utils\",wc=`.obsidian-dev-utils input[type=url] {\n  height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n  -webkit-app-region: no-drag;\n  background: var(--background-modifier-form-field);\n  border: var(--input-border-width) solid var(--background-modifier-border);\n  color: var(--text-normal);\n  font-family: inherit;\n  padding: var(--size-4-1) var(--size-4-2);\n  font-size: var(--font-ui-small);\n  border-radius: var(--input-radius);\n  outline: none;\n}\n@media (hover: hover) {\n  .obsidian-dev-utils input[type=month]:hover,\n  .obsidian-dev-utils input[type=time]:hover,\n  .obsidian-dev-utils input[type=url]:hover,\n  .obsidian-dev-utils input[type=week]:hover {\n    border-color: var(--background-modifier-border-hover);\n    transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n  }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n  border-color: var(--background-modifier-border-focus);\n  transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n  box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n  color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n  direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n  right: var(--size-4-1);\n  left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n  font-variant-numeric: tabular-nums;\n  position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n  color: var(--text-faint);\n  padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n  position: absolute;\n  left: var(--size-4-1);\n  right: auto;\n  opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n  background-color: var(--text-selection);\n  color: var(--text-normal);\n  cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n  direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n  left: auto;\n  right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n  padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n  margin-inline-start: 0;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n  margin-right: 10px;\n  margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n  height: auto;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n  background-color: #1967d2;\n  color: #fff;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n  width: 100%;\n}\n\n.obsidian-dev-utils :invalid {\n  box-shadow: 0 0 0 2px var(--text-error);\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AACE;EACE;;AAGF;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC5DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;AChDF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;EACE;EACA;;;ACPJ;EACE;;;ACFJ;EACE%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n`;(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function Ft(){}async function ta(){}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var na=class{constructor(t){this.value=t}};function yc(){try{return globalThis.require(\"obsidian/app\")}catch{return globalThis.app??Ht(new Error(\"Obsidian app not found\"))}}function an(e,t,n){let r=e;return r.obsidianDevUtilsState??={},r.obsidianDevUtilsState[t]??=new na(n)}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var kc=\",\",Wi=\"-\";function bc(){return{disable:Ty,enable:_y,get:Hi,set:Dr}}function Ui(e,t=0){let n=tr()(e);return n.log=(r,...o)=>{Fy(e,t,r,...o)},n.printStackTrace=(r,o)=>{Ac(e,r,o)},n}function Qe(e){let t=ft(),n=t===Gs?\"\":`${t}:`;return Ui(`${n}${Vi}:${e}`)}function xc(e){let t=tr().enabled(e),n=t?\"enabled\":\"disabled\",r=t?\"disable\":\"enable\",o=Hi();Dr(e),Ui(e)(`Debug messages for plugin ${e} are ${n}. See https://github.com/mnaoumov/obsidian-dev-utils/?tab=readme-ov-file#debugging how to ${r} them.`),Dr(o)}function Ty(e){let t=new Set(Hi());for(let n of Mr(e)){if(n.startsWith(Wi))continue;let r=Wi+n;t.has(n)&&t.delete(n),t.add(r)}Dr(Array.from(t))}function _y(e){let t=new Set(Hi());for(let n of Mr(e)){if(!n.startsWith(Wi)){let r=Wi+n;t.has(r)&&t.delete(r)}t.add(n)}Dr(Array.from(t))}function Hi(){return Mr(tr().load()??\"\")}function tr(){if(typeof window>\"u\")return ra.default;let e=yc();return an(e,\"debug\",ra.default).value}function Ec(){return typeof window<\"u\"}function Fy(e,t,n,...r){if(!tr().enabled(e))return;let l=(new Error().stack?.split(`\n`)??[])[4+t]??\"\";console.debug(n,...r),Ec()&&Ac(e,l,\"Debug message caller\")}function Ac(e,t,n){let r=tr()(e);if(!r.enabled)return;t||(t=\"(unavailable)\"),n||(n=\"Caller stack trace\"),r(n);let o=Ec()?`StackTraceFakeError\n`:\"\";console.debug(`${o}${t}`)}function Dr(e){tr().enable(Mr(e).join(kc))}function Mr(e){return typeof e==\"string\"?e.split(kc).filter(Boolean):e.flatMap(Mr)}var Tc=Le(vc(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Sc=`${Vi}-styles`;function _c(e,t){tc(t),xc(t);let n=an(e,\"lastLibraryVersion\",\"0.0.0\");if((0,Tc.compareVersions)(ea,n.value)<=0)return;n.value=ea;let r=Iy();r.DEBUG=bc(),document.head.querySelector(`#${Sc}`)?.remove(),document.head.createEl(\"style\",{attr:{id:Sc},text:wc})}function Iy(){return window}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var qi=class extends Gi.Plugin{get abortSignal(){return this._abortSignal}get settings(){return this._settings}get settingsClone(){return this.createPluginSettings(this.settings.toJSON())}_abortSignal;_settings;notice;consoleDebug(t,...n){Ui(this.manifest.id,1)(t,...n)}async onExternalSettingsChange(){await this.loadSettings()}async onload(){_c(this.app,this.manifest.id),this.register(Vu(()=>{this.showNotice(\"An unhandled error occurred. Please check the console for more information.\")})),await this.loadSettings();let t=this.createPluginSettingsTab();t&&this.addSettingTab(t);let n=new AbortController;this._abortSignal=n.signal,this.register(()=>{n.abort()}),await this.onloadComplete(),setTimeout(()=>{this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this))},0)}async saveSettings(t){let n=t.toJSON();this._settings=this.createPluginSettings(n),await this.saveData(n)}onLayoutReady(){}onloadComplete(){}showNotice(t){this.notice&&this.notice.hide(),this.notice=new Gi.Notice(`${this.manifest.name}\n${t}`)}async loadSettings(){let t=await this.loadData();this._settings=this.createPluginSettings(t),this.settings.shouldSaveAfterLoad&&await this.saveSettings(this._settings)}};var Rd=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Fc=\".\";function oa(e,t){if(e===t)return!0;if(typeof e!=\"object\"||typeof t!=\"object\"||e===null||t===null)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;let o=e,s=t;for(let l of n)if(!r.includes(l)||!oa(o[l],s[l]))return!1;return!0}function Ic(e,t){let n=!1;for(let r of t)n=Py(e,r)||n;return n}function Py(e,t){return Object.hasOwn(e,t)?(delete e[t],!0):!1}function nr(e,t){let n=e,r=t.split(Fc);for(let o of r){if(n===void 0)return;n=n[o]}return n}function Pc(e,t,n){let r=new Error(`Property path ${t} not found`),o=e,s=t.split(Fc);for(let u of s.slice(0,-1)){if(o===void 0)throw r;o=o[u]}let l=s.at(-1);if(o===void 0||l===void 0)throw r;o[l]=n}function rr(e,t={}){let n={functionHandlingMode:\"exclude\",maxDepth:-1,shouldCatchToJSONErrors:!1,shouldHandleCircularReferences:!1,shouldHandleErrors:!1,shouldHandleUndefined:!1,shouldSortKeys:!1,space:2,tokenSubstitutions:{circularReference:ia(\"CircularReference\"),maxDepthLimitReached:ia(\"MaxDepthLimitReached\"),toJSONFailed:ia(\"ToJSONFailed\")}},r={...n,...t,tokenSubstitutions:{...n.tokenSubstitutions,...t.tokenSubstitutions}};r.maxDepth===-1&&(r.maxDepth=1/0);let o=[],l=Xi(e,\"\",0,!0,r,o,new WeakSet),u=JSON.stringify(l,null,r.space)??\"\";return u=Ce(u,/\"\\[\\[(?<Key>[A-Za-z]+)(?<Index>\\d*)\\]\\]\"/g,(f,h,m)=>Ry({functionTexts:o,index:m?parseInt(m,10):0,key:h,substitutions:r.tokenSubstitutions})),u}function Ry(e){switch(e.key){case\"CircularReference\":return e.substitutions.circularReference;case\"Function\":return e.functionTexts[e.index]??Ht(new Error(`Function with index ${e.index.toString()} not found`));case\"MaxDepthLimitReached\":return e.substitutions.maxDepthLimitReached;case\"MaxDepthLimitReachedArray\":return`Array(${e.index.toString()})`;case\"ToJSONFailed\":return e.substitutions.toJSONFailed;case\"Undefined\":return\"undefined\";default:break}}function Oy(e,t,n,r,o,s){return t>r.maxDepth?ir(\"MaxDepthLimitReachedArray\",e.length):e.map((l,u)=>Xi(l,u.toString(),t+1,n,r,o,s))}function Ly(e,t,n){if(n.shouldHandleCircularReferences)return ir(\"CircularReference\");let r=e.constructor.name||\"Object\";throw new TypeError(`Converting circular structure to JSON\n--> starting at object with constructor '${r}'\n--- property '${t}' closes the circle`)}function Dy(e,t,n){if(n.functionHandlingMode===\"exclude\")return;let r=t.length,o=n.functionHandlingMode===\"full\"?e.toString():`function ${e.name||\"anonymous\"}() { /* ... */ }`;return t.push(o),ir(\"Function\",r)}function My(e,t,n,r,o,s,l){if(l.has(e))return Ly(e,t,o);if(l.add(e),r){let u=$y(e,t,n,o,s,l);if(u!==void 0)return u}return Array.isArray(e)?Oy(e,n,r,o,s,l):n>o.maxDepth?ir(\"MaxDepthLimitReached\"):e instanceof Error&&o.shouldHandleErrors?zu(e):Ny(e,n,r,o,s,l)}function Ny(e,t,n,r,o,s){let l=Object.entries(e);return r.shouldSortKeys&&l.sort(([u],[f])=>u.localeCompare(f)),Object.fromEntries(l.map(([u,f])=>[u,Xi(f,u,t+1,n,r,o,s)]))}function ia(e){return`{ \"[[${e}]]\": null }`}function ir(e,t){return`[[${e}${t?.toString()??\"\"}]]`}function Xi(e,t,n,r,o,s,l){return e===void 0?n===0||o.shouldHandleUndefined?ir(\"Undefined\"):void 0:typeof e==\"function\"?Dy(e,s,o):typeof e!=\"object\"||e===null?e:My(e,t,n,r,o,s,l)}function $y(e,t,n,r,o,s){let l=e.toJSON;if(typeof l==\"function\")try{let u=l.call(e,t);return Xi(u,t,n,!1,r,o,s)}catch(u){if(r.shouldCatchToJSONErrors)return ir(\"ToJSONFailed\");throw u}}var So=require(\"obsidian\");var Yy={};function Sn(e,t){let n=t||Yy,r=typeof n.includeImageAlt==\"boolean\"?n.includeImageAlt:!0,o=typeof n.includeHtml==\"boolean\"?n.includeHtml:!0;return Oc(e,r,o)}function Oc(e,t,n){if(By(e)){if(\"value\"in e)return e.type===\"html\"&&!n?\"\":e.value;if(t&&\"alt\"in e&&e.alt)return e.alt;if(\"children\"in e)return Rc(e.children,t,n)}return Array.isArray(e)?Rc(e,t,n):\"\"}function Rc(e,t,n){let r=[],o=-1;for(;++o<e.length;)r[o]=Oc(e[o],t,n);return r.join(\"\")}function By(e){return!!(e&&typeof e==\"object\")}var Lc=document.createElement(\"i\");function or(e){let t=\"&\"+e+\";\";Lc.innerHTML=t;let n=Lc.textContent;return n.charCodeAt(n.length-1)===59&&e!==\"semi\"||n===t?!1:n}function Fe(e,t,n,r){let o=e.length,s=0,l;if(t<0?t=-t>o?0:o+t:t=t>o?o:t,n=n>0?n:0,r.length<1e4)l=Array.from(r),l.unshift(t,n),e.splice(...l);else for(n&&e.splice(t,n);s<r.length;)l=r.slice(s,s+1e4),l.unshift(t,0),e.splice(...l),s+=1e4,t+=1e4}function He(e,t){return e.length>0?(Fe(e,e.length,0,t),e):t}var Dc={}.hasOwnProperty;function Mc(e){let t={},n=-1;for(;++n<e.length;)zy(t,e[n]);return t}function zy(e,t){let n;for(n in t){let o=(Dc.call(e,n)?e[n]:void 0)||(e[n]={}),s=t[n],l;if(s)for(l in s){Dc.call(o,l)||(o[l]=[]);let u=s[l];Vy(o[l],Array.isArray(u)?u:u?[u]:[])}}}function Vy(e,t){let n=-1,r=[];for(;++n<t.length;)(t[n].add===\"after\"?e:r).push(t[n]);Fe(e,0,0,r)}function Ji(e,t){let n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?\"\\uFFFD\":String.fromCodePoint(n)}function Xt(e){return e.replace(/[\\t\\n\\r ]+/g,\" \").replace(/^ | $/g,\"\").toLowerCase().toUpperCase()}var ot=ln(/[A-Za-z]/),je=ln(/[\\dA-Za-z]/),Nc=ln(/[#-'*+\\--9=?A-Z^-~]/);function Nr(e){return e!==null&&(e<32||e===127)}var $r=ln(/\\d/),$c=ln(/[\\dA-Fa-f]/),Yc=ln(/[!-/:-@[-`{-~]/);function $(e){return e!==null&&e<-2}function ye(e){return e!==null&&(e<0||e===32)}function q(e){return e===-2||e===-1||e===32}var Bc=ln(/\\p{P}|\\p{S}/u),zc=ln(/\\s/);function ln(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function G(e,t,n,r){let o=r?r-1:Number.POSITIVE_INFINITY,s=0;return l;function l(f){return q(f)?(e.enter(n),u(f)):t(f)}function u(f){return q(f)&&s++<o?(e.consume(f),u):(e.exit(n),t(f))}}var Vc={tokenize:Wy};function Wy(e){let t=e.attempt(this.parser.constructs.contentInitial,r,o),n;return t;function r(u){if(u===null){e.consume(u);return}return e.enter(\"lineEnding\"),e.consume(u),e.exit(\"lineEnding\"),G(e,t,\"linePrefix\")}function o(u){return e.enter(\"paragraph\"),s(u)}function s(u){let f=e.enter(\"chunkText\",{contentType:\"text\",previous:n});return n&&(n.next=f),n=f,l(u)}function l(u){if(u===null){e.exit(\"chunkText\"),e.exit(\"paragraph\"),e.consume(u);return}return $(u)?(e.consume(u),e.exit(\"chunkText\"),s):(e.consume(u),l)}}var Uc={tokenize:Uy},Wc={tokenize:Hy};function Uy(e){let t=this,n=[],r=0,o,s,l;return u;function u(I){if(r<n.length){let z=n[r];return t.containerState=z[1],e.attempt(z[0].continuation,f,h)(I)}return h(I)}function f(I){if(r++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,o&&_();let z=t.events.length,H=z,v;for(;H--;)if(t.events[H][0]===\"exit\"&&t.events[H][1].type===\"chunkFlow\"){v=t.events[H][1].end;break}A(r);let te=z;for(;te<t.events.length;)t.events[te][1].end={...v},te++;return Fe(t.events,H+1,0,t.events.slice(z)),t.events.length=te,h(I)}return u(I)}function h(I){if(r===n.length){if(!o)return g(I);if(o.currentConstruct&&o.currentConstruct.concrete)return E(I);t.interrupt=!!(o.currentConstruct&&!o._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(Wc,m,p)(I)}function m(I){return o&&_(),A(r),g(I)}function p(I){return t.parser.lazy[t.now().line]=r!==n.length,l=t.now().offset,E(I)}function g(I){return t.containerState={},e.attempt(Wc,w,E)(I)}function w(I){return r++,n.push([t.currentConstruct,t.containerState]),g(I)}function E(I){if(I===null){o&&_(),A(0),e.consume(I);return}return o=o||t.parser.flow(t.now()),e.enter(\"chunkFlow\",{_tokenizer:o,contentType:\"flow\",previous:s}),F(I)}function F(I){if(I===null){T(e.exit(\"chunkFlow\"),!0),A(0),e.consume(I);return}return $(I)?(e.consume(I),T(e.exit(\"chunkFlow\")),r=0,t.interrupt=void 0,u):(e.consume(I),F)}function T(I,z){let H=t.sliceStream(I);if(z&&H.push(null),I.previous=s,s&&(s.next=I),s=I,o.defineSkip(I.start),o.write(H),t.parser.lazy[I.start.line]){let v=o.events.length;for(;v--;)if(o.events[v][1].start.offset<l&&(!o.events[v][1].end||o.events[v][1].end.offset>l))return;let te=t.events.length,J=te,Z,se;for(;J--;)if(t.events[J][0]===\"exit\"&&t.events[J][1].type===\"chunkFlow\"){if(Z){se=t.events[J][1].end;break}Z=!0}for(A(r),v=te;v<t.events.length;)t.events[v][1].end={...se},v++;Fe(t.events,J+1,0,t.events.slice(te)),t.events.length=v}}function A(I){let z=n.length;for(;z-- >I;){let H=n[z];t.containerState=H[1],H[0].exit.call(t,e)}n.length=I}function _(){o.write([null]),s=void 0,o=void 0,t.containerState._closeFlow=void 0}}function Hy(e,t,n){return G(e,e.attempt(this.parser.constructs.document,t,n),\"linePrefix\",this.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)}function sr(e){if(e===null||ye(e)||zc(e))return 1;if(Bc(e))return 2}function ar(e,t,n){let r=[],o=-1;for(;++o<e.length;){let s=e[o].resolveAll;s&&!r.includes(s)&&(t=s(t,n),r.push(s))}return t}var Yr={name:\"注意\",resolveAll:jy,tokenize:qy};function jy(e,t){let n=-1,r,o,s,l,u,f,h,m;for(;++n<e.length;)if(e[n][0]===\"enter\"&&e[n][1].type===\"attentionSequence\"&&e[n][1]._close){for(r=n;r--;)if(e[r][0]===\"exit\"&&e[r][1].type===\"attentionSequence\"&&e[r][1]._open&&t.sliceSerialize(e[r][1]).charCodeAt(0)===t.sliceSerialize(e[n][1]).charCodeAt(0)){if((e[r][1]._close||e[n][1]._open)&&(e[n][1].end.offset-e[n][1].start.offset)%3&&!((e[r][1].end.offset-e[r][1].start.offset+e[n][1].end.offset-e[n][1].start.offset)%3))continue;f=e[r][1].end.offset-e[r][1].start.offset>1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;let p={...e[r][1].end},g={...e[n][1].start};Hc(p,-f),Hc(g,f),l={type:f>1?\"strongSequence\":\"emphasisSequence\",start:p,end:{...e[r][1].end}},u={type:f>1?\"strongSequence\":\"emphasisSequence\",start:{...e[n][1].start},end:g},s={type:f>1?\"strongText\":\"emphasisText\",start:{...e[r][1].end},end:{...e[n][1].start}},o={type:f>1?\"strong\":\"emphasis\",start:{...l.start},end:{...u.end}},e[r][1].end={...l.start},e[n][1].start={...u.end},h=[],e[r][1].end.offset-e[r][1].start.offset&&(h=He(h,[[\"enter\",e[r][1],t],[\"exit\",e[r][1],t]])),h=He(h,[[\"enter\",o,t],[\"enter\",l,t],[\"exit\",l,t],[\"enter\",s,t]]),h=He(h,ar(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),h=He(h,[[\"exit\",s,t],[\"enter\",u,t],[\"exit\",u,t],[\"exit\",o,t]]),e[n][1].end.offset-e[n][1].start.offset?(m=2,h=He(h,[[\"enter\",e[n][1],t],[\"exit\",e[n][1],t]])):m=0,Fe(e,r-1,n-r+3,h),n=r+h.length-m-2;break}}for(n=-1;++n<e.length;)e[n][1].type===\"attentionSequence\"&&(e[n][1].type=\"data\");return e}function qy(e,t){let n=this.parser.constructs.attentionMarkers.null,r=this.previous,o=sr(r),s;return l;function l(f){return s=f,e.enter(\"attentionSequence\"),u(f)}function u(f){if(f===s)return e.consume(f),u;let h=e.exit(\"attentionSequence\"),m=sr(f),p=!m||m===2&&o||n.includes(f),g=!o||o===2&&m||n.includes(r);return h._open=!!(s===42?p:p&&(o||!g)),h._close=!!(s===42?g:g&&(m||!p)),t(f)}}function Hc(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}var sa={name:\"自动链接\",tokenize:Gy};function Gy(e,t,n){let r=0;return o;function o(w){return e.enter(\"autolink\"),e.enter(\"autolinkMarker\"),e.consume(w),e.exit(\"autolinkMarker\"),e.enter(\"autolinkProtocol\"),s}function s(w){return ot(w)?(e.consume(w),l):w===64?n(w):h(w)}function l(w){return w===43||w===45||w===46||je(w)?(r=1,u(w)):h(w)}function u(w){return w===58?(e.consume(w),r=0,f):(w===43||w===45||w===46||je(w))&&r++<32?(e.consume(w),u):(r=0,h(w))}function f(w){return w===62?(e.exit(\"autolinkProtocol\"),e.enter(\"autolinkMarker\"),e.consume(w),e.exit(\"autolinkMarker\"),e.exit(\"autolink\"),t):w===null||w===32||w===60||Nr(w)?n(w):(e.consume(w),f)}function h(w){return w===64?(e.consume(w),m):Nc(w)?(e.consume(w),h):n(w)}function m(w){return je(w)?p(w):n(w)}function p(w){return w===46?(e.consume(w),r=0,m):w===62?(e.exit(\"autolinkProtocol\").type=\"autolinkEmail\",e.enter(\"autolinkMarker\"),e.consume(w),e.exit(\"autolinkMarker\"),e.exit(\"autolink\"),t):g(w)}function g(w){if((w===45||je(w))&&r++<63){let E=w===45?g:p;return e.consume(w),E}return n(w)}}var un={partial:!0,tokenize:Xy};function Xy(e,t,n){return r;function r(s){return q(s)?G(e,o,\"linePrefix\")(s):o(s)}function o(s){return s===null||$(s)?t(s):n(s)}}var Zi={continuation:{tokenize:Zy},exit:Ky,name:\"块引用\",tokenize:Jy};function Jy(e,t,n){let r=this;return o;function o(l){if(l===62){let u=r.containerState;return u.open||(e.enter(\"blockQuote\",{_container:!0}),u.open=!0),e.enter(\"blockQuotePrefix\"),e.enter(\"blockQuoteMarker\"),e.consume(l),e.exit(\"blockQuoteMarker\"),s}return n(l)}function s(l){return q(l)?(e.enter(\"blockQuotePrefixWhitespace\"),e.consume(l),e.exit(\"blockQuotePrefixWhitespace\"),e.exit(\"blockQuotePrefix\"),t):(e.exit(\"blockQuotePrefix\"),t(l))}}function Zy(e,t,n){let r=this;return o;function o(l){return q(l)?G(e,s,\"linePrefix\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)(l):s(l)}function s(l){return e.attempt(Zi,t,n)(l)}}function Ky(e){e.exit(\"blockQuote\")}var Ki={name:\"字符转义\",tokenize:Qy};function Qy(e,t,n){return r;function r(s){return e.enter(\"characterEscape\"),e.enter(\"escapeMarker\"),e.consume(s),e.exit(\"escapeMarker\"),o}function o(s){return Yc(s)?(e.enter(\"characterEscapeValue\"),e.consume(s),e.exit(\"characterEscapeValue\"),e.exit(\"characterEscape\"),t):n(s)}}var Qi={name:\"字符引用\",tokenize:ek};function ek(e,t,n){let r=this,o=0,s,l;return u;function u(p){return e.enter(\"characterReference\"),e.enter(\"characterReferenceMarker\"),e.consume(p),e.exit(\"characterReferenceMarker\"),f}function f(p){return p===35?(e.enter(\"characterReferenceMarkerNumeric\"),e.consume(p),e.exit(\"characterReferenceMarkerNumeric\"),h):(e.enter(\"characterReferenceValue\"),s=31,l=je,m(p))}function h(p){return p===88||p===120?(e.enter(\"characterReferenceMarkerHexadecimal\"),e.consume(p),e.exit(\"characterReferenceMarkerHexadecimal\"),e.enter(\"characterReferenceValue\"),s=6,l=$c,m):(e.enter(\"characterReferenceValue\"),s=7,l=$r,m(p))}function m(p){if(p===59&&o){let g=e.exit(\"characterReferenceValue\");return l===je&&!or(r.sliceSerialize(g))?n(p):(e.enter(\"characterReferenceMarker\"),e.consume(p),e.exit(\"characterReferenceMarker\"),e.exit(\"characterReference\"),t)}return l(p)&&o++<s?(e.consume(p),m):n(p)}}var jc={partial:!0,tokenize:nk},eo={concrete:!0,name:\"围栏代码\",tokenize:tk};function tk(e,t,n){let r=this,o={partial:!0,tokenize:H},s=0,l=0,u;return f;function f(v){return h(v)}function h(v){let te=r.events[r.events.length-1];return s=te&&te[1].type===\"linePrefix\"?te[2].sliceSerialize(te[1],!0).length:0,u=v,e.enter(\"codeFenced\"),e.enter(\"codeFencedFence\"),e.enter(\"codeFencedFenceSequence\"),m(v)}function m(v){return v===u?(l++,e.consume(v),m):l<3?n(v):(e.exit(\"codeFencedFenceSequence\"),q(v)?G(e,p,\"whitespace\")(v):p(v))}function p(v){return v===null||$(v)?(e.exit(\"codeFencedFence\"),r.interrupt?t(v):e.check(jc,F,z)(v)):(e.enter(\"codeFencedFenceInfo\"),e.enter(\"chunkString\",{contentType:\"string\"}),g(v))}function g(v){return v===null||$(v)?(e.exit(\"chunkString\"),e.exit(\"codeFencedFenceInfo\"),p(v)):q(v)?(e.exit(\"chunkString\"),e.exit(\"codeFencedFenceInfo\"),G(e,w,\"whitespace\")(v)):v===96&&v===u?n(v):(e.consume(v),g)}function w(v){return v===null||$(v)?p(v):(e.enter(\"codeFencedFenceMeta\"),e.enter(\"chunkString\",{contentType:\"string\"}),E(v))}function E(v){return v===null||$(v)?(e.exit(\"chunkString\"),e.exit(\"codeFencedFenceMeta\"),p(v)):v===96&&v===u?n(v):(e.consume(v),E)}function F(v){return e.attempt(o,z,T)(v)}function T(v){return e.enter(\"lineEnding\"),e.consume(v),e.exit(\"lineEnding\"),A}function A(v){return s>0&&q(v)?G(e,_,\"linePrefix\",s+1)(v):_(v)}function _(v){return v===null||$(v)?e.check(jc,F,z)(v):(e.enter(\"codeFlowValue\"),I(v))}function I(v){return v===null||$(v)?(e.exit(\"codeFlowValue\"),_(v)):(e.consume(v),I)}function z(v){return e.exit(\"codeFenced\"),t(v)}function H(v,te,J){let Z=0;return se;function se(V){return v.enter(\"lineEnding\"),v.consume(V),v.exit(\"lineEnding\"),ue}function ue(V){return v.enter(\"codeFencedFence\"),q(V)?G(v,re,\"linePrefix\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)(V):re(V)}function re(V){return V===u?(v.enter(\"codeFencedFenceSequence\"),Y(V)):J(V)}function Y(V){return V===u?(Z++,v.consume(V),Y):Z>=l?(v.exit(\"codeFencedFenceSequence\"),q(V)?G(v,j,\"whitespace\")(V):j(V)):J(V)}function j(V){return V===null||$(V)?(v.exit(\"codeFencedFence\"),te(V)):J(V)}}}function nk(e,t,n){let r=this;return o;function o(l){return l===null?n(l):(e.enter(\"lineEnding\"),e.consume(l),e.exit(\"lineEnding\"),s)}function s(l){return r.parser.lazy[r.now().line]?n(l):t(l)}}var Br={name:\"缩进代码\",tokenize:ik},rk={partial:!0,tokenize:ok};function ik(e,t,n){let r=this;return o;function o(h){return e.enter(\"codeIndented\"),G(e,s,\"linePrefix\",5)(h)}function s(h){let m=r.events[r.events.length-1];return m&&m[1].type===\"linePrefix\"&&m[2].sliceSerialize(m[1],!0).length>=4?l(h):n(h)}function l(h){return h===null?f(h):$(h)?e.attempt(rk,l,f)(h):(e.enter(\"codeFlowValue\"),u(h))}function u(h){return h===null||$(h)?(e.exit(\"codeFlowValue\"),l(h)):(e.consume(h),u)}function f(h){return e.exit(\"codeIndented\"),t(h)}}function ok(e,t,n){let r=this;return o;function o(l){return r.parser.lazy[r.now().line]?n(l):$(l)?(e.enter(\"lineEnding\"),e.consume(l),e.exit(\"lineEnding\"),o):G(e,s,\"linePrefix\",5)(l)}function s(l){let u=r.events[r.events.length-1];return u&&u[1].type===\"linePrefix\"&&u[2].sliceSerialize(u[1],!0).length>=4?t(l):$(l)?o(l):n(l)}}var aa={name:\"代码文本\",previous:ak,resolve:sk,tokenize:lk};function sk(e){let t=e.length-4,n=3,r,o;if((e[n][1].type===\"lineEnding\"||e[n][1].type===\"space\")&&(e[t][1].type===\"lineEnding\"||e[t][1].type===\"space\")){for(r=n;++r<t;)if(e[r][1].type===\"codeTextData\"){e[n][1].type=\"codeTextPadding\",e[t][1].type=\"codeTextPadding\",n+=2,t-=2;break}}for(r=n-1,t++;++r<=t;)o===void 0?r!==t&&e[r][1].type!==\"lineEnding\"&&(o=r):(r===t||e[r][1].type===\"lineEnding\")&&(e[o][1].type=\"codeTextData\",r!==o+2&&(e[o][1].end=e[r-1][1].end,e.splice(o+2,r-o-2),t-=r-o-2,r=o+2),o=void 0);return e}function ak(e){return e!==96||this.events[this.events.length-1][1].type===\"characterEscape\"}function lk(e,t,n){let r=this,o=0,s,l;return u;function u(g){return e.enter(\"codeText\"),e.enter(\"codeTextSequence\"),f(g)}function f(g){return g===96?(e.consume(g),o++,f):(e.exit(\"codeTextSequence\"),h(g))}function h(g){return g===null?n(g):g===32?(e.enter(\"space\"),e.consume(g),e.exit(\"space\"),h):g===96?(l=e.enter(\"codeTextSequence\"),s=0,p(g)):$(g)?(e.enter(\"lineEnding\"),e.consume(g),e.exit(\"lineEnding\"),h):(e.enter(\"codeTextData\"),m(g))}function m(g){return g===null||g===32||g===96||$(g)?(e.exit(\"codeTextData\"),h(g)):(e.consume(g),m)}function p(g){return g===96?(e.consume(g),s++,p):s===o?(e.exit(\"codeTextSequence\"),e.exit(\"codeText\"),t(g)):(l.type=\"codeTextData\",m(g))}}var to=class{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError(\"Cannot access index `\"+t+\"` in a splice buffer of size `\"+(this.left.length+this.right.length)+\"`\");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,n){let r=n??Number.POSITIVE_INFINITY;return r<this.left.length?this.left.slice(t,r):t>this.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(t,n,r){let o=n||0;this.setCursor(Math.trunc(t));let s=this.right.splice(this.right.length-o,Number.POSITIVE_INFINITY);return r&&zr(this.left,r),s.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),zr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),zr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){let n=this.left.splice(t,Number.POSITIVE_INFINITY);zr(this.right,n.reverse())}else{let n=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);zr(this.left,n.reverse())}}};function zr(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function no(e){let t={},n=-1,r,o,s,l,u,f,h,m=new to(e);for(;++n<m.length;){for(;n in t;)n=t[n];if(r=m.get(n),n&&r[1].type===\"chunkFlow\"&&m.get(n-1)[1].type===\"listItemPrefix\"&&(f=r[1]._tokenizer.events,s=0,s<f.length&&f[s][1].type===\"lineEndingBlank\"&&(s+=2),s<f.length&&f[s][1].type===\"content\"))for(;++s<f.length&&f[s][1].type!==\"content\";)f[s][1].type===\"chunkText\"&&(f[s][1]._isInFirstContentOfListItem=!0,s++);if(r[0]===\"enter\")r[1].contentType&&(Object.assign(t,uk(m,n)),n=t[n],h=!0);else if(r[1]._container){for(s=n,o=void 0;s--&&(l=m.get(s),l[1].type===\"lineEnding\"||l[1].type===\"lineEndingBlank\");)l[0]===\"enter\"&&(o&&(m.get(o)[1].type=\"lineEndingBlank\"),l[1].type=\"lineEnding\",o=s);o&&(r[1].end={...m.get(o)[1].start},u=m.slice(o,n),u.unshift(r),m.splice(o,n-o+1,u))}}return Fe(e,0,Number.POSITIVE_INFINITY,m.slice(0)),!h}function uk(e,t){let n=e.get(t)[1],r=e.get(t)[2],o=t-1,s=[],l=n._tokenizer||r.parser[n.contentType](n.start),u=l.events,f=[],h={},m,p,g=-1,w=n,E=0,F=0,T=[F];for(;w;){for(;e.get(++o)[1]!==w;);s.push(o),w._tokenizer||(m=r.sliceStream(w),w.next||m.push(null),p&&l.defineSkip(w.start),w._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=!0),l.write(m),w._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=void 0)),p=w,w=w.next}for(w=n;++g<u.length;)u[g][0]===\"exit\"&&u[g-1][0]===\"enter\"&&u[g][1].type===u[g-1][1].type&&u[g][1].start.line!==u[g][1].end.line&&(F=g+1,T.push(F),w._tokenizer=void 0,w.previous=void 0,w=w.next);for(l.events=[],w?(w._tokenizer=void 0,w.previous=void 0):T.pop(),g=T.length;g--;){let A=u.slice(T[g],T[g+1]),_=s.pop();f.push([_,_+A.length-1]),e.splice(_,2,A)}for(f.reverse(),g=-1;++g<f.length;)h[E+f[g][0]]=E+f[g][1],E+=f[g][1]-f[g][0]-1;return h}var la={resolve:fk,tokenize:dk},ck={partial:!0,tokenize:hk};function fk(e){return no(e),e}function dk(e,t){let n;return r;function r(u){return e.enter(\"content\"),n=e.enter(\"chunkContent\",{contentType:\"content\"}),o(u)}function o(u){return u===null?s(u):$(u)?e.check(ck,l,s)(u):(e.consume(u),o)}function s(u){return e.exit(\"chunkContent\"),e.exit(\"content\"),t(u)}function l(u){return e.consume(u),e.exit(\"chunkContent\"),n.next=e.enter(\"chunkContent\",{contentType:\"content\",previous:n}),n=n.next,o}}function hk(e,t,n){let r=this;return o;function o(l){return e.exit(\"chunkContent\"),e.enter(\"lineEnding\"),e.consume(l),e.exit(\"lineEnding\"),G(e,s,\"linePrefix\")}function s(l){if(l===null||$(l))return n(l);let u=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes(\"codeIndented\")&&u&&u[1].type===\"linePrefix\"&&u[2].sliceSerialize(u[1],!0).length>=4?t(l):e.interrupt(r.parser.constructs.flow,n,t)(l)}}function ro(e,t,n,r,o,s,l,u,f){let h=f||Number.POSITIVE_INFINITY,m=0;return p;function p(A){return A===60?(e.enter(r),e.enter(o),e.enter(s),e.consume(A),e.exit(s),g):A===null||A===32||A===41||Nr(A)?n(A):(e.enter(r),e.enter(l),e.enter(u),e.enter(\"chunkString\",{contentType:\"string\"}),F(A))}function g(A){return A===62?(e.enter(s),e.consume(A),e.exit(s),e.exit(o),e.exit(r),t):(e.enter(u),e.enter(\"chunkString\",{contentType:\"string\"}),w(A))}function w(A){return A===62?(e.exit(\"chunkString\"),e.exit(u),g(A)):A===null||A===60||$(A)?n(A):(e.consume(A),A===92?E:w)}function E(A){return A===60||A===62||A===92?(e.consume(A),w):w(A)}function F(A){return!m&&(A===null||A===41||ye(A))?(e.exit(\"chunkString\"),e.exit(u),e.exit(l),e.exit(r),t(A)):m<h&&A===40?(e.consume(A),m++,F):A===41?(e.consume(A),m--,F):A===null||A===32||A===40||Nr(A)?n(A):(e.consume(A),A===92?T:F)}function T(A){return A===40||A===41||A===92?(e.consume(A),F):F(A)}}function io(e,t,n,r,o,s){let l=this,u=0,f;return h;function h(w){return e.enter(r),e.enter(o),e.consume(w),e.exit(o),e.enter(s),m}function m(w){return u>999||w===null||w===91||w===93&&!f||w===94&&!u&&\"_hiddenFootnoteSupport\"in l.parser.constructs?n(w):w===93?(e.exit(s),e.enter(o),e.consume(w),e.exit(o),e.exit(r),t):$(w)?(e.enter(\"lineEnding\"),e.consume(w),e.exit(\"lineEnding\"),m):(e.enter(\"chunkString\",{contentType:\"string\"}),p(w))}function p(w){return w===null||w===91||w===93||$(w)||u++>999?(e.exit(\"chunkString\"),m(w)):(e.consume(w),f||(f=!q(w)),w===92?g:p)}function g(w){return w===91||w===92||w===93?(e.consume(w),u++,p):p(w)}}function oo(e,t,n,r,o,s){let l;return u;function u(g){return g===34||g===39||g===40?(e.enter(r),e.enter(o),e.consume(g),e.exit(o),l=g===40?41:g,f):n(g)}function f(g){return g===l?(e.enter(o),e.consume(g),e.exit(o),e.exit(r),t):(e.enter(s),h(g))}function h(g){return g===l?(e.exit(s),f(l)):g===null?n(g):$(g)?(e.enter(\"lineEnding\"),e.consume(g),e.exit(\"lineEnding\"),G(e,h,\"linePrefix\")):(e.enter(\"chunkString\",{contentType:\"string\"}),m(g))}function m(g){return g===l||g===null||$(g)?(e.exit(\"chunkString\"),h(g)):(e.consume(g),g===92?p:m)}function p(g){return g===l||g===92?(e.consume(g),m):m(g)}}function Tn(e,t){let n;return r;function r(o){return $(o)?(e.enter(\"lineEnding\"),e.consume(o),e.exit(\"lineEnding\"),n=!0,r):q(o)?G(e,r,n?\"linePrefix\":\"lineSuffix\")(o):t(o)}}var ua={name:\"定义\",tokenize:pk},mk={partial:!0,tokenize:gk};function pk(e,t,n){let r=this,o;return s;function s(w){return e.enter(\"definition\"),l(w)}function l(w){return io.call(r,e,u,n,\"definitionLabel\",\"definitionLabelMarker\",\"definitionLabelString\")(w)}function u(w){return o=Xt(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),w===58?(e.enter(\"definitionMarker\"),e.consume(w),e.exit(\"definitionMarker\"),f):n(w)}function f(w){return ye(w)?Tn(e,h)(w):h(w)}function h(w){return ro(e,m,n,\"definitionDestination\",\"definitionDestinationLiteral\",\"definitionDestinationLiteralMarker\",\"definitionDestinationRaw\",\"definitionDestinationString\")(w)}function m(w){return e.attempt(mk,p,p)(w)}function p(w){return q(w)?G(e,g,\"whitespace\")(w):g(w)}function g(w){return w===null||$(w)?(e.exit(\"definition\"),r.parser.defined.push(o),t(w)):n(w)}}function gk(e,t,n){return r;function r(u){return ye(u)?Tn(e,o)(u):n(u)}function o(u){return oo(e,s,n,\"definitionTitle\",\"definitionTitleMarker\",\"definitionTitleString\")(u)}function s(u){return q(u)?G(e,l,\"whitespace\")(u):l(u)}function l(u){return u===null||$(u)?t(u):n(u)}}var ca={name:\"硬换行转义\",tokenize:wk};function wk(e,t,n){return r;function r(s){return e.enter(\"hardBreakEscape\"),e.consume(s),o}function o(s){return $(s)?(e.exit(\"hardBreakEscape\"),t(s)):n(s)}}var fa={name:\"ATX 标题\",resolve:yk,tokenize:kk};function yk(e,t){let n=e.length-2,r=3,o,s;return e[r][1].type===\"whitespace\"&&(r+=2),n-2>r&&e[n][1].type===\"whitespace\"&&(n-=2),e[n][1].type===\"atxHeadingSequence\"&&(r===n-1||n-4>r&&e[n-2][1].type===\"whitespace\")&&(n-=r+1===n?2:4),n>r&&(o={type:\"atxHeadingText\",start:e[r][1].start,end:e[n][1].end},s={type:\"chunkText\",start:e[r][1].start,end:e[n][1].end,contentType:\"text\"},Fe(e,r,n-r+1,[[\"enter\",o,t],[\"enter\",s,t],[\"exit\",s,t],[\"exit\",o,t]])),e}function kk(e,t,n){let r=0;return o;function o(m){return e.enter(\"atxHeading\"),s(m)}function s(m){return e.enter(\"atxHeadingSequence\"),l(m)}function l(m){return m===35&&r++<6?(e.consume(m),l):m===null||ye(m)?(e.exit(\"atxHeadingSequence\"),u(m)):n(m)}function u(m){return m===35?(e.enter(\"atxHeadingSequence\"),f(m)):m===null||$(m)?(e.exit(\"atxHeading\"),t(m)):q(m)?G(e,u,\"whitespace\")(m):(e.enter(\"atxHeadingText\"),h(m))}function f(m){return m===35?(e.consume(m),f):(e.exit(\"atxHeadingSequence\"),u(m))}function h(m){return m===null||m===35||ye(m)?(e.exit(\"atxHeadingText\"),u(m)):(e.consume(m),h)}}var qc=[\"address\",\"article\",\"aside\",\"base\",\"basefont\",\"blockquote\",\"body\",\"caption\",\"center\",\"col\",\"colgroup\",\"dd\",\"details\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"frame\",\"frameset\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hr\",\"html\",\"iframe\",\"legend\",\"li\",\"link\",\"main\",\"menu\",\"menuitem\",\"nav\",\"noframes\",\"ol\",\"optgroup\",\"option\",\"p\",\"param\",\"search\",\"section\",\"summary\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"title\",\"tr\",\"track\",\"ul\"],da=[\"pre\",\"script\",\"style\",\"textarea\"];var ha={concrete:!0,name:\"HTML 流\",resolveTo:Ek,tokenize:Ak},bk={partial:!0,tokenize:vk},xk={partial:!0,tokenize:Ck};function Ek(e){let t=e.length;for(;t--&&!(e[t][0]===\"enter\"&&e[t][1].type===\"htmlFlow\"););return t>1&&e[t-2][1].type===\"linePrefix\"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function Ak(e,t,n){let r=this,o,s,l,u,f;return h;function h(k){return m(k)}function m(k){return e.enter(\"htmlFlow\"),e.enter(\"htmlFlowData\"),e.consume(k),p}function p(k){return k===33?(e.consume(k),g):k===47?(e.consume(k),s=!0,F):k===63?(e.consume(k),o=3,r.interrupt?t:x):ot(k)?(e.consume(k),l=String.fromCharCode(k),T):n(k)}function g(k){return k===45?(e.consume(k),o=2,w):k===91?(e.consume(k),o=5,u=0,E):ot(k)?(e.consume(k),o=4,r.interrupt?t:x):n(k)}function w(k){return k===45?(e.consume(k),r.interrupt?t:x):n(k)}function E(k){let Ye=\"CDATA[\";return k===Ye.charCodeAt(u++)?(e.consume(k),u===Ye.length?r.interrupt?t:re:E):n(k)}function F(k){return ot(k)?(e.consume(k),l=String.fromCharCode(k),T):n(k)}function T(k){if(k===null||k===47||k===62||ye(k)){let Ye=k===47,Rt=l.toLowerCase();return!Ye&&!s&&da.includes(Rt)?(o=1,r.interrupt?t(k):re(k)):qc.includes(l.toLowerCase())?(o=6,Ye?(e.consume(k),A):r.interrupt?t(k):re(k)):(o=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(k):s?_(k):I(k))}return k===45||je(k)?(e.consume(k),l+=String.fromCharCode(k),T):n(k)}function A(k){return k===62?(e.consume(k),r.interrupt?t:re):n(k)}function _(k){return q(k)?(e.consume(k),_):se(k)}function I(k){return k===47?(e.consume(k),se):k===58||k===95||ot(k)?(e.consume(k),z):q(k)?(e.consume(k),I):se(k)}function z(k){return k===45||k===46||k===58||k===95||je(k)?(e.consume(k),z):H(k)}function H(k){return k===61?(e.consume(k),v):q(k)?(e.consume(k),H):I(k)}function v(k){return k===null||k===60||k===61||k===62||k===96?n(k):k===34||k===39?(e.consume(k),f=k,te):q(k)?(e.consume(k),v):J(k)}function te(k){return k===f?(e.consume(k),f=null,Z):k===null||$(k)?n(k):(e.consume(k),te)}function J(k){return k===null||k===34||k===39||k===47||k===60||k===61||k===62||k===96||ye(k)?H(k):(e.consume(k),J)}function Z(k){return k===47||k===62||q(k)?I(k):n(k)}function se(k){return k===62?(e.consume(k),ue):n(k)}function ue(k){return k===null||$(k)?re(k):q(k)?(e.consume(k),ue):n(k)}function re(k){return k===45&&o===2?(e.consume(k),ie):k===60&&o===1?(e.consume(k),he):k===62&&o===4?(e.consume(k),Ie):k===63&&o===3?(e.consume(k),x):k===93&&o===5?(e.consume(k),Xe):$(k)&&(o===6||o===7)?(e.exit(\"htmlFlowData\"),e.check(bk,Pe,Y)(k)):k===null||$(k)?(e.exit(\"htmlFlowData\"),Y(k)):(e.consume(k),re)}function Y(k){return e.check(xk,j,Pe)(k)}function j(k){return e.enter(\"lineEnding\"),e.consume(k),e.exit(\"lineEnding\"),V}function V(k){return k===null||$(k)?Y(k):(e.enter(\"htmlFlowData\"),re(k))}function ie(k){return k===45?(e.consume(k),x):re(k)}function he(k){return k===47?(e.consume(k),l=\"\",me):re(k)}function me(k){if(k===62){let Ye=l.toLowerCase();return da.includes(Ye)?(e.consume(k),Ie):re(k)}return ot(k)&&l.length<8?(e.consume(k),l+=String.fromCharCode(k),me):re(k)}function Xe(k){return k===93?(e.consume(k),x):re(k)}function x(k){return k===62?(e.consume(k),Ie):k===45&&o===2?(e.consume(k),x):re(k)}function Ie(k){return k===null||$(k)?(e.exit(\"htmlFlowData\"),Pe(k)):(e.consume(k),Ie)}function Pe(k){return e.exit(\"htmlFlow\"),t(k)}}function Ck(e,t,n){let r=this;return o;function o(l){return $(l)?(e.enter(\"lineEnding\"),e.consume(l),e.exit(\"lineEnding\"),s):n(l)}function s(l){return r.parser.lazy[r.now().line]?n(l):t(l)}}function vk(e,t,n){return r;function r(o){return e.enter(\"lineEnding\"),e.consume(o),e.exit(\"lineEnding\"),e.attempt(un,t,n)}}var ma={name:\"HTML 文本\",tokenize:Sk};function Sk(e,t,n){let r=this,o,s,l;return u;function u(x){return e.enter(\"htmlText\"),e.enter(\"htmlTextData\"),e.consume(x),f}function f(x){return x===33?(e.consume(x),h):x===47?(e.consume(x),H):x===63?(e.consume(x),I):ot(x)?(e.consume(x),J):n(x)}function h(x){return x===45?(e.consume(x),m):x===91?(e.consume(x),s=0,E):ot(x)?(e.consume(x),_):n(x)}function m(x){return x===45?(e.consume(x),w):n(x)}function p(x){return x===null?n(x):x===45?(e.consume(x),g):$(x)?(l=p,he(x)):(e.consume(x),p)}function g(x){return x===45?(e.consume(x),w):p(x)}function w(x){return x===62?ie(x):x===45?g(x):p(x)}function E(x){let Ie=\"CDATA[\";return x===Ie.charCodeAt(s++)?(e.consume(x),s===Ie.length?F:E):n(x)}function F(x){return x===null?n(x):x===93?(e.consume(x),T):$(x)?(l=F,he(x)):(e.consume(x),F)}function T(x){return x===93?(e.consume(x),A):F(x)}function A(x){return x===62?ie(x):x===93?(e.consume(x),A):F(x)}function _(x){return x===null||x===62?ie(x):$(x)?(l=_,he(x)):(e.consume(x),_)}function I(x){return x===null?n(x):x===63?(e.consume(x),z):$(x)?(l=I,he(x)):(e.consume(x),I)}function z(x){return x===62?ie(x):I(x)}function H(x){return ot(x)?(e.consume(x),v):n(x)}function v(x){return x===45||je(x)?(e.consume(x),v):te(x)}function te(x){return $(x)?(l=te,he(x)):q(x)?(e.consume(x),te):ie(x)}function J(x){return x===45||je(x)?(e.consume(x),J):x===47||x===62||ye(x)?Z(x):n(x)}function Z(x){return x===47?(e.consume(x),ie):x===58||x===95||ot(x)?(e.consume(x),se):$(x)?(l=Z,he(x)):q(x)?(e.consume(x),Z):ie(x)}function se(x){return x===45||x===46||x===58||x===95||je(x)?(e.consume(x),se):ue(x)}function ue(x){return x===61?(e.consume(x),re):$(x)?(l=ue,he(x)):q(x)?(e.consume(x),ue):Z(x)}function re(x){return x===null||x===60||x===61||x===62||x===96?n(x):x===34||x===39?(e.consume(x),o=x,Y):$(x)?(l=re,he(x)):q(x)?(e.consume(x),re):(e.consume(x),j)}function Y(x){return x===o?(e.consume(x),o=void 0,V):x===null?n(x):$(x)?(l=Y,he(x)):(e.consume(x),Y)}function j(x){return x===null||x===34||x===39||x===60||x===61||x===96?n(x):x===47||x===62||ye(x)?Z(x):(e.consume(x),j)}function V(x){return x===47||x===62||ye(x)?Z(x):n(x)}function ie(x){return x===62?(e.consume(x),e.exit(\"htmlTextData\"),e.exit(\"htmlText\"),t):n(x)}function he(x){return e.exit(\"htmlTextData\"),e.enter(\"lineEnding\"),e.consume(x),e.exit(\"lineEnding\"),me}function me(x){return q(x)?G(e,Xe,\"linePrefix\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)(x):Xe(x)}function Xe(x){return e.enter(\"htmlTextData\"),l(x)}}var _n={name:\"标签结束\",resolveAll:Ik,resolveTo:Pk,tokenize:Rk},Tk={tokenize:Ok},_k={tokenize:Lk},Fk={tokenize:Dk};function Ik(e){let t=-1,n=[];for(;++t<e.length;){let r=e[t][1];if(n.push(e[t]),r.type===\"labelImage\"||r.type===\"labelLink\"||r.type===\"labelEnd\"){let o=r.type===\"labelImage\"?4:2;r.type=\"data\",t+=o}}return e.length!==n.length&&Fe(e,0,e.length,n),e}function Pk(e,t){let n=e.length,r=0,o,s,l,u;for(;n--;)if(o=e[n][1],s){if(o.type===\"link\"||o.type===\"labelLink\"&&o._inactive)break;e[n][0]===\"enter\"&&o.type===\"labelLink\"&&(o._inactive=!0)}else if(l){if(e[n][0]===\"enter\"&&(o.type===\"labelImage\"||o.type===\"labelLink\")&&!o._balanced&&(s=n,o.type!==\"labelLink\")){r=2;break}}else o.type===\"labelEnd\"&&(l=n);let f={type:e[s][1].type===\"labelLink\"?\"link\":\"image\",start:{...e[s][1].start},end:{...e[e.length-1][1].end}},h={type:\"label\",start:{...e[s][1].start},end:{...e[l][1].end}},m={type:\"labelText\",start:{...e[s+r+2][1].end},end:{...e[l-2][1].start}};return u=[[\"enter\",f,t],[\"enter\",h,t]],u=He(u,e.slice(s+1,s+r+3)),u=He(u,[[\"enter\",m,t]]),u=He(u,ar(t.parser.constructs.insideSpan.null,e.slice(s+r+4,l-3),t)),u=He(u,[[\"exit\",m,t],e[l-2],e[l-1],[\"exit\",h,t]]),u=He(u,e.slice(l+1)),u=He(u,[[\"exit\",f,t]]),Fe(e,s,e.length,u),e}function Rk(e,t,n){let r=this,o=r.events.length,s,l;for(;o--;)if((r.events[o][1].type===\"labelImage\"||r.events[o][1].type===\"labelLink\")&&!r.events[o][1]._balanced){s=r.events[o][1];break}return u;function u(g){return s?s._inactive?p(g):(l=r.parser.defined.includes(Xt(r.sliceSerialize({start:s.end,end:r.now()}))),e.enter(\"labelEnd\"),e.enter(\"labelMarker\"),e.consume(g),e.exit(\"labelMarker\"),e.exit(\"labelEnd\"),f):n(g)}function f(g){return g===40?e.attempt(Tk,m,l?m:p)(g):g===91?e.attempt(_k,m,l?h:p)(g):l?m(g):p(g)}function h(g){return e.attempt(Fk,m,p)(g)}function m(g){return t(g)}function p(g){return s._balanced=!0,n(g)}}function Ok(e,t,n){return r;function r(p){return e.enter(\"resource\"),e.enter(\"resourceMarker\"),e.consume(p),e.exit(\"resourceMarker\"),o}function o(p){return ye(p)?Tn(e,s)(p):s(p)}function s(p){return p===41?m(p):ro(e,l,u,\"resourceDestination\",\"resourceDestinationLiteral\",\"resourceDestinationLiteralMarker\",\"resourceDestinationRaw\",\"resourceDestinationString\",32)(p)}function l(p){return ye(p)?Tn(e,f)(p):m(p)}function u(p){return n(p)}function f(p){return p===34||p===39||p===40?oo(e,h,n,\"resourceTitle\",\"resourceTitleMarker\",\"resourceTitleString\")(p):m(p)}function h(p){return ye(p)?Tn(e,m)(p):m(p)}function m(p){return p===41?(e.enter(\"resourceMarker\"),e.consume(p),e.exit(\"resourceMarker\"),e.exit(\"resource\"),t):n(p)}}function Lk(e,t,n){let r=this;return o;function o(u){return io.call(r,e,s,l,\"reference\",\"referenceMarker\",\"referenceString\")(u)}function s(u){return r.parser.defined.includes(Xt(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?t(u):n(u)}function l(u){return n(u)}}function Dk(e,t,n){return r;function r(s){return e.enter(\"reference\"),e.enter(\"referenceMarker\"),e.consume(s),e.exit(\"referenceMarker\"),o}function o(s){return s===93?(e.enter(\"referenceMarker\"),e.consume(s),e.exit(\"referenceMarker\"),e.exit(\"reference\"),t):n(s)}}var pa={name:\"图片标签开始\",resolveAll:_n.resolveAll,tokenize:Mk};function Mk(e,t,n){let r=this;return o;function o(u){return e.enter(\"labelImage\"),e.enter(\"labelImageMarker\"),e.consume(u),e.exit(\"labelImageMarker\"),s}function s(u){return u===91?(e.enter(\"labelMarker\"),e.consume(u),e.exit(\"labelMarker\"),e.exit(\"labelImage\"),l):n(u)}function l(u){return u===94&&\"_hiddenFootnoteSupport\"in r.parser.constructs?n(u):t(u)}}var ga={name:\"链接标签开始\",resolveAll:_n.resolveAll,tokenize:Nk};function Nk(e,t,n){let r=this;return o;function o(l){return e.enter(\"labelLink\"),e.enter(\"labelMarker\"),e.consume(l),e.exit(\"labelMarker\"),e.exit(\"labelLink\"),s}function s(l){return l===94&&\"_hiddenFootnoteSupport\"in r.parser.constructs?n(l):t(l)}}var Vr={name:\"行尾\",tokenize:$k};function $k(e,t){return n;function n(r){return e.enter(\"lineEnding\"),e.consume(r),e.exit(\"lineEnding\"),G(e,t,\"linePrefix\")}}var Fn={name:\"主题分隔线\",tokenize:Yk};function Yk(e,t,n){let r=0,o;return s;function s(h){return e.enter(\"thematicBreak\"),l(h)}function l(h){return o=h,u(h)}function u(h){return h===o?(e.enter(\"thematicBreakSequence\"),f(h)):r>=3&&(h===null||$(h))?(e.exit(\"thematicBreak\"),t(h)):n(h)}function f(h){return h===o?(e.consume(h),r++,f):(e.exit(\"thematicBreakSequence\"),q(h)?G(e,u,\"whitespace\")(h):u(h))}}var Ne={continuation:{tokenize:Wk},exit:Hk,name:\"列表\",tokenize:Vk},Bk={partial:!0,tokenize:jk},zk={partial:!0,tokenize:Uk};function Vk(e,t,n){let r=this,o=r.events[r.events.length-1],s=o&&o[1].type===\"linePrefix\"?o[2].sliceSerialize(o[1],!0).length:0,l=0;return u;function u(w){let E=r.containerState.type||(w===42||w===43||w===45?\"listUnordered\":\"listOrdered\");if(E===\"listUnordered\"?!r.containerState.marker||w===r.containerState.marker:$r(w)){if(r.containerState.type||(r.containerState.type=E,e.enter(E,{_container:!0})),E===\"listUnordered\")return e.enter(\"listItemPrefix\"),w===42||w===45?e.check(Fn,n,h)(w):h(w);if(!r.interrupt||w===49)return e.enter(\"listItemPrefix\"),e.enter(\"listItemValue\"),f(w)}return n(w)}function f(w){return $r(w)&&++l<10?(e.consume(w),f):(!r.interrupt||l<2)&&(r.containerState.marker?w===r.containerState.marker:w===41||w===46)?(e.exit(\"listItemValue\"),h(w)):n(w)}function h(w){return e.enter(\"listItemMarker\"),e.consume(w),e.exit(\"listItemMarker\"),r.containerState.marker=r.containerState.marker||w,e.check(un,r.interrupt?n:m,e.attempt(Bk,g,p))}function m(w){return r.containerState.initialBlankLine=!0,s++,g(w)}function p(w){return q(w)?(e.enter(\"listItemPrefixWhitespace\"),e.consume(w),e.exit(\"listItemPrefixWhitespace\"),g):n(w)}function g(w){return r.containerState.size=s+r.sliceSerialize(e.exit(\"listItemPrefix\"),!0).length,t(w)}}function Wk(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(un,o,s);function o(u){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,G(e,t,\"listItemIndent\",r.containerState.size+1)(u)}function s(u){return r.containerState.furtherBlankLines||!q(u)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,l(u)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(zk,t,l)(u))}function l(u){return r.containerState._closeFlow=!0,r.interrupt=void 0,G(e,e.attempt(Ne,t,n),\"linePrefix\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:4)(u)}}function Uk(e,t,n){let r=this;return G(e,o,\"listItemIndent\",r.containerState.size+1);function o(s){let l=r.events[r.events.length-1];return l&&l[1].type===\"listItemIndent\"&&l[2].sliceSerialize(l[1],!0).length===r.containerState.size?t(s):n(s)}}function Hk(e){e.exit(this.containerState.type)}function jk(e,t,n){let r=this;return G(e,o,\"listItemPrefixWhitespace\",r.parser.constructs.disable.null.includes(\"codeIndented\")?void 0:5);function o(s){let l=r.events[r.events.length-1];return!q(s)&&l&&l[1].type===\"listItemPrefixWhitespace\"?t(s):n(s)}}var so={name:\"Setext 下划线\",resolveTo:qk,tokenize:Gk};function qk(e,t){let n=e.length,r,o,s;for(;n--;)if(e[n][0]===\"enter\"){if(e[n][1].type===\"content\"){r=n;break}e[n][1].type===\"paragraph\"&&(o=n)}else e[n][1].type===\"content\"&&e.splice(n,1),!s&&e[n][1].type===\"definition\"&&(s=n);let l={type:\"setextHeading\",start:{...e[o][1].start},end:{...e[e.length-1][1].end}};return e[o][1].type=\"setextHeadingText\",s?(e.splice(o,0,[\"enter\",l,t]),e.splice(s+1,0,[\"exit\",e[r][1],t]),e[r][1].end={...e[s][1].end}):e[r][1]=l,e.push([\"exit\",l,t]),e}function Gk(e,t,n){let r=this,o;return s;function s(h){let m=r.events.length,p;for(;m--;)if(r.events[m][1].type!==\"lineEnding\"&&r.events[m][1].type!==\"linePrefix\"&&r.events[m][1].type!==\"content\"){p=r.events[m][1].type===\"paragraph\";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||p)?(e.enter(\"setextHeadingLine\"),o=h,l(h)):n(h)}function l(h){return e.enter(\"setextHeadingLineSequence\"),u(h)}function u(h){return h===o?(e.consume(h),u):(e.exit(\"setextHeadingLineSequence\"),q(h)?G(e,f,\"lineSuffix\")(h):f(h))}function f(h){return h===null||$(h)?(e.exit(\"setextHeadingLine\"),t(h)):n(h)}}var Gc={tokenize:Xk};function Xk(e){let t=this,n=e.attempt(un,r,e.attempt(this.parser.constructs.flowInitial,o,G(e,e.attempt(this.parser.constructs.flow,o,e.attempt(la,o)),\"linePrefix\")));return n;function r(s){if(s===null){e.consume(s);return}return e.enter(\"lineEndingBlank\"),e.consume(s),e.exit(\"lineEndingBlank\"),t.currentConstruct=void 0,n}function o(s){if(s===null){e.consume(s);return}return e.enter(\"lineEnding\"),e.consume(s),e.exit(\"lineEnding\"),t.currentConstruct=void 0,n}}var Xc={resolveAll:Qc()},Jc=Kc(\"string\"),Zc=Kc(\"text\");function Kc(e){return{resolveAll:Qc(e===\"text\"?Jk:void 0),tokenize:t};function t(n){let r=this,o=this.parser.constructs[e],s=n.attempt(o,l,u);return l;function l(m){return h(m)?s(m):u(m)}function u(m){if(m===null){n.consume(m);return}return n.enter(\"data\"),n.consume(m),f}function f(m){return h(m)?(n.exit(\"data\"),s(m)):(n.consume(m),f)}function h(m){if(m===null)return!0;let p=o[m],g=-1;if(p)for(;++g<p.length;){let w=p[g];if(!w.previous||w.previous.call(r,r.previous))return!0}return!1}}}function Qc(e){return t;function t(n,r){let o=-1,s;for(;++o<=n.length;)s===void 0?n[o]&&n[o][1].type===\"data\"&&(s=o,o++):(!n[o]||n[o][1].type!==\"data\")&&(o!==s+2&&(n[s][1].end=n[o-1][1].end,n.splice(s+2,o-s-2),o=s+2),s=void 0);return e?e(n,r):n}}function Jk(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||e[n][1].type===\"lineEnding\")&&e[n-1][1].type===\"data\"){let r=e[n-1][1],o=t.sliceStream(r),s=o.length,l=-1,u=0,f;for(;s--;){let h=o[s];if(typeof h==\"string\"){for(l=h.length;h.charCodeAt(l-1)===32;)u++,l--;if(l)break;l=-1}else if(h===-2)f=!0,u++;else if(h!==-1){s++;break}}if(u){let h={type:n===e.length||f||u<2?\"lineSuffix\":\"hardBreakTrailing\",start:{_bufferIndex:s?l:r.start._bufferIndex+l,_index:r.start._index+s,line:r.end.line,column:r.end.column-u,offset:r.end.offset-u},end:{...r.end}};r.end={...h.start},r.start.offset===r.end.offset?Object.assign(r,h):(e.splice(n,0,[\"enter\",h,t],[\"exit\",h,t]),n+=2)}n++}return e}var wa={};Iu(wa,{attentionMarkers:()=>ib,contentInitial:()=>Kk,disable:()=>ob,document:()=>Zk,flow:()=>eb,flowInitial:()=>Qk,insideSpan:()=>rb,string:()=>tb,text:()=>nb});var Zk={42:Ne,43:Ne,45:Ne,48:Ne,49:Ne,50:Ne,51:Ne,52:Ne,53:Ne,54:Ne,55:Ne,56:Ne,57:Ne,62:Zi},Kk={91:ua},Qk={[-2]:Br,[-1]:Br,32:Br},eb={35:fa,42:Fn,45:[so,Fn],60:ha,61:so,95:Fn,96:eo,126:eo},tb={38:Qi,92:Ki},nb={[-5]:Vr,[-4]:Vr,[-3]:Vr,33:pa,38:Qi,42:Yr,60:[sa,ma],91:ga,92:[ca,Ki],93:_n,95:Yr,96:aa},rb={null:[Yr,Xc]},ib={null:[42,95]},ob={null:[]};function ef(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},o={},s=[],l=[],u=[],f=!0,h={attempt:Z(te),check:Z(J),consume:z,enter:H,exit:v,interrupt:Z(J,{interrupt:!0})},m={code:null,containerState:{},defineSkip:A,events:[],now:T,parser:e,previous:null,sliceSerialize:E,sliceStream:F,write:w},p=t.tokenize.call(m,h),g;return t.resolveAll&&s.push(t),m;function w(Y){return l=He(l,Y),_(),l[l.length-1]!==null?[]:(se(t,0),m.events=ar(s,m.events,m),m.events)}function E(Y,j){return ab(F(Y),j)}function F(Y){return sb(l,Y)}function T(){let{_bufferIndex:Y,_index:j,line:V,column:ie,offset:he}=r;return{_bufferIndex:Y,_index:j,line:V,column:ie,offset:he}}function A(Y){o[Y.line]=Y.column,re()}function _(){let Y;for(;r._index<l.length;){let j=l[r._index];if(typeof j==\"string\")for(Y=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===Y&&r._bufferIndex<j.length;)I(j.charCodeAt(r._bufferIndex));else I(j)}}function I(Y){f=void 0,g=Y,p=p(Y)}function z(Y){$(Y)?(r.line++,r.column=1,r.offset+=Y===-3?2:1,re()):Y!==-1&&(r.column++,r.offset++),r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===l[r._index].length&&(r._bufferIndex=-1,r._index++)),m.previous=Y,f=!0}function H(Y,j){let V=j||{};return V.type=Y,V.start=T(),m.events.push([\"enter\",V,m]),u.push(V),V}function v(Y){let j=u.pop();return j.end=T(),m.events.push([\"exit\",j,m]),j}function te(Y,j){se(Y,j.from)}function J(Y,j){j.restore()}function Z(Y,j){return V;function V(ie,he,me){let Xe,x,Ie,Pe;return Array.isArray(ie)?Ye(ie):\"tokenize\"in ie?Ye([ie]):k(ie);function k(Ee){return wn;function wn(gt){let Ot=gt!==null&&Ee[gt],Qt=gt!==null&&Ee.null,xr=[...Array.isArray(Ot)?Ot:Ot?[Ot]:[],...Array.isArray(Qt)?Qt:Qt?[Qt]:[]];return Ye(xr)(gt)}}function Ye(Ee){return Xe=Ee,x=0,Ee.length===0?me:Rt(Ee[x])}function Rt(Ee){return wn;function wn(gt){return Pe=ue(),Ie=Ee,Ee.partial||(m.currentConstruct=Ee),Ee.name&&m.parser.constructs.disable.null.includes(Ee.name)?gn(gt):Ee.tokenize.call(j?Object.assign(Object.create(m),j):m,h,Kt,gn)(gt)}}function Kt(Ee){return f=!0,Y(Ie,Pe),he}function gn(Ee){return f=!0,Pe.restore(),++x<Xe.length?Rt(Xe[x]):me}}}function se(Y,j){Y.resolveAll&&!s.includes(Y)&&s.push(Y),Y.resolve&&Fe(m.events,j,m.events.length-j,Y.resolve(m.events.slice(j),m)),Y.resolveTo&&(m.events=Y.resolveTo(m.events,m))}function ue(){let Y=T(),j=m.previous,V=m.currentConstruct,ie=m.events.length,he=Array.from(u);return{from:ie,restore:me};function me(){r=Y,m.previous=j,m.currentConstruct=V,m.events.length=ie,u=he,re()}}function re(){r.line in o&&r.column<2&&(r.column=o[r.line],r.offset+=o[r.line]-1)}}function sb(e,t){let n=t.start._index,r=t.start._bufferIndex,o=t.end._index,s=t.end._bufferIndex,l;if(n===o)l=[e[n].slice(r,s)];else{if(l=e.slice(n,o),r>-1){let u=l[0];typeof u==\"string\"?l[0]=u.slice(r):l.shift()}s>0&&l.push(e[o].slice(0,s))}return l}function ab(e,t){let n=-1,r=[],o;for(;++n<e.length;){let s=e[n],l;if(typeof s==\"string\")l=s;else switch(s){case-5:{l=\"\\r\";break}case-4:{l=`\n`;break}case-3:{l=`\\r\n`;break}case-2:{l=t?\" \":\"\t\";break}case-1:{if(!t&&o)continue;l=\" \";break}default:l=String.fromCharCode(s)}o=s===-2,r.push(l)}return r.join(\"\")}function ya(e){let r={constructs:Mc([wa,...(e||{}).extensions||[]]),content:o(Vc),defined:[],document:o(Uc),flow:o(Gc),lazy:{},string:o(Jc),text:o(Zc)};return r;function o(s){return l;function l(u){return ef(r,s,u)}}}function ka(e){for(;!no(e););return e}var tf=/[\\0\\t\\n\\r]/g;function ba(){let e=1,t=\"\",n=!0,r;return o;function o(s,l,u){let f=[],h,m,p,g,w;for(s=t+(typeof s==\"string\"?s.toString():new TextDecoder(l||void 0).decode(s)),p=0,t=\"\",n&&(s.charCodeAt(0)===65279&&p++,n=void 0);p<s.length;){if(tf.lastIndex=p,h=tf.exec(s),g=h&&h.index!==void 0?h.index:s.length,w=s.charCodeAt(g),!h){t=s.slice(p);break}if(w===10&&p===g&&r)f.push(-3),r=void 0;else switch(r&&(f.push(-5),r=void 0),p<g&&(f.push(s.slice(p,g)),e+=g-p),w){case 0:{f.push(65533),e++;break}case 9:{for(m=Math.ceil(e/4)*4,f.push(-2);e++<m;)f.push(-1);break}case 10:{f.push(-4),e=1;break}default:r=!0,e=1}p=g+1}return u&&(r&&f.push(-5),t&&f.push(t),f.push(null)),f}}var lb=/\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;function ao(e){return e.replace(lb,ub)}function ub(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){let o=n.charCodeAt(1),s=o===120||o===88;return Ji(n.slice(s?2:1),s?16:10)}return or(n)||e}function cn(e){return!e||typeof e!=\"object\"?\"\":\"position\"in e||\"type\"in e?nf(e.position):\"start\"in e||\"end\"in e?nf(e):\"line\"in e||\"column\"in e?xa(e):\"\"}function xa(e){return rf(e&&e.line)+\":\"+rf(e&&e.column)}function nf(e){return xa(e&&e.start)+\"-\"+xa(e&&e.end)}function rf(e){return e&&typeof e==\"number\"?e:1}var sf={}.hasOwnProperty;function Ea(e,t,n){return typeof t!=\"string\"&&(n=t,t=void 0),cb(n)(ka(ya(n).document().write(ba()(e,t,!0))))}function cb(e){let t={transforms:[],canContainEols:[\"emphasis\",\"fragment\",\"heading\",\"paragraph\",\"strong\"],enter:{autolink:s(Be),autolinkProtocol:Z,autolinkEmail:Z,atxHeading:s(di),blockQuote:s(gt),characterEscape:Z,characterReference:Z,codeFenced:s(Ot),codeFencedFenceInfo:l,codeFencedFenceMeta:l,codeIndented:s(Ot,l),codeText:s(Qt,l),codeTextData:Z,data:Z,codeFlowValue:Z,definition:s(xr),definitionDestinationString:l,definitionLabelString:l,definitionTitleString:l,emphasis:s(ws),hardBreakEscape:s(hi),hardBreakTrailing:s(hi),htmlFlow:s(mi,l),htmlFlowData:Z,htmlText:s(mi,l),htmlTextData:Z,image:s(pi),label:l,link:s(Be),listItem:s(ys),listItemValue:g,listOrdered:s(Mn,p),listUnordered:s(Mn),paragraph:s(ks),reference:k,referenceString:l,resourceDestinationString:l,resourceTitleString:l,setextHeading:s(di),strong:s(gi),thematicBreak:s(wi)},exit:{atxHeading:f(),atxHeadingSequence:H,autolink:f(),autolinkEmail:wn,autolinkProtocol:Ee,blockQuote:f(),characterEscapeValue:se,characterReferenceMarkerHexadecimal:Rt,characterReferenceMarkerNumeric:Rt,characterReferenceValue:Kt,characterReference:gn,codeFenced:f(T),codeFencedFence:F,codeFencedFenceInfo:w,codeFencedFenceMeta:E,codeFlowValue:se,codeIndented:f(A),codeText:f(V),codeTextData:se,data:se,definition:f(),definitionDestinationString:z,definitionLabelString:_,definitionTitleString:I,emphasis:f(),hardBreakEscape:f(re),hardBreakTrailing:f(re),htmlFlow:f(Y),htmlFlowData:se,htmlText:f(j),htmlTextData:se,image:f(he),label:Xe,labelText:me,lineEnding:ue,link:f(ie),listItem:f(),listOrdered:f(),listUnordered:f(),paragraph:f(),referenceString:Ye,resourceDestinationString:x,resourceTitleString:Ie,resource:Pe,setextHeading:f(J),setextHeadingLineSequence:te,setextHeadingText:v,strong:f(),thematicBreak:f()}};af(t,(e||{}).mdastExtensions||[]);let n={};return r;function r(S){let R={type:\"root\",children:[]},O={stack:[R],tokenStack:[],config:t,enter:u,exit:h,buffer:l,resume:m,data:n},K=[],ae=-1;for(;++ae<S.length;)if(S[ae][1].type===\"listOrdered\"||S[ae][1].type===\"listUnordered\")if(S[ae][0]===\"enter\")K.push(ae);else{let Re=K.pop();ae=o(S,Re,ae)}for(ae=-1;++ae<S.length;){let Re=t[S[ae][0]];sf.call(Re,S[ae][1].type)&&Re[S[ae][1].type].call(Object.assign({sliceSerialize:S[ae][2].sliceSerialize},O),S[ae][1])}if(O.tokenStack.length>0){let Re=O.tokenStack[O.tokenStack.length-1];(Re[1]||of).call(O,void 0,Re[0])}for(R.position={start:fn(S.length>0?S[0][1].start:{line:1,column:1,offset:0}),end:fn(S.length>0?S[S.length-2][1].end:{line:1,column:1,offset:0})},ae=-1;++ae<t.transforms.length;)R=t.transforms[ae](R)||R;return R}function o(S,R,O){let K=R-1,ae=-1,Re=!1,wt,Je,at,At;for(;++K<=O;){let Ve=S[K];switch(Ve[1].type){case\"listUnordered\":case\"listOrdered\":case\"blockQuote\":{Ve[0]===\"enter\"?ae++:ae--,At=void 0;break}case\"lineEndingBlank\":{Ve[0]===\"enter\"&&(wt&&!At&&!ae&&!at&&(at=K),At=void 0);break}case\"linePrefix\":case\"listItemValue\":case\"listItemMarker\":case\"listItemPrefix\":case\"listItemPrefixWhitespace\":break;default:At=void 0}if(!ae&&Ve[0]===\"enter\"&&Ve[1].type===\"listItemPrefix\"||ae===-1&&Ve[0]===\"exit\"&&(Ve[1].type===\"listUnordered\"||Ve[1].type===\"listOrdered\")){if(wt){let yt=K;for(Je=void 0;yt--;){let kt=S[yt];if(kt[1].type===\"lineEnding\"||kt[1].type===\"lineEndingBlank\"){if(kt[0]===\"exit\")continue;Je&&(S[Je][1].type=\"lineEndingBlank\",Re=!0),kt[1].type=\"lineEnding\",Je=yt}else if(!(kt[1].type===\"linePrefix\"||kt[1].type===\"blockQuotePrefix\"||kt[1].type===\"blockQuotePrefixWhitespace\"||kt[1].type===\"blockQuoteMarker\"||kt[1].type===\"listItemIndent\"))break}at&&(!Je||at<Je)&&(wt._spread=!0),wt.end=Object.assign({},Je?S[Je][1].start:Ve[1].end),S.splice(Je||K,0,[\"exit\",wt,Ve[2]]),K++,O++}if(Ve[1].type===\"listItemPrefix\"){let yt={type:\"listItem\",_spread:!1,start:Object.assign({},Ve[1].start),end:void 0};wt=yt,S.splice(K,0,[\"enter\",yt,Ve[2]]),K++,O++,at=void 0,At=!0}}}return S[R][1]._spread=Re,O}function s(S,R){return O;function O(K){u.call(this,S(K),K),R&&R.call(this,K)}}function l(){this.stack.push({type:\"fragment\",children:[]})}function u(S,R,O){this.stack[this.stack.length-1].children.push(S),this.stack.push(S),this.tokenStack.push([R,O||void 0]),S.position={start:fn(R.start),end:void 0}}function f(S){return R;function R(O){S&&S.call(this,O),h.call(this,O)}}function h(S,R){let O=this.stack.pop(),K=this.tokenStack.pop();if(K)K[0].type!==S.type&&(R?R.call(this,S,K[0]):(K[1]||of).call(this,S,K[0]));else throw new Error(\"Cannot close `\"+S.type+\"` (\"+cn({start:S.start,end:S.end})+\"): it\\u2019s not open\");O.position.end=fn(S.end)}function m(){return Sn(this.stack.pop())}function p(){this.data.expectingFirstListItemValue=!0}function g(S){if(this.data.expectingFirstListItemValue){let R=this.stack[this.stack.length-2];R.start=Number.parseInt(this.sliceSerialize(S),10),this.data.expectingFirstListItemValue=void 0}}function w(){let S=this.resume(),R=this.stack[this.stack.length-1];R.lang=S}function E(){let S=this.resume(),R=this.stack[this.stack.length-1];R.meta=S}function F(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function T(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g,\"\"),this.data.flowCodeInside=void 0}function A(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S.replace(/(\\r?\\n|\\r)$/g,\"\")}function _(S){let R=this.resume(),O=this.stack[this.stack.length-1];O.label=R,O.identifier=Xt(this.sliceSerialize(S)).toLowerCase()}function I(){let S=this.resume(),R=this.stack[this.stack.length-1];R.title=S}function z(){let S=this.resume(),R=this.stack[this.stack.length-1];R.url=S}function H(S){let R=this.stack[this.stack.length-1];if(!R.depth){let O=this.sliceSerialize(S).length;R.depth=O}}function v(){this.data.setextHeadingSlurpLineEnding=!0}function te(S){let R=this.stack[this.stack.length-1];R.depth=this.sliceSerialize(S).codePointAt(0)===61?1:2}function J(){this.data.setextHeadingSlurpLineEnding=void 0}function Z(S){let O=this.stack[this.stack.length-1].children,K=O[O.length-1];(!K||K.type!==\"text\")&&(K=ze(),K.position={start:fn(S.start),end:void 0},O.push(K)),this.stack.push(K)}function se(S){let R=this.stack.pop();R.value+=this.sliceSerialize(S),R.position.end=fn(S.end)}function ue(S){let R=this.stack[this.stack.length-1];if(this.data.atHardBreak){let O=R.children[R.children.length-1];O.position.end=fn(S.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(R.type)&&(Z.call(this,S),se.call(this,S))}function re(){this.data.atHardBreak=!0}function Y(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S}function j(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S}function V(){let S=this.resume(),R=this.stack[this.stack.length-1];R.value=S}function ie(){let S=this.stack[this.stack.length-1];if(this.data.inReference){let R=this.data.referenceType||\"shortcut\";S.type+=\"Reference\",S.referenceType=R,delete S.url,delete S.title}else delete S.identifier,delete S.label;this.data.referenceType=void 0}function he(){let S=this.stack[this.stack.length-1];if(this.data.inReference){let R=this.data.referenceType||\"shortcut\";S.type+=\"Reference\",S.referenceType=R,delete S.url,delete S.title}else delete S.identifier,delete S.label;this.data.referenceType=void 0}function me(S){let R=this.sliceSerialize(S),O=this.stack[this.stack.length-2];O.label=ao(R),O.identifier=Xt(R).toLowerCase()}function Xe(){let S=this.stack[this.stack.length-1],R=this.resume(),O=this.stack[this.stack.length-1];if(this.data.inReference=!0,O.type===\"link\"){let K=S.children;O.children=K}else O.alt=R}function x(){let S=this.resume(),R=this.stack[this.stack.length-1];R.url=S}function Ie(){let S=this.resume(),R=this.stack[this.stack.length-1];R.title=S}function Pe(){this.data.inReference=void 0}function k(){this.data.referenceType=\"collapsed\"}function Ye(S){let R=this.resume(),O=this.stack[this.stack.length-1];O.label=R,O.identifier=Xt(this.sliceSerialize(S)).toLowerCase(),this.data.referenceType=\"full\"}function Rt(S){this.data.characterReferenceType=S.type}function Kt(S){let R=this.sliceSerialize(S),O=this.data.characterReferenceType,K;O?(K=Ji(R,O===\"characterReferenceMarkerNumeric\"?10:16),this.data.characterReferenceType=void 0):K=or(R);let ae=this.stack[this.stack.length-1];ae.value+=K}function gn(S){let R=this.stack.pop();R.position.end=fn(S.end)}function Ee(S){se.call(this,S);let R=this.stack[this.stack.length-1];R.url=this.sliceSerialize(S)}function wn(S){se.call(this,S);let R=this.stack[this.stack.length-1];R.url=\"mailto:\"+this.sliceSerialize(S)}function gt(){return{type:\"blockquote\",children:[]}}function Ot(){return{type:\"code\",lang:null,meta:null,value:\"\"}}function Qt(){return{type:\"inlineCode\",value:\"\"}}function xr(){return{type:\"definition\",identifier:\"\",label:null,title:null,url:\"\"}}function ws(){return{type:\"emphasis\",children:[]}}function di(){return{type:\"heading\",depth:0,children:[]}}function hi(){return{type:\"break\"}}function mi(){return{type:\"html\",value:\"\"}}function pi(){return{type:\"image\",title:null,url:\"\",alt:null}}function Be(){return{type:\"link\",title:null,url:\"\",children:[]}}function Mn(S){return{type:\"list\",ordered:S.type===\"listOrdered\",start:null,spread:S._spread,children:[]}}function ys(S){return{type:\"listItem\",spread:S._spread,checked:null,children:[]}}function ks(){return{type:\"paragraph\",children:[]}}function gi(){return{type:\"strong\",children:[]}}function ze(){return{type:\"text\",value:\"\"}}function wi(){return{type:\"thematicBreak\"}}}function fn(e){return{line:e.line,column:e.column,offset:e.offset}}function af(e,t){let n=-1;for(;++n<t.length;){let r=t[n];Array.isArray(r)?af(e,r):fb(e,r)}}function fb(e,t){let n;for(n in t)if(sf.call(t,n))switch(n){case\"canContainEols\":{let r=t[n];r&&e[n].push(...r);break}case\"transforms\":{let r=t[n];r&&e[n].push(...r);break}case\"enter\":case\"exit\":{let r=t[n];r&&Object.assign(e[n],r);break}}}function of(e,t){throw e?new Error(\"Cannot close `\"+e.type+\"` (\"+cn({start:e.start,end:e.end})+\"): a different token (`\"+t.type+\"`, \"+cn({start:t.start,end:t.end})+\") is open\"):new Error(\"Cannot close document, a token (`\"+t.type+\"`, \"+cn({start:t.start,end:t.end})+\") is still open\")}function lr(e){let t=this;t.parser=n;function n(r){return Ea(r,{...t.data(\"settings\"),...e,extensions:t.data(\"micromarkExtensions\")||[],mdastExtensions:t.data(\"fromMarkdownExtensions\")||[]})}}var lf={}.hasOwnProperty;function uf(e,t){let n=t||{};function r(o,...s){let l=r.invalid,u=r.handlers;if(o&&lf.call(o,e)){let f=String(o[e]);l=lf.call(u,f)?u[f]:r.unknown}if(l)return l.call(this,o,...s)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var db={}.hasOwnProperty;function Aa(e,t){let n=-1,r;if(t.extensions)for(;++n<t.extensions.length;)Aa(e,t.extensions[n]);for(r in t)if(db.call(t,r))switch(r){case\"extensions\":break;case\"unsafe\":{cf(e[r],t[r]);break}case\"join\":{cf(e[r],t[r]);break}case\"handlers\":{hb(e[r],t[r]);break}default:e.options[r]=t[r]}return e}function cf(e,t){t&&e.push(...t)}function hb(e,t){t&&Object.assign(e,t)}function ff(e,t,n,r){let o=n.enter(\"blockquote\"),s=n.createTracker(r);s.move(\"> \"),s.shift(2);let l=n.indentLines(n.containerFlow(e,s.current()),mb);return o(),l}function mb(e,t,n){return\">\"+(n?\"\":\" \")+e}function lo(e,t){return df(e,t.inConstruct,!0)&&!df(e,t.notInConstruct,!1)}function df(e,t,n){if(typeof t==\"string\"&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++r<t.length;)if(e.includes(t[r]))return!0;return!1}function Ca(e,t,n,r){let o=-1;for(;++o<n.unsafe.length;)if(n.unsafe[o].character===`\n`&&lo(n.stack,n.unsafe[o]))return/[ \\t]/.test(r.before)?\"\":\" \";return`\\\\\n`}function hf(e,t){let n=String(e),r=n.indexOf(t),o=r,s=0,l=0;if(typeof t!=\"string\")throw new TypeError(\"Expected substring\");for(;r!==-1;)r===o?++s>l&&(l=s):s=1,o=r+t.length,r=n.indexOf(t,o);return l}function Wr(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \\r\\n]/.test(e.value)&&!/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(e.value))}function mf(e){let t=e.options.fence||\"`\";if(t!==\"`\"&&t!==\"~\")throw new Error(\"Cannot serialize code with `\"+t+\"` for `options.fence`, expected `` ` `` or `~`\");return t}function pf(e,t,n,r){let o=mf(n),s=e.value||\"\",l=o===\"`\"?\"GraveAccent\":\"Tilde\";if(Wr(e,n)){let p=n.enter(\"codeIndented\"),g=n.indentLines(s,pb);return p(),g}let u=n.createTracker(r),f=o.repeat(Math.max(hf(s,o)+1,3)),h=n.enter(\"codeFenced\"),m=u.move(f);if(e.lang){let p=n.enter(`codeFencedLang${l}`);m+=u.move(n.safe(e.lang,{before:m,after:\" \",encode:[\"`\"],...u.current()})),p()}if(e.lang&&e.meta){let p=n.enter(`codeFencedMeta${l}`);m+=u.move(\" \"),m+=u.move(n.safe(e.meta,{before:m,after:`\n`,encode:[\"`\"],...u.current()})),p()}return m+=u.move(`\n`),s&&(m+=u.move(s+`\n`)),m+=u.move(f),h(),m}function pb(e,t,n){return(n?\"\":\"    \")+e}function ur(e){let t=e.options.quote||'\"';if(t!=='\"'&&t!==\"'\")throw new Error(\"Cannot serialize title with `\"+t+\"` for `options.quote`, expected `\\\"`, or `'`\");return t}function gf(e,t,n,r){let o=ur(n),s=o==='\"'?\"Quote\":\"Apostrophe\",l=n.enter(\"definition\"),u=n.enter(\"label\"),f=n.createTracker(r),h=f.move(\"[\");return h+=f.move(n.safe(n.associationId(e),{before:h,after:\"]\",...f.current()})),h+=f.move(\"]: \"),u(),!e.url||/[\\0- \\u007F]/.test(e.url)?(u=n.enter(\"destinationLiteral\"),h+=f.move(\"<\"),h+=f.move(n.safe(e.url,{before:h,after:\">\",...f.current()})),h+=f.move(\">\")):(u=n.enter(\"destinationRaw\"),h+=f.move(n.safe(e.url,{before:h,after:e.title?\" \":`\n`,...f.current()}))),u(),e.title&&(u=n.enter(`title${s}`),h+=f.move(\" \"+o),h+=f.move(n.safe(e.title,{before:h,after:o,...f.current()})),h+=f.move(o),u()),l(),h}function wf(e){let t=e.options.emphasis||\"*\";if(t!==\"*\"&&t!==\"_\")throw new Error(\"Cannot serialize emphasis with `\"+t+\"` for `options.emphasis`, expected `*`, or `_`\");return t}function st(e){return\"&#x\"+e.toString(16).toUpperCase()+\";\"}function cr(e,t,n){let r=sr(e),o=sr(t);return r===void 0?o===void 0?n===\"_\"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:o===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?o===void 0?{inside:!1,outside:!1}:o===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:o===void 0?{inside:!1,outside:!1}:o===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}va.peek=gb;function va(e,t,n,r){let o=wf(n),s=n.enter(\"emphasis\"),l=n.createTracker(r),u=l.move(o),f=l.move(n.containerPhrasing(e,{after:o,before:u,...l.current()})),h=f.charCodeAt(0),m=cr(r.before.charCodeAt(r.before.length-1),h,o);m.inside&&(f=st(h)+f.slice(1));let p=f.charCodeAt(f.length-1),g=cr(r.after.charCodeAt(0),p,o);g.inside&&(f=f.slice(0,-1)+st(p));let w=l.move(o);return s(),n.attentionEncodeSurroundingInfo={after:g.outside,before:m.outside},u+f+w}function gb(e,t,n){return n.options.emphasis||\"*\"}var fr=function(e){if(e==null)return bb;if(typeof e==\"function\")return uo(e);if(typeof e==\"object\")return Array.isArray(e)?wb(e):yb(e);if(typeof e==\"string\")return kb(e);throw new Error(\"Expected function, string, or object as test\")};function wb(e){let t=[],n=-1;for(;++n<e.length;)t[n]=fr(e[n]);return uo(r);function r(...o){let s=-1;for(;++s<t.length;)if(t[s].apply(this,o))return!0;return!1}}function yb(e){let t=e;return uo(n);function n(r){let o=r,s;for(s in e)if(o[s]!==t[s])return!1;return!0}}function kb(e){return uo(t);function t(n){return n&&n.type===e}}function uo(e){return t;function t(n,r,o){return!!(xb(n)&&e.call(this,n,typeof r==\"number\"?r:void 0,o||void 0))}}function bb(){return!0}function xb(e){return e!==null&&typeof e==\"object\"&&\"type\"in e}function yf(e){return\"\\x1B[33m\"+e+\"\\x1B[39m\"}var kf=[],co=!0,In=!1,fo=\"skip\";function Sa(e,t,n,r){let o;typeof t==\"function\"&&typeof n!=\"function\"?(r=n,n=t):o=t;let s=fr(o),l=r?-1:1;u(e,void 0,[])();function u(f,h,m){let p=f&&typeof f==\"object\"?f:{};if(typeof p.type==\"string\"){let w=typeof p.tagName==\"string\"?p.tagName:typeof p.name==\"string\"?p.name:void 0;Object.defineProperty(g,\"name\",{value:\"node (\"+yf(f.type+(w?\"<\"+w+\">\":\"\"))+\")\"})}return g;function g(){let w=kf,E,F,T;if((!t||s(f,h,m[m.length-1]||void 0))&&(w=Eb(n(f,m)),w[0]===In))return w;if(\"children\"in f&&f.children){let A=f;if(A.children&&w[0]!==fo)for(F=(r?A.children.length:-1)+l,T=m.concat(A);F>-1&&F<A.children.length;){let _=A.children[F];if(E=u(_,F,T)(),E[0]===In)return E;F=typeof E[1]==\"number\"?E[1]:F+l}}return w}}}function Eb(e){return Array.isArray(e)?e:typeof e==\"number\"?[co,e]:e==null?kf:[e]}function Ta(e,t,n,r){let o,s,l;typeof t==\"function\"&&typeof n!=\"function\"?(s=void 0,l=t,o=n):(s=t,l=n,o=r),Sa(e,s,u,o);function u(f,h){let m=h[h.length-1],p=m?m.children.indexOf(f):void 0;return l(f,p,m)}}function ho(e,t){let n=!1;return Ta(e,function(r){if(\"value\"in r&&/\\r?\\n|\\r/.test(r.value)||r.type===\"break\")return n=!0,In}),!!((!e.depth||e.depth<3)&&Sn(e)&&(t.options.setext||n))}function bf(e,t,n,r){let o=Math.max(Math.min(6,e.depth||1),1),s=n.createTracker(r);if(ho(e,n)){let m=n.enter(\"headingSetext\"),p=n.enter(\"phrasing\"),g=n.containerPhrasing(e,{...s.current(),before:`\n`,after:`\n`});return p(),m(),g+`\n`+(o===1?\"=\":\"-\").repeat(g.length-(Math.max(g.lastIndexOf(\"\\r\"),g.lastIndexOf(`\n`))+1))}let l=\"#\".repeat(o),u=n.enter(\"headingAtx\"),f=n.enter(\"phrasing\");s.move(l+\" \");let h=n.containerPhrasing(e,{before:\"# \",after:`\n`,...s.current()});return/^[\\t ]/.test(h)&&(h=st(h.charCodeAt(0))+h.slice(1)),h=h?l+\" \"+h:l,n.options.closeAtx&&(h+=\" \"+l),f(),u(),h}_a.peek=Ab;function _a(e){return e.value||\"\"}function Ab(){return\"<\"}Fa.peek=Cb;function Fa(e,t,n,r){let o=ur(n),s=o==='\"'?\"Quote\":\"Apostrophe\",l=n.enter(\"image\"),u=n.enter(\"label\"),f=n.createTracker(r),h=f.move(\"![\");return h+=f.move(n.safe(e.alt,{before:h,after:\"]\",...f.current()})),h+=f.move(\"](\"),u(),!e.url&&e.title||/[\\0- \\u007F]/.test(e.url)?(u=n.enter(\"destinationLiteral\"),h+=f.move(\"<\"),h+=f.move(n.safe(e.url,{before:h,after:\">\",...f.current()})),h+=f.move(\">\")):(u=n.enter(\"destinationRaw\"),h+=f.move(n.safe(e.url,{before:h,after:e.title?\" \":\")\",...f.current()}))),u(),e.title&&(u=n.enter(`title${s}`),h+=f.move(\" \"+o),h+=f.move(n.safe(e.title,{before:h,after:o,...f.current()})),h+=f.move(o),u()),h+=f.move(\")\"),l(),h}function Cb(){return\"!\"}Ia.peek=vb;function Ia(e,t,n,r){let o=e.referenceType,s=n.enter(\"imageReference\"),l=n.enter(\"label\"),u=n.createTracker(r),f=u.move(\"![\"),h=n.safe(e.alt,{before:f,after:\"]\",...u.current()});f+=u.move(h+\"][\"),l();let m=n.stack;n.stack=[],l=n.enter(\"reference\");let p=n.safe(n.associationId(e),{before:f,after:\"]\",...u.current()});return l(),n.stack=m,s(),o===\"full\"||!h||h!==p?f+=u.move(p+\"]\"):o===\"shortcut\"?f=f.slice(0,-1):f+=u.move(\"]\"),f}function vb(){return\"!\"}Pa.peek=Sb;function Pa(e,t,n){let r=e.value||\"\",o=\"`\",s=-1;for(;new RegExp(\"(^|[^`])\"+o+\"([^`]|$)\").test(r);)o+=\"`\";for(/[^ \\r\\n]/.test(r)&&(/^[ \\r\\n]/.test(r)&&/[ \\r\\n]$/.test(r)||/^`|`$/.test(r))&&(r=\" \"+r+\" \");++s<n.unsafe.length;){let l=n.unsafe[s],u=n.compilePattern(l),f;if(l.atBreak)for(;f=u.exec(r);){let h=f.index;r.charCodeAt(h)===10&&r.charCodeAt(h-1)===13&&h--,r=r.slice(0,h)+\" \"+r.slice(f.index+1)}}return o+r+o}function Sb(){return\"`\"}function Ra(e,t){let n=Sn(e);return!!(!t.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type===\"text\"&&(n===e.url||\"mailto:\"+n===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\\0- <>\\u007F]/.test(e.url))}Oa.peek=Tb;function Oa(e,t,n,r){let o=ur(n),s=o==='\"'?\"Quote\":\"Apostrophe\",l=n.createTracker(r),u,f;if(Ra(e,n)){let m=n.stack;n.stack=[],u=n.enter(\"autolink\");let p=l.move(\"<\");return p+=l.move(n.containerPhrasing(e,{before:p,after:\">\",...l.current()})),p+=l.move(\">\"),u(),n.stack=m,p}u=n.enter(\"link\"),f=n.enter(\"label\");let h=l.move(\"[\");return h+=l.move(n.containerPhrasing(e,{before:h,after:\"](\",...l.current()})),h+=l.move(\"](\"),f(),!e.url&&e.title||/[\\0- \\u007F]/.test(e.url)?(f=n.enter(\"destinationLiteral\"),h+=l.move(\"<\"),h+=l.move(n.safe(e.url,{before:h,after:\">\",...l.current()})),h+=l.move(\">\")):(f=n.enter(\"destinationRaw\"),h+=l.move(n.safe(e.url,{before:h,after:e.title?\" \":\")\",...l.current()}))),f(),e.title&&(f=n.enter(`title${s}`),h+=l.move(\" \"+o),h+=l.move(n.safe(e.title,{before:h,after:o,...l.current()})),h+=l.move(o),f()),h+=l.move(\")\"),u(),h}function Tb(e,t,n){return Ra(e,n)?\"<\":\"[\"}La.peek=_b;function La(e,t,n,r){let o=e.referenceType,s=n.enter(\"linkReference\"),l=n.enter(\"label\"),u=n.createTracker(r),f=u.move(\"[\"),h=n.containerPhrasing(e,{before:f,after:\"]\",...u.current()});f+=u.move(h+\"][\"),l();let m=n.stack;n.stack=[],l=n.enter(\"reference\");let p=n.safe(n.associationId(e),{before:f,after:\"]\",...u.current()});return l(),n.stack=m,s(),o===\"full\"||!h||h!==p?f+=u.move(p+\"]\"):o===\"shortcut\"?f=f.slice(0,-1):f+=u.move(\"]\"),f}function _b(){return\"[\"}function dr(e){let t=e.options.bullet||\"*\";if(t!==\"*\"&&t!==\"+\"&&t!==\"-\")throw new Error(\"Cannot serialize items with `\"+t+\"` for `options.bullet`, expected `*`, `+`, or `-`\");return t}function xf(e){let t=dr(e),n=e.options.bulletOther;if(!n)return t===\"*\"?\"-\":\"*\";if(n!==\"*\"&&n!==\"+\"&&n!==\"-\")throw new Error(\"Cannot serialize items with `\"+n+\"` for `options.bulletOther`, expected `*`, `+`, or `-`\");if(n===t)throw new Error(\"Expected `bullet` (`\"+t+\"`) and `bulletOther` (`\"+n+\"`) to be different\");return n}function Ef(e){let t=e.options.bulletOrdered||\".\";if(t!==\".\"&&t!==\")\")throw new Error(\"Cannot serialize items with `\"+t+\"` for `options.bulletOrdered`, expected `.` or `)`\");return t}function mo(e){let t=e.options.rule||\"*\";if(t!==\"*\"&&t!==\"-\"&&t!==\"_\")throw new Error(\"Cannot serialize rules with `\"+t+\"` for `options.rule`, expected `*`, `-`, or `_`\");return t}function Af(e,t,n,r){let o=n.enter(\"list\"),s=n.bulletCurrent,l=e.ordered?Ef(n):dr(n),u=e.ordered?l===\".\"?\")\":\".\":xf(n),f=t&&n.bulletLastUsed?l===n.bulletLastUsed:!1;if(!e.ordered){let m=e.children?e.children[0]:void 0;if((l===\"*\"||l===\"-\")&&m&&(!m.children||!m.children[0])&&n.stack[n.stack.length-1]===\"list\"&&n.stack[n.stack.length-2]===\"listItem\"&&n.stack[n.stack.length-3]===\"list\"&&n.stack[n.stack.length-4]===\"listItem\"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(f=!0),mo(n)===l&&m){let p=-1;for(;++p<e.children.length;){let g=e.children[p];if(g&&g.type===\"listItem\"&&g.children&&g.children[0]&&g.children[0].type===\"thematicBreak\"){f=!0;break}}}}f&&(l=u),n.bulletCurrent=l;let h=n.containerFlow(e,r);return n.bulletLastUsed=l,n.bulletCurrent=s,o(),h}function Cf(e){let t=e.options.listItemIndent||\"one\";if(t!==\"tab\"&&t!==\"one\"&&t!==\"mixed\")throw new Error(\"Cannot serialize items with `\"+t+\"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`\");return t}function vf(e,t,n,r){let o=Cf(n),s=n.bulletCurrent||dr(n);t&&t.type===\"list\"&&t.ordered&&(s=(typeof t.start==\"number\"&&t.start>-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+s);let l=s.length+1;(o===\"tab\"||o===\"mixed\"&&(t&&t.type===\"list\"&&t.spread||e.spread))&&(l=Math.ceil(l/4)*4);let u=n.createTracker(r);u.move(s+\" \".repeat(l-s.length)),u.shift(l);let f=n.enter(\"listItem\"),h=n.indentLines(n.containerFlow(e,u.current()),m);return f(),h;function m(p,g,w){return g?(w?\"\":\" \".repeat(l))+p:(w?s:s+\" \".repeat(l-s.length))+p}}function Sf(e,t,n,r){let o=n.enter(\"paragraph\"),s=n.enter(\"phrasing\"),l=n.containerPhrasing(e,r);return s(),o(),l}var Da=fr([\"break\",\"delete\",\"emphasis\",\"footnote\",\"footnoteReference\",\"image\",\"imageReference\",\"inlineCode\",\"inlineMath\",\"link\",\"linkReference\",\"mdxJsxTextElement\",\"mdxTextExpression\",\"strong\",\"text\",\"textDirective\"]);function Tf(e,t,n,r){return(e.children.some(function(l){return Da(l)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function _f(e){let t=e.options.strong||\"*\";if(t!==\"*\"&&t!==\"_\")throw new Error(\"Cannot serialize strong with `\"+t+\"` for `options.strong`, expected `*`, or `_`\");return t}Ma.peek=Fb;function Ma(e,t,n,r){let o=_f(n),s=n.enter(\"strong\"),l=n.createTracker(r),u=l.move(o+o),f=l.move(n.containerPhrasing(e,{after:o,before:u,...l.current()})),h=f.charCodeAt(0),m=cr(r.before.charCodeAt(r.before.length-1),h,o);m.inside&&(f=st(h)+f.slice(1));let p=f.charCodeAt(f.length-1),g=cr(r.after.charCodeAt(0),p,o);g.inside&&(f=f.slice(0,-1)+st(p));let w=l.move(o+o);return s(),n.attentionEncodeSurroundingInfo={after:g.outside,before:m.outside},u+f+w}function Fb(e,t,n){return n.options.strong||\"*\"}function Ff(e,t,n,r){return n.safe(e.value,r)}function If(e){let t=e.options.ruleRepetition||3;if(t<3)throw new Error(\"Cannot serialize rules with repetition `\"+t+\"` for `options.ruleRepetition`, expected `3` or more\");return t}function Pf(e,t,n){let r=(mo(n)+(n.options.ruleSpaces?\" \":\"\")).repeat(If(n));return n.options.ruleSpaces?r.slice(0,-1):r}var Rf={blockquote:ff,break:Ca,code:pf,definition:gf,emphasis:va,hardBreak:Ca,heading:bf,html:_a,image:Fa,imageReference:Ia,inlineCode:Pa,link:Oa,linkReference:La,list:Af,listItem:vf,paragraph:Sf,root:Tf,strong:Ma,text:Ff,thematicBreak:Pf};var Of=[Ib];function Ib(e,t,n,r){if(t.type===\"code\"&&Wr(t,r)&&(e.type===\"list\"||e.type===t.type&&Wr(e,r)))return!1;if(\"spread\"in n&&typeof n.spread==\"boolean\")return e.type===\"paragraph\"&&(e.type===t.type||t.type===\"definition\"||t.type===\"heading\"&&ho(t,r))?void 0:n.spread?1:0}var Pn=[\"autolink\",\"destinationLiteral\",\"destinationRaw\",\"reference\",\"titleQuote\",\"titleApostrophe\"],Lf=[{character:\"\t\",after:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\"\t\",before:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\"\t\",inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedLangTilde\"]},{character:\"\\r\",inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedLangTilde\",\"codeFencedMetaGraveAccent\",\"codeFencedMetaTilde\",\"destinationLiteral\",\"headingAtx\"]},{character:`\n`,inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedLangTilde\",\"codeFencedMetaGraveAccent\",\"codeFencedMetaTilde\",\"destinationLiteral\",\"headingAtx\"]},{character:\" \",after:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\" \",before:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\" \",inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedLangTilde\"]},{character:\"!\",after:\"\\\\[\",inConstruct:\"phrasing\",notInConstruct:Pn},{character:'\"',inConstruct:\"titleQuote\"},{atBreak:!0,character:\"#\"},{character:\"#\",inConstruct:\"headingAtx\",after:`(?:[\\r\n]|$)`},{character:\"&\",after:\"[#A-Za-z]\",inConstruct:\"phrasing\"},{character:\"'\",inConstruct:\"titleApostrophe\"},{character:\"(\",inConstruct:\"destinationRaw\"},{before:\"\\\\]\",character:\"(\",inConstruct:\"phrasing\",notInConstruct:Pn},{atBreak:!0,before:\"\\\\d+\",character:\")\"},{character:\")\",inConstruct:\"destinationRaw\"},{atBreak:!0,character:\"*\",after:`(?:[ \t\\r\n*])`},{character:\"*\",inConstruct:\"phrasing\",notInConstruct:Pn},{atBreak:!0,character:\"+\",after:`(?:[ \t\\r\n])`},{atBreak:!0,character:\"-\",after:`(?:[ \t\\r\n-])`},{atBreak:!0,before:\"\\\\d+\",character:\".\",after:`(?:[ \t\\r\n]|$)`},{atBreak:!0,character:\"<\",after:\"[!/?A-Za-z]\"},{character:\"<\",after:\"[!/?A-Za-z]\",inConstruct:\"phrasing\",notInConstruct:Pn},{character:\"<\",inConstruct:\"destinationLiteral\"},{atBreak:!0,character:\"=\"},{atBreak:!0,character:\">\"},{character:\">\",inConstruct:\"destinationLiteral\"},{atBreak:!0,character:\"[\"},{character:\"[\",inConstruct:\"phrasing\",notInConstruct:Pn},{character:\"[\",inConstruct:[\"label\",\"reference\"]},{character:\"\\\\\",after:\"[\\\\r\\\\n]\",inConstruct:\"phrasing\"},{character:\"]\",inConstruct:[\"label\",\"reference\"]},{atBreak:!0,character:\"_\"},{character:\"_\",inConstruct:\"phrasing\",notInConstruct:Pn},{atBreak:!0,character:\"`\"},{character:\"`\",inConstruct:[\"codeFencedLangGraveAccent\",\"codeFencedMetaGraveAccent\"]},{character:\"`\",inConstruct:\"phrasing\",notInConstruct:Pn},{atBreak:!0,character:\"~\"}];function Df(e){return e.label||!e.identifier?e.label||\"\":ao(e.identifier)}function Mf(e){if(!e._compiled){let t=(e.atBreak?\"[\\\\r\\\\n][\\\\t ]*\":\"\")+(e.before?\"(?:\"+e.before+\")\":\"\");e._compiled=new RegExp((t?\"(\"+t+\")\":\"\")+(/[|\\\\{}()[\\]^$+*?.-]/.test(e.character)?\"\\\\\":\"\")+e.character+(e.after?\"(?:\"+e.after+\")\":\"\"),\"g\")}return e._compiled}function Nf(e,t,n){let r=t.indexStack,o=e.children||[],s=[],l=-1,u=n.before,f;r.push(-1);let h=t.createTracker(n);for(;++l<o.length;){let m=o[l],p;if(r[r.length-1]=l,l+1<o.length){let E=t.handle.handlers[o[l+1].type];E&&E.peek&&(E=E.peek),p=E?E(o[l+1],e,t,{before:\"\",after:\"\",...h.current()}).charAt(0):\"\"}else p=n.after;s.length>0&&(u===\"\\r\"||u===`\n`)&&m.type===\"html\"&&(s[s.length-1]=s[s.length-1].replace(/(\\r?\\n|\\r)$/,\" \"),u=\" \",h=t.createTracker(n),h.move(s.join(\"\")));let g=t.handle(m,e,t,{...h.current(),after:p,before:u});f&&f===g.slice(0,1)&&(g=st(f.charCodeAt(0))+g.slice(1));let w=t.attentionEncodeSurroundingInfo;t.attentionEncodeSurroundingInfo=void 0,f=void 0,w&&(s.length>0&&w.before&&u===s[s.length-1].slice(-1)&&(s[s.length-1]=s[s.length-1].slice(0,-1)+st(u.charCodeAt(0))),w.after&&(f=p)),h.move(g),s.push(g),u=g.slice(-1)}return r.pop(),s.join(\"\")}function $f(e,t,n){let r=t.indexStack,o=e.children||[],s=t.createTracker(n),l=[],u=-1;for(r.push(-1);++u<o.length;){let f=o[u];r[r.length-1]=u,l.push(s.move(t.handle(f,e,t,{before:`\n`,after:`\n`,...s.current()}))),f.type!==\"list\"&&(t.bulletLastUsed=void 0),u<o.length-1&&l.push(s.move(Pb(f,o[u+1],e,t)))}return r.pop(),l.join(\"\")}function Pb(e,t,n,r){let o=r.join.length;for(;o--;){let s=r.join[o](e,t,n,r);if(s===!0||s===1)break;if(typeof s==\"number\")return`\n`.repeat(1+s);if(s===!1)return`\n\n<!---->\n\n`}return`\n\n`}var Rb=/\\r?\\n|\\r/g;function Yf(e,t){let n=[],r=0,o=0,s;for(;s=Rb.exec(e);)l(e.slice(r,s.index)),n.push(s[0]),r=s.index+s[0].length,o++;return l(e.slice(r)),n.join(\"\");function l(u){n.push(t(u,o,!u))}}function zf(e,t,n){let r=(n.before||\"\")+(t||\"\")+(n.after||\"\"),o=[],s=[],l={},u=-1;for(;++u<e.unsafe.length;){let m=e.unsafe[u];if(!lo(e.stack,m))continue;let p=e.compilePattern(m),g;for(;g=p.exec(r);){let w=\"before\"in m||!!m.atBreak,E=\"after\"in m,F=g.index+(w?g[1].length:0);o.includes(F)?(l[F].before&&!w&&(l[F].before=!1),l[F].after&&!E&&(l[F].after=!1)):(o.push(F),l[F]={before:w,after:E})}}o.sort(Ob);let f=n.before?n.before.length:0,h=r.length-(n.after?n.after.length:0);for(u=-1;++u<o.length;){let m=o[u];m<f||m>=h||m+1<h&&o[u+1]===m+1&&l[m].after&&!l[m+1].before&&!l[m+1].after||o[u-1]===m-1&&l[m].before&&!l[m-1].before&&!l[m-1].after||(f!==m&&s.push(Bf(r.slice(f,m),\"\\\\\")),f=m,/[!-/:-@[-`{-~]/.test(r.charAt(m))&&(!n.encode||!n.encode.includes(r.charAt(m)))?s.push(\"\\\\\"):(s.push(st(r.charCodeAt(m))),f++))}return s.push(Bf(r.slice(f,h),n.after)),s.join(\"\")}function Ob(e,t){return e-t}function Bf(e,t){let n=/\\\\(?=[!-/:-@[-`{-~])/g,r=[],o=[],s=e+t,l=-1,u=0,f;for(;f=n.exec(s);)r.push(f.index);for(;++l<r.length;)u!==r[l]&&o.push(e.slice(u,r[l])),o.push(\"\\\\\"),u=r[l];return o.push(e.slice(u)),o.join(\"\")}function Vf(e){let t=e||{},n=t.now||{},r=t.lineShift||0,o=n.line||1,s=n.column||1;return{move:f,current:l,shift:u};function l(){return{now:{line:o,column:s},lineShift:r}}function u(h){r+=h}function f(h){let m=h||\"\",p=m.split(/\\r?\\n|\\r/g),g=p[p.length-1];return o+=p.length-1,s=p.length===1?s+g.length:1+g.length+r,m}}function Na(e,t){let n=t||{},r={associationId:Df,containerPhrasing:Nb,containerFlow:$b,createTracker:Vf,compilePattern:Mf,enter:s,handlers:{...Rf},handle:void 0,indentLines:Yf,indexStack:[],join:[...Of],options:{},safe:Yb,stack:[],unsafe:[...Lf]};Aa(r,n),r.options.tightDefinitions&&r.join.push(Mb),r.handle=uf(\"type\",{invalid:Lb,unknown:Db,handlers:r.handlers});let o=r.handle(e,void 0,r,{before:`\n`,after:`\n`,now:{line:1,column:1},lineShift:0});return o&&o.charCodeAt(o.length-1)!==10&&o.charCodeAt(o.length-1)!==13&&(o+=`\n`),o;function s(l){return r.stack.push(l),u;function u(){r.stack.pop()}}}function Lb(e){throw new Error(\"Cannot handle value `\"+e+\"`, expected node\")}function Db(e){let t=e;throw new Error(\"Cannot handle unknown node `\"+t.type+\"`\")}function Mb(e,t){if(e.type===\"definition\"&&e.type===t.type)return 0}function Nb(e,t){return Nf(e,this,t)}function $b(e,t){return $f(e,this,t)}function Yb(e,t){return zf(this,e,t)}function po(e){let t=this;t.compiler=n;function n(r){return Na(r,{...t.data(\"settings\"),...e,extensions:t.data(\"toMarkdownExtensions\")||[]})}}function $a(e){if(e)throw e}var ko=Le(Zf(),1);function Ur(e){if(typeof e!=\"object\"||e===null)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function Ya(){let e=[],t={run:n,use:r};return t;function n(...o){let s=-1,l=o.pop();if(typeof l!=\"function\")throw new TypeError(\"Expected function as last argument, not \"+l);u(null,...o);function u(f,...h){let m=e[++s],p=-1;if(f){l(f);return}for(;++p<o.length;)(h[p]===null||h[p]===void 0)&&(h[p]=o[p]);o=h,m?Kf(m,u)(...h):l(null,...h)}}function r(o){if(typeof o!=\"function\")throw new TypeError(\"Expected `middelware` to be a function, not \"+o);return e.push(o),t}}function Kf(e,t){let n;return r;function r(...l){let u=e.length>l.length,f;u&&l.push(o);try{f=e.apply(this,l)}catch(h){let m=h;if(u&&n)throw m;return o(m)}u||(f&&f.then&&typeof f.then==\"function\"?f.then(s,o):f instanceof Error?o(f):s(f))}function o(l,...u){n||(n=!0,t(l,...u))}function s(l){o(null,l)}}var _e=class extends Error{constructor(t,n,r){super(),typeof n==\"string\"&&(r=n,n=void 0);let o=\"\",s={},l=!1;if(n&&(\"line\"in n&&\"column\"in n?s={place:n}:\"start\"in n&&\"end\"in n?s={place:n}:\"type\"in n?s={ancestors:[n],place:n.position}:s={...n}),typeof t==\"string\"?o=t:!s.cause&&t&&(l=!0,o=t.message,s.cause=t),!s.ruleId&&!s.source&&typeof r==\"string\"){let f=r.indexOf(\":\");f===-1?s.ruleId=r:(s.source=r.slice(0,f),s.ruleId=r.slice(f+1))}if(!s.place&&s.ancestors&&s.ancestors){let f=s.ancestors[s.ancestors.length-1];f&&(s.place=f.position)}let u=s.place&&\"start\"in s.place?s.place.start:s.place;this.ancestors=s.ancestors||void 0,this.cause=s.cause||void 0,this.column=u?u.column:void 0,this.fatal=void 0,this.file,this.message=o,this.line=u?u.line:void 0,this.name=cn(s.place)||\"1:1\",this.place=s.place||void 0,this.reason=this.message,this.ruleId=s.ruleId||void 0,this.source=s.source||void 0,this.stack=l&&s.cause&&typeof s.cause.stack==\"string\"?s.cause.stack:\"\",this.actual,this.expected,this.note,this.url}};_e.prototype.file=\"\";_e.prototype.name=\"\";_e.prototype.reason=\"\";_e.prototype.message=\"\";_e.prototype.stack=\"\";_e.prototype.column=void 0;_e.prototype.line=void 0;_e.prototype.ancestors=void 0;_e.prototype.cause=void 0;_e.prototype.fatal=void 0;_e.prototype.place=void 0;_e.prototype.ruleId=void 0;_e.prototype.source=void 0;var ht=Le(require(\"node:path\"),1);var Ba=Le(require(\"node:process\"),1);var za=require(\"node:url\");function wo(e){return!!(e!==null&&typeof e==\"object\"&&\"href\"in e&&e.href&&\"protocol\"in e&&e.protocol&&e.auth===void 0)}var Va=[\"history\",\"path\",\"basename\",\"stem\",\"extname\",\"dirname\"],Hr=class{constructor(t){let n;t?wo(t)?n={path:t}:typeof t==\"string\"||Bb(t)?n={value:t}:n=t:n={},this.cwd=\"cwd\"in n?\"\":Ba.default.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let r=-1;for(;++r<Va.length;){let s=Va[r];s in n&&n[s]!==void 0&&n[s]!==null&&(this[s]=s===\"history\"?[...n[s]]:n[s])}let o;for(o in n)Va.includes(o)||(this[o]=n[o])}get basename(){return typeof this.path==\"string\"?ht.default.basename(this.path):void 0}set basename(t){Ua(t,\"basename\"),Wa(t,\"basename\"),this.path=ht.default.join(this.dirname||\"\",t)}get dirname(){return typeof this.path==\"string\"?ht.default.dirname(this.path):void 0}set dirname(t){Qf(this.basename,\"dirname\"),this.path=ht.default.join(t||\"\",this.basename)}get extname(){return typeof this.path==\"string\"?ht.default.extname(this.path):void 0}set extname(t){if(Wa(t,\"extname\"),Qf(this.dirname,\"extname\"),t){if(t.codePointAt(0)!==46)throw new Error(\"`extname` must start with `.`\");if(t.includes(\".\",1))throw new Error(\"`extname` cannot contain multiple dots\")}this.path=ht.default.join(this.dirname,this.stem+(t||\"\"))}get path(){return this.history[this.history.length-1]}set path(t){wo(t)&&(t=(0,za.fileURLToPath)(t)),Ua(t,\"path\"),this.path!==t&&this.history.push(t)}get stem(){return typeof this.path==\"string\"?ht.default.basename(this.path,this.extname):void 0}set stem(t){Ua(t,\"stem\"),Wa(t,\"stem\"),this.path=ht.default.join(this.dirname||\"\",t+(this.extname||\"\"))}fail(t,n,r){let o=this.message(t,n,r);throw o.fatal=!0,o}info(t,n,r){let o=this.message(t,n,r);return o.fatal=void 0,o}message(t,n,r){let o=new _e(t,n,r);return this.path&&(o.name=this.path+\":\"+o.name,o.file=this.path),o.fatal=!1,this.messages.push(o),o}toString(t){return this.value===void 0?\"\":typeof this.value==\"string\"?this.value:new TextDecoder(t||void 0).decode(this.value)}};function Wa(e,t){if(e&&e.includes(ht.default.sep))throw new Error(\"`\"+t+\"` cannot be a path: did not expect `\"+ht.default.sep+\"`\")}function Ua(e,t){if(!e)throw new Error(\"`\"+t+\"` cannot be empty\")}function Qf(e,t){if(!e)throw new Error(\"Setting `\"+t+\"` requires `path` to be set too\")}function Bb(e){return!!(e&&typeof e==\"object\"&&\"byteLength\"in e&&\"byteOffset\"in e)}var ed=function(e){let r=this.constructor.prototype,o=r[e],s=function(){return o.apply(s,arguments)};return Object.setPrototypeOf(s,r),s};var zb={}.hasOwnProperty,Ga=class e extends ed{constructor(){super(\"copy\"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=Ya()}copy(){let t=new e,n=-1;for(;++n<this.attachers.length;){let r=this.attachers[n];t.use(...r)}return t.data((0,ko.default)(!0,{},this.namespace)),t}data(t,n){return typeof t==\"string\"?arguments.length===2?(qa(\"data\",this.frozen),this.namespace[t]=n,this):zb.call(this.namespace,t)&&this.namespace[t]||void 0:t?(qa(\"data\",this.frozen),this.namespace=t,this):this.namespace}freeze(){if(this.frozen)return this;let t=this;for(;++this.freezeIndex<this.attachers.length;){let[n,...r]=this.attachers[this.freezeIndex];if(r[0]===!1)continue;r[0]===!0&&(r[0]=void 0);let o=n.call(t,...r);typeof o==\"function\"&&this.transformers.use(o)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(t){this.freeze();let n=yo(t),r=this.parser||this.Parser;return Ha(\"parse\",r),r(String(n),n)}process(t,n){let r=this;return this.freeze(),Ha(\"process\",this.parser||this.Parser),ja(\"process\",this.compiler||this.Compiler),n?o(void 0,n):new Promise(o);function o(s,l){let u=yo(t),f=r.parse(u);r.run(f,u,function(m,p,g){if(m||!p||!g)return h(m);let w=p,E=r.stringify(w,g);Wb(E)?g.value=E:g.result=E,h(m,g)});function h(m,p){m||!p?l(m):s?s(p):n(void 0,p)}}}processSync(t){let n=!1,r;return this.freeze(),Ha(\"processSync\",this.parser||this.Parser),ja(\"processSync\",this.compiler||this.Compiler),this.process(t,o),nd(\"processSync\",\"process\",n),r;function o(s,l){n=!0,$a(s),r=l}}run(t,n,r){td(t),this.freeze();let o=this.transformers;return!r&&typeof n==\"function\"&&(r=n,n=void 0),r?s(void 0,r):new Promise(s);function s(l,u){let f=yo(n);o.run(t,f,h);function h(m,p,g){let w=p||t;m?u(m):l?l(w):r(void 0,w,g)}}}runSync(t,n){let r=!1,o;return this.run(t,n,s),nd(\"runSync\",\"run\",r),o;function s(l,u){$a(l),o=u,r=!0}}stringify(t,n){this.freeze();let r=yo(n),o=this.compiler||this.Compiler;return ja(\"stringify\",o),td(t),o(t,r)}use(t,...n){let r=this.attachers,o=this.namespace;if(qa(\"use\",this.frozen),t!=null)if(typeof t==\"function\")f(t,n);else if(typeof t==\"object\")Array.isArray(t)?u(t):l(t);else throw new TypeError(\"Expected usable value, not `\"+t+\"`\");return this;function s(h){if(typeof h==\"function\")f(h,[]);else if(typeof h==\"object\")if(Array.isArray(h)){let[m,...p]=h;f(m,p)}else l(h);else throw new TypeError(\"Expected usable value, not `\"+h+\"`\")}function l(h){if(!(\"plugins\"in h)&&!(\"settings\"in h))throw new Error(\"Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither\");u(h.plugins),h.settings&&(o.settings=(0,ko.default)(!0,o.settings,h.settings))}function u(h){let m=-1;if(h!=null)if(Array.isArray(h))for(;++m<h.length;){let p=h[m];s(p)}else throw new TypeError(\"Expected a list of plugins, not `\"+h+\"`\")}function f(h,m){let p=-1,g=-1;for(;++p<r.length;)if(r[p][0]===h){g=p;break}if(g===-1)r.push([h,...m]);else if(m.length>0){let[w,...E]=m,F=r[g][1];Ur(F)&&Ur(w)&&(w=(0,ko.default)(!0,F,w)),r[g]=[h,w,...E]}}}},Xa=new Ga().freeze();function Ha(e,t){if(typeof t!=\"function\")throw new TypeError(\"Cannot `\"+e+\"` without `parser`\")}function ja(e,t){if(typeof t!=\"function\")throw new TypeError(\"Cannot `\"+e+\"` without `compiler`\")}function qa(e,t){if(t)throw new Error(\"Cannot call `\"+e+\"` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.\")}function td(e){if(!Ur(e)||typeof e.type!=\"string\")throw new TypeError(\"Expected node, got `\"+e+\"`\")}function nd(e,t,n){if(!n)throw new Error(\"`\"+e+\"` finished async. Use `\"+t+\"` instead\")}function yo(e){return Vb(e)?e:new Hr(e)}function Vb(e){return!!(e&&typeof e==\"object\"&&\"message\"in e&&\"messages\"in e)}function Wb(e){return typeof e==\"string\"||Ub(e)}function Ub(e){return!!(e&&typeof e==\"object\"&&\"byteLength\"in e&&\"byteOffset\"in e)}var rd=Xa().use(lr).use(po).freeze();var Za={d:(e,t)=>{for(var n in t)Za.o(t,n)&&!Za.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},Ka={};Za.d(Ka,{Z:()=>Gb,$:()=>ad});var hr={horizontalTab:-2,virtualSpace:-1,nul:0,eof:null,space:32};function id(e){return e<hr.nul||e===hr.space}function Ja(e){return e<hr.horizontalTab}var Hb={553:e=>{e.exports=function(t){var n,r;return t._compiled||(n=t.before?\"(?:\"+t.before+\")\":\"\",r=t.after?\"(?:\"+t.after+\")\":\"\",t.atBreak&&(n=\"[\\\\r\\\\n][\\\\t ]*\"+n),t._compiled=new RegExp((n?\"(\"+n+\")\":\"\")+(/[|\\\\{}()[\\]^$+*?.-]/.test(t.character)?\"\\\\\":\"\")+t.character+(r||\"\"),\"g\")),t._compiled}},112:e=>{function t(n,r,o){var s;if(!r)return o;for(typeof r==\"string\"&&(r=[r]),s=-1;++s<r.length;)if(n.indexOf(r[s])!==-1)return!0;return!1}e.exports=function(n,r){return t(n,r.inConstruct,!0)&&!t(n,r.notInConstruct)}},113:(e,t,n)=>{e.exports=function(u,f,h){for(var m,p,g,w,E,F,T,A,_=(h.before||\"\")+(f||\"\")+(h.after||\"\"),I=[],z=[],H={},v=-1;++v<u.unsafe.length;)if(w=u.unsafe[v],o(u.stack,w))for(E=r(w);F=E.exec(_);)m=\"before\"in w||w.atBreak,p=\"after\"in w,g=F.index+(m?F[1].length:0),I.indexOf(g)===-1?(I.push(g),H[g]={before:m,after:p}):(H[g].before&&!m&&(H[g].before=!1),H[g].after&&!p&&(H[g].after=!1));for(I.sort(s),T=h.before?h.before.length:0,A=_.length-(h.after?h.after.length:0),v=-1;++v<I.length;)(g=I[v])<T||g>=A||g+1<A&&I[v+1]===g+1&&H[g].after&&!H[g+1].before&&!H[g+1].after||(T!==g&&z.push(l(_.slice(T,g),\"\\\\\")),T=g,!/[!-/:-@[-`{-~]/.test(_.charAt(g))||h.encode&&h.encode.indexOf(_.charAt(g))!==-1?(z.push(\"&#x\"+_.charCodeAt(g).toString(16).toUpperCase()+\";\"),T++):z.push(\"\\\\\"));return z.push(l(_.slice(T,A),h.after)),z.join(\"\")};var r=n(553),o=n(112);function s(u,f){return u-f}function l(u,f){for(var h,m=/\\\\(?=[!-/:-@[-`{-~])/g,p=[],g=[],w=-1,E=0,F=u+f;h=m.exec(F);)p.push(h.index);for(;++w<p.length;)E!==p[w]&&g.push(u.slice(E,p[w])),g.push(\"\\\\\"),E=p[w];return g.push(u.slice(E)),g.join(\"\")}}},od={};function It(e){var t=od[e];if(t!==void 0)return t.exports;var n=od[e]={exports:{}};return Hb[e](n,n.exports,It),n.exports}It.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return It.d(t,{a:t}),t},It.d=(e,t)=>{for(var n in t)It.o(t,n)&&!It.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},It.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Qa={};(()=>{function e(o={}){let s=o.permalinks||[],l=o.pageResolver||(g=>[g.replace(/ /g,\"_\").toLowerCase()]),u=o.newClassName||\"new\",f=o.wikiLinkClassName||\"internal\",h=o.hrefTemplate||(g=>`#/page/${g}`),m;function p(g){return g[g.length-1]}return{enter:{wikiLink:function(g){m={type:\"wikiLink\",value:null,data:{alias:null,permalink:null,exists:null}},this.enter(m,g)}},exit:{wikiLinkTarget:function(g){let w=this.sliceSerialize(g);p(this.stack).value=w},wikiLinkAlias:function(g){let w=this.sliceSerialize(g);p(this.stack).data.alias=w},wikiLink:function(g){this.exit(g);let w=m,E=l(w.value),F=E.find(z=>s.indexOf(z)!==-1),T=F!==void 0,A;A=T?F:E[0]||\"\";let _=w.value;w.data.alias&&(_=w.data.alias);let I=f;T||(I+=\" \"+u),w.data.alias=_,w.data.permalink=A,w.data.exists=T,w.data.hName=\"a\",w.data.hProperties={className:I,href:h(A)},w.data.hChildren=[{type:\"text\",value:_}]}}}}It.d(Qa,{V:()=>e,x:()=>r});var t=It(113),n=It.n(t);function r(o={}){let s=o.aliasDivider||\":\";return{unsafe:[{character:\"[\",inConstruct:[\"phrasing\",\"label\",\"reference\"]},{character:\"]\",inConstruct:[\"label\",\"reference\"]}],handlers:{wikiLink:function(l,u,f){let h=f.enter(\"wikiLink\"),m=n()(f,l.value,{before:\"[\",after:\"]\"}),p=n()(f,l.data.alias,{before:\"[\",after:\"]\"}),g;return g=p!==m?`[[${m}${s}${p}]]`:`[[${m}]]`,h(),g}}}}})();var jb=Qa.V,qb=Qa.x,sd=!1;function ad(e={}){let t=this.data();function n(r,o){t[r]?t[r].push(o):t[r]=[o]}!sd&&(this.Parser&&this.Parser.prototype&&this.Parser.prototype.blockTokenizers||this.Compiler&&this.Compiler.prototype&&this.Compiler.prototype.visitors)&&(sd=!0,console.warn(\"[remark-wiki-link] Warning: please upgrade to remark 13 to use this plugin\")),n(\"micromarkExtensions\",function(){var r=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}).aliasDivider||\":\",o=\"]]\";return{text:{91:{tokenize:function(s,l,u){var f,h,m=0,p=0,g=0;return function(_){return _!==\"[[\".charCodeAt(p)?u(_):(s.enter(\"wikiLink\"),s.enter(\"wikiLinkMarker\"),w(_))};function w(_){return p===2?(s.exit(\"wikiLinkMarker\"),function(I){return Ja(I)||I===hr.eof?u(I):(s.enter(\"wikiLinkData\"),s.enter(\"wikiLinkTarget\"),E(I))}(_)):_!==\"[[\".charCodeAt(p)?u(_):(s.consume(_),p++,w)}function E(_){return _===r.charCodeAt(m)?f?(s.exit(\"wikiLinkTarget\"),s.enter(\"wikiLinkAliasMarker\"),F(_)):u(_):_===o.charCodeAt(g)?f?(s.exit(\"wikiLinkTarget\"),s.exit(\"wikiLinkData\"),s.enter(\"wikiLinkMarker\"),A(_)):u(_):Ja(_)||_===hr.eof?u(_):(id(_)||(f=!0),s.consume(_),E)}function F(_){return m===r.length?(s.exit(\"wikiLinkAliasMarker\"),s.enter(\"wikiLinkAlias\"),T(_)):_!==r.charCodeAt(m)?u(_):(s.consume(_),m++,F)}function T(_){return _===o.charCodeAt(g)?h?(s.exit(\"wikiLinkAlias\"),s.exit(\"wikiLinkData\"),s.enter(\"wikiLinkMarker\"),A(_)):u(_):Ja(_)||_===hr.eof?u(_):(id(_)||(h=!0),s.consume(_),T)}function A(_){return g===2?(s.exit(\"wikiLinkMarker\"),s.exit(\"wikiLink\"),l(_)):_!==o.charCodeAt(g)?u(_):(s.consume(_),g++,A)}}}}}}(e)),n(\"fromMarkdownExtensions\",jb(e)),n(\"toMarkdownExtensions\",qb(e))}var Gb=ad,VI=Ka.Z,ld=Ka.$;(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function el(e){try{return!e.includes(\"://\")||e.trim()!==e?!1:(new URL(e),!0)}catch{return!1}}var Rn=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function bo(e){let t=(0,Rn.getFrontMatterInfo)(e);return(0,Rn.parseYaml)(t.frontmatter)??{}}function ud(e,t){let n=(0,Rn.getFrontMatterInfo)(e);if(Object.keys(t).length===0)return e.slice(n.contentStart);let r=(0,Rn.stringifyYaml)(t);return n.exists?Uu(e,r,n.from,n.to):`---\n${r}---\n${e}`}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function tl(e){return cd(e)&&e.type===\"file\"}function cd(e){return vt(e)&&!!e.isCanvas}function Xb(e){return cd(e)&&e.type===\"text\"}function mr(e,t){if(rn(e))return{endIndex:e.position.end.offset,newContent:t,oldContent:e.original,startIndex:e.position.start.offset};if(tl(e))return{isCanvas:!0,newContent:t,nodeIndex:e.nodeIndex,oldContent:e.original,type:\"file\"};if(Xb(e))return{isCanvas:!0,newContent:t,nodeIndex:e.nodeIndex,oldContent:e.original,originalReference:e.originalReference,type:\"text\"};if(vt(e))return{frontmatterKey:e.key,newContent:t,oldContent:e.original};throw new Error(\"Unknown link type\")}function fd(e){return e.sort((t,n)=>vt(t)&&vt(n)?t.key.localeCompare(n.key):rn(t)&&rn(n)?t.position.start.offset-n.position.start.offset:vt(t)?1:-1)}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function nl(e){try{await e()}catch(t){Mi(t)}}function pr(e){return(...t)=>{On(()=>e(...t))}}function On(e){nl(e)}async function jr(e,t,n){let r=Qe(\"Async:retryWithTimeout\");n??=xn(1);let s={...{retryDelayInMilliseconds:100,shouldRetryOnError:!1,timeoutInMilliseconds:5e3},...t};await rl(s.timeoutInMilliseconds,async()=>{let l=0;for(;;){s.abortSignal?.throwIfAborted(),l++;let u;try{u=await e()}catch(f){if(!s.shouldRetryOnError||f.__terminateRetry)throw f;Rr(f),u=!1}if(u){l>1&&(r(`Retry completed successfully after ${l.toString()} attempts`),r.printStackTrace(n));return}r(`Retry attempt ${l.toString()} completed unsuccessfully. Trying again in ${s.retryDelayInMilliseconds.toString()} milliseconds`,{fn:e}),r.printStackTrace(n),await dd(s.retryDelayInMilliseconds)}})}async function rl(e,t){let n=!0,r=null,o=performance.now();if(await Promise.race([s(),l()]),n)throw new Error(\"Timed out\");return r;async function s(){r=await t(),n=!1;let u=performance.now()-o;Qe(\"Async:runWithTimeout\")(`Execution time: ${u.toString()} milliseconds`,{fn:t})}async function l(){if(!n||(await dd(e),!n))return;let u=performance.now()-o;console.warn(`Timed out in ${u.toString()} milliseconds`,{fn:t});let f=Qe(\"Async:runWithTimeout:timeout\");f.enabled&&(f(`The execution is not terminated because debugger ${f.namespace} is enabled. See https://github.com/mnaoumov/obsidian-dev-utils/?tab=readme-ov-file#debugging for more information`),await l())}}async function dd(e){await new Promise(t=>{setTimeout(t,e)})}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function hd(e,t,n){let r=Me(e,t),o=ut(n);await xo(e,o);let s=md(e,n);try{await e.vault.copy(r,s)}catch(l){if(!await e.vault.exists(s))throw l}return s}async function xo(e,t){if(await e.vault.adapter.exists(t))return!1;try{return await e.vault.createFolder(t),!0}catch(n){if(!await e.vault.exists(t))throw n;return!0}}function md(e,t){let n=ve(t);return e.vault.getAvailablePath(be(ke(t),pe(t,n)),n.slice(1))}function il(e,t,n){let r=we(e,t);if(e.vault.adapter.insensitive){let o=ke(n),s=pe(n),l;for(;l=_t(e,o,!0),!l;)s=be(pe(o),s),o=ke(o);n=be(l.getParentPrefix(),s)}return r.toLowerCase()===n.toLowerCase()?n:md(e,n)}async function ol(e,t){let n=await sl(e,we(e,t));return n.files.length===0&&n.folders.length===0}async function sl(e,t){let n=we(e,t),r={files:[],folders:[]};if((await e.vault.adapter.stat(n))?.type!==\"folder\")return r;try{return await e.vault.adapter.list(n)}catch(o){if(await e.vault.exists(n))throw o;return r}}async function Eo(e,t,n,r={}){let s={...{shouldFailOnMissingFile:!0},...r};await jr(async()=>{let l=await al(e,t);if(l===null)return m();let u=await En(n,l);if(u===null)return!1;let f=!0;if(!await pd(e,t,async p=>{await e.vault.process(p,g=>g!==l?(console.warn(\"Content has changed since it was read. Retrying...\",{actualContent:g,expectedContent:l,path:p.path}),f=!1,g):u)}))return m();return f;function m(){if(s.shouldFailOnMissingFile){let p=we(e,t);throw new Error(`File '${p}' not found`)}return!0}},s)}async function al(e,t){let n=null;return await pd(e,t,async r=>{n=await e.vault.read(r)}),n}async function Ao(e,t,n){let r=Me(e,t,!1,!0),o=il(e,t,n);if(r.path.toLowerCase()===o.toLowerCase())return r.path!==n&&await e.vault.rename(r,o),o;let s=ut(o);await xo(e,s);try{await e.vault.rename(r,o)}catch(l){if(!await e.vault.exists(o)||await e.vault.exists(r.path))throw l}return o}async function pd(e,t,n){let r=we(e,t),o=Ze(e,r);if(!o||o.deleted)return!1;try{return await n(o),!0}catch(s){if(o=Ze(e,r),!o||o.deleted)return!1;throw s}}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function vo(e,t,n,r={}){await Eo(e,t,async o=>qt(e,t)?Kb(o,we(e,t),n):await gd(o,we(e,t),n),r)}function qr(e){return!!e.isCanvas}function Jb(e){return qr(e)&&e.type===\"file\"}function Zb(e){return qr(e)&&e.type===\"text\"}function Jt(e){return e.startIndex!==void 0}function Co(e){return e.frontmatterKey!==void 0}async function Kb(e,t,n){let r=await En(n),o=Qb(e),s=new Map;for(let l of r){if(!qr(l))return console.warn(\"Only canvas changes are supported for canvas files\",{change:l,path:t}),null;let u=o.nodes[l.nodeIndex];if(!u)return console.warn(\"Node not found\",{nodeIndex:l.nodeIndex,path:t}),null;if(Jb(l)){if(u.file!==l.oldContent)return console.warn(\"Content mismatch\",{actualContent:u.file,expectedContent:l.oldContent,nodeIndex:l.nodeIndex,path:t,type:\"file\"}),null;u.file=l.newContent}else if(Zb(l)){let f=s.get(l.nodeIndex);f||(f=[],s.set(l.nodeIndex,f)),f.push(l)}}for(let[l,u]of s.entries()){let f=o.nodes[l];if(!f)return console.warn(\"Node not found\",{nodeIndex:l,path:t}),null;if(typeof f.text!=\"string\")return console.warn(\"Node text is not a string\",{nodeIndex:l,path:t}),null;let h=u.map(m=>mr(m.originalReference,m.newContent));f.text=await gd(f.text,`${t}.node${l.toString()}.VIRTUAL_FILE.md`,h)}return JSON.stringify(o,null,\"\t\")}async function gd(e,t,n){let r=await En(n),o=bo(e);for(let f of r)if(Jt(f)){let h=e.slice(f.startIndex,f.endIndex);if(h!==f.oldContent)return console.warn(\"Content mismatch\",{actualContent:h,endIndex:f.endIndex,expectedContent:f.oldContent,path:t,startIndex:f.startIndex}),null}else if(Co(f)){let h=nr(o,f.frontmatterKey);if(h!==f.oldContent)return console.warn(\"Content mismatch\",{actualContent:h,expectedContent:f.oldContent,frontmatterKey:f.frontmatterKey,path:t}),null}r.sort((f,h)=>Jt(f)&&Jt(h)?f.startIndex-h.startIndex:Co(f)&&Co(h)?f.frontmatterKey.localeCompare(h.frontmatterKey):Jt(f)?-1:1),r=r.filter((f,h)=>f.oldContent===f.newContent?!1:h===0?!0:!oa(f,r[h-1]));for(let f=1;f<r.length;f++){let h=r[f];if(!h)continue;let m=r[f-1];if(m&&Jt(m)&&Jt(h)&&m.endIndex&&h.startIndex&&m.endIndex>h.startIndex)return console.warn(\"Overlapping changes\",{change:h,previousChange:m}),null}let s=\"\",l=0,u=!1;for(let f of r)Jt(f)?(s+=e.slice(l,f.startIndex),s+=f.newContent,l=f.endIndex):Co(f)&&(Pc(o,f.frontmatterKey,f.newContent),u=!0);return s+=e.slice(l),u&&(s=ud(s,o)),s}function Qb(e){let t;try{t=JSON.parse(e)}catch{t=null}return(t===null||typeof t!=\"object\")&&(t={}),t}var wd=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function ex(e){for(let[t,n]of Object.entries(e.metadataCache.fileCache))n.hash&&(e.metadataCache.metadataCache[n.hash]||await Gr(e,t))}function dn(e){let t=[];return e.links&&t.push(...e.links),e.embeds&&t.push(...e.embeds),e.frontmatterLinks&&t.push(...e.frontmatterLinks),fd(t),t=t.filter((n,r)=>{if(r===0)return!0;let o=t[r-1];return o?rn(n)&&rn(o)?n.position.start.offset!==o.position.start.offset:vt(n)&&vt(o)?n.key!==o.key:!0:!0}),t}function ll(e,t){let n=Me(e,t,!0);return Xr(e,n,()=>e.metadataCache.getBacklinksForFile(n))}async function Zt(e,t,n={}){let r=e.metadataCache.getBacklinksForFile.safe;if(r)return r(t);let o=null;return await jr(async()=>{let s=Me(e,t);await ex(e),o=ll(e,s);for(let l of o.keys()){let u=Ze(e,l);if(!u)return!1;await yd(e,u);let f=await al(e,u);if(!f)return!1;let h=bo(f),m=o.get(l);if(!m)return!1;for(let p of m){let g;if(rn(p))g=f.slice(p.position.start.offset,p.position.end.offset);else if(vt(p)){let w=nr(h,p.key);if(typeof w!=\"string\")return!1;g=w}else return!0;if(g!==p.original)return!1}}return!0},n),o}async function Gr(e,t,n={}){let r=Qe(\"MetadataCache:getCacheSafe\"),o=null;return await jr(async()=>{let s=Ze(e,t);if(!s||s.deleted)return o=null,!0;await yd(e,s);let l=e.metadataCache.getFileInfo(s.path),u=await e.vault.adapter.stat(s.path);return l?u?s.stat.mtime<u.mtime?(e.vault.onChange(\"modified\",s.path,void 0,u),r(`Cached timestamp for ${s.path} is from ${new Date(s.stat.mtime).toString()} which is older than the file system modification timestamp ${new Date(u.mtime).toString()}`),!1):l.mtime<u.mtime?(r(`File cache info for ${s.path} is from ${new Date(l.mtime).toString()} which is older than the file modification timestamp ${new Date(u.mtime).toString()}`),!1):(o=e.metadataCache.getFileCache(s),o?!0:(r(`File cache for ${s.path} is missing`),!1)):(r(`File stat for ${s.path} is missing`),!1):(r(`File cache info for ${s.path} is missing`),!1)},n),o}function tx(e,t){if(!t.deleted)return Ft;let n=[],r=t;for(;r.deleted;)n.push(r.path),e.vault.fileMap[r.path]=r,r=r.parent??Lr(e,ut(r.path),!0);return ct(t)&&e.metadataCache.uniqueFileLookup.add(t.name.toLowerCase(),t),()=>{for(let o of n)delete e.vault.fileMap[o];ct(t)&&e.metadataCache.uniqueFileLookup.remove(t.name.toLowerCase(),t)}}function Xr(e,t,n){let r=tx(e,t);try{return n()}finally{r()}}async function yd(e,t){if(!Gt(e,t))return;let n=we(e,t);for(let r of e.workspace.getLeavesOfType(\"markdown\"))r.view instanceof wd.MarkdownView&&r.view.file?.path===n&&await r.view.save()}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function kd(e){return e.vault.getConfig(\"newLinkFormat\")===\"relative\"}function bd(e){return!e.vault.getConfig(\"useMarkdownLinks\")}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var rx=\"\\\\|\",ix=/[\\\\\\x00\\x08\\x0B\\x0C\\x0E-\\x1F ]/g,ox=/[\\\\[\\]<>_*~=`$]/g,xd=/(?<!\\\\)\\|/g,Ed=\"|\";function sx(e){let t=gr(e.app,e.link,e.oldSourcePathOrFile??e.newSourcePathOrFile);return t?Zr({app:e.app,link:e.link,newSourcePathOrFile:e.newSourcePathOrFile,newTargetPathOrFile:t,oldSourcePathOrFile:e.oldSourcePathOrFile,shouldForceMarkdownLinks:e.shouldForceMarkdownLinks,shouldUpdateFilenameAlias:e.shouldUpdateFilenameAlias}):e.link.original}async function ul(e,t,n,r={}){await vo(e,t,async()=>{let o=await Gr(e,t);if(!o)return[];let s=[],l=(o.sections??[]).filter(u=>u.type===\"table\").map(u=>({end:u.position.end.offset,start:u.position.start.offset}));for(let u of dn(o)){let f=await n(u);if(f===void 0)continue;let h=mr(u,f);qt(e,t)?qr(h)?s.push(h):console.warn(\"Unsupported file change\",h):(kx(h,l)&&(h.newContent=h.newContent.replaceAll(xd,rx)),s.push(h))}return s},r)}function gr(e,t,n){let{linkPath:r}=Ad(t.link);return e.metadataCache.getFirstLinkpathDest(r,we(e,n))}function ax(e){let{app:t}=e,r=(t.fileManager.generateMarkdownLink.defaultOptionsFn??(()=>({})))();e={...{isEmptyEmbedAliasAllowed:!0},...r,...e};let s=Me(t,e.targetPathOrFile,e.isNonExistingFileAllowed);return Xr(t,s,()=>dx(e))}function Jr(e){let t=wx(e);if(t)return t;let n=\"!\",r=e.startsWith(n);r&&(e=Gn(e,n));let s=rd().use(lr).use(ld,{aliasDivider:Ed}).parse(e);if(s.children.length!==1)return null;let l=s.children[0];if(l?.type!==\"paragraph\"||l.children.length!==1)return null;let u=l.children[0];if(u?.position?.start.offset!==0||u.position.end.offset!==e.length)return null;switch(u.type){case\"link\":return gx(u,e,r);case\"wikiLink\":return yx(u,e,r);default:return null}}function lx(e){let{app:t,displayText:n,isWikilink:r,newSourcePathOrFile:o,oldSourcePathOrFile:s,oldTargetPath:l,targetPathOrFile:u}=e;if(r===!1)return!1;if(!n)return!0;let f=Me(t,u,!0),h=we(t,o),m=we(t,s??o),p=ke(h),g=ke(m),w=new Set;for(let F of[f.path,l]){if(!F)continue;let T=we(t,F);w.add(T),w.add(pe(T)),w.add(Xn(p,T)),w.add(Xn(g,T))}for(let F of[m,h])w.add(t.metadataCache.fileToLinktext(f,F,!1));let E=Ce((0,So.normalizePath)(n.split(\" > \")[0]??\"\"),/^\\.\\//g,\"\").toLowerCase();for(let F of w){if(F.toLowerCase()===E)return!0;let T=ke(F),A=pe(F,ve(F));if(be(T,A).toLowerCase()===E)return!0}return!1}function Ad(e){let t=(0,So.parseLinktext)(Or(e));return{linkPath:t.path,subpath:t.subpath}}function ux(e){return Jr(e)?.hasAngleBrackets??!1}function Cd(e){return Jr(e)?.isEmbed??!1}function cx(e){return Jr(e)?.url.startsWith(\"./\")??!1}function vd(e){return Jr(e)?.isWikilink??!1}function Zr(e){let{app:t,link:n,newSourcePathOrFile:r,newTargetPathOrFile:o,oldSourcePathOrFile:s,oldTargetPathOrFile:l,shouldForceMarkdownLinks:u,shouldUpdateFilenameAlias:f}=e;if(!o)return n.original;let h=Me(t,o,!0),m=we(t,l??o),p=vd(n.original)&&u!==!0,{subpath:g}=Ad(n.link),w=!f;if(qt(t,r)&&tl(n))return h.path+g;let E;if(p){let T=Jr(n.original);T?.alias&&(E=T.alias,w=!0)}return E??=lx({app:t,displayText:n.displayText,isWikilink:p,newSourcePathOrFile:r,oldSourcePathOrFile:s,oldTargetPath:m,targetPathOrFile:h})?void 0:n.displayText,w||(E===pe(m,ve(m))?E=h.basename:E===pe(m)&&(E=h.name)),ax({alias:E,app:t,isWikilink:u?!1:void 0,originalLink:n.original,sourcePathOrFile:r,subpath:g,targetPathOrFile:h})}async function Sd(e){let{app:t,newSourcePathOrFile:n,oldSourcePathOrFile:r,shouldForceMarkdownLinks:o,shouldUpdateEmbedOnlyLinks:s,shouldUpdateFilenameAlias:l}=e;qt(t,n)&&!t.internalPlugins.getEnabledPluginById(Ut.Canvas)||await ul(t,n,u=>{let f=Cd(u.original);if(!(s!==void 0&&s!==f))return sx({app:t,link:u,newSourcePathOrFile:n,oldSourcePathOrFile:r,shouldForceMarkdownLinks:o,shouldUpdateFilenameAlias:l})},e)}function fx(e,t,n,r,o){let s;return t.path===n&&r?s=r:o.shouldForceRelativePath?s=Xn(ke(n),o.isWikilink?Zu(e,t):t.path)+r:s=e.metadataCache.fileToLinktext(t,n,o.isWikilink)+r,o.shouldForceRelativePath&&o.shouldUseLeadingDot&&!s.startsWith(\".\")&&!s.startsWith(\"#\")&&(s=`./${s}`),s}function dx(e){let{app:t}=e,n=Me(t,e.targetPathOrFile,e.isNonExistingFileAllowed),r=we(t,e.sourcePathOrFile),o=e.subpath??\"\",s=px(e,n),l=fx(t,n,r,o,s);return s.isWikilink?mx(l,e.alias,s.isEmbed):hx(l,n,e,s)}function hx(e,t,n,r){let{app:o}=n,s=r.isEmbed?\"!\":\"\",l=r.shouldUseAngleBrackets?`<${e}>`:Ce(e,ix,({substring:h})=>encodeURIComponent(h)),u=n.alias??\"\";!u&&(!r.isEmbed||!n.isEmptyEmbedAliasAllowed)&&(u=!n.shouldIncludeAttachmentExtensionToEmbedAlias||Gt(o,t)?t.basename:t.name);let f=Ce(u,ox,\"\\\\$&\");return`${s}[${f}](${l})`}function mx(e,t,n){let r=n?\"!\":\"\",o=t??\"\";if(o&&o.toLowerCase()===e.toLowerCase())return`${r}[[${o}]]`;let s=o?`|${o}`:\"\";return`${r}[[${e}${s}]]`}function px(e,t){let{app:n}=e;return{isEmbed:e.isEmbed??(e.originalLink?Cd(e.originalLink):void 0)??!Gt(n,t),isWikilink:e.isWikilink??(e.originalLink?vd(e.originalLink):void 0)??bd(n),shouldForceRelativePath:e.shouldForceRelativePath??kd(n),shouldUseAngleBrackets:e.shouldUseAngleBrackets??(e.originalLink?ux(e.originalLink):void 0)??!1,shouldUseLeadingDot:e.shouldUseLeadingDot??(e.originalLink?cx(e.originalLink):void 0)??!1}}function gx(e,t,n){let r=\"<\",o=\"](\",s=\")\",l=e.children[0],u=t.slice((l?.position?.end.offset??1)+o.length,(e.position?.end.offset??0)-s.length),f=t.startsWith(r)||u.startsWith(r),h=el(e.url),m=e.url;if(!h&&!f)try{m=decodeURIComponent(m)}catch(p){console.error(`Failed to decode URL ${m}`,p)}return{alias:l?.value,hasAngleBrackets:f,isEmbed:n,isExternal:h,isWikilink:!1,title:e.title??void 0,url:m}}function wx(e){return el(e)?{isEmbed:!1,isExternal:!0,isWikilink:!1,url:e}:null}function yx(e,t,n){return{alias:t.includes(Ed)?e.data.alias:void 0,isEmbed:n,isExternal:!1,isWikilink:!0,url:e.value}}function kx(e,t){return!Jt(e)||!xd.test(e.newContent)?!1:t.some(n=>n.start<=e.startIndex&&e.endIndex<=n.end)}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function Td(e,t,n){let r=Qe(\"Logger:invokeAsyncAndLog\"),o=performance.now();n??=xn(1),r(`${e}:start`,{fn:t,timestampStart:o}),r.printStackTrace(n);try{await t();let s=performance.now();r(`${e}:end`,{duration:s-o,fn:t,timestampEnd:s,timestampStart:o}),r.printStackTrace(n)}catch(s){let l=performance.now();throw r(`${e}:error`,{duration:l-o,error:s,fn:t,timestampEnd:l,timestampStart:o}),r.printStackTrace(n),s}}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function hn(e,t,n,r){r??=xn(1),On(()=>bx(e,t,n,r))}async function bx(e,t,n,r){n??=6e4,r??=xn(1);let s=_d(e).value;s.items.push({fn:t,stackTrace:r,timeoutInMilliseconds:n}),s.promise=s.promise.then(()=>Fd(e)),await s.promise}function _d(e){return an(e,\"queue\",{items:[],promise:Promise.resolve()})}async function Fd(e){let t=_d(e).value,n=t.items[0];n&&(await nl(()=>rl(n.timeoutInMilliseconds,()=>Td(Fd.name,n.fn,n.stackTrace))),t.items.shift())}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function To(e,t){let n=_t(e,t);for(;n;){if(!await ol(e,n))return;let r=n.parent;await Kr(e,n.path),n=r}}async function Kr(e,t,n,r,o){let s=Cn(e,t);if(!s)return!1;let l=ct(s)||(o??!0);if(ct(s)){let u=await Zt(e,s);n&&u.clear(n),u.count()!==0&&(r&&new Notice(`Attachment ${s.path} is still used by other notes. It will not be deleted.`),l=!1)}else if(Hs(s)){let u=await sl(e,s);for(let f of[...u.files,...u.folders])l&&=await Kr(e,f,n,r);l&&=await ol(e,s)}if(l)try{await e.fileManager.trashFile(s)}catch(u){await e.vault.exists(s.path)&&(Rr(new Error(`Failed to delete ${s.path}`,{cause:u})),l=!1)}return l}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var cl=new Map,Qr=new Set,_o=new Map;function Od(e,t){let n=Fo(e.app),r=e.manifest.id;n.set(r,t),Pd(e.app),e.register(()=>{n.delete(r),Pd(e.app)});let o=e.app;e.registerEvent(o.vault.on(\"delete\",s=>{vx(e,s)})),e.registerEvent(o.vault.on(\"rename\",(s,l)=>{Fx(e,s,l)})),e.registerEvent(o.metadataCache.on(\"deleted\",(s,l)=>{Tx(e,s,l)}))}async function xx(e,t,n,r,o){let s=_o.get(t);if(s){_o.delete(t);for(let l of s)await fl(e,l.oldPath,n,r,o,l.combinedBacklinksMap)}}async function Ex(e,t,n,r,o){if(r.set(t,n),!Ke(e,t))return;let s=ei(e),l=await Jn(e,t),u=s.shouldRenameAttachmentFolder?await Jn(e,n):l,f=_t(e,l);if(!f||l===u&&!s.shouldRenameAttachmentFiles)return;let h=[];if(await qs(e,t))Rd.Vault.recurseChildren(f,g=>{ct(g)&&h.push(g)});else for(let g of o){let w=gr(e,g,t);w&&w.path.startsWith(l)&&(await Zt(e,w)).keys().length===1&&h.push(w)}let m=pe(t,ve(t)),p=pe(n,ve(n));for(let g of h){if(Ke(e,g))continue;let w=Xn(l,g.path),E=be(u,ke(w)),F=s.shouldRenameAttachmentFiles?Ce(g.basename,m,p):g.basename,T=be(E,An(F,g.extension));if(g.path!==T){if(s.shouldDeleteConflictingAttachments){let A=Ze(e,T);A&&await e.fileManager.trashFile(A)}else T=e.vault.getAvailablePath(be(E,F),g.extension);r.set(g.path,T)}}}function Fo(e){return an(e,\"renameDeleteHandlersMap\",new Map).value}function ei(e){let t=Fo(e),n=Array.from(t.values()).reverse(),r={};for(let o of n){let s=o();r.shouldDeleteConflictingAttachments||=s.shouldDeleteConflictingAttachments??!1,r.shouldDeleteEmptyFolders||=s.shouldDeleteEmptyFolders??!1,r.shouldHandleDeletions||=s.shouldHandleDeletions??!1,r.shouldHandleRenames||=s.shouldHandleRenames??!1,r.shouldRenameAttachmentFiles||=s.shouldRenameAttachmentFiles??!1,r.shouldRenameAttachmentFolder||=s.shouldRenameAttachmentFolder??!1,r.shouldUpdateFilenameAliases||=s.shouldUpdateFilenameAliases??!1;let l=r.isPathIgnored;r.isPathIgnored=u=>l?.(u)??s.isPathIgnored?.(u)??!1}return r}async function Ax(e,t,n,r,o){if(!e.vault.adapter.insensitive||t.toLowerCase()!==n.toLowerCase())return!1;let s=be(ke(n),`__temp__${pe(n)}`);return await Dd(e,n,s),await fl(e,t,s,r,o),await e.vault.rename(Me(e,s),n),!0}async function Cx(e,t){if(Qe(\"RenameDeleteHandler:handleDelete\")(`Handle Delete ${t}`),!Ke(e,t))return;let n=ei(e);if(!n.shouldHandleDeletions||n.isPathIgnored?.(t))return;let r=cl.get(t);if(cl.delete(t),r){let l=dn(r);for(let u of l){let f=gr(e,u,t);f&&(Ke(e,f)||await Kr(e,f,t,n.shouldDeleteEmptyFolders))}}let o=await Jn(e,t),s=_t(e,o);s&&await qs(e,t)&&await Kr(e,s,t,!1,n.shouldDeleteEmptyFolders)}function vx(e,t){let n=e.app;if(!dl(e))return;let r=t.path;hn(n,()=>Cx(n,r))}function Sx(e,t,n){let r=ei(e);r.isPathIgnored?.(t.path)||r.shouldHandleDeletions&&Gt(e,t)&&n&&cl.set(t.path,n)}function Tx(e,t,n){dl(e)&&Sx(e.app,t,n)}function _x(e,t,n){let r=Ld(t,n);if(Qe(\"RenameDeleteHandler:handleRename\")(`Handle Rename ${r}`),Qr.has(r)){Qr.delete(r);return}let o=ei(e);if(!o.shouldHandleRenames||o.isPathIgnored?.(t)||o.isPathIgnored?.(n))return;let s=e.metadataCache.getCache(t)??e.metadataCache.getCache(n),l=s?dn(s):[],u=ll(e,t).data;hn(e,()=>fl(e,t,n,u,l))}async function fl(e,t,n,r,o,s){if(await xx(e,t,n,r,o),await Ix(e,t,n,r,o),await Ax(e,t,n,r,o))return;let l=Hn(e.fileManager,{updateAllLinks:()=>ta});try{let u=new Map;await Ex(e,t,n,u,o);let f=new Map;Id(r,u,f,t);for(let p of u.keys()){if(p===t)continue;let g=(await Zt(e,p)).data;Id(g,u,f,p)}let h=new Set;for(let[p,g]of u.entries()){if(p===t)continue;let w=await Dd(e,p,g);u.set(p,w),h.add(ke(p))}let m=ei(e);if(m.shouldDeleteEmptyFolders)for(let p of h)await To(e,p);for(let[p,g]of Array.from(f.entries()).concat(Array.from(s?.entries()??[])))await ul(e,p,w=>{let E=g.get(rr(w));if(!E)return;let F=u.get(E);if(F)return Zr({app:e,link:w,newSourcePathOrFile:p,newTargetPathOrFile:F,oldTargetPathOrFile:E,shouldUpdateFilenameAlias:m.shouldUpdateFilenameAliases})},{shouldFailOnMissingFile:!1});if(Ke(e,n)&&await Sd({app:e,newSourcePathOrFile:n,oldSourcePathOrFile:t,shouldFailOnMissingFile:!1,shouldUpdateFilenameAlias:m.shouldUpdateFilenameAliases}),!Ze(e,n)){let p=_o.get(n);p||(p=[],_o.set(n,p)),p.push({combinedBacklinksMap:f,oldPath:t})}}finally{l();let u=Array.from(Qr);hn(e,()=>{for(let f of u)Qr.delete(f)})}}function Fx(e,t,n){if(!dl(e)||!ct(t))return;let r=t.path;_x(e.app,n,r)}function Id(e,t,n,r){for(let[o,s]of e.entries()){let l=t.get(o)??o,u=n.get(l)??new Map;n.set(l,u);for(let f of s)u.set(rr(f),r)}}function Pd(e){let t=Fo(e);Qe(\"RenameDeleteHandler:logRegisteredHandlers\")(`Plugins with registered rename/delete handlers: ${JSON.stringify(Array.from(t.keys()))}`)}function Ld(e,t){return`${e} -> ${t}`}async function Ix(e,t,n,r,o){let s=e.metadataCache.getCache(t)??e.metadataCache.getCache(n),l=s?dn(s):[],u=Me(e,t,!0),f=new Map;await Xr(e,u,async()=>{f=(await Zt(e,u)).data});for(let h of l)o.includes(h)||o.push(h);for(let[h,m]of f.entries()){let p=r.get(h);p||(p=[],r.set(h,p));for(let g of m)p.includes(g)||p.push(g)}}async function Dd(e,t,n){if(n=il(e,t,n),t===n)return n;let r=Ld(t,n);return Qr.add(r),n=await Ao(e,t,n),n}function dl(e){let t=e.app,n=e.manifest.id,r=Fo(t);return Array.from(r.keys())[0]===n}var np=Le(Sm(),1);var Dn=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function tt(e,t){e.createEl(\"strong\",{cls:\"markdown-rendered code\"},n=>{n.createEl(\"code\",{text:t})})}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();async function Tm(e){let t=e.items,n=0,r=new Notice(\"\",0);for(let o of t){if(e.abortSignal?.aborted){r.hide();return}n++;let s=`# ${n.toString()} / ${t.length.toString()}`,l=e.buildNoticeMessage(o,s);r.setMessage(l),Qe(\"Loop\")(l);try{await e.processItem(o)}catch(u){if(e.shouldContinueOnError)throw r.hide(),u;Mi(u)}}r.hide()}var Pl=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Rl=class extends on{isConfirmed=!1;options;constructor(t,n){super(t,n,W.ConfirmModal);let r={app:t.app,cancelButtonText:\"Cancel\",cssClass:\"\",message:t.message,okButtonText:\"OK\",title:\"\"};this.options={...r,...t}}onClose(){this.resolve(this.isConfirmed)}onOpen(){this.titleEl.setText(this.options.title),this.contentEl.createEl(\"p\",{text:this.options.message});let t=new Pl.ButtonComponent(this.contentEl);t.setButtonText(this.options.okButtonText),t.setCta(),t.onClick(()=>{this.isConfirmed=!0,this.close()}),t.setClass(W.OkButton);let n=new Pl.ButtonComponent(this.contentEl);n.setButtonText(this.options.cancelButtonText),n.onClick(this.close.bind(this)),n.setClass(W.CancelButton)}};async function _m(e){return await Zn(t=>new Rl(e,t))}var Om=require(\"obsidian\");var Ll=Le(Wt(),1);var li=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Ol=class extends on{isOkClicked=!1;options;value;constructor(t,n){super(t,n,W.PromptModal);let r={app:t.app,cancelButtonText:\"Cancel\",defaultValue:\"\",okButtonText:\"OK\",placeholder:\"\",title:\"\",valueValidator:Ft};this.options={...r,...t},this.value=t.defaultValue??\"\"}onClose(){this.resolve(this.isOkClicked?this.value:null)}onOpen(){this.titleEl.setText(this.options.title);let t=new li.TextComponent(this.contentEl),n=t.inputEl,r=async()=>{let l=await this.options.valueValidator(n.value);n.setCustomValidity(l??\"\"),n.reportValidity()};t.setValue(this.value),t.setPlaceholder(this.options.placeholder),n.addClass(W.TextBox),t.onChange(l=>{this.value=l}),n.addEventListener(\"keydown\",l=>{l.key===\"Enter\"?this.handleOk(l,t):l.key===\"Escape\"&&this.close()}),n.addEventListener(\"input\",pr(r)),n.addEventListener(\"focus\",pr(r)),On(r);let o=new li.ButtonComponent(this.contentEl);o.setButtonText(this.options.okButtonText),o.setCta(),o.onClick(l=>{this.handleOk(l,t)}),o.setClass(W.OkButton);let s=new li.ButtonComponent(this.contentEl);s.setButtonText(this.options.cancelButtonText),s.onClick(this.close.bind(this)),s.setClass(W.CancelButton)}handleOk(t,n){t.preventDefault(),n.inputEl.checkValidity()&&(this.isOkClicked=!0,this.close())}};async function Fm(e){return await Zn(t=>new Ol(e,t))}var SC=/^\\.{3,}$/,TC=/[. ]+$/,Dl=/[\\\\/:*?\"<>|]/,ui=/\\${(?<Token>.+?)(?::(?<Format>.+?))?}/g;function Ml(e){let t=new Map;try{let n=new Function(\"exports\",e),r={};n(r);for(let[o,s]of Object.entries(r))t.set(o,s);return t}catch(n){throw new Error(\"Error initializing custom token formatters\",{cause:n})}}function _C(e){return(0,Ll.default)().format(e)}function Im(e,t,n,r){let o=Ze(e,t);return o?(0,Ll.default)(r(o)).format(n):\"\"}function FC(){return Nl(\"0123456789\")}function IC(){return Nl(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\")}function PC(){return Nl(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")}function RC(){return crypto.randomUUID()}function OC(e,t,n){let r=Ze(e,t);if(!r)return\"\";let o=e.metadataCache.getFileCache(r);if(!o?.frontmatter)return\"\";let s=nr(o.frontmatter,n)??\"\";return String(s)}var Et=class e{constructor(t,n,r=\"\"){this.app=t;this.filePath=n;this.originalCopiedFileName=r;this.fileName=pe(n,ve(n)),this.folderName=pe(ke(n)),this.folderPath=ke(n);let o=ve(r);this.originalCopiedFileName=pe(r,o),this.originalCopiedFileExtension=o.slice(1)}static formatters=new Map;static{this.registerCustomFormatters(\"\")}fileName;folderName;folderPath;originalCopiedFileExtension;static isRegisteredToken(t){return e.formatters.has(t.toLowerCase())}static registerCustomFormatters(t){this.formatters.clear(),this.registerFormatter(\"date\",(r,o)=>_C(o)),this.registerFormatter(\"fileCreationDate\",(r,o)=>Im(r.app,r.filePath,o,s=>s.stat.ctime)),this.registerFormatter(\"fileModificationDate\",(r,o)=>Im(r.app,r.filePath,o,s=>s.stat.mtime)),this.registerFormatter(\"fileName\",r=>r.fileName),this.registerFormatter(\"filePath\",r=>r.filePath),this.registerFormatter(\"folderName\",r=>r.folderName),this.registerFormatter(\"folderPath\",r=>r.folderPath),this.registerFormatter(\"frontmatter\",(r,o)=>OC(r.app,r.filePath,o)),this.registerFormatter(\"originalCopiedFileExtension\",r=>r.originalCopiedFileExtension),this.registerFormatter(\"originalCopiedFileName\",r=>r.originalCopiedFileName),this.registerFormatter(\"prompt\",r=>r.prompt()),this.registerFormatter(\"randomDigit\",()=>FC()),this.registerFormatter(\"randomDigitOrLetter\",()=>IC()),this.registerFormatter(\"randomLetter\",()=>PC()),this.registerFormatter(\"uuid\",()=>RC());let n=Ml(t)??new Map;for(let[r,o]of n.entries())this.registerFormatter(r,o)}static registerFormatter(t,n){this.formatters.set(t.toLowerCase(),n)}async fillTemplate(t){return await Hu(t,ui,async(n,r,o)=>{let s=e.formatters.get(r.toLowerCase());if(!s)throw new Error(`Invalid token: ${r}`);try{return String(await s(this,o)??\"\")}catch(l){throw new Error(`Error formatting token \\${${r}}`,{cause:l})}})}async prompt(){let t=await Fm({app:this.app,defaultValue:this.originalCopiedFileName,title:\"Provide a value for ${prompt} template\",valueValidator:n=>zo(n,!1)});if(t===null)throw new Error(\"Prompt cancelled\");return t}};function zo(e,t=!0){if(t){e=Pm(e);let n=Rm(e);if(n)return`Unknown token: ${n}`}else if(e.match(ui))return\"Tokens are not allowed in file name\";return e===\".\"||e===\"..\"?\"\":e?Dl.test(e)?`File name \"${e}\" contains invalid symbols`:SC.test(e)?`File name \"${e}\" contains more than two dots`:TC.test(e)?`File name \"${e}\" contains trailing dots or spaces`:\"\":\"File name is empty\"}function ci(e,t=!0){if(t){e=Pm(e);let r=Rm(e);if(r)return`Unknown token: ${r}`}else if(e.match(ui))return\"Tokens are not allowed in path\";if(e=Gn(e,\"/\"),e=Ni(e,\"/\"),e===\"\")return\"\";let n=e.split(\"/\");for(let r of n){let o=zo(r);if(o)return o}return\"\"}function Nl(e){return e[Math.floor(Math.random()*e.length)]??\"\"}function Pm(e){return Ce(e,ui,(t,n)=>`\\${${n}}`)}function Rm(e){let t=e.matchAll(ui);for(let n of t){let r=n[1]??\"\";if(!Et.isRegisteredToken(r))return r}return null}async function Vo(e,t,n){return await DC(e,new Et(e.app,t,n))}async function Wo(e,t){return await Lm(e,e.settings.generatedAttachmentFilename,t)}function LC(e,t){if(!e.settings.specialCharacters)return t;t=t.replace(e.settings.specialCharactersRegExp,e.settings.specialCharactersReplacement);let n=qn(e.settings.specialCharactersReplacement);return t=t.replace(new RegExp(`${n}{2,}`,\"g\"),e.settings.specialCharactersReplacement),t}async function DC(e,t){return await Lm(e,e.settings.attachmentFolderPath,t)}async function Lm(e,t,n){let r=await n.fillTemplate(t),o=ci(r,!1);if(o)throw new Error(`Resolved path ${r} is invalid: ${o}`);return e.settings.shouldRenameAttachmentsToLowerCase&&(r=r.toLowerCase()),r=LC(e,r),(r.startsWith(\"./\")||r.startsWith(\"../\"))&&(r=be(n.folderPath,r)),r=(0,Om.normalizePath)(r),r}async function Dm(e,t,n,r){let o=e.app;n??=t.path,r??=()=>!0;let s=new Dn.Notice(`正在为 ${t.path} 收集附件`),l=new Map,u=qt(o,t);await vo(o,t,async()=>{let f=await Gr(o,t);if(!f)return[];let h=u?await MC(o,t):dn(f),m=[];for(let p of h){let g=await NC(e,p,t.path,n);if(!g||!r(g.oldAttachmentPath))continue;if((await Zt(o,g.oldAttachmentPath)).count()>1?g.newAttachmentPath=await hd(o,g.oldAttachmentPath,g.newAttachmentPath):(g.newAttachmentPath=await Ao(o,g.oldAttachmentPath,g.newAttachmentPath),await To(o,ke(g.oldAttachmentPath))),l.set(g.oldAttachmentPath,g.newAttachmentPath),!u){let E=Zr({app:o,link:p,newSourcePathOrFile:t,newTargetPathOrFile:g.newAttachmentPath,oldTargetPathOrFile:g.oldAttachmentPath});m.push(mr(p,E))}}return m}),u&&await Eo(o,t,f=>{let h=JSON.parse(f);for(let m of h.nodes){if(m.type!==\"file\")continue;let p=l.get(m.file);p&&(m.file=p)}return rr(h)}),s.hide()}function Mm(e,t){let n=e.app.workspace.getActiveFile();return Ke(e.app,n)?(t||hn(e.app,()=>Uo(e,n?.parent??Ht(new Error(\"Parent folder not found\")))),!0):!1}function Nm(e,t){let n=e.app.workspace.getActiveFile();if(!n||!Ke(e.app,n))return!1;if(!t){if(e.settings.isPathIgnored(n.path))return new Dn.Notice(\"笔记路径被忽略\"),!0;hn(e.app,()=>Dm(e,n))}return!0}function $m(e){hn(e.app,()=>Uo(e,e.app.vault.getRoot()))}async function Uo(e,t){if(!await _m({app:e.app,message:createFragment(r=>{r.appendText(\"Do you want to collect attachments for all notes in folder: \"),tt(r,t.path),r.appendText(\"及其所有子文件夹？\"),r.createEl(\"br\"),r.appendText(\"This operation cannot be undone.\")}),title:createFragment(r=>{(0,Dn.setIcon)(r.createSpan(),\"lucide-alert-triangle\"),r.appendText(\"收集文件夹中的附件\")})}))return;e.consoleDebug(`Collect attachments in folder: ${t.path}`);let n=[];Dn.Vault.recurseChildren(t,r=>{Ke(e.app,r)&&n.push(r)}),n.sort((r,o)=>r.path.localeCompare(o.path)),await Tm({abortSignal:e.abortSignal,buildNoticeMessage:(r,o)=>`Collecting attachments ${o} - ${r.path}`,items:n,processItem:async r=>{e.settings.isPathIgnored(r.path)||await Dm(e,r)},shouldContinueOnError:!0})}async function MC(e,t){return(await e.vault.readJson(t.path)).nodes.filter(o=>o.type===\"file\").map(o=>o.file).map(o=>({link:o,original:o,position:{end:{col:0,line:0,loc:0,offset:0},start:{col:0,line:0,loc:0,offset:0}}}))}async function NC(e,t,n,r){let o=e.app,s=gr(o,t,r);if(!s||Ke(e.app,s))return null;let l=s.path,u=s.name,f=pe(r,ve(r)),h=pe(n,ve(n)),m;e.settings.shouldRenameCollectedAttachments?m=An(await Wo(e,new Et(e.app,n,s.name)),s.extension):e.settings.shouldRenameAttachmentFiles?m=u.replaceAll(f,h):m=u;let p=await Vo(e,n,m),g=be(p,m);return l===g?null:{newAttachmentPath:g,oldAttachmentPath:l}}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var mn=class{getTransformer(t){if(t===this.id)return this;throw new Error(`Transformer with id ${t} not found`)}transformObjectRecursively(t){return this.transformValueRecursively(t,\"\")}getTransformerId(t,n){return this.canTransform(t,n)?this.id:null}transformValueRecursively(t,n){let r=this.getTransformerId(t,n);if(r){let s=this.transformValue(t,n);return s===void 0?void 0:{__transformerId:r,transformedValue:s}}if(t===null)return null;if(typeof t!=\"object\")return t;if(Array.isArray(t))return t.map((s,l)=>this.transformValueRecursively(s,l.toString()));let o=t;return o.__transformerId?this.getTransformer(o.__transformerId).restoreValue(o.transformedValue,n):Object.fromEntries(Object.entries(t).map(([s,l])=>[s,this.transformValueRecursively(l,s)]))}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var kr=class extends mn{};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Ho=class extends kr{get id(){return\"date\"}canTransform(t){return t instanceof Date}restoreValue(t){return new Date(t)}transformValue(t){return t.toISOString()}};var Ym=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var jo=class extends kr{get id(){return\"duration\"}canTransform(t){let n=t;return!!n.asHours&&!!n.asMinutes&&!!n.asSeconds&&!!n.asMilliseconds}restoreValue(t){return(0,Ym.duration)(t)}transformValue(t){return t.toISOString()}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var qo=class extends mn{constructor(t){super(),this.transformers=t}get id(){return\"group\"}canTransform(t,n){return this.getFirstTransformerThatCanTransform(t,n)!==null}getTransformer(t){return this.transformers.find(n=>n.id===t)??Ht(`No transformer with id ${t} found`)}transformValue(t,n){let r=this.getFirstTransformerThatCanTransform(t,n);if(r===null)throw new Error(\"No transformer can transform the value\");return r.transformValue(t,n)}getTransformerId(t,n){let r=this.getFirstTransformerThatCanTransform(t,n);return r===null?null:r.id}restoreValue(){throw new Error(\"GroupTransformer does not support restoring values\")}getFirstTransformerThatCanTransform(t,n){return this.transformers.find(r=>r.canTransform(t,n))??null}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var $C=\"_\",Go=class extends mn{get id(){return\"skip-private-property\"}canTransform(t,n){return n.startsWith($C)}transformValue(){}restoreValue(){throw new Error(\"SkipPrivatePropertyTransformer does not support restoring values\")}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var YC=new qo([new Go,new Ho,new jo]),Xo=class{get shouldSaveAfterLoad(){return this._shouldSaveAfterLoad}_shouldSaveAfterLoad=!1;init(t){if(t!=null){if(typeof t!=\"object\"||Array.isArray(t)){let n=Array.isArray(t)?\"Array\":typeof t;console.error(`无效的数据类型。预期为对象，实际为：${n}`);return}this.initFromRecord(t)}}toJSON(){return this.getTransformer().transformObjectRecursively(this)}getTransformer(){return YC}initFromRecord(t){t=this.getTransformer().transformObjectRecursively(t);for(let[n,r]of Object.entries(t)){if(!(n in this)){console.warn(`Unknown property: ${n}`);continue}this[n]=r}}};var Bm=/(?:)/,zm=/$./,br=(r=>(r.None=\"None\",r.OnlyPastedImages=\"Only pasted images\",r.All=\"All\",r))(br||{}),Jo=class extends Xo{attachmentFolderPath=\"./assets/${filename}\";attachmentRenameMode=\"Only pasted images\";duplicateNameSeparator=\" \";generatedAttachmentFilename=\"file-${date:YYYYMMDDHHmmssSSS}\";jpegQuality=.8;shouldConvertPastedImagesToJpeg=!1;shouldDeleteOrphanAttachments=!1;shouldKeepEmptyAttachmentFolders=!1;shouldRenameAttachmentFiles=!1;shouldRenameAttachmentFolder=!0;shouldRenameAttachmentsToLowerCase=!1;shouldRenameCollectedAttachments=!1;specialCharacters=\"#^[]|*\\\\<>:?\";specialCharactersReplacement=\"-\";warningVersion=\"0.0.0\";get customTokensStr(){return this._customTokensStr}set customTokensStr(t){this._customTokensStr=t,Et.registerCustomFormatters(this._customTokensStr)}get excludePaths(){return this._excludePaths}set excludePaths(t){this._excludePaths=t.filter(Boolean),this._excludePathsRegExp=Wm(this._excludePaths,zm)}get includePaths(){return this._includePaths}set includePaths(t){this._includePaths=t.filter(Boolean),this._includePathsRegExp=Wm(this._includePaths,Bm)}get specialCharactersRegExp(){return new RegExp(`[${qn(this.specialCharacters)}]`,\"g\")}_customTokensStr=\"\";_excludePaths=[];_excludePathsRegExp=zm;_includePaths=[];_includePathsRegExp=Bm;constructor(t){super(),this.init(t)}isPathIgnored(t){return!this._includePathsRegExp.test(t)||this._excludePathsRegExp.test(t)}toJSON(){return{...super.toJSON(),customTokensStr:this.customTokensStr,excludePaths:this.excludePaths,includePaths:this.includePaths}}initFromRecord(t){let n=t,r=n.dateTimeFormat??\"YYYYMMDDHHmmssSSS\";n.attachmentFolderPath=Vm(n.attachmentFolderPath??\"\",r),n.generatedAttachmentFilename=Vm(n.generatedAttachmentFilename??n.pastedFileName??n.pastedImageFileName??\"file-${date}\",r),n.replaceWhitespace!==void 0&&(n.whitespaceReplacement=n.replaceWhitespace?\"-\":\"\"),n.autoRenameFiles!==void 0&&(n.shouldRenameAttachmentFiles=n.autoRenameFiles),n.autoRenameFolder!==void 0&&(n.shouldRenameAttachmentFolder=n.autoRenameFolder),n.deleteOrphanAttachments!==void 0&&(n.shouldDeleteOrphanAttachments=n.deleteOrphanAttachments),n.keepEmptyAttachmentFolders!==void 0&&(n.shouldKeepEmptyAttachmentFolders=n.keepEmptyAttachmentFolders),n.renameCollectedFiles!==void 0&&(n.shouldRenameCollectedAttachments=n.renameCollectedFiles),n.toLowerCase!==void 0&&(n.shouldRenameAttachmentsToLowerCase=n.toLowerCase),n.convertImagesToJpeg!==void 0&&(n.shouldConvertPastedImagesToJpeg=n.convertImagesToJpeg),n.whitespaceReplacement&&(n.specialCharacters=`${n.specialCharacters??\"\"} `,n.specialCharactersReplacement=n.whitespaceReplacement),this._shouldSaveAfterLoad=Ic(n,[\"autoRenameFiles\",\"autoRenameFolder\",\"convertImagesOnDragAndDrop\",\"convertImagesToJpeg\",\"dateTimeFormat\",\"deleteOrphanAttachments\",\"keepEmptyAttachmentFolders\",\"pastedFileName\",\"pastedImageFileName\",\"renameAttachmentsOnDragAndDrop\",\"renameCollectedFiles\",\"renameOnlyImages\",\"renamePastedFilesWithKnownNames\",\"replaceWhitespace\",\"toLowerCase\",\"whitespaceReplacement\"]),super.initFromRecord(n)}};function Vm(e,t){return e.replaceAll(\"${date}\",`\\${date:${t}}`)}function Wm(e,t){if(e.length===0)return t;let n=e.map(r=>r.startsWith(\"/\")&&r.endsWith(\"/\")?r.slice(1,-1):`^${qn(r)}`).map(r=>`(${r})`).join(\"|\");return new RegExp(n)}var ep=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function Um(e,t){let n=Object.keys(e).find(r=>e[r]===t);if(n===void 0)throw new Error(`Invalid enum value: ${t}`);return n}function Hm(e,t){let n=e[t];if(n===void 0)throw new Error(`Invalid enum key: ${t}`);return n}var qm=require(\"obsidian\");var pn=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();function jm(e){let t=e;return t.validatorEl?t:e instanceof pn.DropdownComponent?{get validatorEl(){return e.selectEl}}:e instanceof pn.SliderComponent?{get validatorEl(){return e.sliderEl}}:e instanceof pn.TextAreaComponent?{get validatorEl(){return e.inputEl}}:e instanceof pn.TextComponent?{get validatorEl(){return e.inputEl}}:null}(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Zo=class extends qm.PluginSettingTab{constructor(t){super(t.app,t),this.plugin=t,this.containerEl.addClass(W.LibraryName,ft(),W.PluginSettingsTab)}validatorsMap=new WeakMap;bind(t,n,r){let s={...{componentToPluginSettingsValueConverter:h=>h,onChanged:Ft,pluginSettings:void 0,pluginSettingsToComponentValueConverter:h=>h,shouldAutoSave:!0,shouldShowValidationMessage:!0,valueValidator:Ft},...r},l=()=>s.pluginSettings??this.plugin.settingsClone,u=jm(t)?.validatorEl,f=async h=>{h??=t.getValue();let m=await s.valueValidator(h);return u&&(m||(u.setCustomValidity(\"\"),u.checkValidity(),m=u.validationMessage),u.setCustomValidity(m),u.title=m,u.isActiveElement()&&s.shouldShowValidationMessage&&u.reportValidity()),!m};return t.setValue(s.pluginSettingsToComponentValueConverter(l()[n])).onChange(async h=>{if(!await f(h))return;let m=l();m[n]=s.componentToPluginSettingsValueConverter(h),s.shouldAutoSave&&await this.plugin.saveSettings(m),await s.onChanged()}),u?.addEventListener(\"focus\",pr(()=>f())),u?.addEventListener(\"blur\",pr(()=>f())),this.validatorsMap.set(t,()=>f()),On(()=>f()),t}async revalidate(t){let n=this.validatorsMap.get(t);return n?await n():!0}};var Km=require(\"obsidian\");var $l=Le(Wt(),1);var Ko=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var nt=class extends Ko.ValueComponent{inputEl;get validatorEl(){return this.inputEl}textComponent;constructor(t,n,r){super(),this.textComponent=new Ko.TextComponent(t),this.inputEl=this.textComponent.inputEl,this.inputEl.type=n,t.addClass(W.LibraryName,ft(),r)}getValue(){return this.valueFromString(this.inputEl.value)}onChange(t){return this.textComponent.onChange(()=>t(this.getValue())),this}onChanged(){this.textComponent.onChanged()}setDisabled(t){return this.textComponent.setDisabled(t),this.disabled=t,this}setPlaceholder(t){return this.textComponent.setPlaceholder(t),this}setValue(t){return this.inputEl.value=this.valueToString(t),this}valueToString(t){return String(t)}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var rt=class extends nt{setMax(t){return this.inputEl.max=this.valueToString(t),this}setMin(t){return this.inputEl.min=this.valueToString(t),this}setStep(t){return this.inputEl.step=t.toString(),this}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Gm=\"YYYY-MM-DD\",Qo=class extends rt{constructor(t){super(t,\"date\",W.DateComponent)}valueFromString(t){return(0,$l.default)(t,Gm).toDate()}valueToString(t){return(0,$l.default)(t).format(Gm)}};var Yl=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Xm=\"YYYY-MM-DDTHH:mm\",es=class extends rt{constructor(t){super(t,\"datetime-local\",W.DateTimeComponent)}valueFromString(t){return(0,Yl.default)(t,Xm).toDate()}valueToString(t){return(0,Yl.default)(t).format(Xm)}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ts=class extends nt{constructor(t){super(t,\"email\",W.EmailComponent)}valueFromString(t){return t}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ns=class extends nt{constructor(t){super(t,\"file\",W.FileComponent)}getValue(){return this.inputEl.files?.[0]??null}valueFromString(){return this.getValue()}valueToString(t){return t?.name??\"\"}};var Bl=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Jm=\"YYYY-MM\",rs=class extends rt{constructor(t){super(t,\"month\",W.MonthComponent)}valueFromString(t){let n=(0,Bl.default)(t,Jm);if(!n.isValid())throw new Error(\"Invalid month\");return{month:n.month()+1,year:n.year()}}valueToString(t){return(0,Bl.default)().year(t.year).month(t.month-1).format(Jm)}};var os=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var is=class extends os.ValueComponent{get validatorEl(){return this.dropdownComponent.selectEl}dropdownComponent;constructor(t){super(),this.dropdownComponent=new os.DropdownComponent(t),this.dropdownComponent.selectEl.multiple=!0,t.addClass(W.LibraryName,ft(),W.MultipleDropdownComponent)}addOption(t,n){return this.dropdownComponent.addOption(t,n),this}addOptions(t){return this.dropdownComponent.addOptions(t),this}getValue(){return Array.from(this.dropdownComponent.selectEl.selectedOptions).map(t=>t.value)}onChange(t){return this.dropdownComponent.onChange(()=>t(this.getValue())),this}setDisabled(t){return this.dropdownComponent.setDisabled(t),this.disabled=t,this}setValue(t){for(let n of Array.from(this.dropdownComponent.selectEl.options))n.selected=t.includes(n.value);return this}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ss=class extends nt{constructor(t){super(t,\"email\",W.MultipleEmailComponent),this.inputEl.multiple=!0}valueFromString(t){return t.split(\",\").map(n=>n.trim())}valueToString(t){return t.join(\", \")}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var as=class extends nt{constructor(t){super(t,\"file\",W.MultipleFileComponent),this.inputEl.multiple=!0}getValue(){return Array.from(this.inputEl.files??[])}valueFromString(){return this.getValue()}valueToString(t){return t[0]?.name??\"\"}};var us=require(\"obsidian\");(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var ls=class extends us.ValueComponent{get validatorEl(){return this.textAreaComponent.inputEl}textAreaComponent;constructor(t){super(),this.textAreaComponent=new us.TextAreaComponent(t),t.addClass(W.LibraryName,ft(),W.MultipleTextComponent)}getValue(){return this.textAreaComponent.getValue().split(`\n`)}onChange(t){return this.textAreaComponent.onChange(()=>t(this.getValue())),this}setDisabled(t){return this.textAreaComponent.setDisabled(t),this.disabled=t,this}setPlaceholder(t){return this.textAreaComponent.setPlaceholder(t),this}setValue(t){return this.textAreaComponent.setValue(t.join(`\n`)),this}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var cs=class extends rt{constructor(t){super(t,\"number\",W.NumberComponent)}valueFromString(t){return parseInt(t,10)}};var ds=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var fs=class extends rt{constructor(t){super(t,\"time\",W.TimeComponent)}valueFromString(t){return(0,ds.duration)(t)}valueToString(t){let n;return t.milliseconds()>0?n=\"HH:mm:ss.SSS\":t.seconds()>0?n=\"HH:mm:ss\":n=\"HH:mm\",(0,ds.utc)(t.asMilliseconds()).format(n)}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var hs=class extends nt{constructor(t){super(t,\"url\",W.UrlComponent)}valueFromString(t){return t}};var zl=Le(Wt(),1);(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var Zm=\"YYYY-[W]WW\",ms=class extends rt{constructor(t){super(t,\"week\",W.WeekComponent)}valueFromString(t){let n=(0,zl.default)(t,Zm);if(!n.isValid())throw new Error(\"Invalid week\");return{weekNumber:n.isoWeek(),year:n.year()}}valueToString(t){return(0,zl.default)().year(t.year).isoWeek(t.weekNumber).format(Zm)}};(function(){if(globalThis.process)return;let t={browser:!0,cwd:__name(()=>\"/\",\"cwd\"),env:{},platform:\"android\"};globalThis.process=t})();var xe=class extends Km.Setting{addComponent(t,n){let r=new t(this.controlEl);return this.components.push(r),n(r),this}addDate(t){return this.addComponent(Qo,t)}addDateTime(t){return this.addComponent(es,t)}addEmail(t){return this.addComponent(ts,t)}addFile(t){return this.addComponent(ns,t)}addMonth(t){return this.addComponent(rs,t)}addMultipleDropdown(t){return this.addComponent(is,t)}addMultipleEmail(t){return this.addComponent(ss,t)}addMultipleFile(t){return this.addComponent(as,t)}addMultipleText(t){return this.addComponent(ls,t)}addNumber(t){return this.addComponent(cs,t)}addTime(t){return this.addComponent(fs,t)}addUrl(t){return this.addComponent(hs,t)}addWeek(t){return this.addComponent(ms,t)}};var fi=\"\\u2423\",ps=class extends Zo{display(){this.containerEl.empty(),new xe(this.containerEl).setName(\"新附件的位置\").setDesc(createFragment(t=>{t.appendText(\"Start with \"),tt(t,\".\"),t.appendText(\"开头以使用相对路径。\"),t.createEl(\"br\"),t.appendText(\"查看可用的 \"),t.createEl(\"a\",{href:\"https://github.com/RainCat1998/obsidian-custom-attachment-location?tab=readme-ov-file#tokens\",text:\"令牌\"}),t.appendChild(createEl(\"br\")),t.appendText(\"Dot-folders like \"),tt(t,\".attachments\"),t.appendText(\" are not recommended, because Obsidian doesn't track them. You might need to use \"),t.createEl(\"a\",{href:\"https://github.com/polyipseity/obsidian-show-hidden-files/\",text:\"显示隐藏文件\"}),t.appendText(\"插件来管理它们。\")})).addText(t=>this.bind(t,\"attachmentFolderPath\",{componentToPluginSettingsValueConverter(n){return(0,ep.normalizePath)(n)},pluginSettingsToComponentValueConverter(n){return n},valueValidator(n){return ci(n)}}).setPlaceholder(\"./assets/${filename}\")),new xe(this.containerEl).setName(\"生成的附件文件名\").setDesc(createFragment(t=>{t.appendText(\"查看可用的 \"),t.createEl(\"a\",{href:\"https://github.com/RainCat1998/obsidian-custom-attachment-location?tab=readme-ov-file#tokens\",text:\"令牌\"})})).addText(t=>this.bind(t,\"generatedAttachmentFilename\",{valueValidator(n){return ci(n)}}).setPlaceholder(\"file-${date:YYYYMMDDHHmmssSSS}\")),new xe(this.containerEl).setName(\"附件重命名模式\").addDropdown(t=>{t.addOptions(br),this.bind(t,\"attachmentRenameMode\",{componentToPluginSettingsValueConverter:n=>Hm(br,n),pluginSettingsToComponentValueConverter:n=>Um(br,n)})}),new xe(this.containerEl).setName(\"是否重命名附件文件夹\").setDesc(createFragment(t=>{t.appendText(\"When renaming md files, automatically rename attachment folder if folder name contains \"),tt(t,\"${filename}\"),t.appendText(\"。\")})).addToggle(t=>{this.bind(t,\"shouldRenameAttachmentFolder\")}),new xe(this.containerEl).setName(\"是否重命名附件文件\").setDesc(createFragment(t=>{t.appendText(\"When renaming md files, automatically rename attachment files if file name contains \"),tt(t,\"${filename}\"),t.appendText(\"。\")})).addToggle(t=>{this.bind(t,\"shouldRenameAttachmentFiles\")}),new xe(this.containerEl).setName(\"Special characters\").setDesc(createFragment(t=>{t.appendText(\"Special characters in attachment folder and file name to be replaced or removed.\"),t.createEl(\"br\"),t.appendText(\"Leave blank to preserve special characters.\")})).addText(t=>{this.bind(t,\"specialCharacters\",{componentToPluginSettingsValueConverter:n=>n.replaceAll(fi,\"\"),pluginSettingsToComponentValueConverter:n=>n.replaceAll(\" \",fi),valueValidator(n){if(n.includes(\"/\"))return\"Special characters must not contain /\"}}).setPlaceholder(\"#^[]|*\\\\<>:?\"),t.inputEl.addEventListener(\"input\",()=>{t.inputEl.value=Vl(t.inputEl.value)})}),new xe(this.containerEl).setName(\"Special characters replacement\").setDesc(createFragment(t=>{t.appendText(\"Replacement string for special characters in attachment folder and file name.\"),t.createEl(\"br\"),t.appendText(\"Leave blank to remove special characters.\")})).addText(t=>{this.bind(t,\"specialCharactersReplacement\",{valueValidator(n){if(Dl.exec(n))return\"Special character replacement must not contain invalid filename path characters.\"}}).setPlaceholder(\"-\")}),new xe(this.containerEl).setName(\"是否将附件重命名为小写\").setDesc(\"Automatically set all characters in folder name and pasted image name to be lowercase.\").addToggle(t=>{this.bind(t,\"shouldRenameAttachmentsToLowerCase\")}),new xe(this.containerEl).setName(\"是否将粘贴的图像转换为 JPEG\").setDesc(\"从剪贴板粘贴图像并将其转换为 JPEG。\").addToggle(t=>{this.bind(t,\"shouldConvertPastedImagesToJpeg\")}),new xe(this.containerEl).setName(\"JPEG 质量\").setDesc(\"质量越小，压缩比越大。\").addDropdown(t=>{t.addOptions(zC()),this.bind(t,\"jpegQuality\",{componentToPluginSettingsValueConverter:n=>Number(n),pluginSettingsToComponentValueConverter:n=>n.toString()})}),new xe(this.containerEl).setName(\"是否重命名已收集的附件\").setDesc(createFragment(t=>{t.appendText(\"如果启用，通过 \"),tt(t,\"Collect attachments\"),t.appendText(\"命令处理的附件将根据 \"),tt(t,\"Pasted File Name\"),t.appendText(\"设置进行重命名。\")})).addToggle(t=>{this.bind(t,\"shouldRenameCollectedAttachments\")}),new xe(this.containerEl).setName(\"重复名称分隔符\").setDesc(createFragment(t=>{t.appendText(\"When you are pasting/dragging a file with the same name as an existing file, this separator will be added to the file name.\"),t.appendChild(createEl(\"br\")),t.appendText(\"E.g., when you are dragging file \"),tt(t,\"existingFile.pdf\"),t.appendText(\", it will be renamed to \"),tt(t,\"existingFile 1.pdf\"),t.appendText(\"，\"),tt(t,\"existingFile 2.pdf\"),t.appendText(\", etc, getting the first name available.\")})).addText(t=>{this.bind(t,\"duplicateNameSeparator\",{componentToPluginSettingsValueConverter:n=>n.replaceAll(fi,\" \"),pluginSettingsToComponentValueConverter:Vl,valueValidator(n){return zo(`filename${n}1`,!1)}}).setPlaceholder(fi),t.inputEl.addEventListener(\"input\",()=>{t.inputEl.value=Vl(t.inputEl.value)})}),new xe(this.containerEl).setName(\"是否保留空附件文件夹\").setDesc(\"If enabled, empty attachment folders will be preserved, useful for source control purposes.\").addToggle(t=>{this.bind(t,\"shouldKeepEmptyAttachmentFolders\")}),new xe(this.containerEl).setName(\"是否删除孤立的附件\").setDesc(\"If enabled, when the note is deleted, its orphan attachments are deleted as well.\").addToggle(t=>{this.bind(t,\"shouldDeleteOrphanAttachments\")}),new xe(this.containerEl).setName(\"包含路径\").setDesc(createFragment(t=>{t.appendText(\"包含以下路径中的笔记\"),t.createEl(\"br\"),t.appendText(\"每行插入一个路径\"),t.createEl(\"br\"),t.appendText(\"您可以使用路径字符串或 \"),tt(t,\"/regular expression/\"),t.createEl(\"br\"),t.appendText(\"如果设置为空，则包含所有笔记\")})).addMultipleText(t=>{this.bind(t,\"includePaths\",{valueValidator:Qm})}),new xe(this.containerEl).setName(\"排除路径\").setDesc(createFragment(t=>{t.appendText(\"排除以下路径中的笔记\"),t.createEl(\"br\"),t.appendText(\"每行插入一个路径\"),t.createEl(\"br\"),t.appendText(\"您可以使用路径字符串或 \"),tt(t,\"/regular expression/\"),t.createEl(\"br\"),t.appendText(\"如果设置为空，则不排除任何笔记\")})).addMultipleText(t=>{this.bind(t,\"excludePaths\",{valueValidator:Qm})}),new xe(this.containerEl).setName(\"自定义令牌\").setDesc(createFragment(t=>{t.appendText(\"自定义令牌，用于附件文件夹路径和粘贴的文件名。\"),t.appendChild(createEl(\"br\")),t.appendText(\"查看 \"),t.createEl(\"a\",{href:\"https://github.com/RainCat1998/obsidian-custom-attachment-location?tab=readme-ov-file#custom-tokens\",text:\"文档\"}),t.appendText(\"以获取更多信息。\")})).addTextArea(t=>{this.bind(t,\"customTokensStr\",{valueValidator:BC})})}};function BC(e){if(Ml(e)===null)return\"Invalid custom tokens code\"}function zC(){let t={};for(let n=1;n<=10;n++){let r=(n/10).toFixed(1);t[r]=r}return t}function Qm(e){for(let t of e)if(t.startsWith(\"/\")&&t.endsWith(\"/\")){let n=t.slice(1,-1);if(!Wu(n))return`Invalid regular expression ${t}`}}function Vl(e){return e.replaceAll(\" \",fi)}var VC=/Pasted image (?<Timestamp>\\d{14})/,WC=\"YYYYMMDDHHmmss\",UC=10,gs=class extends qi{createPluginSettings(t){return new Jo(t)}createPluginSettingsTab(){return new ps(this)}async onLayoutReady(){if(this.register(Hn(this.app.vault,{getAvailablePath:()=>this.getAvailablePath.bind(this),getAvailablePathForAttachments:()=>{let t={isExtended:!0};return Object.assign(this.getAvailablePathForAttachments.bind(this),t)}})),Wl.webUtils&&this.register(Hn(Wl.webUtils,{getPathForFile:t=>n=>this.getPathForFile(n,t)})),(0,np.compare)(this.settings.warningVersion,\"7.0.0\")<0){this.settings.customTokensStr&&await ic({app:this.app,message:createFragment(n=>{n.appendText(\"在插件版本 7.0.0 中，自定义令牌的格式已更改。请相应地更新您的自定义令牌。请参阅 \"),n.createEl(\"a\",{href:\"https://github.com/RainCat1998/obsidian-custom-attachment-location?tab=readme-ov-file#custom-tokens\",text:\"文档\"}),n.appendText(\"以获取更多信息。\")})});let t=this.settingsClone;t.warningVersion=this.manifest.version,await this.saveSettings(t)}}onloadComplete(){Od(this,()=>({isPathIgnored:n=>this.settings.isPathIgnored(n),shouldDeleteEmptyFolders:!this.settings.shouldKeepEmptyAttachmentFolders,shouldHandleDeletions:this.settings.shouldDeleteOrphanAttachments,shouldHandleRenames:!0,shouldRenameAttachmentFiles:this.settings.shouldRenameAttachmentFiles,shouldRenameAttachmentFolder:this.settings.shouldRenameAttachmentFolder,shouldUpdateFilenameAliases:!0})),this.addCommand({checkCallback:t=>Nm(this,t),id:\"collect-attachments-current-note\",name:\"收集当前笔记中的附件\"}),this.addCommand({checkCallback:t=>Mm(this,t),id:\"collect-attachments-current-folder\",name:\"收集当前文件夹中的附件\"}),this.addCommand({callback:()=>{$m(this)},id:\"collect-attachments-entire-vault\",name:\"收集整个仓库中的附件\"}),this.registerEvent(this.app.workspace.on(\"file-menu\",this.handleFileMenu.bind(this))),this.register(Hn(this.app,{saveAttachment:t=>(n,r,o)=>this.saveAttachment(t,n,r,o)}))}getAvailablePath(t,n){let r=0;for(;;){let o=An(r===0?t:`${t}${this.settings.duplicateNameSeparator}${r.toString()}`,n);if(!Cn(this.app,o,!0))return o;r++}}async getAvailablePathForAttachments(t,n,r,o){let s;if(!r||!Ke(this.app,r))s=await js(this.app,t,n,r,!0);else{let l=await Vo(this,r.path,An(t,n));s=this.app.vault.getAvailablePath(be(l,t),n)}if(!o){let l=ut(s);await this.app.vault.exists(l)||(await xo(this.app,l),this.settings.shouldKeepEmptyAttachmentFolders&&await this.app.vault.create(be(l,\".gitkeep\"),\"\"))}return s}getPathForFile(t,n){return t.path||n(t)}handleFileMenu(t,n){n instanceof tp.TFolder&&t.addItem(r=>{r.setTitle(\"收集文件夹中的附件\").setIcon(\"download\").onClick(()=>Uo(this,n))})}async saveAttachment(t,n,r,o){let s=this.app.workspace.getActiveFile();if(!s||this.settings.isPathIgnored(s.path))return t.call(this.app,n,r,o);let l=!1,u=VC.exec(n);if(u){let h=u.groups?.Timestamp;if(h){let m=(0,Ul.default)(h,WC);m.isValid()&&(0,Ul.default)().diff(m,\"seconds\")<UC&&(l=!0)}}l&&r===\"png\"&&this.settings.shouldConvertPastedImagesToJpeg&&(r=\"jpg\",o=await Ru(new Blob([o],{type:\"image/png\"}),this.settings.jpegQuality));let f=!1;switch(this.settings.attachmentRenameMode){case\"All\":f=!0;break;case\"None\":break;case\"Only pasted images\":f=l;break;default:throw new Error(\"Invalid attachment rename mode\")}return f&&(n=await Wo(this,new Et(this.app,s.path,n))),await t.call(this.app,n,r,o)}};var HC=gs;\n/*! Bundled license information:\n\nmoment/moment.js:\n  (*! moment.js *)\n  (*! version : 2.30.1 *)\n  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)\n  (*! license : MIT *)\n  (*! momentjs.com *)\n*/\n\n/* nosourcemap */"
  },
  {
    "path": ".obsidian/plugins/obsidian-custom-attachment-location/manifest.json",
    "content": "{\n    \"id\": \"obsidian-custom-attachment-location\",\n    \"name\": \"Custom Attachment Location\",\n    \"version\": \"7.1.0\",\n    \"minAppVersion\": \"1.8.9\",\n    \"description\": \"像 typora 一样使用变量($filename,$data,etc）自定义附件位置。\",\n    \"author\": \"RainCat1998\",\n    \"authorUrl\": \"https://github.com/RainCat1998/\",\n    \"isDesktopOnly\": false,\n    \"fundingUrl\": \"https://www.buymeacoffee.com/mnaoumov\"\n}\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-git/data.json",
    "content": "{\n  \"commitMessage\": \"vault backup: {{date}}\",\n  \"commitDateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n  \"autoSaveInterval\": 0,\n  \"autoPushInterval\": 0,\n  \"autoPullInterval\": 0,\n  \"autoPullOnBoot\": false,\n  \"disablePush\": false,\n  \"pullBeforePush\": true,\n  \"disablePopups\": false,\n  \"disablePopupsForNoChanges\": false,\n  \"listChangedFilesInMessageBody\": false,\n  \"showStatusBar\": true,\n  \"updateSubmodules\": false,\n  \"syncMethod\": \"merge\",\n  \"customMessageOnAutoBackup\": false,\n  \"autoBackupAfterFileChange\": false,\n  \"treeStructure\": false,\n  \"refreshSourceControl\": true,\n  \"basePath\": \"\",\n  \"differentIntervalCommitAndPush\": false,\n  \"changedFilesInStatusBar\": false,\n  \"showedMobileNotice\": true,\n  \"refreshSourceControlTimer\": 7000,\n  \"showBranchStatusBar\": true,\n  \"setLastSaveToLastCommit\": false,\n  \"submoduleRecurseCheckout\": false,\n  \"gitDir\": \"\",\n  \"showFileMenu\": true,\n  \"authorInHistoryView\": \"hide\",\n  \"dateInHistoryView\": false,\n  \"diffStyle\": \"split\",\n  \"lineAuthor\": {\n    \"show\": false,\n    \"followMovement\": \"inactive\",\n    \"authorDisplay\": \"initials\",\n    \"showCommitHash\": false,\n    \"dateTimeFormatOptions\": \"date\",\n    \"dateTimeFormatCustomString\": \"YYYY-MM-DD HH:mm\",\n    \"dateTimeTimezone\": \"viewer-local\",\n    \"coloringMaxAge\": \"1y\",\n    \"colorNew\": {\n      \"r\": 255,\n      \"g\": 150,\n      \"b\": 150\n    },\n    \"colorOld\": {\n      \"r\": 120,\n      \"g\": 160,\n      \"b\": 255\n    },\n    \"textColorCss\": \"var(--text-muted)\",\n    \"ignoreWhitespace\": false,\n    \"gutterSpacingFallbackLength\": 5\n  },\n  \"autoCommitMessage\": \"vault backup: {{date}}\"\n}"
  },
  {
    "path": ".obsidian/plugins/obsidian-git/duplicate.js",
    "content": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source visit the plugins github repository (https://github.com/denolehov/obsidian-git)\n*/\n\nvar UP=Object.create;var Oo=Object.defineProperty;var GP=Object.getOwnPropertyDescriptor;var zP=Object.getOwnPropertyNames;var VP=Object.getPrototypeOf,WP=Object.prototype.hasOwnProperty;var jv=e=>{throw TypeError(e)};var qP=(e,t,r)=>t in e?Oo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var YP=(e,t)=>()=>(e&&(t=e(e=0)),t);var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),XP=(e,t)=>{for(var r in t)Oo(e,r,{get:t[r],enumerable:!0})},Bv=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of zP(t))!WP.call(e,i)&&i!==r&&Oo(e,i,{get:()=>t[i],enumerable:!(n=GP(t,i))||n.enumerable});return e};var ze=(e,t,r)=>(r=e!=null?UP(VP(e)):{},Bv(t||!e||!e.__esModule?Oo(r,\"default\",{value:e,enumerable:!0}):r,e)),ZP=e=>Bv(Oo({},\"__esModule\",{value:!0}),e);var Cr=(e,t,r)=>qP(e,typeof t!=\"symbol\"?t+\"\":t,r),Hv=(e,t,r)=>t.has(e)||jv(\"Cannot \"+r);var Bt=(e,t,r)=>(Hv(e,t,\"read from private field\"),r?r.call(e):t.get(e)),Pc=(e,t,r)=>t.has(e)?jv(\"Cannot add the same private member more than once\"):t instanceof WeakSet?t.add(e):t.set(e,r),Rc=(e,t,r,n)=>(Hv(e,t,\"write to private field\"),n?n.call(e,r):t.set(e,r),r);var zv=I(Mc=>{\"use strict\";g();Mc.byteLength=JP;Mc.toByteArray=eR;Mc.fromByteArray=nR;var dn=[],Pr=[],KP=typeof Uint8Array!=\"undefined\"?Uint8Array:Array,Qd=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(Xi=0,Uv=Qd.length;Xi<Uv;++Xi)dn[Xi]=Qd[Xi],Pr[Qd.charCodeAt(Xi)]=Xi;var Xi,Uv;Pr[45]=62;Pr[95]=63;function Gv(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=e.indexOf(\"=\");r===-1&&(r=t);var n=r===t?0:4-r%4;return[r,n]}function JP(e){var t=Gv(e),r=t[0],n=t[1];return(r+n)*3/4-n}function QP(e,t,r){return(t+r)*3/4-r}function eR(e){var t,r=Gv(e),n=r[0],i=r[1],a=new KP(QP(e,n,i)),s=0,o=i>0?n-4:n,c;for(c=0;c<o;c+=4)t=Pr[e.charCodeAt(c)]<<18|Pr[e.charCodeAt(c+1)]<<12|Pr[e.charCodeAt(c+2)]<<6|Pr[e.charCodeAt(c+3)],a[s++]=t>>16&255,a[s++]=t>>8&255,a[s++]=t&255;return i===2&&(t=Pr[e.charCodeAt(c)]<<2|Pr[e.charCodeAt(c+1)]>>4,a[s++]=t&255),i===1&&(t=Pr[e.charCodeAt(c)]<<10|Pr[e.charCodeAt(c+1)]<<4|Pr[e.charCodeAt(c+2)]>>2,a[s++]=t>>8&255,a[s++]=t&255),a}function tR(e){return dn[e>>18&63]+dn[e>>12&63]+dn[e>>6&63]+dn[e&63]}function rR(e,t,r){for(var n,i=[],a=t;a<r;a+=3)n=(e[a]<<16&16711680)+(e[a+1]<<8&65280)+(e[a+2]&255),i.push(tR(n));return i.join(\"\")}function nR(e){for(var t,r=e.length,n=r%3,i=[],a=16383,s=0,o=r-n;s<o;s+=a)i.push(rR(e,s,s+a>o?o:s+a));return n===1?(t=e[r-1],i.push(dn[t>>2]+dn[t<<4&63]+\"==\")):n===2&&(t=(e[r-2]<<8)+e[r-1],i.push(dn[t>>10]+dn[t>>4&63]+dn[t<<2&63]+\"=\")),i.join(\"\")}});var Vv=I(eh=>{g();eh.read=function(e,t,r,n,i){var a,s,o=i*8-n-1,c=(1<<o)-1,l=c>>1,u=-7,f=r?i-1:0,d=r?-1:1,h=e[t+f];for(f+=d,a=h&(1<<-u)-1,h>>=-u,u+=o;u>0;a=a*256+e[t+f],f+=d,u-=8);for(s=a&(1<<-u)-1,a>>=-u,u+=n;u>0;s=s*256+e[t+f],f+=d,u-=8);if(a===0)a=1-l;else{if(a===c)return s?NaN:(h?-1:1)*(1/0);s=s+Math.pow(2,n),a=a-l}return(h?-1:1)*s*Math.pow(2,a-n)};eh.write=function(e,t,r,n,i,a){var s,o,c,l=a*8-i-1,u=(1<<l)-1,f=u>>1,d=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:a-1,p=n?1:-1,m=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,s=u):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),s+f>=1?t+=d/c:t+=d*Math.pow(2,1-f),t*c>=2&&(s++,c/=2),s+f>=u?(o=0,s=u):s+f>=1?(o=(t*c-1)*Math.pow(2,i),s=s+f):(o=t*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;e[r+h]=o&255,h+=p,o/=256,i-=8);for(s=s<<i|o,l+=i;l>0;e[r+h]=s&255,h+=p,s/=256,l-=8);e[r+h-p]|=m*128}});var ch=I(Za=>{\"use strict\";g();var th=zv(),Ya=Vv(),Wv=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;Za.Buffer=M;Za.SlowBuffer=cR;Za.INSPECT_MAX_BYTES=50;var Oc=2147483647;Za.kMaxLength=Oc;M.TYPED_ARRAY_SUPPORT=iR();!M.TYPED_ARRAY_SUPPORT&&typeof console!=\"undefined\"&&typeof console.error==\"function\"&&console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");function iR(){try{let e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),e.foo()===42}catch(e){return!1}}Object.defineProperty(M.prototype,\"parent\",{enumerable:!0,get:function(){if(M.isBuffer(this))return this.buffer}});Object.defineProperty(M.prototype,\"offset\",{enumerable:!0,get:function(){if(M.isBuffer(this))return this.byteOffset}});function Ln(e){if(e>Oc)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,M.prototype),t}function M(e,t,r){if(typeof e==\"number\"){if(typeof t==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return ah(e)}return Zv(e,t,r)}M.poolSize=8192;function Zv(e,t,r){if(typeof e==\"string\")return sR(e,t);if(ArrayBuffer.isView(e))return oR(e);if(e==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(hn(e,ArrayBuffer)||e&&hn(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer!=\"undefined\"&&(hn(e,SharedArrayBuffer)||e&&hn(e.buffer,SharedArrayBuffer)))return nh(e,t,r);if(typeof e==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(n!=null&&n!==e)return M.from(n,t,r);let i=lR(e);if(i)return i;if(typeof Symbol!=\"undefined\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==\"function\")return M.from(e[Symbol.toPrimitive](\"string\"),t,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}M.from=function(e,t,r){return Zv(e,t,r)};Object.setPrototypeOf(M.prototype,Uint8Array.prototype);Object.setPrototypeOf(M,Uint8Array);function Kv(e){if(typeof e!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function aR(e,t,r){return Kv(e),e<=0?Ln(e):t!==void 0?typeof r==\"string\"?Ln(e).fill(t,r):Ln(e).fill(t):Ln(e)}M.alloc=function(e,t,r){return aR(e,t,r)};function ah(e){return Kv(e),Ln(e<0?0:sh(e)|0)}M.allocUnsafe=function(e){return ah(e)};M.allocUnsafeSlow=function(e){return ah(e)};function sR(e,t){if((typeof t!=\"string\"||t===\"\")&&(t=\"utf8\"),!M.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);let r=Jv(e,t)|0,n=Ln(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}function rh(e){let t=e.length<0?0:sh(e.length)|0,r=Ln(t);for(let n=0;n<t;n+=1)r[n]=e[n]&255;return r}function oR(e){if(hn(e,Uint8Array)){let t=new Uint8Array(e);return nh(t.buffer,t.byteOffset,t.byteLength)}return rh(e)}function nh(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');let n;return t===void 0&&r===void 0?n=new Uint8Array(e):r===void 0?n=new Uint8Array(e,t):n=new Uint8Array(e,t,r),Object.setPrototypeOf(n,M.prototype),n}function lR(e){if(M.isBuffer(e)){let t=sh(e.length)|0,r=Ln(t);return r.length===0||e.copy(r,0,0,t),r}if(e.length!==void 0)return typeof e.length!=\"number\"||lh(e.length)?Ln(0):rh(e);if(e.type===\"Buffer\"&&Array.isArray(e.data))return rh(e.data)}function sh(e){if(e>=Oc)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+Oc.toString(16)+\" bytes\");return e|0}function cR(e){return+e!=e&&(e=0),M.alloc(+e)}M.isBuffer=function(t){return t!=null&&t._isBuffer===!0&&t!==M.prototype};M.compare=function(t,r){if(hn(t,Uint8Array)&&(t=M.from(t,t.offset,t.byteLength)),hn(r,Uint8Array)&&(r=M.from(r,r.offset,r.byteLength)),!M.isBuffer(t)||!M.isBuffer(r))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(t===r)return 0;let n=t.length,i=r.length;for(let a=0,s=Math.min(n,i);a<s;++a)if(t[a]!==r[a]){n=t[a],i=r[a];break}return n<i?-1:i<n?1:0};M.isEncoding=function(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}};M.concat=function(t,r){if(!Array.isArray(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(t.length===0)return M.alloc(0);let n;if(r===void 0)for(r=0,n=0;n<t.length;++n)r+=t[n].length;let i=M.allocUnsafe(r),a=0;for(n=0;n<t.length;++n){let s=t[n];if(hn(s,Uint8Array))a+s.length>i.length?(M.isBuffer(s)||(s=M.from(s)),s.copy(i,a)):Uint8Array.prototype.set.call(i,s,a);else if(M.isBuffer(s))s.copy(i,a);else throw new TypeError('\"list\" argument must be an Array of Buffers');a+=s.length}return i};function Jv(e,t){if(M.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||hn(e,ArrayBuffer))return e.byteLength;if(typeof e!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&arguments[2]===!0;if(!n&&r===0)return 0;let i=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return ih(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return r*2;case\"hex\":return r>>>1;case\"base64\":return o1(e).length;default:if(i)return n?-1:ih(e).length;t=(\"\"+t).toLowerCase(),i=!0}}M.byteLength=Jv;function uR(e,t,r){let n=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0,t>>>=0,r<=t))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return bR(this,t,r);case\"utf8\":case\"utf-8\":return e1(this,t,r);case\"ascii\":return yR(this,t,r);case\"latin1\":case\"binary\":return wR(this,t,r);case\"base64\":return gR(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return _R(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}M.prototype._isBuffer=!0;function Zi(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}M.prototype.swap16=function(){let t=this.length;if(t%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let r=0;r<t;r+=2)Zi(this,r,r+1);return this};M.prototype.swap32=function(){let t=this.length;if(t%4!==0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let r=0;r<t;r+=4)Zi(this,r,r+3),Zi(this,r+1,r+2);return this};M.prototype.swap64=function(){let t=this.length;if(t%8!==0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let r=0;r<t;r+=8)Zi(this,r,r+7),Zi(this,r+1,r+6),Zi(this,r+2,r+5),Zi(this,r+3,r+4);return this};M.prototype.toString=function(){let t=this.length;return t===0?\"\":arguments.length===0?e1(this,0,t):uR.apply(this,arguments)};M.prototype.toLocaleString=M.prototype.toString;M.prototype.equals=function(t){if(!M.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this===t?!0:M.compare(this,t)===0};M.prototype.inspect=function(){let t=\"\",r=Za.INSPECT_MAX_BYTES;return t=this.toString(\"hex\",0,r).replace(/(.{2})/g,\"$1 \").trim(),this.length>r&&(t+=\" ... \"),\"<Buffer \"+t+\">\"};Wv&&(M.prototype[Wv]=M.prototype.inspect);M.prototype.compare=function(t,r,n,i,a){if(hn(t,Uint8Array)&&(t=M.from(t,t.offset,t.byteLength)),!M.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(r===void 0&&(r=0),n===void 0&&(n=t?t.length:0),i===void 0&&(i=0),a===void 0&&(a=this.length),r<0||n>t.length||i<0||a>this.length)throw new RangeError(\"out of range index\");if(i>=a&&r>=n)return 0;if(i>=a)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,a>>>=0,this===t)return 0;let s=a-i,o=n-r,c=Math.min(s,o),l=this.slice(i,a),u=t.slice(r,n);for(let f=0;f<c;++f)if(l[f]!==u[f]){s=l[f],o=u[f];break}return s<o?-1:o<s?1:0};function Qv(e,t,r,n,i){if(e.length===0)return-1;if(typeof r==\"string\"?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,lh(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0)if(i)r=0;else return-1;if(typeof t==\"string\"&&(t=M.from(t,n)),M.isBuffer(t))return t.length===0?-1:qv(e,t,r,n,i);if(typeof t==\"number\")return t=t&255,typeof Uint8Array.prototype.indexOf==\"function\"?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):qv(e,[t],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function qv(e,t,r,n,i){let a=1,s=e.length,o=t.length;if(n!==void 0&&(n=String(n).toLowerCase(),n===\"ucs2\"||n===\"ucs-2\"||n===\"utf16le\"||n===\"utf-16le\")){if(e.length<2||t.length<2)return-1;a=2,s/=2,o/=2,r/=2}function c(u,f){return a===1?u[f]:u.readUInt16BE(f*a)}let l;if(i){let u=-1;for(l=r;l<s;l++)if(c(e,l)===c(t,u===-1?0:l-u)){if(u===-1&&(u=l),l-u+1===o)return u*a}else u!==-1&&(l-=l-u),u=-1}else for(r+o>s&&(r=s-o),l=r;l>=0;l--){let u=!0;for(let f=0;f<o;f++)if(c(e,l+f)!==c(t,f)){u=!1;break}if(u)return l}return-1}M.prototype.includes=function(t,r,n){return this.indexOf(t,r,n)!==-1};M.prototype.indexOf=function(t,r,n){return Qv(this,t,r,n,!0)};M.prototype.lastIndexOf=function(t,r,n){return Qv(this,t,r,n,!1)};function fR(e,t,r,n){r=Number(r)||0;let i=e.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;let a=t.length;n>a/2&&(n=a/2);let s;for(s=0;s<n;++s){let o=parseInt(t.substr(s*2,2),16);if(lh(o))return s;e[r+s]=o}return s}function dR(e,t,r,n){return Ic(ih(t,e.length-r),e,r,n)}function hR(e,t,r,n){return Ic(AR(t),e,r,n)}function pR(e,t,r,n){return Ic(o1(t),e,r,n)}function mR(e,t,r,n){return Ic(kR(t,e.length-r),e,r,n)}M.prototype.write=function(t,r,n,i){if(r===void 0)i=\"utf8\",n=this.length,r=0;else if(n===void 0&&typeof r==\"string\")i=r,n=this.length,r=0;else if(isFinite(r))r=r>>>0,isFinite(n)?(n=n>>>0,i===void 0&&(i=\"utf8\")):(i=n,n=void 0);else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");let a=this.length-r;if((n===void 0||n>a)&&(n=a),t.length>0&&(n<0||r<0)||r>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");i||(i=\"utf8\");let s=!1;for(;;)switch(i){case\"hex\":return fR(this,t,r,n);case\"utf8\":case\"utf-8\":return dR(this,t,r,n);case\"ascii\":case\"latin1\":case\"binary\":return hR(this,t,r,n);case\"base64\":return pR(this,t,r,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return mR(this,t,r,n);default:if(s)throw new TypeError(\"Unknown encoding: \"+i);i=(\"\"+i).toLowerCase(),s=!0}};M.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function gR(e,t,r){return t===0&&r===e.length?th.fromByteArray(e):th.fromByteArray(e.slice(t,r))}function e1(e,t,r){r=Math.min(e.length,r);let n=[],i=t;for(;i<r;){let a=e[i],s=null,o=a>239?4:a>223?3:a>191?2:1;if(i+o<=r){let c,l,u,f;switch(o){case 1:a<128&&(s=a);break;case 2:c=e[i+1],(c&192)===128&&(f=(a&31)<<6|c&63,f>127&&(s=f));break;case 3:c=e[i+1],l=e[i+2],(c&192)===128&&(l&192)===128&&(f=(a&15)<<12|(c&63)<<6|l&63,f>2047&&(f<55296||f>57343)&&(s=f));break;case 4:c=e[i+1],l=e[i+2],u=e[i+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(f=(a&15)<<18|(c&63)<<12|(l&63)<<6|u&63,f>65535&&f<1114112&&(s=f))}}s===null?(s=65533,o=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),i+=o}return vR(n)}var Yv=4096;function vR(e){let t=e.length;if(t<=Yv)return String.fromCharCode.apply(String,e);let r=\"\",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=Yv));return r}function yR(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]&127);return n}function wR(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function bR(e,t,r){let n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);let i=\"\";for(let a=t;a<r;++a)i+=TR[e[a]];return i}function _R(e,t,r){let n=e.slice(t,r),i=\"\";for(let a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+n[a+1]*256);return i}M.prototype.slice=function(t,r){let n=this.length;t=~~t,r=r===void 0?n:~~r,t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),r<0?(r+=n,r<0&&(r=0)):r>n&&(r=n),r<t&&(r=t);let i=this.subarray(t,r);return Object.setPrototypeOf(i,M.prototype),i};function yt(e,t,r){if(e%1!==0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}M.prototype.readUintLE=M.prototype.readUIntLE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t],a=1,s=0;for(;++s<r&&(a*=256);)i+=this[t+s]*a;return i};M.prototype.readUintBE=M.prototype.readUIntBE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t+--r],a=1;for(;r>0&&(a*=256);)i+=this[t+--r]*a;return i};M.prototype.readUint8=M.prototype.readUInt8=function(t,r){return t=t>>>0,r||yt(t,1,this.length),this[t]};M.prototype.readUint16LE=M.prototype.readUInt16LE=function(t,r){return t=t>>>0,r||yt(t,2,this.length),this[t]|this[t+1]<<8};M.prototype.readUint16BE=M.prototype.readUInt16BE=function(t,r){return t=t>>>0,r||yt(t,2,this.length),this[t]<<8|this[t+1]};M.prototype.readUint32LE=M.prototype.readUInt32LE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+this[t+3]*16777216};M.prototype.readUint32BE=M.prototype.readUInt32BE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]*16777216+(this[t+1]<<16|this[t+2]<<8|this[t+3])};M.prototype.readBigUInt64LE=ui(function(t){t=t>>>0,Xa(t,\"offset\");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=r+this[++t]*2**8+this[++t]*2**16+this[++t]*2**24,a=this[++t]+this[++t]*2**8+this[++t]*2**16+n*2**24;return BigInt(i)+(BigInt(a)<<BigInt(32))});M.prototype.readBigUInt64BE=ui(function(t){t=t>>>0,Xa(t,\"offset\");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=r*2**24+this[++t]*2**16+this[++t]*2**8+this[++t],a=this[++t]*2**24+this[++t]*2**16+this[++t]*2**8+n;return(BigInt(i)<<BigInt(32))+BigInt(a)});M.prototype.readIntLE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t],a=1,s=0;for(;++s<r&&(a*=256);)i+=this[t+s]*a;return a*=128,i>=a&&(i-=Math.pow(2,8*r)),i};M.prototype.readIntBE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=r,a=1,s=this[t+--i];for(;i>0&&(a*=256);)s+=this[t+--i]*a;return a*=128,s>=a&&(s-=Math.pow(2,8*r)),s};M.prototype.readInt8=function(t,r){return t=t>>>0,r||yt(t,1,this.length),this[t]&128?(255-this[t]+1)*-1:this[t]};M.prototype.readInt16LE=function(t,r){t=t>>>0,r||yt(t,2,this.length);let n=this[t]|this[t+1]<<8;return n&32768?n|4294901760:n};M.prototype.readInt16BE=function(t,r){t=t>>>0,r||yt(t,2,this.length);let n=this[t+1]|this[t]<<8;return n&32768?n|4294901760:n};M.prototype.readInt32LE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24};M.prototype.readInt32BE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]};M.prototype.readBigInt64LE=ui(function(t){t=t>>>0,Xa(t,\"offset\");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=this[t+4]+this[t+5]*2**8+this[t+6]*2**16+(n<<24);return(BigInt(i)<<BigInt(32))+BigInt(r+this[++t]*2**8+this[++t]*2**16+this[++t]*2**24)});M.prototype.readBigInt64BE=ui(function(t){t=t>>>0,Xa(t,\"offset\");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=(r<<24)+this[++t]*2**16+this[++t]*2**8+this[++t];return(BigInt(i)<<BigInt(32))+BigInt(this[++t]*2**24+this[++t]*2**16+this[++t]*2**8+n)});M.prototype.readFloatLE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),Ya.read(this,t,!0,23,4)};M.prototype.readFloatBE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),Ya.read(this,t,!1,23,4)};M.prototype.readDoubleLE=function(t,r){return t=t>>>0,r||yt(t,8,this.length),Ya.read(this,t,!0,52,8)};M.prototype.readDoubleBE=function(t,r){return t=t>>>0,r||yt(t,8,this.length),Ya.read(this,t,!1,52,8)};function Kt(e,t,r,n,i,a){if(!M.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>i||t<a)throw new RangeError('\"value\" argument is out of bounds');if(r+n>e.length)throw new RangeError(\"Index out of range\")}M.prototype.writeUintLE=M.prototype.writeUIntLE=function(t,r,n,i){if(t=+t,r=r>>>0,n=n>>>0,!i){let o=Math.pow(2,8*n)-1;Kt(this,t,r,n,o,0)}let a=1,s=0;for(this[r]=t&255;++s<n&&(a*=256);)this[r+s]=t/a&255;return r+n};M.prototype.writeUintBE=M.prototype.writeUIntBE=function(t,r,n,i){if(t=+t,r=r>>>0,n=n>>>0,!i){let o=Math.pow(2,8*n)-1;Kt(this,t,r,n,o,0)}let a=n-1,s=1;for(this[r+a]=t&255;--a>=0&&(s*=256);)this[r+a]=t/s&255;return r+n};M.prototype.writeUint8=M.prototype.writeUInt8=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,1,255,0),this[r]=t&255,r+1};M.prototype.writeUint16LE=M.prototype.writeUInt16LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,65535,0),this[r]=t&255,this[r+1]=t>>>8,r+2};M.prototype.writeUint16BE=M.prototype.writeUInt16BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,65535,0),this[r]=t>>>8,this[r+1]=t&255,r+2};M.prototype.writeUint32LE=M.prototype.writeUInt32LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,4294967295,0),this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=t&255,r+4};M.prototype.writeUint32BE=M.prototype.writeUInt32BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,4294967295,0),this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=t&255,r+4};function t1(e,t,r,n,i){s1(t,n,i,e,r,7);let a=Number(t&BigInt(4294967295));e[r++]=a,a=a>>8,e[r++]=a,a=a>>8,e[r++]=a,a=a>>8,e[r++]=a;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,r}function r1(e,t,r,n,i){s1(t,n,i,e,r,7);let a=Number(t&BigInt(4294967295));e[r+7]=a,a=a>>8,e[r+6]=a,a=a>>8,e[r+5]=a,a=a>>8,e[r+4]=a;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s=s>>8,e[r+2]=s,s=s>>8,e[r+1]=s,s=s>>8,e[r]=s,r+8}M.prototype.writeBigUInt64LE=ui(function(t,r=0){return t1(this,t,r,BigInt(0),BigInt(\"0xffffffffffffffff\"))});M.prototype.writeBigUInt64BE=ui(function(t,r=0){return r1(this,t,r,BigInt(0),BigInt(\"0xffffffffffffffff\"))});M.prototype.writeIntLE=function(t,r,n,i){if(t=+t,r=r>>>0,!i){let c=Math.pow(2,8*n-1);Kt(this,t,r,n,c-1,-c)}let a=0,s=1,o=0;for(this[r]=t&255;++a<n&&(s*=256);)t<0&&o===0&&this[r+a-1]!==0&&(o=1),this[r+a]=(t/s>>0)-o&255;return r+n};M.prototype.writeIntBE=function(t,r,n,i){if(t=+t,r=r>>>0,!i){let c=Math.pow(2,8*n-1);Kt(this,t,r,n,c-1,-c)}let a=n-1,s=1,o=0;for(this[r+a]=t&255;--a>=0&&(s*=256);)t<0&&o===0&&this[r+a+1]!==0&&(o=1),this[r+a]=(t/s>>0)-o&255;return r+n};M.prototype.writeInt8=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,1,127,-128),t<0&&(t=255+t+1),this[r]=t&255,r+1};M.prototype.writeInt16LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,32767,-32768),this[r]=t&255,this[r+1]=t>>>8,r+2};M.prototype.writeInt16BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,32767,-32768),this[r]=t>>>8,this[r+1]=t&255,r+2};M.prototype.writeInt32LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,2147483647,-2147483648),this[r]=t&255,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24,r+4};M.prototype.writeInt32BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=t&255,r+4};M.prototype.writeBigInt64LE=ui(function(t,r=0){return t1(this,t,r,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});M.prototype.writeBigInt64BE=ui(function(t,r=0){return r1(this,t,r,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});function n1(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function i1(e,t,r,n,i){return t=+t,r=r>>>0,i||n1(e,t,r,4,34028234663852886e22,-34028234663852886e22),Ya.write(e,t,r,n,23,4),r+4}M.prototype.writeFloatLE=function(t,r,n){return i1(this,t,r,!0,n)};M.prototype.writeFloatBE=function(t,r,n){return i1(this,t,r,!1,n)};function a1(e,t,r,n,i){return t=+t,r=r>>>0,i||n1(e,t,r,8,17976931348623157e292,-17976931348623157e292),Ya.write(e,t,r,n,52,8),r+8}M.prototype.writeDoubleLE=function(t,r,n){return a1(this,t,r,!0,n)};M.prototype.writeDoubleBE=function(t,r,n){return a1(this,t,r,!1,n)};M.prototype.copy=function(t,r,n,i){if(!M.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(n||(n=0),!i&&i!==0&&(i=this.length),r>=t.length&&(r=t.length),r||(r=0),i>0&&i<n&&(i=n),i===n||t.length===0||this.length===0)return 0;if(r<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=this.length)throw new RangeError(\"Index out of range\");if(i<0)throw new RangeError(\"sourceEnd out of bounds\");i>this.length&&(i=this.length),t.length-r<i-n&&(i=t.length-r+n);let a=i-n;return this===t&&typeof Uint8Array.prototype.copyWithin==\"function\"?this.copyWithin(r,n,i):Uint8Array.prototype.set.call(t,this.subarray(n,i),r),a};M.prototype.fill=function(t,r,n,i){if(typeof t==\"string\"){if(typeof r==\"string\"?(i=r,r=0,n=this.length):typeof n==\"string\"&&(i=n,n=this.length),i!==void 0&&typeof i!=\"string\")throw new TypeError(\"encoding must be a string\");if(typeof i==\"string\"&&!M.isEncoding(i))throw new TypeError(\"Unknown encoding: \"+i);if(t.length===1){let s=t.charCodeAt(0);(i===\"utf8\"&&s<128||i===\"latin1\")&&(t=s)}}else typeof t==\"number\"?t=t&255:typeof t==\"boolean\"&&(t=Number(t));if(r<0||this.length<r||this.length<n)throw new RangeError(\"Out of range index\");if(n<=r)return this;r=r>>>0,n=n===void 0?this.length:n>>>0,t||(t=0);let a;if(typeof t==\"number\")for(a=r;a<n;++a)this[a]=t;else{let s=M.isBuffer(t)?t:M.from(t,i),o=s.length;if(o===0)throw new TypeError('The value \"'+t+'\" is invalid for argument \"value\"');for(a=0;a<n-r;++a)this[a+r]=s[a%o]}return this};var qa={};function oh(e,t,r){qa[e]=class extends r{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(i){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:i,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}oh(\"ERR_BUFFER_OUT_OF_BOUNDS\",function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"},RangeError);oh(\"ERR_INVALID_ARG_TYPE\",function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`},TypeError);oh(\"ERR_OUT_OF_RANGE\",function(e,t,r){let n=`The value of \"${e}\" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Xv(String(r)):typeof r==\"bigint\"&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=Xv(i)),i+=\"n\"),n+=` It must be ${t}. Received ${i}`,n},RangeError);function Xv(e){let t=\"\",r=e.length,n=e[0]===\"-\"?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function xR(e,t,r){Xa(t,\"offset\"),(e[t]===void 0||e[t+r]===void 0)&&Io(t,e.length-(r+1))}function s1(e,t,r,n,i,a){if(e>r||e<t){let s=typeof t==\"bigint\"?\"n\":\"\",o;throw a>3?t===0||t===BigInt(0)?o=`>= 0${s} and < 2${s} ** ${(a+1)*8}${s}`:o=`>= -(2${s} ** ${(a+1)*8-1}${s}) and < 2 ** ${(a+1)*8-1}${s}`:o=`>= ${t}${s} and <= ${r}${s}`,new qa.ERR_OUT_OF_RANGE(\"value\",o,e)}xR(n,i,a)}function Xa(e,t){if(typeof e!=\"number\")throw new qa.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function Io(e,t,r){throw Math.floor(e)!==e?(Xa(e,r),new qa.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",e)):t<0?new qa.ERR_BUFFER_OUT_OF_BOUNDS:new qa.ERR_OUT_OF_RANGE(r||\"offset\",`>= ${r?1:0} and <= ${t}`,e)}var SR=/[^+/0-9A-Za-z-_]/g;function ER(e){if(e=e.split(\"=\")[0],e=e.trim().replace(SR,\"\"),e.length<2)return\"\";for(;e.length%4!==0;)e=e+\"=\";return e}function ih(e,t){t=t||1/0;let r,n=e.length,i=null,a=[];for(let s=0;s<n;++s){if(r=e.charCodeAt(s),r>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}else if(s+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw new Error(\"Invalid code point\")}return a}function AR(e){let t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r)&255);return t}function kR(e,t){let r,n,i,a=[];for(let s=0;s<e.length&&!((t-=2)<0);++s)r=e.charCodeAt(s),n=r>>8,i=r%256,a.push(i),a.push(n);return a}function o1(e){return th.toByteArray(ER(e))}function Ic(e,t,r,n){let i;for(i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function hn(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}function lh(e){return e!==e}var TR=function(){let e=\"0123456789abcdef\",t=new Array(256);for(let r=0;r<16;++r){let n=r*16;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function ui(e){return typeof BigInt==\"undefined\"?CR:e}function CR(){throw new Error(\"BigInt not supported\")}});var l1,uh,Buffer,g=YP(()=>{l1=require(\"obsidian\");l1.Platform.isMobileApp?uh=ch().Buffer:uh=global.Buffer;Buffer=uh});var u1=I((XH,c1)=>{\"use strict\";g();var dr=function(e){if(e=e||{},this.Promise=e.Promise||Promise,this.queues=Object.create(null),this.domainReentrant=e.domainReentrant||!1,this.domainReentrant){if(typeof process==\"undefined\"||typeof process.domain==\"undefined\")throw new Error(\"Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, use a NodeJS version that still implements Domain, or install a browser polyfill.\");this.domains=Object.create(null)}this.timeout=e.timeout||dr.DEFAULT_TIMEOUT,this.maxOccupationTime=e.maxOccupationTime||dr.DEFAULT_MAX_OCCUPATION_TIME,this.maxExecutionTime=e.maxExecutionTime||dr.DEFAULT_MAX_EXECUTION_TIME,e.maxPending===1/0||Number.isInteger(e.maxPending)&&e.maxPending>=0?this.maxPending=e.maxPending:this.maxPending=dr.DEFAULT_MAX_PENDING};dr.DEFAULT_TIMEOUT=0;dr.DEFAULT_MAX_OCCUPATION_TIME=0;dr.DEFAULT_MAX_EXECUTION_TIME=0;dr.DEFAULT_MAX_PENDING=1e3;dr.prototype.acquire=function(e,t,r,n){if(Array.isArray(e))return this._acquireBatch(e,t,r,n);if(typeof t!=\"function\")throw new Error(\"You must pass a function to execute\");var i=null,a=null,s=null;typeof r!=\"function\"&&(n=r,r=null,s=new this.Promise(function(b,x){i=b,a=x})),n=n||{};var o=!1,c=null,l=null,u=null,f=this,d=function(b,x,E){l&&(clearTimeout(l),l=null),u&&(clearTimeout(u),u=null),b&&(f.queues[e]&&f.queues[e].length===0&&delete f.queues[e],f.domainReentrant&&delete f.domains[e]),o||(s?x?a(x):i(E):typeof r==\"function\"&&r(x,E),o=!0),b&&f.queues[e]&&f.queues[e].length>0&&f.queues[e].shift()()},h=function(b){if(o)return d(b);c&&(clearTimeout(c),c=null),f.domainReentrant&&b&&(f.domains[e]=process.domain);var x=n.maxExecutionTime||f.maxExecutionTime;if(x&&(u=setTimeout(function(){f.queues[e]&&d(b,new Error(\"Maximum execution time is exceeded \"+e))},x)),t.length===1){var E=!1;try{t(function(_,k){E||(E=!0,d(b,_,k))})}catch(_){E||(E=!0,d(b,_))}}else f._promiseTry(function(){return t()}).then(function(_){d(b,void 0,_)},function(_){d(b,_)})};f.domainReentrant&&process.domain&&(h=process.domain.bind(h));var p=n.maxPending||f.maxPending;if(!f.queues[e])f.queues[e]=[],h(!0);else if(f.domainReentrant&&process.domain&&process.domain===f.domains[e])h(!1);else if(f.queues[e].length>=p)d(!1,new Error(\"Too many pending tasks in queue \"+e));else{var m=function(){h(!0)};n.skipQueue?f.queues[e].unshift(m):f.queues[e].push(m);var v=n.timeout||f.timeout;v&&(c=setTimeout(function(){c=null,d(!1,new Error(\"async-lock timed out in queue \"+e))},v))}var y=n.maxOccupationTime||f.maxOccupationTime;if(y&&(l=setTimeout(function(){f.queues[e]&&d(!1,new Error(\"Maximum occupation time is exceeded in queue \"+e))},y)),s)return s};dr.prototype._acquireBatch=function(e,t,r,n){typeof r!=\"function\"&&(n=r,r=null);var i=this,a=function(o,c){return function(l){i.acquire(o,c,l,n)}},s=e.reduceRight(function(o,c){return a(c,o)},t);if(typeof r==\"function\")s(r);else return new this.Promise(function(o,c){s.length===1?s(function(l,u){l?c(l):o(u)}):o(s())})};dr.prototype.isBusy=function(e){return e?!!this.queues[e]:Object.keys(this.queues).length>0};dr.prototype._promiseTry=function(e){try{return this.Promise.resolve(e())}catch(t){return this.Promise.reject(t)}};c1.exports=dr});var d1=I((KH,f1)=>{\"use strict\";g();f1.exports=u1()});var h1=I((QH,fh)=>{g();typeof Object.create==\"function\"?fh.exports=function(t,r){r&&(t.super_=r,t.prototype=Object.create(r.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:fh.exports=function(t,r){if(r){t.super_=r;var n=function(){};n.prototype=r.prototype,t.prototype=new n,t.prototype.constructor=t}}});var hh=I((dh,m1)=>{g();var Fc=ch(),pn=Fc.Buffer;function p1(e,t){for(var r in e)t[r]=e[r]}pn.from&&pn.alloc&&pn.allocUnsafe&&pn.allocUnsafeSlow?m1.exports=Fc:(p1(Fc,dh),dh.Buffer=Ki);function Ki(e,t,r){return pn(e,t,r)}Ki.prototype=Object.create(pn.prototype);p1(pn,Ki);Ki.from=function(e,t,r){if(typeof e==\"number\")throw new TypeError(\"Argument must not be a number\");return pn(e,t,r)};Ki.alloc=function(e,t,r){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");var n=pn(e);return t!==void 0?typeof r==\"string\"?n.fill(t,r):n.fill(t):n.fill(0),n};Ki.allocUnsafe=function(e){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");return pn(e)};Ki.allocUnsafeSlow=function(e){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");return Fc.SlowBuffer(e)}});var y1=I((rU,v1)=>{g();var g1=hh().Buffer;function $c(e,t){this._block=g1.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}$c.prototype.update=function(e,t){typeof e==\"string\"&&(t=t||\"utf8\",e=g1.from(e,t));for(var r=this._block,n=this._blockSize,i=e.length,a=this._len,s=0;s<i;){for(var o=a%n,c=Math.min(i-s,n-o),l=0;l<c;l++)r[o+l]=e[s+l];a+=c,s+=c,a%n===0&&this._update(r)}return this._len+=i,this};$c.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=this._len*8;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(r&4294967295)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var a=this._hash();return e?a.toString(e):a};$c.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")};v1.exports=$c});var _1=I((iU,b1)=>{g();var PR=h1(),w1=y1(),RR=hh().Buffer,MR=[1518500249,1859775393,-1894007588,-899497514],OR=new Array(80);function Fo(){this.init(),this._w=OR,w1.call(this,64,56)}PR(Fo,w1);Fo.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function IR(e){return e<<1|e>>>31}function FR(e){return e<<5|e>>>27}function $R(e){return e<<30|e>>>2}function LR(e,t,r,n){return e===0?t&r|~t&n:e===2?t&r|t&n|r&n:t^r^n}Fo.prototype._update=function(e){for(var t=this._w,r=this._a|0,n=this._b|0,i=this._c|0,a=this._d|0,s=this._e|0,o=0;o<16;++o)t[o]=e.readInt32BE(o*4);for(;o<80;++o)t[o]=IR(t[o-3]^t[o-8]^t[o-14]^t[o-16]);for(var c=0;c<80;++c){var l=~~(c/20),u=FR(r)+LR(l,n,i,a)+s+t[c]+MR[l]|0;s=a,a=i,i=$R(n),n=r,r=u}this._a=r+this._a|0,this._b=n+this._b|0,this._c=i+this._c|0,this._d=a+this._d|0,this._e=s+this._e|0};Fo.prototype._hash=function(){var e=RR.allocUnsafe(20);return e.writeInt32BE(this._a|0,0),e.writeInt32BE(this._b|0,4),e.writeInt32BE(this._c|0,8),e.writeInt32BE(this._d|0,12),e.writeInt32BE(this._e|0,16),e};b1.exports=Fo});var S1=I(ph=>{g();var x1;(function(e){typeof DO_NOT_EXPORT_CRC==\"undefined\"?typeof ph==\"object\"?e(ph):typeof define==\"function\"&&define.amd?define(function(){var t={};return e(t),t}):e(x1={}):e(x1={})})(function(e){e.version=\"1.2.2\";function t(){for(var w=0,A=new Array(256),S=0;S!=256;++S)w=S,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,A[S]=w;return typeof Int32Array!=\"undefined\"?new Int32Array(A):A}var r=t();function n(w){var A=0,S=0,T=0,P=typeof Int32Array!=\"undefined\"?new Int32Array(4096):new Array(4096);for(T=0;T!=256;++T)P[T]=w[T];for(T=0;T!=256;++T)for(S=w[T],A=256+T;A<4096;A+=256)S=P[A]=S>>>8^w[S&255];var O=[];for(T=1;T!=16;++T)O[T-1]=typeof Int32Array!=\"undefined\"?P.subarray(T*256,T*256+256):P.slice(T*256,T*256+256);return O}var i=n(r),a=i[0],s=i[1],o=i[2],c=i[3],l=i[4],u=i[5],f=i[6],d=i[7],h=i[8],p=i[9],m=i[10],v=i[11],y=i[12],b=i[13],x=i[14];function E(w,A){for(var S=A^-1,T=0,P=w.length;T<P;)S=S>>>8^r[(S^w.charCodeAt(T++))&255];return~S}function _(w,A){for(var S=A^-1,T=w.length-15,P=0;P<T;)S=x[w[P++]^S&255]^b[w[P++]^S>>8&255]^y[w[P++]^S>>16&255]^v[w[P++]^S>>>24]^m[w[P++]]^p[w[P++]]^h[w[P++]]^d[w[P++]]^f[w[P++]]^u[w[P++]]^l[w[P++]]^c[w[P++]]^o[w[P++]]^s[w[P++]]^a[w[P++]]^r[w[P++]];for(T+=15;P<T;)S=S>>>8^r[(S^w[P++])&255];return~S}function k(w,A){for(var S=A^-1,T=0,P=w.length,O=0,j=0;T<P;)O=w.charCodeAt(T++),O<128?S=S>>>8^r[(S^O)&255]:O<2048?(S=S>>>8^r[(S^(192|O>>6&31))&255],S=S>>>8^r[(S^(128|O&63))&255]):O>=55296&&O<57344?(O=(O&1023)+64,j=w.charCodeAt(T++)&1023,S=S>>>8^r[(S^(240|O>>8&7))&255],S=S>>>8^r[(S^(128|O>>2&63))&255],S=S>>>8^r[(S^(128|j>>6&15|(O&3)<<4))&255],S=S>>>8^r[(S^(128|j&63))&255]):(S=S>>>8^r[(S^(224|O>>12&15))&255],S=S>>>8^r[(S^(128|O>>6&63))&255],S=S>>>8^r[(S^(128|O&63))&255]);return~S}e.table=r,e.bstr=E,e.buf=_,e.str=k})});var Dn=I(Ht=>{\"use strict\";g();var DR=typeof Uint8Array!=\"undefined\"&&typeof Uint16Array!=\"undefined\"&&typeof Int32Array!=\"undefined\";function NR(e,t){return Object.prototype.hasOwnProperty.call(e,t)}Ht.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(typeof r!=\"object\")throw new TypeError(r+\"must be non-object\");for(var n in r)NR(r,n)&&(e[n]=r[n])}}return e};Ht.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var jR={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray){e.set(t.subarray(r,r+n),i);return}for(var a=0;a<n;a++)e[i+a]=t[r+a]},flattenChunks:function(e){var t,r,n,i,a,s;for(n=0,t=0,r=e.length;t<r;t++)n+=e[t].length;for(s=new Uint8Array(n),i=0,t=0,r=e.length;t<r;t++)a=e[t],s.set(a,i),i+=a.length;return s}},BR={arraySet:function(e,t,r,n,i){for(var a=0;a<n;a++)e[i+a]=t[r+a]},flattenChunks:function(e){return[].concat.apply([],e)}};Ht.setTyped=function(e){e?(Ht.Buf8=Uint8Array,Ht.Buf16=Uint16Array,Ht.Buf32=Int32Array,Ht.assign(Ht,jR)):(Ht.Buf8=Array,Ht.Buf16=Array,Ht.Buf32=Array,Ht.assign(Ht,BR))};Ht.setTyped(DR)});var W1=I(Qa=>{\"use strict\";g();var HR=Dn(),UR=4,E1=0,A1=1,GR=2;function Ja(e){for(var t=e.length;--t>=0;)e[t]=0}var zR=0,M1=1,VR=2,WR=3,qR=258,_h=29,Bo=256,Lo=Bo+1+_h,Ka=30,xh=19,O1=2*Lo+1,Ji=15,mh=16,YR=7,Sh=256,I1=16,F1=17,$1=18,wh=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],Lc=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],XR=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],L1=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ZR=512,Nn=new Array((Lo+2)*2);Ja(Nn);var $o=new Array(Ka*2);Ja($o);var Do=new Array(ZR);Ja(Do);var No=new Array(qR-WR+1);Ja(No);var Eh=new Array(_h);Ja(Eh);var Dc=new Array(Ka);Ja(Dc);function gh(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}var D1,N1,j1;function vh(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function B1(e){return e<256?Do[e]:Do[256+(e>>>7)]}function jo(e,t){e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255}function Jt(e,t,r){e.bi_valid>mh-r?(e.bi_buf|=t<<e.bi_valid&65535,jo(e,e.bi_buf),e.bi_buf=t>>mh-e.bi_valid,e.bi_valid+=r-mh):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function mn(e,t,r){Jt(e,r[t*2],r[t*2+1])}function H1(e,t){var r=0;do r|=e&1,e>>>=1,r<<=1;while(--t>0);return r>>>1}function KR(e){e.bi_valid===16?(jo(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)}function JR(e,t){var r=t.dyn_tree,n=t.max_code,i=t.stat_desc.static_tree,a=t.stat_desc.has_stree,s=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,u,f,d,h,p,m=0;for(d=0;d<=Ji;d++)e.bl_count[d]=0;for(r[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<O1;l++)u=e.heap[l],d=r[r[u*2+1]*2+1]+1,d>c&&(d=c,m++),r[u*2+1]=d,!(u>n)&&(e.bl_count[d]++,h=0,u>=o&&(h=s[u-o]),p=r[u*2],e.opt_len+=p*(d+h),a&&(e.static_len+=p*(i[u*2+1]+h)));if(m!==0){do{for(d=c-1;e.bl_count[d]===0;)d--;e.bl_count[d]--,e.bl_count[d+1]+=2,e.bl_count[c]--,m-=2}while(m>0);for(d=c;d!==0;d--)for(u=e.bl_count[d];u!==0;)f=e.heap[--l],!(f>n)&&(r[f*2+1]!==d&&(e.opt_len+=(d-r[f*2+1])*r[f*2],r[f*2+1]=d),u--)}}function U1(e,t,r){var n=new Array(Ji+1),i=0,a,s;for(a=1;a<=Ji;a++)n[a]=i=i+r[a-1]<<1;for(s=0;s<=t;s++){var o=e[s*2+1];o!==0&&(e[s*2]=H1(n[o]++,o))}}function QR(){var e,t,r,n,i,a=new Array(Ji+1);for(r=0,n=0;n<_h-1;n++)for(Eh[n]=r,e=0;e<1<<wh[n];e++)No[r++]=n;for(No[r-1]=n,i=0,n=0;n<16;n++)for(Dc[n]=i,e=0;e<1<<Lc[n];e++)Do[i++]=n;for(i>>=7;n<Ka;n++)for(Dc[n]=i<<7,e=0;e<1<<Lc[n]-7;e++)Do[256+i++]=n;for(t=0;t<=Ji;t++)a[t]=0;for(e=0;e<=143;)Nn[e*2+1]=8,e++,a[8]++;for(;e<=255;)Nn[e*2+1]=9,e++,a[9]++;for(;e<=279;)Nn[e*2+1]=7,e++,a[7]++;for(;e<=287;)Nn[e*2+1]=8,e++,a[8]++;for(U1(Nn,Lo+1,a),e=0;e<Ka;e++)$o[e*2+1]=5,$o[e*2]=H1(e,5);D1=new gh(Nn,wh,Bo+1,Lo,Ji),N1=new gh($o,Lc,0,Ka,Ji),j1=new gh(new Array(0),XR,0,xh,YR)}function G1(e){var t;for(t=0;t<Lo;t++)e.dyn_ltree[t*2]=0;for(t=0;t<Ka;t++)e.dyn_dtree[t*2]=0;for(t=0;t<xh;t++)e.bl_tree[t*2]=0;e.dyn_ltree[Sh*2]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function z1(e){e.bi_valid>8?jo(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function e5(e,t,r,n){z1(e),n&&(jo(e,r),jo(e,~r)),HR.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}function k1(e,t,r,n){var i=t*2,a=r*2;return e[i]<e[a]||e[i]===e[a]&&n[t]<=n[r]}function yh(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&k1(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!k1(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function T1(e,t,r){var n,i,a=0,s,o;if(e.last_lit!==0)do n=e.pending_buf[e.d_buf+a*2]<<8|e.pending_buf[e.d_buf+a*2+1],i=e.pending_buf[e.l_buf+a],a++,n===0?mn(e,i,t):(s=No[i],mn(e,s+Bo+1,t),o=wh[s],o!==0&&(i-=Eh[s],Jt(e,i,o)),n--,s=B1(n),mn(e,s,r),o=Lc[s],o!==0&&(n-=Dc[s],Jt(e,n,o)));while(a<e.last_lit);mn(e,Sh,t)}function bh(e,t){var r=t.dyn_tree,n=t.stat_desc.static_tree,i=t.stat_desc.has_stree,a=t.stat_desc.elems,s,o,c=-1,l;for(e.heap_len=0,e.heap_max=O1,s=0;s<a;s++)r[s*2]!==0?(e.heap[++e.heap_len]=c=s,e.depth[s]=0):r[s*2+1]=0;for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,r[l*2]=1,e.depth[l]=0,e.opt_len--,i&&(e.static_len-=n[l*2+1]);for(t.max_code=c,s=e.heap_len>>1;s>=1;s--)yh(e,r,s);l=a;do s=e.heap[1],e.heap[1]=e.heap[e.heap_len--],yh(e,r,1),o=e.heap[1],e.heap[--e.heap_max]=s,e.heap[--e.heap_max]=o,r[l*2]=r[s*2]+r[o*2],e.depth[l]=(e.depth[s]>=e.depth[o]?e.depth[s]:e.depth[o])+1,r[s*2+1]=r[o*2+1]=l,e.heap[1]=l++,yh(e,r,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],JR(e,t),U1(r,c,e.bl_count)}function C1(e,t,r){var n,i=-1,a,s=t[0*2+1],o=0,c=7,l=4;for(s===0&&(c=138,l=3),t[(r+1)*2+1]=65535,n=0;n<=r;n++)a=s,s=t[(n+1)*2+1],!(++o<c&&a===s)&&(o<l?e.bl_tree[a*2]+=o:a!==0?(a!==i&&e.bl_tree[a*2]++,e.bl_tree[I1*2]++):o<=10?e.bl_tree[F1*2]++:e.bl_tree[$1*2]++,o=0,i=a,s===0?(c=138,l=3):a===s?(c=6,l=3):(c=7,l=4))}function P1(e,t,r){var n,i=-1,a,s=t[0*2+1],o=0,c=7,l=4;for(s===0&&(c=138,l=3),n=0;n<=r;n++)if(a=s,s=t[(n+1)*2+1],!(++o<c&&a===s)){if(o<l)do mn(e,a,e.bl_tree);while(--o!==0);else a!==0?(a!==i&&(mn(e,a,e.bl_tree),o--),mn(e,I1,e.bl_tree),Jt(e,o-3,2)):o<=10?(mn(e,F1,e.bl_tree),Jt(e,o-3,3)):(mn(e,$1,e.bl_tree),Jt(e,o-11,7));o=0,i=a,s===0?(c=138,l=3):a===s?(c=6,l=3):(c=7,l=4)}}function t5(e){var t;for(C1(e,e.dyn_ltree,e.l_desc.max_code),C1(e,e.dyn_dtree,e.d_desc.max_code),bh(e,e.bl_desc),t=xh-1;t>=3&&e.bl_tree[L1[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t}function r5(e,t,r,n){var i;for(Jt(e,t-257,5),Jt(e,r-1,5),Jt(e,n-4,4),i=0;i<n;i++)Jt(e,e.bl_tree[L1[i]*2+1],3);P1(e,e.dyn_ltree,t-1),P1(e,e.dyn_dtree,r-1)}function n5(e){var t=4093624447,r;for(r=0;r<=31;r++,t>>>=1)if(t&1&&e.dyn_ltree[r*2]!==0)return E1;if(e.dyn_ltree[9*2]!==0||e.dyn_ltree[10*2]!==0||e.dyn_ltree[13*2]!==0)return A1;for(r=32;r<Bo;r++)if(e.dyn_ltree[r*2]!==0)return A1;return E1}var R1=!1;function i5(e){R1||(QR(),R1=!0),e.l_desc=new vh(e.dyn_ltree,D1),e.d_desc=new vh(e.dyn_dtree,N1),e.bl_desc=new vh(e.bl_tree,j1),e.bi_buf=0,e.bi_valid=0,G1(e)}function V1(e,t,r,n){Jt(e,(zR<<1)+(n?1:0),3),e5(e,t,r,!0)}function a5(e){Jt(e,M1<<1,3),mn(e,Sh,Nn),KR(e)}function s5(e,t,r,n){var i,a,s=0;e.level>0?(e.strm.data_type===GR&&(e.strm.data_type=n5(e)),bh(e,e.l_desc),bh(e,e.d_desc),s=t5(e),i=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=i&&(i=a)):i=a=r+5,r+4<=i&&t!==-1?V1(e,t,r,n):e.strategy===UR||a===i?(Jt(e,(M1<<1)+(n?1:0),3),T1(e,Nn,$o)):(Jt(e,(VR<<1)+(n?1:0),3),r5(e,e.l_desc.max_code+1,e.d_desc.max_code+1,s+1),T1(e,e.dyn_ltree,e.dyn_dtree)),G1(e),n&&z1(e)}function o5(e,t,r){return e.pending_buf[e.d_buf+e.last_lit*2]=t>>>8&255,e.pending_buf[e.d_buf+e.last_lit*2+1]=t&255,e.pending_buf[e.l_buf+e.last_lit]=r&255,e.last_lit++,t===0?e.dyn_ltree[r*2]++:(e.matches++,t--,e.dyn_ltree[(No[r]+Bo+1)*2]++,e.dyn_dtree[B1(t)*2]++),e.last_lit===e.lit_bufsize-1}Qa._tr_init=i5;Qa._tr_stored_block=V1;Qa._tr_flush_block=s5;Qa._tr_tally=o5;Qa._tr_align=a5});var Ah=I((dU,q1)=>{\"use strict\";g();function l5(e,t,r,n){for(var i=e&65535|0,a=e>>>16&65535|0,s=0;r!==0;){s=r>2e3?2e3:r,r-=s;do i=i+t[n++]|0,a=a+i|0;while(--s);i%=65521,a%=65521}return i|a<<16|0}q1.exports=l5});var kh=I((pU,Y1)=>{\"use strict\";g();function c5(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e}return t}var u5=c5();function f5(e,t,r,n){var i=u5,a=n+r;e^=-1;for(var s=n;s<a;s++)e=e>>>8^i[(e^t[s])&255];return e^-1}Y1.exports=f5});var Nc=I((gU,X1)=>{\"use strict\";g();X1.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}});var iy=I(yn=>{\"use strict\";g();var Ut=Dn(),Rr=W1(),Q1=Ah(),fi=kh(),d5=Nc(),ra=0,h5=1,p5=3,gi=4,Z1=5,vn=0,K1=1,Mr=-2,m5=-3,Th=-5,g5=-1,v5=1,jc=2,y5=3,w5=4,b5=0,_5=2,Gc=8,x5=9,S5=15,E5=8,A5=29,k5=256,Ph=k5+1+A5,T5=30,C5=19,P5=2*Ph+1,R5=15,we=3,pi=258,Zr=pi+we+1,M5=32,zc=42,Rh=69,Bc=73,Hc=91,Uc=103,Qi=113,Uo=666,pt=1,Go=2,ea=3,rs=4,O5=3;function mi(e,t){return e.msg=d5[t],t}function J1(e){return(e<<1)-(e>4?9:0)}function hi(e){for(var t=e.length;--t>=0;)e[t]=0}function di(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),r!==0&&(Ut.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,t.pending===0&&(t.pending_out=0))}function xt(e,t){Rr._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,di(e.strm)}function Ae(e,t){e.pending_buf[e.pending++]=t}function Ho(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255}function I5(e,t,r,n){var i=e.avail_in;return i>n&&(i=n),i===0?0:(e.avail_in-=i,Ut.arraySet(t,e.input,e.next_in,i,r),e.state.wrap===1?e.adler=Q1(e.adler,t,i,r):e.state.wrap===2&&(e.adler=fi(e.adler,t,i,r)),e.next_in+=i,e.total_in+=i,i)}function ey(e,t){var r=e.max_chain_length,n=e.strstart,i,a,s=e.prev_length,o=e.nice_match,c=e.strstart>e.w_size-Zr?e.strstart-(e.w_size-Zr):0,l=e.window,u=e.w_mask,f=e.prev,d=e.strstart+pi,h=l[n+s-1],p=l[n+s];e.prev_length>=e.good_match&&(r>>=2),o>e.lookahead&&(o=e.lookahead);do if(i=t,!(l[i+s]!==p||l[i+s-1]!==h||l[i]!==l[n]||l[++i]!==l[n+1])){n+=2,i++;do;while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&n<d);if(a=pi-(d-n),n=d-pi,a>s){if(e.match_start=t,s=a,a>=o)break;h=l[n+s-1],p=l[n+s]}}while((t=f[t&u])>c&&--r!==0);return s<=e.lookahead?s:e.lookahead}function ta(e){var t=e.w_size,r,n,i,a,s;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-Zr)){Ut.arraySet(e.window,e.window,t,t,0),e.match_start-=t,e.strstart-=t,e.block_start-=t,n=e.hash_size,r=n;do i=e.head[--r],e.head[r]=i>=t?i-t:0;while(--n);n=t,r=n;do i=e.prev[--r],e.prev[r]=i>=t?i-t:0;while(--n);a+=t}if(e.strm.avail_in===0)break;if(n=I5(e.strm,e.window,e.strstart+e.lookahead,a),e.lookahead+=n,e.lookahead+e.insert>=we)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+we-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<we)););}while(e.lookahead<Zr&&e.strm.avail_in!==0)}function F5(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ta(e),e.lookahead===0&&t===ra)return pt;if(e.lookahead===0)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((e.strstart===0||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,xt(e,!1),e.strm.avail_out===0)||e.strstart-e.block_start>=e.w_size-Zr&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):(e.strstart>e.block_start&&(xt(e,!1),e.strm.avail_out===0),pt)}function Ch(e,t){for(var r,n;;){if(e.lookahead<Zr){if(ta(e),e.lookahead<Zr&&t===ra)return pt;if(e.lookahead===0)break}if(r=0,e.lookahead>=we&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),r!==0&&e.strstart-r<=e.w_size-Zr&&(e.match_length=ey(e,r)),e.match_length>=we)if(n=Rr._tr_tally(e,e.strstart-e.match_start,e.match_length-we),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=we){e.match_length--;do e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=e.strstart<we-1?e.strstart:we-1,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function es(e,t){for(var r,n,i;;){if(e.lookahead<Zr){if(ta(e),e.lookahead<Zr&&t===ra)return pt;if(e.lookahead===0)break}if(r=0,e.lookahead>=we&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=we-1,r!==0&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-Zr&&(e.match_length=ey(e,r),e.match_length<=5&&(e.strategy===v5||e.match_length===we&&e.strstart-e.match_start>4096)&&(e.match_length=we-1)),e.prev_length>=we&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-we,n=Rr._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-we),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=we-1,e.strstart++,n&&(xt(e,!1),e.strm.avail_out===0))return pt}else if(e.match_available){if(n=Rr._tr_tally(e,0,e.window[e.strstart-1]),n&&xt(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return pt}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=Rr._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<we-1?e.strstart:we-1,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function $5(e,t){for(var r,n,i,a,s=e.window;;){if(e.lookahead<=pi){if(ta(e),e.lookahead<=pi&&t===ra)return pt;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=we&&e.strstart>0&&(i=e.strstart-1,n=s[i],n===s[++i]&&n===s[++i]&&n===s[++i])){a=e.strstart+pi;do;while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&i<a);e.match_length=pi-(a-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=we?(r=Rr._tr_tally(e,1,e.match_length-we),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function L5(e,t){for(var r;;){if(e.lookahead===0&&(ta(e),e.lookahead===0)){if(t===ra)return pt;break}if(e.match_length=0,r=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function gn(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}var ts;ts=[new gn(0,0,0,0,F5),new gn(4,4,8,4,Ch),new gn(4,5,16,8,Ch),new gn(4,6,32,32,Ch),new gn(4,4,16,16,es),new gn(8,16,32,32,es),new gn(8,16,128,128,es),new gn(8,32,128,256,es),new gn(32,128,258,1024,es),new gn(32,258,258,4096,es)];function D5(e){e.window_size=2*e.w_size,hi(e.head),e.max_lazy_match=ts[e.level].max_lazy,e.good_match=ts[e.level].good_length,e.nice_match=ts[e.level].nice_length,e.max_chain_length=ts[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=we-1,e.match_available=0,e.ins_h=0}function N5(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Gc,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Ut.Buf16(P5*2),this.dyn_dtree=new Ut.Buf16((2*T5+1)*2),this.bl_tree=new Ut.Buf16((2*C5+1)*2),hi(this.dyn_ltree),hi(this.dyn_dtree),hi(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Ut.Buf16(R5+1),this.heap=new Ut.Buf16(2*Ph+1),hi(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Ut.Buf16(2*Ph+1),hi(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function ty(e){var t;return!e||!e.state?mi(e,Mr):(e.total_in=e.total_out=0,e.data_type=_5,t=e.state,t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?zc:Qi,e.adler=t.wrap===2?0:1,t.last_flush=ra,Rr._tr_init(t),vn)}function ry(e){var t=ty(e);return t===vn&&D5(e.state),t}function j5(e,t){return!e||!e.state||e.state.wrap!==2?Mr:(e.state.gzhead=t,vn)}function ny(e,t,r,n,i,a){if(!e)return Mr;var s=1;if(t===g5&&(t=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),i<1||i>x5||r!==Gc||n<8||n>15||t<0||t>9||a<0||a>w5)return mi(e,Mr);n===8&&(n=9);var o=new N5;return e.state=o,o.strm=e,o.wrap=s,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+we-1)/we),o.window=new Ut.Buf8(o.w_size*2),o.head=new Ut.Buf16(o.hash_size),o.prev=new Ut.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=o.lit_bufsize*4,o.pending_buf=new Ut.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=a,o.method=r,ry(e)}function B5(e,t){return ny(e,t,Gc,S5,E5,b5)}function H5(e,t){var r,n,i,a;if(!e||!e.state||t>Z1||t<0)return e?mi(e,Mr):Mr;if(n=e.state,!e.output||!e.input&&e.avail_in!==0||n.status===Uo&&t!==gi)return mi(e,e.avail_out===0?Th:Mr);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===zc)if(n.wrap===2)e.adler=0,Ae(n,31),Ae(n,139),Ae(n,8),n.gzhead?(Ae(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),Ae(n,n.gzhead.time&255),Ae(n,n.gzhead.time>>8&255),Ae(n,n.gzhead.time>>16&255),Ae(n,n.gzhead.time>>24&255),Ae(n,n.level===9?2:n.strategy>=jc||n.level<2?4:0),Ae(n,n.gzhead.os&255),n.gzhead.extra&&n.gzhead.extra.length&&(Ae(n,n.gzhead.extra.length&255),Ae(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=fi(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=Rh):(Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,n.level===9?2:n.strategy>=jc||n.level<2?4:0),Ae(n,O5),n.status=Qi);else{var s=Gc+(n.w_bits-8<<4)<<8,o=-1;n.strategy>=jc||n.level<2?o=0:n.level<6?o=1:n.level===6?o=2:o=3,s|=o<<6,n.strstart!==0&&(s|=M5),s+=31-s%31,n.status=Qi,Ho(n,s),n.strstart!==0&&(Ho(n,e.adler>>>16),Ho(n,e.adler&65535)),e.adler=1}if(n.status===Rh)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(n.gzhead.extra.length&65535)&&!(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size));)Ae(n,n.gzhead.extra[n.gzindex]&255),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=Bc)}else n.status=Bc;if(n.status===Bc)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}n.gzindex<n.gzhead.name.length?a=n.gzhead.name.charCodeAt(n.gzindex++)&255:a=0,Ae(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),a===0&&(n.gzindex=0,n.status=Hc)}else n.status=Hc;if(n.status===Hc)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}n.gzindex<n.gzhead.comment.length?a=n.gzhead.comment.charCodeAt(n.gzindex++)&255:a=0,Ae(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),a===0&&(n.status=Uc)}else n.status=Uc;if(n.status===Uc&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&di(e),n.pending+2<=n.pending_buf_size&&(Ae(n,e.adler&255),Ae(n,e.adler>>8&255),e.adler=0,n.status=Qi)):n.status=Qi),n.pending!==0){if(di(e),e.avail_out===0)return n.last_flush=-1,vn}else if(e.avail_in===0&&J1(t)<=J1(r)&&t!==gi)return mi(e,Th);if(n.status===Uo&&e.avail_in!==0)return mi(e,Th);if(e.avail_in!==0||n.lookahead!==0||t!==ra&&n.status!==Uo){var c=n.strategy===jc?L5(n,t):n.strategy===y5?$5(n,t):ts[n.level].func(n,t);if((c===ea||c===rs)&&(n.status=Uo),c===pt||c===ea)return e.avail_out===0&&(n.last_flush=-1),vn;if(c===Go&&(t===h5?Rr._tr_align(n):t!==Z1&&(Rr._tr_stored_block(n,0,0,!1),t===p5&&(hi(n.head),n.lookahead===0&&(n.strstart=0,n.block_start=0,n.insert=0))),di(e),e.avail_out===0))return n.last_flush=-1,vn}return t!==gi?vn:n.wrap<=0?K1:(n.wrap===2?(Ae(n,e.adler&255),Ae(n,e.adler>>8&255),Ae(n,e.adler>>16&255),Ae(n,e.adler>>24&255),Ae(n,e.total_in&255),Ae(n,e.total_in>>8&255),Ae(n,e.total_in>>16&255),Ae(n,e.total_in>>24&255)):(Ho(n,e.adler>>>16),Ho(n,e.adler&65535)),di(e),n.wrap>0&&(n.wrap=-n.wrap),n.pending!==0?vn:K1)}function U5(e){var t;return!e||!e.state?Mr:(t=e.state.status,t!==zc&&t!==Rh&&t!==Bc&&t!==Hc&&t!==Uc&&t!==Qi&&t!==Uo?mi(e,Mr):(e.state=null,t===Qi?mi(e,m5):vn))}function G5(e,t){var r=t.length,n,i,a,s,o,c,l,u;if(!e||!e.state||(n=e.state,s=n.wrap,s===2||s===1&&n.status!==zc||n.lookahead))return Mr;for(s===1&&(e.adler=Q1(e.adler,t,r,0)),n.wrap=0,r>=n.w_size&&(s===0&&(hi(n.head),n.strstart=0,n.block_start=0,n.insert=0),u=new Ut.Buf8(n.w_size),Ut.arraySet(u,t,r-n.w_size,n.w_size,0),t=u,r=n.w_size),o=e.avail_in,c=e.next_in,l=e.input,e.avail_in=r,e.next_in=0,e.input=t,ta(n);n.lookahead>=we;){i=n.strstart,a=n.lookahead-(we-1);do n.ins_h=(n.ins_h<<n.hash_shift^n.window[i+we-1])&n.hash_mask,n.prev[i&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=i,i++;while(--a);n.strstart=i,n.lookahead=we-1,ta(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=we-1,n.match_available=0,e.next_in=c,e.input=l,e.avail_in=o,n.wrap=s,vn}yn.deflateInit=B5;yn.deflateInit2=ny;yn.deflateReset=ry;yn.deflateResetKeep=ty;yn.deflateSetHeader=j5;yn.deflate=H5;yn.deflateEnd=U5;yn.deflateSetDictionary=G5;yn.deflateInfo=\"pako deflate (from Nodeca project)\"});var Mh=I(ns=>{\"use strict\";g();var Vc=Dn(),ay=!0,sy=!0;try{String.fromCharCode.apply(null,[0])}catch(e){ay=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){sy=!1}var zo=new Vc.Buf8(256);for(jn=0;jn<256;jn++)zo[jn]=jn>=252?6:jn>=248?5:jn>=240?4:jn>=224?3:jn>=192?2:1;var jn;zo[254]=zo[254]=1;ns.string2buf=function(e){var t,r,n,i,a,s=e.length,o=0;for(i=0;i<s;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<s&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new Vc.Buf8(o),a=0,i=0;a<o;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<s&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?t[a++]=r:r<2048?(t[a++]=192|r>>>6,t[a++]=128|r&63):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|r&63):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|r&63);return t};function oy(e,t){if(t<65534&&(e.subarray&&sy||!e.subarray&&ay))return String.fromCharCode.apply(null,Vc.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}ns.buf2binstring=function(e){return oy(e,e.length)};ns.binstring2buf=function(e){for(var t=new Vc.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t};ns.buf2string=function(e,t){var r,n,i,a,s=t||e.length,o=new Array(s*2);for(n=0,r=0;r<s;){if(i=e[r++],i<128){o[n++]=i;continue}if(a=zo[i],a>4){o[n++]=65533,r+=a-1;continue}for(i&=a===2?31:a===3?15:7;a>1&&r<s;)i=i<<6|e[r++]&63,a--;if(a>1){o[n++]=65533;continue}i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|i&1023)}return oy(o,n)};ns.utf8border=function(e,t){var r;for(t=t||e.length,t>e.length&&(t=e.length),r=t-1;r>=0&&(e[r]&192)===128;)r--;return r<0||r===0?t:r+zo[e[r]]>t?r:t}});var Oh=I((xU,ly)=>{\"use strict\";g();function z5(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}ly.exports=z5});var dy=I(qo=>{\"use strict\";g();var Vo=iy(),Wo=Dn(),Fh=Mh(),$h=Nc(),V5=Oh(),fy=Object.prototype.toString,W5=0,Ih=4,is=0,cy=1,uy=2,q5=-1,Y5=0,X5=8;function na(e){if(!(this instanceof na))return new na(e);this.options=Wo.assign({level:q5,method:X5,chunkSize:16384,windowBits:15,memLevel:8,strategy:Y5,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new V5,this.strm.avail_out=0;var r=Vo.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==is)throw new Error($h[r]);if(t.header&&Vo.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(typeof t.dictionary==\"string\"?n=Fh.string2buf(t.dictionary):fy.call(t.dictionary)===\"[object ArrayBuffer]\"?n=new Uint8Array(t.dictionary):n=t.dictionary,r=Vo.deflateSetDictionary(this.strm,n),r!==is)throw new Error($h[r]);this._dict_set=!0}}na.prototype.push=function(e,t){var r=this.strm,n=this.options.chunkSize,i,a;if(this.ended)return!1;a=t===~~t?t:t===!0?Ih:W5,typeof e==\"string\"?r.input=Fh.string2buf(e):fy.call(e)===\"[object ArrayBuffer]\"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(r.avail_out===0&&(r.output=new Wo.Buf8(n),r.next_out=0,r.avail_out=n),i=Vo.deflate(r,a),i!==cy&&i!==is)return this.onEnd(i),this.ended=!0,!1;(r.avail_out===0||r.avail_in===0&&(a===Ih||a===uy))&&(this.options.to===\"string\"?this.onData(Fh.buf2binstring(Wo.shrinkBuf(r.output,r.next_out))):this.onData(Wo.shrinkBuf(r.output,r.next_out)))}while((r.avail_in>0||r.avail_out===0)&&i!==cy);return a===Ih?(i=Vo.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===is):(a===uy&&(this.onEnd(is),r.avail_out=0),!0)};na.prototype.onData=function(e){this.chunks.push(e)};na.prototype.onEnd=function(e){e===is&&(this.options.to===\"string\"?this.result=this.chunks.join(\"\"):this.result=Wo.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Lh(e,t){var r=new na(t);if(r.push(e,!0),r.err)throw r.msg||$h[r.err];return r.result}function Z5(e,t){return t=t||{},t.raw=!0,Lh(e,t)}function K5(e,t){return t=t||{},t.gzip=!0,Lh(e,t)}qo.Deflate=na;qo.deflate=Lh;qo.deflateRaw=Z5;qo.gzip=K5});var py=I((kU,hy)=>{\"use strict\";g();var Wc=30,J5=12;hy.exports=function(t,r){var n,i,a,s,o,c,l,u,f,d,h,p,m,v,y,b,x,E,_,k,w,A,S,T,P;n=t.state,i=t.next_in,T=t.input,a=i+(t.avail_in-5),s=t.next_out,P=t.output,o=s-(r-t.avail_out),c=s+(t.avail_out-257),l=n.dmax,u=n.wsize,f=n.whave,d=n.wnext,h=n.window,p=n.hold,m=n.bits,v=n.lencode,y=n.distcode,b=(1<<n.lenbits)-1,x=(1<<n.distbits)-1;e:do{m<15&&(p+=T[i++]<<m,m+=8,p+=T[i++]<<m,m+=8),E=v[p&b];t:for(;;){if(_=E>>>24,p>>>=_,m-=_,_=E>>>16&255,_===0)P[s++]=E&65535;else if(_&16){k=E&65535,_&=15,_&&(m<_&&(p+=T[i++]<<m,m+=8),k+=p&(1<<_)-1,p>>>=_,m-=_),m<15&&(p+=T[i++]<<m,m+=8,p+=T[i++]<<m,m+=8),E=y[p&x];r:for(;;){if(_=E>>>24,p>>>=_,m-=_,_=E>>>16&255,_&16){if(w=E&65535,_&=15,m<_&&(p+=T[i++]<<m,m+=8,m<_&&(p+=T[i++]<<m,m+=8)),w+=p&(1<<_)-1,w>l){t.msg=\"invalid distance too far back\",n.mode=Wc;break e}if(p>>>=_,m-=_,_=s-o,w>_){if(_=w-_,_>f&&n.sane){t.msg=\"invalid distance too far back\",n.mode=Wc;break e}if(A=0,S=h,d===0){if(A+=u-_,_<k){k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}}else if(d<_){if(A+=u+d-_,_-=d,_<k){k-=_;do P[s++]=h[A++];while(--_);if(A=0,d<k){_=d,k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}}}else if(A+=d-_,_<k){k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}for(;k>2;)P[s++]=S[A++],P[s++]=S[A++],P[s++]=S[A++],k-=3;k&&(P[s++]=S[A++],k>1&&(P[s++]=S[A++]))}else{A=s-w;do P[s++]=P[A++],P[s++]=P[A++],P[s++]=P[A++],k-=3;while(k>2);k&&(P[s++]=P[A++],k>1&&(P[s++]=P[A++]))}}else if(_&64){t.msg=\"invalid distance code\",n.mode=Wc;break e}else{E=y[(E&65535)+(p&(1<<_)-1)];continue r}break}}else if(_&64)if(_&32){n.mode=J5;break e}else{t.msg=\"invalid literal/length code\",n.mode=Wc;break e}else{E=v[(E&65535)+(p&(1<<_)-1)];continue t}break}}while(i<a&&s<c);k=m>>3,i-=k,m-=k<<3,p&=(1<<m)-1,t.next_in=i,t.next_out=s,t.avail_in=i<a?5+(a-i):5-(i-a),t.avail_out=s<c?257+(c-s):257-(s-c),n.hold=p,n.bits=m}});var _y=I((CU,by)=>{\"use strict\";g();var my=Dn(),as=15,gy=852,vy=592,yy=0,Dh=1,wy=2,Q5=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],e6=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],t6=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],r6=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];by.exports=function(t,r,n,i,a,s,o,c){var l=c.bits,u=0,f=0,d=0,h=0,p=0,m=0,v=0,y=0,b=0,x=0,E,_,k,w,A,S=null,T=0,P,O=new my.Buf16(as+1),j=new my.Buf16(as+1),D=null,Q=0,de,ee,J;for(u=0;u<=as;u++)O[u]=0;for(f=0;f<i;f++)O[r[n+f]]++;for(p=l,h=as;h>=1&&O[h]===0;h--);if(p>h&&(p=h),h===0)return a[s++]=1<<24|64<<16|0,a[s++]=1<<24|64<<16|0,c.bits=1,0;for(d=1;d<h&&O[d]===0;d++);for(p<d&&(p=d),y=1,u=1;u<=as;u++)if(y<<=1,y-=O[u],y<0)return-1;if(y>0&&(t===yy||h!==1))return-1;for(j[1]=0,u=1;u<as;u++)j[u+1]=j[u]+O[u];for(f=0;f<i;f++)r[n+f]!==0&&(o[j[r[n+f]]++]=f);if(t===yy?(S=D=o,P=19):t===Dh?(S=Q5,T-=257,D=e6,Q-=257,P=256):(S=t6,D=r6,P=-1),x=0,f=0,u=d,A=s,m=p,v=0,k=-1,b=1<<p,w=b-1,t===Dh&&b>gy||t===wy&&b>vy)return 1;for(;;){de=u-v,o[f]<P?(ee=0,J=o[f]):o[f]>P?(ee=D[Q+o[f]],J=S[T+o[f]]):(ee=96,J=0),E=1<<u-v,_=1<<m,d=_;do _-=E,a[A+(x>>v)+_]=de<<24|ee<<16|J|0;while(_!==0);for(E=1<<u-1;x&E;)E>>=1;if(E!==0?(x&=E-1,x+=E):x=0,f++,--O[u]===0){if(u===h)break;u=r[n+o[f]]}if(u>p&&(x&w)!==k){for(v===0&&(v=p),A+=d,m=u-v,y=1<<m;m+v<h&&(y-=O[m+v],!(y<=0));)m++,y<<=1;if(b+=1<<m,t===Dh&&b>gy||t===wy&&b>vy)return 1;k=x&w,a[k]=p<<24|m<<16|A-s|0}}return x!==0&&(a[A+x]=u-v<<24|64<<16|0),c.bits=p,0}});var rw=I(Kr=>{\"use strict\";g();var hr=Dn(),Gh=Ah(),wn=kh(),n6=py(),Yo=_y(),i6=0,qy=1,Yy=2,xy=4,a6=5,qc=6,ia=0,s6=1,o6=2,Or=-2,Xy=-3,zh=-4,l6=-5,Sy=8,Zy=1,Ey=2,Ay=3,ky=4,Ty=5,Cy=6,Py=7,Ry=8,My=9,Oy=10,Zc=11,Bn=12,Nh=13,Iy=14,jh=15,Fy=16,$y=17,Ly=18,Dy=19,Yc=20,Xc=21,Ny=22,jy=23,By=24,Hy=25,Uy=26,Bh=27,Gy=28,zy=29,je=30,Vh=31,c6=32,u6=852,f6=592,d6=15,h6=d6;function Vy(e){return(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24)}function p6(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new hr.Buf16(320),this.work=new hr.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Ky(e){var t;return!e||!e.state?Or:(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=t.wrap&1),t.mode=Zy,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new hr.Buf32(u6),t.distcode=t.distdyn=new hr.Buf32(f6),t.sane=1,t.back=-1,ia)}function Jy(e){var t;return!e||!e.state?Or:(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,Ky(e))}function Qy(e,t){var r,n;return!e||!e.state||(n=e.state,t<0?(r=0,t=-t):(r=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15))?Or:(n.window!==null&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,Jy(e))}function ew(e,t){var r,n;return e?(n=new p6,e.state=n,n.window=null,r=Qy(e,t),r!==ia&&(e.state=null),r):Or}function m6(e){return ew(e,h6)}var Wy=!0,Hh,Uh;function g6(e){if(Wy){var t;for(Hh=new hr.Buf32(512),Uh=new hr.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Yo(qy,e.lens,0,288,Hh,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Yo(Yy,e.lens,0,32,Uh,0,e.work,{bits:5}),Wy=!1}e.lencode=Hh,e.lenbits=9,e.distcode=Uh,e.distbits=5}function tw(e,t,r,n){var i,a=e.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new hr.Buf8(a.wsize)),n>=a.wsize?(hr.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>n&&(i=n),hr.arraySet(a.window,t,r-n,i,a.wnext),n-=i,n?(hr.arraySet(a.window,t,r-n,n,0),a.wnext=n,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0}function v6(e,t){var r,n,i,a,s,o,c,l,u,f,d,h,p,m,v=0,y,b,x,E,_,k,w,A,S=new hr.Buf8(4),T,P,O=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&e.avail_in!==0)return Or;r=e.state,r.mode===Bn&&(r.mode=Nh),s=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,n=e.input,o=e.avail_in,l=r.hold,u=r.bits,f=o,d=c,A=ia;e:for(;;)switch(r.mode){case Zy:if(r.wrap===0){r.mode=Nh;break}for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.wrap&2&&l===35615){r.check=0,S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0),l=0,u=0,r.mode=Ey;break}if(r.flags=0,r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg=\"incorrect header check\",r.mode=je;break}if((l&15)!==Sy){e.msg=\"unknown compression method\",r.mode=je;break}if(l>>>=4,u-=4,w=(l&15)+8,r.wbits===0)r.wbits=w;else if(w>r.wbits){e.msg=\"invalid window size\",r.mode=je;break}r.dmax=1<<w,e.adler=r.check=1,r.mode=l&512?Oy:Bn,l=0,u=0;break;case Ey:for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.flags=l,(r.flags&255)!==Sy){e.msg=\"unknown compression method\",r.mode=je;break}if(r.flags&57344){e.msg=\"unknown header flags set\",r.mode=je;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0,r.mode=Ay;case Ay:for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.head&&(r.head.time=l),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,S[2]=l>>>16&255,S[3]=l>>>24&255,r.check=wn(r.check,S,4,0)),l=0,u=0,r.mode=ky;case ky:for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0,r.mode=Ty;case Ty:if(r.flags&1024){for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0}else r.head&&(r.head.extra=null);r.mode=Cy;case Cy:if(r.flags&1024&&(h=r.length,h>o&&(h=o),h&&(r.head&&(w=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),hr.arraySet(r.head.extra,n,a,h,w)),r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,r.length-=h),r.length))break e;r.length=0,r.mode=Py;case Py:if(r.flags&2048){if(o===0)break e;h=0;do w=n[a+h++],r.head&&w&&r.length<65536&&(r.head.name+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,w)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=Ry;case Ry:if(r.flags&4096){if(o===0)break e;h=0;do w=n[a+h++],r.head&&w&&r.length<65536&&(r.head.comment+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,w)break e}else r.head&&(r.head.comment=null);r.mode=My;case My:if(r.flags&512){for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l!==(r.check&65535)){e.msg=\"header crc mismatch\",r.mode=je;break}l=0,u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Bn;break;case Oy:for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}e.adler=r.check=Vy(l),l=0,u=0,r.mode=Zc;case Zc:if(r.havedict===0)return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,o6;e.adler=r.check=1,r.mode=Bn;case Bn:if(t===a6||t===qc)break e;case Nh:if(r.last){l>>>=u&7,u-=u&7,r.mode=Bh;break}for(;u<3;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}switch(r.last=l&1,l>>>=1,u-=1,l&3){case 0:r.mode=Iy;break;case 1:if(g6(r),r.mode=Yc,t===qc){l>>>=2,u-=2;break e}break;case 2:r.mode=$y;break;case 3:e.msg=\"invalid block type\",r.mode=je}l>>>=2,u-=2;break;case Iy:for(l>>>=u&7,u-=u&7;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if((l&65535)!==(l>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=je;break}if(r.length=l&65535,l=0,u=0,r.mode=jh,t===qc)break e;case jh:r.mode=Fy;case Fy:if(h=r.length,h){if(h>o&&(h=o),h>c&&(h=c),h===0)break e;hr.arraySet(i,n,a,h,s),o-=h,a+=h,c-=h,s+=h,r.length-=h;break}r.mode=Bn;break;case $y:for(;u<14;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.nlen=(l&31)+257,l>>>=5,u-=5,r.ndist=(l&31)+1,l>>>=5,u-=5,r.ncode=(l&15)+4,l>>>=4,u-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=je;break}r.have=0,r.mode=Ly;case Ly:for(;r.have<r.ncode;){for(;u<3;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.lens[O[r.have++]]=l&7,l>>>=3,u-=3}for(;r.have<19;)r.lens[O[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,T={bits:r.lenbits},A=Yo(i6,r.lens,0,19,r.lencode,0,r.work,T),r.lenbits=T.bits,A){e.msg=\"invalid code lengths set\",r.mode=je;break}r.have=0,r.mode=Dy;case Dy:for(;r.have<r.nlen+r.ndist;){for(;v=r.lencode[l&(1<<r.lenbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(x<16)l>>>=y,u-=y,r.lens[r.have++]=x;else{if(x===16){for(P=y+2;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l>>>=y,u-=y,r.have===0){e.msg=\"invalid bit length repeat\",r.mode=je;break}w=r.lens[r.have-1],h=3+(l&3),l>>>=2,u-=2}else if(x===17){for(P=y+3;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=y,u-=y,w=0,h=3+(l&7),l>>>=3,u-=3}else{for(P=y+7;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=y,u-=y,w=0,h=11+(l&127),l>>>=7,u-=7}if(r.have+h>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=je;break}for(;h--;)r.lens[r.have++]=w}}if(r.mode===je)break;if(r.lens[256]===0){e.msg=\"invalid code -- missing end-of-block\",r.mode=je;break}if(r.lenbits=9,T={bits:r.lenbits},A=Yo(qy,r.lens,0,r.nlen,r.lencode,0,r.work,T),r.lenbits=T.bits,A){e.msg=\"invalid literal/lengths set\",r.mode=je;break}if(r.distbits=6,r.distcode=r.distdyn,T={bits:r.distbits},A=Yo(Yy,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,T),r.distbits=T.bits,A){e.msg=\"invalid distances set\",r.mode=je;break}if(r.mode=Yc,t===qc)break e;case Yc:r.mode=Xc;case Xc:if(o>=6&&c>=258){e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,n6(e,d),s=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,n=e.input,o=e.avail_in,l=r.hold,u=r.bits,r.mode===Bn&&(r.back=-1);break}for(r.back=0;v=r.lencode[l&(1<<r.lenbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(b&&!(b&240)){for(E=y,_=b,k=x;v=r.lencode[k+((l&(1<<E+_)-1)>>E)],y=v>>>24,b=v>>>16&255,x=v&65535,!(E+y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=E,u-=E,r.back+=E}if(l>>>=y,u-=y,r.back+=y,r.length=x,b===0){r.mode=Uy;break}if(b&32){r.back=-1,r.mode=Bn;break}if(b&64){e.msg=\"invalid literal/length code\",r.mode=je;break}r.extra=b&15,r.mode=Ny;case Ny:if(r.extra){for(P=r.extra;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=jy;case jy:for(;v=r.distcode[l&(1<<r.distbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(!(b&240)){for(E=y,_=b,k=x;v=r.distcode[k+((l&(1<<E+_)-1)>>E)],y=v>>>24,b=v>>>16&255,x=v&65535,!(E+y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=E,u-=E,r.back+=E}if(l>>>=y,u-=y,r.back+=y,b&64){e.msg=\"invalid distance code\",r.mode=je;break}r.offset=x,r.extra=b&15,r.mode=By;case By:if(r.extra){for(P=r.extra;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=je;break}r.mode=Hy;case Hy:if(c===0)break e;if(h=d-c,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=je;break}h>r.wnext?(h-=r.wnext,p=r.wsize-h):p=r.wnext-h,h>r.length&&(h=r.length),m=r.window}else m=i,p=s-r.offset,h=r.length;h>c&&(h=c),c-=h,r.length-=h;do i[s++]=m[p++];while(--h);r.length===0&&(r.mode=Xc);break;case Uy:if(c===0)break e;i[s++]=r.length,c--,r.mode=Xc;break;case Bh:if(r.wrap){for(;u<32;){if(o===0)break e;o--,l|=n[a++]<<u,u+=8}if(d-=c,e.total_out+=d,r.total+=d,d&&(e.adler=r.check=r.flags?wn(r.check,i,d,s-d):Gh(r.check,i,d,s-d)),d=c,(r.flags?l:Vy(l))!==r.check){e.msg=\"incorrect data check\",r.mode=je;break}l=0,u=0}r.mode=Gy;case Gy:if(r.wrap&&r.flags){for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l!==(r.total&4294967295)){e.msg=\"incorrect length check\",r.mode=je;break}l=0,u=0}r.mode=zy;case zy:A=s6;break e;case je:A=Xy;break e;case Vh:return zh;case c6:default:return Or}return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,(r.wsize||d!==e.avail_out&&r.mode<je&&(r.mode<Bh||t!==xy))&&tw(e,e.output,e.next_out,d-e.avail_out)?(r.mode=Vh,zh):(f-=e.avail_in,d-=e.avail_out,e.total_in+=f,e.total_out+=d,r.total+=d,r.wrap&&d&&(e.adler=r.check=r.flags?wn(r.check,i,d,e.next_out-d):Gh(r.check,i,d,e.next_out-d)),e.data_type=r.bits+(r.last?64:0)+(r.mode===Bn?128:0)+(r.mode===Yc||r.mode===jh?256:0),(f===0&&d===0||t===xy)&&A===ia&&(A=l6),A)}function y6(e){if(!e||!e.state)return Or;var t=e.state;return t.window&&(t.window=null),e.state=null,ia}function w6(e,t){var r;return!e||!e.state||(r=e.state,!(r.wrap&2))?Or:(r.head=t,t.done=!1,ia)}function b6(e,t){var r=t.length,n,i,a;return!e||!e.state||(n=e.state,n.wrap!==0&&n.mode!==Zc)?Or:n.mode===Zc&&(i=1,i=Gh(i,t,r,0),i!==n.check)?Xy:(a=tw(e,t,r,r),a?(n.mode=Vh,zh):(n.havedict=1,ia))}Kr.inflateReset=Jy;Kr.inflateReset2=Qy;Kr.inflateResetKeep=Ky;Kr.inflateInit=m6;Kr.inflateInit2=ew;Kr.inflate=v6;Kr.inflateEnd=y6;Kr.inflateGetHeader=w6;Kr.inflateSetDictionary=b6;Kr.inflateInfo=\"pako inflate (from Nodeca project)\"});var Wh=I((OU,nw)=>{\"use strict\";g();nw.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}});var aw=I((FU,iw)=>{\"use strict\";g();function _6(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}iw.exports=_6});var ow=I(Zo=>{\"use strict\";g();var ss=rw(),Xo=Dn(),Kc=Mh(),et=Wh(),qh=Nc(),x6=Oh(),S6=aw(),sw=Object.prototype.toString;function aa(e){if(!(this instanceof aa))return new aa(e);this.options=Xo.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15||(t.windowBits|=15)),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new x6,this.strm.avail_out=0;var r=ss.inflateInit2(this.strm,t.windowBits);if(r!==et.Z_OK)throw new Error(qh[r]);if(this.header=new S6,ss.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary==\"string\"?t.dictionary=Kc.string2buf(t.dictionary):sw.call(t.dictionary)===\"[object ArrayBuffer]\"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=ss.inflateSetDictionary(this.strm,t.dictionary),r!==et.Z_OK)))throw new Error(qh[r])}aa.prototype.push=function(e,t){var r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,a,s,o,c,l,u=!1;if(this.ended)return!1;s=t===~~t?t:t===!0?et.Z_FINISH:et.Z_NO_FLUSH,typeof e==\"string\"?r.input=Kc.binstring2buf(e):sw.call(e)===\"[object ArrayBuffer]\"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(r.avail_out===0&&(r.output=new Xo.Buf8(n),r.next_out=0,r.avail_out=n),a=ss.inflate(r,et.Z_NO_FLUSH),a===et.Z_NEED_DICT&&i&&(a=ss.inflateSetDictionary(this.strm,i)),a===et.Z_BUF_ERROR&&u===!0&&(a=et.Z_OK,u=!1),a!==et.Z_STREAM_END&&a!==et.Z_OK)return this.onEnd(a),this.ended=!0,!1;r.next_out&&(r.avail_out===0||a===et.Z_STREAM_END||r.avail_in===0&&(s===et.Z_FINISH||s===et.Z_SYNC_FLUSH))&&(this.options.to===\"string\"?(o=Kc.utf8border(r.output,r.next_out),c=r.next_out-o,l=Kc.buf2string(r.output,o),r.next_out=c,r.avail_out=n-c,c&&Xo.arraySet(r.output,r.output,o,c,0),this.onData(l)):this.onData(Xo.shrinkBuf(r.output,r.next_out))),r.avail_in===0&&r.avail_out===0&&(u=!0)}while((r.avail_in>0||r.avail_out===0)&&a!==et.Z_STREAM_END);return a===et.Z_STREAM_END&&(s=et.Z_FINISH),s===et.Z_FINISH?(a=ss.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===et.Z_OK):(s===et.Z_SYNC_FLUSH&&(this.onEnd(et.Z_OK),r.avail_out=0),!0)};aa.prototype.onData=function(e){this.chunks.push(e)};aa.prototype.onEnd=function(e){e===et.Z_OK&&(this.options.to===\"string\"?this.result=this.chunks.join(\"\"):this.result=Xo.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Yh(e,t){var r=new aa(t);if(r.push(e,!0),r.err)throw r.msg||qh[r.err];return r.result}function E6(e,t){return t=t||{},t.raw=!0,Yh(e,t)}Zo.Inflate=aa;Zo.inflate=Yh;Zo.inflateRaw=E6;Zo.ungzip=Yh});var uw=I((NU,cw)=>{\"use strict\";g();var A6=Dn().assign,k6=dy(),T6=ow(),C6=Wh(),lw={};A6(lw,k6,T6,C6);cw.exports=lw});var hw=I((BU,dw)=>{\"use strict\";g();var fw=(e,t)=>function(...r){let n=t.promiseModule;return new n((i,a)=>{t.multiArgs?r.push((...s)=>{t.errorFirst?s[0]?a(s):(s.shift(),i(s)):i(s)}):t.errorFirst?r.push((s,o)=>{s?a(s):i(o)}):r.push(i),e.apply(this,r)})};dw.exports=(e,t)=>{t=Object.assign({exclude:[/.+(Sync|Stream)$/],errorFirst:!0,promiseModule:Promise},t);let r=typeof e;if(!(e!==null&&(r===\"object\"||r===\"function\")))throw new TypeError(`Expected \\`input\\` to be a \\`Function\\` or \\`Object\\`, got \\`${e===null?\"null\":r}\\``);let n=a=>{let s=o=>typeof o==\"string\"?a===o:o.test(a);return t.include?t.include.some(s):!t.exclude.some(s)},i;r===\"function\"?i=function(...a){return t.excludeMain?e(...a):fw(e,t).apply(this,a)}:i=Object.create(Object.getPrototypeOf(e));for(let a in e){let s=e[a];i[a]=typeof s==\"function\"&&n(a)?fw(s,t):s}return i}});var xw=I((UU,_w)=>{g();function pw(e){return Array.isArray(e)?e:[e]}var Kh=\"\",mw=\" \",Xh=\"\\\\\",P6=/^\\s+$/,R6=/(?:[^\\\\]|^)\\\\$/,M6=/^\\\\!/,O6=/^\\\\#/,I6=/\\r?\\n/g,F6=/^\\.*\\/|^\\.+$/,Zh=\"/\",yw=\"node-ignore\";typeof Symbol!=\"undefined\"&&(yw=Symbol.for(\"node-ignore\"));var gw=yw,$6=(e,t,r)=>Object.defineProperty(e,t,{value:r}),L6=/([0-z])-([0-z])/g,ww=()=>!1,D6=e=>e.replace(L6,(t,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?t:Kh),N6=e=>{let{length:t}=e;return e.slice(0,t-t%2)},j6=[[/^\\uFEFF/,()=>Kh],[/((?:\\\\\\\\)*?)(\\\\?\\s+)$/,(e,t,r)=>t+(r.indexOf(\"\\\\\")===0?mw:Kh)],[/(\\\\+?)\\s/g,(e,t)=>{let{length:r}=t;return t.slice(0,r-r%2)+mw}],[/[\\\\$.|*+(){^]/g,e=>`\\\\${e}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(e,t,r)=>t+6<r.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,(e,t,r)=>{let n=r.replace(/\\\\\\*/g,\"[^\\\\/]*\");return t+n}],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>Xh],[/\\\\\\\\/g,()=>Xh],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(e,t,r,n,i)=>t===Xh?`\\\\[${r}${N6(n)}${i}`:i===\"]\"&&n.length%2===0?`[${D6(r)}${n}]`:\"[]\"],[/(?:[^*])$/,e=>/\\/$/.test(e)?`${e}$`:`${e}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(e,t)=>`${t?`${t}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],vw=Object.create(null),B6=(e,t)=>{let r=vw[e];return r||(r=j6.reduce((n,[i,a])=>n.replace(i,a.bind(e)),e),vw[e]=r),t?new RegExp(r,\"i\"):new RegExp(r)},ep=e=>typeof e==\"string\",H6=e=>e&&ep(e)&&!P6.test(e)&&!R6.test(e)&&e.indexOf(\"#\")!==0,U6=e=>e.split(I6),Jh=class{constructor(t,r,n,i){this.origin=t,this.pattern=r,this.negative=n,this.regex=i}},G6=(e,t)=>{let r=e,n=!1;e.indexOf(\"!\")===0&&(n=!0,e=e.substr(1)),e=e.replace(M6,\"!\").replace(O6,\"#\");let i=B6(e,t);return new Jh(r,e,n,i)},z6=(e,t)=>{throw new t(e)},Hn=(e,t,r)=>ep(e)?e?Hn.isNotRelative(e)?r(`path should be a \\`path.relative()\\`d string, but got \"${t}\"`,RangeError):!0:r(\"path must not be empty\",TypeError):r(`path must be a string, but got \\`${t}\\``,TypeError),bw=e=>F6.test(e);Hn.isNotRelative=bw;Hn.convert=e=>e;var Qh=class{constructor({ignorecase:t=!0,ignoreCase:r=t,allowRelativePaths:n=!1}={}){$6(this,gw,!0),this._rules=[],this._ignoreCase=r,this._allowRelativePaths=n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(t){if(t&&t[gw]){this._rules=this._rules.concat(t._rules),this._added=!0;return}if(H6(t)){let r=G6(t,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(t){return this._added=!1,pw(ep(t)?U6(t):t).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(t){return this.add(t)}_testOne(t,r){let n=!1,i=!1;return this._rules.forEach(a=>{let{negative:s}=a;if(i===s&&n!==i||s&&!n&&!i&&!r)return;a.regex.test(t)&&(n=!s,i=s)}),{ignored:n,unignored:i}}_test(t,r,n,i){let a=t&&Hn.convert(t);return Hn(a,t,this._allowRelativePaths?ww:z6),this._t(a,r,n,i)}_t(t,r,n,i){if(t in r)return r[t];if(i||(i=t.split(Zh)),i.pop(),!i.length)return r[t]=this._testOne(t,n);let a=this._t(i.join(Zh)+Zh,r,n,i);return r[t]=a.ignored?a:this._testOne(t,n)}ignores(t){return this._test(t,this._ignoreCache,!1).ignored}createFilter(){return t=>!this.ignores(t)}filter(t){return pw(t).filter(this.createFilter())}test(t){return this._test(t,this._testCache,!0)}},Jc=e=>new Qh(e),V6=e=>Hn(e&&Hn.convert(e),e,ww);Jc.isPathValid=V6;Jc.default=Jc;_w.exports=Jc;if(typeof process!=\"undefined\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let e=r=>/^\\\\\\\\\\?\\\\/.test(r)||/[\"<>|\\u0000-\\u001F]+/u.test(r)?r:r.replace(/\\\\/g,\"/\");Hn.convert=e;let t=/^[a-z]:\\//i;Hn.isNotRelative=r=>t.test(r)||bw(r)}});var Ew=I((zU,Sw)=>{\"use strict\";g();function W6(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function bn(e,t,r){return t=t instanceof RegExp?t:new RegExp(W6(t),\"g\"),e.replace(t,r)}var q6={clean:function(t){if(typeof t!=\"string\")throw new Error(\"Expected a string, received: \"+t);return t=bn(t,\"./\",\"/\"),t=bn(t,\"..\",\".\"),t=bn(t,\" \",\"-\"),t=bn(t,/^[~^:?*\\\\\\-]/g,\"\"),t=bn(t,/[~^:?*\\\\]/g,\"-\"),t=bn(t,/[~^:?*\\\\\\-]$/g,\"\"),t=bn(t,\"@{\",\"-\"),t=bn(t,/\\.$/g,\"\"),t=bn(t,/\\/$/g,\"\"),t=bn(t,/\\.lock$/g,\"\"),t}};Sw.exports=q6});var kw=I((WU,Aw)=>{g();Aw.exports=function(e,t){var r=e,n=t,i=r.length,a=n.length,s=!1,o=null,c=i+1,l=[],u=[],f=[],d=\"\",h=-1,p=0,m=1,v,y,b=function(){i>=a&&(v=r,y=i,r=n,n=v,i=a,a=y,s=!0,c=i+1)},x=function(w,A,S){return{x:w,y:A,k:S}},E=function(w,A){return{elem:w,t:A}},_=function(w,A,S){var T,P,O;for(A>S?T=l[w-1+c]:T=l[w+1+c],O=Math.max(A,S),P=O-w;P<i&&O<a&&r[P]===n[O];)++P,++O;return l[w+c]=u.length,u[u.length]=new x(P,O,T),O},k=function(w){var A,S,T,P,O;for(A=S=1,T=P=0,O=w.length-1;O>=0;--O)for(;T<w[O].x||P<w[O].y;)w[O].y-w[O].x>P-T?(s?f[f.length]=new E(n[P],h):f[f.length]=new E(n[P],m),++S,++P):w[O].y-w[O].x<P-T?(s?f[f.length]=new E(r[T],m):f[f.length]=new E(r[T],h),++A,++T):(f[f.length]=new E(r[T],p),d+=r[T],++A,++S,++T,++P)};return b(),{SES_DELETE:-1,SES_COMMON:0,SES_ADD:1,editdistance:function(){return o},getlcs:function(){return d},getses:function(){return f},compose:function(){var w,A,S,T,P,O,j,D;for(w=a-i,A=i+a+3,S={},j=0;j<A;++j)S[j]=-1,l[j]=-1;T=-1;do{for(++T,D=-T;D<=w-1;++D)S[D+c]=_(D,S[D-1+c]+1,S[D+1+c]);for(D=w+T;D>=w+1;--D)S[D+c]=_(D,S[D-1+c]+1,S[D+1+c]);S[w+c]=_(w,S[w-1+c]+1,S[w+1+c])}while(S[w+c]!==a);for(o=w+2*T,P=l[w+c],O=[];P!==-1;)O[O.length]=new x(u[P].x,u[P].y,null),P=u[P].k;k(O)}}}});var Pw=I((YU,Cw)=>{g();var Y6=kw();function X6(e,t){var r=new Y6(e,t);r.compose();for(var n=r.getses(),i,a,s=e.length-1,o=t.length-1,c=n.length-1;c>=0;--c)n[c].t===r.SES_COMMON?(a?(a.chain={file1index:s,file2index:o,chain:null},a=a.chain):(i={file1index:s,file2index:o,chain:null},a=i),s--,o--):n[c].t===r.SES_DELETE?s--:n[c].t===r.SES_ADD&&o--;var l={file1index:-1,file2index:-1,chain:null};return a?(a.chain=l,i):l}function Tw(e,t){for(var r=[],n=e.length,i=t.length,a=X6(e,t);a!==null;a=a.chain){var s=n-a.file1index-1,o=i-a.file2index-1;n=a.file1index,i=a.file2index,(s||o)&&r.push({file1:[n+1,s],file2:[i+1,o]})}return r.reverse(),r}function Z6(e,t,r){var n,i=Tw(t,e),a=Tw(t,r),s=[];function o(j,D){s.push([j.file1[0],D,j.file1[1],j.file2[0],j.file2[1]])}for(n=0;n<i.length;n++)o(i[n],0);for(n=0;n<a.length;n++)o(a[n],2);s.sort(function(j,D){return j[0]-D[0]});var c=[],l=0;function u(j){j>l&&(c.push([1,l,j-l]),l=j)}for(var f=0;f<s.length;f++){for(var d=f,h=s[f],p=h[0],m=p+h[2];f<s.length-1;){var v=s[f+1],y=v[0];if(y>m)break;m=Math.max(m,y+v[2]),f++}if(u(p),d==f)h[4]>0&&c.push([h[1],h[3],h[4]]);else{var b={0:[e.length,-1,t.length,-1],2:[r.length,-1,t.length,-1]};for(n=d;n<=f;n++){h=s[n];var x=h[1],E=b[x],_=h[0],k=_+h[2],w=h[3],A=w+h[4];E[0]=Math.min(w,E[0]),E[1]=Math.max(A,E[1]),E[2]=Math.min(_,E[2]),E[3]=Math.max(k,E[3])}var S=b[0][0]+(p-b[0][2]),T=b[0][1]+(m-b[0][3]),P=b[2][0]+(p-b[2][2]),O=b[2][1]+(m-b[2][3]);c.push([-1,S,T-S,p,m-p,P,O-P])}l=m}return u(t.length),c}function K6(e,t,r){var n=[],i=[e,t,r],a=Z6(e,t,r),s=[];function o(){s.length&&n.push({ok:s}),s=[]}function c(h){for(var p=0;p<h.length;p++)s.push(h[p])}function l(h){if(h[2]!=h[6])return!0;for(var p=h[1],m=h[5],v=0;v<h[2];v++)if(e[v+p]!=r[v+m])return!0;return!1}for(var u=0;u<a.length;u++){var f=a[u],d=f[0];d==-1?l(f)?(o(),n.push({conflict:{a:e.slice(f[1],f[1]+f[2]),aIndex:f[1],o:t.slice(f[3],f[3]+f[4]),oIndex:f[3],b:r.slice(f[5],f[5]+f[6]),bIndex:f[5]}})):c(i[0].slice(f[1],f[1]+f[2])):c(i[d].slice(f[1],f[1]+f[2]))}return o(),n}Cw.exports=K6});var I2=I((tG,O2)=>{g();var Es=1e3,As=Es*60,ks=As*60,da=ks*24,eI=da*7,tI=da*365.25;O2.exports=function(e,t){t=t||{};var r=typeof e;if(r===\"string\"&&e.length>0)return rI(e);if(r===\"number\"&&isFinite(e))return t.long?iI(e):nI(e);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(e))};function rI(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]),n=(t[2]||\"ms\").toLowerCase();switch(n){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return r*tI;case\"weeks\":case\"week\":case\"w\":return r*eI;case\"days\":case\"day\":case\"d\":return r*da;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return r*ks;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return r*As;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return r*Es;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return r;default:return}}}}function nI(e){var t=Math.abs(e);return t>=da?Math.round(e/da)+\"d\":t>=ks?Math.round(e/ks)+\"h\":t>=As?Math.round(e/As)+\"m\":t>=Es?Math.round(e/Es)+\"s\":e+\"ms\"}function iI(e){var t=Math.abs(e);return t>=da?wu(e,t,da,\"day\"):t>=ks?wu(e,t,ks,\"hour\"):t>=As?wu(e,t,As,\"minute\"):t>=Es?wu(e,t,Es,\"second\"):e+\" ms\"}function wu(e,t,r,n){var i=t>=r*1.5;return Math.round(e/r)+\" \"+n+(i?\"s\":\"\")}});var $2=I((nG,F2)=>{g();function aI(e){r.debug=r,r.default=r,r.coerce=c,r.disable=a,r.enable=i,r.enabled=s,r.humanize=I2(),r.destroy=l,Object.keys(e).forEach(u=>{r[u]=e[u]}),r.names=[],r.skips=[],r.formatters={};function t(u){let f=0;for(let d=0;d<u.length;d++)f=(f<<5)-f+u.charCodeAt(d),f|=0;return r.colors[Math.abs(f)%r.colors.length]}r.selectColor=t;function r(u){let f,d=null,h,p;function m(...v){if(!m.enabled)return;let y=m,b=Number(new Date),x=b-(f||b);y.diff=x,y.prev=f,y.curr=b,f=b,v[0]=r.coerce(v[0]),typeof v[0]!=\"string\"&&v.unshift(\"%O\");let E=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(k,w)=>{if(k===\"%%\")return\"%\";E++;let A=r.formatters[w];if(typeof A==\"function\"){let S=v[E];k=A.call(y,S),v.splice(E,1),E--}return k}),r.formatArgs.call(y,v),(y.log||r.log).apply(y,v)}return m.namespace=u,m.useColors=r.useColors(),m.color=r.selectColor(u),m.extend=n,m.destroy=r.destroy,Object.defineProperty(m,\"enabled\",{enumerable:!0,configurable:!1,get:()=>d!==null?d:(h!==r.namespaces&&(h=r.namespaces,p=r.enabled(u)),p),set:v=>{d=v}}),typeof r.init==\"function\"&&r.init(m),m}function n(u,f){let d=r(this.namespace+(typeof f==\"undefined\"?\":\":f)+u);return d.log=this.log,d}function i(u){r.save(u),r.namespaces=u,r.names=[],r.skips=[];let f,d=(typeof u==\"string\"?u:\"\").split(/[\\s,]+/),h=d.length;for(f=0;f<h;f++)d[f]&&(u=d[f].replace(/\\*/g,\".*?\"),u[0]===\"-\"?r.skips.push(new RegExp(\"^\"+u.slice(1)+\"$\")):r.names.push(new RegExp(\"^\"+u+\"$\")))}function a(){let u=[...r.names.map(o),...r.skips.map(o).map(f=>\"-\"+f)].join(\",\");return r.enable(\"\"),u}function s(u){if(u[u.length-1]===\"*\")return!0;let f,d;for(f=0,d=r.skips.length;f<d;f++)if(r.skips[f].test(u))return!1;for(f=0,d=r.names.length;f<d;f++)if(r.names[f].test(u))return!0;return!1}function o(u){return u.toString().substring(2,u.toString().length-2).replace(/\\.\\*\\?$/,\"*\")}function c(u){return u instanceof Error?u.stack||u.message:u}function l(){console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\")}return r.enable(r.load()),r}F2.exports=aI});var _u=I((gr,bu)=>{g();gr.formatArgs=oI;gr.save=lI;gr.load=cI;gr.useColors=sI;gr.storage=uI();gr.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\"))}})();gr.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"];function sI(){if(typeof window!=\"undefined\"&&window.process&&(window.process.type===\"renderer\"||window.process.__nwjs))return!0;if(typeof navigator!=\"undefined\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/))return!1;let e;return typeof document!=\"undefined\"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=\"undefined\"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=\"undefined\"&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/))&&parseInt(e[1],10)>=31||typeof navigator!=\"undefined\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)}function oI(e){if(e[0]=(this.useColors?\"%c\":\"\")+this.namespace+(this.useColors?\" %c\":\" \")+e[0]+(this.useColors?\"%c \":\" \")+\"+\"+bu.exports.humanize(this.diff),!this.useColors)return;let t=\"color: \"+this.color;e.splice(1,0,t,\"color: inherit\");let r=0,n=0;e[0].replace(/%[a-zA-Z%]/g,i=>{i!==\"%%\"&&(r++,i===\"%c\"&&(n=r))}),e.splice(n,0,t)}gr.log=console.debug||console.log||(()=>{});function lI(e){try{e?gr.storage.setItem(\"debug\",e):gr.storage.removeItem(\"debug\")}catch(t){}}function cI(){let e;try{e=gr.storage.getItem(\"debug\")}catch(t){}return!e&&typeof process!=\"undefined\"&&\"env\"in process&&(e=process.env.DEBUG),e}function uI(){try{return localStorage}catch(e){}}bu.exports=$2()(gr);var{formatters:fI}=bu.exports;fI.j=function(e){try{return JSON.stringify(e)}catch(t){return\"[UnexpectedJSONParseError]: \"+t.message}}});var L2=I(vr=>{\"use strict\";g();var dI=vr&&vr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(vr,\"__esModule\",{value:!0});var hI=require(\"fs\"),pI=dI(_u()),Ts=pI.default(\"@kwsites/file-exists\");function mI(e,t,r){Ts(\"checking %s\",e);try{let n=hI.statSync(e);return n.isFile()&&t?(Ts(\"[OK] path represents a file\"),!0):n.isDirectory()&&r?(Ts(\"[OK] path represents a directory\"),!0):(Ts(\"[FAIL] path represents something other than a file or directory\"),!1)}catch(n){if(n.code===\"ENOENT\")return Ts(\"[FAIL] path is not accessible: %o\",n),!1;throw Ts(\"[FATAL] %o\",n),n}}function gI(e,t=vr.READABLE){return mI(e,(t&vr.FILE)>0,(t&vr.FOLDER)>0)}vr.exists=gI;vr.FILE=1;vr.FOLDER=2;vr.READABLE=vr.FILE+vr.FOLDER});var D2=I(xu=>{\"use strict\";g();function vI(e){for(var t in e)xu.hasOwnProperty(t)||(xu[t]=e[t])}Object.defineProperty(xu,\"__esModule\",{value:!0});vI(L2())});var Rp=I(ha=>{\"use strict\";g();Object.defineProperty(ha,\"__esModule\",{value:!0});ha.createDeferred=ha.deferred=void 0;function Pp(){let e,t,r=\"pending\";return{promise:new Promise((i,a)=>{e=i,t=a}),done(i){r===\"pending\"&&(r=\"resolved\",e(i))},fail(i){r===\"pending\"&&(r=\"rejected\",t(i))},get fulfilled(){return r!==\"pending\"},get status(){return r}}}ha.deferred=Pp;ha.createDeferred=Pp;ha.default=Pp});var kx=I((XG,Ax)=>{\"use strict\";g();Ax.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Cx=I((KG,Tx)=>{g();var xm={px:{px:1,cm:37.79527559055118,mm:3.7795275590551185,in:96,pt:1.3333333333333333,pc:16},cm:{px:.026458333333333334,cm:1,mm:.1,in:2.54,pt:.035277777777777776,pc:.42333333333333334},mm:{px:.26458333333333334,cm:10,mm:1,in:25.4,pt:.35277777777777775,pc:4.233333333333333},in:{px:.010416666666666666,cm:.39370078740157477,mm:.03937007874015748,in:1,pt:.013888888888888888,pc:.16666666666666666},pt:{px:.75,cm:28.346456692913385,mm:2.834645669291339,in:72,pt:1,pc:12},pc:{px:.0625,cm:2.3622047244094486,mm:.2362204724409449,in:6,pt:.08333333333333333,pc:1},deg:{deg:1,grad:.9,rad:180/Math.PI,turn:360},grad:{deg:1.1111111111111112,grad:1,rad:200/Math.PI,turn:400},rad:{deg:Math.PI/180,grad:Math.PI/200,rad:1,turn:Math.PI*2},turn:{deg:.002777777777777778,grad:.0025,rad:.5/Math.PI,turn:1},s:{s:1,ms:.001},ms:{s:1e3,ms:1},Hz:{Hz:1,kHz:1e3},kHz:{Hz:.001,kHz:1},dpi:{dpi:1,dpcm:.39370078740157477,dppx:.010416666666666666},dpcm:{dpi:2.54,dpcm:1,dppx:.026458333333333334},dppx:{dpi:96,dpcm:37.79527559055118,dppx:1}};Tx.exports=function(e,t,r,n){if(!xm.hasOwnProperty(r))throw new Error(\"Cannot convert to \"+r);if(!xm[r].hasOwnProperty(t))throw new Error(\"Cannot convert from \"+t+\" to \"+r);var i=xm[r][t]*e;return n!==!1?(n=Math.pow(10,parseInt(n)||5),Math.round(i*n)/n):i}});var Ux=I(Wn=>{\"use strict\";g();Object.defineProperty(Wn,\"__esModule\",{value:!0});Wn.fromRgba=Fs;Wn.fromRgb=Sm;Wn.fromHsla=qu;Wn.fromHsl=Bx;Wn.fromString=Hx;Wn.default=void 0;var Px=Ox(kx()),P$=Ox(Cx());function Ox(e){return e&&e.__esModule?e:{default:e}}function R$(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function Rx(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function M$(e,t,r){return t&&Rx(e.prototype,t),r&&Rx(e,r),e}function Wt(e,t){return $$(e)||F$(e,t)||I$(e,t)||O$()}function O$(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function I$(e,t){if(e){if(typeof e==\"string\")return Mx(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r===\"Object\"&&e.constructor&&(r=e.constructor.name),r===\"Map\"||r===\"Set\")return Array.from(e);if(r===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Mx(e,t)}}function Mx(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function F$(e,t){if(!(typeof Symbol==\"undefined\"||!(Symbol.iterator in Object(e)))){var r=[],n=!0,i=!1,a=void 0;try{for(var s=e[Symbol.iterator](),o;!(n=(o=s.next()).done)&&(r.push(o.value),!(t&&r.length===t));n=!0);}catch(c){i=!0,a=c}finally{try{!n&&s.return!=null&&s.return()}finally{if(i)throw a}}return r}}function $$(e){if(Array.isArray(e))return e}var Ix=/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?$/,Fx=/^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])?$/,$x=/^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)(?:\\s*,\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/,Lx=/^rgba?\\(\\s*(\\d+)\\s+(\\d+)\\s+(\\d+)(?:\\s*\\/\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/,Dx=/^rgba?\\(\\s*(\\d+%)\\s*,\\s*(\\d+%)\\s*,\\s*(\\d+%)(?:\\s*,\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/,Nx=/^rgba?\\(\\s*(\\d+%)\\s+(\\d+%)\\s+(\\d+%)(?:\\s*\\/\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/,jx=/^hsla?\\(\\s*(\\d+)(deg|rad|grad|turn)?\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%(?:\\s*,\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/;function Ol(e,t){return e.indexOf(t)>-1}function L$(e,t,r){var n=e/255,i=t/255,a=r/255,s=Math.max(n,i,a),o=Math.min(n,i,a),c=s-o,l=(s+o)/2;if(c===0)return[0,0,l*100];var u=c/(1-Math.abs(2*l-1)),f=function(){switch(s){case n:return(i-a)/c%6;case i:return(a-n)/c+2;default:return(n-i)/c+4}}();return[f*60,u*100,l*100]}function D$(e,t,r){var n=e/60,i=t/100,a=r/100,s=(1-Math.abs(2*a-1))*i,o=s*(1-Math.abs(n%2-1)),c=a-s/2,l=function(){return n<1?[s,o,0]:n<2?[o,s,0]:n<3?[0,s,o]:n<4?[0,o,s]:n<5?[o,0,s]:[s,0,o]}(),u=Wt(l,3),f=u[0],d=u[1],h=u[2];return[(f+c)*255,(d+c)*255,(h+c)*255]}var N$=function(){function e(t){var r=Wt(t,4),n=r[0],i=r[1],a=r[2],s=r[3];R$(this,e),this.values=[Math.max(Math.min(parseInt(n,10),255),0),Math.max(Math.min(parseInt(i,10),255),0),Math.max(Math.min(parseInt(a,10),255),0),s==null?1:Math.max(Math.min(parseFloat(s),255),0)]}return M$(e,[{key:\"toRgbString\",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3];return s===1?\"rgb(\".concat(n,\", \").concat(i,\", \").concat(a,\")\"):\"rgba(\".concat(n,\", \").concat(i,\", \").concat(a,\", \").concat(s,\")\")}},{key:\"toHslString\",value:function(){var r=this.toHslaArray(),n=Wt(r,4),i=n[0],a=n[1],s=n[2],o=n[3];return o===1?\"hsl(\".concat(i,\", \").concat(a,\"%, \").concat(s,\"%)\"):\"hsla(\".concat(i,\", \").concat(a,\"%, \").concat(s,\"%, \").concat(o,\")\")}},{key:\"toHexString\",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3];return n=Number(n).toString(16).padStart(2,\"0\"),i=Number(i).toString(16).padStart(2,\"0\"),a=Number(a).toString(16).padStart(2,\"0\"),s=s<1?parseInt(s*255,10).toString(16).padStart(2,\"0\"):\"\",\"#\".concat(n).concat(i).concat(a).concat(s)}},{key:\"toRgbaArray\",value:function(){return this.values}},{key:\"toHslaArray\",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3],o=L$(n,i,a),c=Wt(o,3),l=c[0],u=c[1],f=c[2];return[l,u,f,s]}}]),e}();function Fs(e){var t=Wt(e,4),r=t[0],n=t[1],i=t[2],a=t[3];return new N$([r,n,i,a])}function Sm(e){var t=Wt(e,3),r=t[0],n=t[1],i=t[2];return Fs([r,n,i,1])}function qu(e){var t=Wt(e,4),r=t[0],n=t[1],i=t[2],a=t[3],s=D$(r,n,i),o=Wt(s,3),c=o[0],l=o[1],u=o[2];return Fs([c,l,u,a])}function Bx(e){var t=Wt(e,3),r=t[0],n=t[1],i=t[2];return qu([r,n,i,1])}function j$(e){var t=Ix.exec(e)||Fx.exec(e),r=Wt(t,5),n=r[1],i=r[2],a=r[3],s=r[4];return n=parseInt(n.length<2?n.repeat(2):n,16),i=parseInt(i.length<2?i.repeat(2):i,16),a=parseInt(a.length<2?a.repeat(2):a,16),s=s&&(parseInt(s.length<2?s.repeat(2):s,16)/255).toPrecision(1)||1,Fs([n,i,a,s])}function B$(e){var t=$x.exec(e)||Dx.exec(e)||Lx.exec(e)||Nx.exec(e),r=Wt(t,5),n=r[1],i=r[2],a=r[3],s=r[4];return n=Ol(n,\"%\")?parseInt(n,10)*255/100:parseInt(n,10),i=Ol(i,\"%\")?parseInt(i,10)*255/100:parseInt(i,10),a=Ol(a,\"%\")>0?parseInt(a,10)*255/100:parseInt(a,10),s=s===void 0?1:parseFloat(s)/(Ol(s,\"%\")?100:1),Fs([n,i,a,s])}function H$(e){var t=jx.exec(e),r=Wt(t,6),n=r[1],i=r[2],a=r[3],s=r[4],o=r[5];return i=i||\"deg\",n=(0,P$.default)(parseFloat(n),i,\"deg\"),a=parseFloat(a),s=parseFloat(s),o=o===void 0?1:parseFloat(o)/(Ol(o,\"%\")?100:1),qu([n,a,s,o])}function Hx(e){return Px.default[e]?Sm(Px.default[e]):Ix.test(e)||Fx.test(e)?j$(e):$x.test(e)||Dx.test(e)||Lx.test(e)||Nx.test(e)?B$(e):jx.test(e)?H$(e):null}var U$={fromString:Hx,fromRgb:Sm,fromRgba:Fs,fromHsl:Bx,fromHsla:qu};Wn.default=U$});var Em=I((tz,zx)=>{\"use strict\";g();var Gx=Object.prototype.toString;zx.exports=function(t){var r=Gx.call(t),n=r===\"[object Arguments]\";return n||(n=r!==\"[object Array]\"&&t!==null&&typeof t==\"object\"&&typeof t.length==\"number\"&&t.length>=0&&Gx.call(t.callee)===\"[object Function]\"),n}});var Qx=I((nz,Jx)=>{\"use strict\";g();var Kx;Object.keys||(Il=Object.prototype.hasOwnProperty,Am=Object.prototype.toString,Vx=Em(),km=Object.prototype.propertyIsEnumerable,Wx=!km.call({toString:null},\"toString\"),qx=km.call(function(){},\"prototype\"),Fl=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],Yu=function(e){var t=e.constructor;return t&&t.prototype===e},Yx={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},Xx=function(){if(typeof window==\"undefined\")return!1;for(var e in window)try{if(!Yx[\"$\"+e]&&Il.call(window,e)&&window[e]!==null&&typeof window[e]==\"object\")try{Yu(window[e])}catch(t){return!0}}catch(t){return!0}return!1}(),Zx=function(e){if(typeof window==\"undefined\"||!Xx)return Yu(e);try{return Yu(e)}catch(t){return!1}},Kx=function(t){var r=t!==null&&typeof t==\"object\",n=Am.call(t)===\"[object Function]\",i=Vx(t),a=r&&Am.call(t)===\"[object String]\",s=[];if(!r&&!n&&!i)throw new TypeError(\"Object.keys called on a non-object\");var o=qx&&n;if(a&&t.length>0&&!Il.call(t,0))for(var c=0;c<t.length;++c)s.push(String(c));if(i&&t.length>0)for(var l=0;l<t.length;++l)s.push(String(l));else for(var u in t)!(o&&u===\"prototype\")&&Il.call(t,u)&&s.push(String(u));if(Wx)for(var f=Zx(t),d=0;d<Fl.length;++d)!(f&&Fl[d]===\"constructor\")&&Il.call(t,Fl[d])&&s.push(Fl[d]);return s});var Il,Am,Vx,km,Wx,qx,Fl,Yu,Yx,Xx,Zx;Jx.exports=Kx});var Zu=I((az,rS)=>{\"use strict\";g();var G$=Array.prototype.slice,z$=Em(),eS=Object.keys,Xu=eS?function(t){return eS(t)}:Qx(),tS=Object.keys;Xu.shim=function(){if(Object.keys){var t=function(){var r=Object.keys(arguments);return r&&r.length===arguments.length}(1,2);t||(Object.keys=function(n){return z$(n)?tS(G$.call(n)):tS(n)})}else Object.keys=Xu;return Object.keys||Xu};rS.exports=Xu});var iS=I((oz,nS)=>{\"use strict\";g();nS.exports=Error});var sS=I((cz,aS)=>{\"use strict\";g();aS.exports=EvalError});var lS=I((fz,oS)=>{\"use strict\";g();oS.exports=RangeError});var uS=I((hz,cS)=>{\"use strict\";g();cS.exports=ReferenceError});var Tm=I((mz,fS)=>{\"use strict\";g();fS.exports=SyntaxError});var qn=I((vz,dS)=>{\"use strict\";g();dS.exports=TypeError});var pS=I((wz,hS)=>{\"use strict\";g();hS.exports=URIError});var $l=I((_z,mS)=>{\"use strict\";g();mS.exports=function(){if(typeof Symbol!=\"function\"||typeof Object.getOwnPropertySymbols!=\"function\")return!1;if(typeof Symbol.iterator==\"symbol\")return!0;var t={},r=Symbol(\"test\"),n=Object(r);if(typeof r==\"string\"||Object.prototype.toString.call(r)!==\"[object Symbol]\"||Object.prototype.toString.call(n)!==\"[object Symbol]\")return!1;var i=42;t[r]=i;for(r in t)return!1;if(typeof Object.keys==\"function\"&&Object.keys(t).length!==0||typeof Object.getOwnPropertyNames==\"function\"&&Object.getOwnPropertyNames(t).length!==0)return!1;var a=Object.getOwnPropertySymbols(t);if(a.length!==1||a[0]!==r||!Object.prototype.propertyIsEnumerable.call(t,r))return!1;if(typeof Object.getOwnPropertyDescriptor==\"function\"){var s=Object.getOwnPropertyDescriptor(t,r);if(s.value!==i||s.enumerable!==!0)return!1}return!0}});var Ku=I((Sz,vS)=>{\"use strict\";g();var gS=typeof Symbol!=\"undefined\"&&Symbol,V$=$l();vS.exports=function(){return typeof gS!=\"function\"||typeof Symbol!=\"function\"||typeof gS(\"foo\")!=\"symbol\"||typeof Symbol(\"bar\")!=\"symbol\"?!1:V$()}});var wS=I((Az,yS)=>{\"use strict\";g();var Cm={__proto__:null,foo:{}},W$=Object;yS.exports=function(){return{__proto__:Cm}.foo===Cm.foo&&!(Cm instanceof W$)}});var xS=I((Tz,_S)=>{\"use strict\";g();var q$=\"Function.prototype.bind called on incompatible \",Y$=Object.prototype.toString,X$=Math.max,Z$=\"[object Function]\",bS=function(t,r){for(var n=[],i=0;i<t.length;i+=1)n[i]=t[i];for(var a=0;a<r.length;a+=1)n[a+t.length]=r[a];return n},K$=function(t,r){for(var n=[],i=r||0,a=0;i<t.length;i+=1,a+=1)n[a]=t[i];return n},J$=function(e,t){for(var r=\"\",n=0;n<e.length;n+=1)r+=e[n],n+1<e.length&&(r+=t);return r};_S.exports=function(t){var r=this;if(typeof r!=\"function\"||Y$.apply(r)!==Z$)throw new TypeError(q$+r);for(var n=K$(arguments,1),i,a=function(){if(this instanceof i){var u=r.apply(this,bS(n,arguments));return Object(u)===u?u:this}return r.apply(t,bS(n,arguments))},s=X$(0,r.length-n.length),o=[],c=0;c<s;c++)o[c]=\"$\"+c;if(i=Function(\"binder\",\"return function (\"+J$(o,\",\")+\"){ return binder.apply(this,arguments); }\")(a),r.prototype){var l=function(){};l.prototype=r.prototype,i.prototype=new l,l.prototype=null}return i}});var Ju=I((Pz,SS)=>{\"use strict\";g();var Q$=xS();SS.exports=Function.prototype.bind||Q$});var Pm=I((Mz,ES)=>{\"use strict\";g();var eL=Function.prototype.call,tL=Object.prototype.hasOwnProperty,rL=Ju();ES.exports=rL.call(eL,tL)});var en=I((Iz,PS)=>{\"use strict\";g();var ve,nL=iS(),iL=sS(),aL=lS(),sL=uS(),Ns=Tm(),Ds=qn(),oL=pS(),CS=Function,Rm=function(e){try{return CS('\"use strict\"; return ('+e+\").constructor;\")()}catch(t){}},va=Object.getOwnPropertyDescriptor;if(va)try{va({},\"\")}catch(e){va=null}var Mm=function(){throw new Ds},lL=va?function(){try{return arguments.callee,Mm}catch(e){try{return va(arguments,\"callee\").get}catch(t){return Mm}}}():Mm,$s=Ku()(),cL=wS()(),wt=Object.getPrototypeOf||(cL?function(e){return e.__proto__}:null),Ls={},uL=typeof Uint8Array==\"undefined\"||!wt?ve:wt(Uint8Array),ya={__proto__:null,\"%AggregateError%\":typeof AggregateError==\"undefined\"?ve:AggregateError,\"%Array%\":Array,\"%ArrayBuffer%\":typeof ArrayBuffer==\"undefined\"?ve:ArrayBuffer,\"%ArrayIteratorPrototype%\":$s&&wt?wt([][Symbol.iterator]()):ve,\"%AsyncFromSyncIteratorPrototype%\":ve,\"%AsyncFunction%\":Ls,\"%AsyncGenerator%\":Ls,\"%AsyncGeneratorFunction%\":Ls,\"%AsyncIteratorPrototype%\":Ls,\"%Atomics%\":typeof Atomics==\"undefined\"?ve:Atomics,\"%BigInt%\":typeof BigInt==\"undefined\"?ve:BigInt,\"%BigInt64Array%\":typeof BigInt64Array==\"undefined\"?ve:BigInt64Array,\"%BigUint64Array%\":typeof BigUint64Array==\"undefined\"?ve:BigUint64Array,\"%Boolean%\":Boolean,\"%DataView%\":typeof DataView==\"undefined\"?ve:DataView,\"%Date%\":Date,\"%decodeURI%\":decodeURI,\"%decodeURIComponent%\":decodeURIComponent,\"%encodeURI%\":encodeURI,\"%encodeURIComponent%\":encodeURIComponent,\"%Error%\":nL,\"%eval%\":eval,\"%EvalError%\":iL,\"%Float32Array%\":typeof Float32Array==\"undefined\"?ve:Float32Array,\"%Float64Array%\":typeof Float64Array==\"undefined\"?ve:Float64Array,\"%FinalizationRegistry%\":typeof FinalizationRegistry==\"undefined\"?ve:FinalizationRegistry,\"%Function%\":CS,\"%GeneratorFunction%\":Ls,\"%Int8Array%\":typeof Int8Array==\"undefined\"?ve:Int8Array,\"%Int16Array%\":typeof Int16Array==\"undefined\"?ve:Int16Array,\"%Int32Array%\":typeof Int32Array==\"undefined\"?ve:Int32Array,\"%isFinite%\":isFinite,\"%isNaN%\":isNaN,\"%IteratorPrototype%\":$s&&wt?wt(wt([][Symbol.iterator]())):ve,\"%JSON%\":typeof JSON==\"object\"?JSON:ve,\"%Map%\":typeof Map==\"undefined\"?ve:Map,\"%MapIteratorPrototype%\":typeof Map==\"undefined\"||!$s||!wt?ve:wt(new Map()[Symbol.iterator]()),\"%Math%\":Math,\"%Number%\":Number,\"%Object%\":Object,\"%parseFloat%\":parseFloat,\"%parseInt%\":parseInt,\"%Promise%\":typeof Promise==\"undefined\"?ve:Promise,\"%Proxy%\":typeof Proxy==\"undefined\"?ve:Proxy,\"%RangeError%\":aL,\"%ReferenceError%\":sL,\"%Reflect%\":typeof Reflect==\"undefined\"?ve:Reflect,\"%RegExp%\":RegExp,\"%Set%\":typeof Set==\"undefined\"?ve:Set,\"%SetIteratorPrototype%\":typeof Set==\"undefined\"||!$s||!wt?ve:wt(new Set()[Symbol.iterator]()),\"%SharedArrayBuffer%\":typeof SharedArrayBuffer==\"undefined\"?ve:SharedArrayBuffer,\"%String%\":String,\"%StringIteratorPrototype%\":$s&&wt?wt(\"\"[Symbol.iterator]()):ve,\"%Symbol%\":$s?Symbol:ve,\"%SyntaxError%\":Ns,\"%ThrowTypeError%\":lL,\"%TypedArray%\":uL,\"%TypeError%\":Ds,\"%Uint8Array%\":typeof Uint8Array==\"undefined\"?ve:Uint8Array,\"%Uint8ClampedArray%\":typeof Uint8ClampedArray==\"undefined\"?ve:Uint8ClampedArray,\"%Uint16Array%\":typeof Uint16Array==\"undefined\"?ve:Uint16Array,\"%Uint32Array%\":typeof Uint32Array==\"undefined\"?ve:Uint32Array,\"%URIError%\":oL,\"%WeakMap%\":typeof WeakMap==\"undefined\"?ve:WeakMap,\"%WeakRef%\":typeof WeakRef==\"undefined\"?ve:WeakRef,\"%WeakSet%\":typeof WeakSet==\"undefined\"?ve:WeakSet};if(wt)try{null.error}catch(e){AS=wt(wt(e)),ya[\"%Error.prototype%\"]=AS}var AS,fL=function e(t){var r;if(t===\"%AsyncFunction%\")r=Rm(\"async function () {}\");else if(t===\"%GeneratorFunction%\")r=Rm(\"function* () {}\");else if(t===\"%AsyncGeneratorFunction%\")r=Rm(\"async function* () {}\");else if(t===\"%AsyncGenerator%\"){var n=e(\"%AsyncGeneratorFunction%\");n&&(r=n.prototype)}else if(t===\"%AsyncIteratorPrototype%\"){var i=e(\"%AsyncGenerator%\");i&&wt&&(r=wt(i.prototype))}return ya[t]=r,r},kS={__proto__:null,\"%ArrayBufferPrototype%\":[\"ArrayBuffer\",\"prototype\"],\"%ArrayPrototype%\":[\"Array\",\"prototype\"],\"%ArrayProto_entries%\":[\"Array\",\"prototype\",\"entries\"],\"%ArrayProto_forEach%\":[\"Array\",\"prototype\",\"forEach\"],\"%ArrayProto_keys%\":[\"Array\",\"prototype\",\"keys\"],\"%ArrayProto_values%\":[\"Array\",\"prototype\",\"values\"],\"%AsyncFunctionPrototype%\":[\"AsyncFunction\",\"prototype\"],\"%AsyncGenerator%\":[\"AsyncGeneratorFunction\",\"prototype\"],\"%AsyncGeneratorPrototype%\":[\"AsyncGeneratorFunction\",\"prototype\",\"prototype\"],\"%BooleanPrototype%\":[\"Boolean\",\"prototype\"],\"%DataViewPrototype%\":[\"DataView\",\"prototype\"],\"%DatePrototype%\":[\"Date\",\"prototype\"],\"%ErrorPrototype%\":[\"Error\",\"prototype\"],\"%EvalErrorPrototype%\":[\"EvalError\",\"prototype\"],\"%Float32ArrayPrototype%\":[\"Float32Array\",\"prototype\"],\"%Float64ArrayPrototype%\":[\"Float64Array\",\"prototype\"],\"%FunctionPrototype%\":[\"Function\",\"prototype\"],\"%Generator%\":[\"GeneratorFunction\",\"prototype\"],\"%GeneratorPrototype%\":[\"GeneratorFunction\",\"prototype\",\"prototype\"],\"%Int8ArrayPrototype%\":[\"Int8Array\",\"prototype\"],\"%Int16ArrayPrototype%\":[\"Int16Array\",\"prototype\"],\"%Int32ArrayPrototype%\":[\"Int32Array\",\"prototype\"],\"%JSONParse%\":[\"JSON\",\"parse\"],\"%JSONStringify%\":[\"JSON\",\"stringify\"],\"%MapPrototype%\":[\"Map\",\"prototype\"],\"%NumberPrototype%\":[\"Number\",\"prototype\"],\"%ObjectPrototype%\":[\"Object\",\"prototype\"],\"%ObjProto_toString%\":[\"Object\",\"prototype\",\"toString\"],\"%ObjProto_valueOf%\":[\"Object\",\"prototype\",\"valueOf\"],\"%PromisePrototype%\":[\"Promise\",\"prototype\"],\"%PromiseProto_then%\":[\"Promise\",\"prototype\",\"then\"],\"%Promise_all%\":[\"Promise\",\"all\"],\"%Promise_reject%\":[\"Promise\",\"reject\"],\"%Promise_resolve%\":[\"Promise\",\"resolve\"],\"%RangeErrorPrototype%\":[\"RangeError\",\"prototype\"],\"%ReferenceErrorPrototype%\":[\"ReferenceError\",\"prototype\"],\"%RegExpPrototype%\":[\"RegExp\",\"prototype\"],\"%SetPrototype%\":[\"Set\",\"prototype\"],\"%SharedArrayBufferPrototype%\":[\"SharedArrayBuffer\",\"prototype\"],\"%StringPrototype%\":[\"String\",\"prototype\"],\"%SymbolPrototype%\":[\"Symbol\",\"prototype\"],\"%SyntaxErrorPrototype%\":[\"SyntaxError\",\"prototype\"],\"%TypedArrayPrototype%\":[\"TypedArray\",\"prototype\"],\"%TypeErrorPrototype%\":[\"TypeError\",\"prototype\"],\"%Uint8ArrayPrototype%\":[\"Uint8Array\",\"prototype\"],\"%Uint8ClampedArrayPrototype%\":[\"Uint8ClampedArray\",\"prototype\"],\"%Uint16ArrayPrototype%\":[\"Uint16Array\",\"prototype\"],\"%Uint32ArrayPrototype%\":[\"Uint32Array\",\"prototype\"],\"%URIErrorPrototype%\":[\"URIError\",\"prototype\"],\"%WeakMapPrototype%\":[\"WeakMap\",\"prototype\"],\"%WeakSetPrototype%\":[\"WeakSet\",\"prototype\"]},Ll=Ju(),Qu=Pm(),dL=Ll.call(Function.call,Array.prototype.concat),hL=Ll.call(Function.apply,Array.prototype.splice),TS=Ll.call(Function.call,String.prototype.replace),ef=Ll.call(Function.call,String.prototype.slice),pL=Ll.call(Function.call,RegExp.prototype.exec),mL=/[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g,gL=/\\\\(\\\\)?/g,vL=function(t){var r=ef(t,0,1),n=ef(t,-1);if(r===\"%\"&&n!==\"%\")throw new Ns(\"invalid intrinsic syntax, expected closing `%`\");if(n===\"%\"&&r!==\"%\")throw new Ns(\"invalid intrinsic syntax, expected opening `%`\");var i=[];return TS(t,mL,function(a,s,o,c){i[i.length]=o?TS(c,gL,\"$1\"):s||a}),i},yL=function(t,r){var n=t,i;if(Qu(kS,n)&&(i=kS[n],n=\"%\"+i[0]+\"%\"),Qu(ya,n)){var a=ya[n];if(a===Ls&&(a=fL(n)),typeof a==\"undefined\"&&!r)throw new Ds(\"intrinsic \"+t+\" exists, but is not available. Please file an issue!\");return{alias:i,name:n,value:a}}throw new Ns(\"intrinsic \"+t+\" does not exist!\")};PS.exports=function(t,r){if(typeof t!=\"string\"||t.length===0)throw new Ds(\"intrinsic name must be a non-empty string\");if(arguments.length>1&&typeof r!=\"boolean\")throw new Ds('\"allowMissing\" argument must be a boolean');if(pL(/^%?[^%]*%?$/,t)===null)throw new Ns(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");var n=vL(t),i=n.length>0?n[0]:\"\",a=yL(\"%\"+i+\"%\",r),s=a.name,o=a.value,c=!1,l=a.alias;l&&(i=l[0],hL(n,dL([0,1],l)));for(var u=1,f=!0;u<n.length;u+=1){var d=n[u],h=ef(d,0,1),p=ef(d,-1);if((h==='\"'||h===\"'\"||h===\"`\"||p==='\"'||p===\"'\"||p===\"`\")&&h!==p)throw new Ns(\"property names with quotes must have matching quotes\");if((d===\"constructor\"||!f)&&(c=!0),i+=\".\"+d,s=\"%\"+i+\"%\",Qu(ya,s))o=ya[s];else if(o!=null){if(!(d in o)){if(!r)throw new Ds(\"base intrinsic for \"+t+\" exists, but the property is not available.\");return}if(va&&u+1>=n.length){var m=va(o,d);f=!!m,f&&\"get\"in m&&!(\"originalValue\"in m.get)?o=m.get:o=o[d]}else f=Qu(o,d),o=o[d];f&&!c&&(ya[s]=o)}}return o}});var rf=I(($z,RS)=>{\"use strict\";g();var wL=en(),tf=wL(\"%Object.defineProperty%\",!0)||!1;if(tf)try{tf({},\"a\",{value:1})}catch(e){tf=!1}RS.exports=tf});var af=I((Dz,MS)=>{\"use strict\";g();var bL=en(),nf=bL(\"%Object.getOwnPropertyDescriptor%\",!0);if(nf)try{nf([],\"length\")}catch(e){nf=null}MS.exports=nf});var sf=I((jz,FS)=>{\"use strict\";g();var OS=rf(),_L=Tm(),js=qn(),IS=af();FS.exports=function(t,r,n){if(!t||typeof t!=\"object\"&&typeof t!=\"function\")throw new js(\"`obj` must be an object or a function`\");if(typeof r!=\"string\"&&typeof r!=\"symbol\")throw new js(\"`property` must be a string or a symbol`\");if(arguments.length>3&&typeof arguments[3]!=\"boolean\"&&arguments[3]!==null)throw new js(\"`nonEnumerable`, if provided, must be a boolean or null\");if(arguments.length>4&&typeof arguments[4]!=\"boolean\"&&arguments[4]!==null)throw new js(\"`nonWritable`, if provided, must be a boolean or null\");if(arguments.length>5&&typeof arguments[5]!=\"boolean\"&&arguments[5]!==null)throw new js(\"`nonConfigurable`, if provided, must be a boolean or null\");if(arguments.length>6&&typeof arguments[6]!=\"boolean\")throw new js(\"`loose`, if provided, must be a boolean\");var i=arguments.length>3?arguments[3]:null,a=arguments.length>4?arguments[4]:null,s=arguments.length>5?arguments[5]:null,o=arguments.length>6?arguments[6]:!1,c=!!IS&&IS(t,r);if(OS)OS(t,r,{configurable:s===null&&c?c.configurable:!s,enumerable:i===null&&c?c.enumerable:!i,value:n,writable:a===null&&c?c.writable:!a});else if(o||!i&&!a&&!s)t[r]=n;else throw new _L(\"This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.\")}});var of=I((Hz,LS)=>{\"use strict\";g();var Om=rf(),$S=function(){return!!Om};$S.hasArrayLengthDefineBug=function(){if(!Om)return null;try{return Om([],\"length\",{value:1}).length!==1}catch(t){return!0}};LS.exports=$S});var Ti=I((Gz,BS)=>{\"use strict\";g();var xL=Zu(),SL=typeof Symbol==\"function\"&&typeof Symbol(\"foo\")==\"symbol\",EL=Object.prototype.toString,AL=Array.prototype.concat,DS=sf(),kL=function(e){return typeof e==\"function\"&&EL.call(e)===\"[object Function]\"},NS=of()(),TL=function(e,t,r,n){if(t in e){if(n===!0){if(e[t]===r)return}else if(!kL(n)||!n())return}NS?DS(e,t,r,!0):DS(e,t,r)},jS=function(e,t){var r=arguments.length>2?arguments[2]:{},n=xL(t);SL&&(n=AL.call(n,Object.getOwnPropertySymbols(t)));for(var i=0;i<n.length;i+=1)TL(e,n[i],t[n[i]],r[n[i]])};jS.supportsDescriptors=!!NS;BS.exports=jS});var VS=I((Vz,zS)=>{\"use strict\";g();var CL=en(),HS=sf(),PL=of()(),US=af(),GS=qn(),RL=CL(\"%Math.floor%\");zS.exports=function(t,r){if(typeof t!=\"function\")throw new GS(\"`fn` is not a function\");if(typeof r!=\"number\"||r<0||r>4294967295||RL(r)!==r)throw new GS(\"`length` must be a positive 32-bit integer\");var n=arguments.length>2&&!!arguments[2],i=!0,a=!0;if(\"length\"in t&&US){var s=US(t,\"length\");s&&!s.configurable&&(i=!1),s&&!s.writable&&(a=!1)}return(i||a||!n)&&(PL?HS(t,\"length\",r,!0,!0):HS(t,\"length\",r)),t}});var wa=I((qz,lf)=>{\"use strict\";g();var Im=Ju(),cf=en(),ML=VS(),OL=qn(),YS=cf(\"%Function.prototype.apply%\"),XS=cf(\"%Function.prototype.call%\"),ZS=cf(\"%Reflect.apply%\",!0)||Im.call(XS,YS),WS=rf(),IL=cf(\"%Math.max%\");lf.exports=function(t){if(typeof t!=\"function\")throw new OL(\"a function is required\");var r=ZS(Im,XS,arguments);return ML(r,1+IL(0,t.length-(arguments.length-1)),!0)};var qS=function(){return ZS(Im,YS,arguments)};WS?WS(lf.exports,\"apply\",{value:qS}):lf.exports.apply=qS});var br=I((Xz,QS)=>{\"use strict\";g();var KS=en(),JS=wa(),FL=JS(KS(\"String.prototype.indexOf\"));QS.exports=function(t,r){var n=KS(t,!!r);return typeof n==\"function\"&&FL(t,\".prototype.\")>-1?JS(n):n}});var Fm=I((Kz,iE)=>{\"use strict\";g();var $L=Zu(),rE=$l()(),nE=br(),eE=Object,LL=nE(\"Array.prototype.push\"),tE=nE(\"Object.prototype.propertyIsEnumerable\"),DL=rE?Object.getOwnPropertySymbols:null;iE.exports=function(t,r){if(t==null)throw new TypeError(\"target must be an object\");var n=eE(t);if(arguments.length===1)return n;for(var i=1;i<arguments.length;++i){var a=eE(arguments[i]),s=$L(a),o=rE&&(Object.getOwnPropertySymbols||DL);if(o)for(var c=o(a),l=0;l<c.length;++l){var u=c[l];tE(a,u)&&LL(s,u)}for(var f=0;f<s.length;++f){var d=s[f];if(tE(a,d)){var h=a[d];n[d]=h}}}return n}});var Lm=I((Qz,aE)=>{\"use strict\";g();var $m=Fm(),NL=function(){if(!Object.assign)return!1;for(var e=\"abcdefghijklmnopqrst\",t=e.split(\"\"),r={},n=0;n<t.length;++n)r[t[n]]=t[n];var i=Object.assign({},r),a=\"\";for(var s in i)a+=s;return e!==a},jL=function(){if(!Object.assign||!Object.preventExtensions)return!1;var e=Object.preventExtensions({1:2});try{Object.assign(e,\"xy\")}catch(t){return e[1]===\"y\"}return!1};aE.exports=function(){return!Object.assign||NL()||jL()?$m:Object.assign}});var oE=I((tV,sE)=>{\"use strict\";g();var BL=Ti(),HL=Lm();sE.exports=function(){var t=HL();return BL(Object,{assign:t},{assign:function(){return Object.assign!==t}}),t}});var fE=I((nV,uE)=>{\"use strict\";g();var UL=Ti(),GL=wa(),zL=Fm(),lE=Lm(),VL=oE(),WL=GL.apply(lE()),cE=function(t,r){return WL(Object,arguments)};UL(cE,{getPolyfill:lE,implementation:zL,shim:VL});uE.exports=cE});var hE=I((aV,dE)=>{\"use strict\";g();var Nl=function(){return typeof function(){}.name==\"string\"},Dl=Object.getOwnPropertyDescriptor;if(Dl)try{Dl([],\"length\")}catch(e){Dl=null}Nl.functionsHaveConfigurableNames=function(){if(!Nl()||!Dl)return!1;var t=Dl(function(){},\"name\");return!!t&&!!t.configurable};var qL=Function.prototype.bind;Nl.boundFunctionsHaveNames=function(){return Nl()&&typeof qL==\"function\"&&function(){}.bind().name!==\"\"};dE.exports=Nl});var gE=I((oV,mE)=>{\"use strict\";g();var pE=sf(),YL=of()(),XL=hE().functionsHaveConfigurableNames(),ZL=qn();mE.exports=function(t,r){if(typeof t!=\"function\")throw new ZL(\"`fn` is not a function\");var n=arguments.length>2&&!!arguments[2];return(!n||XL)&&(YL?pE(t,\"name\",r,!0,!0):pE(t,\"name\",r)),t}});var Dm=I((cV,vE)=>{\"use strict\";g();var KL=gE(),JL=qn(),QL=Object;vE.exports=KL(function(){if(this==null||this!==QL(this))throw new JL(\"RegExp.prototype.flags getter called on non-object\");var t=\"\";return this.hasIndices&&(t+=\"d\"),this.global&&(t+=\"g\"),this.ignoreCase&&(t+=\"i\"),this.multiline&&(t+=\"m\"),this.dotAll&&(t+=\"s\"),this.unicode&&(t+=\"u\"),this.unicodeSets&&(t+=\"v\"),this.sticky&&(t+=\"y\"),t},\"get flags\",!0)});var Nm=I((fV,yE)=>{\"use strict\";g();var eD=Dm(),tD=Ti().supportsDescriptors,rD=Object.getOwnPropertyDescriptor;yE.exports=function(){if(tD&&/a/mig.flags===\"gim\"){var t=rD(RegExp.prototype,\"flags\");if(t&&typeof t.get==\"function\"&&\"dotAll\"in RegExp.prototype&&\"hasIndices\"in RegExp.prototype){var r=\"\",n={};if(Object.defineProperty(n,\"hasIndices\",{get:function(){r+=\"d\"}}),Object.defineProperty(n,\"sticky\",{get:function(){r+=\"y\"}}),t.get.call(n),r===\"dy\")return t.get}}return eD}});var _E=I((hV,bE)=>{\"use strict\";g();var nD=Ti().supportsDescriptors,iD=Nm(),aD=Object.getOwnPropertyDescriptor,sD=Object.defineProperty,oD=TypeError,wE=Object.getPrototypeOf,lD=/a/;bE.exports=function(){if(!nD||!wE)throw new oD(\"RegExp.prototype.flags requires a true ES5 environment that supports property descriptors\");var t=iD(),r=wE(lD),n=aD(r,\"flags\");return(!n||n.get!==t)&&sD(r,\"flags\",{configurable:!0,enumerable:!1,get:t}),t}});var AE=I((mV,EE)=>{\"use strict\";g();var cD=Ti(),uD=wa(),fD=Dm(),xE=Nm(),dD=_E(),SE=uD(xE());cD(SE,{getPolyfill:xE,implementation:fD,shim:dD});EE.exports=SE});var Ci=I((vV,kE)=>{\"use strict\";g();var hD=$l();kE.exports=function(){return hD()&&!!Symbol.toStringTag}});var Bm=I((wV,CE)=>{\"use strict\";g();var pD=Ci()(),mD=br(),jm=mD(\"Object.prototype.toString\"),uf=function(t){return pD&&t&&typeof t==\"object\"&&Symbol.toStringTag in t?!1:jm(t)===\"[object Arguments]\"},TE=function(t){return uf(t)?!0:t!==null&&typeof t==\"object\"&&typeof t.length==\"number\"&&t.length>=0&&jm(t)!==\"[object Array]\"&&jm(t.callee)===\"[object Function]\"},gD=function(){return uf(arguments)}();uf.isLegacyArguments=TE;CE.exports=gD?uf:TE});var PE=I(()=>{g()});var XE=I((EV,YE)=>{g();var Zm=typeof Map==\"function\"&&Map.prototype,Hm=Object.getOwnPropertyDescriptor&&Zm?Object.getOwnPropertyDescriptor(Map.prototype,\"size\"):null,df=Zm&&Hm&&typeof Hm.get==\"function\"?Hm.get:null,RE=Zm&&Map.prototype.forEach,Km=typeof Set==\"function\"&&Set.prototype,Um=Object.getOwnPropertyDescriptor&&Km?Object.getOwnPropertyDescriptor(Set.prototype,\"size\"):null,hf=Km&&Um&&typeof Um.get==\"function\"?Um.get:null,ME=Km&&Set.prototype.forEach,vD=typeof WeakMap==\"function\"&&WeakMap.prototype,Bl=vD?WeakMap.prototype.has:null,yD=typeof WeakSet==\"function\"&&WeakSet.prototype,Hl=yD?WeakSet.prototype.has:null,wD=typeof WeakRef==\"function\"&&WeakRef.prototype,OE=wD?WeakRef.prototype.deref:null,bD=Boolean.prototype.valueOf,_D=Object.prototype.toString,xD=Function.prototype.toString,SD=String.prototype.match,Jm=String.prototype.slice,Ri=String.prototype.replace,ED=String.prototype.toUpperCase,IE=String.prototype.toLowerCase,UE=RegExp.prototype.test,FE=Array.prototype.concat,En=Array.prototype.join,AD=Array.prototype.slice,$E=Math.floor,Vm=typeof BigInt==\"function\"?BigInt.prototype.valueOf:null,Gm=Object.getOwnPropertySymbols,Wm=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?Symbol.prototype.toString:null,Bs=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"object\",Rt=typeof Symbol==\"function\"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Bs||!0)?Symbol.toStringTag:null,GE=Object.prototype.propertyIsEnumerable,LE=(typeof Reflect==\"function\"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function DE(e,t){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||UE.call(/e/,t))return t;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e==\"number\"){var n=e<0?-$E(-e):$E(e);if(n!==e){var i=String(n),a=Jm.call(t,i.length+1);return Ri.call(i,r,\"$&_\")+\".\"+Ri.call(Ri.call(a,/([0-9]{3})/g,\"$&_\"),/_$/,\"\")}}return Ri.call(t,r,\"$&_\")}var qm=PE(),NE=qm.custom,jE=VE(NE)?NE:null;YE.exports=function e(t,r,n,i){var a=r||{};if(Pi(a,\"quoteStyle\")&&a.quoteStyle!==\"single\"&&a.quoteStyle!==\"double\")throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');if(Pi(a,\"maxStringLength\")&&(typeof a.maxStringLength==\"number\"?a.maxStringLength<0&&a.maxStringLength!==1/0:a.maxStringLength!==null))throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');var s=Pi(a,\"customInspect\")?a.customInspect:!0;if(typeof s!=\"boolean\"&&s!==\"symbol\")throw new TypeError(\"option \\\"customInspect\\\", if provided, must be `true`, `false`, or `'symbol'`\");if(Pi(a,\"indent\")&&a.indent!==null&&a.indent!==\"\t\"&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');if(Pi(a,\"numericSeparator\")&&typeof a.numericSeparator!=\"boolean\")throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');var o=a.numericSeparator;if(typeof t==\"undefined\")return\"undefined\";if(t===null)return\"null\";if(typeof t==\"boolean\")return t?\"true\":\"false\";if(typeof t==\"string\")return qE(t,a);if(typeof t==\"number\"){if(t===0)return 1/0/t>0?\"0\":\"-0\";var c=String(t);return o?DE(t,c):c}if(typeof t==\"bigint\"){var l=String(t)+\"n\";return o?DE(t,l):l}var u=typeof a.depth==\"undefined\"?5:a.depth;if(typeof n==\"undefined\"&&(n=0),n>=u&&u>0&&typeof t==\"object\")return Ym(t)?\"[Array]\":\"[Object]\";var f=GD(a,n);if(typeof i==\"undefined\")i=[];else if(WE(i,t)>=0)return\"[Circular]\";function d(j,D,Q){if(D&&(i=AD.call(i),i.push(D)),Q){var de={depth:a.depth};return Pi(a,\"quoteStyle\")&&(de.quoteStyle=a.quoteStyle),e(j,de,n+1,i)}return e(j,a,n+1,i)}if(typeof t==\"function\"&&!BE(t)){var h=FD(t),p=ff(t,d);return\"[Function\"+(h?\": \"+h:\" (anonymous)\")+\"]\"+(p.length>0?\" { \"+En.call(p,\", \")+\" }\":\"\")}if(VE(t)){var m=Bs?Ri.call(String(t),/^(Symbol\\(.*\\))_[^)]*$/,\"$1\"):Wm.call(t);return typeof t==\"object\"&&!Bs?jl(m):m}if(BD(t)){for(var v=\"<\"+IE.call(String(t.nodeName)),y=t.attributes||[],b=0;b<y.length;b++)v+=\" \"+y[b].name+\"=\"+zE(kD(y[b].value),\"double\",a);return v+=\">\",t.childNodes&&t.childNodes.length&&(v+=\"...\"),v+=\"</\"+IE.call(String(t.nodeName))+\">\",v}if(Ym(t)){if(t.length===0)return\"[]\";var x=ff(t,d);return f&&!UD(x)?\"[\"+Xm(x,f)+\"]\":\"[ \"+En.call(x,\", \")+\" ]\"}if(CD(t)){var E=ff(t,d);return!(\"cause\"in Error.prototype)&&\"cause\"in t&&!GE.call(t,\"cause\")?\"{ [\"+String(t)+\"] \"+En.call(FE.call(\"[cause]: \"+d(t.cause),E),\", \")+\" }\":E.length===0?\"[\"+String(t)+\"]\":\"{ [\"+String(t)+\"] \"+En.call(E,\", \")+\" }\"}if(typeof t==\"object\"&&s){if(jE&&typeof t[jE]==\"function\"&&qm)return qm(t,{depth:u-n});if(s!==\"symbol\"&&typeof t.inspect==\"function\")return t.inspect()}if($D(t)){var _=[];return RE&&RE.call(t,function(j,D){_.push(d(D,t,!0)+\" => \"+d(j,t))}),HE(\"Map\",df.call(t),_,f)}if(ND(t)){var k=[];return ME&&ME.call(t,function(j){k.push(d(j,t))}),HE(\"Set\",hf.call(t),k,f)}if(LD(t))return zm(\"WeakMap\");if(jD(t))return zm(\"WeakSet\");if(DD(t))return zm(\"WeakRef\");if(RD(t))return jl(d(Number(t)));if(OD(t))return jl(d(Vm.call(t)));if(MD(t))return jl(bD.call(t));if(PD(t))return jl(d(String(t)));if(typeof window!=\"undefined\"&&t===window)return\"{ [object Window] }\";if(typeof globalThis!=\"undefined\"&&t===globalThis||typeof global!=\"undefined\"&&t===global)return\"{ [object globalThis] }\";if(!TD(t)&&!BE(t)){var w=ff(t,d),A=LE?LE(t)===Object.prototype:t instanceof Object||t.constructor===Object,S=t instanceof Object?\"\":\"null prototype\",T=!A&&Rt&&Object(t)===t&&Rt in t?Jm.call(Mi(t),8,-1):S?\"Object\":\"\",P=A||typeof t.constructor!=\"function\"?\"\":t.constructor.name?t.constructor.name+\" \":\"\",O=P+(T||S?\"[\"+En.call(FE.call([],T||[],S||[]),\": \")+\"] \":\"\");return w.length===0?O+\"{}\":f?O+\"{\"+Xm(w,f)+\"}\":O+\"{ \"+En.call(w,\", \")+\" }\"}return String(t)};function zE(e,t,r){var n=(r.quoteStyle||t)===\"double\"?'\"':\"'\";return n+e+n}function kD(e){return Ri.call(String(e),/\"/g,\"&quot;\")}function Ym(e){return Mi(e)===\"[object Array]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function TD(e){return Mi(e)===\"[object Date]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function BE(e){return Mi(e)===\"[object RegExp]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function CD(e){return Mi(e)===\"[object Error]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function PD(e){return Mi(e)===\"[object String]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function RD(e){return Mi(e)===\"[object Number]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function MD(e){return Mi(e)===\"[object Boolean]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function VE(e){if(Bs)return e&&typeof e==\"object\"&&e instanceof Symbol;if(typeof e==\"symbol\")return!0;if(!e||typeof e!=\"object\"||!Wm)return!1;try{return Wm.call(e),!0}catch(t){}return!1}function OD(e){if(!e||typeof e!=\"object\"||!Vm)return!1;try{return Vm.call(e),!0}catch(t){}return!1}var ID=Object.prototype.hasOwnProperty||function(e){return e in this};function Pi(e,t){return ID.call(e,t)}function Mi(e){return _D.call(e)}function FD(e){if(e.name)return e.name;var t=SD.call(xD.call(e),/^function\\s*([\\w$]+)/);return t?t[1]:null}function WE(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}function $D(e){if(!df||!e||typeof e!=\"object\")return!1;try{df.call(e);try{hf.call(e)}catch(t){return!0}return e instanceof Map}catch(t){}return!1}function LD(e){if(!Bl||!e||typeof e!=\"object\")return!1;try{Bl.call(e,Bl);try{Hl.call(e,Hl)}catch(t){return!0}return e instanceof WeakMap}catch(t){}return!1}function DD(e){if(!OE||!e||typeof e!=\"object\")return!1;try{return OE.call(e),!0}catch(t){}return!1}function ND(e){if(!hf||!e||typeof e!=\"object\")return!1;try{hf.call(e);try{df.call(e)}catch(t){return!0}return e instanceof Set}catch(t){}return!1}function jD(e){if(!Hl||!e||typeof e!=\"object\")return!1;try{Hl.call(e,Hl);try{Bl.call(e,Bl)}catch(t){return!0}return e instanceof WeakSet}catch(t){}return!1}function BD(e){return!e||typeof e!=\"object\"?!1:typeof HTMLElement!=\"undefined\"&&e instanceof HTMLElement?!0:typeof e.nodeName==\"string\"&&typeof e.getAttribute==\"function\"}function qE(e,t){if(e.length>t.maxStringLength){var r=e.length-t.maxStringLength,n=\"... \"+r+\" more character\"+(r>1?\"s\":\"\");return qE(Jm.call(e,0,t.maxStringLength),t)+n}var i=Ri.call(Ri.call(e,/(['\\\\])/g,\"\\\\$1\"),/[\\x00-\\x1f]/g,HD);return zE(i,\"single\",t)}function HD(e){var t=e.charCodeAt(0),r={8:\"b\",9:\"t\",10:\"n\",12:\"f\",13:\"r\"}[t];return r?\"\\\\\"+r:\"\\\\x\"+(t<16?\"0\":\"\")+ED.call(t.toString(16))}function jl(e){return\"Object(\"+e+\")\"}function zm(e){return e+\" { ? }\"}function HE(e,t,r,n){var i=n?Xm(r,n):En.call(r,\", \");return e+\" (\"+t+\") {\"+i+\"}\"}function UD(e){for(var t=0;t<e.length;t++)if(WE(e[t],`\n`)>=0)return!1;return!0}function GD(e,t){var r;if(e.indent===\"\t\")r=\"\t\";else if(typeof e.indent==\"number\"&&e.indent>0)r=En.call(Array(e.indent+1),\" \");else return null;return{base:r,prev:En.call(Array(t+1),r)}}function Xm(e,t){if(e.length===0)return\"\";var r=`\n`+t.prev+t.base;return r+En.call(e,\",\"+r)+`\n`+t.prev}function ff(e,t){var r=Ym(e),n=[];if(r){n.length=e.length;for(var i=0;i<e.length;i++)n[i]=Pi(e,i)?t(e[i],e):\"\"}var a=typeof Gm==\"function\"?Gm(e):[],s;if(Bs){s={};for(var o=0;o<a.length;o++)s[\"$\"+a[o]]=a[o]}for(var c in e)Pi(e,c)&&(r&&String(Number(c))===c&&c<e.length||Bs&&s[\"$\"+c]instanceof Symbol||(UE.call(/[^\\w$]/,c)?n.push(t(c,e)+\": \"+t(e[c],e)):n.push(c+\": \"+t(e[c],e))));if(typeof Gm==\"function\")for(var l=0;l<a.length;l++)GE.call(e,a[l])&&n.push(\"[\"+t(a[l])+\"]: \"+t(e[a[l]],e));return n}});var eg=I((kV,KE)=>{\"use strict\";g();var ZE=en(),Hs=br(),zD=XE(),VD=qn(),pf=ZE(\"%WeakMap%\",!0),mf=ZE(\"%Map%\",!0),WD=Hs(\"WeakMap.prototype.get\",!0),qD=Hs(\"WeakMap.prototype.set\",!0),YD=Hs(\"WeakMap.prototype.has\",!0),XD=Hs(\"Map.prototype.get\",!0),ZD=Hs(\"Map.prototype.set\",!0),KD=Hs(\"Map.prototype.has\",!0),Qm=function(e,t){for(var r=e,n;(n=r.next)!==null;r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},JD=function(e,t){var r=Qm(e,t);return r&&r.value},QD=function(e,t,r){var n=Qm(e,t);n?n.value=r:e.next={key:t,next:e.next,value:r}},eN=function(e,t){return!!Qm(e,t)};KE.exports=function(){var t,r,n,i={assert:function(a){if(!i.has(a))throw new VD(\"Side channel does not contain \"+zD(a))},get:function(a){if(pf&&a&&(typeof a==\"object\"||typeof a==\"function\")){if(t)return WD(t,a)}else if(mf){if(r)return XD(r,a)}else if(n)return JD(n,a)},has:function(a){if(pf&&a&&(typeof a==\"object\"||typeof a==\"function\")){if(t)return YD(t,a)}else if(mf){if(r)return KD(r,a)}else if(n)return eN(n,a);return!1},set:function(a,s){pf&&a&&(typeof a==\"object\"||typeof a==\"function\")?(t||(t=new pf),qD(t,a,s)):mf?(r||(r=new mf),ZD(r,a,s)):(n||(n={key:{},next:null}),QD(n,a,s))}};return i}});var QE=I((CV,JE)=>{\"use strict\";g();var tN=Pm(),Ul=eg()(),Yn=qn(),tg={assert:function(e,t){if(!e||typeof e!=\"object\"&&typeof e!=\"function\")throw new Yn(\"`O` is not an object\");if(typeof t!=\"string\")throw new Yn(\"`slot` must be a string\");if(Ul.assert(e),!tg.has(e,t))throw new Yn(\"`\"+t+\"` is not present on `O`\")},get:function(e,t){if(!e||typeof e!=\"object\"&&typeof e!=\"function\")throw new Yn(\"`O` is not an object\");if(typeof t!=\"string\")throw new Yn(\"`slot` must be a string\");var r=Ul.get(e);return r&&r[\"$\"+t]},has:function(e,t){if(!e||typeof e!=\"object\"&&typeof e!=\"function\")throw new Yn(\"`O` is not an object\");if(typeof t!=\"string\")throw new Yn(\"`slot` must be a string\");var r=Ul.get(e);return!!r&&tN(r,\"$\"+t)},set:function(e,t,r){if(!e||typeof e!=\"object\"&&typeof e!=\"function\")throw new Yn(\"`O` is not an object\");if(typeof t!=\"string\")throw new Yn(\"`slot` must be a string\");var n=Ul.get(e);n||(n={},Ul.set(e,n)),n[\"$\"+t]=r}};Object.freeze&&Object.freeze(tg);JE.exports=tg});var rA=I((RV,tA)=>{\"use strict\";g();var Gl=QE(),rN=SyntaxError,eA=typeof StopIteration==\"object\"?StopIteration:null;tA.exports=function(t){if(!eA)throw new rN(\"this environment lacks StopIteration\");Gl.set(t,\"[[Done]]\",!1);var r={next:function(){var i=Gl.get(this,\"[[Iterator]]\"),a=Gl.get(i,\"[[Done]]\");try{return{done:a,value:a?void 0:i.next()}}catch(s){if(Gl.set(i,\"[[Done]]\",!0),s!==eA)throw s;return{done:!0,value:void 0}}}};return Gl.set(r,\"[[Iterator]]\",t),r}});var rg=I((OV,nA)=>{g();var nN={}.toString;nA.exports=Array.isArray||function(e){return nN.call(e)==\"[object Array]\"}});var ng=I((FV,iA)=>{\"use strict\";g();var iN=String.prototype.valueOf,aN=function(t){try{return iN.call(t),!0}catch(r){return!1}},sN=Object.prototype.toString,oN=\"[object String]\",lN=Ci()();iA.exports=function(t){return typeof t==\"string\"?!0:typeof t!=\"object\"?!1:lN?aN(t):sN.call(t)===oN}});var ag=I((LV,oA)=>{\"use strict\";g();var ig=typeof Map==\"function\"&&Map.prototype?Map:null,cN=typeof Set==\"function\"&&Set.prototype?Set:null,gf;ig||(gf=function(t){return!1});var sA=ig?Map.prototype.has:null,aA=cN?Set.prototype.has:null;!gf&&!sA&&(gf=function(t){return!1});oA.exports=gf||function(t){if(!t||typeof t!=\"object\")return!1;try{if(sA.call(t),aA)try{aA.call(t)}catch(r){return!0}return t instanceof ig}catch(r){}return!1}});var og=I((NV,uA)=>{\"use strict\";g();var uN=typeof Map==\"function\"&&Map.prototype?Map:null,sg=typeof Set==\"function\"&&Set.prototype?Set:null,vf;sg||(vf=function(t){return!1});var lA=uN?Map.prototype.has:null,cA=sg?Set.prototype.has:null;!vf&&!cA&&(vf=function(t){return!1});uA.exports=vf||function(t){if(!t||typeof t!=\"object\")return!1;try{if(cA.call(t),lA)try{lA.call(t)}catch(r){return!0}return t instanceof sg}catch(r){}return!1}});var xA=I((BV,bf)=>{\"use strict\";g();var fA=Bm(),dA=rA();Ku()()||$l()()?(yf=Symbol.iterator,bf.exports=function(t){if(t!=null&&typeof t[yf]!=\"undefined\")return t[yf]();if(fA(t))return Array.prototype[yf].call(t)}):(hA=rg(),pA=ng(),lg=en(),mA=lg(\"%Map%\",!0),gA=lg(\"%Set%\",!0),Lr=br(),cg=Lr(\"Array.prototype.push\"),ug=Lr(\"String.prototype.charCodeAt\"),vA=Lr(\"String.prototype.slice\"),yA=function(t,r){var n=t.length;if(r+1>=n)return r+1;var i=ug(t,r);if(i<55296||i>56319)return r+1;var a=ug(t,r+1);return a<56320||a>57343?r+1:r+2},wf=function(t){var r=0;return{next:function(){var i=r>=t.length,a;return i||(a=t[r],r+=1),{done:i,value:a}}}},fg=function(t,r){if(hA(t)||fA(t))return wf(t);if(pA(t)){var n=0;return{next:function(){var a=yA(t,n),s=vA(t,n,a);return n=a,{done:a>t.length,value:s}}}}if(r&&typeof t[\"_es6-shim iterator_\"]!=\"undefined\")return t[\"_es6-shim iterator_\"]()},!mA&&!gA?bf.exports=function(t){if(t!=null)return fg(t,!0)}:(wA=ag(),bA=og(),dg=Lr(\"Map.prototype.forEach\",!0),hg=Lr(\"Set.prototype.forEach\",!0),(typeof process==\"undefined\"||!process.versions||!process.versions.node)&&(pg=Lr(\"Map.prototype.iterator\",!0),mg=Lr(\"Set.prototype.iterator\",!0)),gg=Lr(\"Map.prototype.@@iterator\",!0)||Lr(\"Map.prototype._es6-shim iterator_\",!0),vg=Lr(\"Set.prototype.@@iterator\",!0)||Lr(\"Set.prototype._es6-shim iterator_\",!0),_A=function(t){if(wA(t)){if(pg)return dA(pg(t));if(gg)return gg(t);if(dg){var r=[];return dg(t,function(i,a){cg(r,[a,i])}),wf(r)}}if(bA(t)){if(mg)return dA(mg(t));if(vg)return vg(t);if(hg){var n=[];return hg(t,function(i){cg(n,i)}),wf(n)}}},bf.exports=function(t){return _A(t)||fg(t)}));var yf,hA,pA,lg,mA,gA,Lr,cg,ug,vA,yA,wf,fg,wA,bA,dg,hg,pg,mg,gg,vg,_A});var yg=I((UV,EA)=>{\"use strict\";g();var SA=function(e){return e!==e};EA.exports=function(t,r){return t===0&&r===0?1/t===1/r:!!(t===r||SA(t)&&SA(r))}});var wg=I((zV,AA)=>{\"use strict\";g();var fN=yg();AA.exports=function(){return typeof Object.is==\"function\"?Object.is:fN}});var TA=I((WV,kA)=>{\"use strict\";g();var dN=wg(),hN=Ti();kA.exports=function(){var t=dN();return hN(Object,{is:t},{is:function(){return Object.is!==t}}),t}});var MA=I((YV,RA)=>{\"use strict\";g();var pN=Ti(),mN=wa(),gN=yg(),CA=wg(),vN=TA(),PA=mN(CA(),Object);pN(PA,{getPolyfill:CA,implementation:gN,shim:vN});RA.exports=PA});var _g=I((ZV,$A)=>{\"use strict\";g();var yN=wa(),FA=br(),wN=en(),bg=wN(\"%ArrayBuffer%\",!0),_f=FA(\"ArrayBuffer.prototype.byteLength\",!0),bN=FA(\"Object.prototype.toString\"),OA=!!bg&&!_f&&new bg(0).slice,IA=!!OA&&yN(OA);$A.exports=_f||IA?function(t){if(!t||typeof t!=\"object\")return!1;try{return _f?_f(t):IA(t,0),!0}catch(r){return!1}}:bg?function(t){return bN(t)===\"[object ArrayBuffer]\"}:function(t){return!1}});var DA=I((JV,LA)=>{\"use strict\";g();var _N=Date.prototype.getDay,xN=function(t){try{return _N.call(t),!0}catch(r){return!1}},SN=Object.prototype.toString,EN=\"[object Date]\",AN=Ci()();LA.exports=function(t){return typeof t!=\"object\"||t===null?!1:AN?xN(t):SN.call(t)===EN}});var UA=I((eW,HA)=>{\"use strict\";g();var xg=br(),NA=Ci()(),jA,BA,Sg,Eg;NA&&(jA=xg(\"Object.prototype.hasOwnProperty\"),BA=xg(\"RegExp.prototype.exec\"),Sg={},xf=function(){throw Sg},Eg={toString:xf,valueOf:xf},typeof Symbol.toPrimitive==\"symbol\"&&(Eg[Symbol.toPrimitive]=xf));var xf,kN=xg(\"Object.prototype.toString\"),TN=Object.getOwnPropertyDescriptor,CN=\"[object RegExp]\";HA.exports=NA?function(t){if(!t||typeof t!=\"object\")return!1;var r=TN(t,\"lastIndex\"),n=r&&jA(r,\"value\");if(!n)return!1;try{BA(t,Eg)}catch(i){return i===Sg}}:function(t){return!t||typeof t!=\"object\"&&typeof t!=\"function\"?!1:kN(t)===CN}});var VA=I((rW,zA)=>{\"use strict\";g();var PN=br(),GA=PN(\"SharedArrayBuffer.prototype.byteLength\",!0);zA.exports=GA?function(t){if(!t||typeof t!=\"object\")return!1;try{return GA(t),!0}catch(r){return!1}}:function(t){return!1}});var qA=I((iW,WA)=>{\"use strict\";g();var RN=Number.prototype.toString,MN=function(t){try{return RN.call(t),!0}catch(r){return!1}},ON=Object.prototype.toString,IN=\"[object Number]\",FN=Ci()();WA.exports=function(t){return typeof t==\"number\"?!0:typeof t!=\"object\"?!1:FN?MN(t):ON.call(t)===IN}});var ZA=I((sW,XA)=>{\"use strict\";g();var YA=br(),$N=YA(\"Boolean.prototype.toString\"),LN=YA(\"Object.prototype.toString\"),DN=function(t){try{return $N(t),!0}catch(r){return!1}},NN=\"[object Boolean]\",jN=Ci()();XA.exports=function(t){return typeof t==\"boolean\"?!0:t===null||typeof t!=\"object\"?!1:jN&&Symbol.toStringTag in t?DN(t):LN(t)===NN}});var ek=I((lW,Ag)=>{\"use strict\";g();var BN=Object.prototype.toString,HN=Ku()();HN?(KA=Symbol.prototype.toString,JA=/^Symbol\\(.*\\)$/,QA=function(t){return typeof t.valueOf()!=\"symbol\"?!1:JA.test(KA.call(t))},Ag.exports=function(t){if(typeof t==\"symbol\")return!0;if(BN.call(t)!==\"[object Symbol]\")return!1;try{return QA(t)}catch(r){return!1}}):Ag.exports=function(t){return!1};var KA,JA,QA});var nk=I((uW,rk)=>{\"use strict\";g();var tk=typeof BigInt!=\"undefined\"&&BigInt;rk.exports=function(){return typeof tk==\"function\"&&typeof BigInt==\"function\"&&typeof tk(42)==\"bigint\"&&typeof BigInt(42)==\"bigint\"}});var sk=I((dW,kg)=>{\"use strict\";g();var UN=nk()();UN?(ik=BigInt.prototype.valueOf,ak=function(t){try{return ik.call(t),!0}catch(r){}return!1},kg.exports=function(t){return t===null||typeof t==\"undefined\"||typeof t==\"boolean\"||typeof t==\"string\"||typeof t==\"number\"||typeof t==\"symbol\"||typeof t==\"function\"?!1:typeof t==\"bigint\"?!0:ak(t)}):kg.exports=function(t){return!1};var ik,ak});var lk=I((pW,ok)=>{\"use strict\";g();var GN=ng(),zN=qA(),VN=ZA(),WN=ek(),qN=sk();ok.exports=function(t){if(t==null||typeof t!=\"object\"&&typeof t!=\"function\")return null;if(GN(t))return\"String\";if(zN(t))return\"Number\";if(VN(t))return\"Boolean\";if(WN(t))return\"Symbol\";if(qN(t))return\"BigInt\"}});var fk=I((gW,uk)=>{\"use strict\";g();var Sf=typeof WeakMap==\"function\"&&WeakMap.prototype?WeakMap:null,ck=typeof WeakSet==\"function\"&&WeakSet.prototype?WeakSet:null,Ef;Sf||(Ef=function(t){return!1});var Cg=Sf?Sf.prototype.has:null,Tg=ck?ck.prototype.has:null;!Ef&&!Cg&&(Ef=function(t){return!1});uk.exports=Ef||function(t){if(!t||typeof t!=\"object\")return!1;try{if(Cg.call(t,Cg),Tg)try{Tg.call(t,Tg)}catch(r){return!0}return t instanceof Sf}catch(r){}return!1}});var hk=I((yW,Rg)=>{\"use strict\";g();var YN=en(),dk=br(),XN=YN(\"%WeakSet%\",!0),Pg=dk(\"WeakSet.prototype.has\",!0);Pg?(Af=dk(\"WeakMap.prototype.has\",!0),Rg.exports=function(t){if(!t||typeof t!=\"object\")return!1;try{if(Pg(t,Pg),Af)try{Af(t,Af)}catch(r){return!0}return t instanceof XN}catch(r){}return!1}):Rg.exports=function(t){return!1};var Af});var mk=I((bW,pk)=>{\"use strict\";g();var ZN=ag(),KN=og(),JN=fk(),QN=hk();pk.exports=function(t){if(t&&typeof t==\"object\"){if(ZN(t))return\"Map\";if(KN(t))return\"Set\";if(JN(t))return\"WeakMap\";if(QN(t))return\"WeakSet\"}return!1}});var wk=I((xW,yk)=>{\"use strict\";g();var vk=Function.prototype.toString,Us=typeof Reflect==\"object\"&&Reflect!==null&&Reflect.apply,Og,kf;if(typeof Us==\"function\"&&typeof Object.defineProperty==\"function\")try{Og=Object.defineProperty({},\"length\",{get:function(){throw kf}}),kf={},Us(function(){throw 42},null,Og)}catch(e){e!==kf&&(Us=null)}else Us=null;var ej=/^\\s*class\\b/,Ig=function(t){try{var r=vk.call(t);return ej.test(r)}catch(n){return!1}},Mg=function(t){try{return Ig(t)?!1:(vk.call(t),!0)}catch(r){return!1}},Tf=Object.prototype.toString,tj=\"[object Object]\",rj=\"[object Function]\",nj=\"[object GeneratorFunction]\",ij=\"[object HTMLAllCollection]\",aj=\"[object HTML document.all class]\",sj=\"[object HTMLCollection]\",oj=typeof Symbol==\"function\"&&!!Symbol.toStringTag,lj=!(0 in[,]),Fg=function(){return!1};typeof document==\"object\"&&(gk=document.all,Tf.call(gk)===Tf.call(document.all)&&(Fg=function(t){if((lj||!t)&&(typeof t==\"undefined\"||typeof t==\"object\"))try{var r=Tf.call(t);return(r===ij||r===aj||r===sj||r===tj)&&t(\"\")==null}catch(n){}return!1}));var gk;yk.exports=Us?function(t){if(Fg(t))return!0;if(!t||typeof t!=\"function\"&&typeof t!=\"object\")return!1;try{Us(t,null,Og)}catch(r){if(r!==kf)return!1}return!Ig(t)&&Mg(t)}:function(t){if(Fg(t))return!0;if(!t||typeof t!=\"function\"&&typeof t!=\"object\")return!1;if(oj)return Mg(t);if(Ig(t))return!1;var r=Tf.call(t);return r!==rj&&r!==nj&&!/^\\[object HTML/.test(r)?!1:Mg(t)}});var xk=I((EW,_k)=>{\"use strict\";g();var cj=wk(),uj=Object.prototype.toString,bk=Object.prototype.hasOwnProperty,fj=function(t,r,n){for(var i=0,a=t.length;i<a;i++)bk.call(t,i)&&(n==null?r(t[i],i,t):r.call(n,t[i],i,t))},dj=function(t,r,n){for(var i=0,a=t.length;i<a;i++)n==null?r(t.charAt(i),i,t):r.call(n,t.charAt(i),i,t)},hj=function(t,r,n){for(var i in t)bk.call(t,i)&&(n==null?r(t[i],i,t):r.call(n,t[i],i,t))},pj=function(t,r,n){if(!cj(r))throw new TypeError(\"iterator must be a function\");var i;arguments.length>=3&&(i=n),uj.call(t)===\"[object Array]\"?fj(t,r,i):typeof t==\"string\"?dj(t,r,i):hj(t,r,i)};_k.exports=pj});var Ek=I((kW,Sk)=>{\"use strict\";g();Sk.exports=[\"Float32Array\",\"Float64Array\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"BigInt64Array\",\"BigUint64Array\"]});var kk=I((CW,Ak)=>{\"use strict\";g();var $g=Ek(),mj=typeof globalThis==\"undefined\"?global:globalThis;Ak.exports=function(){for(var t=[],r=0;r<$g.length;r++)typeof mj[$g[r]]==\"function\"&&(t[t.length]=$g[r]);return t}});var Mk=I((RW,Rk)=>{\"use strict\";g();var Pf=xk(),gj=kk(),Tk=wa(),Ng=br(),Cf=af(),vj=Ng(\"Object.prototype.toString\"),Pk=Ci()(),Ck=typeof globalThis==\"undefined\"?global:globalThis,Dg=gj(),jg=Ng(\"String.prototype.slice\"),Lg=Object.getPrototypeOf,yj=Ng(\"Array.prototype.indexOf\",!0)||function(t,r){for(var n=0;n<t.length;n+=1)if(t[n]===r)return n;return-1},Rf={__proto__:null};Pk&&Cf&&Lg?Pf(Dg,function(e){var t=new Ck[e];if(Symbol.toStringTag in t){var r=Lg(t),n=Cf(r,Symbol.toStringTag);if(!n){var i=Lg(r);n=Cf(i,Symbol.toStringTag)}Rf[\"$\"+e]=Tk(n.get)}}):Pf(Dg,function(e){var t=new Ck[e],r=t.slice||t.set;r&&(Rf[\"$\"+e]=Tk(r))});var wj=function(t){var r=!1;return Pf(Rf,function(n,i){if(!r)try{\"$\"+n(t)===i&&(r=jg(i,1))}catch(a){}}),r},bj=function(t){var r=!1;return Pf(Rf,function(n,i){if(!r)try{n(t),r=jg(i,1)}catch(a){}}),r};Rk.exports=function(t){if(!t||typeof t!=\"object\")return!1;if(!Pk){var r=jg(vj(t),8,-1);return yj(Dg,r)>-1?r:r!==\"Object\"?!1:bj(t)}return Cf?wj(t):null}});var Fk=I((OW,Ik)=>{\"use strict\";g();var _j=br(),Ok=_j(\"ArrayBuffer.prototype.byteLength\",!0),xj=_g();Ik.exports=function(t){return xj(t)?Ok?Ok(t):t.byteLength:NaN}});var aT=I((FW,iT)=>{\"use strict\";g();var tT=fE(),An=br(),$k=AE(),Sj=en(),Gs=xA(),Ej=eg(),Lk=MA(),Dk=Bm(),Nk=rg(),jk=_g(),Bk=DA(),Hk=UA(),Uk=VA(),Gk=Zu(),zk=lk(),Vk=mk(),Wk=Mk(),qk=Fk(),Yk=An(\"SharedArrayBuffer.prototype.byteLength\",!0),Xk=An(\"Date.prototype.getTime\"),Bg=Object.getPrototypeOf,Zk=An(\"Object.prototype.toString\"),Of=Sj(\"%Set%\",!0),Hg=An(\"Map.prototype.has\",!0),If=An(\"Map.prototype.get\",!0),Kk=An(\"Map.prototype.size\",!0),Ff=An(\"Set.prototype.add\",!0),rT=An(\"Set.prototype.delete\",!0),$f=An(\"Set.prototype.has\",!0),Mf=An(\"Set.prototype.size\",!0);function Jk(e,t,r,n){for(var i=Gs(e),a;(a=i.next())&&!a.done;)if(tn(t,a.value,r,n))return rT(e,a.value),!0;return!1}function nT(e){if(typeof e==\"undefined\")return null;if(typeof e!=\"object\")return typeof e==\"symbol\"?!1:typeof e==\"string\"||typeof e==\"number\"?+e==+e:!0}function Aj(e,t,r,n,i,a){var s=nT(r);if(s!=null)return s;var o=If(t,s),c=tT({},i,{strict:!1});return typeof o==\"undefined\"&&!Hg(t,s)||!tn(n,o,c,a)?!1:!Hg(e,s)&&tn(n,o,c,a)}function kj(e,t,r){var n=nT(r);return n!=null?n:$f(t,n)&&!$f(e,n)}function Qk(e,t,r,n,i,a){for(var s=Gs(e),o,c;(o=s.next())&&!o.done;)if(c=o.value,tn(r,c,i,a)&&tn(n,If(t,c),i,a))return rT(e,c),!0;return!1}function tn(e,t,r,n){var i=r||{};if(i.strict?Lk(e,t):e===t)return!0;var a=zk(e),s=zk(t);if(a!==s)return!1;if(!e||!t||typeof e!=\"object\"&&typeof t!=\"object\")return i.strict?Lk(e,t):e==t;var o=n.has(e),c=n.has(t),l;if(o&&c){if(n.get(e)===n.get(t))return!0}else l={};return o||n.set(e,l),c||n.set(t,l),Pj(e,t,i,n)}function eT(e){return!e||typeof e!=\"object\"||typeof e.length!=\"number\"||typeof e.copy!=\"function\"||typeof e.slice!=\"function\"||e.length>0&&typeof e[0]!=\"number\"?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}function Tj(e,t,r,n){if(Mf(e)!==Mf(t))return!1;for(var i=Gs(e),a=Gs(t),s,o,c;(s=i.next())&&!s.done;)if(s.value&&typeof s.value==\"object\")c||(c=new Of),Ff(c,s.value);else if(!$f(t,s.value)){if(r.strict||!kj(e,t,s.value))return!1;c||(c=new Of),Ff(c,s.value)}if(c){for(;(o=a.next())&&!o.done;)if(o.value&&typeof o.value==\"object\"){if(!Jk(c,o.value,r.strict,n))return!1}else if(!r.strict&&!$f(e,o.value)&&!Jk(c,o.value,r.strict,n))return!1;return Mf(c)===0}return!0}function Cj(e,t,r,n){if(Kk(e)!==Kk(t))return!1;for(var i=Gs(e),a=Gs(t),s,o,c,l,u,f;(s=i.next())&&!s.done;)if(l=s.value[0],u=s.value[1],l&&typeof l==\"object\")c||(c=new Of),Ff(c,l);else if(f=If(t,l),typeof f==\"undefined\"&&!Hg(t,l)||!tn(u,f,r,n)){if(r.strict||!Aj(e,t,l,u,r,n))return!1;c||(c=new Of),Ff(c,l)}if(c){for(;(o=a.next())&&!o.done;)if(l=o.value[0],f=o.value[1],l&&typeof l==\"object\"){if(!Qk(c,e,l,f,r,n))return!1}else if(!r.strict&&(!e.has(l)||!tn(If(e,l),f,r,n))&&!Qk(c,e,l,f,tT({},r,{strict:!1}),n))return!1;return Mf(c)===0}return!0}function Pj(e,t,r,n){var i,a;if(typeof e!=typeof t||e==null||t==null||Zk(e)!==Zk(t)||Dk(e)!==Dk(t))return!1;var s=Nk(e),o=Nk(t);if(s!==o)return!1;var c=e instanceof Error,l=t instanceof Error;if(c!==l||(c||l)&&(e.name!==t.name||e.message!==t.message))return!1;var u=Hk(e),f=Hk(t);if(u!==f||(u||f)&&(e.source!==t.source||$k(e)!==$k(t)))return!1;var d=Bk(e),h=Bk(t);if(d!==h||(d||h)&&Xk(e)!==Xk(t)||r.strict&&Bg&&Bg(e)!==Bg(t))return!1;var p=Wk(e),m=Wk(t);if(p!==m)return!1;if(p||m){if(e.length!==t.length)return!1;for(i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}var v=eT(e),y=eT(t);if(v!==y)return!1;if(v||y){if(e.length!==t.length)return!1;for(i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}var b=jk(e),x=jk(t);if(b!==x)return!1;if(b||x)return qk(e)!==qk(t)?!1:typeof Uint8Array==\"function\"&&tn(new Uint8Array(e),new Uint8Array(t),r,n);var E=Uk(e),_=Uk(t);if(E!==_)return!1;if(E||_)return Yk(e)!==Yk(t)?!1:typeof Uint8Array==\"function\"&&tn(new Uint8Array(e),new Uint8Array(t),r,n);if(typeof e!=typeof t)return!1;var k=Gk(e),w=Gk(t);if(k.length!==w.length)return!1;for(k.sort(),w.sort(),i=k.length-1;i>=0;i--)if(k[i]!=w[i])return!1;for(i=k.length-1;i>=0;i--)if(a=k[i],!tn(e[a],t[a],r,n))return!1;var A=Vk(e),S=Vk(t);return A!==S?!1:A===\"Set\"||S===\"Set\"?Tj(e,t,r,n):A===\"Map\"?Cj(e,t,r,n):!0}iT.exports=function(t,r,n){return tn(t,r,n,Ej())}});var Xg=I((exports,module)=>{g();(function(){\"use strict\";var ERROR=\"input is invalid type\",WINDOW=typeof window==\"object\",root=WINDOW?window:{};root.JS_SHA256_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&typeof self==\"object\",NODE_JS=!root.JS_SHA256_NO_NODE_JS&&typeof process==\"object\"&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_SHA256_NO_COMMON_JS&&typeof module==\"object\"&&module.exports,AMD=typeof define==\"function\"&&define.amd,ARRAY_BUFFER=!root.JS_SHA256_NO_ARRAY_BUFFER&&typeof ArrayBuffer!=\"undefined\",HEX_CHARS=\"0123456789abcdef\".split(\"\"),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],K=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],OUTPUT_TYPES=[\"hex\",\"array\",\"digest\",\"arrayBuffer\"],blocks=[];(root.JS_SHA256_NO_NODE_JS||!Array.isArray)&&(Array.isArray=function(e){return Object.prototype.toString.call(e)===\"[object Array]\"}),ARRAY_BUFFER&&(root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW||!ArrayBuffer.isView)&&(ArrayBuffer.isView=function(e){return typeof e==\"object\"&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e,t){return function(r){return new Sha256(t,!0).update(r)[e]()}},createMethod=function(e){var t=createOutputMethod(\"hex\",e);NODE_JS&&(t=nodeWrap(t,e)),t.create=function(){return new Sha256(e)},t.update=function(i){return t.create().update(i)};for(var r=0;r<OUTPUT_TYPES.length;++r){var n=OUTPUT_TYPES[r];t[n]=createOutputMethod(n,e)}return t},nodeWrap=function(method,is224){var crypto=eval(\"require('crypto')\"),Buffer=eval(\"require('buffer').Buffer\"),algorithm=is224?\"sha224\":\"sha256\",nodeMethod=function(e){if(typeof e==\"string\")return crypto.createHash(algorithm).update(e,\"utf8\").digest(\"hex\");if(e==null)throw new Error(ERROR);return e.constructor===ArrayBuffer&&(e=new Uint8Array(e)),Array.isArray(e)||ArrayBuffer.isView(e)||e.constructor===Buffer?crypto.createHash(algorithm).update(new Buffer(e)).digest(\"hex\"):method(e)};return nodeMethod},createHmacOutputMethod=function(e,t){return function(r,n){return new HmacSha256(r,t,!0).update(n)[e]()}},createHmacMethod=function(e){var t=createHmacOutputMethod(\"hex\",e);t.create=function(i){return new HmacSha256(i,e)},t.update=function(i,a){return t.create(i).update(a)};for(var r=0;r<OUTPUT_TYPES.length;++r){var n=OUTPUT_TYPES[r];t[n]=createHmacOutputMethod(n,e)}return t};function Sha256(e,t){t?(blocks[0]=blocks[16]=blocks[1]=blocks[2]=blocks[3]=blocks[4]=blocks[5]=blocks[6]=blocks[7]=blocks[8]=blocks[9]=blocks[10]=blocks[11]=blocks[12]=blocks[13]=blocks[14]=blocks[15]=0,this.blocks=blocks):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=e}Sha256.prototype.update=function(e){if(!this.finalized){var t,r=typeof e;if(r!==\"string\"){if(r===\"object\"){if(e===null)throw new Error(ERROR);if(ARRAY_BUFFER&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!Array.isArray(e)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(e)))throw new Error(ERROR)}else throw new Error(ERROR);t=!0}for(var n,i=0,a,s=e.length,o=this.blocks;i<s;){if(this.hashed&&(this.hashed=!1,o[0]=this.block,o[16]=o[1]=o[2]=o[3]=o[4]=o[5]=o[6]=o[7]=o[8]=o[9]=o[10]=o[11]=o[12]=o[13]=o[14]=o[15]=0),t)for(a=this.start;i<s&&a<64;++i)o[a>>2]|=e[i]<<SHIFT[a++&3];else for(a=this.start;i<s&&a<64;++i)n=e.charCodeAt(i),n<128?o[a>>2]|=n<<SHIFT[a++&3]:n<2048?(o[a>>2]|=(192|n>>6)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]):n<55296||n>=57344?(o[a>>2]|=(224|n>>12)<<SHIFT[a++&3],o[a>>2]|=(128|n>>6&63)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]):(n=65536+((n&1023)<<10|e.charCodeAt(++i)&1023),o[a>>2]|=(240|n>>18)<<SHIFT[a++&3],o[a>>2]|=(128|n>>12&63)<<SHIFT[a++&3],o[a>>2]|=(128|n>>6&63)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]);this.lastByteIndex=a,this.bytes+=a-this.start,a>=64?(this.block=o[16],this.start=a-64,this.hash(),this.hashed=!0):this.start=a}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Sha256.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[16]=this.block,e[t>>2]|=EXTRA[t&3],this.block=e[16],t>=56&&(this.hashed||this.hash(),e[0]=this.block,e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.hBytes<<3|this.bytes>>>29,e[15]=this.bytes<<3,this.hash()}},Sha256.prototype.hash=function(){var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=this.blocks,l,u,f,d,h,p,m,v,y,b,x;for(l=16;l<64;++l)h=c[l-15],u=(h>>>7|h<<25)^(h>>>18|h<<14)^h>>>3,h=c[l-2],f=(h>>>17|h<<15)^(h>>>19|h<<13)^h>>>10,c[l]=c[l-16]+u+c[l-7]+f<<0;for(x=t&r,l=0;l<64;l+=4)this.first?(this.is224?(v=300032,h=c[0]-1413257819,o=h-150054599<<0,n=h+24177077<<0):(v=704751109,h=c[0]-210244248,o=h-1521486534<<0,n=h+143694565<<0),this.first=!1):(u=(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10),f=(i>>>6|i<<26)^(i>>>11|i<<21)^(i>>>25|i<<7),v=e&t,d=v^e&r^x,m=i&a^~i&s,h=o+f+m+K[l]+c[l],p=u+d,o=n+h<<0,n=h+p<<0),u=(n>>>2|n<<30)^(n>>>13|n<<19)^(n>>>22|n<<10),f=(o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7),y=n&e,d=y^n&t^v,m=o&i^~o&a,h=s+f+m+K[l+1]+c[l+1],p=u+d,s=r+h<<0,r=h+p<<0,u=(r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10),f=(s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7),b=r&n,d=b^r&e^y,m=s&o^~s&i,h=a+f+m+K[l+2]+c[l+2],p=u+d,a=t+h<<0,t=h+p<<0,u=(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10),f=(a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7),x=t&r,d=x^t&n^b,m=a&s^~a&o,h=i+f+m+K[l+3]+c[l+3],p=u+d,i=e+h<<0,e=h+p<<0;this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+r<<0,this.h3=this.h3+n<<0,this.h4=this.h4+i<<0,this.h5=this.h5+a<<0,this.h6=this.h6+s<<0,this.h7=this.h7+o<<0},Sha256.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[e&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[t&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[r&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[n&15]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[i&15]+HEX_CHARS[a>>28&15]+HEX_CHARS[a>>24&15]+HEX_CHARS[a>>20&15]+HEX_CHARS[a>>16&15]+HEX_CHARS[a>>12&15]+HEX_CHARS[a>>8&15]+HEX_CHARS[a>>4&15]+HEX_CHARS[a&15]+HEX_CHARS[s>>28&15]+HEX_CHARS[s>>24&15]+HEX_CHARS[s>>20&15]+HEX_CHARS[s>>16&15]+HEX_CHARS[s>>12&15]+HEX_CHARS[s>>8&15]+HEX_CHARS[s>>4&15]+HEX_CHARS[s&15];return this.is224||(c+=HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[o&15]),c},Sha256.prototype.toString=Sha256.prototype.hex,Sha256.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=[e>>24&255,e>>16&255,e>>8&255,e&255,t>>24&255,t>>16&255,t>>8&255,t&255,r>>24&255,r>>16&255,r>>8&255,r&255,n>>24&255,n>>16&255,n>>8&255,n&255,i>>24&255,i>>16&255,i>>8&255,i&255,a>>24&255,a>>16&255,a>>8&255,a&255,s>>24&255,s>>16&255,s>>8&255,s&255];return this.is224||c.push(o>>24&255,o>>16&255,o>>8&255,o&255),c},Sha256.prototype.array=Sha256.prototype.digest,Sha256.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(this.is224?28:32),t=new DataView(e);return t.setUint32(0,this.h0),t.setUint32(4,this.h1),t.setUint32(8,this.h2),t.setUint32(12,this.h3),t.setUint32(16,this.h4),t.setUint32(20,this.h5),t.setUint32(24,this.h6),this.is224||t.setUint32(28,this.h7),e};function HmacSha256(e,t,r){var n,i=typeof e;if(i===\"string\"){var a=[],s=e.length,o=0,c;for(n=0;n<s;++n)c=e.charCodeAt(n),c<128?a[o++]=c:c<2048?(a[o++]=192|c>>6,a[o++]=128|c&63):c<55296||c>=57344?(a[o++]=224|c>>12,a[o++]=128|c>>6&63,a[o++]=128|c&63):(c=65536+((c&1023)<<10|e.charCodeAt(++n)&1023),a[o++]=240|c>>18,a[o++]=128|c>>12&63,a[o++]=128|c>>6&63,a[o++]=128|c&63);e=a}else if(i===\"object\"){if(e===null)throw new Error(ERROR);if(ARRAY_BUFFER&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!Array.isArray(e)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(e)))throw new Error(ERROR)}else throw new Error(ERROR);e.length>64&&(e=new Sha256(t,!0).update(e).array());var l=[],u=[];for(n=0;n<64;++n){var f=e[n]||0;l[n]=92^f,u[n]=54^f}Sha256.call(this,t,r),this.update(u),this.oKeyPad=l,this.inner=!0,this.sharedMemory=r}HmacSha256.prototype=new Sha256,HmacSha256.prototype.finalize=function(){if(Sha256.prototype.finalize.call(this),this.inner){this.inner=!1;var e=this.array();Sha256.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(e),Sha256.prototype.finalize.call(this)}};var exports=createMethod();exports.sha256=exports,exports.sha224=createMethod(!0),exports.sha256.hmac=createHmacMethod(),exports.sha224.hmac=createHmacMethod(!0),COMMON_JS?module.exports=exports:(root.sha256=exports.sha256,root.sha224=exports.sha224,AMD&&define(function(){return exports}))})()});var kC=I(E0=>{g();(function(e){var t=/\\S/,r=/\\\"/g,n=/\\n/g,i=/\\r/g,a=/\\\\/g,s=/\\u2028/,o=/\\u2029/;e.tags={\"#\":1,\"^\":2,\"<\":3,$:4,\"/\":5,\"!\":6,\">\":7,\"=\":8,_v:9,\"{\":10,\"&\":11,_t:12},e.scan=function(A,S){var T=A.length,P=0,O=1,j=2,D=P,Q=null,de=null,ee=\"\",J=[],Pe=!1,me=0,F=0,G=\"{{\",N=\"}}\";function Me(){ee.length>0&&(J.push({tag:\"_t\",text:new String(ee)}),ee=\"\")}function Dt(){for(var st=!0,ot=F;ot<J.length;ot++)if(st=e.tags[J[ot].tag]<e.tags._v||J[ot].tag==\"_t\"&&J[ot].text.match(t)===null,!st)return!1;return st}function _t(st,ot){if(Me(),st&&Dt())for(var Ct=F,$e;Ct<J.length;Ct++)J[Ct].text&&(($e=J[Ct+1])&&$e.tag==\">\"&&($e.indent=J[Ct].text.toString()),J.splice(Ct,1));else ot||J.push({tag:`\n`});Pe=!1,F=J.length}function Ee(st,ot){var Ct=\"=\"+N,$e=st.indexOf(Ct,ot),U=l(st.substring(st.indexOf(\"=\",ot)+1,$e)).split(\" \");return G=U[0],N=U[U.length-1],$e+Ct.length-1}for(S&&(S=S.split(\" \"),G=S[0],N=S[1]),me=0;me<T;me++)D==P?u(G,A,me)?(--me,Me(),D=O):A.charAt(me)==`\n`?_t(Pe):ee+=A.charAt(me):D==O?(me+=G.length-1,de=e.tags[A.charAt(me+1)],Q=de?A.charAt(me+1):\"_v\",Q==\"=\"?(me=Ee(A,me),D=P):(de&&me++,D=j),Pe=me):u(N,A,me)?(J.push({tag:Q,n:l(ee),otag:G,ctag:N,i:Q==\"/\"?Pe-G.length:me+N.length}),ee=\"\",me+=N.length-1,D=P,Q==\"{\"&&(N==\"}}\"?me++:c(J[J.length-1]))):ee+=A.charAt(me);return _t(Pe,!0),J};function c(w){w.n.substr(w.n.length-1)===\"}\"&&(w.n=w.n.substring(0,w.n.length-1))}function l(w){return w.trim?w.trim():w.replace(/^\\s*|\\s*$/g,\"\")}function u(w,A,S){if(A.charAt(S)!=w.charAt(0))return!1;for(var T=1,P=w.length;T<P;T++)if(A.charAt(S+T)!=w.charAt(T))return!1;return!0}var f={_t:!0,\"\\n\":!0,$:!0,\"/\":!0};function d(w,A,S,T){var P=[],O=null,j=null,D=null;for(j=S[S.length-1];w.length>0;){if(D=w.shift(),j&&j.tag==\"<\"&&!(D.tag in f))throw new Error(\"Illegal content in < super tag.\");if(e.tags[D.tag]<=e.tags.$||h(D,T))S.push(D),D.nodes=d(w,D.tag,S,T);else if(D.tag==\"/\"){if(S.length===0)throw new Error(\"Closing tag without opener: /\"+D.n);if(O=S.pop(),D.n!=O.n&&!p(D.n,O.n,T))throw new Error(\"Nesting error: \"+O.n+\" vs. \"+D.n);return O.end=D.i,P}else D.tag==`\n`&&(D.last=w.length==0||w[0].tag==`\n`);P.push(D)}if(S.length>0)throw new Error(\"missing closing tag: \"+S.pop().n);return P}function h(w,A){for(var S=0,T=A.length;S<T;S++)if(A[S].o==w.n)return w.tag=\"#\",!0}function p(w,A,S){for(var T=0,P=S.length;T<P;T++)if(S[T].c==w&&S[T].o==A)return!0}function m(w){var A=[];for(var S in w)A.push('\"'+b(S)+'\": function(c,p,t,i) {'+w[S]+\"}\");return\"{ \"+A.join(\",\")+\" }\"}function v(w){var A=[];for(var S in w.partials)A.push('\"'+b(S)+'\":{name:\"'+b(w.partials[S].name)+'\", '+v(w.partials[S])+\"}\");return\"partials: {\"+A.join(\",\")+\"}, subs: \"+m(w.subs)}e.stringify=function(w,A,S){return\"{code: function (c,p,i) { \"+e.wrapMain(w.code)+\" },\"+v(w)+\"}\"};var y=0;e.generate=function(w,A,S){y=0;var T={code:\"\",subs:{},partials:{}};return e.walk(w,T),S.asString?this.stringify(T,A,S):this.makeTemplate(T,A,S)},e.wrapMain=function(w){return'var t=this;t.b(i=i||\"\");'+w+\"return t.fl();\"},e.template=e.Template,e.makeTemplate=function(w,A,S){var T=this.makePartials(w);return T.code=new Function(\"c\",\"p\",\"i\",this.wrapMain(w.code)),new this.template(T,A,this,S)},e.makePartials=function(w){var A,S={subs:{},partials:w.partials,name:w.name};for(A in S.partials)S.partials[A]=this.makePartials(S.partials[A]);for(A in w.subs)S.subs[A]=new Function(\"c\",\"p\",\"t\",\"i\",w.subs[A]);return S};function b(w){return w.replace(a,\"\\\\\\\\\").replace(r,'\\\\\"').replace(n,\"\\\\n\").replace(i,\"\\\\r\").replace(s,\"\\\\u2028\").replace(o,\"\\\\u2029\")}function x(w){return~w.indexOf(\".\")?\"d\":\"f\"}function E(w,A){var S=\"<\"+(A.prefix||\"\"),T=S+w.n+y++;return A.partials[T]={name:w.n,partials:{}},A.code+='t.b(t.rp(\"'+b(T)+'\",c,p,\"'+(w.indent||\"\")+'\"));',T}e.codegen={\"#\":function(w,A){A.code+=\"if(t.s(t.\"+x(w.n)+'(\"'+b(w.n)+'\",c,p,1),c,p,0,'+w.i+\",\"+w.end+',\"'+w.otag+\" \"+w.ctag+'\")){t.rs(c,p,function(c,p,t){',e.walk(w.nodes,A),A.code+=\"});c.pop();}\"},\"^\":function(w,A){A.code+=\"if(!t.s(t.\"+x(w.n)+'(\"'+b(w.n)+'\",c,p,1),c,p,1,0,0,\"\")){',e.walk(w.nodes,A),A.code+=\"};\"},\">\":E,\"<\":function(w,A){var S={partials:{},code:\"\",subs:{},inPartial:!0};e.walk(w.nodes,S);var T=A.partials[E(w,A)];T.subs=S.subs,T.partials=S.partials},$:function(w,A){var S={subs:{},code:\"\",partials:A.partials,prefix:w.n};e.walk(w.nodes,S),A.subs[w.n]=S.code,A.inPartial||(A.code+='t.sub(\"'+b(w.n)+'\",c,p,i);')},\"\\n\":function(w,A){A.code+=k('\"\\\\n\"'+(w.last?\"\":\" + i\"))},_v:function(w,A){A.code+=\"t.b(t.v(t.\"+x(w.n)+'(\"'+b(w.n)+'\",c,p,0)));'},_t:function(w,A){A.code+=k('\"'+b(w.text)+'\"')},\"{\":_,\"&\":_};function _(w,A){A.code+=\"t.b(t.t(t.\"+x(w.n)+'(\"'+b(w.n)+'\",c,p,0)));'}function k(w){return\"t.b(\"+w+\");\"}e.walk=function(w,A){for(var S,T=0,P=w.length;T<P;T++)S=e.codegen[w[T].tag],S&&S(w[T],A);return A},e.parse=function(w,A,S){return S=S||{},d(w,\"\",[],S.sectionTags||[])},e.cache={},e.cacheKey=function(w,A){return[w,!!A.asString,!!A.disableLambda,A.delimiters,!!A.modelGet].join(\"||\")},e.compile=function(w,A){A=A||{};var S=e.cacheKey(w,A),T=this.cache[S];if(T){var P=T.partials;for(var O in P)delete P[O].instance;return T}return T=this.generate(this.parse(this.scan(w,A.delimiters),w,A),w,A),this.cache[S]=T}})(typeof E0!=\"undefined\"?E0:Hogan)});var TC=I(A0=>{g();var UB={};(function(e){e.Template=function(d,h,p,m){d=d||{},this.r=d.code||this.r,this.c=p,this.options=m||{},this.text=h||\"\",this.partials=d.partials||{},this.subs=d.subs||{},this.buf=\"\"},e.Template.prototype={r:function(d,h,p){return\"\"},v:u,t:l,render:function(h,p,m){return this.ri([h],p||{},m)},ri:function(d,h,p){return this.r(d,h,p)},ep:function(d,h){var p=this.partials[d],m=h[p.name];if(p.instance&&p.base==m)return p.instance;if(typeof m==\"string\"){if(!this.c)throw new Error(\"No compiler available.\");m=this.c.compile(m,this.options)}if(!m)return null;if(this.partials[d].base=m,p.subs){h.stackText||(h.stackText={});for(key in p.subs)h.stackText[key]||(h.stackText[key]=this.activeSub!==void 0&&h.stackText[this.activeSub]?h.stackText[this.activeSub]:this.text);m=r(m,p.subs,p.partials,this.stackSubs,this.stackPartials,h.stackText)}return this.partials[d].instance=m,m},rp:function(d,h,p,m){var v=this.ep(d,p);return v?v.ri(h,p,m):\"\"},rs:function(d,h,p){var m=d[d.length-1];if(!f(m)){p(d,h,this);return}for(var v=0;v<m.length;v++)d.push(m[v]),p(d,h,this),d.pop()},s:function(d,h,p,m,v,y,b){var x;return f(d)&&d.length===0?!1:(typeof d==\"function\"&&(d=this.ms(d,h,p,m,v,y,b)),x=!!d,!m&&x&&h&&h.push(typeof d==\"object\"?d:h[h.length-1]),x)},d:function(d,h,p,m){var v,y=d.split(\".\"),b=this.f(y[0],h,p,m),x=this.options.modelGet,E=null;if(d===\".\"&&f(h[h.length-2]))b=h[h.length-1];else for(var _=1;_<y.length;_++)v=t(y[_],b,x),v!==void 0?(E=b,b=v):b=\"\";return m&&!b?!1:(!m&&typeof b==\"function\"&&(h.push(E),b=this.mv(b,h,p),h.pop()),b)},f:function(d,h,p,m){for(var v=!1,y=null,b=!1,x=this.options.modelGet,E=h.length-1;E>=0;E--)if(y=h[E],v=t(d,y,x),v!==void 0){b=!0;break}return b?(!m&&typeof v==\"function\"&&(v=this.mv(v,h,p)),v):m?!1:\"\"},ls:function(d,h,p,m,v){var y=this.options.delimiters;return this.options.delimiters=v,this.b(this.ct(l(d.call(h,m)),h,p)),this.options.delimiters=y,!1},ct:function(d,h,p){if(this.options.disableLambda)throw new Error(\"Lambda features disabled.\");return this.c.compile(d,this.options).render(h,p)},b:function(d){this.buf+=d},fl:function(){var d=this.buf;return this.buf=\"\",d},ms:function(d,h,p,m,v,y,b){var x,E=h[h.length-1],_=d.call(E);return typeof _==\"function\"?m?!0:(x=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(_,E,p,x.substring(v,y),b)):_},mv:function(d,h,p){var m=h[h.length-1],v=d.call(m);return typeof v==\"function\"?this.ct(l(v.call(m)),m,p):v},sub:function(d,h,p,m){var v=this.subs[d];v&&(this.activeSub=d,v(h,p,this,m),this.activeSub=!1)}};function t(d,h,p){var m;return h&&typeof h==\"object\"&&(h[d]!==void 0?m=h[d]:p&&h.get&&typeof h.get==\"function\"&&(m=h.get(d))),m}function r(d,h,p,m,v,y){function b(){}b.prototype=d;function x(){}x.prototype=d.subs;var E,_=new b;_.subs=new x,_.subsText={},_.buf=\"\",m=m||{},_.stackSubs=m,_.subsText=y;for(E in h)m[E]||(m[E]=h[E]);for(E in m)_.subs[E]=m[E];v=v||{},_.stackPartials=v;for(E in p)v[E]||(v[E]=p[E]);for(E in v)_.partials[E]=v[E];return _}var n=/&/g,i=/</g,a=/>/g,s=/\\'/g,o=/\\\"/g,c=/[&<>\\\"\\']/;function l(d){return String(d==null?\"\":d)}function u(d){return d=l(d),c.test(d)?d.replace(n,\"&amp;\").replace(i,\"&lt;\").replace(a,\"&gt;\").replace(s,\"&#39;\").replace(o,\"&quot;\"):d}var f=Array.isArray||function(d){return Object.prototype.toString.call(d)===\"[object Array]\"}})(typeof A0!=\"undefined\"?A0:UB)});var k0=I((LX,CC)=>{g();var md=kC();md.Template=TC().Template;md.template=md.Template;CC.exports=md});var X3=I((yc,Sv)=>{g();(function(t,r){typeof yc==\"object\"&&typeof Sv==\"object\"?Sv.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof yc==\"object\"?yc.feather=r():t.feather=r()})(typeof self!=\"undefined\"?self:yc,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.r=function(n){Object.defineProperty(n,\"__esModule\",{value:!0})},r.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(i,\"a\",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p=\"\",r(r.s=0)}({\"./dist/icons.json\":function(e){e.exports={activity:'<polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"></polyline>',airplay:'<path d=\"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1\"></path><polygon points=\"12 15 17 21 7 21 12 15\"></polygon>',\"alert-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>',\"alert-octagon\":'<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>',\"alert-triangle\":'<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>',\"align-center\":'<line x1=\"18\" y1=\"10\" x2=\"6\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"18\" y1=\"18\" x2=\"6\" y2=\"18\"></line>',\"align-justify\":'<line x1=\"21\" y1=\"10\" x2=\"3\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"21\" y1=\"18\" x2=\"3\" y2=\"18\"></line>',\"align-left\":'<line x1=\"17\" y1=\"10\" x2=\"3\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"17\" y1=\"18\" x2=\"3\" y2=\"18\"></line>',\"align-right\":'<line x1=\"21\" y1=\"10\" x2=\"7\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"21\" y1=\"18\" x2=\"7\" y2=\"18\"></line>',anchor:'<circle cx=\"12\" cy=\"5\" r=\"3\"></circle><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"8\"></line><path d=\"M5 12H2a10 10 0 0 0 20 0h-3\"></path>',aperture:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"14.31\" y1=\"8\" x2=\"20.05\" y2=\"17.94\"></line><line x1=\"9.69\" y1=\"8\" x2=\"21.17\" y2=\"8\"></line><line x1=\"7.38\" y1=\"12\" x2=\"13.12\" y2=\"2.06\"></line><line x1=\"9.69\" y1=\"16\" x2=\"3.95\" y2=\"6.06\"></line><line x1=\"14.31\" y1=\"16\" x2=\"2.83\" y2=\"16\"></line><line x1=\"16.62\" y1=\"12\" x2=\"10.88\" y2=\"21.94\"></line>',archive:'<polyline points=\"21 8 21 21 3 21 3 8\"></polyline><rect x=\"1\" y=\"3\" width=\"22\" height=\"5\"></rect><line x1=\"10\" y1=\"12\" x2=\"14\" y2=\"12\"></line>',\"arrow-down-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"8 12 12 16 16 12\"></polyline><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line>',\"arrow-down-left\":'<line x1=\"17\" y1=\"7\" x2=\"7\" y2=\"17\"></line><polyline points=\"17 17 7 17 7 7\"></polyline>',\"arrow-down-right\":'<line x1=\"7\" y1=\"7\" x2=\"17\" y2=\"17\"></line><polyline points=\"17 7 17 17 7 17\"></polyline>',\"arrow-down\":'<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><polyline points=\"19 12 12 19 5 12\"></polyline>',\"arrow-left-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 8 8 12 12 16\"></polyline><line x1=\"16\" y1=\"12\" x2=\"8\" y2=\"12\"></line>',\"arrow-left\":'<line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"></line><polyline points=\"12 19 5 12 12 5\"></polyline>',\"arrow-right-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 16 16 12 12 8\"></polyline><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',\"arrow-right\":'<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line><polyline points=\"12 5 19 12 12 19\"></polyline>',\"arrow-up-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"16 12 12 8 8 12\"></polyline><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"8\"></line>',\"arrow-up-left\":'<line x1=\"17\" y1=\"17\" x2=\"7\" y2=\"7\"></line><polyline points=\"7 17 7 7 17 7\"></polyline>',\"arrow-up-right\":'<line x1=\"7\" y1=\"17\" x2=\"17\" y2=\"7\"></line><polyline points=\"7 7 17 7 17 17\"></polyline>',\"arrow-up\":'<line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"></line><polyline points=\"5 12 12 5 19 12\"></polyline>',\"at-sign\":'<circle cx=\"12\" cy=\"12\" r=\"4\"></circle><path d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94\"></path>',award:'<circle cx=\"12\" cy=\"8\" r=\"7\"></circle><polyline points=\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\"></polyline>',\"bar-chart-2\":'<line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\"></line><line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"></line><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\"></line>',\"bar-chart\":'<line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"10\"></line><line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"4\"></line><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"16\"></line>',\"battery-charging\":'<path d=\"M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19\"></path><line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"11\"></line><polyline points=\"11 6 7 12 13 12 9 18\"></polyline>',battery:'<rect x=\"1\" y=\"6\" width=\"18\" height=\"12\" rx=\"2\" ry=\"2\"></rect><line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"11\"></line>',\"bell-off\":'<path d=\"M13.73 21a2 2 0 0 1-3.46 0\"></path><path d=\"M18.63 13A17.89 17.89 0 0 1 18 8\"></path><path d=\"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14\"></path><path d=\"M18 8a6 6 0 0 0-9.33-5\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',bell:'<path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"></path><path d=\"M13.73 21a2 2 0 0 1-3.46 0\"></path>',bluetooth:'<polyline points=\"6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5\"></polyline>',bold:'<path d=\"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"></path><path d=\"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"></path>',\"book-open\":'<path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"></path><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"></path>',book:'<path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"></path><path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"></path>',bookmark:'<path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"></path>',box:'<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>',briefcase:'<rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"></path>',calendar:'<rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>',\"camera-off\":'<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56\"></path>',camera:'<path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"></path><circle cx=\"12\" cy=\"13\" r=\"4\"></circle>',cast:'<path d=\"M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6\"></path><line x1=\"2\" y1=\"20\" x2=\"2.01\" y2=\"20\"></line>',\"check-circle\":'<path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path><polyline points=\"22 4 12 14.01 9 11.01\"></polyline>',\"check-square\":'<polyline points=\"9 11 12 14 22 4\"></polyline><path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"></path>',check:'<polyline points=\"20 6 9 17 4 12\"></polyline>',\"chevron-down\":'<polyline points=\"6 9 12 15 18 9\"></polyline>',\"chevron-left\":'<polyline points=\"15 18 9 12 15 6\"></polyline>',\"chevron-right\":'<polyline points=\"9 18 15 12 9 6\"></polyline>',\"chevron-up\":'<polyline points=\"18 15 12 9 6 15\"></polyline>',\"chevrons-down\":'<polyline points=\"7 13 12 18 17 13\"></polyline><polyline points=\"7 6 12 11 17 6\"></polyline>',\"chevrons-left\":'<polyline points=\"11 17 6 12 11 7\"></polyline><polyline points=\"18 17 13 12 18 7\"></polyline>',\"chevrons-right\":'<polyline points=\"13 17 18 12 13 7\"></polyline><polyline points=\"6 17 11 12 6 7\"></polyline>',\"chevrons-up\":'<polyline points=\"17 11 12 6 7 11\"></polyline><polyline points=\"17 18 12 13 7 18\"></polyline>',chrome:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"21.17\" y1=\"8\" x2=\"12\" y2=\"8\"></line><line x1=\"3.95\" y1=\"6.06\" x2=\"8.54\" y2=\"14\"></line><line x1=\"10.88\" y1=\"21.94\" x2=\"15.46\" y2=\"14\"></line>',circle:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle>',clipboard:'<path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"></path><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" ry=\"1\"></rect>',clock:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 6 12 12 16 14\"></polyline>',\"cloud-drizzle\":'<line x1=\"8\" y1=\"19\" x2=\"8\" y2=\"21\"></line><line x1=\"8\" y1=\"13\" x2=\"8\" y2=\"15\"></line><line x1=\"16\" y1=\"19\" x2=\"16\" y2=\"21\"></line><line x1=\"16\" y1=\"13\" x2=\"16\" y2=\"15\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"17\"></line><path d=\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"></path>',\"cloud-lightning\":'<path d=\"M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9\"></path><polyline points=\"13 11 9 17 15 17 11 23\"></polyline>',\"cloud-off\":'<path d=\"M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',\"cloud-rain\":'<line x1=\"16\" y1=\"13\" x2=\"16\" y2=\"21\"></line><line x1=\"8\" y1=\"13\" x2=\"8\" y2=\"21\"></line><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"23\"></line><path d=\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"></path>',\"cloud-snow\":'<path d=\"M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25\"></path><line x1=\"8\" y1=\"16\" x2=\"8.01\" y2=\"16\"></line><line x1=\"8\" y1=\"20\" x2=\"8.01\" y2=\"20\"></line><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line><line x1=\"12\" y1=\"22\" x2=\"12.01\" y2=\"22\"></line><line x1=\"16\" y1=\"16\" x2=\"16.01\" y2=\"16\"></line><line x1=\"16\" y1=\"20\" x2=\"16.01\" y2=\"20\"></line>',cloud:'<path d=\"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z\"></path>',code:'<polyline points=\"16 18 22 12 16 6\"></polyline><polyline points=\"8 6 2 12 8 18\"></polyline>',codepen:'<polygon points=\"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2\"></polygon><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"15.5\"></line><polyline points=\"22 8.5 12 15.5 2 8.5\"></polyline><polyline points=\"2 15.5 12 8.5 22 15.5\"></polyline><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"8.5\"></line>',codesandbox:'<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"7.5 4.21 12 6.81 16.5 4.21\"></polyline><polyline points=\"7.5 19.79 7.5 14.6 3 12\"></polyline><polyline points=\"21 12 16.5 14.6 16.5 19.79\"></polyline><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>',coffee:'<path d=\"M18 8h1a4 4 0 0 1 0 8h-1\"></path><path d=\"M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z\"></path><line x1=\"6\" y1=\"1\" x2=\"6\" y2=\"4\"></line><line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"4\"></line><line x1=\"14\" y1=\"1\" x2=\"14\" y2=\"4\"></line>',columns:'<path d=\"M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18\"></path>',command:'<path d=\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\"></path>',compass:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polygon points=\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\"></polygon>',copy:'<rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>',\"corner-down-left\":'<polyline points=\"9 10 4 15 9 20\"></polyline><path d=\"M20 4v7a4 4 0 0 1-4 4H4\"></path>',\"corner-down-right\":'<polyline points=\"15 10 20 15 15 20\"></polyline><path d=\"M4 4v7a4 4 0 0 0 4 4h12\"></path>',\"corner-left-down\":'<polyline points=\"14 15 9 20 4 15\"></polyline><path d=\"M20 4h-7a4 4 0 0 0-4 4v12\"></path>',\"corner-left-up\":'<polyline points=\"14 9 9 4 4 9\"></polyline><path d=\"M20 20h-7a4 4 0 0 1-4-4V4\"></path>',\"corner-right-down\":'<polyline points=\"10 15 15 20 20 15\"></polyline><path d=\"M4 4h7a4 4 0 0 1 4 4v12\"></path>',\"corner-right-up\":'<polyline points=\"10 9 15 4 20 9\"></polyline><path d=\"M4 20h7a4 4 0 0 0 4-4V4\"></path>',\"corner-up-left\":'<polyline points=\"9 14 4 9 9 4\"></polyline><path d=\"M20 20v-7a4 4 0 0 0-4-4H4\"></path>',\"corner-up-right\":'<polyline points=\"15 14 20 9 15 4\"></polyline><path d=\"M4 20v-7a4 4 0 0 1 4-4h12\"></path>',cpu:'<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" ry=\"2\"></rect><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"></rect><line x1=\"9\" y1=\"1\" x2=\"9\" y2=\"4\"></line><line x1=\"15\" y1=\"1\" x2=\"15\" y2=\"4\"></line><line x1=\"9\" y1=\"20\" x2=\"9\" y2=\"23\"></line><line x1=\"15\" y1=\"20\" x2=\"15\" y2=\"23\"></line><line x1=\"20\" y1=\"9\" x2=\"23\" y2=\"9\"></line><line x1=\"20\" y1=\"14\" x2=\"23\" y2=\"14\"></line><line x1=\"1\" y1=\"9\" x2=\"4\" y2=\"9\"></line><line x1=\"1\" y1=\"14\" x2=\"4\" y2=\"14\"></line>',\"credit-card\":'<rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\"></rect><line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\"></line>',crop:'<path d=\"M6.13 1L6 16a2 2 0 0 0 2 2h15\"></path><path d=\"M1 6.13L16 6a2 2 0 0 1 2 2v15\"></path>',crosshair:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"22\" y1=\"12\" x2=\"18\" y2=\"12\"></line><line x1=\"6\" y1=\"12\" x2=\"2\" y2=\"12\"></line><line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"2\"></line><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"18\"></line>',database:'<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"></ellipse><path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"></path><path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"></path>',delete:'<path d=\"M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z\"></path><line x1=\"18\" y1=\"9\" x2=\"12\" y2=\"15\"></line><line x1=\"12\" y1=\"9\" x2=\"18\" y2=\"15\"></line>',disc:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"3\"></circle>',\"divide-circle\":'<line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8\"></line><circle cx=\"12\" cy=\"12\" r=\"10\"></circle>',\"divide-square\":'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8\"></line>',divide:'<circle cx=\"12\" cy=\"6\" r=\"2\"></circle><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line><circle cx=\"12\" cy=\"18\" r=\"2\"></circle>',\"dollar-sign\":'<line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\"></line><path d=\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"></path>',\"download-cloud\":'<polyline points=\"8 17 12 21 16 17\"></polyline><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"></line><path d=\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\"></path>',download:'<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>',dribbble:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M8.56 2.75c4.37 6.03 6.02 9.42 8.03 17.72m2.54-15.38c-3.72 4.35-8.94 5.66-16.88 5.85m19.5 1.9c-3.5-.93-6.63-.82-8.94 0-2.58.92-5.01 2.86-7.44 6.32\"></path>',droplet:'<path d=\"M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z\"></path>',\"edit-2\":'<path d=\"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\"></path>',\"edit-3\":'<path d=\"M12 20h9\"></path><path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\"></path>',edit:'<path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"></path>',\"external-link\":'<path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line>',\"eye-off\":'<path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',eye:'<path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle>',facebook:'<path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"></path>',\"fast-forward\":'<polygon points=\"13 19 22 12 13 5 13 19\"></polygon><polygon points=\"2 19 11 12 2 5 2 19\"></polygon>',feather:'<path d=\"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z\"></path><line x1=\"16\" y1=\"8\" x2=\"2\" y2=\"22\"></line><line x1=\"17.5\" y1=\"15\" x2=\"9\" y2=\"15\"></line>',figma:'<path d=\"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z\"></path><path d=\"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z\"></path><path d=\"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z\"></path><path d=\"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z\"></path><path d=\"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z\"></path>',\"file-minus\":'<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\"></line>',\"file-plus\":'<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"12\"></line><line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\"></line>',\"file-text\":'<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line><polyline points=\"10 9 9 9 8 9\"></polyline>',file:'<path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"></path><polyline points=\"13 2 13 9 20 9\"></polyline>',film:'<rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\"></rect><line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\"></line><line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\"></line><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"2\" y1=\"7\" x2=\"7\" y2=\"7\"></line><line x1=\"2\" y1=\"17\" x2=\"7\" y2=\"17\"></line><line x1=\"17\" y1=\"17\" x2=\"22\" y2=\"17\"></line><line x1=\"17\" y1=\"7\" x2=\"22\" y2=\"7\"></line>',filter:'<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>',flag:'<path d=\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\"></path><line x1=\"4\" y1=\"22\" x2=\"4\" y2=\"15\"></line>',\"folder-minus\":'<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path><line x1=\"9\" y1=\"14\" x2=\"15\" y2=\"14\"></line>',\"folder-plus\":'<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"17\"></line><line x1=\"9\" y1=\"14\" x2=\"15\" y2=\"14\"></line>',folder:'<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path>',framer:'<path d=\"M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7\"></path>',frown:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M16 16s-1.5-2-4-2-4 2-4 2\"></path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>',gift:'<polyline points=\"20 12 20 22 4 22 4 12\"></polyline><rect x=\"2\" y=\"7\" width=\"20\" height=\"5\"></rect><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"7\"></line><path d=\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"></path><path d=\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"></path>',\"git-branch\":'<line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\"></line><circle cx=\"18\" cy=\"6\" r=\"3\"></circle><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><path d=\"M18 9a9 9 0 0 1-9 9\"></path>',\"git-commit\":'<circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"1.05\" y1=\"12\" x2=\"7\" y2=\"12\"></line><line x1=\"17.01\" y1=\"12\" x2=\"22.96\" y2=\"12\"></line>',\"git-merge\":'<circle cx=\"18\" cy=\"18\" r=\"3\"></circle><circle cx=\"6\" cy=\"6\" r=\"3\"></circle><path d=\"M6 21V9a9 9 0 0 0 9 9\"></path>',\"git-pull-request\":'<circle cx=\"18\" cy=\"18\" r=\"3\"></circle><circle cx=\"6\" cy=\"6\" r=\"3\"></circle><path d=\"M13 6h3a2 2 0 0 1 2 2v7\"></path><line x1=\"6\" y1=\"9\" x2=\"6\" y2=\"21\"></line>',github:'<path d=\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\"></path>',gitlab:'<path d=\"M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z\"></path>',globe:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"></path>',grid:'<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>',\"hard-drive\":'<line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\"></line><path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"></path><line x1=\"6\" y1=\"16\" x2=\"6.01\" y2=\"16\"></line><line x1=\"10\" y1=\"16\" x2=\"10.01\" y2=\"16\"></line>',hash:'<line x1=\"4\" y1=\"9\" x2=\"20\" y2=\"9\"></line><line x1=\"4\" y1=\"15\" x2=\"20\" y2=\"15\"></line><line x1=\"10\" y1=\"3\" x2=\"8\" y2=\"21\"></line><line x1=\"16\" y1=\"3\" x2=\"14\" y2=\"21\"></line>',headphones:'<path d=\"M3 18v-6a9 9 0 0 1 18 0v6\"></path><path d=\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\"></path>',heart:'<path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path>',\"help-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"></path><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>',hexagon:'<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path>',home:'<path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"></path><polyline points=\"9 22 9 12 15 12 15 22\"></polyline>',image:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle><polyline points=\"21 15 16 10 5 21\"></polyline>',inbox:'<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"></polyline><path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"></path>',info:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line>',instagram:'<rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\"></rect><path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"></path><line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"></line>',italic:'<line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\"></line><line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\"></line><line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\"></line>',key:'<path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\"></path>',layers:'<polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline>',layout:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"></line>',\"life-buoy\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"4.93\" y1=\"4.93\" x2=\"9.17\" y2=\"9.17\"></line><line x1=\"14.83\" y1=\"14.83\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"14.83\" y1=\"9.17\" x2=\"19.07\" y2=\"4.93\"></line><line x1=\"14.83\" y1=\"9.17\" x2=\"18.36\" y2=\"5.64\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"9.17\" y2=\"14.83\"></line>',\"link-2\":'<path d=\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\"></path><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',link:'<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path>',linkedin:'<path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"></path><rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"></rect><circle cx=\"4\" cy=\"4\" r=\"2\"></circle>',list:'<line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line>',loader:'<line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\"></line><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"></line><line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\"></line><line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\"></line><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\"></line><line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\"></line>',lock:'<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"></path>',\"log-in\":'<path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"></path><polyline points=\"10 17 15 12 10 7\"></polyline><line x1=\"15\" y1=\"12\" x2=\"3\" y2=\"12\"></line>',\"log-out\":'<path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"></path><polyline points=\"16 17 21 12 16 7\"></polyline><line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"></line>',mail:'<path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"></path><polyline points=\"22,6 12,13 2,6\"></polyline>',\"map-pin\":'<path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"></path><circle cx=\"12\" cy=\"10\" r=\"3\"></circle>',map:'<polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\"></polygon><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\"></line><line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\"></line>',\"maximize-2\":'<polyline points=\"15 3 21 3 21 9\"></polyline><polyline points=\"9 21 3 21 3 15\"></polyline><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"></line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"></line>',maximize:'<path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"></path>',meh:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"8\" y1=\"15\" x2=\"16\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>',menu:'<line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line>',\"message-circle\":'<path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"></path>',\"message-square\":'<path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"></path>',\"mic-off\":'<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6\"></path><path d=\"M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23\"></path><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>',mic:'<path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>',\"minimize-2\":'<polyline points=\"4 14 10 14 10 20\"></polyline><polyline points=\"20 10 14 10 14 4\"></polyline><line x1=\"14\" y1=\"10\" x2=\"21\" y2=\"3\"></line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"></line>',minimize:'<path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"></path>',\"minus-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',\"minus-square\":'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',minus:'<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>',monitor:'<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line>',moon:'<path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"></path>',\"more-horizontal\":'<circle cx=\"12\" cy=\"12\" r=\"1\"></circle><circle cx=\"19\" cy=\"12\" r=\"1\"></circle><circle cx=\"5\" cy=\"12\" r=\"1\"></circle>',\"more-vertical\":'<circle cx=\"12\" cy=\"12\" r=\"1\"></circle><circle cx=\"12\" cy=\"5\" r=\"1\"></circle><circle cx=\"12\" cy=\"19\" r=\"1\"></circle>',\"mouse-pointer\":'<path d=\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\"></path><path d=\"M13 13l6 6\"></path>',move:'<polyline points=\"5 9 2 12 5 15\"></polyline><polyline points=\"9 5 12 2 15 5\"></polyline><polyline points=\"15 19 12 22 9 19\"></polyline><polyline points=\"19 9 22 12 19 15\"></polyline><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\"></line>',music:'<path d=\"M9 18V5l12-2v13\"></path><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><circle cx=\"18\" cy=\"16\" r=\"3\"></circle>',\"navigation-2\":'<polygon points=\"12 2 19 21 12 17 5 21 12 2\"></polygon>',navigation:'<polygon points=\"3 11 22 2 13 21 11 13 3 11\"></polygon>',octagon:'<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon>',package:'<line x1=\"16.5\" y1=\"9.4\" x2=\"7.5\" y2=\"4.21\"></line><path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>',paperclip:'<path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"></path>',\"pause-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"10\" y1=\"15\" x2=\"10\" y2=\"9\"></line><line x1=\"14\" y1=\"15\" x2=\"14\" y2=\"9\"></line>',pause:'<rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect>',\"pen-tool\":'<path d=\"M12 19l7-7 3 3-7 7-3-3z\"></path><path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\"></path><path d=\"M2 2l7.586 7.586\"></path><circle cx=\"11\" cy=\"11\" r=\"2\"></circle>',percent:'<line x1=\"19\" y1=\"5\" x2=\"5\" y2=\"19\"></line><circle cx=\"6.5\" cy=\"6.5\" r=\"2.5\"></circle><circle cx=\"17.5\" cy=\"17.5\" r=\"2.5\"></circle>',\"phone-call\":'<path d=\"M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"phone-forwarded\":'<polyline points=\"19 1 23 5 19 9\"></polyline><line x1=\"15\" y1=\"5\" x2=\"23\" y2=\"5\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"phone-incoming\":'<polyline points=\"16 2 16 8 22 8\"></polyline><line x1=\"23\" y1=\"1\" x2=\"16\" y2=\"8\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"phone-missed\":'<line x1=\"23\" y1=\"1\" x2=\"17\" y2=\"7\"></line><line x1=\"17\" y1=\"1\" x2=\"23\" y2=\"7\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"phone-off\":'<path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\"></path><line x1=\"23\" y1=\"1\" x2=\"1\" y2=\"23\"></line>',\"phone-outgoing\":'<polyline points=\"23 7 23 1 17 1\"></polyline><line x1=\"16\" y1=\"8\" x2=\"23\" y2=\"1\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',phone:'<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"pie-chart\":'<path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\"></path><path d=\"M22 12A10 10 0 0 0 12 2v10z\"></path>',\"play-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polygon points=\"10 8 16 12 10 16 10 8\"></polygon>',play:'<polygon points=\"5 3 19 12 5 21 5 3\"></polygon>',\"plus-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',\"plus-square\":'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',plus:'<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>',pocket:'<path d=\"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z\"></path><polyline points=\"8 10 12 14 16 10\"></polyline>',power:'<path d=\"M18.36 6.64a9 9 0 1 1-12.73 0\"></path><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"12\"></line>',printer:'<polyline points=\"6 9 6 2 18 2 18 9\"></polyline><path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"></path><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\"></rect>',radio:'<circle cx=\"12\" cy=\"12\" r=\"2\"></circle><path d=\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\"></path>',\"refresh-ccw\":'<polyline points=\"1 4 1 10 7 10\"></polyline><polyline points=\"23 20 23 14 17 14\"></polyline><path d=\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15\"></path>',\"refresh-cw\":'<polyline points=\"23 4 23 10 17 10\"></polyline><polyline points=\"1 20 1 14 7 14\"></polyline><path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"></path>',repeat:'<polyline points=\"17 1 21 5 17 9\"></polyline><path d=\"M3 11V9a4 4 0 0 1 4-4h14\"></path><polyline points=\"7 23 3 19 7 15\"></polyline><path d=\"M21 13v2a4 4 0 0 1-4 4H3\"></path>',rewind:'<polygon points=\"11 19 2 12 11 5 11 19\"></polygon><polygon points=\"22 19 13 12 22 5 22 19\"></polygon>',\"rotate-ccw\":'<polyline points=\"1 4 1 10 7 10\"></polyline><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"></path>',\"rotate-cw\":'<polyline points=\"23 4 23 10 17 10\"></polyline><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"></path>',rss:'<path d=\"M4 11a9 9 0 0 1 9 9\"></path><path d=\"M4 4a16 16 0 0 1 16 16\"></path><circle cx=\"5\" cy=\"19\" r=\"1\"></circle>',save:'<path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"></path><polyline points=\"17 21 17 13 7 13 7 21\"></polyline><polyline points=\"7 3 7 8 15 8\"></polyline>',scissors:'<circle cx=\"6\" cy=\"6\" r=\"3\"></circle><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><line x1=\"20\" y1=\"4\" x2=\"8.12\" y2=\"15.88\"></line><line x1=\"14.47\" y1=\"14.48\" x2=\"20\" y2=\"20\"></line><line x1=\"8.12\" y1=\"8.12\" x2=\"12\" y2=\"12\"></line>',search:'<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>',send:'<line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon>',server:'<rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect><rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect><line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\"></line><line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\"></line>',settings:'<circle cx=\"12\" cy=\"12\" r=\"3\"></circle><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"></path>',\"share-2\":'<circle cx=\"18\" cy=\"5\" r=\"3\"></circle><circle cx=\"6\" cy=\"12\" r=\"3\"></circle><circle cx=\"18\" cy=\"19\" r=\"3\"></circle><line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"></line><line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"></line>',share:'<path d=\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\"></path><polyline points=\"16 6 12 2 8 6\"></polyline><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"15\"></line>',\"shield-off\":'<path d=\"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18\"></path><path d=\"M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',shield:'<path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"></path>',\"shopping-bag\":'<path d=\"M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"></path><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><path d=\"M16 10a4 4 0 0 1-8 0\"></path>',\"shopping-cart\":'<circle cx=\"9\" cy=\"21\" r=\"1\"></circle><circle cx=\"20\" cy=\"21\" r=\"1\"></circle><path d=\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"></path>',shuffle:'<polyline points=\"16 3 21 3 21 8\"></polyline><line x1=\"4\" y1=\"20\" x2=\"21\" y2=\"3\"></line><polyline points=\"21 16 21 21 16 21\"></polyline><line x1=\"15\" y1=\"15\" x2=\"21\" y2=\"21\"></line><line x1=\"4\" y1=\"4\" x2=\"9\" y2=\"9\"></line>',sidebar:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"></line>',\"skip-back\":'<polygon points=\"19 20 9 12 19 4 19 20\"></polygon><line x1=\"5\" y1=\"19\" x2=\"5\" y2=\"5\"></line>',\"skip-forward\":'<polygon points=\"5 4 15 12 5 20 5 4\"></polygon><line x1=\"19\" y1=\"5\" x2=\"19\" y2=\"19\"></line>',slack:'<path d=\"M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z\"></path><path d=\"M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"></path><path d=\"M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z\"></path><path d=\"M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z\"></path><path d=\"M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z\"></path><path d=\"M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\"></path><path d=\"M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z\"></path><path d=\"M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z\"></path>',slash:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\"></line>',sliders:'<line x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"></line><line x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"></line><line x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"></line><line x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"></line><line x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"></line><line x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"></line><line x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"></line>',smartphone:'<rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line>',smile:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"></path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>',speaker:'<rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" ry=\"2\"></rect><circle cx=\"12\" cy=\"14\" r=\"4\"></circle><line x1=\"12\" y1=\"6\" x2=\"12.01\" y2=\"6\"></line>',square:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>',star:'<polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>',\"stop-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"></rect>',sun:'<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>',sunrise:'<path d=\"M17 18a5 5 0 0 0-10 0\"></path><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"9\"></line><line x1=\"4.22\" y1=\"10.22\" x2=\"5.64\" y2=\"11.64\"></line><line x1=\"1\" y1=\"18\" x2=\"3\" y2=\"18\"></line><line x1=\"21\" y1=\"18\" x2=\"23\" y2=\"18\"></line><line x1=\"18.36\" y1=\"11.64\" x2=\"19.78\" y2=\"10.22\"></line><line x1=\"23\" y1=\"22\" x2=\"1\" y2=\"22\"></line><polyline points=\"8 6 12 2 16 6\"></polyline>',sunset:'<path d=\"M17 18a5 5 0 0 0-10 0\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"2\"></line><line x1=\"4.22\" y1=\"10.22\" x2=\"5.64\" y2=\"11.64\"></line><line x1=\"1\" y1=\"18\" x2=\"3\" y2=\"18\"></line><line x1=\"21\" y1=\"18\" x2=\"23\" y2=\"18\"></line><line x1=\"18.36\" y1=\"11.64\" x2=\"19.78\" y2=\"10.22\"></line><line x1=\"23\" y1=\"22\" x2=\"1\" y2=\"22\"></line><polyline points=\"16 5 12 9 8 5\"></polyline>',table:'<path d=\"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18\"></path>',tablet:'<rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line>',tag:'<path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"></path><line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\"></line>',target:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"6\"></circle><circle cx=\"12\" cy=\"12\" r=\"2\"></circle>',terminal:'<polyline points=\"4 17 10 11 4 5\"></polyline><line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"></line>',thermometer:'<path d=\"M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z\"></path>',\"thumbs-down\":'<path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"></path>',\"thumbs-up\":'<path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"></path>',\"toggle-left\":'<rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" ry=\"7\"></rect><circle cx=\"8\" cy=\"12\" r=\"3\"></circle>',\"toggle-right\":'<rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" ry=\"7\"></rect><circle cx=\"16\" cy=\"12\" r=\"3\"></circle>',tool:'<path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"></path>',\"trash-2\":'<polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>',trash:'<polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path>',trello:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><rect x=\"7\" y=\"7\" width=\"3\" height=\"9\"></rect><rect x=\"14\" y=\"7\" width=\"3\" height=\"5\"></rect>',\"trending-down\":'<polyline points=\"23 18 13.5 8.5 8.5 13.5 1 6\"></polyline><polyline points=\"17 18 23 18 23 12\"></polyline>',\"trending-up\":'<polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"></polyline><polyline points=\"17 6 23 6 23 12\"></polyline>',triangle:'<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path>',truck:'<rect x=\"1\" y=\"3\" width=\"15\" height=\"13\"></rect><polygon points=\"16 8 20 8 23 11 23 16 16 16 16 8\"></polygon><circle cx=\"5.5\" cy=\"18.5\" r=\"2.5\"></circle><circle cx=\"18.5\" cy=\"18.5\" r=\"2.5\"></circle>',tv:'<rect x=\"2\" y=\"7\" width=\"20\" height=\"15\" rx=\"2\" ry=\"2\"></rect><polyline points=\"17 2 12 7 7 2\"></polyline>',twitch:'<path d=\"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7\"></path>',twitter:'<path d=\"M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z\"></path>',type:'<polyline points=\"4 7 4 4 20 4 20 7\"></polyline><line x1=\"9\" y1=\"20\" x2=\"15\" y2=\"20\"></line><line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"></line>',umbrella:'<path d=\"M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7\"></path>',underline:'<path d=\"M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3\"></path><line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\"></line>',unlock:'<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect><path d=\"M7 11V7a5 5 0 0 1 9.9-1\"></path>',\"upload-cloud\":'<polyline points=\"16 16 12 12 8 16\"></polyline><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"></line><path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\"></path><polyline points=\"16 16 12 12 8 16\"></polyline>',upload:'<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"17 8 12 3 7 8\"></polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"></line>',\"user-check\":'<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><polyline points=\"17 11 19 13 23 9\"></polyline>',\"user-minus\":'<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"></line>',\"user-plus\":'<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\"></line><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"></line>',\"user-x\":'<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"18\" y1=\"8\" x2=\"23\" y2=\"13\"></line><line x1=\"23\" y1=\"8\" x2=\"18\" y2=\"13\"></line>',user:'<path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path><circle cx=\"12\" cy=\"7\" r=\"4\"></circle>',users:'<path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"9\" cy=\"7\" r=\"4\"></circle><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"></path><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"></path>',\"video-off\":'<path d=\"M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',video:'<polygon points=\"23 7 16 12 23 17 23 7\"></polygon><rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\"></rect>',voicemail:'<circle cx=\"5.5\" cy=\"11.5\" r=\"4.5\"></circle><circle cx=\"18.5\" cy=\"11.5\" r=\"4.5\"></circle><line x1=\"5.5\" y1=\"16\" x2=\"18.5\" y2=\"16\"></line>',\"volume-1\":'<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"></path>',\"volume-2\":'<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"></path>',\"volume-x\":'<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"></line><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"></line>',volume:'<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon>',watch:'<circle cx=\"12\" cy=\"12\" r=\"7\"></circle><polyline points=\"12 9 12 12 13.5 13.5\"></polyline><path d=\"M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83\"></path>',\"wifi-off\":'<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M16.72 11.06A10.94 10.94 0 0 1 19 12.55\"></path><path d=\"M5 12.55a10.94 10.94 0 0 1 5.17-2.39\"></path><path d=\"M10.71 5.05A16 16 0 0 1 22.58 9\"></path><path d=\"M1.42 9a15.91 15.91 0 0 1 4.7-2.88\"></path><path d=\"M8.53 16.11a6 6 0 0 1 6.95 0\"></path><line x1=\"12\" y1=\"20\" x2=\"12.01\" y2=\"20\"></line>',wifi:'<path d=\"M5 12.55a11 11 0 0 1 14.08 0\"></path><path d=\"M1.42 9a16 16 0 0 1 21.16 0\"></path><path d=\"M8.53 16.11a6 6 0 0 1 6.95 0\"></path><line x1=\"12\" y1=\"20\" x2=\"12.01\" y2=\"20\"></line>',wind:'<path d=\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\"></path>',\"x-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>',\"x-octagon\":'<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>',\"x-square\":'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>',x:'<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>',youtube:'<path d=\"M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z\"></path><polygon points=\"9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02\"></polygon>',\"zap-off\":'<polyline points=\"12.41 6.75 13 2 10.57 4.92\"></polyline><polyline points=\"18.57 12.91 21 10 15.66 10\"></polyline><polyline points=\"8 8 3 14 12 14 11 22 16 16\"></polyline><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',zap:'<polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"></polygon>',\"zoom-in\":'<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line>',\"zoom-out\":'<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line>'}},\"./node_modules/classnames/dedupe.js\":function(e,t,r){var n,i;(function(){\"use strict\";var a=function(){function s(){}s.prototype=Object.create(null);function o(m,v){for(var y=v.length,b=0;b<y;++b)h(m,v[b])}var c={}.hasOwnProperty;function l(m,v){m[v]=!0}function u(m,v){for(var y in v)c.call(v,y)&&(m[y]=!!v[y])}var f=/\\s+/;function d(m,v){for(var y=v.split(f),b=y.length,x=0;x<b;++x)m[y[x]]=!0}function h(m,v){if(v){var y=typeof v;y===\"string\"?d(m,v):Array.isArray(v)?o(m,v):y===\"object\"?u(m,v):y===\"number\"&&l(m,v)}}function p(){for(var m=arguments.length,v=Array(m),y=0;y<m;y++)v[y]=arguments[y];var b=new s;o(b,v);var x=[];for(var E in b)b[E]&&x.push(E);return x.join(\" \")}return p}();typeof e!=\"undefined\"&&e.exports?e.exports=a:(n=[],i=function(){return a}.apply(t,n),i!==void 0&&(e.exports=i))})()},\"./node_modules/core-js/es/array/from.js\":function(e,t,r){r(\"./node_modules/core-js/modules/es.string.iterator.js\"),r(\"./node_modules/core-js/modules/es.array.from.js\");var n=r(\"./node_modules/core-js/internals/path.js\");e.exports=n.Array.from},\"./node_modules/core-js/internals/a-function.js\":function(e,t){e.exports=function(r){if(typeof r!=\"function\")throw TypeError(String(r)+\" is not a function\");return r}},\"./node_modules/core-js/internals/an-object.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/is-object.js\");e.exports=function(i){if(!n(i))throw TypeError(String(i)+\" is not an object\");return i}},\"./node_modules/core-js/internals/array-from.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/bind-context.js\"),i=r(\"./node_modules/core-js/internals/to-object.js\"),a=r(\"./node_modules/core-js/internals/call-with-safe-iteration-closing.js\"),s=r(\"./node_modules/core-js/internals/is-array-iterator-method.js\"),o=r(\"./node_modules/core-js/internals/to-length.js\"),c=r(\"./node_modules/core-js/internals/create-property.js\"),l=r(\"./node_modules/core-js/internals/get-iterator-method.js\");e.exports=function(f){var d=i(f),h=typeof this==\"function\"?this:Array,p=arguments.length,m=p>1?arguments[1]:void 0,v=m!==void 0,y=0,b=l(d),x,E,_,k;if(v&&(m=n(m,p>2?arguments[2]:void 0,2)),b!=null&&!(h==Array&&s(b)))for(k=b.call(d),E=new h;!(_=k.next()).done;y++)c(E,y,v?a(k,m,[_.value,y],!0):_.value);else for(x=o(d.length),E=new h(x);x>y;y++)c(E,y,v?m(d[y],y):d[y]);return E.length=y,E}},\"./node_modules/core-js/internals/array-includes.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/to-indexed-object.js\"),i=r(\"./node_modules/core-js/internals/to-length.js\"),a=r(\"./node_modules/core-js/internals/to-absolute-index.js\");e.exports=function(s){return function(o,c,l){var u=n(o),f=i(u.length),d=a(l,f),h;if(s&&c!=c){for(;f>d;)if(h=u[d++],h!=h)return!0}else for(;f>d;d++)if((s||d in u)&&u[d]===c)return s||d||0;return!s&&-1}}},\"./node_modules/core-js/internals/bind-context.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/a-function.js\");e.exports=function(i,a,s){if(n(i),a===void 0)return i;switch(s){case 0:return function(){return i.call(a)};case 1:return function(o){return i.call(a,o)};case 2:return function(o,c){return i.call(a,o,c)};case 3:return function(o,c,l){return i.call(a,o,c,l)}}return function(){return i.apply(a,arguments)}}},\"./node_modules/core-js/internals/call-with-safe-iteration-closing.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/an-object.js\");e.exports=function(i,a,s,o){try{return o?a(n(s)[0],s[1]):a(s)}catch(l){var c=i.return;throw c!==void 0&&n(c.call(i)),l}}},\"./node_modules/core-js/internals/check-correctness-of-iteration.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),i=n(\"iterator\"),a=!1;try{var s=0,o={next:function(){return{done:!!s++}},return:function(){a=!0}};o[i]=function(){return this},Array.from(o,function(){throw 2})}catch(c){}e.exports=function(c,l){if(!l&&!a)return!1;var u=!1;try{var f={};f[i]=function(){return{next:function(){return{done:u=!0}}}},c(f)}catch(d){}return u}},\"./node_modules/core-js/internals/classof-raw.js\":function(e,t){var r={}.toString;e.exports=function(n){return r.call(n).slice(8,-1)}},\"./node_modules/core-js/internals/classof.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/classof-raw.js\"),i=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),a=i(\"toStringTag\"),s=n(function(){return arguments}())==\"Arguments\",o=function(c,l){try{return c[l]}catch(u){}};e.exports=function(c){var l,u,f;return c===void 0?\"Undefined\":c===null?\"Null\":typeof(u=o(l=Object(c),a))==\"string\"?u:s?n(l):(f=n(l))==\"Object\"&&typeof l.callee==\"function\"?\"Arguments\":f}},\"./node_modules/core-js/internals/copy-constructor-properties.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/has.js\"),i=r(\"./node_modules/core-js/internals/own-keys.js\"),a=r(\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\"),s=r(\"./node_modules/core-js/internals/object-define-property.js\");e.exports=function(o,c){for(var l=i(c),u=s.f,f=a.f,d=0;d<l.length;d++){var h=l[d];n(o,h)||u(o,h,f(c,h))}}},\"./node_modules/core-js/internals/correct-prototype-getter.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\");e.exports=!n(function(){function i(){}return i.prototype.constructor=null,Object.getPrototypeOf(new i)!==i.prototype})},\"./node_modules/core-js/internals/create-iterator-constructor.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/iterators-core.js\").IteratorPrototype,i=r(\"./node_modules/core-js/internals/object-create.js\"),a=r(\"./node_modules/core-js/internals/create-property-descriptor.js\"),s=r(\"./node_modules/core-js/internals/set-to-string-tag.js\"),o=r(\"./node_modules/core-js/internals/iterators.js\"),c=function(){return this};e.exports=function(l,u,f){var d=u+\" Iterator\";return l.prototype=i(n,{next:a(1,f)}),s(l,d,!1,!0),o[d]=c,l}},\"./node_modules/core-js/internals/create-property-descriptor.js\":function(e,t){e.exports=function(r,n){return{enumerable:!(r&1),configurable:!(r&2),writable:!(r&4),value:n}}},\"./node_modules/core-js/internals/create-property.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/to-primitive.js\"),i=r(\"./node_modules/core-js/internals/object-define-property.js\"),a=r(\"./node_modules/core-js/internals/create-property-descriptor.js\");e.exports=function(s,o,c){var l=n(o);l in s?i.f(s,l,a(0,c)):s[l]=c}},\"./node_modules/core-js/internals/define-iterator.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/export.js\"),i=r(\"./node_modules/core-js/internals/create-iterator-constructor.js\"),a=r(\"./node_modules/core-js/internals/object-get-prototype-of.js\"),s=r(\"./node_modules/core-js/internals/object-set-prototype-of.js\"),o=r(\"./node_modules/core-js/internals/set-to-string-tag.js\"),c=r(\"./node_modules/core-js/internals/hide.js\"),l=r(\"./node_modules/core-js/internals/redefine.js\"),u=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),f=r(\"./node_modules/core-js/internals/is-pure.js\"),d=r(\"./node_modules/core-js/internals/iterators.js\"),h=r(\"./node_modules/core-js/internals/iterators-core.js\"),p=h.IteratorPrototype,m=h.BUGGY_SAFARI_ITERATORS,v=u(\"iterator\"),y=\"keys\",b=\"values\",x=\"entries\",E=function(){return this};e.exports=function(_,k,w,A,S,T,P){i(w,k,A);var O=function(G){if(G===S&&ee)return ee;if(!m&&G in Q)return Q[G];switch(G){case y:return function(){return new w(this,G)};case b:return function(){return new w(this,G)};case x:return function(){return new w(this,G)}}return function(){return new w(this)}},j=k+\" Iterator\",D=!1,Q=_.prototype,de=Q[v]||Q[\"@@iterator\"]||S&&Q[S],ee=!m&&de||O(S),J=k==\"Array\"&&Q.entries||de,Pe,me,F;if(J&&(Pe=a(J.call(new _)),p!==Object.prototype&&Pe.next&&(!f&&a(Pe)!==p&&(s?s(Pe,p):typeof Pe[v]!=\"function\"&&c(Pe,v,E)),o(Pe,j,!0,!0),f&&(d[j]=E))),S==b&&de&&de.name!==b&&(D=!0,ee=function(){return de.call(this)}),(!f||P)&&Q[v]!==ee&&c(Q,v,ee),d[k]=ee,S)if(me={values:O(b),keys:T?ee:O(y),entries:O(x)},P)for(F in me)(m||D||!(F in Q))&&l(Q,F,me[F]);else n({target:k,proto:!0,forced:m||D},me);return me}},\"./node_modules/core-js/internals/descriptors.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\");e.exports=!n(function(){return Object.defineProperty({},\"a\",{get:function(){return 7}}).a!=7})},\"./node_modules/core-js/internals/document-create-element.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/is-object.js\"),a=n.document,s=i(a)&&i(a.createElement);e.exports=function(o){return s?a.createElement(o):{}}},\"./node_modules/core-js/internals/enum-bug-keys.js\":function(e,t){e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},\"./node_modules/core-js/internals/export.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\").f,a=r(\"./node_modules/core-js/internals/hide.js\"),s=r(\"./node_modules/core-js/internals/redefine.js\"),o=r(\"./node_modules/core-js/internals/set-global.js\"),c=r(\"./node_modules/core-js/internals/copy-constructor-properties.js\"),l=r(\"./node_modules/core-js/internals/is-forced.js\");e.exports=function(u,f){var d=u.target,h=u.global,p=u.stat,m,v,y,b,x,E;if(h?v=n:p?v=n[d]||o(d,{}):v=(n[d]||{}).prototype,v)for(y in f){if(x=f[y],u.noTargetGet?(E=i(v,y),b=E&&E.value):b=v[y],m=l(h?y:d+(p?\".\":\"#\")+y,u.forced),!m&&b!==void 0){if(typeof x==typeof b)continue;c(x,b)}(u.sham||b&&b.sham)&&a(x,\"sham\",!0),s(v,y,x,u)}}},\"./node_modules/core-js/internals/fails.js\":function(e,t){e.exports=function(r){try{return!!r()}catch(n){return!0}}},\"./node_modules/core-js/internals/function-to-string.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/shared.js\");e.exports=n(\"native-function-to-string\",Function.toString)},\"./node_modules/core-js/internals/get-iterator-method.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/classof.js\"),i=r(\"./node_modules/core-js/internals/iterators.js\"),a=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),s=a(\"iterator\");e.exports=function(o){if(o!=null)return o[s]||o[\"@@iterator\"]||i[n(o)]}},\"./node_modules/core-js/internals/global.js\":function(e,t,r){(function(n){var i=\"object\",a=function(s){return s&&s.Math==Math&&s};e.exports=a(typeof globalThis==i&&globalThis)||a(typeof window==i&&window)||a(typeof self==i&&self)||a(typeof n==i&&n)||Function(\"return this\")()}).call(this,r(\"./node_modules/webpack/buildin/global.js\"))},\"./node_modules/core-js/internals/has.js\":function(e,t){var r={}.hasOwnProperty;e.exports=function(n,i){return r.call(n,i)}},\"./node_modules/core-js/internals/hidden-keys.js\":function(e,t){e.exports={}},\"./node_modules/core-js/internals/hide.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/object-define-property.js\"),a=r(\"./node_modules/core-js/internals/create-property-descriptor.js\");e.exports=n?function(s,o,c){return i.f(s,o,a(1,c))}:function(s,o,c){return s[o]=c,s}},\"./node_modules/core-js/internals/html.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=n.document;e.exports=i&&i.documentElement},\"./node_modules/core-js/internals/ie8-dom-define.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/fails.js\"),a=r(\"./node_modules/core-js/internals/document-create-element.js\");e.exports=!n&&!i(function(){return Object.defineProperty(a(\"div\"),\"a\",{get:function(){return 7}}).a!=7})},\"./node_modules/core-js/internals/indexed-object.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\"),i=r(\"./node_modules/core-js/internals/classof-raw.js\"),a=\"\".split;e.exports=n(function(){return!Object(\"z\").propertyIsEnumerable(0)})?function(s){return i(s)==\"String\"?a.call(s,\"\"):Object(s)}:Object},\"./node_modules/core-js/internals/internal-state.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/native-weak-map.js\"),i=r(\"./node_modules/core-js/internals/global.js\"),a=r(\"./node_modules/core-js/internals/is-object.js\"),s=r(\"./node_modules/core-js/internals/hide.js\"),o=r(\"./node_modules/core-js/internals/has.js\"),c=r(\"./node_modules/core-js/internals/shared-key.js\"),l=r(\"./node_modules/core-js/internals/hidden-keys.js\"),u=i.WeakMap,f,d,h,p=function(_){return h(_)?d(_):f(_,{})},m=function(_){return function(k){var w;if(!a(k)||(w=d(k)).type!==_)throw TypeError(\"Incompatible receiver, \"+_+\" required\");return w}};if(n){var v=new u,y=v.get,b=v.has,x=v.set;f=function(_,k){return x.call(v,_,k),k},d=function(_){return y.call(v,_)||{}},h=function(_){return b.call(v,_)}}else{var E=c(\"state\");l[E]=!0,f=function(_,k){return s(_,E,k),k},d=function(_){return o(_,E)?_[E]:{}},h=function(_){return o(_,E)}}e.exports={set:f,get:d,has:h,enforce:p,getterFor:m}},\"./node_modules/core-js/internals/is-array-iterator-method.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),i=r(\"./node_modules/core-js/internals/iterators.js\"),a=n(\"iterator\"),s=Array.prototype;e.exports=function(o){return o!==void 0&&(i.Array===o||s[a]===o)}},\"./node_modules/core-js/internals/is-forced.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\"),i=/#|\\.prototype\\./,a=function(u,f){var d=o[s(u)];return d==l?!0:d==c?!1:typeof f==\"function\"?n(f):!!f},s=a.normalize=function(u){return String(u).replace(i,\".\").toLowerCase()},o=a.data={},c=a.NATIVE=\"N\",l=a.POLYFILL=\"P\";e.exports=a},\"./node_modules/core-js/internals/is-object.js\":function(e,t){e.exports=function(r){return typeof r==\"object\"?r!==null:typeof r==\"function\"}},\"./node_modules/core-js/internals/is-pure.js\":function(e,t){e.exports=!1},\"./node_modules/core-js/internals/iterators-core.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/object-get-prototype-of.js\"),i=r(\"./node_modules/core-js/internals/hide.js\"),a=r(\"./node_modules/core-js/internals/has.js\"),s=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),o=r(\"./node_modules/core-js/internals/is-pure.js\"),c=s(\"iterator\"),l=!1,u=function(){return this},f,d,h;[].keys&&(h=[].keys(),\"next\"in h?(d=n(n(h)),d!==Object.prototype&&(f=d)):l=!0),f==null&&(f={}),!o&&!a(f,c)&&i(f,c,u),e.exports={IteratorPrototype:f,BUGGY_SAFARI_ITERATORS:l}},\"./node_modules/core-js/internals/iterators.js\":function(e,t){e.exports={}},\"./node_modules/core-js/internals/native-symbol.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\");e.exports=!!Object.getOwnPropertySymbols&&!n(function(){return!String(Symbol())})},\"./node_modules/core-js/internals/native-weak-map.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/function-to-string.js\"),a=n.WeakMap;e.exports=typeof a==\"function\"&&/native code/.test(i.call(a))},\"./node_modules/core-js/internals/object-create.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/an-object.js\"),i=r(\"./node_modules/core-js/internals/object-define-properties.js\"),a=r(\"./node_modules/core-js/internals/enum-bug-keys.js\"),s=r(\"./node_modules/core-js/internals/hidden-keys.js\"),o=r(\"./node_modules/core-js/internals/html.js\"),c=r(\"./node_modules/core-js/internals/document-create-element.js\"),l=r(\"./node_modules/core-js/internals/shared-key.js\"),u=l(\"IE_PROTO\"),f=\"prototype\",d=function(){},h=function(){var p=c(\"iframe\"),m=a.length,v=\"<\",y=\"script\",b=\">\",x=\"java\"+y+\":\",E;for(p.style.display=\"none\",o.appendChild(p),p.src=String(x),E=p.contentWindow.document,E.open(),E.write(v+y+b+\"document.F=Object\"+v+\"/\"+y+b),E.close(),h=E.F;m--;)delete h[f][a[m]];return h()};e.exports=Object.create||function(m,v){var y;return m!==null?(d[f]=n(m),y=new d,d[f]=null,y[u]=m):y=h(),v===void 0?y:i(y,v)},s[u]=!0},\"./node_modules/core-js/internals/object-define-properties.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/object-define-property.js\"),a=r(\"./node_modules/core-js/internals/an-object.js\"),s=r(\"./node_modules/core-js/internals/object-keys.js\");e.exports=n?Object.defineProperties:function(c,l){a(c);for(var u=s(l),f=u.length,d=0,h;f>d;)i.f(c,h=u[d++],l[h]);return c}},\"./node_modules/core-js/internals/object-define-property.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/ie8-dom-define.js\"),a=r(\"./node_modules/core-js/internals/an-object.js\"),s=r(\"./node_modules/core-js/internals/to-primitive.js\"),o=Object.defineProperty;t.f=n?o:function(l,u,f){if(a(l),u=s(u,!0),a(f),i)try{return o(l,u,f)}catch(d){}if(\"get\"in f||\"set\"in f)throw TypeError(\"Accessors not supported\");return\"value\"in f&&(l[u]=f.value),l}},\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/object-property-is-enumerable.js\"),a=r(\"./node_modules/core-js/internals/create-property-descriptor.js\"),s=r(\"./node_modules/core-js/internals/to-indexed-object.js\"),o=r(\"./node_modules/core-js/internals/to-primitive.js\"),c=r(\"./node_modules/core-js/internals/has.js\"),l=r(\"./node_modules/core-js/internals/ie8-dom-define.js\"),u=Object.getOwnPropertyDescriptor;t.f=n?u:function(d,h){if(d=s(d),h=o(h,!0),l)try{return u(d,h)}catch(p){}if(c(d,h))return a(!i.f.call(d,h),d[h])}},\"./node_modules/core-js/internals/object-get-own-property-names.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/object-keys-internal.js\"),i=r(\"./node_modules/core-js/internals/enum-bug-keys.js\"),a=i.concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(o){return n(o,a)}},\"./node_modules/core-js/internals/object-get-own-property-symbols.js\":function(e,t){t.f=Object.getOwnPropertySymbols},\"./node_modules/core-js/internals/object-get-prototype-of.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/has.js\"),i=r(\"./node_modules/core-js/internals/to-object.js\"),a=r(\"./node_modules/core-js/internals/shared-key.js\"),s=r(\"./node_modules/core-js/internals/correct-prototype-getter.js\"),o=a(\"IE_PROTO\"),c=Object.prototype;e.exports=s?Object.getPrototypeOf:function(l){return l=i(l),n(l,o)?l[o]:typeof l.constructor==\"function\"&&l instanceof l.constructor?l.constructor.prototype:l instanceof Object?c:null}},\"./node_modules/core-js/internals/object-keys-internal.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/has.js\"),i=r(\"./node_modules/core-js/internals/to-indexed-object.js\"),a=r(\"./node_modules/core-js/internals/array-includes.js\"),s=r(\"./node_modules/core-js/internals/hidden-keys.js\"),o=a(!1);e.exports=function(c,l){var u=i(c),f=0,d=[],h;for(h in u)!n(s,h)&&n(u,h)&&d.push(h);for(;l.length>f;)n(u,h=l[f++])&&(~o(d,h)||d.push(h));return d}},\"./node_modules/core-js/internals/object-keys.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/object-keys-internal.js\"),i=r(\"./node_modules/core-js/internals/enum-bug-keys.js\");e.exports=Object.keys||function(s){return n(s,i)}},\"./node_modules/core-js/internals/object-property-is-enumerable.js\":function(e,t,r){\"use strict\";var n={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,a=i&&!n.call({1:2},1);t.f=a?function(o){var c=i(this,o);return!!c&&c.enumerable}:n},\"./node_modules/core-js/internals/object-set-prototype-of.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/validate-set-prototype-of-arguments.js\");e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var i=!1,a={},s;try{s=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set,s.call(a,[]),i=a instanceof Array}catch(o){}return function(c,l){return n(c,l),i?s.call(c,l):c.__proto__=l,c}}():void 0)},\"./node_modules/core-js/internals/own-keys.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/object-get-own-property-names.js\"),a=r(\"./node_modules/core-js/internals/object-get-own-property-symbols.js\"),s=r(\"./node_modules/core-js/internals/an-object.js\"),o=n.Reflect;e.exports=o&&o.ownKeys||function(l){var u=i.f(s(l)),f=a.f;return f?u.concat(f(l)):u}},\"./node_modules/core-js/internals/path.js\":function(e,t,r){e.exports=r(\"./node_modules/core-js/internals/global.js\")},\"./node_modules/core-js/internals/redefine.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/shared.js\"),a=r(\"./node_modules/core-js/internals/hide.js\"),s=r(\"./node_modules/core-js/internals/has.js\"),o=r(\"./node_modules/core-js/internals/set-global.js\"),c=r(\"./node_modules/core-js/internals/function-to-string.js\"),l=r(\"./node_modules/core-js/internals/internal-state.js\"),u=l.get,f=l.enforce,d=String(c).split(\"toString\");i(\"inspectSource\",function(h){return c.call(h)}),(e.exports=function(h,p,m,v){var y=v?!!v.unsafe:!1,b=v?!!v.enumerable:!1,x=v?!!v.noTargetGet:!1;if(typeof m==\"function\"&&(typeof p==\"string\"&&!s(m,\"name\")&&a(m,\"name\",p),f(m).source=d.join(typeof p==\"string\"?p:\"\")),h===n){b?h[p]=m:o(p,m);return}else y?!x&&h[p]&&(b=!0):delete h[p];b?h[p]=m:a(h,p,m)})(Function.prototype,\"toString\",function(){return typeof this==\"function\"&&u(this).source||c.call(this)})},\"./node_modules/core-js/internals/require-object-coercible.js\":function(e,t){e.exports=function(r){if(r==null)throw TypeError(\"Can't call method on \"+r);return r}},\"./node_modules/core-js/internals/set-global.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/hide.js\");e.exports=function(a,s){try{i(n,a,s)}catch(o){n[a]=s}return s}},\"./node_modules/core-js/internals/set-to-string-tag.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/object-define-property.js\").f,i=r(\"./node_modules/core-js/internals/has.js\"),a=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),s=a(\"toStringTag\");e.exports=function(o,c,l){o&&!i(o=l?o:o.prototype,s)&&n(o,s,{configurable:!0,value:c})}},\"./node_modules/core-js/internals/shared-key.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/shared.js\"),i=r(\"./node_modules/core-js/internals/uid.js\"),a=n(\"keys\");e.exports=function(s){return a[s]||(a[s]=i(s))}},\"./node_modules/core-js/internals/shared.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/set-global.js\"),a=r(\"./node_modules/core-js/internals/is-pure.js\"),s=\"__core-js_shared__\",o=n[s]||i(s,{});(e.exports=function(c,l){return o[c]||(o[c]=l!==void 0?l:{})})(\"versions\",[]).push({version:\"3.1.3\",mode:a?\"pure\":\"global\",copyright:\"\\xA9 2019 Denis Pushkarev (zloirock.ru)\"})},\"./node_modules/core-js/internals/string-at.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/to-integer.js\"),i=r(\"./node_modules/core-js/internals/require-object-coercible.js\");e.exports=function(a,s,o){var c=String(i(a)),l=n(s),u=c.length,f,d;return l<0||l>=u?o?\"\":void 0:(f=c.charCodeAt(l),f<55296||f>56319||l+1===u||(d=c.charCodeAt(l+1))<56320||d>57343?o?c.charAt(l):f:o?c.slice(l,l+2):(f-55296<<10)+(d-56320)+65536)}},\"./node_modules/core-js/internals/to-absolute-index.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/to-integer.js\"),i=Math.max,a=Math.min;e.exports=function(s,o){var c=n(s);return c<0?i(c+o,0):a(c,o)}},\"./node_modules/core-js/internals/to-indexed-object.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/indexed-object.js\"),i=r(\"./node_modules/core-js/internals/require-object-coercible.js\");e.exports=function(a){return n(i(a))}},\"./node_modules/core-js/internals/to-integer.js\":function(e,t){var r=Math.ceil,n=Math.floor;e.exports=function(i){return isNaN(i=+i)?0:(i>0?n:r)(i)}},\"./node_modules/core-js/internals/to-length.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/to-integer.js\"),i=Math.min;e.exports=function(a){return a>0?i(n(a),9007199254740991):0}},\"./node_modules/core-js/internals/to-object.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/require-object-coercible.js\");e.exports=function(i){return Object(n(i))}},\"./node_modules/core-js/internals/to-primitive.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/is-object.js\");e.exports=function(i,a){if(!n(i))return i;var s,o;if(a&&typeof(s=i.toString)==\"function\"&&!n(o=s.call(i))||typeof(s=i.valueOf)==\"function\"&&!n(o=s.call(i))||!a&&typeof(s=i.toString)==\"function\"&&!n(o=s.call(i)))return o;throw TypeError(\"Can't convert object to primitive value\")}},\"./node_modules/core-js/internals/uid.js\":function(e,t){var r=0,n=Math.random();e.exports=function(i){return\"Symbol(\".concat(i===void 0?\"\":i,\")_\",(++r+n).toString(36))}},\"./node_modules/core-js/internals/validate-set-prototype-of-arguments.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/is-object.js\"),i=r(\"./node_modules/core-js/internals/an-object.js\");e.exports=function(a,s){if(i(a),!n(s)&&s!==null)throw TypeError(\"Can't set \"+String(s)+\" as a prototype\")}},\"./node_modules/core-js/internals/well-known-symbol.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/shared.js\"),a=r(\"./node_modules/core-js/internals/uid.js\"),s=r(\"./node_modules/core-js/internals/native-symbol.js\"),o=n.Symbol,c=i(\"wks\");e.exports=function(l){return c[l]||(c[l]=s&&o[l]||(s?o:a)(\"Symbol.\"+l))}},\"./node_modules/core-js/modules/es.array.from.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/export.js\"),i=r(\"./node_modules/core-js/internals/array-from.js\"),a=r(\"./node_modules/core-js/internals/check-correctness-of-iteration.js\"),s=!a(function(o){Array.from(o)});n({target:\"Array\",stat:!0,forced:s},{from:i})},\"./node_modules/core-js/modules/es.string.iterator.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/string-at.js\"),i=r(\"./node_modules/core-js/internals/internal-state.js\"),a=r(\"./node_modules/core-js/internals/define-iterator.js\"),s=\"String Iterator\",o=i.set,c=i.getterFor(s);a(String,\"String\",function(l){o(this,{type:s,string:String(l),index:0})},function(){var u=c(this),f=u.string,d=u.index,h;return d>=f.length?{value:void 0,done:!0}:(h=n(f,d,!0),u.index+=h.length,{value:h,done:!1})})},\"./node_modules/webpack/buildin/global.js\":function(e,t){var r;r=function(){return this}();try{r=r||Function(\"return this\")()||(0,eval)(\"this\")}catch(n){typeof window==\"object\"&&(r=window)}e.exports=r},\"./src/default-attrs.json\":function(e){e.exports={xmlns:\"http://www.w3.org/2000/svg\",width:24,height:24,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",\"stroke-width\":2,\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},\"./src/icon.js\":function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=Object.assign||function(h){for(var p=1;p<arguments.length;p++){var m=arguments[p];for(var v in m)Object.prototype.hasOwnProperty.call(m,v)&&(h[v]=m[v])}return h},i=function(){function h(p,m){for(var v=0;v<m.length;v++){var y=m[v];y.enumerable=y.enumerable||!1,y.configurable=!0,\"value\"in y&&(y.writable=!0),Object.defineProperty(p,y.key,y)}}return function(p,m,v){return m&&h(p.prototype,m),v&&h(p,v),p}}(),a=r(\"./node_modules/classnames/dedupe.js\"),s=l(a),o=r(\"./src/default-attrs.json\"),c=l(o);function l(h){return h&&h.__esModule?h:{default:h}}function u(h,p){if(!(h instanceof p))throw new TypeError(\"Cannot call a class as a function\")}var f=function(){function h(p,m){var v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];u(this,h),this.name=p,this.contents=m,this.tags=v,this.attrs=n({},c.default,{class:\"feather feather-\"+p})}return i(h,[{key:\"toSvg\",value:function(){var m=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},v=n({},this.attrs,m,{class:(0,s.default)(this.attrs.class,m.class)});return\"<svg \"+d(v)+\">\"+this.contents+\"</svg>\"}},{key:\"toString\",value:function(){return this.contents}}]),h}();function d(h){return Object.keys(h).map(function(p){return p+'=\"'+h[p]+'\"'}).join(\" \")}t.default=f},\"./src/icons.js\":function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=r(\"./src/icon.js\"),i=l(n),a=r(\"./dist/icons.json\"),s=l(a),o=r(\"./src/tags.json\"),c=l(o);function l(u){return u&&u.__esModule?u:{default:u}}t.default=Object.keys(s.default).map(function(u){return new i.default(u,s.default[u],c.default[u])}).reduce(function(u,f){return u[f.name]=f,u},{})},\"./src/index.js\":function(e,t,r){\"use strict\";var n=r(\"./src/icons.js\"),i=l(n),a=r(\"./src/to-svg.js\"),s=l(a),o=r(\"./src/replace.js\"),c=l(o);function l(u){return u&&u.__esModule?u:{default:u}}e.exports={icons:i.default,toSvg:s.default,replace:c.default}},\"./src/replace.js\":function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=Object.assign||function(d){for(var h=1;h<arguments.length;h++){var p=arguments[h];for(var m in p)Object.prototype.hasOwnProperty.call(p,m)&&(d[m]=p[m])}return d},i=r(\"./node_modules/classnames/dedupe.js\"),a=c(i),s=r(\"./src/icons.js\"),o=c(s);function c(d){return d&&d.__esModule?d:{default:d}}function l(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(typeof document==\"undefined\")throw new Error(\"`feather.replace()` only works in a browser environment.\");var h=document.querySelectorAll(\"[data-feather]\");Array.from(h).forEach(function(p){return u(p,d)})}function u(d){var h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},p=f(d),m=p[\"data-feather\"];if(delete p[\"data-feather\"],o.default[m]===void 0){console.warn(\"feather: '\"+m+\"' is not a valid icon\");return}var v=o.default[m].toSvg(n({},h,p,{class:(0,a.default)(h.class,p.class)})),y=new DOMParser().parseFromString(v,\"image/svg+xml\"),b=y.querySelector(\"svg\");d.parentNode.replaceChild(b,d)}function f(d){return Array.from(d.attributes).reduce(function(h,p){return h[p.name]=p.value,h},{})}t.default=l},\"./src/tags.json\":function(e){e.exports={activity:[\"pulse\",\"health\",\"action\",\"motion\"],airplay:[\"stream\",\"cast\",\"mirroring\"],\"alert-circle\":[\"warning\",\"alert\",\"danger\"],\"alert-octagon\":[\"warning\",\"alert\",\"danger\"],\"alert-triangle\":[\"warning\",\"alert\",\"danger\"],\"align-center\":[\"text alignment\",\"center\"],\"align-justify\":[\"text alignment\",\"justified\"],\"align-left\":[\"text alignment\",\"left\"],\"align-right\":[\"text alignment\",\"right\"],anchor:[],archive:[\"index\",\"box\"],\"at-sign\":[\"mention\",\"at\",\"email\",\"message\"],award:[\"achievement\",\"badge\"],aperture:[\"camera\",\"photo\"],\"bar-chart\":[\"statistics\",\"diagram\",\"graph\"],\"bar-chart-2\":[\"statistics\",\"diagram\",\"graph\"],battery:[\"power\",\"electricity\"],\"battery-charging\":[\"power\",\"electricity\"],bell:[\"alarm\",\"notification\",\"sound\"],\"bell-off\":[\"alarm\",\"notification\",\"silent\"],bluetooth:[\"wireless\"],\"book-open\":[\"read\",\"library\"],book:[\"read\",\"dictionary\",\"booklet\",\"magazine\",\"library\"],bookmark:[\"read\",\"clip\",\"marker\",\"tag\"],box:[\"cube\"],briefcase:[\"work\",\"bag\",\"baggage\",\"folder\"],calendar:[\"date\"],camera:[\"photo\"],cast:[\"chromecast\",\"airplay\"],\"chevron-down\":[\"expand\"],\"chevron-up\":[\"collapse\"],circle:[\"off\",\"zero\",\"record\"],clipboard:[\"copy\"],clock:[\"time\",\"watch\",\"alarm\"],\"cloud-drizzle\":[\"weather\",\"shower\"],\"cloud-lightning\":[\"weather\",\"bolt\"],\"cloud-rain\":[\"weather\"],\"cloud-snow\":[\"weather\",\"blizzard\"],cloud:[\"weather\"],codepen:[\"logo\"],codesandbox:[\"logo\"],code:[\"source\",\"programming\"],coffee:[\"drink\",\"cup\",\"mug\",\"tea\",\"cafe\",\"hot\",\"beverage\"],columns:[\"layout\"],command:[\"keyboard\",\"cmd\",\"terminal\",\"prompt\"],compass:[\"navigation\",\"safari\",\"travel\",\"direction\"],copy:[\"clone\",\"duplicate\"],\"corner-down-left\":[\"arrow\",\"return\"],\"corner-down-right\":[\"arrow\"],\"corner-left-down\":[\"arrow\"],\"corner-left-up\":[\"arrow\"],\"corner-right-down\":[\"arrow\"],\"corner-right-up\":[\"arrow\"],\"corner-up-left\":[\"arrow\"],\"corner-up-right\":[\"arrow\"],cpu:[\"processor\",\"technology\"],\"credit-card\":[\"purchase\",\"payment\",\"cc\"],crop:[\"photo\",\"image\"],crosshair:[\"aim\",\"target\"],database:[\"storage\",\"memory\"],delete:[\"remove\"],disc:[\"album\",\"cd\",\"dvd\",\"music\"],\"dollar-sign\":[\"currency\",\"money\",\"payment\"],droplet:[\"water\"],edit:[\"pencil\",\"change\"],\"edit-2\":[\"pencil\",\"change\"],\"edit-3\":[\"pencil\",\"change\"],eye:[\"view\",\"watch\"],\"eye-off\":[\"view\",\"watch\",\"hide\",\"hidden\"],\"external-link\":[\"outbound\"],facebook:[\"logo\",\"social\"],\"fast-forward\":[\"music\"],figma:[\"logo\",\"design\",\"tool\"],\"file-minus\":[\"delete\",\"remove\",\"erase\"],\"file-plus\":[\"add\",\"create\",\"new\"],\"file-text\":[\"data\",\"txt\",\"pdf\"],film:[\"movie\",\"video\"],filter:[\"funnel\",\"hopper\"],flag:[\"report\"],\"folder-minus\":[\"directory\"],\"folder-plus\":[\"directory\"],folder:[\"directory\"],framer:[\"logo\",\"design\",\"tool\"],frown:[\"emoji\",\"face\",\"bad\",\"sad\",\"emotion\"],gift:[\"present\",\"box\",\"birthday\",\"party\"],\"git-branch\":[\"code\",\"version control\"],\"git-commit\":[\"code\",\"version control\"],\"git-merge\":[\"code\",\"version control\"],\"git-pull-request\":[\"code\",\"version control\"],github:[\"logo\",\"version control\"],gitlab:[\"logo\",\"version control\"],globe:[\"world\",\"browser\",\"language\",\"translate\"],\"hard-drive\":[\"computer\",\"server\",\"memory\",\"data\"],hash:[\"hashtag\",\"number\",\"pound\"],headphones:[\"music\",\"audio\",\"sound\"],heart:[\"like\",\"love\",\"emotion\"],\"help-circle\":[\"question mark\"],hexagon:[\"shape\",\"node.js\",\"logo\"],home:[\"house\",\"living\"],image:[\"picture\"],inbox:[\"email\"],instagram:[\"logo\",\"camera\"],key:[\"password\",\"login\",\"authentication\",\"secure\"],layers:[\"stack\"],layout:[\"window\",\"webpage\"],\"life-buoy\":[\"help\",\"life ring\",\"support\"],link:[\"chain\",\"url\"],\"link-2\":[\"chain\",\"url\"],linkedin:[\"logo\",\"social media\"],list:[\"options\"],lock:[\"security\",\"password\",\"secure\"],\"log-in\":[\"sign in\",\"arrow\",\"enter\"],\"log-out\":[\"sign out\",\"arrow\",\"exit\"],mail:[\"email\",\"message\"],\"map-pin\":[\"location\",\"navigation\",\"travel\",\"marker\"],map:[\"location\",\"navigation\",\"travel\"],maximize:[\"fullscreen\"],\"maximize-2\":[\"fullscreen\",\"arrows\",\"expand\"],meh:[\"emoji\",\"face\",\"neutral\",\"emotion\"],menu:[\"bars\",\"navigation\",\"hamburger\"],\"message-circle\":[\"comment\",\"chat\"],\"message-square\":[\"comment\",\"chat\"],\"mic-off\":[\"record\",\"sound\",\"mute\"],mic:[\"record\",\"sound\",\"listen\"],minimize:[\"exit fullscreen\",\"close\"],\"minimize-2\":[\"exit fullscreen\",\"arrows\",\"close\"],minus:[\"subtract\"],monitor:[\"tv\",\"screen\",\"display\"],moon:[\"dark\",\"night\"],\"more-horizontal\":[\"ellipsis\"],\"more-vertical\":[\"ellipsis\"],\"mouse-pointer\":[\"arrow\",\"cursor\"],move:[\"arrows\"],music:[\"note\"],navigation:[\"location\",\"travel\"],\"navigation-2\":[\"location\",\"travel\"],octagon:[\"stop\"],package:[\"box\",\"container\"],paperclip:[\"attachment\"],pause:[\"music\",\"stop\"],\"pause-circle\":[\"music\",\"audio\",\"stop\"],\"pen-tool\":[\"vector\",\"drawing\"],percent:[\"discount\"],\"phone-call\":[\"ring\"],\"phone-forwarded\":[\"call\"],\"phone-incoming\":[\"call\"],\"phone-missed\":[\"call\"],\"phone-off\":[\"call\",\"mute\"],\"phone-outgoing\":[\"call\"],phone:[\"call\"],play:[\"music\",\"start\"],\"pie-chart\":[\"statistics\",\"diagram\"],\"play-circle\":[\"music\",\"start\"],plus:[\"add\",\"new\"],\"plus-circle\":[\"add\",\"new\"],\"plus-square\":[\"add\",\"new\"],pocket:[\"logo\",\"save\"],power:[\"on\",\"off\"],printer:[\"fax\",\"office\",\"device\"],radio:[\"signal\"],\"refresh-cw\":[\"synchronise\",\"arrows\"],\"refresh-ccw\":[\"arrows\"],repeat:[\"loop\",\"arrows\"],rewind:[\"music\"],\"rotate-ccw\":[\"arrow\"],\"rotate-cw\":[\"arrow\"],rss:[\"feed\",\"subscribe\"],save:[\"floppy disk\"],scissors:[\"cut\"],search:[\"find\",\"magnifier\",\"magnifying glass\"],send:[\"message\",\"mail\",\"email\",\"paper airplane\",\"paper aeroplane\"],settings:[\"cog\",\"edit\",\"gear\",\"preferences\"],\"share-2\":[\"network\",\"connections\"],shield:[\"security\",\"secure\"],\"shield-off\":[\"security\",\"insecure\"],\"shopping-bag\":[\"ecommerce\",\"cart\",\"purchase\",\"store\"],\"shopping-cart\":[\"ecommerce\",\"cart\",\"purchase\",\"store\"],shuffle:[\"music\"],\"skip-back\":[\"music\"],\"skip-forward\":[\"music\"],slack:[\"logo\"],slash:[\"ban\",\"no\"],sliders:[\"settings\",\"controls\"],smartphone:[\"cellphone\",\"device\"],smile:[\"emoji\",\"face\",\"happy\",\"good\",\"emotion\"],speaker:[\"audio\",\"music\"],star:[\"bookmark\",\"favorite\",\"like\"],\"stop-circle\":[\"media\",\"music\"],sun:[\"brightness\",\"weather\",\"light\"],sunrise:[\"weather\",\"time\",\"morning\",\"day\"],sunset:[\"weather\",\"time\",\"evening\",\"night\"],tablet:[\"device\"],tag:[\"label\"],target:[\"logo\",\"bullseye\"],terminal:[\"code\",\"command line\",\"prompt\"],thermometer:[\"temperature\",\"celsius\",\"fahrenheit\",\"weather\"],\"thumbs-down\":[\"dislike\",\"bad\",\"emotion\"],\"thumbs-up\":[\"like\",\"good\",\"emotion\"],\"toggle-left\":[\"on\",\"off\",\"switch\"],\"toggle-right\":[\"on\",\"off\",\"switch\"],tool:[\"settings\",\"spanner\"],trash:[\"garbage\",\"delete\",\"remove\",\"bin\"],\"trash-2\":[\"garbage\",\"delete\",\"remove\",\"bin\"],triangle:[\"delta\"],truck:[\"delivery\",\"van\",\"shipping\",\"transport\",\"lorry\"],tv:[\"television\",\"stream\"],twitch:[\"logo\"],twitter:[\"logo\",\"social\"],type:[\"text\"],umbrella:[\"rain\",\"weather\"],unlock:[\"security\"],\"user-check\":[\"followed\",\"subscribed\"],\"user-minus\":[\"delete\",\"remove\",\"unfollow\",\"unsubscribe\"],\"user-plus\":[\"new\",\"add\",\"create\",\"follow\",\"subscribe\"],\"user-x\":[\"delete\",\"remove\",\"unfollow\",\"unsubscribe\",\"unavailable\"],user:[\"person\",\"account\"],users:[\"group\"],\"video-off\":[\"camera\",\"movie\",\"film\"],video:[\"camera\",\"movie\",\"film\"],voicemail:[\"phone\"],volume:[\"music\",\"sound\",\"mute\"],\"volume-1\":[\"music\",\"sound\"],\"volume-2\":[\"music\",\"sound\"],\"volume-x\":[\"music\",\"sound\",\"mute\"],watch:[\"clock\",\"time\"],\"wifi-off\":[\"disabled\"],wifi:[\"connection\",\"signal\",\"wireless\"],wind:[\"weather\",\"air\"],\"x-circle\":[\"cancel\",\"close\",\"delete\",\"remove\",\"times\",\"clear\"],\"x-octagon\":[\"delete\",\"stop\",\"alert\",\"warning\",\"times\",\"clear\"],\"x-square\":[\"cancel\",\"close\",\"delete\",\"remove\",\"times\",\"clear\"],x:[\"cancel\",\"close\",\"delete\",\"remove\",\"times\",\"clear\"],youtube:[\"logo\",\"video\",\"play\"],\"zap-off\":[\"flash\",\"camera\",\"lightning\"],zap:[\"flash\",\"camera\",\"lightning\"],\"zoom-in\":[\"magnifying glass\"],\"zoom-out\":[\"magnifying glass\"]}},\"./src/to-svg.js\":function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=r(\"./src/icons.js\"),i=a(n);function a(o){return o&&o.__esModule?o:{default:o}}function s(o){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(console.warn(\"feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead.\"),!o)throw new Error(\"The required `key` (icon name) parameter is missing.\");if(!i.default[o])throw new Error(\"No icon matching '\"+o+\"'. See the complete list of icons at https://feathericons.com\");return i.default[o].toSvg(c)}t.default=s},0:function(e,t,r){r(\"./node_modules/core-js/es/array/from.js\"),e.exports=r(\"./src/index.js\")}})})});var jH={};XP(jH,{default:()=>Jd});module.exports=ZP(jH);g();g();var Jo=ze(d1(),1),Sp=ze(_1(),1),Jw=ze(S1(),1),du=ze(uw(),1),tu=ze(hw(),1),Qw=ze(xw(),1),Jr=ze(Ew(),1),e2=ze(Pw(),1),_e=class e extends Error{constructor(t){super(t),this.caller=\"\"}toJSON(){return{code:this.code,data:this.data,caller:this.caller,message:this.message,stack:this.stack}}fromJSON(t){let r=new e(t.message);return r.code=t.code,r.data=t.data,r.caller=t.caller,r.stack=t.stack,r}get isIsomorphicGitError(){return!0}},Qo=class e extends _e{constructor(t){super(`Modifying the index is not possible because you have unmerged files: ${t.toString}. Fix them up in the work tree, and then use 'git add/rm as appropriate to mark resolution and make a commit.`),this.code=this.name=e.code,this.data={filepaths:t}}};Qo.code=\"UnmergedPathsError\";var le=class e extends _e{constructor(t){super(`An internal error caused this command to fail. Please file a bug report at https://github.com/isomorphic-git/isomorphic-git/issues with this error message: ${t}`),this.code=this.name=e.code,this.data={message:t}}};le.code=\"InternalError\";var cs=class e extends _e{constructor(t){super(`The filepath \"${t}\" contains unsafe character sequences`),this.code=this.name=e.code,this.data={filepath:t}}};cs.code=\"UnsafeFilepathError\";var Ir=class{constructor(t){this.buffer=t,this._start=0}eof(){return this._start>=this.buffer.length}tell(){return this._start}seek(t){this._start=t}slice(t){let r=this.buffer.slice(this._start,this._start+t);return this._start+=t,r}toString(t,r){let n=this.buffer.toString(t,this._start,this._start+r);return this._start+=r,n}write(t,r,n){let i=this.buffer.write(t,this._start,r,n);return this._start+=r,i}copy(t,r,n){let i=t.copy(this.buffer,this._start,r,n);return this._start+=i,i}readUInt8(){let t=this.buffer.readUInt8(this._start);return this._start+=1,t}writeUInt8(t){let r=this.buffer.writeUInt8(t,this._start);return this._start+=1,r}readUInt16BE(){let t=this.buffer.readUInt16BE(this._start);return this._start+=2,t}writeUInt16BE(t){let r=this.buffer.writeUInt16BE(t,this._start);return this._start+=2,r}readUInt32BE(){let t=this.buffer.readUInt32BE(this._start);return this._start+=4,t}writeUInt32BE(t){let r=this.buffer.writeUInt32BE(t,this._start);return this._start+=4,r}};function hu(e,t){return-(e<t)||+(e>t)}function t2(e,t){return hu(e.path,t.path)}function r2(e){let t=e>0?e>>12:0;t!==4&&t!==8&&t!==10&&t!==14&&(t=8);let r=e&511;return r&73?r=493:r=420,t!==8&&(r=0),(t<<12)+r}var _n=2**32;function Rw(e,t,r,n){if(e!==void 0&&t!==void 0)return[e,t];r===void 0&&(r=n.valueOf());let i=Math.floor(r/1e3),a=(r-i*1e3)*1e6;return[i,a]}function us(e){let[t,r]=Rw(e.ctimeSeconds,e.ctimeNanoseconds,e.ctimeMs,e.ctime),[n,i]=Rw(e.mtimeSeconds,e.mtimeNanoseconds,e.mtimeMs,e.mtime);return{ctimeSeconds:t%_n,ctimeNanoseconds:r%_n,mtimeSeconds:n%_n,mtimeNanoseconds:i%_n,dev:e.dev%_n,ino:e.ino%_n,mode:r2(e.mode%_n),uid:e.uid%_n,gid:e.gid%_n,size:e.size>-1?e.size%_n:0}}function J6(e){let t=\"\";for(let r of new Uint8Array(e))r<16&&(t+=\"0\"),t+=r.toString(16);return t}var tp=null;async function Gn(e){return tp===null&&(tp=await eM()),tp?n2(e):Q6(e)}function Q6(e){return new Sp.default().update(e).digest(\"hex\")}async function n2(e){let t=await crypto.subtle.digest(\"SHA-1\",e);return J6(t)}async function eM(){try{if(await n2(new Uint8Array([]))===\"da39a3ee5e6b4b0d3255bfef95601890afd80709\")return!0}catch(e){}return!1}function tM(e){return{assumeValid:!!(e&32768),extended:!!(e&16384),stage:(e&12288)>>12,nameLength:e&4095}}function rM(e){let t=e.flags;return t.extended=!1,t.nameLength=Math.min(Buffer.from(e.path).length,4095),(t.assumeValid?32768:0)+(t.extended?16384:0)+((t.stage&3)<<12)+(t.nameLength&4095)}var fp=class e{constructor(t,r){this._dirty=!1,this._unmergedPaths=r||new Set,this._entries=t||new Map}_addEntry(t){if(t.flags.stage===0)t.stages=[t],this._entries.set(t.path,t),this._unmergedPaths.delete(t.path);else{let r=this._entries.get(t.path);r||(this._entries.set(t.path,t),r=t),r.stages[t.flags.stage]=t,this._unmergedPaths.add(t.path)}}static async from(t){if(Buffer.isBuffer(t))return e.fromBuffer(t);if(t===null)return new e(null);throw new le(\"invalid type passed to GitIndex.from\")}static async fromBuffer(t){if(t.length===0)throw new le(\"Index file is empty (.git/index)\");let r=new e,n=new Ir(t),i=n.toString(\"utf8\",4);if(i!==\"DIRC\")throw new le(`Invalid dircache magic file number: ${i}`);let a=await Gn(t.slice(0,-20)),s=t.slice(-20).toString(\"hex\");if(s!==a)throw new le(`Invalid checksum in GitIndex buffer: expected ${s} but saw ${a}`);let o=n.readUInt32BE();if(o!==2)throw new le(`Unsupported dircache version: ${o}`);let c=n.readUInt32BE(),l=0;for(;!n.eof()&&l<c;){let u={};u.ctimeSeconds=n.readUInt32BE(),u.ctimeNanoseconds=n.readUInt32BE(),u.mtimeSeconds=n.readUInt32BE(),u.mtimeNanoseconds=n.readUInt32BE(),u.dev=n.readUInt32BE(),u.ino=n.readUInt32BE(),u.mode=n.readUInt32BE(),u.uid=n.readUInt32BE(),u.gid=n.readUInt32BE(),u.size=n.readUInt32BE(),u.oid=n.slice(20).toString(\"hex\");let f=n.readUInt16BE();u.flags=tM(f);let d=t.indexOf(0,n.tell()+1)-n.tell();if(d<1)throw new le(`Got a path length of: ${d}`);if(u.path=n.toString(\"utf8\",d),u.path.includes(\"..\\\\\")||u.path.includes(\"../\"))throw new cs(u.path);let h=8-(n.tell()-12)%8;for(h===0&&(h=8);h--;){let p=n.readUInt8();if(p!==0)throw new le(`Expected 1-8 null characters but got '${p}' after ${u.path}`);if(n.eof())throw new le(\"Unexpected end of file\")}u.stages=[],r._addEntry(u),l++}return r}get unmergedPaths(){return[...this._unmergedPaths]}get entries(){return[...this._entries.values()].sort(t2)}get entriesMap(){return this._entries}get entriesFlat(){return[...this.entries].flatMap(t=>t.stages.length>1?t.stages.filter(r=>r):t)}*[Symbol.iterator](){for(let t of this.entries)yield t}insert({filepath:t,stats:r,oid:n,stage:i=0}){r||(r={ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,mode:0,uid:0,gid:0,size:0}),r=us(r);let a=Buffer.from(t),s={ctimeSeconds:r.ctimeSeconds,ctimeNanoseconds:r.ctimeNanoseconds,mtimeSeconds:r.mtimeSeconds,mtimeNanoseconds:r.mtimeNanoseconds,dev:r.dev,ino:r.ino,mode:r.mode||33188,uid:r.uid,gid:r.gid,size:r.size,path:t,oid:n,flags:{assumeValid:!1,extended:!1,stage:i,nameLength:a.length<4095?a.length:4095},stages:[]};this._addEntry(s),this._dirty=!0}delete({filepath:t}){if(this._entries.has(t))this._entries.delete(t);else for(let r of this._entries.keys())r.startsWith(t+\"/\")&&this._entries.delete(r);this._unmergedPaths.has(t)&&this._unmergedPaths.delete(t),this._dirty=!0}clear(){this._entries.clear(),this._dirty=!0}has({filepath:t}){return this._entries.has(t)}render(){return this.entries.map(t=>`${t.mode.toString(8)} ${t.oid}    ${t.path}`).join(`\n`)}static async _entryToBuffer(t){let r=Buffer.from(t.path),n=Math.ceil((62+r.length+1)/8)*8,i=Buffer.alloc(n),a=new Ir(i),s=us(t);return a.writeUInt32BE(s.ctimeSeconds),a.writeUInt32BE(s.ctimeNanoseconds),a.writeUInt32BE(s.mtimeSeconds),a.writeUInt32BE(s.mtimeNanoseconds),a.writeUInt32BE(s.dev),a.writeUInt32BE(s.ino),a.writeUInt32BE(s.mode),a.writeUInt32BE(s.uid),a.writeUInt32BE(s.gid),a.writeUInt32BE(s.size),a.write(t.oid,20,\"hex\"),a.writeUInt16BE(rM(t)),a.write(t.path,r.length,\"utf8\"),i}async toObject(){let t=Buffer.alloc(12),r=new Ir(t);r.write(\"DIRC\",4,\"utf8\"),r.writeUInt32BE(2),r.writeUInt32BE(this.entriesFlat.length);let n=[];for(let o of this.entries)if(n.push(e._entryToBuffer(o)),o.stages.length>1)for(let c of o.stages)c&&c!==o&&n.push(e._entryToBuffer(c));n=await Promise.all(n);let i=Buffer.concat(n),a=Buffer.concat([t,i]),s=await Gn(a);return Buffer.concat([a,Buffer.from(s,\"hex\")])}};function ru(e,t,r=!0,n=!0){let i=us(e),a=us(t);return r&&i.mode!==a.mode||i.mtimeSeconds!==a.mtimeSeconds||i.ctimeSeconds!==a.ctimeSeconds||i.uid!==a.uid||i.gid!==a.gid||n&&i.ino!==a.ino||i.size!==a.size}var rp=null,os=Symbol(\"IndexCache\");function nM(){return{map:new Map,stats:new Map}}async function iM(e,t,r){let n=await e.lstat(t),i=await e.read(t),a=await fp.from(i);r.map.set(t,a),r.stats.set(t,n)}async function aM(e,t,r){let n=r.stats.get(t);if(n===void 0)return!0;let i=await e.lstat(t);return n===null||i===null?!1:ru(n,i)}var mt=class{static async acquire({fs:t,gitdir:r,cache:n,allowUnmerged:i=!0},a){n[os]||(n[os]=nM());let s=`${r}/index`;rp===null&&(rp=new Jo.default({maxPending:1/0}));let o,c=[];return await rp.acquire(s,async()=>{await aM(t,s,n[os])&&await iM(t,s,n[os]);let l=n[os].map.get(s);if(c=l.unmergedPaths,c.length&&!i)throw new Qo(c);if(o=await a(l),l._dirty){let u=await l.toObject();await t.write(s,u),n[os].stats.set(s,await t.lstat(s)),l._dirty=!1}}),o}};function nu(e){let t=Math.max(e.lastIndexOf(\"/\"),e.lastIndexOf(\"\\\\\"));return t>-1&&(e=e.slice(t+1)),e}function fs(e){let t=Math.max(e.lastIndexOf(\"/\"),e.lastIndexOf(\"\\\\\"));return t===-1?\".\":t===0?\"/\":e.slice(0,t)}function i2(e){let t=new Map,r=function(i){if(!t.has(i)){let a={type:\"tree\",fullpath:i,basename:nu(i),metadata:{},children:[]};t.set(i,a),a.parent=r(fs(i)),a.parent&&a.parent!==a&&a.parent.children.push(a)}return t.get(i)},n=function(i,a){if(!t.has(i)){let s={type:\"blob\",fullpath:i,basename:nu(i),metadata:a,parent:r(fs(i)),children:[]};s.parent&&s.parent.children.push(s),t.set(i,s)}return t.get(i)};r(\".\");for(let i of e)n(i.path,i);return t}function sM(e){switch(e){case 16384:return\"tree\";case 33188:return\"blob\";case 33261:return\"blob\";case 40960:return\"blob\";case 57344:return\"commit\"}throw new le(`Unexpected GitTree entry mode: ${e.toString(8)}`)}var dp=class{constructor({fs:t,gitdir:r,cache:n}){this.treePromise=mt.acquire({fs:t,gitdir:r,cache:n},async function(a){return i2(a.entries)});let i=this;this.ConstructEntry=class{constructor(s){this._fullpath=s,this._type=!1,this._mode=!1,this._stat=!1,this._oid=!1}async type(){return i.type(this)}async mode(){return i.mode(this)}async stat(){return i.stat(this)}async content(){return i.content(this)}async oid(){return i.oid(this)}}}async readdir(t){let r=t._fullpath,i=(await this.treePromise).get(r);if(!i||i.type===\"blob\")return null;if(i.type!==\"tree\")throw new Error(`ENOTDIR: not a directory, scandir '${r}'`);let a=i.children.map(s=>s.fullpath);return a.sort(hu),a}async type(t){return t._type===!1&&await t.stat(),t._type}async mode(t){return t._mode===!1&&await t.stat(),t._mode}async stat(t){if(t._stat===!1){let n=(await this.treePromise).get(t._fullpath);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t._fullpath}'`);let i=n.type===\"tree\"?{}:us(n.metadata);t._type=n.type===\"tree\"?\"tree\":sM(i.mode),t._mode=i.mode,n.type===\"tree\"?t._stat=void 0:t._stat=i}return t._stat}async content(t){}async oid(t){if(t._oid===!1){let n=(await this.treePromise).get(t._fullpath);t._oid=n.metadata.oid}return t._oid}},pu=Symbol(\"GitWalkSymbol\");function mu(){let e=Object.create(null);return Object.defineProperty(e,pu,{value:function({fs:t,gitdir:r,cache:n}){return new dp({fs:t,gitdir:r,cache:n})}}),Object.freeze(e),e}var Ne=class e extends _e{constructor(t){super(`Could not find ${t}.`),this.code=this.name=e.code,this.data={what:t}}};Ne.code=\"NotFoundError\";var Gt=class e extends _e{constructor(t,r,n,i){super(`Object ${t} ${i?`at ${i}`:\"\"}was anticipated to be a ${n} but it is a ${r}.`),this.code=this.name=e.code,this.data={oid:t,actual:r,expected:n,filepath:i}}};Gt.code=\"ObjectTypeError\";var bi=class e extends _e{constructor(t){super(`Expected a 40-char hex object id but saw \"${t}\".`),this.code=this.name=e.code,this.data={value:t}}};bi.code=\"InvalidOidError\";var el=class e extends _e{constructor(t){super(`Could not find a fetch refspec for remote \"${t}\". Make sure the config file has an entry like the following:\n[remote \"${t}\"]\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`),this.code=this.name=e.code,this.data={remote:t}}};el.code=\"NoRefspecError\";var iu=class e{constructor(t){if(this.refs=new Map,this.parsedConfig=[],t){let r=null;this.parsedConfig=t.trim().split(`\n`).map(n=>{if(/^\\s*#/.test(n))return{line:n,comment:!0};let i=n.indexOf(\" \");if(n.startsWith(\"^\")){let a=n.slice(1);return this.refs.set(r+\"^{}\",a),{line:n,ref:r,peeled:a}}else{let a=n.slice(0,i);return r=n.slice(i+1),this.refs.set(r,a),{line:n,ref:r,oid:a}}})}return this}static from(t){return new e(t)}delete(t){this.parsedConfig=this.parsedConfig.filter(r=>r.ref!==t),this.refs.delete(t)}toString(){return this.parsedConfig.map(({line:t})=>t).join(`\n`)+`\n`}},au=class e{constructor({remotePath:t,localPath:r,force:n,matchPrefix:i}){Object.assign(this,{remotePath:t,localPath:r,force:n,matchPrefix:i})}static from(t){let[r,n,i,a,s]=t.match(/^(\\+?)(.*?)(\\*?):(.*?)(\\*?)$/).slice(1),o=r===\"+\",c=i===\"*\";if(c!==(s===\"*\"))throw new le(\"Invalid refspec\");return new e({remotePath:n,localPath:a,force:o,matchPrefix:c})}translate(t){if(this.matchPrefix){if(t.startsWith(this.remotePath))return this.localPath+t.replace(this.remotePath,\"\")}else if(t===this.remotePath)return this.localPath;return null}reverseTranslate(t){if(this.matchPrefix){if(t.startsWith(this.localPath))return this.remotePath+t.replace(this.localPath,\"\")}else if(t===this.localPath)return this.remotePath;return null}},hp=class e{constructor(t=[]){this.rules=t}static from(t){let r=[];for(let n of t)r.push(au.from(n));return new e(r)}add(t){let r=au.from(t);this.rules.push(r)}translate(t){let r=[];for(let n of this.rules)for(let i of t){let a=n.translate(i);a&&r.push([i,a])}return r}translateOne(t){let r=null;for(let n of this.rules){let i=n.translate(t);i&&(r=i)}return r}localNamespaces(){return this.rules.filter(t=>t.matchPrefix).map(t=>t.localPath.replace(/\\/$/,\"\"))}};function oM(e,t){let r=e.replace(/\\^\\{\\}$/,\"\"),n=t.replace(/\\^\\{\\}$/,\"\"),i=-(r<n)||+(r>n);return i===0?e.endsWith(\"^{}\")?1:-1:i}var Mw=new Map;function Ow(e){let t=Mw.get(e);return t||(t=lM(e),Mw.set(e,t)),t}function lM(e){return e=e.split(\"/./\").join(\"/\").replace(/\\/{2,}/g,\"/\"),e===\"/.\"?\"/\":e===\"./\"||(e.startsWith(\"./\")&&(e=e.slice(2)),e.endsWith(\"/.\")&&(e=e.slice(0,-2)),e.length>1&&e.endsWith(\"/\")&&(e=e.slice(0,-1)),e===\"\")?\".\":e}function $(...e){return Ow(e.map(Ow).join(\"/\"))}var cM=e=>{e=e.toLowerCase();let t=parseInt(e);return e.endsWith(\"k\")&&(t*=1024),e.endsWith(\"m\")&&(t*=1024*1024),e.endsWith(\"g\")&&(t*=1024*1024*1024),t},Ko=e=>{if(e=e.trim().toLowerCase(),e===\"true\"||e===\"yes\"||e===\"on\")return!0;if(e===\"false\"||e===\"no\"||e===\"off\")return!1;throw Error(`Expected 'true', 'false', 'yes', 'no', 'on', or 'off', but got ${e}`)},Iw={core:{filemode:Ko,bare:Ko,logallrefupdates:Ko,symlinks:Ko,ignorecase:Ko,bigFileThreshold:cM}},uM=/^\\[([A-Za-z0-9-.]+)(?: \"(.*)\")?\\]$/,fM=/^[A-Za-z0-9-.]+$/,dM=/^([A-Za-z][A-Za-z-]*)(?: *= *(.*))?$/,hM=/^[A-Za-z][A-Za-z-]*$/,pM=/^(.*?)( *[#;].*)$/,mM=e=>{let t=uM.exec(e);if(t!=null){let[r,n]=t.slice(1);return[r,n]}return null},gM=e=>{let t=dM.exec(e);if(t!=null){let[r,n=\"true\"]=t.slice(1),i=vM(n),a=yM(i);return[r,a]}return null},vM=e=>{let t=pM.exec(e);if(t==null)return e;let[r,n]=t.slice(1);return Fw(r)&&Fw(n)?`${r}${n}`:r},Fw=e=>(e.match(/(?:^|[^\\\\])\"/g)||[]).length%2!==0,yM=e=>e.split(\"\").reduce((t,r,n,i)=>{let a=r==='\"'&&i[n-1]!==\"\\\\\",s=r===\"\\\\\"&&i[n+1]==='\"';return a||s?t:t+r},\"\"),$w=e=>e!=null?e.toLowerCase():null,pp=(e,t,r)=>[$w(e),t,$w(r)].filter(n=>n!=null).join(\".\"),Lw=e=>{let t=e.split(\".\"),r=t.shift(),n=t.pop(),i=t.length?t.join(\".\"):void 0;return{section:r,subsection:i,name:n,path:pp(r,i,n),sectionPath:pp(r,i,null)}},wM=(e,t)=>e.reduce((r,n,i)=>t(n)?i:r,-1),mp=class e{constructor(t){let r=null,n=null;this.parsedConfig=t?t.split(`\n`).map(i=>{let a=null,s=null,o=i.trim(),c=mM(o),l=c!=null;if(l)[r,n]=c;else{let f=gM(o);f!=null&&([a,s]=f)}let u=pp(r,n,a);return{line:i,isSection:l,section:r,subsection:n,name:a,value:s,path:u}}):[]}static from(t){return new e(t)}async get(t,r=!1){let n=Lw(t).path,i=this.parsedConfig.filter(a=>a.path===n).map(({section:a,name:s,value:o})=>{let c=Iw[a]&&Iw[a][s];return c?c(o):o});return r?i:i.pop()}async getall(t){return this.get(t,!0)}async getSubsections(t){return this.parsedConfig.filter(r=>r.section===t&&r.isSection).map(r=>r.subsection)}async deleteSection(t,r){this.parsedConfig=this.parsedConfig.filter(n=>!(n.section===t&&n.subsection===r))}async append(t,r){return this.set(t,r,!0)}async set(t,r,n=!1){let{section:i,subsection:a,name:s,path:o,sectionPath:c}=Lw(t),l=wM(this.parsedConfig,u=>u.path===o);if(r==null)l!==-1&&this.parsedConfig.splice(l,1);else if(l!==-1){let u=this.parsedConfig[l],f=Object.assign({},u,{name:s,value:r,modified:!0});n?this.parsedConfig.splice(l+1,0,f):this.parsedConfig[l]=f}else{let u=this.parsedConfig.findIndex(d=>d.path===c),f={section:i,subsection:a,name:s,value:r,modified:!0,path:o};if(fM.test(i)&&hM.test(s))if(u>=0)this.parsedConfig.splice(u+1,0,f);else{let d={section:i,subsection:a,modified:!0,path:c};this.parsedConfig.push(d,f)}}}toString(){return this.parsedConfig.map(({line:t,section:r,subsection:n,name:i,value:a,modified:s=!1})=>s?i!=null&&a!=null?typeof a==\"string\"&&/[#;]/.test(a)?`\t${i} = \"${a}\"`:`\t${i} = ${a}`:n!=null?`[${r} \"${n}\"]`:`[${r}]`:t).join(`\n`)}},We=class{static async get({fs:t,gitdir:r}){let n=await t.read(`${r}/config`,{encoding:\"utf8\"});return mp.from(n)}static async save({fs:t,gitdir:r,config:n}){await t.write(`${r}/config`,n.toString(),{encoding:\"utf8\"})}},Qc=e=>[`${e}`,`refs/${e}`,`refs/tags/${e}`,`refs/heads/${e}`,`refs/remotes/${e}`,`refs/remotes/${e}/HEAD`],bM=[\"config\",\"description\",\"index\",\"shallow\",\"commondir\"],np;async function vi(e,t){return np===void 0&&(np=new Jo.default),np.acquire(e,t)}var q=class e{static async updateRemoteRefs({fs:t,gitdir:r,remote:n,refs:i,symrefs:a,tags:s,refspecs:o=void 0,prune:c=!1,pruneTags:l=!1}){for(let v of i.values())if(!v.match(/[0-9a-f]{40}/))throw new bi(v);let u=await We.get({fs:t,gitdir:r});if(!o){if(o=await u.getall(`remote.${n}.fetch`),o.length===0)throw new el(n);o.unshift(`+HEAD:refs/remotes/${n}/HEAD`)}let f=hp.from(o),d=new Map;if(l){let v=await e.listRefs({fs:t,gitdir:r,filepath:\"refs/tags\"});await e.deleteRefs({fs:t,gitdir:r,refs:v.map(y=>`refs/tags/${y}`)})}if(s){for(let v of i.keys())if(v.startsWith(\"refs/tags\")&&!v.endsWith(\"^{}\")&&!await e.exists({fs:t,gitdir:r,ref:v})){let y=i.get(v);d.set(v,y)}}let h=f.translate([...i.keys()]);for(let[v,y]of h){let b=i.get(v);d.set(y,b)}let p=f.translate([...a.keys()]);for(let[v,y]of p){let b=a.get(v),x=f.translateOne(b);x&&d.set(y,`ref: ${x}`)}let m=[];if(c){for(let v of f.localNamespaces()){let y=(await e.listRefs({fs:t,gitdir:r,filepath:v})).map(b=>`${v}/${b}`);for(let b of y)d.has(b)||m.push(b)}m.length>0&&await e.deleteRefs({fs:t,gitdir:r,refs:m})}for(let[v,y]of d)await vi(v,async()=>t.write($(r,v),`${y.trim()}\n`,\"utf8\"));return{pruned:m}}static async writeRef({fs:t,gitdir:r,ref:n,value:i}){if(!i.match(/[0-9a-f]{40}/))throw new bi(i);await vi(n,async()=>t.write($(r,n),`${i.trim()}\n`,\"utf8\"))}static async writeSymbolicRef({fs:t,gitdir:r,ref:n,value:i}){await vi(n,async()=>t.write($(r,n),`ref: ${i.trim()}\n`,\"utf8\"))}static async deleteRef({fs:t,gitdir:r,ref:n}){return e.deleteRefs({fs:t,gitdir:r,refs:[n]})}static async deleteRefs({fs:t,gitdir:r,refs:n}){await Promise.all(n.map(o=>t.rm($(r,o))));let i=await vi(\"packed-refs\",async()=>t.read(`${r}/packed-refs`,{encoding:\"utf8\"})),a=iu.from(i),s=a.refs.size;for(let o of n)a.refs.has(o)&&a.delete(o);a.refs.size<s&&(i=a.toString(),await vi(\"packed-refs\",async()=>t.write(`${r}/packed-refs`,i,{encoding:\"utf8\"})))}static async resolve({fs:t,gitdir:r,ref:n,depth:i=void 0}){if(i!==void 0&&(i--,i===-1))return n;if(n.startsWith(\"ref: \"))return n=n.slice(5),e.resolve({fs:t,gitdir:r,ref:n,depth:i});if(n.length===40&&/[0-9a-f]{40}/.test(n))return n;let a=await e.packedRefs({fs:t,gitdir:r}),s=Qc(n).filter(o=>!bM.includes(o));for(let o of s){let c=await vi(o,async()=>await t.read(`${r}/${o}`,{encoding:\"utf8\"})||a.get(o));if(c)return e.resolve({fs:t,gitdir:r,ref:c.trim(),depth:i})}throw new Ne(n)}static async exists({fs:t,gitdir:r,ref:n}){try{return await e.expand({fs:t,gitdir:r,ref:n}),!0}catch(i){return!1}}static async expand({fs:t,gitdir:r,ref:n}){if(n.length===40&&/[0-9a-f]{40}/.test(n))return n;let i=await e.packedRefs({fs:t,gitdir:r}),a=Qc(n);for(let s of a)if(await vi(s,async()=>t.exists(`${r}/${s}`))||i.has(s))return s;throw new Ne(n)}static async expandAgainstMap({ref:t,map:r}){let n=Qc(t);for(let i of n)if(await r.has(i))return i;throw new Ne(t)}static resolveAgainstMap({ref:t,fullref:r=t,depth:n=void 0,map:i}){if(n!==void 0&&(n--,n===-1))return{fullref:r,oid:t};if(t.startsWith(\"ref: \"))return t=t.slice(5),e.resolveAgainstMap({ref:t,fullref:r,depth:n,map:i});if(t.length===40&&/[0-9a-f]{40}/.test(t))return{fullref:r,oid:t};let a=Qc(t);for(let s of a){let o=i.get(s);if(o)return e.resolveAgainstMap({ref:o.trim(),fullref:s,depth:n,map:i})}throw new Ne(t)}static async packedRefs({fs:t,gitdir:r}){let n=await vi(\"packed-refs\",async()=>t.read(`${r}/packed-refs`,{encoding:\"utf8\"}));return iu.from(n).refs}static async listRefs({fs:t,gitdir:r,filepath:n}){let i=e.packedRefs({fs:t,gitdir:r}),a=null;try{a=await t.readdirDeep(`${r}/${n}`),a=a.map(s=>s.replace(`${r}/${n}/`,\"\"))}catch(s){a=[]}for(let s of(await i).keys())s.startsWith(n)&&(s=s.replace(n+\"/\",\"\"),a.includes(s)||a.push(s));return a.sort(oM),a}static async listBranches({fs:t,gitdir:r,remote:n}){return n?e.listRefs({fs:t,gitdir:r,filepath:`refs/remotes/${n}`}):e.listRefs({fs:t,gitdir:r,filepath:\"refs/heads\"})}static async listTags({fs:t,gitdir:r}){return(await e.listRefs({fs:t,gitdir:r,filepath:\"refs/tags\"})).filter(i=>!i.endsWith(\"^{}\"))}};function _M(e,t){return hu(Dw(e),Dw(t))}function Dw(e){return e.mode===\"040000\"?e.path+\"/\":e.path}function a2(e){switch(e){case\"040000\":return\"tree\";case\"100644\":return\"blob\";case\"100755\":return\"blob\";case\"120000\":return\"blob\";case\"160000\":return\"commit\"}throw new le(`Unexpected GitTree entry mode: ${e}`)}function xM(e){let t=[],r=0;for(;r<e.length;){let n=e.indexOf(32,r);if(n===-1)throw new le(`GitTree: Error parsing buffer at byte location ${r}: Could not find the next space character.`);let i=e.indexOf(0,r);if(i===-1)throw new le(`GitTree: Error parsing buffer at byte location ${r}: Could not find the next null character.`);let a=e.slice(r,n).toString(\"utf8\");a===\"40000\"&&(a=\"040000\");let s=a2(a),o=e.slice(n+1,i).toString(\"utf8\");if(o.includes(\"\\\\\")||o.includes(\"/\"))throw new cs(o);let c=e.slice(i+1,i+21).toString(\"hex\");r=i+21,t.push({mode:a,path:o,oid:c,type:s})}return t}function SM(e){if(typeof e==\"number\"&&(e=e.toString(8)),e.match(/^0?4.*/))return\"040000\";if(e.match(/^1006.*/))return\"100644\";if(e.match(/^1007.*/))return\"100755\";if(e.match(/^120.*/))return\"120000\";if(e.match(/^160.*/))return\"160000\";throw new le(`Could not understand file mode: ${e}`)}function EM(e){return!e.oid&&e.sha&&(e.oid=e.sha),e.mode=SM(e.mode),e.type||(e.type=a2(e.mode)),e}var er=class e{constructor(t){if(Buffer.isBuffer(t))this._entries=xM(t);else if(Array.isArray(t))this._entries=t.map(EM);else throw new le(\"invalid type passed to GitTree constructor\");this._entries.sort(t2)}static from(t){return new e(t)}render(){return this._entries.map(t=>`${t.mode} ${t.type} ${t.oid}    ${t.path}`).join(`\n`)}toObject(){let t=[...this._entries];return t.sort(_M),Buffer.concat(t.map(r=>{let n=Buffer.from(r.mode.replace(/^0/,\"\")),i=Buffer.from(\" \"),a=Buffer.from(r.path,\"utf8\"),s=Buffer.from([0]),o=Buffer.from(r.oid,\"hex\");return Buffer.concat([n,i,a,s,o])}))}entries(){return this._entries}*[Symbol.iterator](){for(let t of this._entries)yield t}},_i=class{static wrap({type:t,object:r}){return Buffer.concat([Buffer.from(`${t} ${r.byteLength.toString()}\\0`),Buffer.from(r)])}static unwrap(t){let r=t.indexOf(32),n=t.indexOf(0),i=t.slice(0,r).toString(\"utf8\"),a=t.slice(r+1,n).toString(\"utf8\"),s=t.length-(n+1);if(parseInt(a)!==s)throw new le(`Length mismatch: expected ${a} bytes but got ${s} instead.`);return{type:i,object:Buffer.from(t.slice(n+1))}}};async function AM({fs:e,gitdir:t,oid:r}){let n=`objects/${r.slice(0,2)}/${r.slice(2)}`,i=await e.read(`${t}/${n}`);return i?{object:i,format:\"deflated\",source:n}:null}function kM(e,t){let r=new Ir(e),n=Nw(r);if(n!==t.byteLength)throw new le(`applyDelta expected source buffer to be ${n} bytes but the provided buffer was ${t.length} bytes`);let i=Nw(r),a,s=Bw(r,t);if(s.byteLength===i)a=s;else{a=Buffer.alloc(i);let o=new Ir(a);for(o.copy(s);!r.eof();)o.copy(Bw(r,t));let c=o.tell();if(i!==c)throw new le(`applyDelta expected target buffer to be ${i} bytes but the resulting buffer was ${c} bytes`)}return a}function Nw(e){let t=0,r=0,n=null;do n=e.readUInt8(),t|=(n&127)<<r,r+=7;while(n&128);return t}function jw(e,t,r){let n=0,i=0;for(;r--;)t&1&&(n|=e.readUInt8()<<i),t>>=1,i+=8;return n}function Bw(e,t){let r=e.readUInt8(),n=128,i=15,a=112;if(r&n){let s=jw(e,r&i,4),o=jw(e,(r&a)>>4,3);return o===0&&(o=65536),t.slice(s,s+o)}else return e.slice(r)}function TM(e){let t=[e];return{next(){return Promise.resolve({done:t.length===0,value:t.pop()})},return(){return t=[],{}},[Symbol.asyncIterator](){return this}}}function s2(e){return e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]?e[Symbol.iterator]():e.next?e:TM(e)}var su=class{constructor(t){if(typeof Buffer==\"undefined\")throw new Error(\"Missing Buffer dependency\");this.stream=s2(t),this.buffer=null,this.cursor=0,this.undoCursor=0,this.started=!1,this._ended=!1,this._discardedBytes=0}eof(){return this._ended&&this.cursor===this.buffer.length}tell(){return this._discardedBytes+this.cursor}async byte(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(1),this.buffer[this.undoCursor]}async chunk(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(this.buffer.length),this.buffer.slice(this.undoCursor,this.cursor)}async read(t){if(!this.eof())return this.started||await this._init(),this.cursor+t>this.buffer.length&&(this._trim(),await this._accumulate(t)),this._moveCursor(t),this.buffer.slice(this.undoCursor,this.cursor)}async skip(t){this.eof()||(this.started||await this._init(),this.cursor+t>this.buffer.length&&(this._trim(),await this._accumulate(t)),this._moveCursor(t))}async undo(){this.cursor=this.undoCursor}async _next(){this.started=!0;let{done:t,value:r}=await this.stream.next();return t&&(this._ended=!0,!r)?Buffer.alloc(0):(r&&(r=Buffer.from(r)),r)}_trim(){this.buffer=this.buffer.slice(this.undoCursor),this.cursor-=this.undoCursor,this._discardedBytes+=this.undoCursor,this.undoCursor=0}_moveCursor(t){this.undoCursor=this.cursor,this.cursor+=t,this.cursor>this.buffer.length&&(this.cursor=this.buffer.length)}async _accumulate(t){if(this._ended)return;let r=[this.buffer];for(;this.cursor+t>CM(r);){let n=await this._next();if(this._ended)break;r.push(n)}this.buffer=Buffer.concat(r)}async _loadnext(){this._discardedBytes+=this.buffer.length,this.undoCursor=0,this.cursor=0,this.buffer=await this._next()}async _init(){this.buffer=await this._next()}};function CM(e){return e.reduce((t,r)=>t+r.length,0)}async function PM(e,t){let r=new su(e),n=await r.read(4);if(n=n.toString(\"utf8\"),n!==\"PACK\")throw new le(`Invalid PACK header '${n}'`);let i=await r.read(4);if(i=i.readUInt32BE(0),i!==2)throw new le(`Invalid packfile version: ${i}`);let a=await r.read(4);if(a=a.readUInt32BE(0),!(a<1))for(;!r.eof()&&a--;){let s=r.tell(),{type:o,length:c,ofs:l,reference:u}=await RM(r),f=new du.default.Inflate;for(;!f.result;){let d=await r.chunk();if(!d)break;if(f.push(d,!1),f.err)throw new le(`Pako error: ${f.msg}`);if(f.result){if(f.result.length!==c)throw new le(\"Inflated object size is different from that stated in packfile.\");await r.undo(),await r.read(d.length-f.strm.avail_in);let h=r.tell();await t({data:f.result,type:o,num:a,offset:s,end:h,reference:u,ofs:l})}}}}async function RM(e){let t=await e.byte(),r=t>>4&7,n=t&15;if(t&128){let s=4;do t=await e.byte(),n|=(t&127)<<s,s+=7;while(t&128)}let i,a;if(r===6){let s=0;i=0;let o=[];do t=await e.byte(),i|=(t&127)<<s,s+=7,o.push(t);while(t&128);a=Buffer.from(o)}return r===7&&(a=await e.read(20)),{type:r,length:n,ofs:i,reference:a}}var ip=!1;async function o2(e){return ip===null&&(ip=OM()),ip?MM(e):du.default.inflate(e)}async function MM(e){let t=new DecompressionStream(\"deflate\"),r=new Blob([e]).stream().pipeThrough(t);return new Uint8Array(await new Response(r).arrayBuffer())}function OM(){try{if(new DecompressionStream(\"deflate\"))return!0}catch(e){}return!1}function IM(e){let t=[],r=0,n=0;do{r=e.readUInt8();let i=r&127;t.push(i),n=r&128}while(n);return t.reduce((i,a)=>i+1<<7|a,-1)}function FM(e,t){let r=t,n=4,i=null;do i=e.readUInt8(),r|=(i&127)<<n,n+=7;while(i&128);return r}var tl=class e{constructor(t){Object.assign(this,t),this.offsetCache={}}static async fromIdx({idx:t,getExternalRefDelta:r}){let n=new Ir(t);if(n.slice(4).toString(\"hex\")!==\"ff744f63\")return;let a=n.readUInt32BE();if(a!==2)throw new le(`Unable to read version ${a} packfile IDX. (Only version 2 supported)`);if(t.byteLength>2048*1024*1024)throw new le(\"To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.\");n.seek(n.tell()+4*255);let s=n.readUInt32BE(),o=[];for(let u=0;u<s;u++){let f=n.slice(20).toString(\"hex\");o[u]=f}n.seek(n.tell()+4*s);let c=new Map;for(let u=0;u<s;u++)c.set(o[u],n.readUInt32BE());let l=n.slice(20).toString(\"hex\");return new e({hashes:o,crcs:{},offsets:c,packfileSha:l,getExternalRefDelta:r})}static async fromPack({pack:t,getExternalRefDelta:r,onProgress:n}){let i={1:\"commit\",2:\"tree\",3:\"blob\",4:\"tag\",6:\"ofs-delta\",7:\"ref-delta\"},a={},s=t.slice(-20).toString(\"hex\"),o=[],c={},l=new Map,u=null,f=null;await PM([t],async({data:v,type:y,reference:b,offset:x,num:E})=>{u===null&&(u=E);let _=Math.floor((u-E)*100/u);_!==f&&n&&await n({phase:\"Receiving objects\",loaded:u-E,total:u}),f=_,y=i[y],[\"commit\",\"tree\",\"blob\",\"tag\"].includes(y)?a[x]={type:y,offset:x}:y===\"ofs-delta\"?a[x]={type:y,offset:x}:y===\"ref-delta\"&&(a[x]={type:y,offset:x})});let d=Object.keys(a).map(Number);for(let[v,y]of d.entries()){let b=v+1===d.length?t.byteLength-20:d[v+1],x=a[y],E=Jw.default.buf(t.slice(y,b))>>>0;x.end=b,x.crc=E}let h=new e({pack:Promise.resolve(t),packfileSha:s,crcs:c,hashes:o,offsets:l,getExternalRefDelta:r});f=null;let p=0,m=[0,0,0,0,0,0,0,0,0,0,0,0];for(let v in a){v=Number(v);let y=Math.floor(p*100/u);y!==f&&n&&await n({phase:\"Resolving deltas\",loaded:p,total:u}),p++,f=y;let b=a[v];if(!b.oid)try{h.readDepth=0,h.externalReadDepth=0;let{type:x,object:E}=await h.readSlice({start:v});m[h.readDepth]+=1;let _=await Gn(_i.wrap({type:x,object:E}));b.oid=_,o.push(_),l.set(_,v),c[_]=b.crc}catch(x){continue}}return o.sort(),h}async toBuffer(){let t=[],r=(l,u)=>{t.push(Buffer.from(l,u))};r(\"ff744f63\",\"hex\"),r(\"00000002\",\"hex\");let n=new Ir(Buffer.alloc(256*4));for(let l=0;l<256;l++){let u=0;for(let f of this.hashes)parseInt(f.slice(0,2),16)<=l&&u++;n.writeUInt32BE(u)}t.push(n.buffer);for(let l of this.hashes)r(l,\"hex\");let i=new Ir(Buffer.alloc(this.hashes.length*4));for(let l of this.hashes)i.writeUInt32BE(this.crcs[l]);t.push(i.buffer);let a=new Ir(Buffer.alloc(this.hashes.length*4));for(let l of this.hashes)a.writeUInt32BE(this.offsets.get(l));t.push(a.buffer),r(this.packfileSha,\"hex\");let s=Buffer.concat(t),o=await Gn(s),c=Buffer.alloc(20);return c.write(o,\"hex\"),Buffer.concat([s,c])}async load({pack:t}){this.pack=t}async unload(){this.pack=null}async read({oid:t}){if(!this.offsets.get(t)){if(this.getExternalRefDelta)return this.externalReadDepth++,this.getExternalRefDelta(t);throw new le(`Could not read object ${t} from packfile`)}let r=this.offsets.get(t);return this.readSlice({start:r})}async readSlice({start:t}){if(this.offsetCache[t])return Object.assign({},this.offsetCache[t]);this.readDepth++;let r={16:\"commit\",32:\"tree\",48:\"blob\",64:\"tag\",96:\"ofs_delta\",112:\"ref_delta\"};if(!this.pack)throw new le(\"Tried to read from a GitPackIndex with no packfile loaded into memory\");let n=(await this.pack).slice(t),i=new Ir(n),a=i.readUInt8(),s=a&112,o=r[s];if(o===void 0)throw new le(\"Unrecognized type: 0b\"+s.toString(2));let c=a&15,l=c;a&128&&(l=FM(i,c));let f=null,d=null;if(o===\"ofs_delta\"){let p=IM(i),m=t-p;({object:f,type:o}=await this.readSlice({start:m}))}if(o===\"ref_delta\"){let p=i.slice(20).toString(\"hex\");({object:f,type:o}=await this.read({oid:p}))}let h=n.slice(i.tell());if(d=Buffer.from(await o2(h)),d.byteLength!==l)throw new le(`Packfile told us object would have length ${l} but it had length ${d.byteLength}`);return f&&(d=Buffer.from(kM(d,f))),this.readDepth>3&&(this.offsetCache[t]={type:o,object:d}),{type:o,format:\"content\",object:d}}},eu=Symbol(\"PackfileCache\");async function $M({fs:e,filename:t,getExternalRefDelta:r,emitter:n,emitterPrefix:i}){let a=await e.read(t);return tl.fromIdx({idx:a,getExternalRefDelta:r})}function Ep({fs:e,cache:t,filename:r,getExternalRefDelta:n,emitter:i,emitterPrefix:a}){t[eu]||(t[eu]=new Map);let s=t[eu].get(r);return s||(s=$M({fs:e,filename:r,getExternalRefDelta:n,emitter:i,emitterPrefix:a}),t[eu].set(r,s)),s}async function LM({fs:e,cache:t,gitdir:r,oid:n,format:i=\"content\",getExternalRefDelta:a}){let s=await e.readdir($(r,\"objects/pack\"));s=s.filter(o=>o.endsWith(\".idx\"));for(let o of s){let c=`${r}/objects/pack/${o}`,l=await Ep({fs:e,cache:t,filename:c,getExternalRefDelta:a});if(l.error)throw new le(l.error);if(l.offsets.has(n)){if(!l.pack){let f=c.replace(/idx$/,\"pack\");l.pack=e.read(f)}let u=await l.read({oid:n,getExternalRefDelta:a});return u.format=\"content\",u.source=`objects/pack/${o.replace(/idx$/,\"pack\")}`,u}}return null}async function qe({fs:e,cache:t,gitdir:r,oid:n,format:i=\"content\"}){let a=u=>qe({fs:e,cache:t,gitdir:r,oid:u}),s;if(n===\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"&&(s={format:\"wrapped\",object:Buffer.from(\"tree 0\\0\")}),s||(s=await AM({fs:e,gitdir:r,oid:n})),!s){if(s=await LM({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:a}),!s)throw new Ne(n);return s}if(i===\"deflated\"||(s.format===\"deflated\"&&(s.object=Buffer.from(await o2(s.object)),s.format=\"wrapped\"),i===\"wrapped\"))return s;let o=await Gn(s.object);if(o!==n)throw new le(`SHA check failed! Expected ${n}, computed ${o}`);let{object:c,type:l}=_i.unwrap(s.object);if(s.type=l,s.object=c,s.format=\"content\",i===\"content\")return s;throw new le(`invalid requested format \"${i}\"`)}var Qr=class e extends _e{constructor(t,r,n=!0){super(`Failed to create ${t} at ${r} because it already exists.${n?` (Hint: use 'force: true' parameter to overwrite existing ${t}.)`:\"\"}`),this.code=this.name=e.code,this.data={noun:t,where:r,canForce:n}}};Qr.code=\"AlreadyExistsError\";var rl=class e extends _e{constructor(t,r,n){super(`Found multiple ${t} matching \"${r}\" (${n.join(\", \")}). Use a longer abbreviation length to disambiguate them.`),this.code=this.name=e.code,this.data={nouns:t,short:r,matches:n}}};rl.code=\"AmbiguousError\";var nl=class e extends _e{constructor(t){super(`Your local changes to the following files would be overwritten by checkout: ${t.join(\", \")}`),this.code=this.name=e.code,this.data={filepaths:t}}};nl.code=\"CheckoutConflictError\";var il=class e extends _e{constructor(t,r){super(`Failed to checkout \"${t}\" because commit ${r} is not available locally. Do a git fetch to make the branch available locally.`),this.code=this.name=e.code,this.data={ref:t,oid:r}}};il.code=\"CommitNotFetchedError\";var al=class e extends _e{constructor(){super(\"Empty response from git server.\"),this.code=this.name=e.code,this.data={}}};al.code=\"EmptyServerResponseError\";var sl=class e extends _e{constructor(){super(\"A simple fast-forward merge was not possible.\"),this.code=this.name=e.code,this.data={}}};sl.code=\"FastForwardError\";var ol=class e extends _e{constructor(t,r){super(`One or more branches were not updated: ${t}`),this.code=this.name=e.code,this.data={prettyDetails:t,result:r}}};ol.code=\"GitPushError\";var ds=class e extends _e{constructor(t,r,n){super(`HTTP Error: ${t} ${r}`),this.code=this.name=e.code,this.data={statusCode:t,statusMessage:r,response:n}}};ds.code=\"HttpError\";var xi=class e extends _e{constructor(t){let r=\"invalid filepath\";t===\"leading-slash\"||t===\"trailing-slash\"?r='\"filepath\" parameter should not include leading or trailing directory separators because these can cause problems on some platforms.':t===\"directory\"&&(r='\"filepath\" should not be a directory.'),super(r),this.code=this.name=e.code,this.data={reason:t}}};xi.code=\"InvalidFilepathError\";var zn=class e extends _e{constructor(t,r){super(`\"${t}\" would be an invalid git reference. (Hint: a valid alternative would be \"${r}\".)`),this.code=this.name=e.code,this.data={ref:t,suggestion:r}}};zn.code=\"InvalidRefNameError\";var ll=class e extends _e{constructor(t){super(`Maximum search depth of ${t} exceeded.`),this.code=this.name=e.code,this.data={depth:t}}};ll.code=\"MaxDepthError\";var hs=class e extends _e{constructor(){super(\"Merges with conflicts are not supported yet.\"),this.code=this.name=e.code,this.data={}}};hs.code=\"MergeNotSupportedError\";var ps=class e extends _e{constructor(t,r,n,i){super(`Automatic merge failed with one or more merge conflicts in the following files: ${t.toString()}. Fix conflicts then commit the result.`),this.code=this.name=e.code,this.data={filepaths:t,bothModified:r,deleteByUs:n,deleteByTheirs:i}}};ps.code=\"MergeConflictError\";var zt=class e extends _e{constructor(t){super(`No name was provided for ${t} in the argument or in the .git/config file.`),this.code=this.name=e.code,this.data={role:t}}};zt.code=\"MissingNameError\";var Qt=class e extends _e{constructor(t){super(`The function requires a \"${t}\" parameter but none was provided.`),this.code=this.name=e.code,this.data={parameter:t}}};Qt.code=\"MissingParameterError\";var cl=class e extends _e{constructor(t){super('There are multiple errors that were thrown by the method. Please refer to the \"errors\" property to see more'),this.code=this.name=e.code,this.data={errors:t},this.errors=t}};cl.code=\"MultipleGitError\";var la=class e extends _e{constructor(t,r){super(`Expected \"${t}\" but received \"${r}\".`),this.code=this.name=e.code,this.data={expected:t,actual:r}}};la.code=\"ParseError\";var ms=class e extends _e{constructor(t){let r=\"\";t===\"not-fast-forward\"?r=\" because it was not a simple fast-forward\":t===\"tag-exists\"&&(r=\" because tag already exists\"),super(`Push rejected${r}. Use \"force: true\" to override.`),this.code=this.name=e.code,this.data={reason:t}}};ms.code=\"PushRejectedError\";var yi=class e extends _e{constructor(t,r){super(`Remote does not support the \"${t}\" so the \"${r}\" parameter cannot be used.`),this.code=this.name=e.code,this.data={capability:t,parameter:r}}};yi.code=\"RemoteCapabilityError\";var ul=class e extends _e{constructor(t,r){super(`Remote did not reply using the \"smart\" HTTP protocol. Expected \"001e# service=git-upload-pack\" but received: ${t}`),this.code=this.name=e.code,this.data={preview:t,response:r}}};ul.code=\"SmartHttpError\";var fl=class e extends _e{constructor(t,r,n){super(`Git remote \"${t}\" uses an unrecognized transport protocol: \"${r}\"`),this.code=this.name=e.code,this.data={url:t,transport:r,suggestion:n}}};fl.code=\"UnknownTransportError\";var dl=class e extends _e{constructor(t){super(`Cannot parse remote URL: \"${t}\"`),this.code=this.name=e.code,this.data={url:t}}};dl.code=\"UrlParseError\";var gs=class e extends _e{constructor(){super(\"The operation was canceled.\"),this.code=this.name=e.code,this.data={}}};gs.code=\"UserCanceledError\";var hl=class e extends _e{constructor(t){super(`Could not merge index: Entry for '${t}' is not up to date. Either reset the index entry to HEAD, or stage your unstaged changes.`),this.code=this.name=e.code,this.data={filepath:t}}};hl.code=\"IndexResetError\";var pl=class e extends _e{constructor(t){super(`\"${t}\" does not point to any commit. You're maybe working on a repository with no commits yet. `),this.code=this.name=e.code,this.data={ref:t}}};pl.code=\"NoCommitError\";var gl=Object.freeze({__proto__:null,AlreadyExistsError:Qr,AmbiguousError:rl,CheckoutConflictError:nl,CommitNotFetchedError:il,EmptyServerResponseError:al,FastForwardError:sl,GitPushError:ol,HttpError:ds,InternalError:le,InvalidFilepathError:xi,InvalidOidError:bi,InvalidRefNameError:zn,MaxDepthError:ll,MergeNotSupportedError:hs,MergeConflictError:ps,MissingNameError:zt,MissingParameterError:Qt,MultipleGitError:cl,NoRefspecError:el,NotFoundError:Ne,ObjectTypeError:Gt,ParseError:la,PushRejectedError:ms,RemoteCapabilityError:yi,SmartHttpError:ul,UnknownTransportError:fl,UnsafeFilepathError:cs,UrlParseError:dl,UserCanceledError:gs,UnmergedPathsError:Qo,IndexResetError:hl,NoCommitError:pl});function gp({name:e,email:t,timestamp:r,timezoneOffset:n}){return n=DM(n),`${e} <${t}> ${r} ${n}`}function DM(e){let t=NM(jM(e));e=Math.abs(e);let r=Math.floor(e/60);e-=r*60;let n=String(r),i=String(e);return n.length<2&&(n=\"0\"+n),i.length<2&&(i=\"0\"+i),(t===-1?\"-\":\"+\")+n+i}function NM(e){return Math.sign(e)||(Object.is(e,-0)?-1:1)}function jM(e){return e===0?e:-e}function Un(e){return e=e.replace(/\\r/g,\"\"),e=e.replace(/^\\n+/,\"\"),e=e.replace(/\\n+$/,\"\")+`\n`,e}function ou(e){let[,t,r,n,i]=e.match(/^(.*) <(.*)> (.*) (.*)$/);return{name:t,email:r,timestamp:Number(n),timezoneOffset:BM(i)}}function BM(e){let[,t,r,n]=e.match(/(\\+|-)(\\d\\d)(\\d\\d)/);return n=(t===\"+\"?1:-1)*(Number(r)*60+Number(n)),HM(n)}function HM(e){return e===0?e:-e}var pr=class e{constructor(t){if(typeof t==\"string\")this._tag=t;else if(Buffer.isBuffer(t))this._tag=t.toString(\"utf8\");else if(typeof t==\"object\")this._tag=e.render(t);else throw new le(\"invalid type passed to GitAnnotatedTag constructor\")}static from(t){return new e(t)}static render(t){return`object ${t.object}\ntype ${t.type}\ntag ${t.tag}\ntagger ${gp(t.tagger)}\n\n${t.message}\n${t.gpgsig?t.gpgsig:\"\"}`}justHeaders(){return this._tag.slice(0,this._tag.indexOf(`\n\n`))}message(){let t=this.withoutSignature();return t.slice(t.indexOf(`\n\n`)+2)}parse(){return Object.assign(this.headers(),{message:this.message(),gpgsig:this.gpgsig()})}render(){return this._tag}headers(){let t=this.justHeaders().split(`\n`),r=[];for(let i of t)i[0]===\" \"?r[r.length-1]+=`\n`+i.slice(1):r.push(i);let n={};for(let i of r){let a=i.slice(0,i.indexOf(\" \")),s=i.slice(i.indexOf(\" \")+1);Array.isArray(n[a])?n[a].push(s):n[a]=s}return n.tagger&&(n.tagger=ou(n.tagger)),n.committer&&(n.committer=ou(n.committer)),n}withoutSignature(){let t=Un(this._tag);return t.indexOf(`\n-----BEGIN PGP SIGNATURE-----`)===-1?t:t.slice(0,t.lastIndexOf(`\n-----BEGIN PGP SIGNATURE-----`))}gpgsig(){if(this._tag.indexOf(`\n-----BEGIN PGP SIGNATURE-----`)===-1)return;let t=this._tag.slice(this._tag.indexOf(\"-----BEGIN PGP SIGNATURE-----\"),this._tag.indexOf(\"-----END PGP SIGNATURE-----\")+27);return Un(t)}payload(){return this.withoutSignature()+`\n`}toObject(){return Buffer.from(this._tag,\"utf8\")}static async sign(t,r,n){let i=t.payload(),{signature:a}=await r({payload:i,secretKey:n});a=Un(a);let s=i+a;return e.from(s)}};function ap(e){return e.trim().split(`\n`).map(t=>\" \"+t).join(`\n`)+`\n`}function UM(e){return e.split(`\n`).map(t=>t.replace(/^ /,\"\")).join(`\n`)}var tr=class e{constructor(t){if(typeof t==\"string\")this._commit=t;else if(Buffer.isBuffer(t))this._commit=t.toString(\"utf8\");else if(typeof t==\"object\")this._commit=e.render(t);else throw new le(\"invalid type passed to GitCommit constructor\")}static fromPayloadSignature({payload:t,signature:r}){let n=e.justHeaders(t),i=e.justMessage(t),a=Un(n+`\ngpgsig`+ap(r)+`\n`+i);return new e(a)}static from(t){return new e(t)}toObject(){return Buffer.from(this._commit,\"utf8\")}headers(){return this.parseHeaders()}message(){return e.justMessage(this._commit)}parse(){return Object.assign({message:this.message()},this.headers())}static justMessage(t){return Un(t.slice(t.indexOf(`\n\n`)+2))}static justHeaders(t){return t.slice(0,t.indexOf(`\n\n`))}parseHeaders(){let t=e.justHeaders(this._commit).split(`\n`),r=[];for(let i of t)i[0]===\" \"?r[r.length-1]+=`\n`+i.slice(1):r.push(i);let n={parent:[]};for(let i of r){let a=i.slice(0,i.indexOf(\" \")),s=i.slice(i.indexOf(\" \")+1);Array.isArray(n[a])?n[a].push(s):n[a]=s}return n.author&&(n.author=ou(n.author)),n.committer&&(n.committer=ou(n.committer)),n}static renderHeaders(t){let r=\"\";if(t.tree?r+=`tree ${t.tree}\n`:r+=`tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\n`,t.parent){if(t.parent.length===void 0)throw new le(\"commit 'parent' property should be an array\");for(let a of t.parent)r+=`parent ${a}\n`}let n=t.author;r+=`author ${gp(n)}\n`;let i=t.committer||t.author;return r+=`committer ${gp(i)}\n`,t.gpgsig&&(r+=\"gpgsig\"+ap(t.gpgsig)),r}static render(t){return e.renderHeaders(t)+`\n`+Un(t.message)}render(){return this._commit}withoutSignature(){let t=Un(this._commit);if(t.indexOf(`\ngpgsig`)===-1)return t;let r=t.slice(0,t.indexOf(`\ngpgsig`)),n=t.slice(t.indexOf(`-----END PGP SIGNATURE-----\n`)+28);return Un(r+`\n`+n)}isolateSignature(){let t=this._commit.slice(this._commit.indexOf(\"-----BEGIN PGP SIGNATURE-----\"),this._commit.indexOf(\"-----END PGP SIGNATURE-----\")+27);return UM(t)}static async sign(t,r,n){let i=t.withoutSignature(),a=e.justMessage(t._commit),{signature:s}=await r({payload:i,secretKey:n});s=Un(s);let c=e.justHeaders(t._commit)+`\ngpgsig`+ap(s)+`\n`+a;return e.from(c)}};async function vs({fs:e,cache:t,gitdir:r,oid:n}){if(n===\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\")return{tree:er.from([]),oid:n};let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i===\"tag\")return n=pr.from(a).parse().object,vs({fs:e,cache:t,gitdir:r,oid:n});if(i===\"commit\")return n=tr.from(a).parse().tree,vs({fs:e,cache:t,gitdir:r,oid:n});if(i!==\"tree\")throw new Gt(n,i,\"tree\");return{tree:er.from(a),oid:n}}var vp=class{constructor({fs:t,gitdir:r,ref:n,cache:i}){this.fs=t,this.cache=i,this.gitdir=r,this.mapPromise=(async()=>{let s=new Map,o;try{o=await q.resolve({fs:t,gitdir:r,ref:n})}catch(l){l instanceof Ne&&(o=\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\")}let c=await vs({fs:t,cache:this.cache,gitdir:r,oid:o});return c.type=\"tree\",c.mode=\"40000\",s.set(\".\",c),s})();let a=this;this.ConstructEntry=class{constructor(o){this._fullpath=o,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return a.type(this)}async mode(){return a.mode(this)}async stat(){return a.stat(this)}async content(){return a.content(this)}async oid(){return a.oid(this)}}}async readdir(t){let r=t._fullpath,{fs:n,cache:i,gitdir:a}=this,s=await this.mapPromise,o=s.get(r);if(!o)throw new Error(`No obj for ${r}`);let c=o.oid;if(!c)throw new Error(`No oid for obj ${JSON.stringify(o)}`);if(o.type!==\"tree\")return null;let{type:l,object:u}=await qe({fs:n,cache:i,gitdir:a,oid:c});if(l!==o.type)throw new Gt(c,l,o.type);let f=er.from(u);for(let d of f)s.set($(r,d.path),d);return f.entries().map(d=>$(r,d.path))}async type(t){if(t._type===!1){let r=await this.mapPromise,{type:n}=r.get(t._fullpath);t._type=n}return t._type}async mode(t){if(t._mode===!1){let r=await this.mapPromise,{mode:n}=r.get(t._fullpath);t._mode=r2(parseInt(n,8))}return t._mode}async stat(t){}async content(t){if(t._content===!1){let r=await this.mapPromise,{fs:n,cache:i,gitdir:a}=this,o=r.get(t._fullpath).oid,{type:c,object:l}=await qe({fs:n,cache:i,gitdir:a,oid:o});c!==\"blob\"?t._content=void 0:t._content=new Uint8Array(l)}return t._content}async oid(t){if(t._oid===!1){let n=(await this.mapPromise).get(t._fullpath);t._oid=n.oid}return t._oid}};function wi({ref:e=\"HEAD\"}={}){let t=Object.create(null);return Object.defineProperty(t,pu,{value:function({fs:r,gitdir:n,cache:i}){return new vp({fs:r,gitdir:n,ref:e,cache:i})}}),Object.freeze(t),t}var yp=class{constructor({fs:t,dir:r,gitdir:n,cache:i}){this.fs=t,this.cache=i,this.dir=r,this.gitdir=n;let a=this;this.ConstructEntry=class{constructor(o){this._fullpath=o,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return a.type(this)}async mode(){return a.mode(this)}async stat(){return a.stat(this)}async content(){return a.content(this)}async oid(){return a.oid(this)}}}async readdir(t){let r=t._fullpath,{fs:n,dir:i}=this,a=await n.readdir($(i,r));return a===null?null:a.map(s=>$(r,s))}async type(t){return t._type===!1&&await t.stat(),t._type}async mode(t){return t._mode===!1&&await t.stat(),t._mode}async stat(t){if(t._stat===!1){let{fs:r,dir:n}=this,i=await r.lstat(`${n}/${t._fullpath}`);if(!i)throw new Error(`ENOENT: no such file or directory, lstat '${t._fullpath}'`);let a=i.isDirectory()?\"tree\":\"blob\";a===\"blob\"&&!i.isFile()&&!i.isSymbolicLink()&&(a=\"special\"),t._type=a,i=us(i),t._mode=i.mode,i.size===-1&&t._actualSize&&(i.size=t._actualSize),t._stat=i}return t._stat}async content(t){if(t._content===!1){let{fs:r,dir:n,gitdir:i}=this;if(await t.type()===\"tree\")t._content=void 0;else{let s=await(await We.get({fs:r,gitdir:i})).get(\"core.autocrlf\"),o=await r.read(`${n}/${t._fullpath}`,{autocrlf:s});t._actualSize=o.length,t._stat&&t._stat.size===-1&&(t._stat.size=t._actualSize),t._content=new Uint8Array(o)}}return t._content}async oid(t){if(t._oid===!1){let{fs:r,gitdir:n,cache:i}=this,a;await mt.acquire({fs:r,gitdir:n,cache:i},async function(s){let o=s.entriesMap.get(t._fullpath),c=await t.stat(),u=await(await We.get({fs:r,gitdir:n})).get(\"core.filemode\"),f=typeof process!=\"undefined\"?process.platform!==\"win32\":!0;!o||ru(c,o,u,f)?await t.content()===void 0?a=void 0:(a=await Gn(_i.wrap({type:\"blob\",object:await t.content()})),o&&a===o.oid&&(!u||c.mode===o.mode)&&ru(c,o,u,f)&&s.insert({filepath:t._fullpath,stats:c,oid:a})):a=o.oid}),t._oid=a}return t._oid}};function gu(){let e=Object.create(null);return Object.defineProperty(e,pu,{value:function({fs:t,dir:r,gitdir:n,cache:i}){return new yp({fs:t,dir:r,gitdir:n,cache:i})}}),Object.freeze(e),e}function GM(e,t){let r=t-e;return Array.from({length:r},(n,i)=>e+i)}var l2=typeof Array.prototype.flat==\"undefined\"?e=>e.reduce((t,r)=>t.concat(r),[]):e=>e.flat(),wp=class{constructor(){this.value=null}consider(t){t!=null&&(this.value===null?this.value=t:t<this.value&&(this.value=t))}reset(){this.value=null}};function*zM(e){let t=new wp,r,n=[],i=e.length;for(let a=0;a<i;a++)n[a]=e[a].next().value,n[a]!==void 0&&t.consider(n[a]);if(t.value!==null)for(;;){let a=[];r=t.value,t.reset();for(let s=0;s<i;s++)n[s]!==void 0&&n[s]===r?(a[s]=n[s],n[s]=e[s].next().value):a[s]=null,n[s]!==void 0&&t.consider(n[s]);if(yield a,t.value===null)return}}async function ys({fs:e,cache:t,dir:r,gitdir:n,trees:i,map:a=async(c,l)=>l,reduce:s=async(c,l)=>{let u=l2(l);return c!==void 0&&u.unshift(c),u},iterate:o=(c,l)=>Promise.all([...l].map(c))}){let c=i.map(h=>h[pu]({fs:e,dir:r,gitdir:n,cache:t})),l=new Array(c.length).fill(\".\"),u=GM(0,c.length),f=async h=>{u.map(v=>{h[v]=h[v]&&new c[v].ConstructEntry(h[v])});let m=(await Promise.all(u.map(v=>h[v]?c[v].readdir(h[v]):[]))).map(v=>v===null?[]:v).map(v=>v[Symbol.iterator]());return{entries:h,children:zM(m)}},d=async h=>{let{entries:p,children:m}=await f(h),v=p.find(b=>b&&b._fullpath)._fullpath,y=await a(v,p);if(y!==null){let b=await o(d,m);return b=b.filter(x=>x!==void 0),s(y,b)}};return d(l)}async function bp(e,t){let r=await e.readdir(t);r==null?await e.rm(t):r.length?await Promise.all(r.map(n=>{let i=$(t,n);return e.lstat(i).then(a=>{if(a)return a.isDirectory()?bp(e,i):e.rm(i)})})).then(()=>e.rmdir(t)):await e.rmdir(t)}function VM(e){return WM(e)&&Hw(e.then)&&Hw(e.catch)}function WM(e){return e&&typeof e==\"object\"}function Hw(e){return typeof e==\"function\"}function Uw(e){return VM((r=>{try{return r.readFile().catch(n=>n)}catch(n){return n}})(e))}var Gw=[\"readFile\",\"writeFile\",\"mkdir\",\"rmdir\",\"unlink\",\"stat\",\"lstat\",\"readdir\",\"readlink\",\"symlink\"];function zw(e,t){if(Uw(t))for(let r of Gw)e[`_${r}`]=t[r].bind(t);else for(let r of Gw)e[`_${r}`]=(0,tu.default)(t[r].bind(t));Uw(t)?t.rm?e._rm=t.rm.bind(t):t.rmdir.length>1?e._rm=t.rmdir.bind(t):e._rm=bp.bind(null,e):t.rm?e._rm=(0,tu.default)(t.rm.bind(t)):t.rmdir.length>2?e._rm=(0,tu.default)(t.rmdir.bind(t)):e._rm=bp.bind(null,e)}var X=class{constructor(t){if(typeof t._original_unwrapped_fs!=\"undefined\")return t;let r=Object.getOwnPropertyDescriptor(t,\"promises\");r&&r.enumerable?zw(this,t.promises):zw(this,t),this._original_unwrapped_fs=t}async exists(t,r={}){try{return await this._stat(t),!0}catch(n){if(n.code===\"ENOENT\"||n.code===\"ENOTDIR\")return!1;throw console.log('Unhandled error in \"FileSystem.exists()\" function',n),n}}async read(t,r={}){try{let n=await this._readFile(t,r);if(r.autocrlf===\"true\")try{n=new TextDecoder(\"utf8\",{fatal:!0}).decode(n),n=n.replace(/\\r\\n/g,`\n`),n=new TextEncoder().encode(n)}catch(i){}return typeof n!=\"string\"&&(n=Buffer.from(n)),n}catch(n){return null}}async write(t,r,n={}){try{await this._writeFile(t,r,n);return}catch(i){await this.mkdir(fs(t)),await this._writeFile(t,r,n)}}async mkdir(t,r=!1){try{await this._mkdir(t);return}catch(n){if(n===null||n.code===\"EEXIST\")return;if(r)throw n;if(n.code===\"ENOENT\"){let i=fs(t);if(i===\".\"||i===\"/\"||i===t)throw n;await this.mkdir(i),await this.mkdir(t,!0)}}}async rm(t){try{await this._unlink(t)}catch(r){if(r.code!==\"ENOENT\")throw r}}async rmdir(t,r){try{r&&r.recursive?await this._rm(t,r):await this._rmdir(t)}catch(n){if(n.code!==\"ENOENT\")throw n}}async readdir(t){try{let r=await this._readdir(t);return r.sort(hu),r}catch(r){return r.code===\"ENOTDIR\"?null:[]}}async readdirDeep(t){let r=await this._readdir(t);return(await Promise.all(r.map(async i=>{let a=t+\"/\"+i;return(await this._stat(a)).isDirectory()?this.readdirDeep(a):a}))).reduce((i,a)=>i.concat(a),[])}async lstat(t){try{return await this._lstat(t)}catch(r){if(r.code===\"ENOENT\")return null;throw r}}async readlink(t,r={encoding:\"buffer\"}){try{let n=await this._readlink(t,r);return Buffer.isBuffer(n)?n:Buffer.from(n)}catch(n){if(n.code===\"ENOENT\")return null;throw n}}async writelink(t,r){return this._symlink(r.toString(\"utf8\"),t)}};function C(e,t){if(t===void 0)throw new Qt(e)}async function lu(e,t){return!e&&!t?!1:e&&!t||!e&&t?!0:!(await e.type()===\"tree\"&&await t.type()===\"tree\"||await e.type()===await t.type()&&await e.mode()===await t.mode()&&await e.oid()===await t.oid())}async function qM({fs:e,dir:t,gitdir:r=$(t,\".git\"),commit:n=\"HEAD\",cache:i={}}){try{C(\"fs\",e),C(\"dir\",t),C(\"gitdir\",r);let a=new X(e),s=[wi({ref:n}),gu(),mu()],o=[];await mt.acquire({fs:a,gitdir:r,cache:i},async function(l){o=l.unmergedPaths});let c=await ys({fs:a,cache:i,dir:t,gitdir:r,trees:s,map:async function(l,[u,f,d]){let h=!await lu(f,d),p=o.includes(l),m=!await lu(d,u);if(h||p)return u?{path:l,mode:await u.mode(),oid:await u.oid(),type:await u.type(),content:await u.content()}:void 0;if(m)return!1;throw new hl(l)}});await mt.acquire({fs:a,gitdir:r,cache:i},async function(l){for(let u of c)if(u!==!1){if(!u){await a.rmdir(`${t}/${u.path}`,{recursive:!0}),l.delete({filepath:u.path});continue}if(u.type===\"blob\"){let f=new TextDecoder().decode(u.content);await a.write(`${t}/${u.path}`,f,{mode:u.mode}),l.insert({filepath:u.path,oid:u.oid,stage:0})}}})}catch(a){throw a.caller=\"git.abortMerge\",a}}var ws=class{static async isIgnored({fs:t,dir:r,gitdir:n=$(r,\".git\"),filepath:i}){if(nu(i)===\".git\")return!0;if(i===\".\")return!1;let a=\"\",s=$(n,\"info\",\"exclude\");await t.exists(s)&&(a=await t.read(s,\"utf8\"));let o=[{gitignore:$(r,\".gitignore\"),filepath:i}],c=i.split(\"/\").filter(Boolean);for(let u=1;u<c.length;u++){let f=c.slice(0,u).join(\"/\"),d=c.slice(u).join(\"/\");o.push({gitignore:$(r,f,\".gitignore\"),filepath:d})}let l=!1;for(let u of o){let f;try{f=await t.read(u.gitignore,\"utf8\")}catch(p){if(p.code===\"NOENT\")continue}let d=(0,Qw.default)().add(a);d.add(f);let h=fs(u.filepath);if(h!==\".\"&&d.ignores(h))return!0;l?l=!d.test(u.filepath).unignored:l=d.test(u.filepath).ignored}return l}};async function YM({fs:e,gitdir:t,object:r,format:n,oid:i}){if(n!==\"deflated\")throw new le(\"GitObjectStoreLoose expects objects to write to be in deflated format\");let a=`objects/${i.slice(0,2)}/${i.slice(2)}`,s=`${t}/${a}`;await e.exists(s)||await e.write(s,r)}var sp=null;async function c2(e){return sp===null&&(sp=ZM()),sp?XM(e):du.default.deflate(e)}async function XM(e){let t=new CompressionStream(\"deflate\"),r=new Blob([e]).stream().pipeThrough(t);return new Uint8Array(await new Response(r).arrayBuffer())}function ZM(){try{return new CompressionStream(\"deflate\").writable.close(),new Blob([]).stream().cancel(),!0}catch(e){return!1}}async function mr({fs:e,gitdir:t,type:r,object:n,format:i=\"content\",oid:a=void 0,dryRun:s=!1}){return i!==\"deflated\"&&(i!==\"wrapped\"&&(n=_i.wrap({type:r,object:n})),a=await Gn(n),n=Buffer.from(await c2(n))),s||await YM({fs:e,gitdir:t,object:n,format:\"deflated\",oid:a}),a}function KM(e){let t;for(;~(t=e.indexOf(92));)e[t]=47;return e}async function JM({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,cache:i={},force:a=!1,parallel:s=!0}){try{C(\"fs\",e),C(\"dir\",t),C(\"gitdir\",r),C(\"filepath\",n);let o=new X(e);await mt.acquire({fs:o,gitdir:r,cache:i},async c=>_p({dir:t,gitdir:r,fs:o,filepath:n,index:c,force:a,parallel:s}))}catch(o){throw o.caller=\"git.add\",o}}async function _p({dir:e,gitdir:t,fs:r,filepath:n,index:i,force:a,parallel:s}){n=Array.isArray(n)?n:[n];let o=n.map(async f=>{if(!a&&await ws.isIgnored({fs:r,dir:e,gitdir:t,filepath:f}))return;let d=await r.lstat($(e,f));if(!d)throw new Ne(f);if(d.isDirectory()){let h=await r.readdir($(e,f));if(s){let p=h.map(m=>_p({dir:e,gitdir:t,fs:r,filepath:[$(f,m)],index:i,force:a,parallel:s}));await Promise.all(p)}else for(let p of h)await _p({dir:e,gitdir:t,fs:r,filepath:[$(f,p)],index:i,force:a,parallel:s})}else{let p=await(await We.get({fs:r,gitdir:t})).get(\"core.autocrlf\"),m=d.isSymbolicLink()?await r.readlink($(e,f)).then(KM):await r.read($(e,f),{autocrlf:p});if(m===null)throw new Ne(f);let v=await mr({fs:r,gitdir:t,type:\"blob\",object:m});i.insert({filepath:f,stats:d,oid:v})}}),c=await Promise.allSettled(o),l=c.filter(f=>f.status===\"rejected\").map(f=>f.reason);if(l.length>1)throw new cl(l);if(l.length===1)throw l[0];return c.filter(f=>f.status===\"fulfilled\"&&f.value).map(f=>f.value)}async function ml({fs:e,gitdir:t,path:r}){return(await We.get({fs:e,gitdir:t})).get(r)}function u2(e,...t){for(let r of t)if(r)for(let n of Object.keys(r)){let i=r[n];i!==void 0&&(e[n]=i)}return e}async function ca({fs:e,gitdir:t,author:r,commit:n}){let i=Math.floor(Date.now()/1e3),a={name:await ml({fs:e,gitdir:t,path:\"user.name\"}),email:await ml({fs:e,gitdir:t,path:\"user.email\"})||\"\",timestamp:i,timezoneOffset:new Date(i*1e3).getTimezoneOffset()},s=u2({},a,n?n.author:void 0,r);if(s.name!==void 0)return s}async function bs({fs:e,gitdir:t,author:r,committer:n,commit:i}){let a=Math.floor(Date.now()/1e3),s={name:await ml({fs:e,gitdir:t,path:\"user.name\"}),email:await ml({fs:e,gitdir:t,path:\"user.email\"})||\"\",timestamp:a,timezoneOffset:new Date(a*1e3).getTimezoneOffset()},o=u2({},s,i?i.committer:void 0,r,n);if(o.name!==void 0)return o}async function f2({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i===\"tag\")return n=pr.from(a).parse().object,f2({fs:e,cache:t,gitdir:r,oid:n});if(i!==\"commit\")throw new Gt(n,i,\"commit\");return{commit:tr.from(a),oid:n}}async function cu({fs:e,cache:t,gitdir:r,oid:n}){let{commit:i,oid:a}=await f2({fs:e,cache:t,gitdir:r,oid:n});return{oid:a,commit:i.parse(),payload:i.withoutSignature()}}async function vu({fs:e,cache:t,onSign:r,gitdir:n,message:i,author:a,committer:s,signingKey:o,amend:c=!1,dryRun:l=!1,noUpdateBranch:u=!1,ref:f,parent:d,tree:h}){let p=!1;f||(f=await q.resolve({fs:e,gitdir:n,ref:\"HEAD\",depth:2}));let m,v;try{m=await q.resolve({fs:e,gitdir:n,ref:f}),v=await cu({fs:e,gitdir:n,oid:m,cache:{}})}catch(x){p=!0}if(c&&p)throw new pl(f);let y=c?await ca({fs:e,gitdir:n,author:a,commit:v.commit}):await ca({fs:e,gitdir:n,author:a});if(!y)throw new zt(\"author\");let b=c?await bs({fs:e,gitdir:n,author:y,committer:s,commit:v.commit}):await bs({fs:e,gitdir:n,author:y,committer:s});if(!b)throw new zt(\"committer\");return mt.acquire({fs:e,gitdir:n,cache:t,allowUnmerged:!1},async function(x){let _=i2(x.entries).get(\".\");if(h||(h=await d2({fs:e,gitdir:n,inode:_,dryRun:l})),d?d=await Promise.all(d.map(A=>q.resolve({fs:e,gitdir:n,ref:A}))):c?d=v.commit.parent:d=m?[m]:[],!i)if(c)i=v.commit.message;else throw new Qt(\"message\");let k=tr.from({tree:h,parent:d,author:y,committer:b,message:i});o&&(k=await tr.sign(k,r,o));let w=await mr({fs:e,gitdir:n,type:\"commit\",object:k.toObject(),dryRun:l});return!u&&!l&&await q.writeRef({fs:e,gitdir:n,ref:f,value:w}),w})}async function d2({fs:e,gitdir:t,inode:r,dryRun:n}){let i=r.children;for(let c of i)c.type===\"tree\"&&(c.metadata.mode=\"040000\",c.metadata.oid=await d2({fs:e,gitdir:t,inode:c,dryRun:n}));let a=i.map(c=>({mode:c.metadata.mode,path:c.basename,oid:c.metadata.oid,type:c.type})),s=er.from(a);return await mr({fs:e,gitdir:t,type:\"tree\",object:s.toObject(),dryRun:n})}async function vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i}){if(i.startsWith(\"/\"))throw new xi(\"leading-slash\");if(i.endsWith(\"/\"))throw new xi(\"trailing-slash\");let a=n,s=await vs({fs:e,cache:t,gitdir:r,oid:n}),o=s.tree;if(i===\"\")n=s.oid;else{let c=i.split(\"/\");n=await h2({fs:e,cache:t,gitdir:r,tree:o,pathArray:c,oid:a,filepath:i})}return n}async function h2({fs:e,cache:t,gitdir:r,tree:n,pathArray:i,oid:a,filepath:s}){let o=i.shift();for(let c of n)if(c.path===o){if(i.length===0)return c.oid;{let{type:l,object:u}=await qe({fs:e,cache:t,gitdir:r,oid:c.oid});if(l!==\"tree\")throw new Gt(a,l,\"tree\",s);return n=er.from(u),h2({fs:e,cache:t,gitdir:r,tree:n,pathArray:i,oid:a,filepath:s})}}throw new Ne(`file or directory found at \"${a}:${s}\"`)}async function Ss({fs:e,cache:t,gitdir:r,oid:n,filepath:i=void 0}){i!==void 0&&(n=await vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i}));let{tree:a,oid:s}=await vs({fs:e,cache:t,gitdir:r,oid:n});return{oid:s,tree:a.entries()}}async function Ap({fs:e,gitdir:t,tree:r}){let n=er.from(r).toObject();return await mr({fs:e,gitdir:t,type:\"tree\",object:n,format:\"content\"})}async function QM({fs:e,cache:t,onSign:r,gitdir:n,ref:i,oid:a,note:s,force:o,author:c,committer:l,signingKey:u}){let f;try{f=await q.resolve({gitdir:n,fs:e,ref:i})}catch(y){if(!(y instanceof Ne))throw y}let h=(await Ss({fs:e,cache:t,gitdir:n,oid:f||\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"})).tree;if(o)h=h.filter(y=>y.path!==a);else for(let y of h)if(y.path===a)throw new Qr(\"note\",a);typeof s==\"string\"&&(s=Buffer.from(s,\"utf8\"));let p=await mr({fs:e,gitdir:n,type:\"blob\",object:s,format:\"content\"});h.push({mode:\"100644\",path:a,oid:p,type:\"blob\"});let m=await Ap({fs:e,gitdir:n,tree:h});return await vu({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tree:m,parent:f&&[f],message:`Note added by 'isomorphic-git addNote'\n`,author:c,committer:l,signingKey:u})}async function eO({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),ref:i=\"refs/notes/commits\",oid:a,note:s,force:o,author:c,committer:l,signingKey:u,cache:f={}}){try{C(\"fs\",e),C(\"gitdir\",n),C(\"oid\",a),C(\"note\",s),u&&C(\"onSign\",t);let d=new X(e),h=await ca({fs:d,gitdir:n,author:c});if(!h)throw new zt(\"author\");let p=await bs({fs:d,gitdir:n,author:h,committer:l});if(!p)throw new zt(\"committer\");return await QM({fs:new X(d),cache:f,onSign:t,gitdir:n,ref:i,oid:a,note:s,force:o,author:h,committer:p,signingKey:u})}catch(d){throw d.caller=\"git.addNote\",d}}async function p2({fs:e,gitdir:t,remote:r,url:n,force:i}){if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let a=await We.get({fs:e,gitdir:t});if(!i&&(await a.getSubsections(\"remote\")).includes(r)&&n!==await a.get(`remote.${r}.url`))throw new Qr(\"remote\",r);await a.set(`remote.${r}.url`,n),await a.set(`remote.${r}.fetch`,`+refs/heads/*:refs/remotes/${r}/*`),await We.save({fs:e,gitdir:t,config:a})}async function tO({fs:e,dir:t,gitdir:r=$(t,\".git\"),remote:n,url:i,force:a=!1}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"remote\",n),C(\"url\",i),await p2({fs:new X(e),gitdir:r,remote:n,url:i,force:a})}catch(s){throw s.caller=\"git.addRemote\",s}}async function rO({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tagger:a,message:s=i,gpgsig:o,object:c,signingKey:l,force:u=!1}){if(i=i.startsWith(\"refs/tags/\")?i:`refs/tags/${i}`,!u&&await q.exists({fs:e,gitdir:n,ref:i}))throw new Qr(\"tag\",i);let f=await q.resolve({fs:e,gitdir:n,ref:c||\"HEAD\"}),{type:d}=await qe({fs:e,cache:t,gitdir:n,oid:f}),h=pr.from({object:f,type:d,tag:i.replace(\"refs/tags/\",\"\"),tagger:a,message:s,gpgsig:o});l&&(h=await pr.sign(h,r,l));let p=await mr({fs:e,gitdir:n,type:\"tag\",object:h.toObject()});await q.writeRef({fs:e,gitdir:n,ref:i,value:p})}async function nO({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),ref:i,tagger:a,message:s=i,gpgsig:o,object:c,signingKey:l,force:u=!1,cache:f={}}){try{C(\"fs\",e),C(\"gitdir\",n),C(\"ref\",i),l&&C(\"onSign\",t);let d=new X(e),h=await ca({fs:d,gitdir:n,author:a});if(!h)throw new zt(\"tagger\");return await rO({fs:d,cache:f,onSign:t,gitdir:n,ref:i,tagger:h,message:s,gpgsig:o,object:c,signingKey:l,force:u})}catch(d){throw d.caller=\"git.annotatedTag\",d}}async function iO({fs:e,gitdir:t,ref:r,object:n,checkout:i=!1,force:a=!1}){if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let s=`refs/heads/${r}`;if(!a&&await q.exists({fs:e,gitdir:t,ref:s}))throw new Qr(\"branch\",r,!1);let o;try{o=await q.resolve({fs:e,gitdir:t,ref:n||\"HEAD\"})}catch(c){}o&&await q.writeRef({fs:e,gitdir:t,ref:s,value:o}),i&&await q.writeSymbolicRef({fs:e,gitdir:t,ref:\"HEAD\",value:s})}async function aO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,object:i,checkout:a=!1,force:s=!1}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),await iO({fs:new X(e),gitdir:r,ref:n,object:i,checkout:a,force:s})}catch(o){throw o.caller=\"git.branch\",o}}var m2=(e,t)=>e===\".\"||t==null||t.length===0||t===\".\"?!0:t.length>=e.length?t.startsWith(e):e.startsWith(t);async function kp({fs:e,cache:t,onProgress:r,onPostCheckout:n,dir:i,gitdir:a,remote:s,ref:o,filepaths:c,noCheckout:l,noUpdateHead:u,dryRun:f,force:d,track:h=!0}){let p;if(n)try{p=await q.resolve({fs:e,gitdir:a,ref:\"HEAD\"})}catch(v){p=\"0000000000000000000000000000000000000000\"}let m;try{m=await q.resolve({fs:e,gitdir:a,ref:o})}catch(v){if(o===\"HEAD\")throw v;let y=`${s}/${o}`;if(m=await q.resolve({fs:e,gitdir:a,ref:y}),h){let b=await We.get({fs:e,gitdir:a});await b.set(`branch.${o}.remote`,s),await b.set(`branch.${o}.merge`,`refs/heads/${o}`),await We.save({fs:e,gitdir:a,config:b})}await q.writeRef({fs:e,gitdir:a,ref:`refs/heads/${o}`,value:m})}if(!l){let v;try{v=await sO({fs:e,cache:t,onProgress:r,dir:i,gitdir:a,ref:o,force:d,filepaths:c})}catch(_){throw _ instanceof Ne&&_.data.what===m?new il(o,m):_}let y=v.filter(([_])=>_===\"conflict\").map(([_,k])=>k);if(y.length>0)throw new nl(y);let b=v.filter(([_])=>_===\"error\").map(([_,k])=>k);if(b.length>0)throw new le(b.join(\", \"));if(f){n&&await n({previousHead:p,newHead:m,type:c!=null&&c.length>0?\"file\":\"branch\"});return}let x=0,E=v.length;await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){await Promise.all(v.filter(([k])=>k===\"delete\"||k===\"delete-index\").map(async function([k,w]){let A=`${i}/${w}`;k===\"delete\"&&await e.rm(A),_.delete({filepath:w}),r&&await r({phase:\"Updating workdir\",loaded:++x,total:E})}))}),await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){for(let[k,w]of v)if(k===\"rmdir\"||k===\"rmdir-index\"){let A=`${i}/${w}`;try{k===\"rmdir-index\"&&_.delete({filepath:w}),await e.rmdir(A),r&&await r({phase:\"Updating workdir\",loaded:++x,total:E})}catch(S){if(S.code===\"ENOTEMPTY\")console.log(`Did not delete ${w} because directory is not empty`);else throw S}}}),await Promise.all(v.filter(([_])=>_===\"mkdir\"||_===\"mkdir-index\").map(async function([_,k]){let w=`${i}/${k}`;await e.mkdir(w),r&&await r({phase:\"Updating workdir\",loaded:++x,total:E})})),await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){await Promise.all(v.filter(([k])=>k===\"create\"||k===\"create-index\"||k===\"update\"||k===\"mkdir-index\").map(async function([k,w,A,S,T]){let P=`${i}/${w}`;try{if(k!==\"create-index\"&&k!==\"mkdir-index\"){let{object:j}=await qe({fs:e,cache:t,gitdir:a,oid:A});if(T&&await e.rm(P),S===33188)await e.write(P,j);else if(S===33261)await e.write(P,j,{mode:511});else if(S===40960)await e.writelink(P,j);else throw new le(`Invalid mode 0o${S.toString(8)} detected in blob ${A}`)}let O=await e.lstat(P);S===33261&&(O.mode=493),k===\"mkdir-index\"&&(O.mode=57344),_.insert({filepath:w,stats:O,oid:A}),r&&await r({phase:\"Updating workdir\",loaded:++x,total:E})}catch(O){console.log(O)}}))}),n&&await n({previousHead:p,newHead:m,type:c!=null&&c.length>0?\"file\":\"branch\"})}if(!u){let v=await q.expand({fs:e,gitdir:a,ref:o});v.startsWith(\"refs/heads\")?await q.writeSymbolicRef({fs:e,gitdir:a,ref:\"HEAD\",value:v}):await q.writeRef({fs:e,gitdir:a,ref:\"HEAD\",value:m})}}async function sO({fs:e,cache:t,onProgress:r,dir:n,gitdir:i,ref:a,force:s,filepaths:o}){let c=0;return ys({fs:e,cache:t,dir:n,gitdir:i,trees:[wi({ref:a}),gu(),mu()],map:async function(l,[u,f,d]){if(l===\".\")return;if(o&&!o.some(p=>m2(l,p)))return null;switch(r&&await r({phase:\"Analyzing workdir\",loaded:++c}),[!!d,!!u,!!f].map(Number).join(\"\")){case\"000\":return;case\"001\":return s&&o&&o.includes(l)?[\"delete\",l]:void 0;case\"010\":switch(await u.type()){case\"tree\":return[\"mkdir\",l];case\"blob\":return[\"create\",l,await u.oid(),await u.mode()];case\"commit\":return[\"mkdir-index\",l,await u.oid(),await u.mode()];default:return[\"error\",`new entry Unhandled type ${await u.type()}`]}case\"011\":switch(`${await u.type()}-${await f.type()}`){case\"tree-tree\":return;case\"tree-blob\":case\"blob-tree\":return[\"conflict\",l];case\"blob-blob\":return await u.oid()!==await f.oid()?s?[\"update\",l,await u.oid(),await u.mode(),await u.mode()!==await f.mode()]:[\"conflict\",l]:await u.mode()!==await f.mode()?s?[\"update\",l,await u.oid(),await u.mode(),!0]:[\"conflict\",l]:[\"create-index\",l,await u.oid(),await u.mode()];case\"commit-tree\":return;case\"commit-blob\":return[\"conflict\",l];default:return[\"error\",`new entry Unhandled type ${u.type}`]}case\"100\":return[\"delete-index\",l];case\"101\":switch(await d.type()){case\"tree\":return[\"rmdir\",l];case\"blob\":return await d.oid()!==await f.oid()?s?[\"delete\",l]:[\"conflict\",l]:[\"delete\",l];case\"commit\":return[\"rmdir-index\",l];default:return[\"error\",`delete entry Unhandled type ${await d.type()}`]}case\"110\":case\"111\":switch(`${await d.type()}-${await u.type()}`){case\"tree-tree\":return;case\"blob-blob\":{if(await d.oid()===await u.oid()&&await d.mode()===await u.mode()&&!s)return;if(f){if(await f.oid()!==await d.oid()&&await f.oid()!==await u.oid())return s?[\"update\",l,await u.oid(),await u.mode(),await u.mode()!==await f.mode()]:[\"conflict\",l]}else if(s)return[\"update\",l,await u.oid(),await u.mode(),await u.mode()!==await d.mode()];return await u.mode()!==await d.mode()?[\"update\",l,await u.oid(),await u.mode(),!0]:await u.oid()!==await d.oid()?[\"update\",l,await u.oid(),await u.mode(),!1]:void 0}case\"tree-blob\":return[\"update-dir-to-blob\",l,await u.oid()];case\"blob-tree\":return[\"update-blob-to-tree\",l];case\"commit-commit\":return[\"mkdir-index\",l,await u.oid(),await u.mode()];default:return[\"error\",`update entry Unhandled type ${await d.type()}-${await u.type()}`]}}},reduce:async function(l,u){return u=l2(u),l?l&&l[0]===\"rmdir\"?(u.push(l),u):(u.unshift(l),u):u}})}async function oO({fs:e,onProgress:t,onPostCheckout:r,dir:n,gitdir:i=$(n,\".git\"),remote:a=\"origin\",ref:s,filepaths:o,noCheckout:c=!1,noUpdateHead:l=s===void 0,dryRun:u=!1,force:f=!1,track:d=!0,cache:h={}}){try{C(\"fs\",e),C(\"dir\",n),C(\"gitdir\",i);let p=s||\"HEAD\";return await kp({fs:new X(e),cache:h,onProgress:t,onPostCheckout:r,dir:n,gitdir:i,remote:a,ref:p,filepaths:o,noCheckout:c,noUpdateHead:l,dryRun:u,force:f,track:d})}catch(p){throw p.caller=\"git.checkout\",p}}var lO=new RegExp(\"^refs/(heads/|tags/|remotes/)?(.*)\");function oa(e){let t=lO.exec(e);return t?t[1]===\"remotes/\"&&e.endsWith(\"/HEAD\")?t[2].slice(0,-5):t[2]:e}async function fa({fs:e,gitdir:t,fullname:r=!1,test:n=!1}){let i=await q.resolve({fs:e,gitdir:t,ref:\"HEAD\",depth:2});if(n)try{await q.resolve({fs:e,gitdir:t,ref:i})}catch(a){return}if(i.startsWith(\"refs/\"))return r?i:oa(i)}function cO(e){return e=e.replace(/^git@([^:]+):/,\"https://$1/\"),e=e.replace(/^ssh:\\/\\//,\"https://\"),e}function g2({username:e=\"\",password:t=\"\"}){return`Basic ${Buffer.from(`${e}:${t}`).toString(\"base64\")}`}async function yl(e,t){let r=s2(e);for(;;){let{value:n,done:i}=await r.next();if(n&&await t(n),i)break}r.return&&r.return()}async function uu(e){let t=0,r=[];await yl(e,a=>{r.push(a),t+=a.byteLength});let n=new Uint8Array(t),i=0;for(let a of r)n.set(a,i),i+=a.byteLength;return n}function Vw(e){let t=e.match(/^https?:\\/\\/([^/]+)@/);if(t==null)return{url:e,auth:{}};t=t[1];let[r,n]=t.split(\":\");return e=e.replace(`${t}@`,\"\"),{url:e,auth:{username:r,password:n}}}function xp(e,t){let r=t.toString(16);return\"0\".repeat(e-r.length)+r}var Ve=class{static flush(){return Buffer.from(\"0000\",\"utf8\")}static delim(){return Buffer.from(\"0001\",\"utf8\")}static encode(t){typeof t==\"string\"&&(t=Buffer.from(t));let r=t.length+4,n=xp(4,r);return Buffer.concat([Buffer.from(n,\"utf8\"),t])}static streamReader(t){let r=new su(t);return async function(){try{let i=await r.read(4);if(i==null)return!0;if(i=parseInt(i.toString(\"utf8\"),16),i===0||i===1)return null;let a=await r.read(i-4);return a==null?!0:a}catch(i){return t.error=i,!0}}}};async function Ww(e){let t={},r;for(;r=await e(),r!==!0;){if(r===null)continue;r=r.toString(\"utf8\").replace(/\\n$/,\"\");let n=r.indexOf(\"=\");if(n>-1){let i=r.slice(0,n),a=r.slice(n+1);t[i]=a}else t[r]=!0}return{protocolVersion:2,capabilities2:t}}async function qw(e,{service:t}){let r=new Set,n=new Map,i=new Map,a=Ve.streamReader(e),s=await a();for(;s===null;)s=await a();if(s===!0)throw new al;if(s.includes(\"version 2\"))return Ww(a);if(s.toString(\"utf8\").replace(/\\n$/,\"\")!==`# service=${t}`)throw new la(`# service=${t}\\\\n`,s.toString(\"utf8\"));let o=await a();for(;o===null;)o=await a();if(o===!0)return{capabilities:r,refs:n,symrefs:i};if(o=o.toString(\"utf8\"),o.includes(\"version 2\"))return Ww(a);let[c,l]=op(o,\"\\0\",\"\\\\x00\");if(l.split(\" \").map(u=>r.add(u)),c!==\"0000000000000000000000000000000000000000 capabilities^{}\"){let[u,f]=op(c,\" \",\" \");for(n.set(f,u);;){let d=await a();if(d===!0)break;if(d!==null){let[h,p]=op(d.toString(\"utf8\"),\" \",\" \");n.set(p,h)}}}for(let u of r)if(u.startsWith(\"symref=\")){let f=u.match(/symref=([^:]+):(.*)/);f.length===3&&i.set(f[1],f[2])}return{protocolVersion:1,capabilities:r,refs:n,symrefs:i}}function op(e,t,r){let n=e.trim().split(t);if(n.length!==2)throw new la(`Two strings separated by '${r}'`,e.toString(\"utf8\"));return n}var Yw=(e,t)=>e.endsWith(\"?\")?`${e}${t}`:`${e}/${t.replace(/^https?:\\/\\//,\"\")}`,Xw=(e,t)=>{(t.username||t.password)&&(e.Authorization=g2(t)),t.headers&&Object.assign(e,t.headers)},lp=async e=>{try{let t=Buffer.from(await uu(e.body)),r=t.toString(\"utf8\");return{preview:r.length<256?r:r.slice(0,256)+\"...\",response:r,data:t}}catch(t){return{}}},_s=class{static async capabilities(){return[\"discover\",\"connect\"]}static async discover({http:t,onProgress:r,onAuth:n,onAuthSuccess:i,onAuthFailure:a,corsProxy:s,service:o,url:c,headers:l,protocolVersion:u}){let{url:f,auth:d}=Vw(c),h=s?Yw(s,f):f;(d.username||d.password)&&(l.Authorization=g2(d)),u===2&&(l[\"Git-Protocol\"]=\"version=2\");let p,m,v=!1;do if(p=await t.request({onProgress:r,method:\"GET\",url:`${h}/info/refs?service=${o}`,headers:l}),m=!1,p.statusCode===401||p.statusCode===203){let y=v?a:n;if(y){if(d=await y(f,{...d,headers:{...l}}),d&&d.cancel)throw new gs;d&&(Xw(l,d),v=!0,m=!0)}}else p.statusCode===200&&v&&i&&await i(f,d);while(m);if(p.statusCode!==200){let{response:y}=await lp(p);throw new ds(p.statusCode,p.statusMessage,y)}if(p.headers[\"content-type\"]===`application/x-${o}-advertisement`){let y=await qw(p.body,{service:o});return y.auth=d,y}else{let{preview:y,response:b,data:x}=await lp(p);try{let E=await qw([x],{service:o});return E.auth=d,E}catch(E){throw new ul(y,b)}}}static async connect({http:t,onProgress:r,corsProxy:n,service:i,url:a,auth:s,body:o,headers:c}){let l=Vw(a);l&&(a=l.url),n&&(a=Yw(n,a)),c[\"content-type\"]=`application/x-${i}-request`,c.accept=`application/x-${i}-result`,Xw(c,s);let u=await t.request({onProgress:r,method:\"POST\",url:`${a}/${i}`,body:o,headers:c});if(u.statusCode!==200){let{response:f}=lp(u);throw new ds(u.statusCode,u.statusMessage,f)}return u}};function uO({url:e}){if(e.startsWith(\"git@\"))return{transport:\"ssh\",address:e};let t=e.match(/(\\w+)(:\\/\\/|::)(.*)/);if(t!==null){if(t[2]===\"://\")return{transport:t[1],address:t[0]};if(t[2]===\"::\")return{transport:t[1],address:t[3]}}}var xs=class{static getRemoteHelperFor({url:t}){let r=new Map;r.set(\"http\",_s),r.set(\"https\",_s);let n=uO({url:t});if(!n)throw new dl(t);if(r.has(n.transport))return r.get(n.transport);throw new fl(t,n.transport,n.transport===\"ssh\"?cO(t):void 0)}},sa=null,ua=class{static async read({fs:t,gitdir:r}){sa===null&&(sa=new Jo.default);let n=$(r,\"shallow\"),i=new Set;return await sa.acquire(n,async function(){let a=await t.read(n,{encoding:\"utf8\"});if(a===null||a.trim()===\"\")return i;a.trim().split(`\n`).map(s=>i.add(s))}),i}static async write({fs:t,gitdir:r,oids:n}){sa===null&&(sa=new Jo.default);let i=$(r,\"shallow\");if(n.size>0){let a=[...n].join(`\n`)+`\n`;await sa.acquire(i,async function(){await t.write(i,a,{encoding:\"utf8\"})})}else await sa.acquire(i,async function(){await t.rm(i)})}};async function fO({fs:e,gitdir:t,oid:r}){let n=`objects/${r.slice(0,2)}/${r.slice(2)}`;return e.exists(`${t}/${n}`)}async function dO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i}){let a=await e.readdir($(r,\"objects/pack\"));a=a.filter(s=>s.endsWith(\".idx\"));for(let s of a){let o=`${r}/objects/pack/${s}`,c=await Ep({fs:e,cache:t,filename:o,getExternalRefDelta:i});if(c.error)throw new le(c.error);if(c.offsets.has(n))return!0}return!1}async function Zw({fs:e,cache:t,gitdir:r,oid:n,format:i=\"content\"}){let a=o=>qe({fs:e,cache:t,gitdir:r,oid:o}),s=await fO({fs:e,gitdir:r,oid:n});return s||(s=await dO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:a})),s}function hO(e){let i=\"5041434b\"+\"00000002\"+\"00000000\";return e.slice(0,12).toString(\"hex\")===i}function v2(e,t){let r=e.map(n=>n.split(\"=\",1)[0]);return t.filter(n=>{let i=n.split(\"=\",1)[0];return r.includes(i)})}var yu={name:\"isomorphic-git\",version:\"1.27.1\",agent:\"git/isomorphic-git@1.27.1\"},ls=class{constructor(){this._queue=[]}write(t){if(this._ended)throw Error(\"You cannot write to a FIFO that has already been ended!\");if(this._waiting){let r=this._waiting;this._waiting=null,r({value:t})}else this._queue.push(t)}end(){if(this._ended=!0,this._waiting){let t=this._waiting;this._waiting=null,t({done:!0})}}destroy(t){this.error=t,this.end()}async next(){if(this._queue.length>0)return{value:this._queue.shift()};if(this._ended)return{done:!0};if(this._waiting)throw Error(\"You cannot call read until the previous call to read has returned!\");return new Promise(t=>{this._waiting=t})}};function pO(e){let t=e.indexOf(\"\\r\"),r=e.indexOf(`\n`);return t===-1&&r===-1?-1:t===-1?r+1:r===-1?t+1:r===t+1?r+1:Math.min(t,r)+1}function y2(e){let t=new ls,r=\"\";return(async()=>(await yl(e,n=>{for(n=n.toString(\"utf8\"),r+=n;;){let i=pO(r);if(i===-1)break;t.write(r.slice(0,i)),r=r.slice(i)}}),r.length>0&&t.write(r),t.end()))(),t}var fu=class{static demux(t){let r=Ve.streamReader(t),n=new ls,i=new ls,a=new ls,s=async function(){let o=await r();if(o===null)return s();if(o===!0){n.end(),a.end(),t.error?i.destroy(t.error):i.end();return}switch(o[0]){case 1:{i.write(o.slice(1));break}case 2:{a.write(o.slice(1));break}case 3:{let c=o.slice(1);a.write(c),n.end(),a.end(),i.destroy(new Error(c.toString(\"utf8\")));return}default:n.write(o)}s()};return s(),{packetlines:n,packfile:i,progress:a}}};async function mO(e){let{packetlines:t,packfile:r,progress:n}=fu.demux(e),i=[],a=[],s=[],o=!1,c=!1;return new Promise((l,u)=>{yl(t,f=>{let d=f.toString(\"utf8\").trim();if(d.startsWith(\"shallow\")){let h=d.slice(-41).trim();h.length!==40&&u(new bi(h)),i.push(h)}else if(d.startsWith(\"unshallow\")){let h=d.slice(-41).trim();h.length!==40&&u(new bi(h)),a.push(h)}else if(d.startsWith(\"ACK\")){let[,h,p]=d.split(\" \");s.push({oid:h,status:p}),p||(c=!0)}else d.startsWith(\"NAK\")?(o=!0,c=!0):(c=!0,o=!0);c&&(e.error?u(e.error):l({shallows:i,unshallows:a,acks:s,nak:o,packfile:r,progress:n}))}).finally(()=>{c||(e.error?u(e.error):l({shallows:i,unshallows:a,acks:s,nak:o,packfile:r,progress:n}))})})}function gO({capabilities:e=[],wants:t=[],haves:r=[],shallows:n=[],depth:i=null,since:a=null,exclude:s=[]}){let o=[];t=[...new Set(t)];let c=` ${e.join(\" \")}`;for(let l of t)o.push(Ve.encode(`want ${l}${c}\n`)),c=\"\";for(let l of n)o.push(Ve.encode(`shallow ${l}\n`));i!==null&&o.push(Ve.encode(`deepen ${i}\n`)),a!==null&&o.push(Ve.encode(`deepen-since ${Math.floor(a.valueOf()/1e3)}\n`));for(let l of s)o.push(Ve.encode(`deepen-not ${l}\n`));o.push(Ve.flush());for(let l of r)o.push(Ve.encode(`have ${l}\n`));return o.push(Ve.encode(`done\n`)),o}async function Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:c,ref:l,remoteRef:u,remote:f,url:d,corsProxy:h,depth:p=null,since:m=null,exclude:v=[],relative:y=!1,tags:b=!1,singleBranch:x=!1,headers:E={},prune:_=!1,pruneTags:k=!1}){let w=l||await fa({fs:e,gitdir:c,test:!0}),A=await We.get({fs:e,gitdir:c}),S=f||w&&await A.get(`branch.${w}.remote`)||\"origin\",T=d||await A.get(`remote.${S}.url`);if(typeof T==\"undefined\")throw new Qt(\"remote OR url\");let P=u||w&&await A.get(`branch.${w}.merge`)||l||\"HEAD\";h===void 0&&(h=await A.get(\"http.corsProxy\"));let O=xs.getRemoteHelperFor({url:T}),j=await O.discover({http:r,onAuth:a,onAuthSuccess:s,onAuthFailure:o,corsProxy:h,service:\"git-upload-pack\",url:T,headers:E,protocolVersion:1}),D=j.auth,Q=j.refs;if(Q.size===0)return{defaultBranch:null,fetchHead:null,fetchHeadDescription:null};if(p!==null&&!j.capabilities.has(\"shallow\"))throw new yi(\"shallow\",\"depth\");if(m!==null&&!j.capabilities.has(\"deepen-since\"))throw new yi(\"deepen-since\",\"since\");if(v.length>0&&!j.capabilities.has(\"deepen-not\"))throw new yi(\"deepen-not\",\"exclude\");if(y===!0&&!j.capabilities.has(\"deepen-relative\"))throw new yi(\"deepen-relative\",\"relative\");let{oid:de,fullref:ee}=q.resolveAgainstMap({ref:P,map:Q});for(let U of Q.keys())U===ee||U===\"HEAD\"||U.startsWith(\"refs/heads/\")||b&&U.startsWith(\"refs/tags/\")||Q.delete(U);let J=v2([...j.capabilities],[\"multi_ack_detailed\",\"no-done\",\"side-band-64k\",\"ofs-delta\",`agent=${yu.agent}`]);y&&J.push(\"deepen-relative\");let Pe=x?[de]:Q.values(),me=x?[w]:await q.listRefs({fs:e,gitdir:c,filepath:\"refs\"}),F=[];for(let U of me)try{U=await q.expand({fs:e,gitdir:c,ref:U});let Le=await q.resolve({fs:e,gitdir:c,ref:U});await Zw({fs:e,cache:t,gitdir:c,oid:Le})&&F.push(Le)}catch(Le){}F=[...new Set(F)];let G=await ua.read({fs:e,gitdir:c}),N=j.capabilities.has(\"shallow\")?[...G]:[],Me=gO({capabilities:J,wants:Pe,haves:F,shallows:N,depth:p,since:m,exclude:v}),Dt=Buffer.from(await uu(Me)),_t=await O.connect({http:r,onProgress:n,corsProxy:h,service:\"git-upload-pack\",url:T,auth:D,body:[Dt],headers:E}),Ee=await mO(_t.body);_t.headers&&(Ee.headers=_t.headers);for(let U of Ee.shallows)if(!G.has(U))try{let{object:Le}=await qe({fs:e,cache:t,gitdir:c,oid:U}),L=new tr(Le),Y=await Promise.all(L.headers().parent.map(De=>Zw({fs:e,cache:t,gitdir:c,oid:De})));Y.length===0||Y.every(De=>De)||G.add(U)}catch(Le){G.add(U)}for(let U of Ee.unshallows)G.delete(U);if(await ua.write({fs:e,gitdir:c,oids:G}),x){let U=new Map([[ee,de]]),Le=new Map,L=10,Y=ee;for(;L--;){let vt=j.symrefs.get(Y);if(vt===void 0)break;Le.set(Y,vt),Y=vt}let ye=Q.get(Y);ye&&U.set(Y,ye);let{pruned:De}=await q.updateRemoteRefs({fs:e,gitdir:c,remote:S,refs:U,symrefs:Le,tags:b,prune:_});_&&(Ee.pruned=De)}else{let{pruned:U}=await q.updateRemoteRefs({fs:e,gitdir:c,remote:S,refs:Q,symrefs:j.symrefs,tags:b,prune:_,pruneTags:k});_&&(Ee.pruned=U)}if(Ee.HEAD=j.symrefs.get(\"HEAD\"),Ee.HEAD===void 0){let{oid:U}=q.resolveAgainstMap({ref:\"HEAD\",map:Q});for(let[Le,L]of Q.entries())if(Le!==\"HEAD\"&&L===U){Ee.HEAD=Le;break}}let st=ee.startsWith(\"refs/tags\")?\"tag\":\"branch\";if(Ee.FETCH_HEAD={oid:de,description:`${st} '${oa(ee)}' of ${T}`},n||i){let U=y2(Ee.progress);yl(U,async Le=>{if(i&&await i(Le),n){let L=Le.match(/([^:]*).*\\((\\d+?)\\/(\\d+?)\\)/);L&&await n({phase:L[1].trim(),loaded:parseInt(L[2],10),total:parseInt(L[3],10)})}})}let ot=Buffer.from(await uu(Ee.packfile));if(_t.body.error)throw _t.body.error;let Ct=ot.slice(-20).toString(\"hex\"),$e={defaultBranch:Ee.HEAD,fetchHead:Ee.FETCH_HEAD.oid,fetchHeadDescription:Ee.FETCH_HEAD.description};if(Ee.headers&&($e.headers=Ee.headers),_&&($e.pruned=Ee.pruned),Ct!==\"\"&&!hO(ot)){$e.packfile=`objects/pack/pack-${Ct}.pack`;let U=$(c,$e.packfile);await e.write(U,ot);let Le=Y=>qe({fs:e,cache:t,gitdir:c,oid:Y}),L=await tl.fromPack({pack:ot,getExternalRefDelta:Le,onProgress:n});await e.write(U.replace(/\\.pack$/,\".idx\"),await L.toBuffer())}return $e}async function w2({fs:e,bare:t=!1,dir:r,gitdir:n=t?r:$(r,\".git\"),defaultBranch:i=\"master\"}){if(await e.exists(n+\"/config\"))return;let a=[\"hooks\",\"info\",\"objects/info\",\"objects/pack\",\"refs/heads\",\"refs/tags\"];a=a.map(s=>n+\"/\"+s);for(let s of a)await e.mkdir(s);await e.write(n+\"/config\",`[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = ${t}\n`+(t?\"\":`\tlogallrefupdates = true\n`)+`\tsymlinks = false\n\tignorecase = true\n`),await e.write(n+\"/HEAD\",`ref: refs/heads/${i}\n`)}async function vO({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,onPostCheckout:c,dir:l,gitdir:u,url:f,corsProxy:d,ref:h,remote:p,depth:m,since:v,exclude:y,relative:b,singleBranch:x,noCheckout:E,noTags:_,headers:k}){try{if(await w2({fs:e,gitdir:u}),await p2({fs:e,gitdir:u,remote:p,url:f,force:!1}),d){let S=await We.get({fs:e,gitdir:u});await S.set(\"http.corsProxy\",d),await We.save({fs:e,gitdir:u,config:S})}let{defaultBranch:w,fetchHead:A}=await Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:u,ref:h,remote:p,corsProxy:d,depth:m,since:v,exclude:y,relative:b,singleBranch:x,headers:k,tags:!_});if(A===null)return;h=h||w,h=h.replace(\"refs/heads/\",\"\"),await kp({fs:e,cache:t,onProgress:n,onPostCheckout:c,dir:l,gitdir:u,ref:h,remote:p,noCheckout:E})}catch(w){throw await e.rmdir(u,{recursive:!0,maxRetries:10}).catch(()=>{}),w}}async function yO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPostCheckout:o,dir:c,gitdir:l=$(c,\".git\"),url:u,corsProxy:f=void 0,ref:d=void 0,remote:h=\"origin\",depth:p=void 0,since:m=void 0,exclude:v=[],relative:y=!1,singleBranch:b=!1,noCheckout:x=!1,noTags:E=!1,headers:_={},cache:k={}}){try{return C(\"fs\",e),C(\"http\",t),C(\"gitdir\",l),x||C(\"dir\",c),C(\"url\",u),await vO({fs:new X(e),cache:k,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPostCheckout:o,dir:c,gitdir:l,url:u,corsProxy:f,ref:d,remote:h,depth:p,since:m,exclude:v,relative:y,singleBranch:b,noCheckout:x,noTags:E,headers:_})}catch(w){throw w.caller=\"git.clone\",w}}async function wO({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),message:i,author:a,committer:s,signingKey:o,amend:c=!1,dryRun:l=!1,noUpdateBranch:u=!1,ref:f,parent:d,tree:h,cache:p={}}){try{C(\"fs\",e),c||C(\"message\",i),o&&C(\"onSign\",t);let m=new X(e);return await vu({fs:m,cache:p,onSign:t,gitdir:n,message:i,author:a,committer:s,signingKey:o,amend:c,dryRun:l,noUpdateBranch:u,ref:f,parent:d,tree:h})}catch(m){throw m.caller=\"git.commit\",m}}async function bO({fs:e,dir:t,gitdir:r=$(t,\".git\"),fullname:n=!1,test:i=!1}){try{return C(\"fs\",e),C(\"gitdir\",r),await fa({fs:new X(e),gitdir:r,fullname:n,test:i})}catch(a){throw a.caller=\"git.currentBranch\",a}}async function _O({fs:e,gitdir:t,ref:r}){if(r=r.startsWith(\"refs/heads/\")?r:`refs/heads/${r}`,!await q.exists({fs:e,gitdir:t,ref:r}))throw new Ne(r);let i=await q.expand({fs:e,gitdir:t,ref:r}),a=await fa({fs:e,gitdir:t,fullname:!0});if(i===a){let c=await q.resolve({fs:e,gitdir:t,ref:i});await q.writeRef({fs:e,gitdir:t,ref:\"HEAD\",value:c})}await q.deleteRef({fs:e,gitdir:t,ref:i});let s=oa(r),o=await We.get({fs:e,gitdir:t});await o.deleteSection(\"branch\",s),await We.save({fs:e,gitdir:t,config:o})}async function xO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n}){try{return C(\"fs\",e),C(\"ref\",n),await _O({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller=\"git.deleteBranch\",i}}async function SO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n}){try{C(\"fs\",e),C(\"ref\",n),await q.deleteRef({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller=\"git.deleteRef\",i}}async function EO({fs:e,gitdir:t,remote:r}){let n=await We.get({fs:e,gitdir:t});await n.deleteSection(\"remote\",r),await We.save({fs:e,gitdir:t,config:n})}async function AO({fs:e,dir:t,gitdir:r=$(t,\".git\"),remote:n}){try{return C(\"fs\",e),C(\"remote\",n),await EO({fs:new X(e),gitdir:r,remote:n})}catch(i){throw i.caller=\"git.deleteRemote\",i}}async function kO({fs:e,gitdir:t,ref:r}){r=r.startsWith(\"refs/tags/\")?r:`refs/tags/${r}`,await q.deleteRef({fs:e,gitdir:t,ref:r})}async function TO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n}){try{return C(\"fs\",e),C(\"ref\",n),await kO({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller=\"git.deleteTag\",i}}async function CO({fs:e,gitdir:t,oid:r}){let n=r.slice(0,2);return(await e.readdir(`${t}/objects/${n}`)).map(a=>`${n}${a}`).filter(a=>a.startsWith(r))}async function PO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i}){let a=[],s=await e.readdir($(r,\"objects/pack\"));s=s.filter(o=>o.endsWith(\".idx\"));for(let o of s){let c=`${r}/objects/pack/${o}`,l=await Ep({fs:e,cache:t,filename:c,getExternalRefDelta:i});if(l.error)throw new le(l.error);for(let u of l.offsets.keys())u.startsWith(n)&&a.push(u)}return a}async function RO({fs:e,cache:t,gitdir:r,oid:n}){let i=o=>qe({fs:e,cache:t,gitdir:r,oid:o}),a=await CO({fs:e,gitdir:r,oid:n}),s=await PO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i});for(let o of s)a.indexOf(o)===-1&&a.push(o);if(a.length===1)return a[0];throw a.length>1?new rl(\"oids\",n,a):new Ne(`an object matching \"${n}\"`)}async function MO({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await RO({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller=\"git.expandOid\",a}}async function OO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),await q.expand({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller=\"git.expandRef\",i}}async function Cp({fs:e,cache:t,gitdir:r,oids:n}){let i={},a=n.length,s=n.map((o,c)=>({index:c,oid:o}));for(;s.length;){let o=new Set;for(let{oid:l,index:u}of s)i[l]||(i[l]=new Set),i[l].add(u),i[l].size===a&&o.add(l);if(o.size>0)return[...o];let c=new Map;for(let{oid:l,index:u}of s)try{let{object:f}=await qe({fs:e,cache:t,gitdir:r,oid:l}),d=tr.from(f),{parent:h}=d.parseHeaders();for(let p of h)(!i[p]||!i[p].has(u))&&c.set(p+\":\"+u,{oid:p,index:u})}catch(f){}s=Array.from(c.values())}return[]}var cp=/^.*(\\r?\\n|$)/gm;function IO({branches:e,contents:t}){let r=e[1],n=e[2],i=t[0],a=t[1],s=t[2],o=a.match(cp),c=i.match(cp),l=s.match(cp),u=(0,e2.default)(o,c,l),f=7,d=\"\",h=!0;for(let p of u)p.ok&&(d+=p.ok.join(\"\")),p.conflict&&(h=!1,d+=`${\"<\".repeat(f)} ${r}\n`,d+=p.conflict.a.join(\"\"),d+=`${\"=\".repeat(f)}\n`,d+=p.conflict.b.join(\"\"),d+=`${\">\".repeat(f)} ${n}\n`);return{cleanMerge:h,mergedText:d}}async function FO({fs:e,cache:t,dir:r,gitdir:n=$(r,\".git\"),index:i,ourOid:a,baseOid:s,theirOid:o,ourName:c=\"ours\",baseName:l=\"base\",theirName:u=\"theirs\",dryRun:f=!1,abortOnConflict:d=!0,mergeDriver:h}){let p=wi({ref:a}),m=wi({ref:s}),v=wi({ref:o}),y=[],b=[],x=[],E=[],_=await ys({fs:e,cache:t,dir:r,gitdir:n,trees:[p,m,v],map:async function(k,[w,A,S]){let T=nu(k),P=await lu(w,A),O=await lu(S,A);switch(`${P}-${O}`){case\"false-false\":return{mode:await A.mode(),path:T,oid:await A.oid(),type:await A.type()};case\"false-true\":return S?{mode:await S.mode(),path:T,oid:await S.oid(),type:await S.type()}:void 0;case\"true-false\":return w?{mode:await w.mode(),path:T,oid:await w.oid(),type:await w.type()}:void 0;case\"true-true\":{if(w&&A&&S&&await w.type()===\"blob\"&&await A.type()===\"blob\"&&await S.type()===\"blob\")return $O({fs:e,gitdir:n,path:T,ours:w,base:A,theirs:S,ourName:c,baseName:l,theirName:u,mergeDriver:h}).then(async j=>{if(j.cleanMerge)d||i.insert({filepath:k,oid:j.mergeResult.oid,stage:0});else if(y.push(k),b.push(k),!d){let D=await A.oid(),Q=await w.oid(),de=await S.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:D,stage:1}),i.insert({filepath:k,oid:Q,stage:2}),i.insert({filepath:k,oid:de,stage:3})}return j.mergeResult});if(A&&!w&&S&&await A.type()===\"blob\"&&await S.type()===\"blob\"){if(y.push(k),x.push(k),!d){let j=await A.oid(),D=await S.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:j,stage:1}),i.insert({filepath:k,oid:D,stage:3})}return{mode:await S.mode(),oid:await S.oid(),type:\"blob\",path:T}}if(A&&w&&!S&&await A.type()===\"blob\"&&await w.type()===\"blob\"){if(y.push(k),E.push(k),!d){let j=await A.oid(),D=await w.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:j,stage:1}),i.insert({filepath:k,oid:D,stage:2})}return{mode:await w.mode(),oid:await w.oid(),type:\"blob\",path:T}}if(A&&!w&&!S&&await A.type()===\"blob\")return;throw new hs}}},reduce:y.length!==0&&(!r||d)?void 0:async(k,w)=>{let A=w.filter(Boolean);if(k&&!(k&&k.type===\"tree\"&&A.length===0)){if(A.length>0){let T=new er(A).toObject(),P=await mr({fs:e,gitdir:n,type:\"tree\",object:T,dryRun:f});k.oid=P}return k}}});return y.length!==0?(r&&!d&&await ys({fs:e,cache:t,dir:r,gitdir:n,trees:[wi({ref:_.oid})],map:async function(k,[w]){let A=`${r}/${k}`;if(await w.type()===\"blob\"){let S=await w.mode(),T=new TextDecoder().decode(await w.content());await e.write(A,T,{mode:S})}return!0}}),new ps(y,b,x,E)):_.oid}async function $O({fs:e,gitdir:t,path:r,ours:n,base:i,theirs:a,ourName:s,theirName:o,baseName:c,dryRun:l,mergeDriver:u=IO}){let f=\"blob\",d=await i.mode()===await n.mode()?await a.mode():await n.mode();if(await n.oid()===await a.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await n.oid(),type:f}};if(await n.oid()===await i.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await a.oid(),type:f}};if(await a.oid()===await i.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await n.oid(),type:f}};let h=Buffer.from(await n.content()).toString(\"utf8\"),p=Buffer.from(await i.content()).toString(\"utf8\"),m=Buffer.from(await a.content()).toString(\"utf8\"),{mergedText:v,cleanMerge:y}=await u({branches:[c,s,o],contents:[p,h,m],path:r}),b=await mr({fs:e,gitdir:t,type:\"blob\",object:Buffer.from(v,\"utf8\"),dryRun:l});return{cleanMerge:y,mergeResult:{mode:d,path:r,oid:b,type:f}}}async function b2({fs:e,cache:t,dir:r,gitdir:n,ours:i,theirs:a,fastForward:s=!0,fastForwardOnly:o=!1,dryRun:c=!1,noUpdateBranch:l=!1,abortOnConflict:u=!0,message:f,author:d,committer:h,signingKey:p,onSign:m,mergeDriver:v}){i===void 0&&(i=await fa({fs:e,gitdir:n,fullname:!0})),i=await q.expand({fs:e,gitdir:n,ref:i}),a=await q.expand({fs:e,gitdir:n,ref:a});let y=await q.resolve({fs:e,gitdir:n,ref:i}),b=await q.resolve({fs:e,gitdir:n,ref:a}),x=await Cp({fs:e,cache:t,gitdir:n,oids:[y,b]});if(x.length!==1)throw new hs;let E=x[0];if(E===b)return{oid:y,alreadyMerged:!0};if(s&&E===y)return!c&&!l&&await q.writeRef({fs:e,gitdir:n,ref:i,value:b}),{oid:b,fastForward:!0};{if(o)throw new sl;let _=await mt.acquire({fs:e,gitdir:n,cache:t,allowUnmerged:!1},async w=>FO({fs:e,cache:t,dir:r,gitdir:n,index:w,ourOid:y,theirOid:b,baseOid:E,ourName:oa(i),baseName:\"base\",theirName:oa(a),dryRun:c,abortOnConflict:u,mergeDriver:v}));if(_ instanceof ps)throw _;return f||(f=`Merge branch '${oa(a)}' into ${oa(i)}`),{oid:await vu({fs:e,cache:t,gitdir:n,message:f,ref:i,tree:_,parent:[y,b],author:d,committer:h,signingKey:p,onSign:m,dryRun:c,noUpdateBranch:l}),tree:_,mergeCommit:!0}}}async function _2({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,dir:c,gitdir:l,ref:u,url:f,remote:d,remoteRef:h,prune:p,pruneTags:m,fastForward:v,fastForwardOnly:y,corsProxy:b,singleBranch:x,headers:E,author:_,committer:k,signingKey:w}){try{if(!u){let T=await fa({fs:e,gitdir:l});if(!T)throw new Qt(\"ref\");u=T}let{fetchHead:A,fetchHeadDescription:S}=await Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:l,corsProxy:b,ref:u,url:f,remote:d,remoteRef:h,singleBranch:x,headers:E,prune:p,pruneTags:m});await b2({fs:e,cache:t,gitdir:l,ours:u,theirs:A,fastForward:v,fastForwardOnly:y,message:`Merge ${S}`,author:_,committer:k,signingKey:w,dryRun:!1,noUpdateBranch:!1}),await kp({fs:e,cache:t,onProgress:n,dir:c,gitdir:l,ref:u,remote:d,noCheckout:!1})}catch(A){throw A.caller=\"git.pull\",A}}async function LO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,\".git\"),ref:l,url:u,remote:f,remoteRef:d,corsProxy:h,singleBranch:p,headers:m={},cache:v={}}){try{C(\"fs\",e),C(\"http\",t),C(\"gitdir\",c);let y={name:\"\",email:\"\",timestamp:Date.now(),timezoneOffset:0};return await _2({fs:new X(e),cache:v,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c,ref:l,url:u,remote:f,remoteRef:d,fastForwardOnly:!0,corsProxy:h,singleBranch:p,headers:m,author:y,committer:y})}catch(y){throw y.caller=\"git.fastForward\",y}}async function DO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,\".git\"),ref:l,remote:u,remoteRef:f,url:d,corsProxy:h,depth:p=null,since:m=null,exclude:v=[],relative:y=!1,tags:b=!1,singleBranch:x=!1,headers:E={},prune:_=!1,pruneTags:k=!1,cache:w={}}){try{return C(\"fs\",e),C(\"http\",t),C(\"gitdir\",c),await Tp({fs:new X(e),cache:w,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,gitdir:c,ref:l,remote:u,remoteRef:f,url:d,corsProxy:h,depth:p,since:m,exclude:v,relative:y,tags:b,singleBranch:x,headers:E,prune:_,pruneTags:k})}catch(A){throw A.caller=\"git.fetch\",A}}async function NO({fs:e,dir:t,gitdir:r=$(t,\".git\"),oids:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oids\",n),await Cp({fs:new X(e),cache:i,gitdir:r,oids:n})}catch(a){throw a.caller=\"git.findMergeBase\",a}}async function x2({fs:e,filepath:t}){if(await e.exists($(t,\".git\")))return t;{let r=fs(t);if(r===t)throw new Ne(`git root for ${t}`);return x2({fs:e,filepath:r})}}async function jO({fs:e,filepath:t}){try{return C(\"fs\",e),C(\"filepath\",t),await x2({fs:new X(e),filepath:t})}catch(r){throw r.caller=\"git.findRoot\",r}}async function BO({fs:e,dir:t,gitdir:r=$(t,\".git\"),path:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"path\",n),await ml({fs:new X(e),gitdir:r,path:n})}catch(i){throw i.caller=\"git.getConfig\",i}}async function HO({fs:e,gitdir:t,path:r}){return(await We.get({fs:e,gitdir:t})).getall(r)}async function UO({fs:e,dir:t,gitdir:r=$(t,\".git\"),path:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"path\",n),await HO({fs:new X(e),gitdir:r,path:n})}catch(i){throw i.caller=\"git.getConfigAll\",i}}async function GO({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1}){try{C(\"http\",e),C(\"url\",a);let l=await xs.getRemoteHelperFor({url:a}).discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?\"git-receive-pack\":\"git-upload-pack\",url:a,headers:s,protocolVersion:1}),u={capabilities:[...l.capabilities]};for(let[f,d]of l.refs){let h=f.split(\"/\"),p=h.pop(),m=u;for(let v of h)m[v]=m[v]||{},m=m[v];m[p]=d}for(let[f,d]of l.symrefs){let h=f.split(\"/\"),p=h.pop(),m=u;for(let v of h)m[v]=m[v]||{},m=m[v];m[p]=d}return u}catch(c){throw c.caller=\"git.getRemoteInfo\",c}}function S2(e,t,r,n){let i=[];for(let[a,s]of e.refs){if(t&&!a.startsWith(t))continue;if(a.endsWith(\"^{}\")){if(n){let c=a.replace(\"^{}\",\"\"),l=i[i.length-1],u=l.ref===c?l:i.find(f=>f.ref===c);if(u===void 0)throw new Error(\"I did not expect this to happen\");u.peeled=s}continue}let o={ref:a,oid:s};r&&e.symrefs.has(a)&&(o.target=e.symrefs.get(a)),i.push(o)}return i}async function zO({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1,protocolVersion:c=2}){try{C(\"http\",e),C(\"url\",a);let u=await xs.getRemoteHelperFor({url:a}).discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?\"git-receive-pack\":\"git-upload-pack\",url:a,headers:s,protocolVersion:c});if(u.protocolVersion===2)return{protocolVersion:u.protocolVersion,capabilities:u.capabilities2};let f={};for(let d of u.capabilities){let[h,p]=d.split(\"=\");p?f[h]=p:f[h]=!0}return{protocolVersion:1,capabilities:f,refs:S2(u,void 0,!0,!0)}}catch(l){throw l.caller=\"git.getRemoteInfo2\",l}}async function VO({type:e,object:t,format:r=\"content\",oid:n=void 0}){return r!==\"deflated\"&&(r!==\"wrapped\"&&(t=_i.wrap({type:e,object:t})),n=await Gn(t)),{oid:n,object:t}}async function WO({object:e}){try{C(\"object\",e),typeof e==\"string\"?e=Buffer.from(e,\"utf8\"):e=Buffer.from(e);let t=\"blob\",{oid:r,object:n}=await VO({type:\"blob\",format:\"content\",object:e});return{oid:r,type:t,object:new Uint8Array(n),format:\"wrapped\"}}catch(t){throw t.caller=\"git.hashBlob\",t}}async function qO({fs:e,cache:t,onProgress:r,dir:n,gitdir:i,filepath:a}){try{a=$(n,a);let s=await e.read(a),o=l=>qe({fs:e,cache:t,gitdir:i,oid:l}),c=await tl.fromPack({pack:s,getExternalRefDelta:o,onProgress:r});return await e.write(a.replace(/\\.pack$/,\".idx\"),await c.toBuffer()),{oids:[...c.hashes]}}catch(s){throw s.caller=\"git.indexPack\",s}}async function YO({fs:e,onProgress:t,dir:r,gitdir:n=$(r,\".git\"),filepath:i,cache:a={}}){try{return C(\"fs\",e),C(\"dir\",r),C(\"gitdir\",r),C(\"filepath\",i),await qO({fs:new X(e),cache:a,onProgress:t,dir:r,gitdir:n,filepath:i})}catch(s){throw s.caller=\"git.indexPack\",s}}async function XO({fs:e,bare:t=!1,dir:r,gitdir:n=t?r:$(r,\".git\"),defaultBranch:i=\"master\"}){try{return C(\"fs\",e),C(\"gitdir\",n),t||C(\"dir\",r),await w2({fs:new X(e),bare:t,dir:r,gitdir:n,defaultBranch:i})}catch(a){throw a.caller=\"git.init\",a}}async function E2({fs:e,cache:t,gitdir:r,oid:n,ancestor:i,depth:a}){let s=await ua.read({fs:e,gitdir:r});if(!n)throw new Qt(\"oid\");if(!i)throw new Qt(\"ancestor\");if(n===i)return!1;let o=[n],c=new Set,l=0;for(;o.length;){if(l++===a)throw new ll(a);let u=o.shift(),{type:f,object:d}=await qe({fs:e,cache:t,gitdir:r,oid:u});if(f!==\"commit\")throw new Gt(u,f,\"commit\");let h=tr.from(d).parse();for(let p of h.parent)if(p===i)return!0;if(!s.has(u))for(let p of h.parent)c.has(p)||(o.push(p),c.add(p))}return!1}async function ZO({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,ancestor:i,depth:a=-1,cache:s={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),C(\"ancestor\",i),await E2({fs:new X(e),cache:s,gitdir:r,oid:n,ancestor:i,depth:a})}catch(o){throw o.caller=\"git.isDescendent\",o}}async function KO({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n}){try{return C(\"fs\",e),C(\"dir\",t),C(\"gitdir\",r),C(\"filepath\",n),ws.isIgnored({fs:new X(e),dir:t,gitdir:r,filepath:n})}catch(i){throw i.caller=\"git.isIgnored\",i}}async function JO({fs:e,dir:t,gitdir:r=$(t,\".git\"),remote:n}){try{return C(\"fs\",e),C(\"gitdir\",r),q.listBranches({fs:new X(e),gitdir:r,remote:n})}catch(i){throw i.caller=\"git.listBranches\",i}}async function QO({fs:e,gitdir:t,ref:r,cache:n}){if(r){let i=await q.resolve({gitdir:t,fs:e,ref:r}),a=[];return await A2({fs:e,cache:n,gitdir:t,oid:i,filenames:a,prefix:\"\"}),a}else return mt.acquire({fs:e,gitdir:t,cache:n},async function(i){return i.entries.map(a=>a.path)})}async function A2({fs:e,cache:t,gitdir:r,oid:n,filenames:i,prefix:a}){let{tree:s}=await Ss({fs:e,cache:t,gitdir:r,oid:n});for(let o of s)o.type===\"tree\"?await A2({fs:e,cache:t,gitdir:r,oid:o.oid,filenames:i,prefix:$(a,o.path)}):i.push($(a,o.path))}async function e8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),await QO({fs:new X(e),cache:i,gitdir:r,ref:n})}catch(a){throw a.caller=\"git.listFiles\",a}}async function t8({fs:e,cache:t,gitdir:r,ref:n}){let i;try{i=await q.resolve({gitdir:r,fs:e,ref:n})}catch(o){if(o instanceof Ne)return[]}return(await Ss({fs:e,cache:t,gitdir:r,oid:i})).tree.map(o=>({target:o.path,note:o.oid}))}async function r8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n=\"refs/notes/commits\",cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),await t8({fs:new X(e),cache:i,gitdir:r,ref:n})}catch(a){throw a.caller=\"git.listNotes\",a}}async function n8({fs:e,gitdir:t}){let r=await We.get({fs:e,gitdir:t}),n=await r.getSubsections(\"remote\");return Promise.all(n.map(async a=>{let s=await r.get(`remote.${a}.url`);return{remote:a,url:s}}))}async function i8({fs:e,dir:t,gitdir:r=$(t,\".git\")}){try{return C(\"fs\",e),C(\"gitdir\",r),await n8({fs:new X(e),gitdir:r})}catch(n){throw n.caller=\"git.listRemotes\",n}}async function a8(e){let t=Ve.streamReader(e),r=[],n;for(;n=await t(),n!==!0;){if(n===null)continue;n=n.toString(\"utf8\").replace(/\\n$/,\"\");let[i,a,...s]=n.split(\" \"),o={ref:a,oid:i};for(let c of s){let[l,u]=c.split(\":\");l===\"symref-target\"?o.target=u:l===\"peeled\"&&(o.peeled=u)}r.push(o)}return r}async function s8({prefix:e,symrefs:t,peelTags:r}){let n=[];return n.push(Ve.encode(`command=ls-refs\n`)),n.push(Ve.encode(`agent=${yu.agent}\n`)),(r||t||e)&&n.push(Ve.delim()),r&&n.push(Ve.encode(\"peel\")),t&&n.push(Ve.encode(\"symrefs\")),e&&n.push(Ve.encode(`ref-prefix ${e}`)),n.push(Ve.flush()),n}async function o8({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1,protocolVersion:c=2,prefix:l,symrefs:u,peelTags:f}){try{C(\"http\",e),C(\"url\",a);let d=await _s.discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?\"git-receive-pack\":\"git-upload-pack\",url:a,headers:s,protocolVersion:c});if(d.protocolVersion===1)return S2(d,l,u,f);let h=await s8({prefix:l,symrefs:u,peelTags:f}),p=await _s.connect({http:e,auth:d.auth,headers:s,corsProxy:i,service:o?\"git-receive-pack\":\"git-upload-pack\",url:a,body:h});return a8(p.body)}catch(d){throw d.caller=\"git.listServerRefs\",d}}async function l8({fs:e,dir:t,gitdir:r=$(t,\".git\")}){try{return C(\"fs\",e),C(\"gitdir\",r),q.listTags({fs:new X(e),gitdir:r})}catch(n){throw n.caller=\"git.listTags\",n}}function c8(e,t){return e.committer.timestamp-t.committer.timestamp}var u8=\"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391\";async function Kw({fs:e,cache:t,gitdir:r,oid:n,fileId:i}){if(i===u8)return;let a=n,s,o=await vs({fs:e,cache:t,gitdir:r,oid:n}),c=o.tree;return i===o.oid?s=o.path:(s=await k2({fs:e,cache:t,gitdir:r,tree:c,fileId:i,oid:a}),Array.isArray(s)&&(s.length===0?s=void 0:s.length===1&&(s=s[0]))),s}async function k2({fs:e,cache:t,gitdir:r,tree:n,fileId:i,oid:a,filepaths:s=[],parentPath:o=\"\"}){let c=n.entries().map(function(l){let u;return l.oid===i?(u=$(o,l.path),s.push(u)):l.type===\"tree\"&&(u=qe({fs:e,cache:t,gitdir:r,oid:l.oid}).then(function({object:f}){return k2({fs:e,cache:t,gitdir:r,tree:er.from(f),fileId:i,oid:a,filepaths:s,parentPath:$(o,l.path)})})),u});return await Promise.all(c),s}async function f8({fs:e,cache:t,gitdir:r,filepath:n,ref:i,depth:a,since:s,force:o,follow:c}){let l=typeof s==\"undefined\"?void 0:Math.floor(s.valueOf()/1e3),u=[],f=await ua.read({fs:e,gitdir:r}),d=await q.resolve({fs:e,gitdir:r,ref:i}),h=[await cu({fs:e,cache:t,gitdir:r,oid:d})],p,m,v;function y(b){v&&n&&u.push(b)}for(;h.length>0;){let b=h.pop();if(l!==void 0&&b.commit.committer.timestamp<=l)break;if(n){let x;try{x=await vl({fs:e,cache:t,gitdir:r,oid:b.commit.tree,filepath:n}),m&&p!==x&&u.push(m),p=x,m=b,v=!0}catch(E){if(E instanceof Ne){let _=c&&p;if(_&&(_=await Kw({fs:e,cache:t,gitdir:r,oid:b.commit.tree,fileId:p}),_))if(Array.isArray(_)){if(m){let k=await Kw({fs:e,cache:t,gitdir:r,oid:m.commit.tree,fileId:p});if(Array.isArray(k))if(_=_.filter(w=>k.indexOf(w)===-1),_.length===1)_=_[0],n=_,m&&u.push(m);else{_=!1,m&&u.push(m);break}}}else n=_,m&&u.push(m);if(!_){if(v&&p&&(u.push(m),!o))break;if(!o&&!c)throw E}m=b,v=!1}else throw E}}else u.push(b);if(a!==void 0&&u.length===a){y(b);break}if(!f.has(b.oid))for(let x of b.commit.parent){let E=await cu({fs:e,cache:t,gitdir:r,oid:x});h.map(_=>_.oid).includes(E.oid)||h.push(E)}h.length===0&&y(b),h.sort((x,E)=>c8(x.commit,E.commit))}return u}async function d8({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,ref:i=\"HEAD\",depth:a,since:s,force:o,follow:c,cache:l={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",i),await f8({fs:new X(e),cache:l,gitdir:r,filepath:n,ref:i,depth:a,since:s,force:o,follow:c})}catch(u){throw u.caller=\"git.log\",u}}async function h8({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),ours:i,theirs:a,fastForward:s=!0,fastForwardOnly:o=!1,dryRun:c=!1,noUpdateBranch:l=!1,abortOnConflict:u=!0,message:f,author:d,committer:h,signingKey:p,cache:m={},mergeDriver:v}){try{C(\"fs\",e),p&&C(\"onSign\",t);let y=new X(e),b=await ca({fs:y,gitdir:n,author:d});if(!b&&(!o||!s))throw new zt(\"author\");let x=await bs({fs:y,gitdir:n,author:b,committer:h});if(!x&&(!o||!s))throw new zt(\"committer\");return await b2({fs:y,cache:m,dir:r,gitdir:n,ours:i,theirs:a,fastForward:s,fastForwardOnly:o,dryRun:c,noUpdateBranch:l,abortOnConflict:u,message:f,author:b,committer:x,signingKey:p,onSign:t,mergeDriver:v})}catch(y){throw y.caller=\"git.merge\",y}}var p8={commit:16,tree:32,blob:48,tag:64,ofs_delta:96,ref_delta:112};async function T2({fs:e,cache:t,dir:r,gitdir:n=$(r,\".git\"),oids:i}){let a=new Sp.default,s=[];function o(u,f){let d=Buffer.from(u,f);s.push(d),a.update(d)}async function c({stype:u,object:f}){let d=p8[u],h=f.length,p=h>15?128:0,m=h&15;h=h>>>4;let v=(p|d|m).toString(16);for(o(v,\"hex\");p;)p=h>127?128:0,v=p|h&127,o(xp(2,v),\"hex\"),h=h>>>7;o(Buffer.from(await c2(f)))}o(\"PACK\"),o(\"00000002\",\"hex\"),o(xp(8,i.length),\"hex\");for(let u of i){let{type:f,object:d}=await qe({fs:e,cache:t,gitdir:n,oid:u});await c({write:o,object:d,stype:f})}let l=a.digest();return s.push(l),s}async function m8({fs:e,cache:t,gitdir:r,oids:n,write:i}){let a=await T2({fs:e,cache:t,gitdir:r,oids:n}),s=Buffer.from(await uu(a)),c=`pack-${s.slice(-20).toString(\"hex\")}.pack`;return i?(await e.write($(r,`objects/pack/${c}`),s),{filename:c}):{filename:c,packfile:new Uint8Array(s)}}async function g8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oids:n,write:i=!1,cache:a={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oids\",n),await m8({fs:new X(e),cache:a,gitdir:r,oids:n,write:i})}catch(s){throw s.caller=\"git.packObjects\",s}}async function v8({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,\".git\"),ref:l,url:u,remote:f,remoteRef:d,prune:h=!1,pruneTags:p=!1,fastForward:m=!0,fastForwardOnly:v=!1,corsProxy:y,singleBranch:b,headers:x={},author:E,committer:_,signingKey:k,cache:w={}}){try{C(\"fs\",e),C(\"gitdir\",c);let A=new X(e),S=await ca({fs:A,gitdir:c,author:E});if(!S)throw new zt(\"author\");let T=await bs({fs:A,gitdir:c,author:S,committer:_});if(!T)throw new zt(\"committer\");return await _2({fs:A,cache:w,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c,ref:l,url:u,remote:f,remoteRef:d,fastForward:m,fastForwardOnly:v,corsProxy:y,singleBranch:b,headers:x,author:S,committer:T,signingKey:k,prune:h,pruneTags:p})}catch(A){throw A.caller=\"git.pull\",A}}async function y8({fs:e,cache:t,dir:r,gitdir:n=$(r,\".git\"),start:i,finish:a}){let s=await ua.read({fs:e,gitdir:n}),o=new Set,c=new Set;for(let f of i)o.add(await q.resolve({fs:e,gitdir:n,ref:f}));for(let f of a)try{let d=await q.resolve({fs:e,gitdir:n,ref:f});c.add(d)}catch(d){}let l=new Set;async function u(f){l.add(f);let{type:d,object:h}=await qe({fs:e,cache:t,gitdir:n,oid:f});if(d===\"tag\"){let m=pr.from(h).headers().object;return u(m)}if(d!==\"commit\")throw new Gt(f,d,\"commit\");if(!s.has(f)){let m=tr.from(h).headers().parent;for(f of m)!c.has(f)&&!l.has(f)&&await u(f)}}for(let f of o)await u(f);return l}async function up({fs:e,cache:t,dir:r,gitdir:n=$(r,\".git\"),oids:i}){let a=new Set;async function s(o){if(a.has(o))return;a.add(o);let{type:c,object:l}=await qe({fs:e,cache:t,gitdir:n,oid:o});if(c===\"tag\"){let f=pr.from(l).headers().object;await s(f)}else if(c===\"commit\"){let f=tr.from(l).headers().tree;await s(f)}else if(c===\"tree\"){let u=er.from(l);for(let f of u)f.type===\"blob\"&&a.add(f.oid),f.type===\"tree\"&&await s(f.oid)}}for(let o of i)await s(o);return a}async function w8(e){let t={},r=\"\",n=Ve.streamReader(e),i=await n();for(;i!==!0;)i!==null&&(r+=i.toString(\"utf8\")+`\n`),i=await n();let a=r.toString(\"utf8\").split(`\n`);if(i=a.shift(),!i.startsWith(\"unpack \"))throw new la('unpack ok\" or \"unpack [error message]',i);t.ok=i===\"unpack ok\",t.ok||(t.error=i.slice(7)),t.refs={};for(let s of a){if(s.trim()===\"\")continue;let o=s.slice(0,2),c=s.slice(3),l=c.indexOf(\" \");l===-1&&(l=c.length);let u=c.slice(0,l),f=c.slice(l+1);t.refs[u]={ok:o===\"ok\",error:f}}return t}async function b8({capabilities:e=[],triplets:t=[]}){let r=[],n=`\\0 ${e.join(\" \")}`;for(let i of t)r.push(Ve.encode(`${i.oldoid} ${i.oid} ${i.fullRef}${n}\n`)),n=\"\";return r.push(Ve.flush()),r}async function _8({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,onPrePush:c,gitdir:l,ref:u,remoteRef:f,remote:d,url:h,force:p=!1,delete:m=!1,corsProxy:v,headers:y={}}){let b=u||await fa({fs:e,gitdir:l});if(typeof b==\"undefined\")throw new Qt(\"ref\");let x=await We.get({fs:e,gitdir:l});d=d||await x.get(`branch.${b}.pushRemote`)||await x.get(\"remote.pushDefault\")||await x.get(`branch.${b}.remote`)||\"origin\";let E=h||await x.get(`remote.${d}.pushurl`)||await x.get(`remote.${d}.url`);if(typeof E==\"undefined\")throw new Qt(\"remote OR url\");let _=f||await x.get(`branch.${b}.merge`);if(typeof E==\"undefined\")throw new Qt(\"remoteRef\");v===void 0&&(v=await x.get(\"http.corsProxy\"));let k=await q.expand({fs:e,gitdir:l,ref:b}),w=m?\"0000000000000000000000000000000000000000\":await q.resolve({fs:e,gitdir:l,ref:k}),A=xs.getRemoteHelperFor({url:E}),S=await A.discover({http:r,onAuth:a,onAuthSuccess:s,onAuthFailure:o,corsProxy:v,service:\"git-receive-pack\",url:E,headers:y,protocolVersion:1}),T=S.auth,P;if(!_)P=k;else try{P=await q.expandAgainstMap({ref:_,map:S.refs})}catch(G){if(G instanceof Ne)P=_.startsWith(\"refs/\")?_:`refs/heads/${_}`;else throw G}let O=S.refs.get(P)||\"0000000000000000000000000000000000000000\";if(c&&!await c({remote:d,url:E,localRef:{ref:m?\"(delete)\":k,oid:w},remoteRef:{ref:P,oid:O}}))throw new gs;let j=!S.capabilities.has(\"no-thin\"),D=new Set;if(!m){let G=[...S.refs.values()],N=new Set;if(O!==\"0000000000000000000000000000000000000000\"){let Me=await Cp({fs:e,cache:t,gitdir:l,oids:[w,O]});for(let Dt of Me)G.push(Dt);j&&(N=await up({fs:e,cache:t,gitdir:l,oids:Me}))}if(!G.includes(w)){let Me=await y8({fs:e,cache:t,gitdir:l,start:[w],finish:G});D=await up({fs:e,cache:t,gitdir:l,oids:Me})}if(j){try{let Me=await q.resolve({fs:e,gitdir:l,ref:`refs/remotes/${d}/HEAD`,depth:2}),{oid:Dt}=await q.resolveAgainstMap({ref:Me.replace(`refs/remotes/${d}/`,\"\"),fullref:Me,map:S.refs}),_t=[Dt];for(let Ee of await up({fs:e,cache:t,gitdir:l,oids:_t}))N.add(Ee)}catch(Me){}for(let Me of N)D.delete(Me)}if(w===O&&(p=!0),!p){if(k.startsWith(\"refs/tags\")&&O!==\"0000000000000000000000000000000000000000\")throw new ms(\"tag-exists\");if(w!==\"0000000000000000000000000000000000000000\"&&O!==\"0000000000000000000000000000000000000000\"&&!await E2({fs:e,cache:t,gitdir:l,oid:w,ancestor:O,depth:-1}))throw new ms(\"not-fast-forward\")}}let Q=v2([...S.capabilities],[\"report-status\",\"side-band-64k\",`agent=${yu.agent}`]),de=await b8({capabilities:Q,triplets:[{oldoid:O,oid:w,fullRef:P}]}),ee=m?[]:await T2({fs:e,cache:t,gitdir:l,oids:[...D]}),J=await A.connect({http:r,onProgress:n,corsProxy:v,service:\"git-receive-pack\",url:E,auth:T,headers:y,body:[...de,...ee]}),{packfile:Pe,progress:me}=await fu.demux(J.body);if(i){let G=y2(me);yl(G,async N=>{await i(N)})}let F=await w8(Pe);if(J.headers&&(F.headers=J.headers),d&&F.ok&&F.refs[P].ok&&!k.startsWith(\"refs/tags\")){let G=`refs/remotes/${d}/${P.replace(\"refs/heads\",\"\")}`;m?await q.deleteRef({fs:e,gitdir:l,ref:G}):await q.writeRef({fs:e,gitdir:l,ref:G,value:w})}if(F.ok&&Object.values(F.refs).every(G=>G.ok))return F;{let G=Object.entries(F.refs).filter(([N,Me])=>!Me.ok).map(([N,Me])=>`\n  - ${N}: ${Me.error}`).join(\"\");throw new ol(G,F)}}async function x8({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPrePush:o,dir:c,gitdir:l=$(c,\".git\"),ref:u,remoteRef:f,remote:d=\"origin\",url:h,force:p=!1,delete:m=!1,corsProxy:v,headers:y={},cache:b={}}){try{return C(\"fs\",e),C(\"http\",t),C(\"gitdir\",l),await _8({fs:new X(e),cache:b,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPrePush:o,gitdir:l,ref:u,remoteRef:f,remote:d,url:h,force:p,delete:m,corsProxy:v,headers:y})}catch(x){throw x.caller=\"git.push\",x}}async function C2({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i===\"tag\")return n=pr.from(a).parse().object,C2({fs:e,cache:t,gitdir:r,oid:n});if(i!==\"blob\")throw new Gt(n,i,\"blob\");return{oid:n,blob:new Uint8Array(a)}}async function P2({fs:e,cache:t,gitdir:r,oid:n,filepath:i=void 0}){return i!==void 0&&(n=await vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i})),await C2({fs:e,cache:t,gitdir:r,oid:n})}async function wl({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,filepath:i,cache:a={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await P2({fs:new X(e),cache:a,gitdir:r,oid:n,filepath:i})}catch(s){throw s.caller=\"git.readBlob\",s}}async function S8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await cu({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller=\"git.readCommit\",a}}async function E8({fs:e,cache:t,gitdir:r,ref:n=\"refs/notes/commits\",oid:i}){let a=await q.resolve({gitdir:r,fs:e,ref:n}),{blob:s}=await P2({fs:e,cache:t,gitdir:r,oid:a,filepath:i});return s}async function A8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n=\"refs/notes/commits\",oid:i,cache:a={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),C(\"oid\",i),await E8({fs:new X(e),cache:a,gitdir:r,ref:n,oid:i})}catch(s){throw s.caller=\"git.readNote\",s}}async function k8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,format:i=\"parsed\",filepath:a=void 0,encoding:s=void 0,cache:o={}}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n);let c=new X(e);a!==void 0&&(n=await vl({fs:c,cache:o,gitdir:r,oid:n,filepath:a}));let u=await qe({fs:c,cache:o,gitdir:r,oid:n,format:i===\"parsed\"?\"content\":i});if(u.oid=n,i===\"parsed\")switch(u.format=\"parsed\",u.type){case\"commit\":u.object=tr.from(u.object).parse();break;case\"tree\":u.object=er.from(u.object).entries();break;case\"blob\":s?u.object=u.object.toString(s):(u.object=new Uint8Array(u.object),u.format=\"content\");break;case\"tag\":u.object=pr.from(u.object).parse();break;default:throw new Gt(u.oid,u.type,\"blob|commit|tag|tree\")}else(u.format===\"deflated\"||u.format===\"wrapped\")&&(u.type=u.format);return u}catch(c){throw c.caller=\"git.readObject\",c}}async function T8({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n,format:\"content\"});if(i!==\"tag\")throw new Gt(n,i,\"tag\");let s=pr.from(a);return{oid:n,tag:s.parse(),payload:s.payload()}}async function C8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await T8({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller=\"git.readTag\",a}}async function P8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,filepath:i=void 0,cache:a={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await Ss({fs:new X(e),cache:a,gitdir:r,oid:n,filepath:i})}catch(s){throw s.caller=\"git.readTree\",s}}async function R8({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,cache:i={}}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"filepath\",n),await mt.acquire({fs:new X(e),gitdir:r,cache:i},async function(a){a.delete({filepath:n})})}catch(a){throw a.caller=\"git.remove\",a}}async function M8({fs:e,cache:t,onSign:r,gitdir:n,ref:i=\"refs/notes/commits\",oid:a,author:s,committer:o,signingKey:c}){let l;try{l=await q.resolve({gitdir:n,fs:e,ref:i})}catch(p){if(!(p instanceof Ne))throw p}let f=(await Ss({fs:e,gitdir:n,oid:l||\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"})).tree;f=f.filter(p=>p.path!==a);let d=await Ap({fs:e,gitdir:n,tree:f});return await vu({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tree:d,parent:l&&[l],message:`Note removed by 'isomorphic-git removeNote'\n`,author:s,committer:o,signingKey:c})}async function O8({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),ref:i=\"refs/notes/commits\",oid:a,author:s,committer:o,signingKey:c,cache:l={}}){try{C(\"fs\",e),C(\"gitdir\",n),C(\"oid\",a);let u=new X(e),f=await ca({fs:u,gitdir:n,author:s});if(!f)throw new zt(\"author\");let d=await bs({fs:u,gitdir:n,author:f,committer:o});if(!d)throw new zt(\"committer\");return await M8({fs:u,cache:l,onSign:t,gitdir:n,ref:i,oid:a,author:f,committer:d,signingKey:c})}catch(u){throw u.caller=\"git.removeNote\",u}}async function I8({fs:e,gitdir:t,oldref:r,ref:n,checkout:i=!1}){if(n!==Jr.default.clean(n))throw new zn(n,Jr.default.clean(n));if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let a=`refs/heads/${r}`,s=`refs/heads/${n}`;if(await q.exists({fs:e,gitdir:t,ref:s}))throw new Qr(\"branch\",n,!1);let c=await q.resolve({fs:e,gitdir:t,ref:a,depth:1});await q.writeRef({fs:e,gitdir:t,ref:s,value:c}),await q.deleteRef({fs:e,gitdir:t,ref:a});let u=await fa({fs:e,gitdir:t,fullname:!0})===a;(i||u)&&await q.writeSymbolicRef({fs:e,gitdir:t,ref:\"HEAD\",value:s})}async function F8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,oldref:i,checkout:a=!1}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),C(\"oldref\",i),await I8({fs:new X(e),gitdir:r,ref:n,oldref:i,checkout:a})}catch(s){throw s.caller=\"git.renameBranch\",s}}async function R2({gitdir:e,type:t,object:r}){return Gn(_i.wrap({type:t,object:r}))}async function $8({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,ref:i,cache:a={}}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"filepath\",n);let s=new X(e),o,c;try{o=await q.resolve({fs:s,gitdir:r,ref:i||\"HEAD\"})}catch(f){if(i)throw f}if(o)try{o=await vl({fs:s,cache:a,gitdir:r,oid:o,filepath:n})}catch(f){o=null}let l={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:0,uid:0,gid:0,size:0},u=t&&await s.read($(t,n));u&&(c=await R2({gitdir:r,type:\"blob\",object:u}),o===c&&(l=await s.lstat($(t,n)))),await mt.acquire({fs:s,gitdir:r,cache:a},async function(f){f.delete({filepath:n}),o&&f.insert({filepath:n,stats:l,oid:o})})}catch(s){throw s.caller=\"git.reset\",s}}async function L8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,depth:i}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),await q.resolve({fs:new X(e),gitdir:r,ref:n,depth:i})}catch(a){throw a.caller=\"git.resolveRef\",a}}async function D8({fs:e,dir:t,gitdir:r=$(t,\".git\"),path:n,value:i,append:a=!1}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"path\",n);let s=new X(e),o=await We.get({fs:s,gitdir:r});a?await o.append(n,i):await o.set(n,i),await We.save({fs:s,gitdir:r,config:o})}catch(s){throw s.caller=\"git.setConfig\",s}}async function N8({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,cache:i={}}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"filepath\",n);let a=new X(e);if(await ws.isIgnored({fs:a,gitdir:r,dir:t,filepath:n}))return\"ignored\";let o=await j8({fs:a,cache:i,gitdir:r}),c=await M2({fs:a,cache:i,gitdir:r,tree:o,path:n}),l=await mt.acquire({fs:a,gitdir:r,cache:i},async function(m){for(let v of m)if(v.path===n)return v;return null}),u=await a.lstat($(t,n)),f=c!==null,d=l!==null,h=u!==null,p=async()=>{if(d&&!ru(l,u))return l.oid;{let m=await a.read($(t,n)),v=await R2({gitdir:r,type:\"blob\",object:m});return d&&l.oid===v&&u.size!==-1&&mt.acquire({fs:a,gitdir:r,cache:i},async function(y){y.insert({filepath:n,stats:u,oid:v})}),v}};if(!f&&!h&&!d)return\"absent\";if(!f&&!h&&d)return\"*absent\";if(!f&&h&&!d)return\"*added\";if(!f&&h&&d)return await p()===l.oid?\"added\":\"*added\";if(f&&!h&&!d)return\"deleted\";if(f&&!h&&d)return c===l.oid,\"*deleted\";if(f&&h&&!d)return await p()===c?\"*undeleted\":\"*undeletemodified\";if(f&&h&&d){let m=await p();return m===c?m===l.oid?\"unmodified\":\"*unmodified\":m===l.oid?\"modified\":\"*modified\"}}catch(a){throw a.caller=\"git.status\",a}}async function M2({fs:e,cache:t,gitdir:r,tree:n,path:i}){typeof i==\"string\"&&(i=i.split(\"/\"));let a=i.shift();for(let s of n)if(s.path===a){if(i.length===0)return s.oid;let{type:o,object:c}=await qe({fs:e,cache:t,gitdir:r,oid:s.oid});if(o===\"tree\"){let l=er.from(c);return M2({fs:e,cache:t,gitdir:r,tree:l,path:i})}if(o===\"blob\")throw new Gt(s.oid,o,\"blob\",i.join(\"/\"))}return null}async function j8({fs:e,cache:t,gitdir:r}){let n;try{n=await q.resolve({fs:e,gitdir:r,ref:\"HEAD\"})}catch(a){if(a instanceof Ne)return[]}let{tree:i}=await Ss({fs:e,cache:t,gitdir:r,oid:n});return i}async function B8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n=\"HEAD\",filepaths:i=[\".\"],filter:a,cache:s={},ignored:o=!1}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n);let c=new X(e);return await ys({fs:c,cache:s,dir:t,gitdir:r,trees:[wi({ref:n}),gu(),mu()],map:async function(l,[u,f,d]){if(!u&&!d&&f&&!o&&await ws.isIgnored({fs:c,dir:t,filepath:l})||!i.some(k=>m2(l,k)))return null;if(a&&!a(l))return;let[h,p,m]=await Promise.all([u&&u.type(),f&&f.type(),d&&d.type()]),v=[h,p,m].includes(\"blob\");if((h===\"tree\"||h===\"special\")&&!v)return;if(h===\"commit\")return null;if((p===\"tree\"||p===\"special\")&&!v)return;if(m===\"commit\")return null;if((m===\"tree\"||m===\"special\")&&!v)return;let y=h===\"blob\"?await u.oid():void 0,b=m===\"blob\"?await d.oid():void 0,x;h!==\"blob\"&&p===\"blob\"&&m!==\"blob\"?x=\"42\":p===\"blob\"&&(x=await f.oid());let E=[void 0,y,x,b],_=E.map(k=>E.indexOf(k));return _.shift(),[l,..._]}})}catch(c){throw c.caller=\"git.statusMatrix\",c}}async function H8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,object:i,force:a=!1}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n);let s=new X(e);if(n===void 0)throw new Qt(\"ref\");n=n.startsWith(\"refs/tags/\")?n:`refs/tags/${n}`;let o=await q.resolve({fs:s,gitdir:r,ref:i||\"HEAD\"});if(!a&&await q.exists({fs:s,gitdir:r,ref:n}))throw new Qr(\"tag\",n);await q.writeRef({fs:s,gitdir:r,ref:n,value:o})}catch(s){throw s.caller=\"git.tag\",s}}async function U8({fs:e,dir:t,gitdir:r=$(t,\".git\"),cache:n={},filepath:i,oid:a,mode:s,add:o,remove:c,force:l}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"filepath\",i);let u=new X(e);if(c)return await mt.acquire({fs:u,gitdir:r,cache:n},async function(d){let h;if(!l&&(h=await u.lstat($(t,i)),h)){if(h.isDirectory())throw new xi(\"directory\");return}d.has({filepath:i})&&d.delete({filepath:i})});let f;if(!a){if(f=await u.lstat($(t,i)),!f)throw new Ne(`file at \"${i}\" on disk and \"remove\" not set`);if(f.isDirectory())throw new xi(\"directory\")}return await mt.acquire({fs:u,gitdir:r,cache:n},async function(d){if(!o&&!d.has({filepath:i}))throw new Ne(`file at \"${i}\" in index and \"add\" not set`);let h={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:s,uid:0,gid:0,size:0};if(!a){h=f;let p=h.isSymbolicLink()?await u.readlink($(t,i)):await u.read($(t,i));a=await mr({fs:u,gitdir:r,type:\"blob\",format:\"content\",object:p})}return d.insert({filepath:i,oid:a,stats:h}),a})}catch(u){throw u.caller=\"git.updateIndex\",u}}function G8(){try{return yu.version}catch(e){throw e.caller=\"git.version\",e}}async function z8({fs:e,dir:t,gitdir:r=$(t,\".git\"),trees:n,map:i,reduce:a,iterate:s,cache:o={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"trees\",n),await ys({fs:new X(e),cache:o,dir:t,gitdir:r,trees:n,map:i,reduce:a,iterate:s})}catch(c){throw c.caller=\"git.walk\",c}}async function V8({fs:e,dir:t,gitdir:r=$(t,\".git\"),blob:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"blob\",n),await mr({fs:new X(e),gitdir:r,type:\"blob\",object:n,format:\"content\"})}catch(i){throw i.caller=\"git.writeBlob\",i}}async function W8({fs:e,gitdir:t,commit:r}){let n=tr.from(r).toObject();return await mr({fs:e,gitdir:t,type:\"commit\",object:n,format:\"content\"})}async function q8({fs:e,dir:t,gitdir:r=$(t,\".git\"),commit:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"commit\",n),await W8({fs:new X(e),gitdir:r,commit:n})}catch(i){throw i.caller=\"git.writeCommit\",i}}async function Y8({fs:e,dir:t,gitdir:r=$(t,\".git\"),type:n,object:i,format:a=\"parsed\",oid:s,encoding:o=void 0}){try{let c=new X(e);if(a===\"parsed\"){switch(n){case\"commit\":i=tr.from(i).toObject();break;case\"tree\":i=er.from(i).toObject();break;case\"blob\":i=Buffer.from(i,o);break;case\"tag\":i=pr.from(i).toObject();break;default:throw new Gt(s||\"\",n,\"blob|commit|tag|tree\")}a=\"content\"}return s=await mr({fs:c,gitdir:r,type:n,object:i,oid:s,format:a}),s}catch(c){throw c.caller=\"git.writeObject\",c}}async function X8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,value:i,force:a=!1,symbolic:s=!1}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),C(\"value\",i);let o=new X(e);if(n!==Jr.default.clean(n))throw new zn(n,Jr.default.clean(n));if(!a&&await q.exists({fs:o,gitdir:r,ref:n}))throw new Qr(\"ref\",n);s?await q.writeSymbolicRef({fs:o,gitdir:r,ref:n,value:i}):(i=await q.resolve({fs:o,gitdir:r,ref:i}),await q.writeRef({fs:o,gitdir:r,ref:n,value:i}))}catch(o){throw o.caller=\"git.writeRef\",o}}async function Z8({fs:e,gitdir:t,tag:r}){let n=pr.from(r).toObject();return await mr({fs:e,gitdir:t,type:\"tag\",object:n,format:\"content\"})}async function K8({fs:e,dir:t,gitdir:r=$(t,\".git\"),tag:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"tag\",n),await Z8({fs:new X(e),gitdir:r,tag:n})}catch(i){throw i.caller=\"git.writeTag\",i}}async function J8({fs:e,dir:t,gitdir:r=$(t,\".git\"),tree:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"tree\",n),await Ap({fs:new X(e),gitdir:r,tree:n})}catch(i){throw i.caller=\"git.writeTree\",i}}var Q8={Errors:gl,STAGE:mu,TREE:wi,WORKDIR:gu,add:JM,abortMerge:qM,addNote:eO,addRemote:tO,annotatedTag:nO,branch:aO,checkout:oO,clone:yO,commit:wO,getConfig:BO,getConfigAll:UO,setConfig:D8,currentBranch:bO,deleteBranch:xO,deleteRef:SO,deleteRemote:AO,deleteTag:TO,expandOid:MO,expandRef:OO,fastForward:LO,fetch:DO,findMergeBase:NO,findRoot:jO,getRemoteInfo:GO,getRemoteInfo2:zO,hashBlob:WO,indexPack:YO,init:XO,isDescendent:ZO,isIgnored:KO,listBranches:JO,listFiles:e8,listNotes:r8,listRemotes:i8,listServerRefs:o8,listTags:l8,log:d8,merge:h8,packObjects:g8,pull:v8,push:x8,readBlob:wl,readCommit:S8,readNote:A8,readObject:k8,readTag:C8,readTree:P8,remove:R8,removeNote:O8,renameBranch:F8,resetIndex:$8,updateIndex:U8,resolveRef:L8,status:N8,statusMatrix:B8,tag:H8,version:G8,walk:z8,writeBlob:V8,writeCommit:q8,writeObject:Y8,writeRef:X8,writeTag:K8,writeTree:J8},ie=Q8;var OP=ze(require(\"path\")),Ce=require(\"obsidian\");g();var Sa=require(\"obsidian\");g();var qg=require(\"child_process\"),yT=ze(_u()),Zn=ze(require(\"fs/promises\")),Xn=require(\"obsidian\"),Be=ze(require(\"path\")),Vl=require(\"path\");g();var $u=ze(D2(),1),Mu=ze(_u(),1),c_=require(\"child_process\"),W_=ze(Rp(),1),Cs=ze(Rp(),1),yx=require(\"node:events\"),Iu=Object.defineProperty,yI=Object.defineProperties,wI=Object.getOwnPropertyDescriptor,bI=Object.getOwnPropertyDescriptors,Zp=Object.getOwnPropertyNames,N2=Object.getOwnPropertySymbols,vb=Object.prototype.hasOwnProperty,_I=Object.prototype.propertyIsEnumerable,j2=(e,t,r)=>t in e?Iu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Fr=(e,t)=>{for(var r in t||(t={}))vb.call(t,r)&&j2(e,r,t[r]);if(N2)for(var r of N2(t))_I.call(t,r)&&j2(e,r,t[r]);return e},xl=(e,t)=>yI(e,bI(t)),W=(e,t)=>function(){return e&&(t=(0,e[Zp(e)[0]])(e=0)),t},xI=(e,t)=>function(){return t||(0,e[Zp(e)[0]])((t={exports:{}}).exports,t),t.exports},rt=(e,t)=>{for(var r in t)Iu(e,r,{get:t[r],enumerable:!0})},SI=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Zp(t))!vb.call(e,i)&&i!==r&&Iu(e,i,{get:()=>t[i],enumerable:!(n=wI(t,i))||n.enumerable});return e},Ke=e=>SI(Iu({},\"__esModule\",{value:!0}),e),_l=(e,t,r)=>new Promise((n,i)=>{var a=c=>{try{o(r.next(c))}catch(l){i(l)}},s=c=>{try{o(r.throw(c))}catch(l){i(l)}},o=c=>c.done?n(c.value):Promise.resolve(c.value).then(a,s);o((r=r.apply(e,t)).next())});function EI(...e){let t=new String(e);return Fu.set(t,e),t}function Pu(e){return e instanceof String&&Fu.has(e)}function B2(e){return Fu.get(e)||[]}var Fu,kl=W({\"src/lib/args/pathspec.ts\"(){\"use strict\";Fu=new WeakMap}}),wr,Ei=W({\"src/lib/errors/git-error.ts\"(){\"use strict\";wr=class extends Error{constructor(e,t){super(t),this.task=e,Object.setPrototypeOf(this,new.target.prototype)}}}}),Tl,Rs=W({\"src/lib/errors/git-response-error.ts\"(){\"use strict\";Ei(),Tl=class extends wr{constructor(e,t){super(void 0,t||String(e)),this.git=e}}}}),yb,wb=W({\"src/lib/errors/task-configuration-error.ts\"(){\"use strict\";Ei(),yb=class extends wr{constructor(e){super(void 0,e)}}}});function bb(e){return typeof e==\"function\"?e:ga}function _b(e){return typeof e==\"function\"&&e!==ga}function xb(e,t){let r=e.indexOf(t);return r<=0?[e,\"\"]:[e.substr(0,r),e.substr(r+1)]}function Sb(e,t=0){return Eb(e)&&e.length>t?e[t]:void 0}function ma(e,t=0){if(Eb(e)&&e.length>t)return e[e.length-1-t]}function Eb(e){return!!(e&&typeof e.length==\"number\")}function Cl(e=\"\",t=!0,r=`\n`){return e.split(r).reduce((n,i)=>{let a=t?i.trim():i;return a&&n.push(a),n},[])}function Kp(e,t){return Cl(e,!0).map(r=>t(r))}function Jp(e){return(0,$u.exists)(e,$u.FOLDER)}function ke(e,t){return Array.isArray(e)?e.includes(t)||e.push(t):e.add(t),t}function Ab(e,t){return Array.isArray(e)&&!e.includes(t)&&e.push(t),e}function Lu(e,t){if(Array.isArray(e)){let r=e.indexOf(t);r>=0&&e.splice(r,1)}else e.delete(t);return t}function xn(e){return Array.isArray(e)?e:[e]}function kb(e){return e.replace(/[\\s-]+(.)/g,(t,r)=>r.toUpperCase())}function Tb(e){return xn(e).map(String)}function Ie(e,t=0){if(e==null)return t;let r=parseInt(e,10);return isNaN(r)?t:r}function Sl(e,t){let r=[];for(let n=0,i=e.length;n<i;n++)r.push(t,e[n]);return r}function El(e){return(Array.isArray(e)?Buffer.concat(e):e).toString(\"utf-8\")}function Cb(e,t){return Object.assign({},...t.map(r=>r in e?{[r]:e[r]}:{}))}function Dp(e=0){return new Promise(t=>setTimeout(t,e))}function Np(e){if(e!==!1)return e}var Ps,ga,Pl,Du=W({\"src/lib/utils/util.ts\"(){\"use strict\";Ps=\"\\0\",ga=()=>{},Pl=Object.prototype.toString.call.bind(Object.prototype.toString)}});function Sn(e,t,r){return t(e)?e:arguments.length>2?r:void 0}function Qp(e,t){let r=Pu(e)?\"string\":typeof e;return/number|string|boolean/.test(r)&&(!t||!t.includes(r))}function em(e){return!!e&&Pl(e)===\"[object Object]\"}function Pb(e){return typeof e==\"function\"}var Rl,Pt,Rb,Ru,tm,Mb=W({\"src/lib/utils/argument-filters.ts\"(){\"use strict\";Du(),kl(),Rl=e=>Array.isArray(e),Pt=e=>typeof e==\"string\",Rb=e=>Array.isArray(e)&&e.every(Pt),Ru=e=>Pt(e)||Array.isArray(e)&&e.every(Pt),tm=e=>e==null||\"number|boolean|function\".includes(typeof e)?!1:Array.isArray(e)||typeof e==\"string\"||typeof e.length==\"number\"}}),jp,AI=W({\"src/lib/utils/exit-codes.ts\"(){\"use strict\";jp=(e=>(e[e.SUCCESS=0]=\"SUCCESS\",e[e.ERROR=1]=\"ERROR\",e[e.NOT_FOUND=-2]=\"NOT_FOUND\",e[e.UNCLEAN=128]=\"UNCLEAN\",e))(jp||{})}}),Al,kI=W({\"src/lib/utils/git-output-streams.ts\"(){\"use strict\";Al=class{constructor(e,t){this.stdOut=e,this.stdErr=t}asStrings(){return new Al(this.stdOut.toString(\"utf8\"),this.stdErr.toString(\"utf8\"))}}}}),ce,Si,TI=W({\"src/lib/utils/line-parser.ts\"(){\"use strict\";ce=class{constructor(e,t){this.matches=[],this.parse=(r,n)=>(this.resetMatches(),this._regExp.every((i,a)=>this.addMatch(i,a,r(a)))?this.useMatches(n,this.prepareMatches())!==!1:!1),this._regExp=Array.isArray(e)?e:[e],t&&(this.useMatches=t)}useMatches(e,t){throw new Error(\"LineParser:useMatches not implemented\")}resetMatches(){this.matches.length=0}prepareMatches(){return this.matches}addMatch(e,t,r){let n=r&&e.exec(r);return n&&this.pushMatch(t,n),!!n}pushMatch(e,t){this.matches.push(...t.slice(1))}},Si=class extends ce{addMatch(e,t,r){return/^remote:\\s/.test(String(r))&&super.addMatch(e,t,r)}pushMatch(e,t){(e>0||t.length>1)&&super.pushMatch(e,t)}}}});function Ob(...e){let t=process.cwd(),r=Object.assign(Fr({baseDir:t},Ib),...e.filter(n=>typeof n==\"object\"&&n));return r.baseDir=r.baseDir||t,r.trimmed=r.trimmed===!0,r}var Ib,CI=W({\"src/lib/utils/simple-git-options.ts\"(){\"use strict\";Ib={binary:\"git\",maxConcurrentProcesses:5,config:[],trimmed:!1}}});function rm(e,t=[]){return em(e)?Object.keys(e).reduce((r,n)=>{let i=e[n];return Pu(i)?r.push(i):Qp(i,[\"boolean\"])?r.push(n+\"=\"+i):r.push(n),r},t):t}function rr(e,t=0,r=!1){let n=[];for(let i=0,a=t<0?e.length:t;i<a;i++)\"string|number\".includes(typeof e[i])&&n.push(String(e[i]));return rm(nm(e),n),r||n.push(...PI(e)),n}function PI(e){let t=typeof ma(e)==\"function\";return Sn(ma(e,t?1:0),Rl,[])}function nm(e){let t=Pb(ma(e));return Sn(ma(e,t?1:0),em)}function Je(e,t=!0){let r=bb(ma(e));return t||_b(r)?r:void 0}var RI=W({\"src/lib/utils/task-options.ts\"(){\"use strict\";Mb(),Du(),kl()}});function Bp(e,t){return e(t.stdOut,t.stdErr)}function ir(e,t,r,n=!0){return xn(r).forEach(i=>{for(let a=Cl(i,n),s=0,o=a.length;s<o;s++){let c=(l=0)=>{if(!(s+l>=o))return a[s+l]};t.some(({parse:l})=>l(c,e))}}),e}var MI=W({\"src/lib/utils/task-parser.ts\"(){\"use strict\";Du()}}),Fb={};rt(Fb,{ExitCodes:()=>jp,GitOutputStreams:()=>Al,LineParser:()=>ce,NOOP:()=>ga,NULL:()=>Ps,RemoteLineParser:()=>Si,append:()=>ke,appendTaskOptions:()=>rm,asArray:()=>xn,asCamelCase:()=>kb,asFunction:()=>bb,asNumber:()=>Ie,asStringArray:()=>Tb,bufferToString:()=>El,callTaskParser:()=>Bp,createInstanceConfig:()=>Ob,delay:()=>Dp,filterArray:()=>Rl,filterFunction:()=>Pb,filterHasLength:()=>tm,filterPlainObject:()=>em,filterPrimitives:()=>Qp,filterString:()=>Pt,filterStringArray:()=>Rb,filterStringOrStringArray:()=>Ru,filterType:()=>Sn,first:()=>Sb,folderExists:()=>Jp,forEachLineWithContent:()=>Kp,getTrailingOptions:()=>rr,including:()=>Ab,isUserFunction:()=>_b,last:()=>ma,objectToString:()=>Pl,orVoid:()=>Np,parseStringResponse:()=>ir,pick:()=>Cb,prefixedArray:()=>Sl,remove:()=>Lu,splitOn:()=>xb,toLinesWithContent:()=>Cl,trailingFunctionArgument:()=>Je,trailingOptionsArgument:()=>nm});var oe=W({\"src/lib/utils/index.ts\"(){\"use strict\";Mb(),AI(),kI(),TI(),CI(),RI(),MI(),Du()}}),$b={};rt($b,{CheckRepoActions:()=>Hp,checkIsBareRepoTask:()=>Db,checkIsRepoRootTask:()=>Lb,checkIsRepoTask:()=>OI});function OI(e){switch(e){case\"bare\":return Db();case\"root\":return Lb()}return{commands:[\"rev-parse\",\"--is-inside-work-tree\"],format:\"utf-8\",onError:Nu,parser:im}}function Lb(){return{commands:[\"rev-parse\",\"--git-dir\"],format:\"utf-8\",onError:Nu,parser(t){return/^\\.(git)?$/.test(t.trim())}}}function Db(){return{commands:[\"rev-parse\",\"--is-bare-repository\"],format:\"utf-8\",onError:Nu,parser:im}}function II(e){return/(Not a git repository|Kein Git-Repository)/i.test(String(e))}var Hp,Nu,im,Nb=W({\"src/lib/tasks/check-is-repo.ts\"(){\"use strict\";oe(),Hp=(e=>(e.BARE=\"bare\",e.IN_TREE=\"tree\",e.IS_REPO_ROOT=\"root\",e))(Hp||{}),Nu=({exitCode:e},t,r,n)=>{if(e===128&&II(t))return r(Buffer.from(\"false\"));n(t)},im=e=>e.trim()===\"true\"}});function FI(e,t){let r=new jb(e),n=e?Hb:Bb;return Cl(t).forEach(i=>{let a=i.replace(n,\"\");r.paths.push(a),(Ub.test(a)?r.folders:r.files).push(a)}),r}var jb,Bb,Hb,Ub,$I=W({\"src/lib/responses/CleanSummary.ts\"(){\"use strict\";oe(),jb=class{constructor(e){this.dryRun=e,this.paths=[],this.files=[],this.folders=[]}},Bb=/^[a-z]+\\s*/i,Hb=/^[a-z]+\\s+[a-z]+\\s*/i,Ub=/\\/$/}}),Up={};rt(Up,{EMPTY_COMMANDS:()=>ju,adhocExecTask:()=>Gb,configurationErrorTask:()=>nr,isBufferTask:()=>Vb,isEmptyTask:()=>Wb,straightThroughBufferTask:()=>zb,straightThroughStringTask:()=>Vt});function Gb(e){return{commands:ju,format:\"empty\",parser:e}}function nr(e){return{commands:ju,format:\"empty\",parser(){throw typeof e==\"string\"?new yb(e):e}}}function Vt(e,t=!1){return{commands:e,format:\"utf-8\",parser(r){return t?String(r).trim():r}}}function zb(e){return{commands:e,format:\"buffer\",parser(t){return t}}}function Vb(e){return e.format===\"buffer\"}function Wb(e){return e.format===\"empty\"||!e.commands.length}var ju,tt=W({\"src/lib/tasks/task.ts\"(){\"use strict\";wb(),ju=[]}}),qb={};rt(qb,{CONFIG_ERROR_INTERACTIVE_MODE:()=>am,CONFIG_ERROR_MODE_REQUIRED:()=>sm,CONFIG_ERROR_UNKNOWN_OPTION:()=>om,CleanOptions:()=>Au,cleanTask:()=>Yb,cleanWithOptionsTask:()=>LI,isCleanOptionsArray:()=>DI});function LI(e,t){let{cleanMode:r,options:n,valid:i}=NI(e);return r?i.options?(n.push(...t),n.some(HI)?nr(am):Yb(r,n)):nr(om+JSON.stringify(e)):nr(sm)}function Yb(e,t){return{commands:[\"clean\",`-${e}`,...t],format:\"utf-8\",parser(n){return FI(e===\"n\",n)}}}function DI(e){return Array.isArray(e)&&e.every(t=>lm.has(t))}function NI(e){let t,r=[],n={cleanMode:!1,options:!0};return e.replace(/[^a-z]i/g,\"\").split(\"\").forEach(i=>{jI(i)?(t=i,n.cleanMode=!0):n.options=n.options&&BI(r[r.length]=`-${i}`)}),{cleanMode:t,options:r,valid:n}}function jI(e){return e===\"f\"||e===\"n\"}function BI(e){return/^-[a-z]$/i.test(e)&&lm.has(e.charAt(1))}function HI(e){return/^-[^\\-]/.test(e)?e.indexOf(\"i\")>0:e===\"--interactive\"}var am,sm,om,Au,lm,Xb=W({\"src/lib/tasks/clean.ts\"(){\"use strict\";$I(),oe(),tt(),am=\"Git clean interactive mode is not supported\",sm='Git clean mode parameter (\"n\" or \"f\") is required',om=\"Git clean unknown option found in: \",Au=(e=>(e.DRY_RUN=\"n\",e.FORCE=\"f\",e.IGNORED_INCLUDED=\"x\",e.IGNORED_ONLY=\"X\",e.EXCLUDING=\"e\",e.QUIET=\"q\",e.RECURSIVE=\"d\",e))(Au||{}),lm=new Set([\"i\",...Tb(Object.values(Au))])}});function UI(e){let t=new Kb;for(let r of Zb(e))t.addValue(r.file,String(r.key),r.value);return t}function GI(e,t){let r=null,n=[],i=new Map;for(let a of Zb(e,t))a.key===t&&(n.push(r=a.value),i.has(a.file)||i.set(a.file,[]),i.get(a.file).push(r));return{key:t,paths:Array.from(i.keys()),scopes:i,value:r,values:n}}function zI(e){return e.replace(/^(file):/,\"\")}function*Zb(e,t=null){let r=e.split(\"\\0\");for(let n=0,i=r.length-1;n<i;){let a=zI(r[n++]),s=r[n++],o=t;if(s.includes(`\n`)){let c=xb(s,`\n`);o=c[0],s=c[1]}yield{file:a,key:o,value:s}}}var Kb,VI=W({\"src/lib/responses/ConfigList.ts\"(){\"use strict\";oe(),Kb=class{constructor(){this.files=[],this.values=Object.create(null)}get all(){return this._all||(this._all=this.files.reduce((e,t)=>Object.assign(e,this.values[t]),{})),this._all}addFile(e){if(!(e in this.values)){let t=ma(this.files);this.values[e]=t?Object.create(this.values[t]):{},this.files.push(e)}return this.values[e]}addValue(e,t,r){let n=this.addFile(e);n.hasOwnProperty(t)?Array.isArray(n[t])?n[t].push(r):n[t]=[n[t],r]:n[t]=r,this._all=void 0}}}});function Mp(e,t){return typeof e==\"string\"&&Gp.hasOwnProperty(e)?e:t}function WI(e,t,r,n){let i=[\"config\",`--${n}`];return r&&i.push(\"--add\"),i.push(e,t),{commands:i,format:\"utf-8\",parser(a){return a}}}function qI(e,t){let r=[\"config\",\"--null\",\"--show-origin\",\"--get-all\",e];return t&&r.splice(1,0,`--${t}`),{commands:r,format:\"utf-8\",parser(n){return GI(n,e)}}}function YI(e){let t=[\"config\",\"--list\",\"--show-origin\",\"--null\"];return e&&t.push(`--${e}`),{commands:t,format:\"utf-8\",parser(r){return UI(r)}}}function XI(){return{addConfig(e,t,...r){return this._runTask(WI(e,t,r[0]===!0,Mp(r[1],\"local\")),Je(arguments))},getConfig(e,t){return this._runTask(qI(e,Mp(t,void 0)),Je(arguments))},listConfig(...e){return this._runTask(YI(Mp(e[0],void 0)),Je(arguments))}}}var Gp,Jb=W({\"src/lib/tasks/config.ts\"(){\"use strict\";VI(),oe(),Gp=(e=>(e.system=\"system\",e.global=\"global\",e.local=\"local\",e.worktree=\"worktree\",e))(Gp||{})}});function ZI(e){return Qb.has(e)}var Op,Qb,e_=W({\"src/lib/tasks/diff-name-status.ts\"(){\"use strict\";Op=(e=>(e.ADDED=\"A\",e.COPIED=\"C\",e.DELETED=\"D\",e.MODIFIED=\"M\",e.RENAMED=\"R\",e.CHANGED=\"T\",e.UNMERGED=\"U\",e.UNKNOWN=\"X\",e.BROKEN=\"B\",e))(Op||{}),Qb=new Set(Object.values(Op))}});function KI(...e){return new r_().param(...e)}function JI(e){let t=new Set,r={};return Kp(e,n=>{let[i,a,s]=n.split(Ps);t.add(i),(r[i]=r[i]||[]).push({line:Ie(a),path:i,preview:s})}),{paths:t,results:r}}function QI(){return{grep(e){let t=Je(arguments),r=rr(arguments);for(let i of t_)if(r.includes(i))return this._runTask(nr(`git.grep: use of \"${i}\" is not supported.`),t);typeof e==\"string\"&&(e=KI().param(e));let n=[\"grep\",\"--null\",\"-n\",\"--full-name\",...r,...e];return this._runTask({commands:n,format:\"utf-8\",parser(i){return JI(i)}},t)}}}var t_,bl,H2,r_,n_=W({\"src/lib/tasks/grep.ts\"(){\"use strict\";oe(),tt(),t_=[\"-h\"],bl=Symbol(\"grepQuery\"),r_=class{constructor(){this[H2]=[]}*[(H2=bl,Symbol.iterator)](){for(let e of this[bl])yield e}and(...e){return e.length&&this[bl].push(\"--and\",\"(\",...Sl(e,\"-e\"),\")\"),this}param(...e){return this[bl].push(...Sl(e,\"-e\")),this}}}}),i_={};rt(i_,{ResetMode:()=>ku,getResetMode:()=>tF,resetTask:()=>eF});function eF(e,t){let r=[\"reset\"];return a_(e)&&r.push(`--${e}`),r.push(...t),Vt(r)}function tF(e){if(a_(e))return e;switch(typeof e){case\"string\":case\"undefined\":return\"soft\"}}function a_(e){return s_.includes(e)}var ku,s_,o_=W({\"src/lib/tasks/reset.ts\"(){\"use strict\";tt(),ku=(e=>(e.MIXED=\"mixed\",e.SOFT=\"soft\",e.HARD=\"hard\",e.MERGE=\"merge\",e.KEEP=\"keep\",e))(ku||{}),s_=Array.from(Object.values(ku))}});function rF(){return(0,Mu.default)(\"simple-git\")}function U2(e,t,r){return!t||!String(t).replace(/\\s*/,\"\")?r?(n,...i)=>{e(n,...i),r(n,...i)}:e:(n,...i)=>{e(`%s ${n}`,t,...i),r&&r(n,...i)}}function nF(e,t,{namespace:r}){if(typeof e==\"string\")return e;let n=t&&t.namespace||\"\";return n.startsWith(r)?n.substr(r.length+1):n||r}function cm(e,t,r,n=rF()){let i=e&&`[${e}]`||\"\",a=[],s=typeof t==\"string\"?n.extend(t):t,o=nF(Sn(t,Pt),s,n);return l(r);function c(u,f){return ke(a,cm(e,o.replace(/^[^:]+/,u),f,n))}function l(u){let f=u&&`[${u}]`||\"\",d=s&&U2(s,f)||ga,h=U2(n,`${i} ${f}`,d);return Object.assign(s?d:h,{label:e,sibling:c,info:h,step:l})}}var l_=W({\"src/lib/git-logger.ts\"(){\"use strict\";oe(),Mu.default.formatters.L=e=>String(tm(e)?e.length:\"-\"),Mu.default.formatters.B=e=>Buffer.isBuffer(e)?e.toString(\"utf8\"):Pl(e)}}),Su,zp,iF=W({\"src/lib/runners/tasks-pending-queue.ts\"(){\"use strict\";Ei(),l_(),Su=class{constructor(e=\"GitExecutor\"){this.logLabel=e,this._queue=new Map}withProgress(e){return this._queue.get(e)}createProgress(e){let t=Su.getName(e.commands[0]),r=cm(this.logLabel,t);return{task:e,logger:r,name:t}}push(e){let t=this.createProgress(e);return t.logger(\"Adding task to the queue, commands = %o\",e.commands),this._queue.set(e,t),t}fatal(e){for(let[t,{logger:r}]of Array.from(this._queue.entries()))t===e.task?(r.info(\"Failed %o\",e),r(\"Fatal exception, any as-yet un-started tasks run through this executor will not be attempted\")):r.info(\"A fatal exception occurred in a previous task, the queue has been purged: %o\",e.message),this.complete(t);if(this._queue.size!==0)throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`)}complete(e){this.withProgress(e)&&this._queue.delete(e)}attempt(e){let t=this.withProgress(e);if(!t)throw new wr(void 0,\"TasksPendingQueue: attempt called for an unknown task\");return t.logger(\"Starting task\"),t}static getName(e=\"empty\"){return`task:${e}:${++Su.counter}`}},zp=Su,zp.counter=0}});function pa(e,t){return{method:Sb(e.commands)||\"\",commands:t}}function aF(e,t){return r=>{t(\"[ERROR] child process exception %o\",r),e.push(Buffer.from(String(r.stack),\"ascii\"))}}function G2(e,t,r,n){return i=>{r(\"%s received %L bytes\",t,i),n(\"%B\",i),e.push(i)}}var Vp,sF=W({\"src/lib/runners/git-executor-chain.ts\"(){\"use strict\";Ei(),tt(),oe(),iF(),Vp=class{constructor(e,t,r){this._executor=e,this._scheduler=t,this._plugins=r,this._chain=Promise.resolve(),this._queue=new zp}get cwd(){return this._cwd||this._executor.cwd}set cwd(e){this._cwd=e}get env(){return this._executor.env}get outputHandler(){return this._executor.outputHandler}chain(){return this}push(e){return this._queue.push(e),this._chain=this._chain.then(()=>this.attemptTask(e))}attemptTask(e){return _l(this,null,function*(){let t=yield this._scheduler.next(),r=()=>this._queue.complete(e);try{let{logger:n}=this._queue.attempt(e);return yield Wb(e)?this.attemptEmptyTask(e,n):this.attemptRemoteTask(e,n)}catch(n){throw this.onFatalException(e,n)}finally{r(),t()}})}onFatalException(e,t){let r=t instanceof wr?Object.assign(t,{task:e}):new wr(e,t&&String(t));return this._chain=Promise.resolve(),this._queue.fatal(r),r}attemptRemoteTask(e,t){return _l(this,null,function*(){let r=this._plugins.exec(\"spawn.binary\",\"\",pa(e,e.commands)),n=this._plugins.exec(\"spawn.args\",[...e.commands],pa(e,e.commands)),i=yield this.gitResponse(e,r,n,this.outputHandler,t.step(\"SPAWN\")),a=yield this.handleTaskData(e,n,i,t.step(\"HANDLE\"));return t(\"passing response to task's parser as a %s\",e.format),Vb(e)?Bp(e.parser,a):Bp(e.parser,a.asStrings())})}attemptEmptyTask(e,t){return _l(this,null,function*(){return t(\"empty task bypassing child process to call to task's parser\"),e.parser(this)})}handleTaskData(e,t,r,n){let{exitCode:i,rejection:a,stdOut:s,stdErr:o}=r;return new Promise((c,l)=>{n(\"Preparing to handle process response exitCode=%d stdOut=\",i);let{error:u}=this._plugins.exec(\"task.error\",{error:a},Fr(Fr({},pa(e,t)),r));if(u&&e.onError)return n.info(\"exitCode=%s handling with custom error handler\"),e.onError(r,u,f=>{n.info(\"custom error handler treated as success\"),n(\"custom error returned a %s\",Pl(f)),c(new Al(Array.isArray(f)?Buffer.concat(f):f,Buffer.concat(o)))},l);if(u)return n.info(\"handling as error: exitCode=%s stdErr=%s rejection=%o\",i,o.length,a),l(u);n.info(\"retrieving task output complete\"),c(new Al(Buffer.concat(s),Buffer.concat(o)))})}gitResponse(e,t,r,n,i){return _l(this,null,function*(){let a=i.sibling(\"output\"),s=this._plugins.exec(\"spawn.options\",{cwd:this.cwd,env:this.env,windowsHide:!0},pa(e,e.commands));return new Promise(o=>{let c=[],l=[];i.info(\"%s %o\",t,r),i(\"%O\",s);let u=this._beforeSpawn(e,r);if(u)return o({stdOut:c,stdErr:l,exitCode:9901,rejection:u});this._plugins.exec(\"spawn.before\",void 0,xl(Fr({},pa(e,r)),{kill(d){u=d||u}}));let f=(0,c_.spawn)(t,r,s);f.stdout.on(\"data\",G2(c,\"stdOut\",i,a.step(\"stdOut\"))),f.stderr.on(\"data\",G2(l,\"stdErr\",i,a.step(\"stdErr\"))),f.on(\"error\",aF(l,i)),n&&(i(\"Passing child process stdOut/stdErr to custom outputHandler\"),n(t,f.stdout,f.stderr,[...r])),this._plugins.exec(\"spawn.after\",void 0,xl(Fr({},pa(e,r)),{spawned:f,close(d,h){o({stdOut:c,stdErr:l,exitCode:d,rejection:u||h})},kill(d){f.killed||(u=d,f.kill(\"SIGINT\"))}}))})})}_beforeSpawn(e,t){let r;return this._plugins.exec(\"spawn.before\",void 0,xl(Fr({},pa(e,t)),{kill(n){r=n||r}})),r}}}}),u_={};rt(u_,{GitExecutor:()=>f_});var f_,oF=W({\"src/lib/runners/git-executor.ts\"(){\"use strict\";sF(),f_=class{constructor(e,t,r){this.cwd=e,this._scheduler=t,this._plugins=r,this._chain=new Vp(this,this._scheduler,this._plugins)}chain(){return new Vp(this,this._scheduler,this._plugins)}push(e){return this._chain.push(e)}}}});function lF(e,t,r=ga){let n=a=>{r(null,a)},i=a=>{(a==null?void 0:a.task)===e&&r(a instanceof Tl?cF(a):a,void 0)};t.then(n,i)}function cF(e){let t=n=>{console.warn(`simple-git deprecation notice: accessing GitResponseError.${n} should be GitResponseError.git.${n}, this will no longer be available in version 3`),t=ga};return Object.create(e,Object.getOwnPropertyNames(e.git).reduce(r,{}));function r(n,i){return i in e||(n[i]={enumerable:!1,configurable:!1,get(){return t(i),e.git[i]}}),n}}var uF=W({\"src/lib/task-callback.ts\"(){\"use strict\";Rs(),oe()}});function z2(e,t){return Gb(r=>{if(!Jp(e))throw new Error(`Git.cwd: cannot change to non-directory \"${e}\"`);return(t||r).cwd=e})}var fF=W({\"src/lib/tasks/change-working-directory.ts\"(){\"use strict\";oe(),tt()}});function Ip(e){let t=[\"checkout\",...e];return t[1]===\"-b\"&&t.includes(\"-B\")&&(t[1]=Lu(t,\"-B\")),Vt(t)}function dF(){return{checkout(){return this._runTask(Ip(rr(arguments,1)),Je(arguments))},checkoutBranch(e,t){return this._runTask(Ip([\"-b\",e,t,...rr(arguments)]),Je(arguments))},checkoutLocalBranch(e){return this._runTask(Ip([\"-b\",e,...rr(arguments)]),Je(arguments))}}}var hF=W({\"src/lib/tasks/checkout.ts\"(){\"use strict\";oe(),tt()}});function pF(){return{count:0,garbage:0,inPack:0,packs:0,prunePackable:0,size:0,sizeGarbage:0,sizePack:0}}function mF(){return{countObjects(){return this._runTask({commands:[\"count-objects\",\"--verbose\"],format:\"utf-8\",parser(e){return ir(pF(),[d_],e)}})}}}var d_,gF=W({\"src/lib/tasks/count-objects.ts\"(){\"use strict\";oe(),d_=new ce(/([a-z-]+): (\\d+)$/,(e,[t,r])=>{let n=kb(t);e.hasOwnProperty(n)&&(e[n]=Ie(r))})}});function vF(e){return ir({author:null,branch:\"\",commit:\"\",root:!1,summary:{changes:0,insertions:0,deletions:0}},h_,e)}var h_,yF=W({\"src/lib/parsers/parse-commit.ts\"(){\"use strict\";oe(),h_=[new ce(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/,(e,[t,r,n])=>{e.branch=t,e.commit=n,e.root=!!r}),new ce(/\\s*Author:\\s(.+)/i,(e,[t])=>{let r=t.split(\"<\"),n=r.pop();!n||!n.includes(\"@\")||(e.author={email:n.substr(0,n.length-1),name:r.join(\"<\").trim()})}),new ce(/(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,(e,[t,r,n])=>{e.summary.changes=parseInt(t,10)||0,e.summary.insertions=parseInt(r,10)||0,e.summary.deletions=parseInt(n,10)||0}),new ce(/^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,(e,[t,r,n])=>{e.summary.changes=parseInt(t,10)||0;let i=parseInt(r,10)||0;n===\"-\"?e.summary.deletions=i:n===\"+\"&&(e.summary.insertions=i)})]}});function wF(e,t,r){return{commands:[\"-c\",\"core.abbrev=40\",\"commit\",...Sl(e,\"-m\"),...t,...r],format:\"utf-8\",parser:vF}}function bF(){return{commit(t,...r){let n=Je(arguments),i=e(t)||wF(xn(t),xn(Sn(r[0],Ru,[])),[...Sn(r[1],Rl,[]),...rr(arguments,0,!0)]);return this._runTask(i,n)}};function e(t){return!Ru(t)&&nr(\"git.commit: requires the commit message to be supplied as a string/string[]\")}}var _F=W({\"src/lib/tasks/commit.ts\"(){\"use strict\";yF(),oe(),tt()}});function xF(){return{firstCommit(){return this._runTask(Vt([\"rev-list\",\"--max-parents=0\",\"HEAD\"],!0),Je(arguments))}}}var SF=W({\"src/lib/tasks/first-commit.ts\"(){\"use strict\";oe(),tt()}});function EF(e,t){let r=[\"hash-object\",e];return t&&r.push(\"-w\"),Vt(r,!0)}var AF=W({\"src/lib/tasks/hash-object.ts\"(){\"use strict\";tt()}});function kF(e,t,r){let n=String(r).trim(),i;if(i=p_.exec(n))return new Tu(e,t,!1,i[1]);if(i=m_.exec(n))return new Tu(e,t,!0,i[1]);let a=\"\",s=n.split(\" \");for(;s.length;)if(s.shift()===\"in\"){a=s.join(\" \");break}return new Tu(e,t,/^re/i.test(n),a)}var Tu,p_,m_,TF=W({\"src/lib/responses/InitSummary.ts\"(){\"use strict\";Tu=class{constructor(e,t,r,n){this.bare=e,this.path=t,this.existing=r,this.gitDir=n}},p_=/^Init.+ repository in (.+)$/,m_=/^Rein.+ in (.+)$/}});function CF(e){return e.includes(um)}function PF(e=!1,t,r){let n=[\"init\",...r];return e&&!CF(n)&&n.splice(1,0,um),{commands:n,format:\"utf-8\",parser(i){return kF(n.includes(\"--bare\"),t,i)}}}var um,RF=W({\"src/lib/tasks/init.ts\"(){\"use strict\";TF(),um=\"--bare\"}});function fm(e){for(let t=0;t<e.length;t++){let r=dm.exec(e[t]);if(r)return`--${r[1]}`}return\"\"}function MF(e){return dm.test(e)}var dm,Ml=W({\"src/lib/args/log-format.ts\"(){\"use strict\";dm=/^--(stat|numstat|name-only|name-status)(=|$)/}}),g_,OF=W({\"src/lib/responses/DiffSummary.ts\"(){\"use strict\";g_=class{constructor(){this.changed=0,this.deletions=0,this.insertions=0,this.files=[]}}}});function v_(e=\"\"){let t=y_[e];return r=>ir(new g_,t,r,!1)}var Fp,V2,W2,q2,y_,w_=W({\"src/lib/parsers/parse-diff-summary.ts\"(){\"use strict\";Ml(),OF(),e_(),oe(),Fp=[new ce(/^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,(e,[t,r,n=\"\"])=>{e.files.push({file:t.trim(),changes:Ie(r),insertions:n.replace(/[^+]/g,\"\").length,deletions:n.replace(/[^-]/g,\"\").length,binary:!1})}),new ce(/^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,(e,[t,r,n])=>{e.files.push({file:t.trim(),before:Ie(r),after:Ie(n),binary:!0})}),new ce(/(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,(e,[t,r])=>{let n=/(\\d+) i/.exec(r),i=/(\\d+) d/.exec(r);e.changed=Ie(t),e.insertions=Ie(n==null?void 0:n[1]),e.deletions=Ie(i==null?void 0:i[1])})],V2=[new ce(/(\\d+)\\t(\\d+)\\t(.+)$/,(e,[t,r,n])=>{let i=Ie(t),a=Ie(r);e.changed++,e.insertions+=i,e.deletions+=a,e.files.push({file:n,changes:i+a,insertions:i,deletions:a,binary:!1})}),new ce(/-\\t-\\t(.+)$/,(e,[t])=>{e.changed++,e.files.push({file:t,after:0,before:0,binary:!0})})],W2=[new ce(/(.+)$/,(e,[t])=>{e.changed++,e.files.push({file:t,changes:0,insertions:0,deletions:0,binary:!1})})],q2=[new ce(/([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,(e,[t,r,n,i,a])=>{e.changed++,e.files.push({file:a!=null?a:n,changes:0,insertions:0,deletions:0,binary:!1,status:Np(ZI(t)&&t),from:Np(!!a&&n!==a&&n),similarity:Ie(r)})})],y_={\"\":Fp,\"--stat\":Fp,\"--numstat\":V2,\"--name-status\":q2,\"--name-only\":W2}}});function IF(e,t){return t.reduce((r,n,i)=>(r[n]=e[i]||\"\",r),Object.create({diff:null}))}function b_(e=mm,t=__,r=\"\"){let n=v_(r);return function(i){let a=Cl(i.trim(),!1,hm).map(function(s){let o=s.split(pm),c=IF(o[0].split(e),t);return o.length>1&&o[1].trim()&&(c.diff=n(o[1])),c});return{all:a,latest:a.length&&a[0]||null,total:a.length}}}var hm,pm,mm,__,x_=W({\"src/lib/parsers/parse-list-log-summary.ts\"(){\"use strict\";oe(),w_(),Ml(),hm=\"\\xF2\\xF2\\xF2\\xF2\\xF2\\xF2 \",pm=\" \\xF2\\xF2\",mm=\" \\xF2 \",__=[\"hash\",\"date\",\"message\",\"refs\",\"author_name\",\"author_email\"]}}),S_={};rt(S_,{diffSummaryTask:()=>FF,validateLogFormatConfig:()=>Bu});function FF(e){let t=fm(e),r=[\"diff\"];return t===\"\"&&(t=\"--stat\",r.push(\"--stat=4096\")),r.push(...e),Bu(r)||{commands:r,format:\"utf-8\",parser:v_(t)}}function Bu(e){let t=e.filter(MF);if(t.length>1)return nr(`Summary flags are mutually exclusive - pick one of ${t.join(\",\")}`);if(t.length&&e.includes(\"-z\"))return nr(`Summary flag ${t} parsing is not compatible with null termination option '-z'`)}var gm=W({\"src/lib/tasks/diff.ts\"(){\"use strict\";Ml(),w_(),tt()}});function $F(e,t){let r=[],n=[];return Object.keys(e).forEach(i=>{r.push(i),n.push(String(e[i]))}),[r,n.join(t)]}function LF(e){return Object.keys(e).reduce((t,r)=>(r in Wp||(t[r]=e[r]),t),{})}function E_(e={},t=[]){let r=Sn(e.splitter,Pt,mm),n=!Qp(e.format)&&e.format?e.format:{hash:\"%H\",date:e.strictDate===!1?\"%ai\":\"%aI\",message:\"%s\",refs:\"%D\",body:e.multiLine?\"%B\":\"%b\",author_name:e.mailMap!==!1?\"%aN\":\"%an\",author_email:e.mailMap!==!1?\"%aE\":\"%ae\"},[i,a]=$F(n,r),s=[],o=[`--pretty=format:${hm}${a}${pm}`,...t],c=e.n||e[\"max-count\"]||e.maxCount;if(c&&o.push(`--max-count=${c}`),e.from||e.to){let l=e.symmetric!==!1?\"...\":\"..\";s.push(`${e.from||\"\"}${l}${e.to||\"\"}`)}return Pt(e.file)&&o.push(\"--follow\",EI(e.file)),rm(LF(e),o),{fields:i,splitter:r,commands:[...o,...s]}}function DF(e,t,r){let n=b_(e,t,fm(r));return{commands:[\"log\",...r],format:\"utf-8\",parser:n}}function NF(){return{log(...r){let n=Je(arguments),i=E_(nm(arguments),Sn(arguments[0],Rl)),a=t(...r)||Bu(i.commands)||e(i);return this._runTask(a,n)}};function e(r){return DF(r.splitter,r.fields,r.commands)}function t(r,n){return Pt(r)&&Pt(n)&&nr(\"git.log(string, string) should be replaced with git.log({ from: string, to: string })\")}}var Wp,A_=W({\"src/lib/tasks/log.ts\"(){\"use strict\";Ml(),kl(),x_(),oe(),tt(),gm(),Wp=(e=>(e[e[\"--pretty\"]=0]=\"--pretty\",e[e[\"max-count\"]=1]=\"max-count\",e[e.maxCount=2]=\"maxCount\",e[e.n=3]=\"n\",e[e.file=4]=\"file\",e[e.format=5]=\"format\",e[e.from=6]=\"from\",e[e.to=7]=\"to\",e[e.splitter=8]=\"splitter\",e[e.symmetric=9]=\"symmetric\",e[e.mailMap=10]=\"mailMap\",e[e.multiLine=11]=\"multiLine\",e[e.strictDate=12]=\"strictDate\",e))(Wp||{})}}),Cu,k_,jF=W({\"src/lib/responses/MergeSummary.ts\"(){\"use strict\";Cu=class{constructor(e,t=null,r){this.reason=e,this.file=t,this.meta=r}toString(){return`${this.file}:${this.reason}`}},k_=class{constructor(){this.conflicts=[],this.merges=[],this.result=\"success\"}get failed(){return this.conflicts.length>0}get reason(){return this.result}toString(){return this.conflicts.length?`CONFLICTS: ${this.conflicts.join(\", \")}`:\"OK\"}}}}),qp,T_,BF=W({\"src/lib/responses/PullSummary.ts\"(){\"use strict\";qp=class{constructor(){this.remoteMessages={all:[]},this.created=[],this.deleted=[],this.files=[],this.deletions={},this.insertions={},this.summary={changes:0,deletions:0,insertions:0}}},T_=class{constructor(){this.remote=\"\",this.hash={local:\"\",remote:\"\"},this.branch={local:\"\",remote:\"\"},this.message=\"\"}toString(){return this.message}}}});function $p(e){return e.objects=e.objects||{compressing:0,counting:0,enumerating:0,packReused:0,reused:{count:0,delta:0},total:{count:0,delta:0}}}function Y2(e){let t=/^\\s*(\\d+)/.exec(e),r=/delta (\\d+)/i.exec(e);return{count:Ie(t&&t[1]||\"0\"),delta:Ie(r&&r[1]||\"0\")}}var C_,HF=W({\"src/lib/parsers/parse-remote-objects.ts\"(){\"use strict\";oe(),C_=[new Si(/^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,(e,[t,r])=>{let n=t.toLowerCase(),i=$p(e.remoteMessages);Object.assign(i,{[n]:Ie(r)})}),new Si(/^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,(e,[t,r])=>{let n=t.toLowerCase(),i=$p(e.remoteMessages);Object.assign(i,{[n]:Ie(r)})}),new Si(/total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,(e,[t,r,n])=>{let i=$p(e.remoteMessages);i.total=Y2(t),i.reused=Y2(r),i.packReused=Ie(n)})]}});function P_(e,t){return ir({remoteMessages:new M_},R_,t)}var R_,M_,O_=W({\"src/lib/parsers/parse-remote-messages.ts\"(){\"use strict\";oe(),HF(),R_=[new Si(/^remote:\\s*(.+)$/,(e,[t])=>(e.remoteMessages.all.push(t.trim()),!1)),...C_,new Si([/create a (?:pull|merge) request/i,/\\s(https?:\\/\\/\\S+)$/],(e,[t])=>{e.remoteMessages.pullRequestUrl=t}),new Si([/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i,/\\s(https?:\\/\\/\\S+)$/],(e,[t,r,n])=>{e.remoteMessages.vulnerabilities={count:Ie(t),summary:r,url:n}})],M_=class{constructor(){this.all=[]}}}});function UF(e,t){let r=ir(new T_,I_,[e,t]);return r.message&&r}var X2,Z2,K2,J2,I_,Q2,vm,F_=W({\"src/lib/parsers/parse-pull.ts\"(){\"use strict\";BF(),oe(),O_(),X2=/^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/,Z2=/(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/,K2=/^(create|delete) mode \\d+ (.+)/,J2=[new ce(X2,(e,[t,r,n])=>{e.files.push(t),r&&(e.insertions[t]=r.length),n&&(e.deletions[t]=n.length)}),new ce(Z2,(e,[t,,r,,n])=>r!==void 0||n!==void 0?(e.summary.changes=+t||0,e.summary.insertions=+r||0,e.summary.deletions=+n||0,!0):!1),new ce(K2,(e,[t,r])=>{ke(e.files,r),ke(t===\"create\"?e.created:e.deleted,r)})],I_=[new ce(/^from\\s(.+)$/i,(e,[t])=>void(e.remote=t)),new ce(/^fatal:\\s(.+)$/,(e,[t])=>void(e.message=t)),new ce(/([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,(e,[t,r,n,i])=>{e.branch.local=n,e.hash.local=t,e.branch.remote=i,e.hash.remote=r})],Q2=(e,t)=>ir(new qp,J2,[e,t]),vm=(e,t)=>Object.assign(new qp,Q2(e,t),P_(e,t))}}),eb,$_,tb,GF=W({\"src/lib/parsers/parse-merge.ts\"(){\"use strict\";jF(),oe(),F_(),eb=[new ce(/^Auto-merging\\s+(.+)$/,(e,[t])=>{e.merges.push(t)}),new ce(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/,(e,[t,r])=>{e.conflicts.push(new Cu(t,r))}),new ce(/^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,(e,[t,r,n])=>{e.conflicts.push(new Cu(t,r,{deleteRef:n}))}),new ce(/^CONFLICT\\s+\\((.+)\\):/,(e,[t])=>{e.conflicts.push(new Cu(t,null))}),new ce(/^Automatic merge failed;\\s+(.+)$/,(e,[t])=>{e.result=t})],$_=(e,t)=>Object.assign(tb(e,t),vm(e,t)),tb=e=>ir(new k_,eb,e)}});function rb(e){return e.length?{commands:[\"merge\",...e],format:\"utf-8\",parser(t,r){let n=$_(t,r);if(n.failed)throw new Tl(n);return n}}:nr(\"Git.merge requires at least one option\")}var zF=W({\"src/lib/tasks/merge.ts\"(){\"use strict\";Rs(),GF(),tt()}});function VF(e,t,r){let n=r.includes(\"deleted\"),i=r.includes(\"tag\")||/^refs\\/tags/.test(e),a=!r.includes(\"new\");return{deleted:n,tag:i,branch:!i,new:!a,alreadyUpdated:a,local:e,remote:t}}var nb,L_,ib,WF=W({\"src/lib/parsers/parse-push.ts\"(){\"use strict\";oe(),O_(),nb=[new ce(/^Pushing to (.+)$/,(e,[t])=>{e.repo=t}),new ce(/^updating local tracking ref '(.+)'/,(e,[t])=>{e.ref=xl(Fr({},e.ref||{}),{local:t})}),new ce(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/,(e,[t,r,n])=>{e.pushed.push(VF(t,r,n))}),new ce(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,(e,[t,r,n])=>{e.branch=xl(Fr({},e.branch||{}),{local:t,remote:r,remoteName:n})}),new ce(/^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,(e,[t,r,n,i])=>{e.update={head:{local:t,remote:r},hash:{from:n,to:i}}})],L_=(e,t)=>{let r=ib(e,t),n=P_(e,t);return Fr(Fr({},r),n)},ib=(e,t)=>ir({pushed:[]},nb,[e,t])}}),D_={};rt(D_,{pushTagsTask:()=>qF,pushTask:()=>ym});function qF(e={},t){return ke(t,\"--tags\"),ym(e,t)}function ym(e={},t){let r=[\"push\",...t];return e.branch&&r.splice(1,0,e.branch),e.remote&&r.splice(1,0,e.remote),Lu(r,\"-v\"),ke(r,\"--verbose\"),ke(r,\"--porcelain\"),{commands:r,format:\"utf-8\",parser:L_}}var N_=W({\"src/lib/tasks/push.ts\"(){\"use strict\";WF(),oe()}});function YF(){return{showBuffer(){let e=[\"show\",...rr(arguments,1)];return e.includes(\"--binary\")||e.splice(1,0,\"--binary\"),this._runTask(zb(e),Je(arguments))},show(){let e=[\"show\",...rr(arguments,1)];return this._runTask(Vt(e),Je(arguments))}}}var XF=W({\"src/lib/tasks/show.ts\"(){\"use strict\";oe(),tt()}}),ab,j_,ZF=W({\"src/lib/responses/FileStatusSummary.ts\"(){\"use strict\";ab=/^(.+)\\0(.+)$/,j_=class{constructor(e,t,r){if(this.path=e,this.index=t,this.working_dir=r,t===\"R\"||r===\"R\"){let n=ab.exec(e)||[null,e,e];this.from=n[2]||\"\",this.path=n[1]||\"\"}}}}});function sb(e){let[t,r]=e.split(Ps);return{from:r||t,to:t}}function yr(e,t,r){return[`${e}${t}`,r]}function Lp(e,...t){return t.map(r=>yr(e,r,(n,i)=>ke(n.conflicted,i)))}function KF(e,t){let r=t.trim();switch(\" \"){case r.charAt(2):return n(r.charAt(0),r.charAt(1),r.substr(3));case r.charAt(1):return n(\" \",r.charAt(0),r.substr(2));default:return}function n(i,a,s){let o=`${i}${a}`,c=B_.get(o);c&&c(e,s),o!==\"##\"&&o!==\"!!\"&&e.files.push(new j_(s,i,a))}}var ob,B_,H_,JF=W({\"src/lib/responses/StatusSummary.ts\"(){\"use strict\";oe(),ZF(),ob=class{constructor(){this.not_added=[],this.conflicted=[],this.created=[],this.deleted=[],this.ignored=void 0,this.modified=[],this.renamed=[],this.files=[],this.staged=[],this.ahead=0,this.behind=0,this.current=null,this.tracking=null,this.detached=!1,this.isClean=()=>!this.files.length}},B_=new Map([yr(\" \",\"A\",(e,t)=>ke(e.created,t)),yr(\" \",\"D\",(e,t)=>ke(e.deleted,t)),yr(\" \",\"M\",(e,t)=>ke(e.modified,t)),yr(\"A\",\" \",(e,t)=>ke(e.created,t)&&ke(e.staged,t)),yr(\"A\",\"M\",(e,t)=>ke(e.created,t)&&ke(e.staged,t)&&ke(e.modified,t)),yr(\"D\",\" \",(e,t)=>ke(e.deleted,t)&&ke(e.staged,t)),yr(\"M\",\" \",(e,t)=>ke(e.modified,t)&&ke(e.staged,t)),yr(\"M\",\"M\",(e,t)=>ke(e.modified,t)&&ke(e.staged,t)),yr(\"R\",\" \",(e,t)=>{ke(e.renamed,sb(t))}),yr(\"R\",\"M\",(e,t)=>{let r=sb(t);ke(e.renamed,r),ke(e.modified,r.to)}),yr(\"!\",\"!\",(e,t)=>{ke(e.ignored=e.ignored||[],t)}),yr(\"?\",\"?\",(e,t)=>ke(e.not_added,t)),...Lp(\"A\",\"A\",\"U\"),...Lp(\"D\",\"D\",\"U\"),...Lp(\"U\",\"A\",\"D\",\"U\"),[\"##\",(e,t)=>{let r=/ahead (\\d+)/,n=/behind (\\d+)/,i=/^(.+?(?=(?:\\.{3}|\\s|$)))/,a=/\\.{3}(\\S*)/,s=/\\son\\s([\\S]+)$/,o;o=r.exec(t),e.ahead=o&&+o[1]||0,o=n.exec(t),e.behind=o&&+o[1]||0,o=i.exec(t),e.current=o&&o[1],o=a.exec(t),e.tracking=o&&o[1],o=s.exec(t),e.current=o&&o[1]||e.current,e.detached=/\\(no branch\\)/.test(t)}]]),H_=function(e){let t=e.split(Ps),r=new ob;for(let n=0,i=t.length;n<i;){let a=t[n++].trim();a&&(a.charAt(0)===\"R\"&&(a+=Ps+(t[n++]||\"\")),KF(r,a))}return r}}});function QF(e){return{format:\"utf-8\",commands:[\"status\",\"--porcelain\",\"-b\",\"-u\",\"--null\",...e.filter(r=>!U_.includes(r))],parser(r){return H_(r)}}}var U_,e4=W({\"src/lib/tasks/status.ts\"(){\"use strict\";JF(),U_=[\"--null\",\"-z\"]}});function Ou(e=0,t=0,r=0,n=\"\",i=!0){return Object.defineProperty({major:e,minor:t,patch:r,agent:n,installed:i},\"toString\",{value(){return`${this.major}.${this.minor}.${this.patch}`},configurable:!1,enumerable:!1})}function t4(){return Ou(0,0,0,\"\",!1)}function r4(){return{version(){return this._runTask({commands:[\"--version\"],format:\"utf-8\",parser:n4,onError(e,t,r,n){if(e.exitCode===-2)return r(Buffer.from(wm));n(t)}})}}}function n4(e){return e===wm?t4():ir(Ou(0,0,0,e),G_,e)}var wm,G_,i4=W({\"src/lib/tasks/version.ts\"(){\"use strict\";oe(),wm=\"installed=false\",G_=[new ce(/version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,(e,[t,r,n,i=\"\"])=>{Object.assign(e,Ou(Ie(t),Ie(r),Ie(n),i))}),new ce(/version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,(e,[t,r,n,i=\"\"])=>{Object.assign(e,Ou(Ie(t),Ie(r),n,i))})]}}),z_={};rt(z_,{SimpleGitApi:()=>Yp});var Yp,a4=W({\"src/lib/simple-git-api.ts\"(){\"use strict\";uF(),fF(),hF(),gF(),_F(),Jb(),SF(),n_(),AF(),RF(),A_(),zF(),N_(),XF(),e4(),tt(),i4(),oe(),Yp=class{constructor(e){this._executor=e}_runTask(e,t){let r=this._executor.chain(),n=r.push(e);return t&&lF(e,n,t),Object.create(this,{then:{value:n.then.bind(n)},catch:{value:n.catch.bind(n)},_executor:{value:r}})}add(e){return this._runTask(Vt([\"add\",...xn(e)]),Je(arguments))}cwd(e){let t=Je(arguments);return typeof e==\"string\"?this._runTask(z2(e,this._executor),t):typeof(e==null?void 0:e.path)==\"string\"?this._runTask(z2(e.path,e.root&&this._executor||void 0),t):this._runTask(nr(\"Git.cwd: workingDirectory must be supplied as a string\"),t)}hashObject(e,t){return this._runTask(EF(e,t===!0),Je(arguments))}init(e){return this._runTask(PF(e===!0,this._executor.cwd,rr(arguments)),Je(arguments))}merge(){return this._runTask(rb(rr(arguments)),Je(arguments))}mergeFromTo(e,t){return Pt(e)&&Pt(t)?this._runTask(rb([e,t,...rr(arguments)]),Je(arguments,!1)):this._runTask(nr(\"Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings\"))}outputHandler(e){return this._executor.outputHandler=e,this}push(){let e=ym({remote:Sn(arguments[0],Pt),branch:Sn(arguments[1],Pt)},rr(arguments));return this._runTask(e,Je(arguments))}stash(){return this._runTask(Vt([\"stash\",...rr(arguments)]),Je(arguments))}status(){return this._runTask(QF(rr(arguments)),Je(arguments))}},Object.assign(Yp.prototype,dF(),bF(),XI(),mF(),xF(),QI(),NF(),YF(),r4())}}),V_={};rt(V_,{Scheduler:()=>q_});var lb,q_,s4=W({\"src/lib/runners/scheduler.ts\"(){\"use strict\";oe(),l_(),lb=(()=>{let e=0;return()=>{e++;let{promise:t,done:r}=(0,W_.createDeferred)();return{promise:t,done:r,id:e}}})(),q_=class{constructor(e=2){this.concurrency=e,this.logger=cm(\"\",\"scheduler\"),this.pending=[],this.running=[],this.logger(\"Constructed, concurrency=%s\",e)}schedule(){if(!this.pending.length||this.running.length>=this.concurrency){this.logger(\"Schedule attempt ignored, pending=%s running=%s concurrency=%s\",this.pending.length,this.running.length,this.concurrency);return}let e=ke(this.running,this.pending.shift());this.logger(\"Attempting id=%s\",e.id),e.done(()=>{this.logger(\"Completing id=\",e.id),Lu(this.running,e),this.schedule()})}next(){let{promise:e,id:t}=ke(this.pending,lb());return this.logger(\"Scheduling id=%s\",t),this.schedule(),e}}}}),Y_={};rt(Y_,{applyPatchTask:()=>o4});function o4(e,t){return Vt([\"apply\",...t,...e])}var l4=W({\"src/lib/tasks/apply-patch.ts\"(){\"use strict\";tt()}});function c4(e,t){return{branch:e,hash:t,success:!0}}function u4(e){return{branch:e,hash:null,success:!1}}var X_,f4=W({\"src/lib/responses/BranchDeleteSummary.ts\"(){\"use strict\";X_=class{constructor(){this.all=[],this.branches={},this.errors=[]}get success(){return!this.errors.length}}}});function Z_(e,t){return t===1&&Xp.test(e)}var cb,Xp,ub,Hu,d4=W({\"src/lib/parsers/parse-branch-delete.ts\"(){\"use strict\";f4(),oe(),cb=/(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/,Xp=/^error[^']+'([^']+)'/m,ub=[new ce(cb,(e,[t,r])=>{let n=c4(t,r);e.all.push(n),e.branches[t]=n}),new ce(Xp,(e,[t])=>{let r=u4(t);e.errors.push(r),e.all.push(r),e.branches[t]=r})],Hu=(e,t)=>ir(new X_,ub,[e,t])}}),K_,h4=W({\"src/lib/responses/BranchSummary.ts\"(){\"use strict\";K_=class{constructor(){this.all=[],this.branches={},this.current=\"\",this.detached=!1}push(e,t,r,n,i){e===\"*\"&&(this.detached=t,this.current=r),this.all.push(r),this.branches[r]={current:e===\"*\",linkedWorkTree:e===\"+\",name:r,commit:n,label:i}}}}});function fb(e){return e?e.charAt(0):\"\"}function J_(e){return ir(new K_,Q_,e)}var Q_,p4=W({\"src/lib/parsers/parse-branch.ts\"(){\"use strict\";h4(),oe(),Q_=[new ce(/^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,(e,[t,r,n,i])=>{e.push(fb(t),!0,r,n,i)}),new ce(new RegExp(\"^([*+]\\\\s)?(\\\\S+)\\\\s+([a-z0-9]+)\\\\s?(.*)$\",\"s\"),(e,[t,r,n,i])=>{e.push(fb(t),!1,r,n,i)})]}}),ex={};rt(ex,{branchLocalTask:()=>g4,branchTask:()=>m4,containsDeleteBranchCommand:()=>tx,deleteBranchTask:()=>y4,deleteBranchesTask:()=>v4});function tx(e){let t=[\"-d\",\"-D\",\"--delete\"];return e.some(r=>t.includes(r))}function m4(e){let t=tx(e),r=[\"branch\",...e];return r.length===1&&r.push(\"-a\"),r.includes(\"-v\")||r.splice(1,0,\"-v\"),{format:\"utf-8\",commands:r,parser(n,i){return t?Hu(n,i).all[0]:J_(n)}}}function g4(){return{format:\"utf-8\",commands:[\"branch\",\"-v\"],parser:J_}}function v4(e,t=!1){return{format:\"utf-8\",commands:[\"branch\",\"-v\",t?\"-D\":\"-d\",...e],parser(r,n){return Hu(r,n)},onError({exitCode:r,stdOut:n},i,a,s){if(!Z_(String(i),r))return s(i);a(n)}}}function y4(e,t=!1){let r={format:\"utf-8\",commands:[\"branch\",\"-v\",t?\"-D\":\"-d\",e],parser(n,i){return Hu(n,i).branches[e]},onError({exitCode:n,stdErr:i,stdOut:a},s,o,c){if(!Z_(String(s),n))return c(s);throw new Tl(r.parser(El(a),El(i)),String(s))}};return r}var w4=W({\"src/lib/tasks/branch.ts\"(){\"use strict\";Rs(),d4(),p4(),oe()}}),rx,b4=W({\"src/lib/responses/CheckIgnore.ts\"(){\"use strict\";rx=e=>e.split(/\\n/g).map(t=>t.trim()).filter(t=>!!t)}}),nx={};rt(nx,{checkIgnoreTask:()=>_4});function _4(e){return{commands:[\"check-ignore\",...e],format:\"utf-8\",parser:rx}}var x4=W({\"src/lib/tasks/check-ignore.ts\"(){\"use strict\";b4()}}),ix={};rt(ix,{cloneMirrorTask:()=>E4,cloneTask:()=>ax});function S4(e){return/^--upload-pack(=|$)/.test(e)}function ax(e,t,r){let n=[\"clone\",...r];return Pt(e)&&n.push(e),Pt(t)&&n.push(t),n.find(S4)?nr(\"git.fetch: potential exploit argument blocked.\"):Vt(n)}function E4(e,t,r){return ke(r,\"--mirror\"),ax(e,t,r)}var A4=W({\"src/lib/tasks/clone.ts\"(){\"use strict\";tt(),oe()}});function k4(e,t){return ir({raw:e,remote:null,branches:[],tags:[],updated:[],deleted:[]},sx,[e,t])}var sx,T4=W({\"src/lib/parsers/parse-fetch.ts\"(){\"use strict\";oe(),sx=[new ce(/From (.+)$/,(e,[t])=>{e.remote=t}),new ce(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/,(e,[t,r])=>{e.branches.push({name:t,tracking:r})}),new ce(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/,(e,[t,r])=>{e.tags.push({name:t,tracking:r})}),new ce(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/,(e,[t])=>{e.deleted.push({tracking:t})}),new ce(/\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,(e,[t,r,n,i])=>{e.updated.push({name:n,tracking:i,to:r,from:t})})]}}),ox={};rt(ox,{fetchTask:()=>P4});function C4(e){return/^--upload-pack(=|$)/.test(e)}function P4(e,t,r){let n=[\"fetch\",...r];return e&&t&&n.push(e,t),n.find(C4)?nr(\"git.fetch: potential exploit argument blocked.\"):{commands:n,format:\"utf-8\",parser:k4}}var R4=W({\"src/lib/tasks/fetch.ts\"(){\"use strict\";T4(),tt()}});function M4(e){return ir({moves:[]},lx,e)}var lx,O4=W({\"src/lib/parsers/parse-move.ts\"(){\"use strict\";oe(),lx=[new ce(/^Renaming (.+) to (.+)$/,(e,[t,r])=>{e.moves.push({from:t,to:r})})]}}),cx={};rt(cx,{moveTask:()=>I4});function I4(e,t){return{commands:[\"mv\",\"-v\",...xn(e),t],format:\"utf-8\",parser:M4}}var F4=W({\"src/lib/tasks/move.ts\"(){\"use strict\";O4(),oe()}}),ux={};rt(ux,{pullTask:()=>$4});function $4(e,t,r){let n=[\"pull\",...r];return e&&t&&n.splice(1,0,e,t),{commands:n,format:\"utf-8\",parser(i,a){return vm(i,a)},onError(i,a,s,o){let c=UF(El(i.stdOut),El(i.stdErr));if(c)return o(new Tl(c));o(a)}}}var L4=W({\"src/lib/tasks/pull.ts\"(){\"use strict\";Rs(),F_(),oe()}});function D4(e){let t={};return fx(e,([r])=>t[r]={name:r}),Object.values(t)}function N4(e){let t={};return fx(e,([r,n,i])=>{t.hasOwnProperty(r)||(t[r]={name:r,refs:{fetch:\"\",push:\"\"}}),i&&n&&(t[r].refs[i.replace(/[^a-z]/g,\"\")]=n)}),Object.values(t)}function fx(e,t){Kp(e,r=>t(r.split(/\\s+/)))}var j4=W({\"src/lib/responses/GetRemoteSummary.ts\"(){\"use strict\";oe()}}),dx={};rt(dx,{addRemoteTask:()=>B4,getRemotesTask:()=>H4,listRemotesTask:()=>U4,remoteTask:()=>G4,removeRemoteTask:()=>z4});function B4(e,t,r){return Vt([\"remote\",\"add\",...r,e,t])}function H4(e){let t=[\"remote\"];return e&&t.push(\"-v\"),{commands:t,format:\"utf-8\",parser:e?N4:D4}}function U4(e){let t=[...e];return t[0]!==\"ls-remote\"&&t.unshift(\"ls-remote\"),Vt(t)}function G4(e){let t=[...e];return t[0]!==\"remote\"&&t.unshift(\"remote\"),Vt(t)}function z4(e){return Vt([\"remote\",\"remove\",e])}var V4=W({\"src/lib/tasks/remote.ts\"(){\"use strict\";j4(),tt()}}),hx={};rt(hx,{stashListTask:()=>W4});function W4(e={},t){let r=E_(e),n=[\"stash\",\"list\",...r.commands,...t],i=b_(r.splitter,r.fields,fm(n));return Bu(n)||{commands:n,format:\"utf-8\",parser:i}}var q4=W({\"src/lib/tasks/stash-list.ts\"(){\"use strict\";Ml(),x_(),gm(),A_()}}),px={};rt(px,{addSubModuleTask:()=>Y4,initSubModuleTask:()=>X4,subModuleTask:()=>Uu,updateSubModuleTask:()=>Z4});function Y4(e,t){return Uu([\"add\",e,t])}function X4(e){return Uu([\"init\",...e])}function Uu(e){let t=[...e];return t[0]!==\"submodule\"&&t.unshift(\"submodule\"),Vt(t)}function Z4(e){return Uu([\"update\",...e])}var K4=W({\"src/lib/tasks/sub-module.ts\"(){\"use strict\";tt()}});function J4(e,t){let r=isNaN(e),n=isNaN(t);return r!==n?r?1:-1:r?mx(e,t):0}function mx(e,t){return e===t?0:e>t?1:-1}function Q4(e){return e.trim()}function Eu(e){return typeof e==\"string\"&&parseInt(e.replace(/^\\D+/g,\"\"),10)||0}var db,gx,e$=W({\"src/lib/responses/TagList.ts\"(){\"use strict\";db=class{constructor(e,t){this.all=e,this.latest=t}},gx=function(e,t=!1){let r=e.split(`\n`).map(Q4).filter(Boolean);t||r.sort(function(i,a){let s=i.split(\".\"),o=a.split(\".\");if(s.length===1||o.length===1)return J4(Eu(s[0]),Eu(o[0]));for(let c=0,l=Math.max(s.length,o.length);c<l;c++){let u=mx(Eu(s[c]),Eu(o[c]));if(u)return u}return 0});let n=t?r[0]:[...r].reverse().find(i=>i.indexOf(\".\")>=0);return new db(r,n)}}}),vx={};rt(vx,{addAnnotatedTagTask:()=>n$,addTagTask:()=>r$,tagListTask:()=>t$});function t$(e=[]){let t=e.some(r=>/^--sort=/.test(r));return{format:\"utf-8\",commands:[\"tag\",\"-l\",...e],parser(r){return gx(r,t)}}}function r$(e){return{format:\"utf-8\",commands:[\"tag\",e],parser(){return{name:e}}}}function n$(e,t){return{format:\"utf-8\",commands:[\"tag\",\"-a\",\"-m\",t,e],parser(){return{name:e}}}}var i$=W({\"src/lib/tasks/tag.ts\"(){\"use strict\";e$()}}),a$=xI({\"src/git.js\"(e,t){\"use strict\";var{GitExecutor:r}=(oF(),Ke(u_)),{SimpleGitApi:n}=(a4(),Ke(z_)),{Scheduler:i}=(s4(),Ke(V_)),{configurationErrorTask:a}=(tt(),Ke(Up)),{asArray:s,filterArray:o,filterPrimitives:c,filterString:l,filterStringOrStringArray:u,filterType:f,getTrailingOptions:d,trailingFunctionArgument:h,trailingOptionsArgument:p}=(oe(),Ke(Fb)),{applyPatchTask:m}=(l4(),Ke(Y_)),{branchTask:v,branchLocalTask:y,deleteBranchesTask:b,deleteBranchTask:x}=(w4(),Ke(ex)),{checkIgnoreTask:E}=(x4(),Ke(nx)),{checkIsRepoTask:_}=(Nb(),Ke($b)),{cloneTask:k,cloneMirrorTask:w}=(A4(),Ke(ix)),{cleanWithOptionsTask:A,isCleanOptionsArray:S}=(Xb(),Ke(qb)),{diffSummaryTask:T}=(gm(),Ke(S_)),{fetchTask:P}=(R4(),Ke(ox)),{moveTask:O}=(F4(),Ke(cx)),{pullTask:j}=(L4(),Ke(ux)),{pushTagsTask:D}=(N_(),Ke(D_)),{addRemoteTask:Q,getRemotesTask:de,listRemotesTask:ee,remoteTask:J,removeRemoteTask:Pe}=(V4(),Ke(dx)),{getResetMode:me,resetTask:F}=(o_(),Ke(i_)),{stashListTask:G}=(q4(),Ke(hx)),{addSubModuleTask:N,initSubModuleTask:Me,subModuleTask:Dt,updateSubModuleTask:_t}=(K4(),Ke(px)),{addAnnotatedTagTask:Ee,addTagTask:st,tagListTask:ot}=(i$(),Ke(vx)),{straightThroughBufferTask:Ct,straightThroughStringTask:$e}=(tt(),Ke(Up));function U(L,Y){this._plugins=Y,this._executor=new r(L.baseDir,new i(L.maxConcurrentProcesses),Y),this._trimmed=L.trimmed}(U.prototype=Object.create(n.prototype)).constructor=U,U.prototype.customBinary=function(L){return this._plugins.reconfigure(\"binary\",L),this},U.prototype.env=function(L,Y){return arguments.length===1&&typeof L==\"object\"?this._executor.env=L:(this._executor.env=this._executor.env||{})[L]=Y,this},U.prototype.stashList=function(L){return this._runTask(G(p(arguments)||{},o(L)&&L||[]),h(arguments))};function Le(L,Y,ye,De){return typeof ye!=\"string\"?a(`git.${L}() requires a string 'repoPath'`):Y(ye,f(De,l),d(arguments))}U.prototype.clone=function(){return this._runTask(Le(\"clone\",k,...arguments),h(arguments))},U.prototype.mirror=function(){return this._runTask(Le(\"mirror\",w,...arguments),h(arguments))},U.prototype.mv=function(L,Y){return this._runTask(O(L,Y),h(arguments))},U.prototype.checkoutLatestTag=function(L){var Y=this;return this.pull(function(){Y.tags(function(ye,De){Y.checkout(De.latest,L)})})},U.prototype.pull=function(L,Y,ye,De){return this._runTask(j(f(L,l),f(Y,l),d(arguments)),h(arguments))},U.prototype.fetch=function(L,Y){return this._runTask(P(f(L,l),f(Y,l),d(arguments)),h(arguments))},U.prototype.silent=function(L){return console.warn(\"simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3\"),this},U.prototype.tags=function(L,Y){return this._runTask(ot(d(arguments)),h(arguments))},U.prototype.rebase=function(){return this._runTask($e([\"rebase\",...d(arguments)]),h(arguments))},U.prototype.reset=function(L){return this._runTask(F(me(L),d(arguments)),h(arguments))},U.prototype.revert=function(L){let Y=h(arguments);return typeof L!=\"string\"?this._runTask(a(\"Commit must be a string\"),Y):this._runTask($e([\"revert\",...d(arguments,0,!0),L]),Y)},U.prototype.addTag=function(L){let Y=typeof L==\"string\"?st(L):a(\"Git.addTag requires a tag name\");return this._runTask(Y,h(arguments))},U.prototype.addAnnotatedTag=function(L,Y){return this._runTask(Ee(L,Y),h(arguments))},U.prototype.deleteLocalBranch=function(L,Y,ye){return this._runTask(x(L,typeof Y==\"boolean\"?Y:!1),h(arguments))},U.prototype.deleteLocalBranches=function(L,Y,ye){return this._runTask(b(L,typeof Y==\"boolean\"?Y:!1),h(arguments))},U.prototype.branch=function(L,Y){return this._runTask(v(d(arguments)),h(arguments))},U.prototype.branchLocal=function(L){return this._runTask(y(),h(arguments))},U.prototype.raw=function(L){let Y=!Array.isArray(L),ye=[].slice.call(Y?arguments:L,0);for(let vt=0;vt<ye.length&&Y;vt++)if(!c(ye[vt])){ye.splice(vt,ye.length-vt);break}ye.push(...d(arguments,0,!0));var De=h(arguments);return ye.length?this._runTask($e(ye,this._trimmed),De):this._runTask(a(\"Raw: must supply one or more command to execute\"),De)},U.prototype.submoduleAdd=function(L,Y,ye){return this._runTask(N(L,Y),h(arguments))},U.prototype.submoduleUpdate=function(L,Y){return this._runTask(_t(d(arguments,!0)),h(arguments))},U.prototype.submoduleInit=function(L,Y){return this._runTask(Me(d(arguments,!0)),h(arguments))},U.prototype.subModule=function(L,Y){return this._runTask(Dt(d(arguments)),h(arguments))},U.prototype.listRemote=function(){return this._runTask(ee(d(arguments)),h(arguments))},U.prototype.addRemote=function(L,Y,ye){return this._runTask(Q(L,Y,d(arguments)),h(arguments))},U.prototype.removeRemote=function(L,Y){return this._runTask(Pe(L),h(arguments))},U.prototype.getRemotes=function(L,Y){return this._runTask(de(L===!0),h(arguments))},U.prototype.remote=function(L,Y){return this._runTask(J(d(arguments)),h(arguments))},U.prototype.tag=function(L,Y){let ye=d(arguments);return ye[0]!==\"tag\"&&ye.unshift(\"tag\"),this._runTask($e(ye),h(arguments))},U.prototype.updateServerInfo=function(L){return this._runTask($e([\"update-server-info\"]),h(arguments))},U.prototype.pushTags=function(L,Y){let ye=D({remote:f(L,l)},d(arguments));return this._runTask(ye,h(arguments))},U.prototype.rm=function(L){return this._runTask($e([\"rm\",\"-f\",...s(L)]),h(arguments))},U.prototype.rmKeepLocal=function(L){return this._runTask($e([\"rm\",\"--cached\",...s(L)]),h(arguments))},U.prototype.catFile=function(L,Y){return this._catFile(\"utf-8\",arguments)},U.prototype.binaryCatFile=function(){return this._catFile(\"buffer\",arguments)},U.prototype._catFile=function(L,Y){var ye=h(Y),De=[\"cat-file\"],vt=Y[0];if(typeof vt==\"string\")return this._runTask(a(\"Git.catFile: options must be supplied as an array of strings\"),ye);Array.isArray(vt)&&De.push.apply(De,vt);let za=L===\"buffer\"?Ct(De):$e(De);return this._runTask(za,ye)},U.prototype.diff=function(L,Y){let ye=l(L)?a(\"git.diff: supplying options as a single string is no longer supported, switch to an array of strings\"):$e([\"diff\",...d(arguments)]);return this._runTask(ye,h(arguments))},U.prototype.diffSummary=function(){return this._runTask(T(d(arguments,1)),h(arguments))},U.prototype.applyPatch=function(L){let Y=u(L)?m(s(L),d([].slice.call(arguments,1))):a(\"git.applyPatch requires one or more string patches as the first argument\");return this._runTask(Y,h(arguments))},U.prototype.revparse=function(){let L=[\"rev-parse\",...d(arguments,!0)];return this._runTask($e(L,!0),h(arguments))},U.prototype.clean=function(L,Y,ye){let De=S(L),vt=De&&L.join(\"\")||f(L,l)||\"\",za=d([].slice.call(arguments,De?1:0));return this._runTask(A(vt,za),h(arguments))},U.prototype.exec=function(L){let Y={commands:[],format:\"utf-8\",parser(){typeof L==\"function\"&&L()}};return this._runTask(Y)},U.prototype.clearQueue=function(){return this},U.prototype.checkIgnore=function(L,Y){return this._runTask(E(s(f(L,u,[]))),h(arguments))},U.prototype.checkIsRepo=function(L,Y){return this._runTask(_(f(L,l)),h(arguments))},t.exports=U}});kl();Ei();var s$=class extends wr{constructor(e,t){super(void 0,t),this.config=e}};Ei();Ei();var Vn=class extends wr{constructor(e,t,r){super(e,r),this.task=e,this.plugin=t,Object.setPrototypeOf(this,new.target.prototype)}};Rs();wb();Nb();Xb();Jb();e_();n_();o_();function o$(e){return e?[{type:\"spawn.before\",action(n,i){e.aborted&&i.kill(new Vn(void 0,\"abort\",\"Abort already signaled\"))}},{type:\"spawn.after\",action(n,i){function a(){i.kill(new Vn(void 0,\"abort\",\"Abort signal received\"))}e.addEventListener(\"abort\",a),i.spawned.on(\"close\",()=>e.removeEventListener(\"abort\",a))}}]:void 0}function l$(e){return typeof e==\"string\"&&e.trim().toLowerCase()===\"-c\"}function c$(e,t){if(l$(e)&&/^\\s*protocol(.[a-z]+)?.allow/.test(t))throw new Vn(void 0,\"unsafe\",\"Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol\")}function u$(e,t){if(/^\\s*--(upload|receive)-pack/.test(e))throw new Vn(void 0,\"unsafe\",\"Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack\");if(t===\"clone\"&&/^\\s*-u\\b/.test(e))throw new Vn(void 0,\"unsafe\",\"Use of clone with option -u is not permitted without enabling allowUnsafePack\");if(t===\"push\"&&/^\\s*--exec\\b/.test(e))throw new Vn(void 0,\"unsafe\",\"Use of push with option --exec is not permitted without enabling allowUnsafePack\")}function f$({allowUnsafeProtocolOverride:e=!1,allowUnsafePack:t=!1}={}){return{type:\"spawn.args\",action(r,n){return r.forEach((i,a)=>{let s=a<r.length?r[a+1]:\"\";e||c$(i,s),t||u$(i,n.method)}),r}}}oe();function d$(e){let t=Sl(e,\"-c\");return{type:\"spawn.args\",action(r){return[...t,...r]}}}oe();var hb=(0,Cs.deferred)().promise;function h$({onClose:e=!0,onExit:t=50}={}){function r(){let i=-1,a={close:(0,Cs.deferred)(),closeTimeout:(0,Cs.deferred)(),exit:(0,Cs.deferred)(),exitTimeout:(0,Cs.deferred)()},s=Promise.race([e===!1?hb:a.closeTimeout.promise,t===!1?hb:a.exitTimeout.promise]);return n(e,a.close,a.closeTimeout),n(t,a.exit,a.exitTimeout),{close(o){i=o,a.close.done()},exit(o){i=o,a.exit.done()},get exitCode(){return i},result:s}}function n(i,a,s){i!==!1&&(i===!0?a.promise:a.promise.then(()=>Dp(i))).then(s.done)}return{type:\"spawn.after\",action(i,a){return _l(this,arguments,function*(s,{spawned:o,close:c}){var l,u;let f=r(),d=!0,h=()=>void(d=!1);(l=o.stdout)==null||l.on(\"data\",h),(u=o.stderr)==null||u.on(\"data\",h),o.on(\"error\",h),o.on(\"close\",p=>f.close(p)),o.on(\"exit\",p=>f.exit(p));try{yield f.result,d&&(yield Dp(50)),c(f.exitCode)}catch(p){c(f.exitCode,p)}})}}}oe();var p$=\"Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings\",pb=\"Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option\";function m$(e){return!e||!/^([a-z]:)?([a-z0-9/.\\\\_-]+)$/i.test(e)}function mb(e,t){if(e.length<1||e.length>2)throw new Vn(void 0,\"binary\",p$);if(e.some(m$))if(t)console.warn(pb);else throw new Vn(void 0,\"binary\",pb);let[n,i]=e;return{binary:n,prefix:i}}function g$(e,t=[\"git\"],r=!1){let n=mb(xn(t),r);e.on(\"binary\",i=>{n=mb(xn(i),r)}),e.append(\"spawn.binary\",()=>n.binary),e.append(\"spawn.args\",i=>n.prefix?[n.prefix,...i]:i)}Ei();function v$(e){return!!(e.exitCode&&e.stdErr.length)}function y$(e){return Buffer.concat([...e.stdOut,...e.stdErr])}function w$(e=!1,t=v$,r=y$){return(n,i)=>!e&&n||!t(i)?n:r(i)}function gb(e){return{type:\"task.error\",action(t,r){let n=e(t.error,{stdErr:r.stdErr,stdOut:r.stdOut,exitCode:r.exitCode});return Buffer.isBuffer(n)?{error:new wr(void 0,n.toString(\"utf-8\"))}:{error:n}}}}oe();var b$=class{constructor(){this.plugins=new Set,this.events=new yx.EventEmitter}on(e,t){this.events.on(e,t)}reconfigure(e,t){this.events.emit(e,t)}append(e,t){let r=ke(this.plugins,{type:e,action:t});return()=>this.plugins.delete(r)}add(e){let t=[];return xn(e).forEach(r=>r&&this.plugins.add(ke(t,r))),()=>{t.forEach(r=>this.plugins.delete(r))}}exec(e,t,r){let n=t,i=Object.freeze(Object.create(r));for(let a of this.plugins)a.type===e&&(n=a.action(n,i));return n}};oe();function _$(e){let t=\"--progress\",r=[\"checkout\",\"clone\",\"fetch\",\"pull\",\"push\"];return[{type:\"spawn.args\",action(a,s){return r.includes(s.method)?Ab(a,t):a}},{type:\"spawn.after\",action(a,s){var o;s.commands.includes(t)&&((o=s.spawned.stderr)==null||o.on(\"data\",c=>{let l=/^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(c.toString(\"utf8\"));l&&e({method:s.method,stage:x$(l[1]),progress:Ie(l[2]),processed:Ie(l[3]),total:Ie(l[4])})}))}}]}function x$(e){return String(e.toLowerCase().split(\" \",1))||\"unknown\"}oe();function S$(e){let t=Cb(e,[\"uid\",\"gid\"]);return{type:\"spawn.options\",action(r){return Fr(Fr({},t),r)}}}function E$({block:e,stdErr:t=!0,stdOut:r=!0}){if(e>0)return{type:\"spawn.after\",action(n,i){var a,s;let o;function c(){o&&clearTimeout(o),o=setTimeout(u,e)}function l(){var f,d;(f=i.spawned.stdout)==null||f.off(\"data\",c),(d=i.spawned.stderr)==null||d.off(\"data\",c),i.spawned.off(\"exit\",l),i.spawned.off(\"close\",l),o&&clearTimeout(o)}function u(){l(),i.kill(new Vn(void 0,\"timeout\",\"block timeout reached\"))}r&&((a=i.spawned.stdout)==null||a.on(\"data\",c)),t&&((s=i.spawned.stderr)==null||s.on(\"data\",c)),i.spawned.on(\"exit\",l),i.spawned.on(\"close\",l),c()}}}kl();function A$(){return{type:\"spawn.args\",action(e){let t=[],r;function n(i){(r=r||[]).push(...i)}for(let i=0;i<e.length;i++){let a=e[i];if(Pu(a)){n(B2(a));continue}if(a===\"--\"){n(e.slice(i+1).flatMap(s=>Pu(s)&&B2(s)||s));break}t.push(a)}return r?[...t,\"--\",...r.map(String)]:t}}}oe();var k$=a$();function T$(e,t){var r;let n=new b$,i=Ob(e&&(typeof e==\"string\"?{baseDir:e}:e)||{},t);if(!Jp(i.baseDir))throw new s$(i,\"Cannot use simple-git on a directory that does not exist\");return Array.isArray(i.config)&&n.add(d$(i.config)),n.add(f$(i.unsafe)),n.add(A$()),n.add(h$(i.completion)),i.abort&&n.add(o$(i.abort)),i.progress&&n.add(_$(i.progress)),i.timeout&&n.add(E$(i.timeout)),i.spawnOptions&&n.add(S$(i.spawnOptions)),n.add(gb(w$(!0))),i.errors&&n.add(gb(i.errors)),g$(n,i.binary,(r=i.unsafe)==null?void 0:r.allowUnsafeCustomBinary),new k$(i,n)}Rs();var wx=T$;g();var bx=require(\"obsidian\"),Gu=\"YYYY-MM-DD\",bm=`${Gu} HH:mm`,_m=`${Gu} HH:mm:ss`,zu=40,Ms=\"conflict-files-obsidian-git.md\",ar={commitMessage:\"vault backup: {{date}}\",commitDateFormat:_m,autoSaveInterval:0,autoPushInterval:0,autoPullInterval:0,autoPullOnBoot:!1,disablePush:!1,pullBeforePush:!0,disablePopups:!1,disablePopupsForNoChanges:!1,listChangedFilesInMessageBody:!1,showStatusBar:!0,updateSubmodules:!1,syncMethod:\"merge\",customMessageOnAutoBackup:!1,autoBackupAfterFileChange:!1,treeStructure:!1,refreshSourceControl:bx.Platform.isDesktopApp,basePath:\"\",differentIntervalCommitAndPush:!1,changedFilesInStatusBar:!1,showedMobileNotice:!1,refreshSourceControlTimer:7e3,showBranchStatusBar:!0,setLastSaveToLastCommit:!1,submoduleRecurseCheckout:!1,gitDir:\"\",showFileMenu:!0,authorInHistoryView:\"hide\",dateInHistoryView:!1,diffStyle:\"split\",lineAuthor:{show:!1,followMovement:\"inactive\",authorDisplay:\"initials\",showCommitHash:!1,dateTimeFormatOptions:\"date\",dateTimeFormatCustomString:bm,dateTimeTimezone:\"viewer-local\",coloringMaxAge:\"1y\",colorNew:{r:255,g:150,b:150},colorOld:{r:120,g:160,b:255},textColorCss:\"var(--text-muted)\",ignoreWhitespace:!1,gutterSpacingFallbackLength:5}},St={type:\"git-view\",name:\"Source Control\",icon:\"git-pull-request\"},$r={type:\"git-history-view\",name:\"History\",icon:\"history\"},Ai={type:\"split-diff-view\",name:\"Diff view\",icon:\"diff\"},ki={type:\"diff-view\",name:\"Diff View\",icon:\"git-pull-request\"},Vu=\"C:\\\\Program Files\\\\Git\\\\cmd\\\\git.exe\",Wu=\"git_credentials_input\",Os=\"obsidian_askpass.sh\",_x=`#!/bin/sh\n\nPROMPT=\"$1\"\nTEMP_FILE=\"$OBSIDIAN_GIT_CREDENTIALS_INPUT\"\n\ncleanup() {\n    rm -f \"$TEMP_FILE\" \"$TEMP_FILE.response\"\n}\ntrap cleanup EXIT\n\necho \"$PROMPT\" > \"$TEMP_FILE\"\n\nwhile [ ! -e \"$TEMP_FILE.response\" ]; do\n    if [ ! -e \"$TEMP_FILE\" ]; then\n        echo \"Trigger file got removed: Abort\" >&2\n        exit 1\n    fi\n    sleep 0.1\ndone\n\nRESPONSE=$(cat \"$TEMP_FILE.response\")\n\necho \"$RESPONSE\"\n`,xx=[\"3dm\",\"3ds\",\"3g2\",\"3gp\",\"7z\",\"a\",\"aac\",\"adp\",\"afdesign\",\"afphoto\",\"afpub\",\"ai\",\"aif\",\"aiff\",\"alz\",\"ape\",\"apk\",\"appimage\",\"ar\",\"arj\",\"asf\",\"au\",\"avi\",\"bak\",\"baml\",\"bh\",\"bin\",\"bk\",\"bmp\",\"btif\",\"bz2\",\"bzip2\",\"cab\",\"caf\",\"cgm\",\"class\",\"cmx\",\"cpio\",\"cr2\",\"cur\",\"dat\",\"dcm\",\"deb\",\"dex\",\"djvu\",\"dll\",\"dmg\",\"dng\",\"doc\",\"docm\",\"docx\",\"dot\",\"dotm\",\"dra\",\"DS_Store\",\"dsk\",\"dts\",\"dtshd\",\"dvb\",\"dwg\",\"dxf\",\"ecelp4800\",\"ecelp7470\",\"ecelp9600\",\"egg\",\"eol\",\"eot\",\"epub\",\"exe\",\"f4v\",\"fbs\",\"fh\",\"fla\",\"flac\",\"flatpak\",\"fli\",\"flv\",\"fpx\",\"fst\",\"fvt\",\"g3\",\"gh\",\"gif\",\"graffle\",\"gz\",\"gzip\",\"h261\",\"h263\",\"h264\",\"icns\",\"ico\",\"ief\",\"img\",\"ipa\",\"iso\",\"jar\",\"jpeg\",\"jpg\",\"jpgv\",\"jpm\",\"jxr\",\"key\",\"ktx\",\"lha\",\"lib\",\"lvp\",\"lz\",\"lzh\",\"lzma\",\"lzo\",\"m3u\",\"m4a\",\"m4v\",\"mar\",\"mdi\",\"mht\",\"mid\",\"midi\",\"mj2\",\"mka\",\"mkv\",\"mmr\",\"mng\",\"mobi\",\"mov\",\"movie\",\"mp3\",\"mp4\",\"mp4a\",\"mpeg\",\"mpg\",\"mpga\",\"mxu\",\"nef\",\"npx\",\"numbers\",\"nupkg\",\"o\",\"odp\",\"ods\",\"odt\",\"oga\",\"ogg\",\"ogv\",\"otf\",\"ott\",\"pages\",\"pbm\",\"pcx\",\"pdb\",\"pdf\",\"pea\",\"pgm\",\"pic\",\"png\",\"pnm\",\"pot\",\"potm\",\"potx\",\"ppa\",\"ppam\",\"ppm\",\"pps\",\"ppsm\",\"ppsx\",\"ppt\",\"pptm\",\"pptx\",\"psd\",\"pya\",\"pyc\",\"pyo\",\"pyv\",\"qt\",\"rar\",\"ras\",\"raw\",\"resources\",\"rgb\",\"rip\",\"rlc\",\"rmf\",\"rmvb\",\"rpm\",\"rtf\",\"rz\",\"s3m\",\"s7z\",\"scpt\",\"sgi\",\"shar\",\"snap\",\"sil\",\"sketch\",\"slk\",\"smv\",\"snk\",\"so\",\"stl\",\"suo\",\"sub\",\"swf\",\"tar\",\"tbz\",\"tbz2\",\"tga\",\"tgz\",\"thmx\",\"tif\",\"tiff\",\"tlz\",\"ttc\",\"ttf\",\"txz\",\"udf\",\"uvh\",\"uvi\",\"uvm\",\"uvp\",\"uvs\",\"uvu\",\"viv\",\"vob\",\"war\",\"wav\",\"wax\",\"wbmp\",\"wdp\",\"weba\",\"webm\",\"webp\",\"whl\",\"wim\",\"wm\",\"wma\",\"wmv\",\"wmx\",\"woff\",\"woff2\",\"wrm\",\"wvx\",\"xbm\",\"xif\",\"xla\",\"xlam\",\"xls\",\"xlsb\",\"xlsm\",\"xlsx\",\"xlt\",\"xltm\",\"xltx\",\"xm\",\"xmind\",\"xpi\",\"xpm\",\"xwd\",\"xz\",\"z\",\"zip\",\"zipx\"];g();var Sx=require(\"obsidian\"),C$={options:[],placeholder:\"\",allowEmpty:!1,onlySelection:!1,initialValue:void 0},Fe=class extends Sx.SuggestModal{constructor(t,r){super(t.app),this.config={...C$,...r},this.setPlaceholder(this.config.placeholder)}openAndGetResult(){return new Promise(t=>{this.resolve=t,this.open(),this.config.initialValue!=null&&(this.inputEl.value=this.config.initialValue,this.inputEl.dispatchEvent(new Event(\"input\")))})}onClose(){new Promise(t=>setTimeout(t,10)).then(()=>{this.resolve&&this.resolve(void 0)})}getSuggestions(t){return this.config.onlySelection?this.config.options:this.config.allowEmpty?[t.length>0?t:\" \",...this.config.options]:[t.length>0?t:\"...\",...this.config.options]}renderSuggestion(t,r){r.setText(t)}onChooseSuggestion(t,r){if(this.resolve){let n;this.config.allowEmpty&&t===\" \"?n=\"\":t===\"...\"?n=void 0:n=t,this.resolve(n)}}};g();function Ex(e,t){let r=Object.assign({},e.lineAuthor,t.lineAuthor);return Object.assign({},e,t,{lineAuthor:r})}var Is=class extends Error{constructor(r){super(\"No network connection available\");this.originalError=r}};g();var sT=ze(Ux()),oT=ze(aT()),ba=require(\"obsidian\");var Ug=(e,t)=>e===\".\"||t==null||t.length===0||t===\".\"?!0:t.length>=e.length?t.startsWith(e):e.startsWith(t);function rn(e,t){let r;if(t){if(t.button===0||t.button===1){let n=ba.Keymap.isModEvent(t);r=e.workspace.getLeaf(n)}}else r=e.workspace.getLeaf(!1);return r}function kn(e,t,r,n,i){if(t.button==2){let a=e.vault.getAbstractFileByPath(r);if(a!=null){let s=new ba.Menu;e.workspace.trigger(\"file-menu\",s,a,i,n),s.showAtPosition({x:t.pageX,y:t.pageY})}else{let s=new ba.Menu;e.workspace.trigger(\"obsidian-git:menu\",s,r,i,n),s.showAtPosition({x:t.pageX,y:t.pageY})}}}function Oi(e){throw new Error(\"Impossible branch: \"+e)}function Gg(e){return`rgb(${e.r},${e.g},${e.b})`}function lT(e){var a;let t=(a=sT.fromString(e))==null?void 0:a.toRgbaArray();if(t===void 0)return;let[r,n,i]=t;return{r,g:n,b:i}}function cT(e){return e.diff(ba.moment.unix(0),\"seconds\")}function uT(e){if(e.length!==0)return e.slice().sort()[Math.floor(e.length/2)]}function fT(e,t){return(0,oT.default)(e,t,{strict:!0})}function zl(e,t){return new Proxy(e,{get(r,n){return n===\"length\"?Math.min(t,r.length):r[n]}})}function dT(e,t,r){return e.length<=t?new Array(t-e.length).fill(r).join(\"\")+e:e.substring(e.length-t)}function hT(e,t){if(t<=0)return e;let r=new Array(t).fill(\" \").join(\"\"),n=e.substring(t,e.length);return r+n}function zg(e,t,r){return e<=t&&t<=r}function Ii(e){let[t,...r]=e.split(\"/\");return[t,r.length===0?void 0:r.join(\"/\")]}function Tn(e){return e.endsWith(\"/\")?e:e.split(\"/\").last().replace(/\\.md$/,\"\")}function pT(e){return e===1?\"1 minute\":`${e} minutes`}function Rj(e){let t=e.lastIndexOf(\".\");return e.substring(t+1)}function zs(e){if(e.endsWith(\".md\"))return!1;let t=Rj(e);return xx.includes(t)}function Vg(e){return(e.startsWith(\"https://github.com/\")||e.startsWith(\"https://gitlab.com/\"))&&(e.endsWith(\".git\")||(e=e+\".git\")),e}g();var mT=require(\"obsidian\"),Vs=class{constructor(t){this.plugin=t,this.app=t.app}getRelativeVaultPath(t){return this.plugin.settings.basePath?this.plugin.settings.basePath+\"/\"+t:t}getRelativeRepoPath(t,r=!0){return r&&this.plugin.settings.basePath.length>0?t.substring(this.plugin.settings.basePath.length+1):t}unload(){}_getTreeStructure(t,r=0){let n=[];for(t=[...t];t.length>0;){let i=t.first(),a=i.path.substring(r);if(a.contains(\"/\")){let s=a.substring(0,a.indexOf(\"/\")),o=t.filter(l=>l.path.substring(r).startsWith(s+\"/\"));o.forEach(l=>t.remove(l));let c=i.path.substring(0,a.indexOf(\"/\")+r);n.push({title:s,path:c,vaultPath:this.getRelativeVaultPath(c),children:this._getTreeStructure(o,(r>0?r+s.length:s.length)+1)})}else n.push({title:a,data:i,path:i.path,vaultPath:this.getRelativeVaultPath(i.path)}),t.remove(i)}return n}simplify(t){var r,n,i,a;for(let s of t){for(;;){let o=((r=s.children)==null?void 0:r.length)==1,c=((i=(n=s.children)==null?void 0:n.first())==null?void 0:i.data)==null;if(!(s.children!=null&&o&&c))break;let l=s.children.first();s.title+=\"/\"+l.title,s.data=l.data,s.path=l.path,s.vaultPath=l.vaultPath,s.children=l.children}s.children!=null&&this.simplify(s.children),(a=s.children)==null||a.sort((o,c)=>{let l=(c.data==null?1:0)-(o.data==null?1:0);return l!=0?l:o.title.localeCompare(c.title)})}return t.sort((s,o)=>{let c=(o.data==null?1:0)-(s.data==null?1:0);return c!=0?c:s.title.localeCompare(o.title)})}getTreeStructure(t){let r=this._getTreeStructure(t);return this.simplify(r)}async formatCommitMessage(t){let r;if(t.includes(\"{{numFiles}}\")){r=await this.status();let n=r.staged.length;t=t.replace(\"{{numFiles}}\",String(n))}if(t.includes(\"{{hostname}}\")){let n=this.plugin.localStorage.getHostname()||\"\";t=t.replace(\"{{hostname}}\",n)}if(t.includes(\"{{files}}\")){r=r!=null?r:await this.status();let n={},i=\"\";if(r.staged.length<100){r.staged.forEach(s=>{s.index in n?n[s.index].push(s.path):n[s.index]=[s.path]});let a=[];for(let[s,o]of Object.entries(n))a.push(s+\" \"+o.join(\" \"));i=a.join(\", \")}else i=\"Too many files to list\";t=t.replace(\"{{files}}\",i)}if(t=t.replace(\"{{date}}\",(0,mT.moment)().format(this.plugin.settings.commitDateFormat)),this.plugin.settings.listChangedFilesInMessageBody){let n=r!=null?r:await this.status(),i=\"\";n.staged.length<100?i=n.staged.map(a=>a.path).join(`\n`):i=\"Too many files to list\",t=t+`\n\nAffected files:\n`+i}return t}};var Te=class extends Vs{constructor(r){super(r);this.useDefaultWindowsGitPath=!1}async setGitInstance(r=!1){if(this.isGitInstalled()){let n=this.app.vault.adapter,i=n.getBasePath(),a=i;this.plugin.settings.basePath&&(await n.exists((0,Xn.normalizePath)(this.plugin.settings.basePath))?a=Be.join(i,this.plugin.settings.basePath):r||new Xn.Notice(\"ObsidianGit: Base path does not exist\")),this.absoluteRepoPath=a,this.git=wx({baseDir:a,binary:this.plugin.localStorage.getGitPath()||(this.useDefaultWindowsGitPath?Vu:void 0),config:[\"core.quotepath=off\"],unsafe:{allowUnsafeCustomBinary:!0}});let s=this.plugin.localStorage.getPATHPaths(),o=this.plugin.localStorage.getEnvVars(),c=this.plugin.settings.gitDir;if(s.length>0){let f=process.env.PATH+\":\"+s.join(\":\");process.env.PATH=f}c&&(process.env.GIT_DIR=c);for(let f of o){let[d,h]=f.split(\"=\");process.env[d]=h}if(yT.default.enable(\"simple-git\"),await this.git.checkIsRepo()){let f=await this.git.revparse(\"--show-cdup\"),d=(0,Vl.resolve)(a+Vl.sep+f);this.absoluteRepoPath=d,await this.git.cwd(d)}let l=Be.join(i,this.app.vault.configDir,\"plugins\",\"obsidian-git\"),u=Be.join(l,Os);process.env.SSH_ASKPASS==null&&(process.env.SSH_ASKPASS=u),process.env.OBSIDIAN_GIT_CREDENTIALS_INPUT=Be.join(l,Wu),process.env.SSH_ASKPASS==u&&this.askpass().catch(f=>this.plugin.displayError(f))}}getRelativeVaultPath(r){let i=this.app.vault.adapter.getBasePath(),a=Be.join(this.absoluteRepoPath,r),s=Be.relative(i,a);return Xn.Platform.isWin&&(s=s.replace(/\\\\/g,\"/\")),s}getRelativeRepoPath(r,n=!0){if(n){let a=this.plugin.app.vault.adapter.getBasePath(),s=this.absoluteRepoPath,o=Be.join(a,r),c=Be.relative(s,o);return Xn.Platform.isWin&&(c=c.replace(/\\\\/g,\"/\")),c}return r}async askpass(){let r=this.app.vault.adapter,n=r.getBasePath(),i=Be.join(n,this.app.vault.configDir,\"plugins\",\"obsidian-git\"),a=this.app.vault.configDir+\"/plugins/obsidian-git/\";await Zn.writeFile(Be.join(i,Os),_x),await Zn.chmod(Be.join(i,Os),493),this.watchAbortController=new AbortController;let{signal:s}=this.watchAbortController;try{let o=Zn.watch(i,{signal:s});for await(let c of o){if(c.filename!=Wu)continue;let l=a+Wu;if(!await r.exists(l))continue;let u=await r.read(l),f;u.length>60&&(f=new Xn.Notice(u,999999));let d=await new Fe(this.plugin,{allowEmpty:!0,placeholder:u.length>60?\"Enter a response to the message.\":u}).openAndGetResult();f==null||f.hide(),await r.exists(l)&&await r.write(`${l}.response`,d!=null?d:\"\")}}catch(o){this.plugin.displayError(o),await Zn.rm(Be.join(i,Os),{force:!0}),await Zn.rm(Be.join(i,`${Os}.response`),{force:!0}),await new Promise(c=>setTimeout(c,5e3)),this.plugin.log(\"Retry watch for ask pass\"),await this.askpass()}}unload(){var r;(r=this.watchAbortController)==null||r.abort()}async status(){this.plugin.setPluginState({gitAction:1});let r=await this.git.status();this.plugin.setPluginState({gitAction:0});let n=r.files.map(i=>{let a=this.formatPath(i);return{path:a.path,from:a.from,index:i.index===\"?\"?\"U\":i.index,workingDir:i.working_dir===\"?\"?\"U\":i.working_dir,vaultPath:this.getRelativeVaultPath(a.path)}});return{all:n,changed:n.filter(i=>i.workingDir!==\" \"),staged:n.filter(i=>i.index!==\" \"&&i.index!=\"U\"),conflicted:r.conflicted.map(i=>this.formatPath({path:i}).path)}}async submoduleAwareHeadRevisonInContainingDirectory(r){let n=this.getRelativeRepoPath(r),a=[\"-C\",Be.dirname(n),\"rev-parse\",\"HEAD\"],s=this.git.raw(a);return s.catch(o=>console.warn(\"obsidian-git: rev-parse error:\",o)),s}async getSubmodulePaths(){return new Promise(r=>{this.git.outputHandler((n,i,a,s)=>{if(!(s.contains(\"submodule\")&&s.contains(\"foreach\")))return;let o=\"\",c=this.app.vault.adapter.getBasePath()+(this.plugin.settings.basePath?\"/\"+this.plugin.settings.basePath:\"\");i.on(\"data\",l=>{o+=l.toString(\"utf8\")}),i.on(\"end\",()=>{let u=o.split(`\n`).map(f=>{let d=f.match(/'([^']*)'/);if(d!=null)return c+\"/\"+d[1]+Vl.sep}).filter(f=>!!f);u.reverse(),r(u)})}),this.git.subModule([\"foreach\",\"--recursive\",\"\"]).then(()=>{this.git.outputHandler(()=>{})},n=>this.plugin.displayError(n))})}formatPath(r,n=!1){function i(a){if(a!=null)return a.startsWith('\"')&&a.endsWith('\"')?a.substring(1,a.length-1):a}return n?{from:i(r.from),path:i(r.path)}:{path:i(r.path)}}async blame(r,n,i){if(r=this.getRelativeRepoPath(r),!await this.isTracked(r))return\"untracked\";let a=await this.getSubmoduleOfFile(r),s=a?[\"-C\",a.submodule]:[],o=a?a.relativeFilepath:r;s.push(\"blame\",\"--porcelain\"),i&&s.push(\"-w\");let c=`-C${zu}`;switch(n){case\"inactive\":break;case\"same-commit\":s.push(\"-C\",c);break;case\"all-commits\":s.push(\"-C\",\"-C\",c);break;default:Oi(n)}s.push(\"--\",o);let l=await this.git.raw(s);return Mj(l)}async isTracked(r){let n=await this.getSubmoduleOfFile(r),i=n?[\"-C\",n.submodule]:[],a=n?n.relativeFilepath:r;return i.push(\"ls-files\",\"--\",a),this.git.raw(i).then(s=>s.trim()!==\"\")}async commitAll({message:r}){if(this.plugin.settings.updateSubmodules){this.plugin.setPluginState({gitAction:4});let i=await this.getSubmodulePaths();for(let a of i)await this.git.cwd({path:a,root:!1}).add(\"-A\"),await this.git.cwd({path:a,root:!1}).commit(await this.formatCommitMessage(r))}this.plugin.setPluginState({gitAction:3}),await this.git.add(\"-A\"),this.plugin.setPluginState({gitAction:4});let n=await this.git.commit(await this.formatCommitMessage(r));return this.app.workspace.trigger(\"obsidian-git:head-change\"),n.summary.changes}async commit({message:r,amend:n}){this.plugin.setPluginState({gitAction:4});let i=(await this.git.commit(await this.formatCommitMessage(r),n?[\"--amend\"]:[])).summary.changes;return this.app.workspace.trigger(\"obsidian-git:head-change\"),this.plugin.setPluginState({gitAction:0}),i}async stage(r,n){this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.git.add([\"--\",r]),this.plugin.setPluginState({gitAction:0})}async stageAll({dir:r}){this.plugin.setPluginState({gitAction:3}),await this.git.add(r!=null?r:\"-A\"),this.plugin.setPluginState({gitAction:0})}async unstageAll({dir:r}){this.plugin.setPluginState({gitAction:3}),await this.git.reset(r!=null?[\"--\",r]:[]),this.plugin.setPluginState({gitAction:0})}async unstage(r,n){this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.git.reset([\"--\",r]),this.plugin.setPluginState({gitAction:0})}async discard(r){this.plugin.setPluginState({gitAction:3}),await this.isTracked(r)?await this.git.checkout([\"--\",r]):await this.app.vault.adapter.rmdir(this.getRelativeVaultPath(r),!0),this.plugin.setPluginState({gitAction:0})}async hashObject(r){r=this.getRelativeRepoPath(r);let n=await this.getSubmoduleOfFile(r),i=n?[\"-C\",n.submodule]:[],a=n?n.relativeFilepath:r;return i.push(\"hash-object\",\"--\",a),this.git.raw(i)}async discardAll({dir:r}){return this.discard(r!=null?r:\".\")}async pull(){this.plugin.setPluginState({gitAction:2});try{this.plugin.settings.updateSubmodules&&await this.git.subModule([\"update\",\"--remote\",\"--merge\",\"--recursive\"]);let r=await this.branchInfo(),n=await this.git.revparse([r.current]);if(!r.tracking&&this.plugin.settings.updateSubmodules){this.plugin.log(\"No tracking branch found. Ignoring pull of main repo and updating submodules only.\");return}await this.git.fetch();let i=await this.git.revparse([r.tracking]);if(n!==i){if(this.plugin.settings.syncMethod===\"merge\"||this.plugin.settings.syncMethod===\"rebase\")try{switch(this.plugin.settings.syncMethod){case\"merge\":await this.git.merge([r.tracking]);break;case\"rebase\":await this.git.rebase([r.tracking])}}catch(o){this.plugin.displayError(`Pull failed (${this.plugin.settings.syncMethod}): ${\"message\"in o?o.message:o}`);return}else if(this.plugin.settings.syncMethod===\"reset\")try{await this.git.raw([\"update-ref\",`refs/heads/${r.current}`,i]),await this.unstageAll({})}catch(o){this.plugin.displayError(`Sync failed (${this.plugin.settings.syncMethod}): ${\"message\"in o?o.message:o}`)}this.app.workspace.trigger(\"obsidian-git:head-change\");let a=await this.git.revparse([r.current]);return(await this.git.diff([`${n}..${a}`,\"--name-only\"])).split(/\\r\\n|\\r|\\n/).filter(o=>o.length>0).map(o=>({path:o,workingDir:\"P\",vaultPath:this.getRelativeVaultPath(o)}))}else return[]}catch(r){this.convertErrors(r)}}async push(){this.plugin.setPluginState({gitAction:5});try{if(this.plugin.settings.updateSubmodules){let s=await this.git.env({...process.env,OBSIDIAN_GIT:1}).subModule([\"foreach\",\"--recursive\",`tracking=$(git for-each-ref --format='%(upstream:short)' \"$(git symbolic-ref -q HEAD)\"); echo $tracking; if [ ! -z \"$(git diff --shortstat $tracking)\" ]; then git push; fi`]);console.log(s)}let r=await this.git.status(),n=r.tracking,i=r.current;if(!n&&this.plugin.settings.updateSubmodules){this.plugin.log(\"No tracking branch found. Ignoring push of main repo and updating submodules only.\");return}let a=(await this.git.diffSummary([i,n,\"--\"])).changed;return await this.git.env({...process.env,OBSIDIAN_GIT:1}).push(),a}catch(r){this.convertErrors(r)}}async getUnpushedCommits(){let r=await this.git.status(),n=r.tracking,i=r.current;return n==null||i==null?0:(await this.git.diffSummary([i,n,\"--\"])).changed}async canPush(){if(this.plugin.settings.updateSubmodules===!0)return!0;let r=await this.git.status(),n=r.tracking,i=r.current;return n?(await this.git.diffSummary([i,n,\"--\"])).changed!==0:!1}async checkRequirements(){return this.isGitInstalled()?await this.git.checkIsRepo()?\"valid\":\"missing-repo\":\"missing-git\"}async branchInfo(){let r=await this.git.status(),n=await this.git.branch([\"--no-color\"]);return{current:r.current||void 0,tracking:r.tracking||void 0,branches:n.all}}async getRemoteUrl(r){try{return await this.git.remote([\"get-url\",r])||void 0}catch(n){if(String(n).contains(r))return;throw n}}async log(r,n=!0,i,a){let s;r&&(s=this.getRelativeRepoPath(r,n));let o={file:s,maxCount:i,\"--diff-merges\":\"first-parent\",\"--name-status\":null};return a&&(o[a]=null),(await this.git.log(o)).all.map(l=>{var u,f,d,h;return{...l,author:{name:l.author_name,email:l.author_email},refs:l.refs.split(\", \").filter(p=>p.length>0),diff:{...l.diff,files:(f=(u=l.diff)==null?void 0:u.files.map(p=>({...p,status:p.status,path:p.file,hash:l.hash,vaultPath:this.getRelativeVaultPath(p.file),fromPath:p.from,fromVaultPath:p.from!=null?this.getRelativeVaultPath(p.from):void 0,binary:p.binary})))!=null?f:[]},fileName:(h=(d=l.diff)==null?void 0:d.files.first())==null?void 0:h.file}})}async show(r,n,i=!0){let a=this.getRelativeRepoPath(n,i);return this.git.show([r+\":\"+a])}async checkout(r,n){if(n&&(r=`${n}/${r}`),await this.git.checkout(r),this.plugin.settings.submoduleRecurseCheckout){let i=await this.getSubmodulePaths();for(let a of i){let s=await this.git.cwd({path:a,root:!1}).branch();Object.keys(s.branches).includes(r)&&await this.git.cwd({path:a,root:!1}).checkout(r)}}}async createBranch(r){await this.git.checkout([\"-b\",r])}async deleteBranch(r,n){await this.git.branch([n?\"-D\":\"-d\",r])}async branchIsMerged(r){return!(await this.git.branch([\"--no-merged\"])).all.contains(r)}async init(){await this.git.init(!1)}async clone(r,n,i){await this.git.clone(r,Be.join(this.app.vault.adapter.getBasePath(),n),i?[\"--depth\",`${i}`]:[])}async setConfig(r,n){n==null?await this.git.raw([\"config\",\"--local\",\"--unset\",r]):await this.git.addConfig(r,n)}async getConfig(r){let i=(await this.git.listConfig(\"local\")).all[r];if(typeof i==\"string\"||i==null)return i;throw new Error(\"Config value is not a string\")}async fetch(r){await this.git.fetch(r!=null?[r]:[])}async setRemote(r,n){(await this.getRemotes()).includes(r)?await this.git.remote([\"set-url\",r,n]):await this.git.remote([\"add\",r,n])}async getRemoteBranches(r){let n=await this.git.branch([\"-r\",\"--list\",`${r}*`]),i=[];for(let a in n.branches)i.push(n.branches[a].name);return i}async getRemotes(){let r=await this.git.remote([]);return r?r.trim().split(`\n`):[]}async removeRemote(r){await this.git.removeRemote(r)}async updateUpstreamBranch(r){try{await this.git.branch([\"--set-upstream-to\",r])}catch(n){try{await this.git.branch([\"--set-upstream\",r])}catch(i){await this.git.push([\"--set-upstream\",...Ii(r)])}}}updateGitPath(r){return this.setGitInstance()}updateBasePath(r){return this.setGitInstance(!0)}async getDiffString(r,n=!1,i){return n?await this.git.diff([\"--cached\",\"--\",r]):i?await this.git.show([`${i}`,\"--\",r]):await this.git.diff([\"--\",r])}async diff(r,n,i){return await this.git.diff([`${n}..${i}`,\"--\",r])}async rawCommand(r){let n=r.split(\" \");return await this.git.raw(n[0],...n.slice(1))}async getSubmoduleOfFile(r){if(!await this.app.vault.adapter.exists(Be.dirname(r)))return;let n=await this.git.raw([\"-C\",Be.dirname(r),\"rev-parse\",\"--show-toplevel\"],c=>c&&console.warn(\"get-submodule-of-file\",c==null?void 0:c.message));if(n=n.trim(),(await this.git.raw([\"-C\",Be.dirname(r),\"rev-parse\",\"--show-superproject-working-tree\"],c=>c&&console.warn(\"get-submodule-of-file\",c==null?void 0:c.message))).trim()===\"\")return;let s=this.app.vault.adapter.getFullPath(Be.normalize(r)),o=Be.relative(n,s);return{submodule:n,relativeFilepath:o}}async getLastCommitTime(){let r=await this.git.log({n:1});if(r!=null&&r.latest!=null)return new Date(r.latest.date)}isGitInstalled(){let r=this.plugin.localStorage.getGitPath(),n=(0,qg.spawnSync)(r||\"git\",[\"--version\"],{stdio:\"ignore\"});if(n.error)if(Xn.Platform.isWin&&!r){this.plugin.log(`Git not found in PATH. Checking standard installation path(${Vu}) of Git for Windows.`);let i=(0,qg.spawnSync)(Vu,[\"--version\"],{stdio:\"ignore\"});if(i.error)return console.error(i.error),!1;this.useDefaultWindowsGitPath=!0}else return console.error(n.error),!1;else this.useDefaultWindowsGitPath=!1;return!0}convertErrors(r){if(r instanceof wr){let n=String(r.message);if(n.contains(\"Could not resolve host\")||n.contains(\"Unable to resolve host\")||n.match(/ssh: connect to host .*? port .*?: Operation timed out/)!=null||n.match(/ssh: connect to host .*? port .*?: Network is unreachable/)!=null||n.match(/ssh: connect to host .*? port .*?: Undefined error: 0/)!=null)throw new Is(n)}throw r}async isFileTrackedByLFS(r){try{return(await this.git.raw([\"check-attr\",\"filter\",r])).includes(\"filter: lfs\")}catch(n){let i=n instanceof Error?n.message:String(n);return this.plugin.displayError(`Error checking LFS status: ${i}`),!1}}},wT={hash:\"000000\",isZeroCommit:!0,summary:\"\"};function Mj(e){let r=e.replace(`\\r\n`,`\n`).split(`\n`),n={commits:new Map,hashPerLine:[void 0],originalFileLineNrPerLine:[void 0],finalFileLineNrPerLine:[void 0],groupSizePerStartingLine:new Map},i=1;for(let a=0;a<r.length;){if(gT(r[a])){let s=r[a].split(\" \"),o=Oj(s,i,n);for(a++;gT(r[a]);a++){let c=r[a].split(\" \");Ij(c,n,i)}Fj(n.commits.get(o)),i+=1}else if(!(r[a]===\"\"&&a===r.length-1))throw Error(`Expected non-whitespace line or EOF, but found: ${r[a]}`);a++}return n}function Oj(e,t,r){let n=e[0];if(r.hashPerLine.push(n),r.originalFileLineNrPerLine.push(parseInt(e[1])),r.finalFileLineNrPerLine.push(parseInt(e[2])),e.length>=4&&r.groupSizePerStartingLine.set(t,parseInt(e[3])),parseInt(e[2])!==t)throw Error(`git-blame output is out of order: ${t} vs ${e[2]}`);return n}function Ij(e,t,r){let n=e[0],i=e.slice(1).join(\" \"),a=t.hashPerLine[r],s=t.commits.get(a)||{hash:a,author:{},committer:{},previous:{}};switch(n){case\"summary\":s.summary=i;break;case\"author\":s.author.name=i;break;case\"author-mail\":s.author.email=vT(i);break;case\"author-time\":s.author.epochSeconds=parseInt(i);break;case\"author-tz\":s.author.tz=i;break;case\"committer\":s.committer.name=i;break;case\"committer-mail\":s.committer.email=vT(i);break;case\"committer-time\":s.committer.epochSeconds=parseInt(i);break;case\"committer-tz\":s.committer.tz=i;break;case\"previous\":s.previous.commitHash=i;break;case\"filename\":s.previous.filename=i;break}t.commits.set(a,s)}function Fj(e){if(e.summary===void 0)throw Error(`Summary not provided for commit: ${e.hash}`);Wg(e.author)&&(e.author=void 0),Wg(e.committer)&&(e.committer=void 0),Wg(e.previous)&&(e.previous=void 0),e.isZeroCommit=!!e.hash.match(/^0*$/)}function Wg(e){return!e||Object.keys(e).length===0}function gT(e){return e.length>0&&e[0].trim()===e[0]}function vT(e){let t=e.startsWith(\"<\")?e.substring(1):e;return t.endsWith(\">\")?t.substring(0,t.length-1):t}g();var eC=require(\"@codemirror/state\");g();var IT=require(\"@codemirror/state\"),Xf=require(\"obsidian\");g();var Yg=class{constructor(){this.eventsPerFilepath=new Map;this.startRemoveStalesSubscribersInterval()}ifFilepathDefinedTransformSubscribers(t,r){if(t)return this.ensureInitialized(t),r(this.eventsPerFilepath.get(t))}forEachSubscriber(t){this.eventsPerFilepath.forEach(r=>r.forEach(t))}ensureInitialized(t){this.eventsPerFilepath.get(t)||this.eventsPerFilepath.set(t,new Set)}startRemoveStalesSubscribersInterval(){this.removeStalesSubscribersTimer=window.setInterval(()=>this==null?void 0:this.forEachSubscriber(t=>t==null?void 0:t.removeIfStale()),6e4)}clear(){window.clearInterval(this.removeStalesSubscribersTimer),this.eventsPerFilepath.clear()}},Ws=new Yg;g();var Wf=require(\"@codemirror/state\"),CT=ze(Xg());g();var V=require(\"obsidian\");g();g();function nn(){}nn.prototype={diff:function(t,r){var n,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=i.callback;typeof i==\"function\"&&(a=i,i={});var s=this;function o(E){return E=s.postProcess(E,i),a?(setTimeout(function(){a(E)},0),!0):E}t=this.castInput(t,i),r=this.castInput(r,i),t=this.removeEmpty(this.tokenize(t,i)),r=this.removeEmpty(this.tokenize(r,i));var c=r.length,l=t.length,u=1,f=c+l;i.maxEditLength!=null&&(f=Math.min(f,i.maxEditLength));var d=(n=i.timeout)!==null&&n!==void 0?n:1/0,h=Date.now()+d,p=[{oldPos:-1,lastComponent:void 0}],m=this.extractCommon(p[0],r,t,0,i);if(p[0].oldPos+1>=l&&m+1>=c)return o(bT(s,p[0].lastComponent,r,t,s.useLongestToken));var v=-1/0,y=1/0;function b(){for(var E=Math.max(v,-u);E<=Math.min(y,u);E+=2){var _=void 0,k=p[E-1],w=p[E+1];k&&(p[E-1]=void 0);var A=!1;if(w){var S=w.oldPos-E;A=w&&0<=S&&S<c}var T=k&&k.oldPos+1<l;if(!A&&!T){p[E]=void 0;continue}if(!T||A&&k.oldPos<w.oldPos?_=s.addToPath(w,!0,!1,0,i):_=s.addToPath(k,!1,!0,1,i),m=s.extractCommon(_,r,t,E,i),_.oldPos+1>=l&&m+1>=c)return o(bT(s,_.lastComponent,r,t,s.useLongestToken));p[E]=_,_.oldPos+1>=l&&(y=Math.min(y,E-1)),m+1>=c&&(v=Math.max(v,E+1))}u++}if(a)(function E(){setTimeout(function(){if(u>f||Date.now()>h)return a();b()||E()},0)})();else for(;u<=f&&Date.now()<=h;){var x=b();if(x)return x}},addToPath:function(t,r,n,i,a){var s=t.lastComponent;return s&&!a.oneChangePerToken&&s.added===r&&s.removed===n?{oldPos:t.oldPos+i,lastComponent:{count:s.count+1,added:r,removed:n,previousComponent:s.previousComponent}}:{oldPos:t.oldPos+i,lastComponent:{count:1,added:r,removed:n,previousComponent:s}}},extractCommon:function(t,r,n,i,a){for(var s=r.length,o=n.length,c=t.oldPos,l=c-i,u=0;l+1<s&&c+1<o&&this.equals(n[c+1],r[l+1],a);)l++,c++,u++,a.oneChangePerToken&&(t.lastComponent={count:1,previousComponent:t.lastComponent,added:!1,removed:!1});return u&&!a.oneChangePerToken&&(t.lastComponent={count:u,previousComponent:t.lastComponent,added:!1,removed:!1}),t.oldPos=c,l},equals:function(t,r,n){return n.comparator?n.comparator(t,r):t===r||n.ignoreCase&&t.toLowerCase()===r.toLowerCase()},removeEmpty:function(t){for(var r=[],n=0;n<t.length;n++)t[n]&&r.push(t[n]);return r},castInput:function(t){return t},tokenize:function(t){return Array.from(t)},join:function(t){return t.join(\"\")},postProcess:function(t){return t}};function bT(e,t,r,n,i){for(var a=[],s;t;)a.push(t),s=t.previousComponent,delete t.previousComponent,t=s;a.reverse();for(var o=0,c=a.length,l=0,u=0;o<c;o++){var f=a[o];if(f.removed)f.value=e.join(n.slice(u,u+f.count)),u+=f.count;else{if(!f.added&&i){var d=r.slice(l,l+f.count);d=d.map(function(h,p){var m=n[u+p];return m.length>h.length?m:h}),f.value=e.join(d)}else f.value=e.join(r.slice(l,l+f.count));l+=f.count,f.added||(u+=f.count)}}return a}var JW=new nn;function _T(e,t){var r;for(r=0;r<e.length&&r<t.length;r++)if(e[r]!=t[r])return e.slice(0,r);return e.slice(0,r)}function xT(e,t){var r;if(!e||!t||e[e.length-1]!=t[t.length-1])return\"\";for(r=0;r<e.length&&r<t.length;r++)if(e[e.length-(r+1)]!=t[t.length-(r+1)])return e.slice(-r);return e.slice(-r)}function Kg(e,t,r){if(e.slice(0,t.length)!=t)throw Error(\"string \".concat(JSON.stringify(e),\" doesn't start with prefix \").concat(JSON.stringify(t),\"; this is a bug\"));return r+e.slice(t.length)}function Jg(e,t,r){if(!t)return e+r;if(e.slice(-t.length)!=t)throw Error(\"string \".concat(JSON.stringify(e),\" doesn't end with suffix \").concat(JSON.stringify(t),\"; this is a bug\"));return e.slice(0,-t.length)+r}function Wl(e,t){return Kg(e,t,\"\")}function Df(e,t){return Jg(e,t,\"\")}function ST(e,t){return t.slice(0,$j(e,t))}function $j(e,t){var r=0;e.length>t.length&&(r=e.length-t.length);var n=t.length;e.length<t.length&&(n=e.length);var i=Array(n),a=0;i[0]=0;for(var s=1;s<n;s++){for(t[s]==t[a]?i[s]=i[a]:i[s]=a;a>0&&t[s]!=t[a];)a=i[a];t[s]==t[a]&&a++}a=0;for(var o=r;o<e.length;o++){for(;a>0&&e[o]!=t[a];)a=i[a];e[o]==t[a]&&a++}return a}var Nf=\"a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}\",Lj=new RegExp(\"[\".concat(Nf,\"]+|\\\\s+|[^\").concat(Nf,\"]\"),\"ug\"),Bf=new nn;Bf.equals=function(e,t,r){return r.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e.trim()===t.trim()};Bf.tokenize=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r;if(t.intlSegmenter){if(t.intlSegmenter.resolvedOptions().granularity!=\"word\")throw new Error('The segmenter passed must have a granularity of \"word\"');r=Array.from(t.intlSegmenter.segment(e),function(a){return a.segment})}else r=e.match(Lj)||[];var n=[],i=null;return r.forEach(function(a){/\\s/.test(a)?i==null?n.push(a):n.push(n.pop()+a):/\\s/.test(i)?n[n.length-1]==i?n.push(n.pop()+a):n.push(i+a):n.push(a),i=a}),n};Bf.join=function(e){return e.map(function(t,r){return r==0?t:t.replace(/^\\s+/,\"\")}).join(\"\")};Bf.postProcess=function(e,t){if(!e||t.oneChangePerToken)return e;var r=null,n=null,i=null;return e.forEach(function(a){a.added?n=a:a.removed?i=a:((n||i)&&ET(r,i,n,a),r=a,n=null,i=null)}),(n||i)&&ET(r,i,n,null),e};function ET(e,t,r,n){if(t&&r){var i=t.value.match(/^\\s*/)[0],a=t.value.match(/\\s*$/)[0],s=r.value.match(/^\\s*/)[0],o=r.value.match(/\\s*$/)[0];if(e){var c=_T(i,s);e.value=Jg(e.value,s,c),t.value=Wl(t.value,c),r.value=Wl(r.value,c)}if(n){var l=xT(a,o);n.value=Kg(n.value,o,l),t.value=Df(t.value,l),r.value=Df(r.value,l)}}else if(r)e&&(r.value=r.value.replace(/^\\s*/,\"\")),n&&(n.value=n.value.replace(/^\\s*/,\"\"));else if(e&&n){var u=n.value.match(/^\\s*/)[0],f=t.value.match(/^\\s*/)[0],d=t.value.match(/\\s*$/)[0],h=_T(u,f);t.value=Wl(t.value,h);var p=xT(Wl(u,h),d);t.value=Df(t.value,p),n.value=Kg(n.value,u,p),e.value=Jg(e.value,u,u.slice(0,u.length-p.length))}else if(n){var m=n.value.match(/^\\s*/)[0],v=t.value.match(/\\s*$/)[0],y=ST(v,m);t.value=Df(t.value,y)}else if(e){var b=e.value.match(/\\s*$/)[0],x=t.value.match(/^\\s*/)[0],E=ST(b,x);t.value=Wl(t.value,E)}}var Dj=new nn;Dj.tokenize=function(e){var t=new RegExp(\"(\\\\r?\\\\n)|[\".concat(Nf,\"]+|[^\\\\S\\\\n\\\\r]+|[^\").concat(Nf,\"]\"),\"ug\");return e.match(t)||[]};var Hf=new nn;Hf.tokenize=function(e,t){t.stripTrailingCr&&(e=e.replace(/\\r\\n/g,`\n`));var r=[],n=e.split(/(\\n|\\r\\n)/);n[n.length-1]||n.pop();for(var i=0;i<n.length;i++){var a=n[i];i%2&&!t.newlineIsToken?r[r.length-1]+=a:r.push(a)}return r};Hf.equals=function(e,t,r){return r.ignoreWhitespace?((!r.newlineIsToken||!e.includes(`\n`))&&(e=e.trim()),(!r.newlineIsToken||!t.includes(`\n`))&&(t=t.trim())):r.ignoreNewlineAtEof&&!r.newlineIsToken&&(e.endsWith(`\n`)&&(e=e.slice(0,-1)),t.endsWith(`\n`)&&(t=t.slice(0,-1))),nn.prototype.equals.call(this,e,t,r)};function AT(e,t,r){return Hf.diff(e,t,r)}var Nj=new nn;Nj.tokenize=function(e){return e.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var jj=new nn;jj.tokenize=function(e){return e.split(/([{}:;,]|\\s+)/)};function kT(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function jf(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?kT(Object(r),!0).forEach(function(n){Uj(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):kT(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function Bj(e,t){if(typeof e!=\"object\"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||\"default\");if(typeof n!=\"object\")return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(t===\"string\"?String:Number)(e)}function Hj(e){var t=Bj(e,\"string\");return typeof t==\"symbol\"?t:t+\"\"}function Qg(e){\"@babel/helpers - typeof\";return Qg=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(t){return typeof t}:function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},Qg(e)}function Uj(e,t,r){return t=Hj(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Zg(e){return Gj(e)||zj(e)||Vj(e)||Wj()}function Gj(e){if(Array.isArray(e))return e0(e)}function zj(e){if(typeof Symbol!=\"undefined\"&&e[Symbol.iterator]!=null||e[\"@@iterator\"]!=null)return Array.from(e)}function Vj(e,t){if(e){if(typeof e==\"string\")return e0(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r===\"Object\"&&e.constructor&&(r=e.constructor.name),r===\"Map\"||r===\"Set\")return Array.from(e);if(r===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e0(e,t)}}function e0(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Wj(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ql=new nn;ql.useLongestToken=!0;ql.tokenize=Hf.tokenize;ql.castInput=function(e,t){var r=t.undefinedReplacement,n=t.stringifyReplacer,i=n===void 0?function(a,s){return typeof s==\"undefined\"?r:s}:n;return typeof e==\"string\"?e:JSON.stringify(t0(e,null,null,i),i,\"  \")};ql.equals=function(e,t,r){return nn.prototype.equals.call(ql,e.replace(/,([\\r\\n])/g,\"$1\"),t.replace(/,([\\r\\n])/g,\"$1\"),r)};function t0(e,t,r,n,i){t=t||[],r=r||[],n&&(e=n(i,e));var a;for(a=0;a<t.length;a+=1)if(t[a]===e)return r[a];var s;if(Object.prototype.toString.call(e)===\"[object Array]\"){for(t.push(e),s=new Array(e.length),r.push(s),a=0;a<e.length;a+=1)s[a]=t0(e[a],t,r,n,i);return t.pop(),r.pop(),s}if(e&&e.toJSON&&(e=e.toJSON()),Qg(e)===\"object\"&&e!==null){t.push(e),s={},r.push(s);var o=[],c;for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&o.push(c);for(o.sort(),a=0;a<o.length;a+=1)c=o[a],s[c]=t0(e[c],t,r,n,c);t.pop(),r.pop()}else s=e;return s}var r0=new nn;r0.tokenize=function(e){return e.slice()};r0.join=r0.removeEmpty=function(e){return e};function TT(e,t,r,n,i,a,s){if(s||(s={}),typeof s==\"function\"&&(s={callback:s}),typeof s.context==\"undefined\"&&(s.context=4),s.newlineIsToken)throw new Error(\"newlineIsToken may not be used with patch-generation functions, only with diffing functions\");if(s.callback){var o=s,c=o.callback;AT(r,n,jf(jf({},s),{},{callback:function(f){var d=l(f);c(d)}}))}else return l(AT(r,n,s));function l(u){if(!u)return;u.push({value:\"\",lines:[]});function f(A){return A.map(function(S){return\" \"+S})}for(var d=[],h=0,p=0,m=[],v=1,y=1,b=function(){var S=u[x],T=S.lines||Yj(S.value);if(S.lines=T,S.added||S.removed){var P;if(!h){var O=u[x-1];h=v,p=y,O&&(m=s.context>0?f(O.lines.slice(-s.context)):[],h-=m.length,p-=m.length)}(P=m).push.apply(P,Zg(T.map(function(ee){return(S.added?\"+\":\"-\")+ee}))),S.added?y+=T.length:v+=T.length}else{if(h)if(T.length<=s.context*2&&x<u.length-2){var j;(j=m).push.apply(j,Zg(f(T)))}else{var D,Q=Math.min(T.length,s.context);(D=m).push.apply(D,Zg(f(T.slice(0,Q))));var de={oldStart:h,oldLines:v-h+Q,newStart:p,newLines:y-p+Q,lines:m};d.push(de),h=0,p=0,m=[]}v+=T.length,y+=T.length}},x=0;x<u.length;x++)b();for(var E=0,_=d;E<_.length;E++)for(var k=_[E],w=0;w<k.lines.length;w++)k.lines[w].endsWith(`\n`)?k.lines[w]=k.lines[w].slice(0,-1):(k.lines.splice(w+1,0,\"\\\\ No newline at end of file\"),w++);return{oldFileName:e,newFileName:t,oldHeader:i,newHeader:a,hunks:d}}}function n0(e){if(Array.isArray(e))return e.map(n0).join(`\n`);var t=[];e.oldFileName==e.newFileName&&t.push(\"Index: \"+e.oldFileName),t.push(\"===================================================================\"),t.push(\"--- \"+e.oldFileName+(typeof e.oldHeader==\"undefined\"?\"\":\"\t\"+e.oldHeader)),t.push(\"+++ \"+e.newFileName+(typeof e.newHeader==\"undefined\"?\"\":\"\t\"+e.newHeader));for(var r=0;r<e.hunks.length;r++){var n=e.hunks[r];n.oldLines===0&&(n.oldStart-=1),n.newLines===0&&(n.newStart-=1),t.push(\"@@ -\"+n.oldStart+\",\"+n.oldLines+\" +\"+n.newStart+\",\"+n.newLines+\" @@\"),t.push.apply(t,n.lines)}return t.join(`\n`)+`\n`}function qj(e,t,r,n,i,a,s){var o;if(typeof s==\"function\"&&(s={callback:s}),(o=s)!==null&&o!==void 0&&o.callback){var l=s,u=l.callback;TT(e,t,r,n,i,a,jf(jf({},s),{},{callback:function(d){d?u(n0(d)):u()}}))}else{var c=TT(e,t,r,n,i,a,s);return c?n0(c):void 0}}function Uf(e,t,r,n,i,a){return qj(e,e,t,r,n,i,a)}function Yj(e){var t=e.endsWith(`\n`),r=e.split(`\n`).map(function(n){return n+`\n`});return t?r.pop():r.push(r.pop().slice(0,-1)),r}var _a=require(\"obsidian\");g();var Fi=require(\"obsidian\"),Gf=class{constructor(t,r){this.plugin=r;this.promises={};this.adapter=t.adapter,this.vault=t,this.lastBasePath=this.plugin.settings.basePath,this.promises.readFile=this.readFile.bind(this),this.promises.writeFile=this.writeFile.bind(this),this.promises.readdir=this.readdir.bind(this),this.promises.mkdir=this.mkdir.bind(this),this.promises.rmdir=this.rmdir.bind(this),this.promises.stat=this.stat.bind(this),this.promises.unlink=this.unlink.bind(this),this.promises.lstat=this.lstat.bind(this),this.promises.readlink=this.readlink.bind(this),this.promises.symlink=this.symlink.bind(this)}async readFile(t,r){var n;if(this.maybeLog(\"Read: \"+t+JSON.stringify(r)),r==\"utf8\"||r.encoding==\"utf8\"){let i=this.vault.getAbstractFileByPath(t);return i instanceof Fi.TFile?(this.maybeLog(\"Reuse\"),this.vault.read(i)):this.adapter.read(t)}else{if(t.endsWith(this.gitDir+\"/index\"))return this.plugin.settings.basePath!=this.lastBasePath?(this.clearIndex(),this.lastBasePath=this.plugin.settings.basePath,this.adapter.readBinary(t)):(n=this.index)!=null?n:this.adapter.readBinary(t);let i=this.vault.getAbstractFileByPath(t);return i instanceof Fi.TFile?(this.maybeLog(\"Reuse\"),this.vault.readBinary(i)):this.adapter.readBinary(t)}}async writeFile(t,r){if(this.maybeLog(\"Write: \"+t),typeof r==\"string\"){let n=this.vault.getAbstractFileByPath(t);return n instanceof Fi.TFile?this.vault.modify(n,r):this.adapter.write(t,r)}else if(t.endsWith(this.gitDir+\"/index\"))this.index=r,this.indexmtime=Date.now();else{let n=this.vault.getAbstractFileByPath(t);return n instanceof Fi.TFile?this.vault.modifyBinary(n,r):this.adapter.writeBinary(t,r)}}async readdir(t){t===\".\"&&(t=\"/\");let r=await this.adapter.list(t),n=[...r.files,...r.folders],i;return t!==\"/\"?i=n.map(a=>(0,Fi.normalizePath)(a.substring(t.length))):i=n,i}async mkdir(t){return this.adapter.mkdir(t)}async rmdir(t,r){var n,i;return this.adapter.rmdir(t,(i=(n=r==null?void 0:r.options)==null?void 0:n.recursive)!=null?i:!1)}async stat(t){if(t.endsWith(this.gitDir+\"/index\")){if(this.index!==void 0&&this.indexctime!=null&&this.indexmtime!=null)return{isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1,size:this.index.length,type:\"file\",ctimeMs:this.indexctime,mtimeMs:this.indexmtime};{let n=await this.adapter.stat(t);if(n==null)throw{code:\"ENOENT\"};return this.indexctime=n.ctime,this.indexmtime=n.mtime,{ctimeMs:n.ctime,mtimeMs:n.mtime,size:n.size,type:\"file\",isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1}}}t===\".\"&&(t=\"/\");let r=this.vault.getAbstractFileByPath(t);if(this.maybeLog(\"Stat: \"+t),r instanceof Fi.TFile)return this.maybeLog(\"Reuse stat\"),{ctimeMs:r.stat.ctime,mtimeMs:r.stat.mtime,size:r.stat.size,type:\"file\",isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1};{let n=await this.adapter.stat(t);if(n)return{ctimeMs:n.ctime,mtimeMs:n.mtime,size:n.size,type:n.type===\"folder\"?\"directory\":n.type,isFile:()=>n.type===\"file\",isDirectory:()=>n.type===\"folder\",isSymbolicLink:()=>!1};throw{code:\"ENOENT\"}}}async unlink(t){return this.adapter.remove(t)}async lstat(t){return this.stat(t)}async readlink(t){throw new Error(`readlink of (${t}) is not implemented.`)}async symlink(t){throw new Error(`symlink of (${t}) is not implemented.`)}async saveAndClear(){this.index!==void 0&&await this.adapter.writeBinary(this.plugin.gitManager.getRelativeVaultPath(this.gitDir+\"/index\"),this.index,{ctime:this.indexctime,mtime:this.indexmtime}),this.clearIndex()}clearIndex(){this.index=void 0,this.indexctime=void 0,this.indexmtime=void 0}get gitDir(){return this.plugin.settings.gitDir||\".git\"}maybeLog(t){}};var an=class extends Vs{constructor(r){super(r);this.FILE=0;this.HEAD=1;this.WORKDIR=2;this.STAGE=3;this.status_mapping={\"000\":\"  \",\"003\":\"AD\",\"020\":\"??\",\"022\":\"A \",\"023\":\"AM\",100:\"D \",101:\" D\",103:\"MD\",110:\"DA\",111:\"  \",113:\"MM\",120:\"DA\",121:\" M\",122:\"M \",123:\"MM\"};this.noticeLength=999999;this.fs=new Gf(this.app.vault,this.plugin)}getRepo(){return{fs:this.fs,dir:this.plugin.settings.basePath,gitdir:this.plugin.settings.gitDir||void 0,onAuth:()=>{var r,n;return{username:(r=this.plugin.localStorage.getUsername())!=null?r:void 0,password:(n=this.plugin.localStorage.getPassword())!=null?n:void 0}},onAuthFailure:async()=>{new _a.Notice(\"Authentication failed. Please try with different credentials\");let r=await new Fe(this.plugin,{placeholder:\"Specify your username\"}).openAndGetResult();if(r){let n=await new Fe(this.plugin,{placeholder:\"Specify your password/personal access token\"}).openAndGetResult();if(n)return this.plugin.localStorage.setUsername(r),this.plugin.localStorage.setPassword(n),{username:r,password:n}}return{cancel:!0}},http:{async request({url:r,method:n,headers:i,body:a}){let s;a&&(s=(await Jj(a)).buffer);let o=await(0,_a.requestUrl)({url:r,method:n,headers:i,body:s,throw:!1});return{url:r,method:n,headers:o.headers,body:[new Uint8Array(o.arrayBuffer)],statusCode:o.status,statusMessage:o.status.toString()}}}}}async wrapFS(r){try{let n=await r;return await this.fs.saveAndClear(),n}catch(n){throw await this.fs.saveAndClear(),n}}async status(){let r,n=window.setTimeout(()=>{r=new _a.Notice(\"This takes longer: Getting status\",this.noticeLength)},2e4);try{this.plugin.setPluginState({gitAction:1});let i=(await this.wrapFS(ie.statusMatrix({...this.getRepo()}))).map(c=>this.getFileStatusResult(c)),a=i.filter(c=>c.workingDir!==\" \"),s=i.filter(c=>c.index!==\" \"&&c.index!==\"U\"),o=[];return window.clearTimeout(n),r==null||r.hide(),{all:i,changed:a,staged:s,conflicted:o}}catch(i){throw window.clearTimeout(n),r==null||r.hide(),this.plugin.displayError(i),i}}async commitAll({message:r,status:n,unstagedFiles:i}){try{return await this.checkAuthorInfo(),await this.stageAll({status:n,unstagedFiles:i}),this.commit({message:r})}catch(a){throw this.plugin.displayError(a),a}}async commit({message:r}){try{await this.checkAuthorInfo(),this.plugin.setPluginState({gitAction:4});let n=await this.formatCommitMessage(r),i=this.plugin.localStorage.getConflict(),a;if(i){let s=await this.branchInfo();a=[s.current,s.tracking]}await this.wrapFS(ie.commit({...this.getRepo(),message:n,parent:a})),this.plugin.localStorage.setConflict(!1);return}catch(n){throw this.plugin.displayError(n),n}}async stage(r,n){let i=this.getRelativeRepoPath(r,n),a;n?a=r:a=this.getRelativeVaultPath(r);try{this.plugin.setPluginState({gitAction:3}),await this.app.vault.adapter.exists(a)?await this.wrapFS(ie.add({...this.getRepo(),filepath:i})):await this.wrapFS(ie.remove({...this.getRepo(),filepath:i}))}catch(s){throw this.plugin.displayError(s),s}}async stageAll({dir:r,status:n,unstagedFiles:i}){try{if(n)await Promise.all(n.changed.map(a=>a.workingDir!==\"D\"?this.wrapFS(ie.add({...this.getRepo(),filepath:a.path})):ie.remove({...this.getRepo(),filepath:a.path})));else{let a=i!=null?i:await this.getUnstagedFiles(r!=null?r:\".\");await Promise.all(a.map(({path:s,deleted:o})=>o?ie.remove({...this.getRepo(),filepath:s}):this.wrapFS(ie.add({...this.getRepo(),filepath:s}))))}}catch(a){throw this.plugin.displayError(a),a}}async unstage(r,n){try{this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.wrapFS(ie.resetIndex({...this.getRepo(),filepath:r}))}catch(i){throw this.plugin.displayError(i),i}}async unstageAll({dir:r,status:n}){try{let i;n?i=n.staged.map(a=>a.path):i=(await this.getStagedFiles(r!=null?r:\".\")).map(({path:s})=>s),await this.wrapFS(Promise.all(i.map(a=>ie.resetIndex({...this.getRepo(),filepath:a}))))}catch(i){throw this.plugin.displayError(i),i}}async discard(r){try{this.plugin.setPluginState({gitAction:3}),await this.wrapFS(ie.checkout({...this.getRepo(),filepaths:[r],force:!0}))}catch(n){throw this.plugin.displayError(n),n}}async discardAll({dir:r,status:n}){let i=[];n?r!=null?i=n.changed.filter(a=>a.path.startsWith(r)).map(a=>a.path):i=n.changed.map(a=>a.path):i=(await this.getUnstagedFiles(r)).map(({path:a})=>a);try{await this.wrapFS(ie.checkout({...this.getRepo(),filepaths:i,force:!0}))}catch(a){throw this.plugin.displayError(a),a}}getProgressText(r,n){let i=`${r} progress:`;return n.phase&&(i=`${i} ${n.phase}:`),n.loaded&&(i=`${i} ${n.loaded}`,n.total&&(i=`${i} of ${n.total}`)),i}resolveRef(r){return this.wrapFS(ie.resolveRef({...this.getRepo(),ref:r}))}async pull(){let r=this.showNotice(\"Initializing pull\");try{this.plugin.setPluginState({gitAction:2});let n=await this.resolveRef(\"HEAD\");await this.fetch();let i=await this.branchInfo();await this.checkAuthorInfo(),(await this.wrapFS(ie.merge({...this.getRepo(),ours:i.current,theirs:i.tracking,abortOnConflict:!1}))).alreadyMerged||await this.wrapFS(ie.checkout({...this.getRepo(),ref:i.current,onProgress:c=>{r!==void 0&&(r.noticeEl.innerText=this.getProgressText(\"Checkout\",c))},remote:i.remote})),r==null||r.hide();let s=await this.resolveRef(\"HEAD\"),o=await this.getFileChangesCount(n,s);return this.showNotice(\"Finished pull\",!1),o.map(c=>({path:c.path,workingDir:\"P\",index:\"P\",vaultPath:this.getRelativeVaultPath(c.path)}))}catch(n){throw r==null||r.hide(),n instanceof gl.MergeConflictError&&await this.plugin.handleConflict(n.data.filepaths.map(i=>this.getRelativeVaultPath(i))),this.plugin.displayError(n),n}}async push(){if(!await this.canPush())return 0;let r=this.showNotice(\"Initializing push\");try{this.plugin.setPluginState({gitAction:1});let n=await this.branchInfo(),i=n.tracking,a=n.current,s=(await this.getFileChangesCount(a,i)).length;return this.plugin.setPluginState({gitAction:5}),await this.wrapFS(ie.push({...this.getRepo(),onProgress:o=>{r!==void 0&&(r.noticeEl.innerText=this.getProgressText(\"Pushing\",o))}})),r==null||r.hide(),s}catch(n){throw r==null||r.hide(),this.plugin.displayError(n),n}}async getUnpushedCommits(){let r=await this.branchInfo(),n=r.tracking,i=r.current;if(n==null||i==null)return 0;let a=await this.resolveRef(i),s=await this.resolveRef(n);return(await this.getFileChangesCount(a,s)).length}async canPush(){let r=await this.branchInfo(),n=r.tracking,i=r.current,a=await this.resolveRef(i),s=await this.resolveRef(n);return a!=s}async checkRequirements(){return await this.plugin.app.vault.adapter.exists(`${this.getRepo().dir}/.git/HEAD`)?\"valid\":\"missing-repo\"}async branchInfo(){var r,n;try{let i=await ie.currentBranch(this.getRepo())||\"\",a=await ie.listBranches(this.getRepo()),s=(r=await this.getConfig(`branch.${i}.remote`))!=null?r:\"origin\",o=(n=await this.getConfig(`branch.${i}.merge`))==null?void 0:n.split(\"refs/heads\")[1],c=o?s+o:void 0;return{current:i,tracking:c,branches:a,remote:s}}catch(i){throw this.plugin.displayError(i),i}}async getCurrentRemote(){var i;let r=await ie.currentBranch(this.getRepo())||\"\";return(i=await this.getConfig(`branch.${r}.remote`))!=null?i:\"origin\"}async checkout(r,n){try{return this.wrapFS(ie.checkout({...this.getRepo(),ref:r,force:!!n,remote:n}))}catch(i){throw this.plugin.displayError(i),i}}async createBranch(r){try{await this.wrapFS(ie.branch({...this.getRepo(),ref:r,checkout:!0}))}catch(n){throw this.plugin.displayError(n),n}}async deleteBranch(r){try{await this.wrapFS(ie.deleteBranch({...this.getRepo(),ref:r}))}catch(n){throw this.plugin.displayError(n),n}}branchIsMerged(r){return Promise.resolve(!0)}async init(){try{await this.wrapFS(ie.init(this.getRepo()))}catch(r){throw this.plugin.displayError(r),r}}async clone(r,n,i){let a=this.showNotice(\"Initializing clone\");try{await this.wrapFS(ie.clone({...this.getRepo(),dir:n,url:r,depth:i,onProgress:s=>{a!==void 0&&(a.noticeEl.innerText=this.getProgressText(\"Cloning\",s))}})),a==null||a.hide()}catch(s){throw a==null||a.hide(),this.plugin.displayError(s),s}}async setConfig(r,n){try{return this.wrapFS(ie.setConfig({...this.getRepo(),path:r,value:n}))}catch(i){throw this.plugin.displayError(i),i}}async getConfig(r){try{return this.wrapFS(ie.getConfig({...this.getRepo(),path:r}))}catch(n){throw this.plugin.displayError(n),n}}async fetch(r){let n=this.showNotice(\"Initializing fetch\");try{let i={...this.getRepo(),onProgress:a=>{n!==void 0&&(n.noticeEl.innerText=this.getProgressText(\"Fetching\",a))},remote:r!=null?r:await this.getCurrentRemote()};await this.wrapFS(ie.fetch(i)),n==null||n.hide()}catch(i){throw this.plugin.displayError(i),n==null||n.hide(),i}}async setRemote(r,n){try{await this.wrapFS(ie.addRemote({...this.getRepo(),remote:r,url:n,force:!0}))}catch(i){throw this.plugin.displayError(i),i}}async getRemoteBranches(r){let n=[];return n.push(...await this.wrapFS(ie.listBranches({...this.getRepo(),remote:r}))),n.remove(\"HEAD\"),n=n.map(i=>`${r}/${i}`),n}async getRemotes(){return(await this.wrapFS(ie.listRemotes({...this.getRepo()}))).map(r=>r.remote)}async removeRemote(r){await this.wrapFS(ie.deleteRemote({...this.getRepo(),remote:r}))}async getRemoteUrl(r){var n;return(n=(await this.wrapFS(ie.listRemotes({...this.getRepo()}))).filter(i=>i.remote==r)[0])==null?void 0:n.url}async log(r,n=!0,i,a){let s=await this.wrapFS(ie.log({...this.getRepo(),depth:i,ref:a}));return Promise.all(s.map(async o=>{let c=o.commit.message.split(`\n\n`);return{message:c[0],author:{name:o.commit.author.name,email:o.commit.author.email},body:c.slice(1).join(`\n\n`),date:new Date(o.commit.committer.timestamp).toDateString(),diff:{changed:0,files:(await this.getFileChangesCount(o.commit.parent.first(),o.oid)).map(l=>({path:l.path,status:l.type,vaultPath:this.getRelativeVaultPath(l.path),hash:o.oid}))},hash:o.oid,refs:[]}}))}updateBasePath(r){return this.getRepo().dir=r,Promise.resolve()}async updateUpstreamBranch(r){let[n,i]=Ii(r),a=await this.branchInfo();await this.wrapFS(ie.push({...this.getRepo(),remote:n,remoteRef:i})),await this.setConfig(`branch.${a.current}.merge`,`refs/heads/${i}`)}updateGitPath(r){return Promise.resolve()}async getFileChangesCount(r,n){return this.walkDifference({walkers:[ie.TREE({ref:r}),ie.TREE({ref:n})]})}async walkDifference({walkers:r,dir:n}){return await this.wrapFS(ie.walk({...this.getRepo(),trees:r,map:async function(a,[s,o]){if(!Ug(a,n))return null;if(await(s==null?void 0:s.type())===\"tree\"||await(o==null?void 0:o.type())===\"tree\")return;let c=await(s==null?void 0:s.oid()),l=await(o==null?void 0:o.oid()),u=\"equal\";if(c!==l&&(u=\"M\"),c===void 0&&(u=\"A\"),l===void 0&&(u=\"D\"),c===void 0&&l===void 0&&(console.log(\"Something weird happened:\"),console.log(s),console.log(o)),u!==\"equal\")return{path:a,type:u}}}))}async getStagedFiles(r=\".\"){return(await this.walkDifference({walkers:[ie.TREE({ref:\"HEAD\"}),ie.STAGE()],dir:r})).map(i=>({vaultPath:this.getRelativeVaultPath(i.path),path:i.path}))}async getUnstagedFiles(r=\".\"){let n,i=window.setTimeout(()=>{n=new _a.Notice(\"This takes longer: Getting status\",this.noticeLength)},2e4);try{let a=this.getRepo(),s=await this.wrapFS(ie.walk({...a,trees:[ie.WORKDIR(),ie.STAGE()],map:async function(o,[c,l]){if(!l&&c&&await ie.isIgnored({...a,filepath:o})||!Ug(o,r))return null;let[u,f]=await Promise.all([c&&c.type(),l&&l.type()]),d=[u,f].includes(\"blob\");if((u===\"tree\"||u===\"special\")&&!d)return;if(f===\"commit\")return null;if((f===\"tree\"||f===\"special\")&&!d)return;let h=f===\"blob\"?await l.oid():void 0,p;return u===\"blob\"&&f!==\"blob\"?p=\"42\":u===\"blob\"&&(p=await c.oid()),p?p!==h?{path:o,deleted:!1}:null:{path:o,deleted:!0}}}));return window.clearTimeout(i),n==null||n.hide(),s}catch(a){throw window.clearTimeout(i),n==null||n.hide(),this.plugin.displayError(a),a}}async getDiffString(r,n=!1,i){let a=this.getRelativeVaultPath(r),s=async(l,[u])=>{if(r==l){let f=await u.oid();return(await ie.readBlob({...this.getRepo(),oid:f})).blob}};if(i){let l=await wl({...this.getRepo(),filepath:r,oid:i}).then(h=>new TextDecoder().decode(h.blob)).catch(h=>{if(!(h instanceof ie.Errors.NotFoundError))throw h}),u=await ie.readCommit({...this.getRepo(),oid:i}),f=await wl({...this.getRepo(),filepath:r,oid:u.commit.parent.first()}).then(h=>new TextDecoder().decode(h.blob)).catch(h=>{if(!(h instanceof ie.Errors.NotFoundError))throw h});return Uf(a,f!=null?f:\"\",l!=null?l:\"\")}let o=(await ie.walk({...this.getRepo(),trees:[ie.STAGE()],map:s})).first(),c=new TextDecoder().decode(o);if(n){let l=await this.resolveRef(\"HEAD\").then(f=>wl({...this.getRepo(),filepath:r,oid:f})).then(f=>new TextDecoder().decode(f.blob)).catch(f=>{if(!(f instanceof ie.Errors.NotFoundError))throw f});return Uf(a,l!=null?l:\"\",c)}else{let l;return await this.app.vault.adapter.exists(a)?l=await this.app.vault.adapter.read(a):l=\"\",Uf(a,c,l)}}async getLastCommitTime(){let r=this.getRepo(),n=await this.resolveRef(\"HEAD\"),a=(await ie.readCommit({...r,oid:n})).commit.committer.timestamp;return new Date(a*1e3)}getFileStatusResult(r){let n=this.status_mapping[`${r[this.HEAD]}${r[this.WORKDIR]}${r[this.STAGE]}`];return{index:n[0]==\"?\"?\"U\":n[0],workingDir:n[1]==\"?\"?\"U\":n[1],path:r[this.FILE],vaultPath:this.getRelativeVaultPath(r[this.FILE])}}async checkAuthorInfo(){let r=await this.getConfig(\"user.name\"),n=await this.getConfig(\"user.email\");if(!r||!n)throw Error(\"Git author name and email are not set. Please set both fields in the settings.\")}showNotice(r,n=!0){if(!this.plugin.settings.disablePopups)return new _a.Notice(r,n?this.noticeLength:void 0)}};function Xj(e){let t=[e];return{next(){return Promise.resolve({done:t.length===0,value:t.pop()})},return(){return t=[],{}},[Symbol.asyncIterator](){return this}}}function Zj(e){return e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]?e[Symbol.iterator]():e.next?e:Xj(e)}async function Kj(e,t){let r=Zj(e);for(;;){let{value:n,done:i}=await r.next();if(n&&await t(n),i)break}r.return&&r.return()}async function Jj(e){let t=0,r=[];await Kj(e,a=>{r.push(a),t+=a.byteLength});let n=new Uint8Array(t),i=0;for(let a of r)n.set(a,i),i+=a.byteLength;return n}var Qj=\"https://momentjs.com/docs/#/parsing/string-format/\",eB=\"https://publish.obsidian.md/git-doc/Line+Authoring\",zf=class extends V.PluginSettingTab{constructor(r,n){super(r,n);this.plugin=n;this.lineAuthorColorSettings=new Map}get settings(){return this.plugin.settings}display(){let{containerEl:r}=this,n=this.plugin,i;n.settings.differentIntervalCommitAndPush?i=\"commit\":i=\"commit-and-sync\";let a=n.gitReady;r.empty(),a||(r.createEl(\"p\",{text:\"Git is not ready. When all settings are correct you can configure commit-sync, etc.\"}),r.createEl(\"br\"));let s;if(a){new V.Setting(r).setName(\"Automatic\").setHeading(),new V.Setting(r).setName(\"Split timers for automatic commit and sync\").setDesc(\"Enable to use one interval for commit and another for sync.\").addToggle(u=>u.setValue(n.settings.differentIntervalCommitAndPush).onChange(async f=>{n.settings.differentIntervalCommitAndPush=f,await n.saveSettings(),n.automaticsManager.reload(\"commit\",\"push\"),this.display()})),new V.Setting(r).setName(`Auto ${i} interval (minutes)`).setDesc(`${n.settings.differentIntervalCommitAndPush?\"Commit\":\"Commit and sync\"} changes every X minutes. Set to 0 (default) to disable. (See below setting for further configuration!)`).addText(u=>{u.inputEl.type=\"number\",u.setValue(String(n.settings.autoSaveInterval)),u.setPlaceholder(String(ar.autoSaveInterval)),u.onChange(async f=>{n.settings.autoSaveInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload(\"commit\")})}),s=new V.Setting(r).setName(`Auto ${i} after stopping file edits`).setDesc(`Requires the ${i} interval not to be 0.\n                        If turned on, do auto ${i} every ${pT(n.settings.autoSaveInterval)} after stopping file edits.\n                        This also prevents auto ${i} while editing a file. If turned off, it's independent from the last file edit.`).addToggle(u=>u.setValue(n.settings.autoBackupAfterFileChange).onChange(async f=>{n.settings.autoBackupAfterFileChange=f,this.display(),await n.saveSettings(),n.automaticsManager.reload(\"commit\")})),this.mayDisableSetting(s,n.settings.setLastSaveToLastCommit),s=new V.Setting(r).setName(`Auto ${i} after latest commit`).setDesc(`If turned on, sets last auto ${i} timestamp to the latest commit timestamp. This reduces the frequency of auto ${i} when doing manual commits.`).addToggle(u=>u.setValue(n.settings.setLastSaveToLastCommit).onChange(async f=>{n.settings.setLastSaveToLastCommit=f,await n.saveSettings(),n.automaticsManager.reload(\"commit\"),this.display()})),this.mayDisableSetting(s,n.settings.autoBackupAfterFileChange),s=new V.Setting(r).setName(\"Auto push interval (minutes)\").setDesc(\"Push commits every X minutes. Set to 0 (default) to disable.\").addText(u=>{u.inputEl.type=\"number\",u.setValue(String(n.settings.autoPushInterval)),u.setPlaceholder(String(ar.autoPushInterval)),u.onChange(async f=>{n.settings.autoPushInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload(\"push\")})}),this.mayDisableSetting(s,!n.settings.differentIntervalCommitAndPush),new V.Setting(r).setName(\"Auto pull interval (minutes)\").setDesc(\"Pull changes every X minutes. Set to 0 (default) to disable.\").addText(u=>{u.inputEl.type=\"number\",u.setValue(String(n.settings.autoPullInterval)),u.setPlaceholder(String(ar.autoPullInterval)),u.onChange(async f=>{n.settings.autoPullInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload(\"pull\")})}),new V.Setting(r).setName(`Specify custom commit message on auto ${i}`).setDesc(\"You will get a pop up to specify your message.\").addToggle(u=>u.setValue(n.settings.customMessageOnAutoBackup).onChange(async f=>{n.settings.customMessageOnAutoBackup=f,await n.saveSettings(),this.display()})),s=new V.Setting(r).setName(`Commit message on auto ${i}`).setDesc(\"Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message).\").addTextArea(u=>u.setPlaceholder(\"vault backup: {{date}}\").setValue(n.settings.autoCommitMessage).onChange(async f=>{n.settings.autoCommitMessage=f,await n.saveSettings()})),this.mayDisableSetting(s,n.settings.customMessageOnAutoBackup),new V.Setting(r).setName(\"Commit message\").setHeading(),new V.Setting(r).setName(\"Commit message on manual commit\").setDesc(\"Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message).\").addTextArea(u=>u.setPlaceholder(\"vault backup: {{date}}\").setValue(n.settings.commitMessage?n.settings.commitMessage:\"\").onChange(async f=>{n.settings.commitMessage=f,await n.saveSettings()}));let l=new V.Setting(r).setName(\"{{date}} placeholder format\").addMomentFormat(u=>u.setDefaultFormat(n.settings.commitDateFormat).setValue(n.settings.commitDateFormat).onChange(async f=>{n.settings.commitDateFormat=f,await n.saveSettings()}));l.descEl.innerHTML=`\n            Specify custom date format. E.g. \"${_m}. See <a href=\"https://momentjs.com\">Moment.js</a> for more formats.`,new V.Setting(r).setName(\"{{hostname}} placeholder replacement\").setDesc(\"Specify custom hostname for every device.\").addText(u=>{var f;return u.setValue((f=n.localStorage.getHostname())!=null?f:\"\").onChange(d=>{n.localStorage.setHostname(d)})}),new V.Setting(r).setName(\"Preview commit message\").addButton(u=>u.setButtonText(\"Preview\").onClick(async()=>{let f=await n.gitManager.formatCommitMessage(n.settings.commitMessage);new V.Notice(`${f}`)})),new V.Setting(r).setName(\"List filenames affected by commit in the commit body\").addToggle(u=>u.setValue(n.settings.listChangedFilesInMessageBody).onChange(async f=>{n.settings.listChangedFilesInMessageBody=f,await n.saveSettings()})),new V.Setting(r).setName(\"Pull\").setHeading(),n.gitManager instanceof Te&&new V.Setting(r).setName(\"Merge strategy\").setDesc(\"Decide how to integrate commits from your remote branch into your local branch.\").addDropdown(u=>{let f={merge:\"Merge\",rebase:\"Rebase\",reset:\"Other sync service (Only updates the HEAD without touching the working directory)\"};u.addOptions(f),u.setValue(n.settings.syncMethod),u.onChange(async d=>{n.settings.syncMethod=d,await n.saveSettings()})}),new V.Setting(r).setName(\"Pull on startup\").setDesc(\"Automatically pull commits when Obsidian starts.\").addToggle(u=>u.setValue(n.settings.autoPullOnBoot).onChange(async f=>{n.settings.autoPullOnBoot=f,await n.saveSettings()})),new V.Setting(r).setName(\"Commit-and-sync\").setDesc(\"Commit-and-sync with default settings means staging everything -> committing -> pulling -> pushing. Ideally this is a single action that you do regularly to keep your local and remote repository in sync.\").setHeading(),s=new V.Setting(r).setName(\"Push on commit-and-sync\").setDesc(`Most of the time you want to push after committing. Turning this off turns a commit-and-sync action into commit ${n.settings.pullBeforePush?\"and pull \":\"\"}only. It will still be called commit-and-sync.`).addToggle(u=>u.setValue(!n.settings.disablePush).onChange(async f=>{n.settings.disablePush=!f,this.display(),await n.saveSettings()})),new V.Setting(r).setName(\"Pull on commit-and-sync\").setDesc(`On commit-and-sync, pull commits as well. Turning this off turns a commit-and-sync action into commit ${n.settings.disablePush?\"\":\"and push \"}only.`).addToggle(u=>u.setValue(n.settings.pullBeforePush).onChange(async f=>{n.settings.pullBeforePush=f,this.display(),await n.saveSettings()})),n.gitManager instanceof Te&&(new V.Setting(r).setName(\"Line author information\").setHeading(),this.addLineAuthorInfoSettings())}new V.Setting(r).setName(\"History view\").setHeading(),new V.Setting(r).setName(\"Show Author\").setDesc(\"Show the author of the commit in the history view.\").addDropdown(l=>{let u={hide:\"Hide\",full:\"Full\",initials:\"Initials\"};l.addOptions(u),l.setValue(n.settings.authorInHistoryView),l.onChange(async f=>{n.settings.authorInHistoryView=f,await n.saveSettings(),await n.refresh()})}),new V.Setting(r).setName(\"Show Date\").setDesc(\"Show the date of the commit in the history view. The {{date}} placeholder format is used to display the date.\").addToggle(l=>l.setValue(n.settings.dateInHistoryView).onChange(async u=>{n.settings.dateInHistoryView=u,await n.saveSettings(),await n.refresh()})),new V.Setting(r).setName(\"Source control view\").setHeading(),new V.Setting(r).setName(\"Automatically refresh source control view on file changes\").setDesc(\"On slower machines this may cause lags. If so, just disable this option.\").addToggle(l=>l.setValue(n.settings.refreshSourceControl).onChange(async u=>{n.settings.refreshSourceControl=u,await n.saveSettings()})),new V.Setting(r).setName(\"Source control view refresh interval\").setDesc(\"Milliseconds to wait after file change before refreshing the Source Control View.\").addText(l=>{l.inputEl.type=\"number\",l.setValue(String(n.settings.refreshSourceControlTimer)),l.setPlaceholder(String(ar.refreshSourceControlTimer)),l.onChange(async u=>{n.settings.refreshSourceControlTimer=Math.max(Number(u),500),await n.saveSettings(),n.setRefreshDebouncer()})}),new V.Setting(r).setName(\"Miscellaneous\").setHeading(),n.gitManager instanceof Te&&new V.Setting(r).setName(\"Diff view style\").setDesc('Set the style for the diff view. Note that the actual diff in \"Split\" mode is not generated by Git, but the editor itself instead so it may differ from the diff generated by Git. One advantage of this is that you can edit the text in that view.').addDropdown(l=>{let u={split:\"Split\",git_unified:\"Unified\"};l.addOptions(u),l.setValue(n.settings.diffStyle),l.onChange(async f=>{n.settings.diffStyle=f,await n.saveSettings()})}),new V.Setting(r).setName(\"Disable notifications\").setDesc(\"Disable notifications for git operations to minimize distraction (refer to status bar for updates). Errors are still shown as notifications even if you enable this setting.\").addToggle(l=>l.setValue(n.settings.disablePopups).onChange(async u=>{n.settings.disablePopups=u,this.display(),await n.saveSettings()})),n.settings.disablePopups||new V.Setting(r).setName(\"Hide notifications for no changes\").setDesc(\"Don't show notifications when there are no changes to commit or push.\").addToggle(l=>l.setValue(n.settings.disablePopupsForNoChanges).onChange(async u=>{n.settings.disablePopupsForNoChanges=u,await n.saveSettings()})),new V.Setting(r).setName(\"Show status bar\").setDesc(\"Obsidian must be restarted for the changes to take affect.\").addToggle(l=>l.setValue(n.settings.showStatusBar).onChange(async u=>{n.settings.showStatusBar=u,await n.saveSettings()})),new V.Setting(r).setName(\"Show stage/unstage button in file menu\").addToggle(l=>l.setValue(n.settings.showFileMenu).onChange(async u=>{n.settings.showFileMenu=u,await n.saveSettings()})),new V.Setting(r).setName(\"Show branch status bar\").setDesc(\"Obsidian must be restarted for the changes to take affect.\").addToggle(l=>l.setValue(n.settings.showBranchStatusBar).onChange(async u=>{n.settings.showBranchStatusBar=u,await n.saveSettings()})),new V.Setting(r).setName(\"Show the count of modified files in the status bar\").addToggle(l=>l.setValue(n.settings.changedFilesInStatusBar).onChange(async u=>{n.settings.changedFilesInStatusBar=u,await n.saveSettings()})),n.gitManager instanceof an?new V.Setting(r).setName(\"Authentication/commit author\").setHeading():new V.Setting(r).setName(\"Commit author\").setHeading(),n.gitManager instanceof an&&new V.Setting(r).setName(\"Username on your git server. E.g. your username on GitHub\").addText(l=>{var u;l.setValue((u=n.localStorage.getUsername())!=null?u:\"\"),l.onChange(f=>{n.localStorage.setUsername(f)})}),n.gitManager instanceof an&&new V.Setting(r).setName(\"Password/Personal access token\").setDesc(\"Type in your password. You won't be able to see it again.\").addText(l=>{l.inputEl.autocapitalize=\"off\",l.inputEl.autocomplete=\"off\",l.inputEl.spellcheck=!1,l.onChange(u=>{n.localStorage.setPassword(u)})}),n.gitReady&&new V.Setting(r).setName(\"Author name for commit\").addText(async l=>{var u;l.setValue((u=await n.gitManager.getConfig(\"user.name\"))!=null?u:\"\"),l.onChange(async f=>{await n.gitManager.setConfig(\"user.name\",f==\"\"?void 0:f)})}),n.gitReady&&new V.Setting(r).setName(\"Author email for commit\").addText(async l=>{var u;l.setValue((u=await n.gitManager.getConfig(\"user.email\"))!=null?u:\"\"),l.onChange(async f=>{await n.gitManager.setConfig(\"user.email\",f==\"\"?void 0:f)})}),new V.Setting(r).setName(\"Advanced\").setDesc(\"These settings usually don't need to be changed, but may be requried for special setups.\").setHeading(),n.gitManager instanceof Te&&(new V.Setting(r).setName(\"Update submodules\").setDesc('\"Commit-and-sync\" and \"pull\" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule.').addToggle(l=>l.setValue(n.settings.updateSubmodules).onChange(async u=>{n.settings.updateSubmodules=u,await n.saveSettings()})),n.settings.updateSubmodules&&new V.Setting(r).setName(\"Submodule recurse checkout/switch\").setDesc(\"Whenever a checkout happens on the root repository, recurse the checkout on the submodules (if the branches exist).\").addToggle(l=>l.setValue(n.settings.submoduleRecurseCheckout).onChange(async u=>{n.settings.submoduleRecurseCheckout=u,await n.saveSettings()}))),n.gitManager instanceof Te&&new V.Setting(r).setName(\"Custom Git binary path\").addText(l=>{var u;l.setValue((u=n.localStorage.getGitPath())!=null?u:\"\"),l.setPlaceholder(\"git\"),l.onChange(f=>{n.localStorage.setGitPath(f),n.gitManager.updateGitPath(f||\"git\").catch(d=>n.displayError(d))})}),n.gitManager instanceof Te&&new V.Setting(r).setName(\"Additional environment variables\").setDesc(\"Use each line for a new environment variable in the format KEY=VALUE .\").addTextArea(l=>{l.setPlaceholder(\"GIT_DIR=/path/to/git/dir\"),l.setValue(n.localStorage.getEnvVars().join(`\n`)),l.onChange(u=>{n.localStorage.setEnvVars(u.split(`\n`))})}),n.gitManager instanceof Te&&new V.Setting(r).setName(\"Additional PATH environment variable paths\").setDesc(\"Use each line for one path\").addTextArea(l=>{l.setValue(n.localStorage.getPATHPaths().join(`\n`)),l.onChange(u=>{n.localStorage.setPATHPaths(u.split(`\n`))})}),n.gitManager instanceof Te&&new V.Setting(r).setName(\"Reload with new environment variables\").setDesc(\"Removing previously added environment variables will not take effect until Obsidian is restarted.\").addButton(l=>{l.setButtonText(\"Reload\"),l.setCta(),l.onClick(async()=>{await n.gitManager.setGitInstance()})}),new V.Setting(r).setName(\"Custom base path (Git repository path)\").setDesc(`\n            Sets the relative path to the vault from which the Git binary should be executed.\n             Mostly used to set the path to the Git repository, which is only required if the Git repository is below the vault root directory. Use \"\\\\\" instead of \"/\" on Windows.\n            `).addText(l=>{l.setValue(n.settings.basePath),l.setPlaceholder(\"directory/directory-with-git-repo\"),l.onChange(async u=>{n.settings.basePath=u,await n.saveSettings(),n.gitManager.updateBasePath(u||\"\").catch(f=>n.displayError(f))})}),new V.Setting(r).setName(\"Custom Git directory path (Instead of '.git')\").setDesc('Requires restart of Obsidian to take effect. Use \"\\\\\" instead of \"/\" on Windows.').addText(l=>{l.setValue(n.settings.gitDir),l.setPlaceholder(\".git\"),l.onChange(async u=>{n.settings.gitDir=u,await n.saveSettings()})}),new V.Setting(r).setName(\"Disable on this device\").setDesc(\"Disables the plugin on this device. This setting is not synced.\").addToggle(l=>l.setValue(n.localStorage.getPluginDisabled()).onChange(u=>{n.localStorage.setPluginDisabled(u),u?n.unloadPlugin():n.init({fromReload:!0}).catch(f=>n.displayError(f)),new V.Notice(\"Obsidian must be restarted for the changes to take affect.\")})),new V.Setting(r).setName(\"Support\").setHeading(),new V.Setting(r).setName(\"Donate\").setDesc(\"If you like this Plugin, consider donating to support continued development.\").addButton(l=>{l.buttonEl.outerHTML=\"<a href='https://ko-fi.com/F1F195IQ5' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi3.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>\"});let o=r.createDiv();o.setAttr(\"align\",\"center\"),o.setAttr(\"style\",\"margin: var(--size-4-2)\");let c=o.createEl(\"button\");if(c.setText(\"Copy Debug Information\"),c.onclick=async()=>{await window.navigator.clipboard.writeText(JSON.stringify({settings:this.plugin.settings,pluginVersion:this.plugin.manifest.version},null,4)),new V.Notice(\"Debug information copied to clipboard. May contain sensitive information!\")},V.Platform.isDesktopApp){let l=r.createDiv();l.setAttr(\"align\",\"center\"),l.setText(`Debugging and logging:\nYou can always see the logs of this and every other plugin by opening the console with`);let u=r.createDiv();u.setAttr(\"align\",\"center\"),u.addClass(\"obsidian-git-shortcuts\"),V.Platform.isMacOS===!0?u.createEl(\"kbd\",{text:\"CMD (\\u2318) + OPTION (\\u2325) + I\"}):u.createEl(\"kbd\",{text:\"CTRL + SHIFT + I\"})}}mayDisableSetting(r,n){n&&(r.setDisabled(n),r.setClass(\"obsidian-git-disabled\"))}configureLineAuthorShowStatus(r){this.settings.lineAuthor.show=r,this.plugin.saveSettings(),r?this.plugin.lineAuthoringFeature.activateFeature():this.plugin.lineAuthoringFeature.deactivateFeature()}async lineAuthorSettingHandler(r,n){this.settings.lineAuthor[r]=n,await this.plugin.saveSettings(),this.plugin.lineAuthoringFeature.refreshLineAuthorViews()}beforeSaveSettings(){let r=this.settings.lineAuthor;r.authorDisplay!==\"hide\"&&(r.lastShownAuthorDisplay=r.authorDisplay),r.dateTimeFormatOptions!==\"hide\"&&(r.lastShownDateTimeFormatOptions=r.dateTimeFormatOptions)}addLineAuthorInfoSettings(){let r=new V.Setting(this.containerEl).setName(\"Show commit authoring information next to each line\");if(this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform()||r.setDesc(\"Only available on desktop currently.\").setDisabled(!0),r.descEl.innerHTML=`\n            <a href=\"${eB}\">Feature guide and quick examples</a></br>\n            The commit hash, author name and authoring date can all be individually toggled.</br>Hide everything, to only show the age-colored sidebar.`,r.addToggle(n=>n.setValue(this.settings.lineAuthor.show).onChange(i=>{this.configureLineAuthorShowStatus(i),this.display()})),this.settings.lineAuthor.show){let n=new V.Setting(this.containerEl).setName(\"Follow movement and copies across files and commits\").setDesc(\"\").addDropdown(a=>{a.addOptions({inactive:\"Do not follow (default)\",\"same-commit\":\"Follow within same commit\",\"all-commits\":\"Follow within all commits (maybe slow)\"}),a.setValue(this.settings.lineAuthor.followMovement),a.onChange(s=>this.lineAuthorSettingHandler(\"followMovement\",s))});if(n.descEl.innerHTML=`\n                By default (deactivated), each line only shows the newest commit where it was changed.\n                <br/>\n                With <i>same commit</i>, cut-copy-paste-ing of text is followed within the same commit and the original commit of authoring will be shown.\n                <br/>\n                With <i>all commits</i>, cut-copy-paste-ing text inbetween multiple commits will be detected.\n                <br/>\n                It uses <a href=\"https://git-scm.com/docs/git-blame\">git-blame</a> and\n                for matches (at least ${zu} characters) within the same (or all) commit(s), <em>the originating</em> commit's information is shown.`,new V.Setting(this.containerEl).setName(\"Show commit hash\").addToggle(a=>{a.setValue(this.settings.lineAuthor.showCommitHash),a.onChange(s=>this.lineAuthorSettingHandler(\"showCommitHash\",s))}),new V.Setting(this.containerEl).setName(\"Author name display\").setDesc(\"If and how the author is displayed\").addDropdown(a=>{let s={hide:\"Hide\",initials:\"Initials (default)\",\"first name\":\"First name\",\"last name\":\"Last name\",full:\"Full name\"};a.addOptions(s),a.setValue(this.settings.lineAuthor.authorDisplay),a.onChange(async o=>this.lineAuthorSettingHandler(\"authorDisplay\",o))}),new V.Setting(this.containerEl).setName(\"Authoring date display\").setDesc(\"If and how the date and time of authoring the line is displayed\").addDropdown(a=>{let s={hide:\"Hide\",date:\"Date (default)\",datetime:\"Date and time\",\"natural language\":\"Natural language\",custom:\"Custom\"};a.addOptions(s),a.setValue(this.settings.lineAuthor.dateTimeFormatOptions),a.onChange(async o=>{await this.lineAuthorSettingHandler(\"dateTimeFormatOptions\",o),this.display()})}),this.settings.lineAuthor.dateTimeFormatOptions===\"custom\"){let a=new V.Setting(this.containerEl);a.setName(\"Custom authoring date format\").addText(s=>{s.setValue(this.settings.lineAuthor.dateTimeFormatCustomString),s.setPlaceholder(\"YYYY-MM-DD HH:mm\"),s.onChange(async o=>{await this.lineAuthorSettingHandler(\"dateTimeFormatCustomString\",o),a.descEl.innerHTML=this.previewCustomDateTimeDescriptionHtml(o)})}),a.descEl.innerHTML=this.previewCustomDateTimeDescriptionHtml(this.settings.lineAuthor.dateTimeFormatCustomString)}new V.Setting(this.containerEl).setName(\"Authoring date display timezone\").addDropdown(a=>{let s={\"viewer-local\":\"My local (default)\",\"author-local\":\"Author's local\",utc0000:\"UTC+0000/Z\"};a.addOptions(s),a.setValue(this.settings.lineAuthor.dateTimeTimezone),a.onChange(async o=>this.lineAuthorSettingHandler(\"dateTimeTimezone\",o))}).descEl.innerHTML=`\n                    The time-zone in which the authoring date should be shown.\n                    Either your local time-zone (default),\n                    the author's time-zone during commit creation or\n                    <a href=\"https://en.wikipedia.org/wiki/UTC%C2%B100:00\">UTC\\xB100:00</a>.\n            `;let i=new V.Setting(this.containerEl).setName(\"Oldest age in coloring\");i.descEl.innerHTML=this.previewOldestAgeDescriptionHtml(this.settings.lineAuthor.coloringMaxAge)[0],i.addText(a=>{a.setPlaceholder(\"1y\"),a.setValue(this.settings.lineAuthor.coloringMaxAge),a.onChange(async s=>{let[o,c]=this.previewOldestAgeDescriptionHtml(s);i.descEl.innerHTML=o,c&&(await this.lineAuthorSettingHandler(\"coloringMaxAge\",s),this.refreshColorSettingsName(\"oldest\"))})}),this.createColorSetting(\"newest\"),this.createColorSetting(\"oldest\"),new V.Setting(this.containerEl).setName(\"Text color\").addText(a=>{a.setValue(this.settings.lineAuthor.textColorCss),a.onChange(async s=>{await this.lineAuthorSettingHandler(\"textColorCss\",s)})}).descEl.innerHTML=`\n                    The CSS color of the gutter text.<br/>\n                    \n                    It is higly recommended to use\n                    <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties\">\n                    CSS variables</a>\n                    defined by themes\n                    (e.g. <pre style=\"display:inline\">var(--text-muted)</pre> or\n                    <pre style=\"display:inline\">var(--text-on-accent)</pre>,\n                    because they automatically adapt to theme changes.<br/>\n\n                    See: <a href=\"https://github.com/obsidian-community/obsidian-theme-template/blob/main/obsidian.css\">\n                    List of available CSS variables in Obsidian\n                    <a/>\n                `,new V.Setting(this.containerEl).setName(\"Ignore whitespace and newlines in changes\").addToggle(a=>{a.setValue(this.settings.lineAuthor.ignoreWhitespace),a.onChange(s=>this.lineAuthorSettingHandler(\"ignoreWhitespace\",s))}).descEl.innerHTML=`\n                    Whitespace and newlines are interpreted as\n                    part of the document and in changes\n                    by default (hence not ignored).\n                    This makes the last line being shown as 'changed'\n                    when a new subsequent line is added,\n                    even if the previously last line's text is the same.\n                    <br>\n                    If you don't care about purely-whitespace changes\n                    (e.g. list nesting / quote indentation changes),\n                    then activating this will provide more meaningful change detection.\n                `}}createColorSetting(r){let n=new V.Setting(this.containerEl).setName(\"\").addText(i=>{let a=i0(r,this.settings.lineAuthor),s=i0(r,ar.lineAuthor);i.setPlaceholder(Gg(s)),i.setValue(Gg(a)),i.onChange(async o=>{let c=lT(o);if(c!==void 0){let l=r===\"newest\"?\"colorNew\":\"colorOld\";await this.lineAuthorSettingHandler(l,c)}this.refreshColorSettingsDesc(r,c)})});this.lineAuthorColorSettings.set(r,n),this.refreshColorSettingsName(r),this.refreshColorSettingsDesc(r,i0(r,this.settings.lineAuthor))}refreshColorSettingsName(r){let n=this.lineAuthorColorSettings.get(r);if(n){let i=r===\"oldest\"?`oldest (${this.settings.lineAuthor.coloringMaxAge} or older)`:\"newest\";n.nameEl.innerText=`Color for ${i} commits`}}refreshColorSettingsDesc(r,n){let i=this.lineAuthorColorSettings.get(r);i&&(i.descEl.innerHTML=this.colorSettingPreviewDescHtml(r,this.settings.lineAuthor,n!==void 0))}colorSettingPreviewDescHtml(r,n,i){let a=i?a0(r,n):\"rgba(127,127,127,0.3)\",s=V.moment.unix(V.moment.now()/1e3).format(\"YYYY-MM-DD\"),o=i?`abcdef Author Name ${s}`:\"invalid color\";return`Supports 'rgb(r,g,b)', 'hsl(h,s,l)', hex (#) and\n            named colors (e.g. 'black', 'purple'). Color preview: ${`<div\n            class=\"line-author-settings-preview\"\n            style=\"background-color: ${a}; width: 30ch;\"\n            >${o}</div>`}`}previewCustomDateTimeDescriptionHtml(r){let n=(0,V.moment)().format(r);return`<a href=\"${Qj}\">Format string</a> to display the authoring date.</br>Currently: ${n}`}previewOldestAgeDescriptionHtml(r){let n=Vf(r);return[`The oldest age in the line author coloring. Everything older will have the same color.\n            </br>Smallest valid age is \"1d\". Currently: ${n!==void 0?`${n.asDays()} days`:\"invalid!\"}`,n]}};function i0(e,t){return e===\"oldest\"?t.colorOld:t.colorNew}function Vf(e){let t=V.moment.duration(\"P\"+e.toUpperCase());return t.isValid()&&t.asDays()&&t.asDays()>=1?t:void 0}function PT(e,t,r){if(!(e===void 0||t===void 0||r===void 0))return`head${e}-obj${t}-path${r}`}var RT=Wf.Annotation.define();function MT(e,t,r){return r.update({annotations:RT.of({key:e,la:t,lineOffsetsFromUnsavedChanges:new Map})})}function tB(e){return e.annotation(RT)}var qs=Wf.StateField.define({create:e=>{},update:(e,t)=>{var r;return(r=tB(t))!=null?r:rB(t,e)},compare:(e,t)=>(e==null?void 0:e.key)===(t==null?void 0:t.key)});function qf(e){var a;let t=CT.sha256.create();if(!e)return t;let{la:r,key:n,lineOffsetsFromUnsavedChanges:i}=e;t.update(r===\"untracked\"?\"t\":\"f\"),t.update(n);for(let[s,o]of(a=i.entries())!=null?a:[])t.update([s,o]);return t}var Dr={get:void 0,save:void 0};function OT(e,t){Dr.get=e,Dr.save=t}function Yf(e){var t,r;return(r=(t=Vf(e.coloringMaxAge))==null?void 0:t.asDays())!=null?r:Vf(ar.lineAuthor.coloringMaxAge).asDays()}function rB(e,t){if(t)return e.changes.empty||e.changes.iterChanges((r,n,i,a)=>{var p;let s=e.startState.doc,{newDoc:o}=e,c=s.lineAt(r).number,l=s.lineAt(n).number,u=o.lineAt(i).number,f=o.lineAt(a).number,d=l-c+1,h=f-u+1;for(let m=u;m<=f;m++){let v=(p=t.lineOffsetsFromUnsavedChanges.get(m))!=null?p:0,y=f===m,b=h-d;y&&(v+=b),t.lineOffsetsFromUnsavedChanges.set(m,v)}}),t}var s0=class{constructor(t){this.state=t;this.subscribeMe()}notifyLineAuthoring(t,r){if(this.view===void 0){console.warn(`Git: View is not defined for editor cache key. Unforeseen situation. id: ${t}`);return}let n=this.view.state,i=MT(t,r,n);this.view.dispatch(i)}updateToNewState(t){let r=this.lastSeenPath&&this.filepath!=this.lastSeenPath;return this.state=t,r&&(this.unsubscribeMe(this.lastSeenPath),this.subscribeMe()),this}removeIfStale(){this.view.destroyed&&this.unsubscribeMe(this.lastSeenPath)}subscribeMe(){this.filepath!==void 0&&(Ws.ifFilepathDefinedTransformSubscribers(this.filepath,t=>t.add(this)),this.lastSeenPath=this.filepath)}unsubscribeMe(t){Ws.ifFilepathDefinedTransformSubscribers(t,r=>r.delete(this))}get filepath(){var t,r;return(r=(t=this.state.field(Xf.editorInfoField))==null?void 0:t.file)==null?void 0:r.path}get view(){return this.state.field(Xf.editorEditorField)}},FT=IT.StateField.define({create:e=>new s0(e),update:(e,t)=>e.updateToNewState(t.state),compare:(e,t)=>e===t});g();function $T(){Ys=void 0,o0=[],Zf=0,Jf.clear(),Qf.clear(),Xs.clear()}var Ys,Kf=()=>Ys;function LT(e,t){var i;let r=t.length;if(r<((i=Ys==null?void 0:Ys.length)!=null?i:0))return;Ys={gutter:e,length:r,text:t};let n=Dr.get();r!==n.gutterSpacingFallbackLength&&(n.gutterSpacingFallbackLength=r,Dr.save(n))}var o0=[],nB=15,Zf=0;function DT(e){o0[Zf]=e,Zf=(Zf+1)%nB}function NT(){return uT(o0)}var Jf=new Map,Qf=new Map,Xs=new Set;g();var KT=require(\"@codemirror/state\"),JT=require(\"@codemirror/view\");g();var f0=require(\"@codemirror/view\"),qT=ze(Xg()),rd=require(\"obsidian\");g();g();var ed={x:-10,y:-10};function jT(){ed.x===-10&&window.addEventListener(\"mousedown\",e=>{ed.x=e.clientX,ed.y=e.clientY})}function BT(){for(let e of Xs)if(iB(e,ed))return e}function iB(e,t){let{x:r,y:n,width:i,height:a}=e.getBoundingClientRect();return r<=t.x&&t.x<=r+i&&n<=t.y&&t.y<=n+a}g();var Yl={};var HT=\"data-commit\";function UT(e,t,r){if(t.hasFocus())return;let n=BT();if(!n)return;let i=sB(n);i&&(!i.isZeroCommit&&!i.isWaitingGutter&&aB(i,e),l0(\"showCommitHash\",e),l0(\"authorDisplay\",e),l0(\"dateTimeFormatOptions\",e))}function aB(e,t){t.addItem(r=>r.setTitle(\"Copy commit hash\").setIcon(\"copy\").setSection(\"obs-git-line-author-copy\").onClick(n=>navigator.clipboard.writeText(e.hash)))}function l0(e,t){var c,l;let r,n,i=Yl.plugin.settings.lineAuthor,a=i[e],s=typeof a==\"boolean\"?a:a!==\"hide\",o=ar.lineAuthor[e];if(e===\"showCommitHash\")r=\"Show commit hash\",n=a;else if(e===\"authorDisplay\"){let u=(c=i.lastShownAuthorDisplay)!=null?c:o;r=\"Show author \"+(s?a:u),n=s?\"hide\":u}else if(e===\"dateTimeFormatOptions\"){let u=(l=i.lastShownDateTimeFormatOptions)!=null?l:o;r=\"Show \"+(s?a:u),r+=r.contains(\"date\")?\"\":\" date\",n=s?\"hide\":u}else Oi(e);t.addItem(u=>u.setTitle(r).setSection(\"obs-git-line-author-configure\").setChecked(s).onClick(f=>{var d,h;return(h=(d=Yl.plugin)==null?void 0:d.settingsTab)==null?void 0:h.lineAuthorSettingHandler(e,n)}))}function GT(e,t,r){r.setAttr(HT,JSON.stringify({hash:e.hash,isZeroCommit:e.isZeroCommit,isWaitingGutter:t}))}function sB(e){let t=e.getAttr(HT);return t?JSON.parse(t):void 0}g();function a0(e,t){return e===\"oldest\"?td(0,!1,t).color:td(void 0,!0,t).color}function td(e,t,r){let n=Yf(r),i=Date.now()/1e3,a=e!=null?e:0,o=(t?0:i-a)/60/60/24,c=Math.pow(Math.clamp(o/n,0,1),1/2.3),l=oB(),u=r.colorNew,f=r.colorOld,d=l?.4:1,h=c0(u.r,f.r,c)*d,p=c0(u.g,f.g,c)*d,m=c0(u.b,f.b,c)*d;return{color:`rgba(${h},${p},${m},${l?.75:.25})`,daysSinceCommit:o}}function c0(e,t,r){return e+(t-e)*r}function oB(){var e;return((e=window.app)==null?void 0:e.getTheme())===\"obsidian\"}function zT(e){document.body.style.setProperty(\"--obs-git-gutter-text\",e.textColorCss)}g();function VT(e,t,r){let n;for(let i=t;i<=r;i++){let a=e.hashPerLine[i],s=e.commits.get(a);(!n||s.isZeroCommit||lB(s,n))&&(n=s)}return n}function lB(e,t){var i,a,s,o;let r=(a=(i=e.author)==null?void 0:i.epochSeconds)!=null?a:0,n=(o=(s=t.author)==null?void 0:s.epochSeconds)!=null?o:0;return r>n}var WT=\"-\",cB=\"+\",uB=3,fB=\"*\",dB=/\\S/g,hB=\"%\",Zs=class e extends f0.GutterMarker{constructor(r){super();this.text=r}eq(r){return r instanceof e&&this.text===r.text}toDOM(){return document.createTextNode(this.text)}destroy(r){document.body.contains(r)||r.remove()}},u0=class extends f0.GutterMarker{constructor(r,n,i,a,s,o){super();this.lineAuthoring=r;this.startLine=n;this.endLine=i;this.key=a;this.settings=s;this.options=o;this.point=!1;this.elementClass=\"obs-git-blame-gutter\"}eq(r){return this.key===(r==null?void 0:r.key)&&this.startLine===(r==null?void 0:r.startLine)&&this.endLine===(r==null?void 0:r.endLine)&&(this==null?void 0:this.options)===(r==null?void 0:r.options)}toDOM(){var r;return this.precomputedDomProvider=(r=this.precomputedDomProvider)!=null?r:this.computeDom(),this.precomputedDomProvider()}destroy(r){document.body.contains(r)||(r.remove(),Xs.delete(r))}computeDom(){let r=VT(this.lineAuthoring,this.startLine,this.endLine),n=r.isZeroCommit?\"\":this.renderNonZeroCommit(r);return!r.isZeroCommit&&this.options!==\"waiting-for-result\"?LT(this,n):n=this.adaptTextForFakeCommit(r,n,this.options),this.createHtmlNode(r,n,this.options===\"waiting-for-result\")}createHtmlNode(r,n,i){var l;let a=window.createDiv();a.innerText=n;let{color:s,daysSinceCommit:o}=td((l=r==null?void 0:r.author)==null?void 0:l.epochSeconds,r==null?void 0:r.isZeroCommit,this.settings);a.style.backgroundColor=s,GT(r,i,a);function c(){let u=a.cloneNode(!0);return Xs.add(u),i||DT(o),u}return c}renderNonZeroCommit(r){let n=this.settings.showCommitHash?this.renderHash(r):\"\",i=this.settings.authorDisplay===\"hide\"?\"\":`${this.renderAuthorName(r,this.settings.authorDisplay)}`,a=this.settings.dateTimeFormatOptions===\"hide\"?\"\":`${this.renderAuthoringDate(r,this.settings.dateTimeFormatOptions,this.settings.dateTimeFormatCustomString,this.settings.dateTimeTimezone)}`;return[n,i,a].filter(o=>o.length>=1).join(\" \")}renderHash(r){return r.hash.substring(0,6)}renderAuthorName(r,n){var o,c,l,u;let i=(c=(o=r==null?void 0:r.author)==null?void 0:o.name)!=null?c:\"\",a=i.split(\" \").filter(f=>f.length>=1),s;switch(n){case\"initials\":s=a.map(f=>f[0].toUpperCase()).join(\"\");break;case\"first name\":s=(l=a.first())!=null?l:WT;break;case\"last name\":s=(u=a.last())!=null?u:WT;break;case\"full\":s=i;break;default:return Oi(n)}return fT(r==null?void 0:r.author,r==null?void 0:r.committer)||(s=s+fB),s}renderAuthoringDate(r,n,i,a){var l;let s=\"?\";if(((l=r==null?void 0:r.author)==null?void 0:l.epochSeconds)===void 0)return s;let o;switch(n){case\"date\":o=Gu;break;case\"datetime\":o=bm;break;case\"custom\":o=i;break;case\"natural language\":o=u=>{let f=u.diff((0,rd.moment)());return rd.moment.duration(f).humanize(!0)};break;default:return Oi(n)}let c=rd.moment.unix(r.author.epochSeconds);switch(a){case\"viewer-local\":break;case\"author-local\":c=c.utcOffset(r.author.tz),typeof o==\"string\"&&(o+=\" Z\");break;case\"utc0000\":c=c.utc(),typeof o==\"string\"&&(o+=\"[Z]\");break;default:return Oi(a)}return typeof o==\"string\"?c.format(o):o(c)}adaptTextForFakeCommit(r,n,i){var c,l,u,f;let a=(l=(c=Kf())==null?void 0:c.text)!=null?l:n,s=i!==\"waiting-for-result\"&&r.isZeroCommit?cB:hB;n=a.replace(dB,s);let o=(f=(u=Dr.get())==null?void 0:u.gutterSpacingFallbackLength)!=null?f:n.length;if(n=dT(n,o,s),i!==\"waiting-for-result\"&&r.isZeroCommit){let d=Math.min(o,uB);n=hT(n,o-d)}return n}};function xa(e,t,r,n,i,a){let s=qT.sha256.create();s.update(Object.values(i).join(\",\")),s.update(`s${t}-e${r}-k${n}-o${a}`);let o=s.hex(),c=Jf.get(o);if(c)return c;let l=new u0(e,t,r,n,i,a);return Jf.set(o,l),l}g();var YT=require(\"obsidian\");function d0(){var t,r;let e=(r=(t=Dr.get())==null?void 0:t.gutterSpacingFallbackLength)!=null?r:ar.lineAuthor.gutterSpacingFallbackLength;return new Zs(Array(e).fill(\"-\").join(\"\"))}function h0(e){let{lineAuthoring:t,ageForInitialRender:r}=pB(e);return xa(t,1,1,\"initialGutter\"+r,e,\"waiting-for-result\")}function pB(e){var a;let t=(a=NT())!=null?a:Yf(e)*.25,r=(0,YT.moment)().add(-t,\"days\"),n={name:\"\",epochSeconds:cT(r),tz:\"+0000\"},i={hash:\"waiting-for-result\",author:n,committer:n,isZeroCommit:!1};return{lineAuthoring:{hashPerLine:[void 0,\"waiting-for-result\"],commits:new Map([[\"waiting-for-result\",i]])},ageForInitialRender:t}}g();function XT(e,t){return xa({hashPerLine:[void 0,\"000000\"],commits:new Map([[\"000000\",wT]])},1,1,e,t)}var p0=new Zs(\"\"),QT=(0,JT.gutter)({class:\"line-author-gutter-container\",markers(e){let t=e.state.field(qs,!1);return mB(e,t)},lineMarkerChange(e){let t=qf(e.state.field(qs));return qf(e.startState.field(qs))!==t},renderEmptyElements:!0,initialSpacer:e=>(ZT(e),d0()),updateSpacer:(e,t)=>{var r,n;return ZT(t.view),(n=(r=Kf())==null?void 0:r.gutter)!=null?n:d0()}});function mB(e,t){let r=qf(t),n=e.state.doc,i=new Map;for(let u=1;u<=n.lines;u++){let f=n.line(u).from,d=e.lineBlockAt(f).to;i.set(u,[f,d]),r.update([f,d,0])}let a=Dr.get();r.update(\"s\"+Object.values(Dr).join(\",\"));let s=r.hex(),o=Qf.get(s);if(o)return o;let{result:c,allowCache:l}=gB(n,i,a,t);return l&&Qf.set(s,c),c}function gB(e,t,r,n){let i=!0,a=e.lines,s=[];function o(f,d,h){return s.push(h.range(f,d))}let c=vB(a,n),l=e.length===0,u=e.iterLines(a,a+1).next().value===\"\";for(let f=1;f<=a;f++){let[d,h]=t.get(f),p=e.lineAt(h).number;if(l){o(d,h,p0);continue}if(f===a&&u){o(d,h,p0);continue}if(n===void 0){o(d,h,h0(r)),i=!1;continue}let{key:m,la:v}=n;if(v===\"untracked\"){o(d,h,XT(v,r));continue}let y=v.hashPerLine.length-1,b=c[f],x=c[p];if(x&&x>y&&o(d,h,p0),b!==void 0&&zg(1,b,y)&&x!==void 0&&zg(1,x,y)){o(d,h,xa(v,b,x,m,r));continue}if(y<1){o(d,h,h0(r)),i=!1;continue}let E=Math.clamp(b!=null?b:f,1,y),_=Math.clamp(x!=null?x:p,1,y);o(d,h,xa(v,E,_,m+\"computing\",r,\"waiting-for-result\"))}return{result:KT.RangeSet.of(s,!0),allowCache:i}}function vB(e,t){if(!(t!=null&&t.lineOffsetsFromUnsavedChanges))return Array.from(new Array(e+1),i=>i);let r=[void 0],n=0;for(let i=1;i<=e;i++){let a=t.lineOffsetsFromUnsavedChanges.get(i);n+=a!=null?a:0,r[i]=a===void 0?i-n:void 0}return r}function ZT(e){e.dom.querySelectorAll(\".cm-gutters\").forEach(r=>{r!=null&&r.style&&(r.style.marginLeft||(r.style.marginLeft=\"unset\"))})}var nd=class{constructor(t){this.plugin=t;this.lineAuthorings=new Map}async trackChanged(t){return this.trackChangedHelper(t).catch(r=>(console.warn(\"Git: Error in trackChanged.\"+r),Promise.reject(r)))}async trackChangedHelper(t){if(t){if(t.path===void 0){console.warn(\"Git: Attempted to track change of undefined filepath. Unforeseen situation.\");return}return this.computeLineAuthorInfo(t.path)}}destroy(){this.lineAuthorings.clear(),Ws.clear(),$T()}async computeLineAuthorInfo(t){let r=this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform().gitManager,n=await r.submoduleAwareHeadRevisonInContainingDirectory(t),i=await r.hashObject(t),a=PT(n,i,t);if(a!==void 0){if(!this.lineAuthorings.has(a)){let s=await r.blame(t,this.plugin.settings.lineAuthor.followMovement,this.plugin.settings.lineAuthor.ignoreWhitespace);this.lineAuthorings.set(a,s)}this.notifyComputationResultToSubscribers(t,a)}}notifyComputationResultToSubscribers(t,r){Ws.ifFilepathDefinedTransformSubscribers(t,n=>n.forEach(i=>i.notifyLineAuthoring(r,this.lineAuthorings.get(r))))}},tC=eC.Prec.high([FT,qs,QT]);var id=class{constructor(t){this.plg=t;this.codeMirrorExtensions=[];this.handleWorkspaceLeaf=t=>{if(!this.lineAuthorInfoProvider){console.warn(\"Git: undefined lineAuthorInfoProvider. Unexpected situation.\");return}let r=t==null?void 0:t.view;!(r instanceof Sa.MarkdownView)||r.file==null||(r==null?void 0:r.allowNoFile)===!0||this.lineAuthorInfoProvider.trackChanged(r.file).catch(console.error)}}onLoadPlugin(){this.plg.registerEditorExtension(this.codeMirrorExtensions),OT(()=>this.plg.settings.lineAuthor,t=>{this.plg.settings.lineAuthor=t,this.plg.saveSettings()})}conditionallyActivateBySettings(){this.plg.settings.lineAuthor.show&&this.activateFeature()}activateFeature(){try{if(!this.isAvailableOnCurrentPlatform().available)return;zT(this.plg.settings.lineAuthor),this.lineAuthorInfoProvider=new nd(this.plg),this.createEventHandlers(),this.activateCodeMirrorExtensions(),console.log(this.plg.manifest.name+\": Enabled line authoring.\")}catch(t){console.warn(\"Git: Error while loading line authoring feature.\",t),this.deactivateFeature()}}deactivateFeature(){var t;this.destroyEventHandlers(),this.deactivateCodeMirrorExtensions(),(t=this.lineAuthorInfoProvider)==null||t.destroy(),this.lineAuthorInfoProvider=void 0,console.log(this.plg.manifest.name+\": Disabled line authoring.\")}isAvailableOnCurrentPlatform(){return{available:this.plg.useSimpleGit&&Sa.Platform.isDesktopApp,gitManager:this.plg.gitManager instanceof Te?this.plg.gitManager:void 0}}refreshLineAuthorViews(){this.plg.settings.lineAuthor.show&&(this.deactivateFeature(),this.activateFeature())}activateCodeMirrorExtensions(){this.codeMirrorExtensions.push(tC),this.plg.app.workspace.updateOptions(),this.plg.app.workspace.iterateAllLeaves(this.handleWorkspaceLeaf)}deactivateCodeMirrorExtensions(){for(let t of this.codeMirrorExtensions)this.codeMirrorExtensions.remove(t);this.plg.app.workspace.updateOptions()}createEventHandlers(){this.gutterContextMenuEvent=this.createGutterContextMenuHandler(),this.fileOpenEvent=this.createFileOpenEvent(),this.workspaceLeafChangeEvent=this.createWorkspaceLeafChangeEvent(),this.fileModificationEvent=this.createVaultFileModificationHandler(),this.refreshOnCssChangeEvent=this.createCssRefreshHandler(),this.fileRenameEvent=this.createFileRenameEvent(),jT(),this.plg.registerEvent(this.gutterContextMenuEvent),this.plg.registerEvent(this.refreshOnCssChangeEvent),this.plg.registerEvent(this.fileOpenEvent),this.plg.registerEvent(this.workspaceLeafChangeEvent),this.plg.registerEvent(this.fileModificationEvent),this.plg.registerEvent(this.fileRenameEvent)}destroyEventHandlers(){this.plg.app.workspace.offref(this.refreshOnCssChangeEvent),this.plg.app.workspace.offref(this.fileOpenEvent),this.plg.app.workspace.offref(this.workspaceLeafChangeEvent),this.plg.app.workspace.offref(this.refreshOnCssChangeEvent),this.plg.app.vault.offref(this.fileRenameEvent),this.plg.app.workspace.offref(this.gutterContextMenuEvent)}createFileOpenEvent(){return this.plg.app.workspace.on(\"file-open\",t=>{var r;return void((r=this.lineAuthorInfoProvider)==null?void 0:r.trackChanged(t).catch(console.error))})}createWorkspaceLeafChangeEvent(){return this.plg.app.workspace.on(\"active-leaf-change\",this.handleWorkspaceLeaf)}createFileRenameEvent(){return this.plg.app.vault.on(\"rename\",(t,r)=>{var n;return t instanceof Sa.TFile&&((n=this.lineAuthorInfoProvider)==null?void 0:n.trackChanged(t))})}createVaultFileModificationHandler(){return this.plg.app.vault.on(\"modify\",t=>{var r;return t instanceof Sa.TFile&&((r=this.lineAuthorInfoProvider)==null?void 0:r.trackChanged(t))})}createCssRefreshHandler(){return this.plg.app.workspace.on(\"css-change\",()=>this.refreshLineAuthorViews())}createGutterContextMenuHandler(){return this.plg.app.workspace.on(\"editor-menu\",UT)}};g();var ad=class{constructor(t){this.plugin=t;this.tasks=[]}addTask(t,r){this.tasks.push({task:t,onFinished:r!=null?r:()=>{}}),this.tasks.length===1&&this.handleTask()}handleTask(){if(this.tasks.length>0){let t=this.tasks[0];t.task().then(r=>{t.onFinished(r),this.tasks.shift(),this.handleTask()},r=>{this.plugin.displayError(r),t.onFinished(void 0),this.tasks.shift(),this.handleTask()})}}clear(){this.tasks=[]}};g();var Nr=require(\"obsidian\");var sd=class{constructor(t,r){this.statusBarEl=t;this.plugin=r;this.messages=[];this.base=\"obsidian-git-statusbar-\";this.statusBarEl.setAttribute(\"data-tooltip-position\",\"top\"),r.registerEvent(r.app.workspace.on(\"obsidian-git:refreshed\",()=>{this.refreshCommitTimestamp().catch(console.error)}))}displayMessage(t,r){this.messages.push({message:`Git: ${t.slice(0,100)}`,timeout:r}),this.display()}display(){this.messages.length>0&&!this.currentMessage?(this.currentMessage=this.messages.shift(),this.statusBarEl.addClass(this.base+\"message\"),this.statusBarEl.ariaLabel=\"\",this.statusBarEl.setText(this.currentMessage.message),this.lastMessageTimestamp=Date.now()):this.currentMessage?Date.now()-this.lastMessageTimestamp>=this.currentMessage.timeout&&(this.currentMessage=null,this.lastMessageTimestamp=null):this.displayState()}displayState(){switch((this.statusBarEl.getText().length>3||!this.statusBarEl.hasChildNodes())&&(this.statusBarEl.empty(),this.conflictEl=this.statusBarEl.createDiv(),this.conflictEl.setAttribute(\"data-tooltip-position\",\"top\"),this.conflictEl.style.float=\"left\",this.iconEl=this.statusBarEl.createDiv(),this.iconEl.style.float=\"left\",this.textEl=this.statusBarEl.createDiv(),this.textEl.style.float=\"right\",this.textEl.style.marginLeft=\"5px\"),this.plugin.localStorage.getConflict()?((0,Nr.setIcon)(this.conflictEl,\"alert-circle\"),this.conflictEl.ariaLabel=\"You have merge conflicts. Resolve them and commit afterwards.\",this.conflictEl.style.marginRight=\"5px\",this.conflictEl.addClass(this.base+\"conflict\")):(this.conflictEl.empty(),this.conflictEl.style.marginRight=\"\"),this.plugin.state.gitAction){case 0:this.displayFromNow();break;case 1:this.statusBarEl.ariaLabel=\"Checking repository status...\",(0,Nr.setIcon)(this.iconEl,\"refresh-cw\"),this.statusBarEl.addClass(this.base+\"status\");break;case 3:this.statusBarEl.ariaLabel=\"Adding files...\",(0,Nr.setIcon)(this.iconEl,\"archive\"),this.statusBarEl.addClass(this.base+\"add\");break;case 4:this.statusBarEl.ariaLabel=\"Committing changes...\",(0,Nr.setIcon)(this.iconEl,\"git-commit\"),this.statusBarEl.addClass(this.base+\"commit\");break;case 5:this.statusBarEl.ariaLabel=\"Pushing changes...\",(0,Nr.setIcon)(this.iconEl,\"upload\"),this.statusBarEl.addClass(this.base+\"push\");break;case 2:this.statusBarEl.ariaLabel=\"Pulling changes...\",(0,Nr.setIcon)(this.iconEl,\"download\"),this.statusBarEl.addClass(this.base+\"pull\");break;default:this.statusBarEl.ariaLabel=\"Failed on initialization!\",(0,Nr.setIcon)(this.iconEl,\"alert-triangle\"),this.statusBarEl.addClass(this.base+\"failed-init\");break}}displayFromNow(){var n;let t=this.lastCommitTimestamp,r=this.plugin.state.offlineMode;if(t){let i=(0,Nr.moment)(t).fromNow();this.statusBarEl.ariaLabel=`${r?\"Offline: \":\"\"}Last Commit: ${i}`,(n=this.unPushedCommits)!=null&&n&&(this.statusBarEl.ariaLabel+=`\n(${this.unPushedCommits} unpushed commits)`)}else this.statusBarEl.ariaLabel=r?\"Git is offline\":\"Git is ready\";r?(0,Nr.setIcon)(this.iconEl,\"globe\"):(0,Nr.setIcon)(this.iconEl,\"check\"),this.plugin.settings.changedFilesInStatusBar&&this.plugin.cachedStatus&&this.textEl.setText(this.plugin.cachedStatus.changed.length.toString()),this.statusBarEl.addClass(this.base+\"idle\")}async refreshCommitTimestamp(){this.lastCommitTimestamp=await this.plugin.gitManager.getLastCommitTime(),this.unPushedCommits=await this.plugin.gitManager.getUnpushedCommits()}remove(){this.statusBarEl.remove()}};g();var ld=require(\"obsidian\"),od=class extends ld.SuggestModal{constructor(r){super(r.app);this.plugin=r;this.resolve=null;this.setPlaceholder(\"Type your message and select optional the version with the added date.\")}openAndGetResult(){return new Promise(r=>{this.resolve=r,this.open()})}onClose(){new Promise(r=>setTimeout(r,10)).then(()=>{this.resolve&&this.resolve(void 0)})}getSuggestions(r){let n=(0,ld.moment)().format(this.plugin.settings.commitDateFormat);return r==\"\"&&(r=\"...\"),[r,`${n}: ${r}`,`${r}: ${n}`]}renderSuggestion(r,n){n.innerText=r}onChooseSuggestion(r,n){this.resolve&&this.resolve(r)}};g();var rC=require(\"obsidian\"),Xl=class{constructor(t){this.plugin=t}saveLastAuto(t,r){r===\"backup\"?this.plugin.localStorage.setLastAutoBackup(t.toString()):r===\"pull\"?this.plugin.localStorage.setLastAutoPull(t.toString()):r===\"push\"&&this.plugin.localStorage.setLastAutoPush(t.toString())}loadLastAuto(){var t,r,n;return{backup:new Date((t=this.plugin.localStorage.getLastAutoBackup())!=null?t:\"\"),pull:new Date((r=this.plugin.localStorage.getLastAutoPull())!=null?r:\"\"),push:new Date((n=this.plugin.localStorage.getLastAutoPush())!=null?n:\"\")}}async init(){await this.setUpAutoCommitAndSync();let t=this.loadLastAuto();if(this.plugin.settings.differentIntervalCommitAndPush&&this.plugin.settings.autoPushInterval>0){let r=this.diff(this.plugin.settings.autoPushInterval,t.push);this.startAutoPush(r)}if(this.plugin.settings.autoPullInterval>0){let r=this.diff(this.plugin.settings.autoPullInterval,t.pull);this.startAutoPull(r)}}unload(){this.clearAutoPull(),this.clearAutoPush(),this.clearAutoCommitAndSync()}reload(...t){t.contains(\"commit\")&&(this.clearAutoCommitAndSync(),this.plugin.settings.autoSaveInterval>0&&this.startAutoCommitAndSync(this.plugin.settings.autoSaveInterval)),t.contains(\"push\")&&(this.clearAutoPush(),this.plugin.settings.differentIntervalCommitAndPush&&this.plugin.settings.autoPushInterval>0&&this.startAutoPush(this.plugin.settings.autoPushInterval)),t.contains(\"pull\")&&(this.clearAutoPull(),this.plugin.settings.autoPullInterval>0&&this.startAutoPull(this.plugin.settings.autoPullInterval))}async setUpAutoCommitAndSync(){if(this.plugin.settings.setLastSaveToLastCommit){this.clearAutoCommitAndSync();let t=await this.plugin.gitManager.getLastCommitTime();t&&this.saveLastAuto(t,\"backup\")}if(!this.timeoutIDCommitAndSync&&!this.plugin.autoCommitDebouncer){let t=this.loadLastAuto();if(this.plugin.settings.autoSaveInterval>0){let r=this.diff(this.plugin.settings.autoSaveInterval,t.backup);this.startAutoCommitAndSync(r)}}}startAutoCommitAndSync(t){let r=(t!=null?t:this.plugin.settings.autoSaveInterval)*6e4;this.plugin.settings.autoBackupAfterFileChange?t===0?this.doAutoCommitAndSync():this.plugin.autoCommitDebouncer=(0,rC.debounce)(()=>this.doAutoCommitAndSync(),r,!0):(r>2147483647&&(r=2147483647),this.timeoutIDCommitAndSync=window.setTimeout(()=>this.doAutoCommitAndSync(),r))}doAutoCommitAndSync(){this.plugin.promiseQueue.addTask(async()=>{if(this.plugin.settings.setLastSaveToLastCommit){let t=await this.plugin.gitManager.getLastCommitTime();if(t){this.saveLastAuto(t,\"backup\");let r=this.diff(this.plugin.settings.autoSaveInterval,t);if(r>0)return this.startAutoCommitAndSync(r),!1}}return this.plugin.settings.differentIntervalCommitAndPush?await this.plugin.commit({fromAuto:!0}):await this.plugin.commitAndSync(!0),!0},t=>{t!==!1&&(this.saveLastAuto(new Date,\"backup\"),this.startAutoCommitAndSync())})}startAutoPull(t){let r=(t!=null?t:this.plugin.settings.autoPullInterval)*6e4;r>2147483647&&(r=2147483647),this.timeoutIDPull=window.setTimeout(()=>this.doAutoPull(),r)}doAutoPull(){this.plugin.promiseQueue.addTask(()=>this.plugin.pullChangesFromRemote(),()=>{this.saveLastAuto(new Date,\"pull\"),this.startAutoPull()})}startAutoPush(t){let r=(t!=null?t:this.plugin.settings.autoPushInterval)*6e4;r>2147483647&&(r=2147483647),this.timeoutIDPush=window.setTimeout(()=>this.doAutoPush(),r)}doAutoPush(){this.plugin.promiseQueue.addTask(()=>this.plugin.push(),()=>{this.saveLastAuto(new Date,\"push\"),this.startAutoPush()})}clearAutoCommitAndSync(){var r;let t=!1;return this.timeoutIDCommitAndSync&&(window.clearTimeout(this.timeoutIDCommitAndSync),this.timeoutIDCommitAndSync=void 0,t=!0),this.plugin.autoCommitDebouncer&&((r=this.plugin.autoCommitDebouncer)==null||r.cancel(),this.plugin.autoCommitDebouncer=void 0,t=!0),t}clearAutoPull(){return this.timeoutIDPull?(window.clearTimeout(this.timeoutIDPull),this.timeoutIDPull=void 0,!0):!1}clearAutoPush(){return this.timeoutIDPush?(window.clearTimeout(this.timeoutIDPush),this.timeoutIDPush=void 0,!0):!1}diff(t,r){let i=t-Math.round((new Date().getTime()-r.getTime())/1e3/60);return Math.max(0,i)}};g();var Kl=require(\"obsidian\");g();var Zl=require(\"obsidian\");async function nC(e,t,r){let n=await aC(t,r);if(n.result===\"failure\"){new Zl.Notice(n.reason);return}let{isGitHub:i,branch:a,repo:s,user:o,filePath:c}=n;if(i){let l=e.getCursor(\"from\").line+1,u=e.getCursor(\"to\").line+1;l===u?window.open(`https://github.com/${o}/${s}/blob/${a}/${c}?plain=1#L${l}`):window.open(`https://github.com/${o}/${s}/blob/${a}/${c}?plain=1#L${l}-L${u}`)}else new Zl.Notice(\"It seems like you are not using GitHub\")}async function iC(e,t){let r=await aC(e,t);if(r.result===\"failure\"){new Zl.Notice(r.reason);return}let{isGitHub:n,branch:i,repo:a,user:s,filePath:o}=r;n?window.open(`https://github.com/${s}/${a}/commits/${i}/${o}`):new Zl.Notice(\"It seems like you are not using GitHub\")}async function aC(e,t){let r=await t.branchInfo(),n=r.tracking,i=r.current,a,s=t.getRelativeRepoPath(e.path);if(t instanceof Te){let c=await t.getSubmoduleOfFile(t.getRelativeRepoPath(e.path));if(c){s=c.relativeFilepath;let l=await t.git.cwd({path:c.submodule,root:!1}).status();if(n=l.tracking||void 0,i=l.current||void 0,n){let u=n.substring(0,n.indexOf(\"/\")),f=await t.git.cwd({path:c.submodule,root:!1}).getConfig(`remote.${u}.url`,\"local\");if(f.value!=null)a=f.value;else return{result:\"failure\",reason:\"Failed to get remote url of submodule\"}}}}if(n==null)return{result:\"failure\",reason:\"Remote branch is not configured\"};if(i==null)return{result:\"failure\",reason:\"Failed to get current branch name\"};if(a==null){let c=n.substring(0,n.indexOf(\"/\"));if(a=await t.getConfig(`remote.${c}.url`),a==null)return{result:\"failure\",reason:\"Failed to get remote url\"}}let o=a.match(/(?:^https:\\/\\/github\\.com\\/(.+)\\/(.+?)(?:\\.git)?$)|(?:^[a-zA-Z]+@github\\.com:(.+)\\/(.+?)(?:\\.git)?$)/);if(o==null)return{result:\"failure\",reason:\"Could not parse remote url\"};{let[c,l,u,f,d]=o;return{result:\"success\",isGitHub:!!c,repo:u||d,user:l||f,branch:i,filePath:s}}}g();var sC=require(\"obsidian\"),cd=class extends sC.FuzzySuggestModal{constructor(t,r){super(t.app),this.plugin=t,this.changedFiles=r,this.setPlaceholder(\"Not supported files will be opened by default app!\")}getItems(){return this.changedFiles}getItemText(t){if(t.index==\"U\"&&t.workingDir==\"U\")return`Untracked | ${t.vaultPath}`;let r=\"\",n=\"\";return t.workingDir!=\" \"&&(r=`Working Dir: ${t.workingDir} `),t.index!=\" \"&&(n=`Index: ${t.index}`),`${r}${n} | ${t.vaultPath}`}onChooseItem(t,r){this.plugin.app.metadataCache.getFirstLinkpathDest(t.vaultPath,\"\")==null?this.app.openWithDefaultApp(t.vaultPath):this.plugin.app.workspace.openLinkText(t.vaultPath,\"/\")}};g();var oC=require(\"obsidian\"),ud=class extends oC.Modal{constructor(r,n){super(r);this.content=n;this.resolve=null}openAndGetReslt(){return new Promise(r=>{this.resolve=r,this.open()})}onOpen(){let{contentEl:r,titleEl:n}=this;n.setText(\"Edit .gitignore\");let i=r.createDiv(),a=i.createEl(\"textarea\",{text:this.content,cls:[\"obsidian-git-textarea\"],attr:{rows:10,cols:30,wrap:\"off\"}});i.createEl(\"button\",{cls:[\"mod-cta\",\"obsidian-git-center-button\"],text:\"Save\"}).addEventListener(\"click\",()=>{this.resolve(a.value),this.close()})}onClose(){let{contentEl:r}=this;r.empty(),this.resolve&&this.resolve(void 0)}};function lC(e){let t=e.app;e.addCommand({id:\"edit-gitignore\",name:\"Edit .gitignore\",callback:async()=>{let r=e.gitManager.getRelativeVaultPath(\".gitignore\");await t.vault.adapter.exists(r)||await t.vault.adapter.write(r,\"\");let n=await t.vault.adapter.read(r),a=await new ud(t,n).openAndGetReslt();a!==void 0&&(await t.vault.adapter.write(r,a),await e.refresh())}}),e.addCommand({id:\"open-git-view\",name:\"Open source control view\",callback:async()=>{var i;let r=t.workspace.getLeavesOfType(St.type),n;r.length===0?(n=(i=t.workspace.getRightLeaf(!1))!=null?i:t.workspace.getLeaf(),await n.setViewState({type:St.type})):n=r.first(),await t.workspace.revealLeaf(n),t.workspace.trigger(\"obsidian-git:refresh\")}}),e.addCommand({id:\"open-history-view\",name:\"Open history view\",callback:async()=>{var i;let r=t.workspace.getLeavesOfType($r.type),n;r.length===0?(n=(i=t.workspace.getRightLeaf(!1))!=null?i:t.workspace.getLeaf(),await n.setViewState({type:$r.type})):n=r.first(),await t.workspace.revealLeaf(n),t.workspace.trigger(\"obsidian-git:refresh\")}}),e.addCommand({id:\"open-diff-view\",name:\"Open diff view\",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;{let i=e.gitManager.getRelativeRepoPath(n.path,!0);e.tools.openDiff({aFile:i,aRef:\"\"})}}}),e.addCommand({id:\"view-file-on-github\",name:\"Open file on GitHub\",editorCallback:(r,{file:n})=>{if(n)return nC(r,n,e.gitManager)}}),e.addCommand({id:\"view-history-on-github\",name:\"Open file history on GitHub\",editorCallback:(r,{file:n})=>{if(n)return iC(n,e.gitManager)}}),e.addCommand({id:\"pull\",name:\"Pull\",callback:()=>e.promiseQueue.addTask(()=>e.pullChangesFromRemote())}),e.addCommand({id:\"fetch\",name:\"Fetch\",callback:()=>e.promiseQueue.addTask(()=>e.fetch())}),e.addCommand({id:\"switch-to-remote-branch\",name:\"Switch to remote branch\",callback:()=>e.promiseQueue.addTask(()=>e.switchRemoteBranch())}),e.addCommand({id:\"add-to-gitignore\",name:\"Add file to .gitignore\",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.addFileToGitignore(n.path).catch(i=>e.displayError(i))}}),e.addCommand({id:\"push\",name:\"Commit-and-sync\",callback:()=>e.promiseQueue.addTask(()=>e.commitAndSync(!1))}),e.addCommand({id:\"backup-and-close\",name:\"Commit-and-sync and then close Obsidian\",callback:()=>e.promiseQueue.addTask(async()=>{await e.commitAndSync(!1),window.close()})}),e.addCommand({id:\"commit-push-specified-message\",name:\"Commit-and-sync with specific message\",callback:()=>e.promiseQueue.addTask(()=>e.commitAndSync(!1,!0))}),e.addCommand({id:\"commit\",name:\"Commit all changes\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1}))}),e.addCommand({id:\"commit-specified-message\",name:\"Commit all changes with specific message\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0}))}),e.addCommand({id:\"commit-staged\",name:\"Commit staged\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!1,onlyStaged:!0}))}),Kl.Platform.isDesktopApp&&e.addCommand({id:\"commit-amend-staged-specified-message\",name:\"Amend staged\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:!0,amend:!0}))}),e.addCommand({id:\"commit-staged-specified-message\",name:\"Commit staged with specific message\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:!0}))}),e.addCommand({id:\"push2\",name:\"Push\",callback:()=>e.promiseQueue.addTask(()=>e.push())}),e.addCommand({id:\"stage-current-file\",name:\"Stage current file\",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.promiseQueue.addTask(()=>e.stageFile(n))}}),e.addCommand({id:\"unstage-current-file\",name:\"Unstage current file\",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.promiseQueue.addTask(()=>e.unstageFile(n))}}),e.addCommand({id:\"edit-remotes\",name:\"Edit remotes\",callback:()=>e.editRemotes().catch(r=>e.displayError(r))}),e.addCommand({id:\"remove-remote\",name:\"Remove remote\",callback:()=>e.removeRemote().catch(r=>e.displayError(r))}),e.addCommand({id:\"set-upstream-branch\",name:\"Set upstream branch\",callback:()=>e.setUpstreamBranch().catch(r=>e.displayError(r))}),e.addCommand({id:\"delete-repo\",name:\"CAUTION: Delete repository\",callback:async()=>{await t.vault.adapter.exists(`${e.settings.basePath}/.git`)?await new Fe(e,{options:[\"NO\",\"YES\"],placeholder:\"Do you really want to delete the repository (.git directory)? plugin action cannot be undone.\",onlySelection:!0}).openAndGetResult()===\"YES\"&&(await t.vault.adapter.rmdir(`${e.settings.basePath}/.git`,!0),new Kl.Notice(\"Successfully deleted repository. Reloading plugin...\"),e.unloadPlugin(),await e.init({fromReload:!0})):new Kl.Notice(\"No repository found\")}}),e.addCommand({id:\"init-repo\",name:\"Initialize a new repo\",callback:()=>e.createNewRepo().catch(r=>e.displayError(r))}),e.addCommand({id:\"clone-repo\",name:\"Clone an existing remote repo\",callback:()=>e.cloneNewRepo().catch(r=>e.displayError(r))}),e.addCommand({id:\"list-changed-files\",name:\"List changed files\",callback:async()=>{if(await e.isAllInitialized())try{let r=await e.updateCachedStatus();if(r.changed.length+r.staged.length>500){e.displayError(\"Too many changes to display\");return}new cd(e,r.all).open()}catch(r){e.displayError(r)}}}),e.addCommand({id:\"switch-branch\",name:\"Switch branch\",callback:()=>{e.switchBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:\"create-branch\",name:\"Create new branch\",callback:()=>{e.createBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:\"delete-branch\",name:\"Delete branch\",callback:()=>{e.deleteBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:\"discard-all\",name:\"CAUTION: Discard all changes\",callback:async()=>{if(!await e.isAllInitialized())return!1;await new Fe(e,{options:[\"NO\",\"YES\"],placeholder:\"Do you want to discard all changes to tracked files? plugin action cannot be undone.\",onlySelection:!0}).openAndGetResult()===\"YES\"&&e.promiseQueue.addTask(()=>e.discardAll())}}),e.addCommand({id:\"raw-command\",name:\"Raw command\",checkCallback:r=>{let n=e.gitManager;if(r)return n instanceof Te;e.tools.runRawCommand().catch(i=>e.displayError(i))}}),e.addCommand({id:\"toggle-line-author-info\",name:\"Toggle line author information\",callback:()=>{var r;return(r=e.settingsTab)==null?void 0:r.configureLineAuthorShowStatus(!e.settings.lineAuthor.show)}})}g();var fd=class{constructor(t){this.plugin=t;this.prefix=this.plugin.manifest.id+\":\",this.app=t.app}migrate(){let t=[\"password\",\"hostname\",\"conflict\",\"lastAutoPull\",\"lastAutoBackup\",\"lastAutoPush\",\"gitPath\",\"pluginDisabled\"];for(let r of t){let n=localStorage.getItem(this.prefix+r);this.app.loadLocalStorage(this.prefix+r)==null&&n!=null&&n!=null&&(this.app.saveLocalStorage(this.prefix+r,n),localStorage.removeItem(this.prefix+r))}}getPassword(){return this.app.loadLocalStorage(this.prefix+\"password\")}setPassword(t){return this.app.saveLocalStorage(this.prefix+\"password\",t)}getUsername(){return this.app.loadLocalStorage(this.prefix+\"username\")}setUsername(t){return this.app.saveLocalStorage(this.prefix+\"username\",t)}getHostname(){return this.app.loadLocalStorage(this.prefix+\"hostname\")}setHostname(t){return this.app.saveLocalStorage(this.prefix+\"hostname\",t)}getConflict(){return this.app.loadLocalStorage(this.prefix+\"conflict\")==\"true\"}setConflict(t){return this.app.saveLocalStorage(this.prefix+\"conflict\",`${t}`)}getLastAutoPull(){return this.app.loadLocalStorage(this.prefix+\"lastAutoPull\")}setLastAutoPull(t){return this.app.saveLocalStorage(this.prefix+\"lastAutoPull\",t)}getLastAutoBackup(){return this.app.loadLocalStorage(this.prefix+\"lastAutoBackup\")}setLastAutoBackup(t){return this.app.saveLocalStorage(this.prefix+\"lastAutoBackup\",t)}getLastAutoPush(){return this.app.loadLocalStorage(this.prefix+\"lastAutoPush\")}setLastAutoPush(t){return this.app.saveLocalStorage(this.prefix+\"lastAutoPush\",t)}getGitPath(){return this.app.loadLocalStorage(this.prefix+\"gitPath\")}setGitPath(t){return this.app.saveLocalStorage(this.prefix+\"gitPath\",t)}getPATHPaths(){var t,r;return(r=(t=this.app.loadLocalStorage(this.prefix+\"PATHPaths\"))==null?void 0:t.split(\":\"))!=null?r:[]}setPATHPaths(t){return this.app.saveLocalStorage(this.prefix+\"PATHPaths\",t.join(\":\"))}getEnvVars(){var t;return JSON.parse((t=this.app.loadLocalStorage(this.prefix+\"envVars\"))!=null?t:\"[]\")}setEnvVars(t){return this.app.saveLocalStorage(this.prefix+\"envVars\",JSON.stringify(t))}getPluginDisabled(){return this.app.loadLocalStorage(this.prefix+\"pluginDisabled\")==\"true\"}setPluginDisabled(t){return this.app.saveLocalStorage(this.prefix+\"pluginDisabled\",`${t}`)}};g();g();g();g();var He;(function(e){e.INSERT=\"insert\",e.DELETE=\"delete\",e.CONTEXT=\"context\"})(He||(He={}));var cC={LINE_BY_LINE:\"line-by-line\",SIDE_BY_SIDE:\"side-by-side\"},uC={LINES:\"lines\",WORDS:\"words\",NONE:\"none\"},fC={WORD:\"word\",CHAR:\"char\"},Ea;(function(e){e.AUTO=\"auto\",e.DARK=\"dark\",e.LIGHT=\"light\"})(Ea||(Ea={}));g();var yB=[\"-\",\"[\",\"]\",\"/\",\"{\",\"}\",\"(\",\")\",\"*\",\"+\",\"?\",\".\",\"\\\\\",\"^\",\"$\",\"|\"],wB=RegExp(\"[\"+yB.join(\"\\\\\")+\"]\",\"g\");function dC(e){return e.replace(wB,\"\\\\$&\")}function m0(e){return e&&e.replace(/\\\\/g,\"/\")}function hC(e){let t,r,n,i=0;for(t=0,n=e.length;t<n;t++)r=e.charCodeAt(t),i=(i<<5)-i+r,i|=0;return i}function pC(e,t){let r=e.split(\".\");return r.length>1?r[r.length-1]:t}function mC(e,t){return t.reduce((r,n)=>r||e.startsWith(n),!1)}var gC=[\"a/\",\"b/\",\"i/\",\"w/\",\"c/\",\"o/\"];function $i(e,t,r){let n=r!==void 0?[...gC,r]:gC,i=t?new RegExp(`^${dC(t)} \"?(.+?)\"?$`):new RegExp('^\"?(.+?)\"?$'),[,a=\"\"]=i.exec(e)||[],s=n.find(c=>a.indexOf(c)===0);return(s?a.slice(s.length):a).replace(/\\s+\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)? [+-]\\d{4}.*$/,\"\")}function bB(e,t){return $i(e,\"---\",t)}function _B(e,t){return $i(e,\"+++\",t)}function vC(e,t={}){let r=[],n=null,i=null,a=null,s=null,o=null,c=null,l=null,u=\"--- \",f=\"+++ \",d=\"@@\",h=/^old mode (\\d{6})/,p=/^new mode (\\d{6})/,m=/^deleted file mode (\\d{6})/,v=/^new file mode (\\d{6})/,y=/^copy from \"?(.+)\"?/,b=/^copy to \"?(.+)\"?/,x=/^rename from \"?(.+)\"?/,E=/^rename to \"?(.+)\"?/,_=/^similarity index (\\d+)%/,k=/^dissimilarity index (\\d+)%/,w=/^index ([\\da-z]+)\\.\\.([\\da-z]+)\\s*(\\d{6})?/,A=/^Binary files (.*) and (.*) differ/,S=/^GIT binary patch/,T=/^index ([\\da-z]+),([\\da-z]+)\\.\\.([\\da-z]+)/,P=/^mode (\\d{6}),(\\d{6})\\.\\.(\\d{6})/,O=/^new file mode (\\d{6})/,j=/^deleted file mode (\\d{6}),(\\d{6})/,D=e.replace(/\\\\ No newline at end of file/g,\"\").replace(/\\r\\n?/g,`\n`).split(`\n`);function Q(){i!==null&&n!==null&&(n.blocks.push(i),i=null)}function de(){n!==null&&(!n.oldName&&c!==null&&(n.oldName=c),!n.newName&&l!==null&&(n.newName=l),n.newName&&(r.push(n),n=null)),c=null,l=null}function ee(){Q(),de(),n={blocks:[],deletedLines:0,addedLines:0}}function J(F){Q();let G;n!==null&&((G=/^@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@.*/.exec(F))?(n.isCombined=!1,a=parseInt(G[1],10),o=parseInt(G[2],10)):(G=/^@@@ -(\\d+)(?:,\\d+)? -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@@.*/.exec(F))?(n.isCombined=!0,a=parseInt(G[1],10),s=parseInt(G[2],10),o=parseInt(G[3],10)):(F.startsWith(d)&&console.error(\"Failed to parse lines, starting in 0!\"),a=0,o=0,n.isCombined=!1)),i={lines:[],oldStartLine:a,oldStartLine2:s,newStartLine:o,header:F}}function Pe(F){if(n===null||i===null||a===null||o===null)return;let G={content:F},N=n.isCombined?[\"+ \",\" +\",\"++\"]:[\"+\"],Me=n.isCombined?[\"- \",\" -\",\"--\"]:[\"-\"];mC(F,N)?(n.addedLines++,G.type=He.INSERT,G.oldNumber=void 0,G.newNumber=o++):mC(F,Me)?(n.deletedLines++,G.type=He.DELETE,G.oldNumber=a++,G.newNumber=void 0):(G.type=He.CONTEXT,G.oldNumber=a++,G.newNumber=o++),i.lines.push(G)}function me(F,G){let N=G;for(;N<D.length-3;){if(F.startsWith(\"diff\"))return!1;if(D[N].startsWith(u)&&D[N+1].startsWith(f)&&D[N+2].startsWith(d))return!0;N++}return!1}return D.forEach((F,G)=>{if(!F||F.startsWith(\"*\"))return;let N,Me=D[G-1],Dt=D[G+1],_t=D[G+2];if(F.startsWith(\"diff --git\")||F.startsWith(\"diff --combined\")){if(ee(),(N=/^diff --git \"?([a-ciow]\\/.+)\"? \"?([a-ciow]\\/.+)\"?/.exec(F))&&(c=$i(N[1],void 0,t.dstPrefix),l=$i(N[2],void 0,t.srcPrefix)),n===null)throw new Error(\"Where is my file !!!\");n.isGitDiff=!0;return}if(F.startsWith(\"Binary files\")&&!(n!=null&&n.isGitDiff)){if(ee(),(N=/^Binary files \"?([a-ciow]\\/.+)\"? and \"?([a-ciow]\\/.+)\"? differ/.exec(F))&&(c=$i(N[1],void 0,t.dstPrefix),l=$i(N[2],void 0,t.srcPrefix)),n===null)throw new Error(\"Where is my file !!!\");n.isBinary=!0;return}if((!n||!n.isGitDiff&&n&&F.startsWith(u)&&Dt.startsWith(f)&&_t.startsWith(d))&&ee(),n!=null&&n.isTooBig)return;if(n&&(typeof t.diffMaxChanges==\"number\"&&n.addedLines+n.deletedLines>t.diffMaxChanges||typeof t.diffMaxLineLength==\"number\"&&F.length>t.diffMaxLineLength)){n.isTooBig=!0,n.addedLines=0,n.deletedLines=0,n.blocks=[],i=null;let st=typeof t.diffTooBigMessage==\"function\"?t.diffTooBigMessage(r.length):\"Diff too big to be displayed\";J(st);return}if(F.startsWith(u)&&Dt.startsWith(f)||F.startsWith(f)&&Me.startsWith(u)){if(n&&!n.oldName&&F.startsWith(\"--- \")&&(N=bB(F,t.srcPrefix))){n.oldName=N,n.language=pC(n.oldName,n.language);return}if(n&&!n.newName&&F.startsWith(\"+++ \")&&(N=_B(F,t.dstPrefix))){n.newName=N,n.language=pC(n.newName,n.language);return}}if(n&&(F.startsWith(d)||n.isGitDiff&&n.oldName&&n.newName&&!i)){J(F);return}if(i&&(F.startsWith(\"+\")||F.startsWith(\"-\")||F.startsWith(\" \"))){Pe(F);return}let Ee=!me(F,G);if(n===null)throw new Error(\"Where is my file !!!\");(N=h.exec(F))?n.oldMode=N[1]:(N=p.exec(F))?n.newMode=N[1]:(N=m.exec(F))?(n.deletedFileMode=N[1],n.isDeleted=!0):(N=v.exec(F))?(n.newFileMode=N[1],n.isNew=!0):(N=y.exec(F))?(Ee&&(n.oldName=N[1]),n.isCopy=!0):(N=b.exec(F))?(Ee&&(n.newName=N[1]),n.isCopy=!0):(N=x.exec(F))?(Ee&&(n.oldName=N[1]),n.isRename=!0):(N=E.exec(F))?(Ee&&(n.newName=N[1]),n.isRename=!0):(N=A.exec(F))?(n.isBinary=!0,n.oldName=$i(N[1],void 0,t.srcPrefix),n.newName=$i(N[2],void 0,t.dstPrefix),J(\"Binary file\")):S.test(F)?(n.isBinary=!0,J(F)):(N=_.exec(F))?n.unchangedPercentage=parseInt(N[1],10):(N=k.exec(F))?n.changedPercentage=parseInt(N[1],10):(N=w.exec(F))?(n.checksumBefore=N[1],n.checksumAfter=N[2],N[3]&&(n.mode=N[3])):(N=T.exec(F))?(n.checksumBefore=[N[2],N[3]],n.checksumAfter=N[1]):(N=P.exec(F))?(n.oldMode=[N[2],N[3]],n.newMode=N[1]):(N=O.exec(F))?(n.newFileMode=N[1],n.isNew=!0):(N=j.exec(F))&&(n.deletedFileMode=N[1],n.isDeleted=!0)}),Q(),de(),r}g();g();g();function Kn(){}Kn.prototype={diff:function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=n.callback;typeof n==\"function\"&&(i=n,n={}),this.options=n;var a=this;function s(m){return i?(setTimeout(function(){i(void 0,m)},0),!0):m}t=this.castInput(t),r=this.castInput(r),t=this.removeEmpty(this.tokenize(t)),r=this.removeEmpty(this.tokenize(r));var o=r.length,c=t.length,l=1,u=o+c;n.maxEditLength&&(u=Math.min(u,n.maxEditLength));var f=[{newPos:-1,components:[]}],d=this.extractCommon(f[0],r,t,0);if(f[0].newPos+1>=o&&d+1>=c)return s([{value:this.join(r),count:r.length}]);function h(){for(var m=-1*l;m<=l;m+=2){var v=void 0,y=f[m-1],b=f[m+1],x=(b?b.newPos:0)-m;y&&(f[m-1]=void 0);var E=y&&y.newPos+1<o,_=b&&0<=x&&x<c;if(!E&&!_){f[m]=void 0;continue}if(!E||_&&y.newPos<b.newPos?(v=EB(b),a.pushComponent(v.components,void 0,!0)):(v=y,v.newPos++,a.pushComponent(v.components,!0,void 0)),x=a.extractCommon(v,r,t,m),v.newPos+1>=o&&x+1>=c)return s(SB(a,v.components,r,t,a.useLongestToken));f[m]=v}l++}if(i)(function m(){setTimeout(function(){if(l>u)return i();h()||m()},0)})();else for(;l<=u;){var p=h();if(p)return p}},pushComponent:function(t,r,n){var i=t[t.length-1];i&&i.added===r&&i.removed===n?t[t.length-1]={count:i.count+1,added:r,removed:n}:t.push({count:1,added:r,removed:n})},extractCommon:function(t,r,n,i){for(var a=r.length,s=n.length,o=t.newPos,c=o-i,l=0;o+1<a&&c+1<s&&this.equals(r[o+1],n[c+1]);)o++,c++,l++;return l&&t.components.push({count:l}),t.newPos=o,c},equals:function(t,r){return this.options.comparator?this.options.comparator(t,r):t===r||this.options.ignoreCase&&t.toLowerCase()===r.toLowerCase()},removeEmpty:function(t){for(var r=[],n=0;n<t.length;n++)t[n]&&r.push(t[n]);return r},castInput:function(t){return t},tokenize:function(t){return t.split(\"\")},join:function(t){return t.join(\"\")}};function SB(e,t,r,n,i){for(var a=0,s=t.length,o=0,c=0;a<s;a++){var l=t[a];if(l.removed){if(l.value=e.join(n.slice(c,c+l.count)),c+=l.count,a&&t[a-1].added){var f=t[a-1];t[a-1]=t[a],t[a]=f}}else{if(!l.added&&i){var u=r.slice(o,o+l.count);u=u.map(function(h,p){var m=n[c+p];return m.length>h.length?m:h}),l.value=e.join(u)}else l.value=e.join(r.slice(o,o+l.count));o+=l.count,l.added||(c+=l.count)}}var d=t[s-1];return s>1&&typeof d.value==\"string\"&&(d.added||d.removed)&&e.equals(\"\",d.value)&&(t[s-2].value+=d.value,t.pop()),t}function EB(e){return{newPos:e.newPos,components:e.components.slice(0)}}var AB=new Kn;function bC(e,t,r){return AB.diff(e,t,r)}var yC=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,wC=/\\S/,y0=new Kn;y0.equals=function(e,t){return this.options.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e===t||this.options.ignoreWhitespace&&!wC.test(e)&&!wC.test(t)};y0.tokenize=function(e){for(var t=e.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),r=0;r<t.length-1;r++)!t[r+1]&&t[r+2]&&yC.test(t[r])&&yC.test(t[r+2])&&(t[r]+=t[r+2],t.splice(r+1,2),r--);return t};function _C(e,t,r){return y0.diff(e,t,r)}var xC=new Kn;xC.tokenize=function(e){var t=[],r=e.split(/(\\n|\\r\\n)/);r[r.length-1]||r.pop();for(var n=0;n<r.length;n++){var i=r[n];n%2&&!this.options.newlineIsToken?t[t.length-1]+=i:(this.options.ignoreWhitespace&&(i=i.trim()),t.push(i))}return t};var kB=new Kn;kB.tokenize=function(e){return e.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var TB=new Kn;TB.tokenize=function(e){return e.split(/([{}:;,]|\\s+)/)};function dd(e){\"@babel/helpers - typeof\";return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?dd=function(t){return typeof t}:dd=function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},dd(e)}var CB=Object.prototype.toString,Jl=new Kn;Jl.useLongestToken=!0;Jl.tokenize=xC.tokenize;Jl.castInput=function(e){var t=this.options,r=t.undefinedReplacement,n=t.stringifyReplacer,i=n===void 0?function(a,s){return typeof s==\"undefined\"?r:s}:n;return typeof e==\"string\"?e:JSON.stringify(g0(e,null,null,i),i,\"  \")};Jl.equals=function(e,t){return Kn.prototype.equals.call(Jl,e.replace(/,([\\r\\n])/g,\"$1\"),t.replace(/,([\\r\\n])/g,\"$1\"))};function g0(e,t,r,n,i){t=t||[],r=r||[],n&&(e=n(i,e));var a;for(a=0;a<t.length;a+=1)if(t[a]===e)return r[a];var s;if(CB.call(e)===\"[object Array]\"){for(t.push(e),s=new Array(e.length),r.push(s),a=0;a<e.length;a+=1)s[a]=g0(e[a],t,r,n,i);return t.pop(),r.pop(),s}if(e&&e.toJSON&&(e=e.toJSON()),dd(e)===\"object\"&&e!==null){t.push(e),s={},r.push(s);var o=[],c;for(c in e)e.hasOwnProperty(c)&&o.push(c);for(o.sort(),a=0;a<o.length;a+=1)c=o[a],s[c]=g0(e[c],t,r,n,c);t.pop(),r.pop()}else s=e;return s}var v0=new Kn;v0.tokenize=function(e){return e.slice()};v0.join=v0.removeEmpty=function(e){return e};g();function RB(e,t){if(e.length===0)return t.length;if(t.length===0)return e.length;let r=[],n;for(n=0;n<=t.length;n++)r[n]=[n];let i;for(i=0;i<=e.length;i++)r[0][i]=i;for(n=1;n<=t.length;n++)for(i=1;i<=e.length;i++)t.charAt(n-1)===e.charAt(i-1)?r[n][i]=r[n-1][i-1]:r[n][i]=Math.min(r[n-1][i-1]+1,Math.min(r[n][i-1]+1,r[n-1][i]+1));return r[t.length][e.length]}function Ks(e){return(t,r)=>{let n=e(t).trim(),i=e(r).trim();return RB(n,i)/(n.length+i.length)}}function Js(e){function t(n,i,a=new Map){let s=1/0,o;for(let c=0;c<n.length;++c)for(let l=0;l<i.length;++l){let u=JSON.stringify([n[c],i[l]]),f;a.has(u)&&(f=a.get(u))||(f=e(n[c],i[l]),a.set(u,f)),f<s&&(s=f,o={indexA:c,indexB:l,score:s})}return o}function r(n,i,a=0,s=new Map){let o=t(n,i,s);if(!o||n.length+i.length<3)return[[n,i]];let c=n.slice(0,o.indexA),l=i.slice(0,o.indexB),u=[n[o.indexA]],f=[i[o.indexB]],d=o.indexA+1,h=o.indexB+1,p=n.slice(d),m=i.slice(h),v=r(c,l,a+1,s),y=r(u,f,a+1,s),b=r(p,m,a+1,s),x=y;return(o.indexA>0||o.indexB>0)&&(x=v.concat(x)),(n.length>d||i.length>h)&&(x=x.concat(b)),x}return r}var Et={INSERTS:\"d2h-ins\",DELETES:\"d2h-del\",CONTEXT:\"d2h-cntx\",INFO:\"d2h-info\",INSERT_CHANGES:\"d2h-ins d2h-change\",DELETE_CHANGES:\"d2h-del d2h-change\"},Aa={matching:uC.NONE,matchWordsThreshold:.25,maxLineLengthHighlight:1e4,diffStyle:fC.WORD,colorScheme:Ea.LIGHT},Cn=\"/\",SC=Ks(e=>e.value),MB=Js(SC);function b0(e){return e.indexOf(\"dev/null\")!==-1}function OB(e){return e.replace(/(<ins[^>]*>((.|\\n)*?)<\\/ins>)/g,\"\")}function IB(e){return e.replace(/(<del[^>]*>((.|\\n)*?)<\\/del>)/g,\"\")}function Qs(e){switch(e){case He.CONTEXT:return Et.CONTEXT;case He.INSERT:return Et.INSERTS;case He.DELETE:return Et.DELETES}}function eo(e){switch(e){case Ea.DARK:return\"d2h-dark-color-scheme\";case Ea.AUTO:return\"d2h-auto-color-scheme\";case Ea.LIGHT:default:return\"d2h-light-color-scheme\"}}function FB(e){return e?2:1}function Li(e){return e.slice(0).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\").replace(/\\//g,\"&#x2F;\")}function jr(e,t,r=!0){let n=FB(t);return{prefix:e.substring(0,n),content:r?Li(e.substring(n)):e.substring(n)}}function ka(e){let t=m0(e.oldName),r=m0(e.newName);if(t!==r&&!b0(t)&&!b0(r)){let n=[],i=[],a=t.split(Cn),s=r.split(Cn),o=a.length,c=s.length,l=0,u=o-1,f=c-1;for(;l<u&&l<f&&a[l]===s[l];)n.push(s[l]),l+=1;for(;u>l&&f>l&&a[u]===s[f];)i.unshift(s[f]),u-=1,f-=1;let d=n.join(Cn),h=i.join(Cn),p=a.slice(l,u+1).join(Cn),m=s.slice(l,f+1).join(Cn);return d.length&&h.length?d+Cn+\"{\"+p+\" \\u2192 \"+m+\"}\"+Cn+h:d.length?d+Cn+\"{\"+p+\" \\u2192 \"+m+\"}\":h.length?\"{\"+p+\" \\u2192 \"+m+\"}\"+Cn+h:t+\" \\u2192 \"+r}else return b0(r)?t:r}function to(e){return`d2h-${hC(ka(e)).toString().slice(-6)}`}function ro(e){let t=\"file-changed\";return e.isRename||e.isCopy?t=\"file-renamed\":e.isNew?t=\"file-added\":e.isDeleted?t=\"file-deleted\":e.newName!==e.oldName&&(t=\"file-renamed\"),t}function hd(e,t,r,n={}){let{matching:i,maxLineLengthHighlight:a,matchWordsThreshold:s,diffStyle:o}=Object.assign(Object.assign({},Aa),n),c=jr(e,r,!1),l=jr(t,r,!1);if(c.content.length>a||l.content.length>a)return{oldLine:{prefix:c.prefix,content:Li(c.content)},newLine:{prefix:l.prefix,content:Li(l.content)}};let u=o===\"char\"?bC(c.content,l.content):_C(c.content,l.content),f=[];if(o===\"word\"&&i===\"words\"){let h=u.filter(v=>v.removed),p=u.filter(v=>v.added);MB(p,h).forEach(v=>{v[0].length===1&&v[1].length===1&&SC(v[0][0],v[1][0])<s&&(f.push(v[0][0]),f.push(v[1][0]))})}let d=u.reduce((h,p)=>{let m=p.added?\"ins\":p.removed?\"del\":null,v=f.indexOf(p)>-1?' class=\"d2h-change\"':\"\",y=Li(p.value);return m!==null?`${h}<${m}${v}>${y}</${m}>`:`${h}${y}`},\"\");return{oldLine:{prefix:c.prefix,content:OB(d)},newLine:{prefix:l.prefix,content:IB(d)}}}var EC=\"file-summary\",$B=\"icon\",LB={colorScheme:Aa.colorScheme},pd=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},LB),r)}render(t){let r=t.map(n=>this.hoganUtils.render(EC,\"line\",{fileHtmlId:to(n),oldName:n.oldName,newName:n.newName,fileName:ka(n),deletedLines:\"-\"+n.deletedLines,addedLines:\"+\"+n.addedLines},{fileIcon:this.hoganUtils.template($B,ro(n))})).join(`\n`);return this.hoganUtils.render(EC,\"wrapper\",{colorScheme:eo(this.config.colorScheme),filesNumber:t.length,files:r})}};g();var x0=Object.assign(Object.assign({},Aa),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),Ql=\"generic\",AC=\"line-by-line\",DB=\"icon\",NB=\"tag\",ec=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},x0),r)}render(t){let r=t.map(n=>{let i;return n.blocks.length?i=this.generateFileHtml(n):i=this.generateEmptyDiff(),this.makeFileDiffHtml(n,i)}).join(`\n`);return this.hoganUtils.render(Ql,\"wrapper\",{colorScheme:eo(this.config.colorScheme),content:r})}makeFileDiffHtml(t,r){if(this.config.renderNothingWhenEmpty&&Array.isArray(t.blocks)&&t.blocks.length===0)return\"\";let n=this.hoganUtils.template(AC,\"file-diff\"),i=this.hoganUtils.template(Ql,\"file-path\"),a=this.hoganUtils.template(DB,\"file\"),s=this.hoganUtils.template(NB,ro(t));return n.render({file:t,fileHtmlId:to(t),diffs:r,filePath:i.render({fileDiffName:ka(t)},{fileIcon:a,fileTag:s})})}generateEmptyDiff(){return this.hoganUtils.render(Ql,\"empty-diff\",{contentClass:\"d2h-code-line\",CSSLineClass:Et})}generateFileHtml(t){let r=Js(Ks(n=>jr(n.content,t.isCombined).content));return t.blocks.map(n=>{let i=this.hoganUtils.render(Ql,\"block-header\",{CSSLineClass:Et,blockHeader:t.isTooBig?n.header:Li(n.header),lineClass:\"d2h-code-linenumber\",contentClass:\"d2h-code-line\"});return this.applyLineGroupping(n).forEach(([a,s,o])=>{if(s.length&&o.length&&!a.length)this.applyRematchMatching(s,o,r).map(([c,l])=>{let{left:u,right:f}=this.processChangedLines(t,t.isCombined,c,l);i+=u,i+=f});else if(a.length)a.forEach(c=>{let{prefix:l,content:u}=jr(c.content,t.isCombined);i+=this.generateSingleLineHtml(t,{type:Et.CONTEXT,prefix:l,content:u,oldNumber:c.oldNumber,newNumber:c.newNumber})});else if(s.length||o.length){let{left:c,right:l}=this.processChangedLines(t,t.isCombined,s,o);i+=c,i+=l}else console.error(\"Unknown state reached while processing groups of lines\",a,s,o)}),i}).join(`\n`)}applyLineGroupping(t){let r=[],n=[],i=[];for(let a=0;a<t.lines.length;a++){let s=t.lines[a];(s.type!==He.INSERT&&i.length||s.type===He.CONTEXT&&n.length>0)&&(r.push([[],n,i]),n=[],i=[]),s.type===He.CONTEXT?r.push([[s],[],[]]):s.type===He.INSERT&&n.length===0?r.push([[],[],[s]]):s.type===He.INSERT&&n.length>0?i.push(s):s.type===He.DELETE&&n.push(s)}return(n.length||i.length)&&(r.push([[],n,i]),n=[],i=[]),r}applyRematchMatching(t,r,n){let i=t.length*r.length,a=Math.max.apply(null,[0].concat(t.concat(r).map(o=>o.content.length)));return i<this.config.matchingMaxComparisons&&a<this.config.maxLineSizeInBlockForComparison&&(this.config.matching===\"lines\"||this.config.matching===\"words\")?n(t,r):[[t,r]]}processChangedLines(t,r,n,i){let a={right:\"\",left:\"\"},s=Math.max(n.length,i.length);for(let o=0;o<s;o++){let c=n[o],l=i[o],u=c!==void 0&&l!==void 0?hd(c.content,l.content,r,this.config):void 0,f=c!==void 0&&c.oldNumber!==void 0?Object.assign(Object.assign({},u!==void 0?{prefix:u.oldLine.prefix,content:u.oldLine.content,type:Et.DELETE_CHANGES}:Object.assign(Object.assign({},jr(c.content,r)),{type:Qs(c.type)})),{oldNumber:c.oldNumber,newNumber:c.newNumber}):void 0,d=l!==void 0&&l.newNumber!==void 0?Object.assign(Object.assign({},u!==void 0?{prefix:u.newLine.prefix,content:u.newLine.content,type:Et.INSERT_CHANGES}:Object.assign(Object.assign({},jr(l.content,r)),{type:Qs(l.type)})),{oldNumber:l.oldNumber,newNumber:l.newNumber}):void 0,{left:h,right:p}=this.generateLineHtml(t,f,d);a.left+=h,a.right+=p}return a}generateLineHtml(t,r,n){return{left:this.generateSingleLineHtml(t,r),right:this.generateSingleLineHtml(t,n)}}generateSingleLineHtml(t,r){if(r===void 0)return\"\";let n=this.hoganUtils.render(AC,\"numbers\",{oldNumber:r.oldNumber||\"\",newNumber:r.newNumber||\"\"});return this.hoganUtils.render(Ql,\"line\",{type:r.type,lineClass:\"d2h-code-linenumber\",contentClass:\"d2h-code-line\",prefix:r.prefix===\" \"?\"&nbsp;\":r.prefix,content:r.content,lineNumber:n,line:r,file:t})}};g();var S0=Object.assign(Object.assign({},Aa),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),tc=\"generic\",jB=\"side-by-side\",BB=\"icon\",HB=\"tag\",rc=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},S0),r)}render(t){let r=t.map(n=>{let i;return n.blocks.length?i=this.generateFileHtml(n):i=this.generateEmptyDiff(),this.makeFileDiffHtml(n,i)}).join(`\n`);return this.hoganUtils.render(tc,\"wrapper\",{colorScheme:eo(this.config.colorScheme),content:r})}makeFileDiffHtml(t,r){if(this.config.renderNothingWhenEmpty&&Array.isArray(t.blocks)&&t.blocks.length===0)return\"\";let n=this.hoganUtils.template(jB,\"file-diff\"),i=this.hoganUtils.template(tc,\"file-path\"),a=this.hoganUtils.template(BB,\"file\"),s=this.hoganUtils.template(HB,ro(t));return n.render({file:t,fileHtmlId:to(t),diffs:r,filePath:i.render({fileDiffName:ka(t)},{fileIcon:a,fileTag:s})})}generateEmptyDiff(){return{right:\"\",left:this.hoganUtils.render(tc,\"empty-diff\",{contentClass:\"d2h-code-side-line\",CSSLineClass:Et})}}generateFileHtml(t){let r=Js(Ks(n=>jr(n.content,t.isCombined).content));return t.blocks.map(n=>{let i={left:this.makeHeaderHtml(n.header,t),right:this.makeHeaderHtml(\"\")};return this.applyLineGroupping(n).forEach(([a,s,o])=>{if(s.length&&o.length&&!a.length)this.applyRematchMatching(s,o,r).map(([c,l])=>{let{left:u,right:f}=this.processChangedLines(t.isCombined,c,l);i.left+=u,i.right+=f});else if(a.length)a.forEach(c=>{let{prefix:l,content:u}=jr(c.content,t.isCombined),{left:f,right:d}=this.generateLineHtml({type:Et.CONTEXT,prefix:l,content:u,number:c.oldNumber},{type:Et.CONTEXT,prefix:l,content:u,number:c.newNumber});i.left+=f,i.right+=d});else if(s.length||o.length){let{left:c,right:l}=this.processChangedLines(t.isCombined,s,o);i.left+=c,i.right+=l}else console.error(\"Unknown state reached while processing groups of lines\",a,s,o)}),i}).reduce((n,i)=>({left:n.left+i.left,right:n.right+i.right}),{left:\"\",right:\"\"})}applyLineGroupping(t){let r=[],n=[],i=[];for(let a=0;a<t.lines.length;a++){let s=t.lines[a];(s.type!==He.INSERT&&i.length||s.type===He.CONTEXT&&n.length>0)&&(r.push([[],n,i]),n=[],i=[]),s.type===He.CONTEXT?r.push([[s],[],[]]):s.type===He.INSERT&&n.length===0?r.push([[],[],[s]]):s.type===He.INSERT&&n.length>0?i.push(s):s.type===He.DELETE&&n.push(s)}return(n.length||i.length)&&(r.push([[],n,i]),n=[],i=[]),r}applyRematchMatching(t,r,n){let i=t.length*r.length,a=Math.max.apply(null,[0].concat(t.concat(r).map(o=>o.content.length)));return i<this.config.matchingMaxComparisons&&a<this.config.maxLineSizeInBlockForComparison&&(this.config.matching===\"lines\"||this.config.matching===\"words\")?n(t,r):[[t,r]]}makeHeaderHtml(t,r){return this.hoganUtils.render(tc,\"block-header\",{CSSLineClass:Et,blockHeader:r!=null&&r.isTooBig?t:Li(t),lineClass:\"d2h-code-side-linenumber\",contentClass:\"d2h-code-side-line\"})}processChangedLines(t,r,n){let i={right:\"\",left:\"\"},a=Math.max(r.length,n.length);for(let s=0;s<a;s++){let o=r[s],c=n[s],l=o!==void 0&&c!==void 0?hd(o.content,c.content,t,this.config):void 0,u=o!==void 0&&o.oldNumber!==void 0?Object.assign(Object.assign({},l!==void 0?{prefix:l.oldLine.prefix,content:l.oldLine.content,type:Et.DELETE_CHANGES}:Object.assign(Object.assign({},jr(o.content,t)),{type:Qs(o.type)})),{number:o.oldNumber}):void 0,f=c!==void 0&&c.newNumber!==void 0?Object.assign(Object.assign({},l!==void 0?{prefix:l.newLine.prefix,content:l.newLine.content,type:Et.INSERT_CHANGES}:Object.assign(Object.assign({},jr(c.content,t)),{type:Qs(c.type)})),{number:c.newNumber}):void 0,{left:d,right:h}=this.generateLineHtml(u,f);i.left+=d,i.right+=h}return i}generateLineHtml(t,r){return{left:this.generateSingleHtml(t),right:this.generateSingleHtml(r)}}generateSingleHtml(t){let r=\"d2h-code-side-linenumber\",n=\"d2h-code-side-line\";return this.hoganUtils.render(tc,\"line\",{type:(t==null?void 0:t.type)||`${Et.CONTEXT} d2h-emptyplaceholder`,lineClass:t!==void 0?r:`${r} d2h-code-side-emptyplaceholder`,contentClass:t!==void 0?n:`${n} d2h-code-side-emptyplaceholder`,prefix:(t==null?void 0:t.prefix)===\" \"?\"&nbsp;\":t==null?void 0:t.prefix,content:t==null?void 0:t.content,lineNumber:t==null?void 0:t.number})}};g();var T0=ze(k0());g();var lt=ze(k0()),nt={};nt[\"file-summary-line\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<li class=\"d2h-file-list-line\">'),n.b(`\n`+r),n.b('    <span class=\"d2h-file-name-wrapper\">'),n.b(`\n`+r),n.b(n.rp(\"<fileIcon0\",e,t,\"      \")),n.b('      <a href=\"#'),n.b(n.v(n.f(\"fileHtmlId\",e,t,0))),n.b('\" class=\"d2h-file-name\">'),n.b(n.v(n.f(\"fileName\",e,t,0))),n.b(\"</a>\"),n.b(`\n`+r),n.b('      <span class=\"d2h-file-stats\">'),n.b(`\n`+r),n.b('          <span class=\"d2h-lines-added\">'),n.b(n.v(n.f(\"addedLines\",e,t,0))),n.b(\"</span>\"),n.b(`\n`+r),n.b('          <span class=\"d2h-lines-deleted\">'),n.b(n.v(n.f(\"deletedLines\",e,t,0))),n.b(\"</span>\"),n.b(`\n`+r),n.b(\"      </span>\"),n.b(`\n`+r),n.b(\"    </span>\"),n.b(`\n`+r),n.b(\"</li>\"),n.fl()},partials:{\"<fileIcon0\":{name:\"fileIcon\",partials:{},subs:{}}},subs:{}});nt[\"file-summary-wrapper\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div class=\"d2h-file-list-wrapper '),n.b(n.v(n.f(\"colorScheme\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('    <div class=\"d2h-file-list-header\">'),n.b(`\n`+r),n.b('        <span class=\"d2h-file-list-title\">Files changed ('),n.b(n.v(n.f(\"filesNumber\",e,t,0))),n.b(\")</span>\"),n.b(`\n`+r),n.b('        <a class=\"d2h-file-switch d2h-hide\">hide</a>'),n.b(`\n`+r),n.b('        <a class=\"d2h-file-switch d2h-show\">show</a>'),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b('    <ol class=\"d2h-file-list\">'),n.b(`\n`+r),n.b(\"    \"),n.b(n.t(n.f(\"files\",e,t,0))),n.b(`\n`+r),n.b(\"    </ol>\"),n.b(`\n`+r),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"generic-block-header\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b(\"<tr>\"),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.f(\"lineClass\",e,t,0))),n.b(\" \"),n.b(n.v(n.d(\"CSSLineClass.INFO\",e,t,0))),n.b('\"></td>'),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.d(\"CSSLineClass.INFO\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('        <div class=\"'),n.b(n.v(n.f(\"contentClass\",e,t,0))),n.b('\">'),n.s(n.f(\"blockHeader\",e,t,1),e,t,0,156,173,\"{{ }}\")&&(n.rs(e,t,function(i,a,s){s.b(s.t(s.f(\"blockHeader\",i,a,0)))}),e.pop()),n.s(n.f(\"blockHeader\",e,t,1),e,t,1,0,0,\"\")||n.b(\"&nbsp;\"),n.b(\"</div>\"),n.b(`\n`+r),n.b(\"    </td>\"),n.b(`\n`+r),n.b(\"</tr>\"),n.fl()},partials:{},subs:{}});nt[\"generic-empty-diff\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b(\"<tr>\"),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.d(\"CSSLineClass.INFO\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('        <div class=\"'),n.b(n.v(n.f(\"contentClass\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b(\"            File without changes\"),n.b(`\n`+r),n.b(\"        </div>\"),n.b(`\n`+r),n.b(\"    </td>\"),n.b(`\n`+r),n.b(\"</tr>\"),n.fl()},partials:{},subs:{}});nt[\"generic-file-path\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-file-name-wrapper\">'),n.b(`\n`+r),n.b(n.rp(\"<fileIcon0\",e,t,\"    \")),n.b('    <span class=\"d2h-file-name\">'),n.b(n.v(n.f(\"fileDiffName\",e,t,0))),n.b(\"</span>\"),n.b(`\n`+r),n.b(n.rp(\"<fileTag1\",e,t,\"    \")),n.b(\"</span>\"),n.b(`\n`+r),n.b('<label class=\"d2h-file-collapse\">'),n.b(`\n`+r),n.b('    <input class=\"d2h-file-collapse-input\" type=\"checkbox\" name=\"viewed\" value=\"viewed\">'),n.b(`\n`+r),n.b(\"    Viewed\"),n.b(`\n`+r),n.b(\"</label>\"),n.fl()},partials:{\"<fileIcon0\":{name:\"fileIcon\",partials:{},subs:{}},\"<fileTag1\":{name:\"fileTag\",partials:{},subs:{}}},subs:{}});nt[\"generic-line\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b(\"<tr>\"),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.f(\"lineClass\",e,t,0))),n.b(\" \"),n.b(n.v(n.f(\"type\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b(\"      \"),n.b(n.t(n.f(\"lineNumber\",e,t,0))),n.b(`\n`+r),n.b(\"    </td>\"),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.f(\"type\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('        <div class=\"'),n.b(n.v(n.f(\"contentClass\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.s(n.f(\"prefix\",e,t,1),e,t,0,162,238,\"{{ }}\")&&(n.rs(e,t,function(i,a,s){s.b('            <span class=\"d2h-code-line-prefix\">'),s.b(s.t(s.f(\"prefix\",i,a,0))),s.b(\"</span>\"),s.b(`\n`+r)}),e.pop()),n.s(n.f(\"prefix\",e,t,1),e,t,1,0,0,\"\")||(n.b('            <span class=\"d2h-code-line-prefix\">&nbsp;</span>'),n.b(`\n`+r)),n.s(n.f(\"content\",e,t,1),e,t,0,371,445,\"{{ }}\")&&(n.rs(e,t,function(i,a,s){s.b('            <span class=\"d2h-code-line-ctn\">'),s.b(s.t(s.f(\"content\",i,a,0))),s.b(\"</span>\"),s.b(`\n`+r)}),e.pop()),n.s(n.f(\"content\",e,t,1),e,t,1,0,0,\"\")||(n.b('            <span class=\"d2h-code-line-ctn\"><br></span>'),n.b(`\n`+r)),n.b(\"        </div>\"),n.b(`\n`+r),n.b(\"    </td>\"),n.b(`\n`+r),n.b(\"</tr>\"),n.fl()},partials:{},subs:{}});nt[\"generic-wrapper\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div class=\"d2h-wrapper '),n.b(n.v(n.f(\"colorScheme\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b(\"    \"),n.b(n.t(n.f(\"content\",e,t,0))),n.b(`\n`+r),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file-added\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon d2h-added\" height=\"16\" title=\"added\" version=\"1.1\" viewBox=\"0 0 14 16\"'),n.b(`\n`+r),n.b('     width=\"14\">'),n.b(`\n`+r),n.b('    <path d=\"M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file-changed\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon d2h-changed\" height=\"16\" title=\"modified\" version=\"1.1\"'),n.b(`\n`+r),n.b('     viewBox=\"0 0 14 16\" width=\"14\">'),n.b(`\n`+r),n.b('    <path d=\"M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file-deleted\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon d2h-deleted\" height=\"16\" title=\"removed\" version=\"1.1\"'),n.b(`\n`+r),n.b('     viewBox=\"0 0 14 16\" width=\"14\">'),n.b(`\n`+r),n.b('    <path d=\"M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM11 9H3V7h8v2z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file-renamed\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon d2h-moved\" height=\"16\" title=\"renamed\" version=\"1.1\"'),n.b(`\n`+r),n.b('     viewBox=\"0 0 14 16\" width=\"14\">'),n.b(`\n`+r),n.b('    <path d=\"M6 9H3V7h3V4l5 4-5 4V9z m8-7v12c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h12c0.55 0 1 0.45 1 1z m-1 0H1v12h12V2z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon\" height=\"16\" version=\"1.1\" viewBox=\"0 0 12 16\" width=\"12\">'),n.b(`\n`+r),n.b('    <path d=\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"line-by-line-file-diff\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div id=\"'),n.b(n.v(n.f(\"fileHtmlId\",e,t,0))),n.b('\" class=\"d2h-file-wrapper\" data-lang=\"'),n.b(n.v(n.d(\"file.language\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('    <div class=\"d2h-file-header\">'),n.b(`\n`+r),n.b(\"    \"),n.b(n.t(n.f(\"filePath\",e,t,0))),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b('    <div class=\"d2h-file-diff\">'),n.b(`\n`+r),n.b('        <div class=\"d2h-code-wrapper\">'),n.b(`\n`+r),n.b('            <table class=\"d2h-diff-table\">'),n.b(`\n`+r),n.b('                <tbody class=\"d2h-diff-tbody\">'),n.b(`\n`+r),n.b(\"                \"),n.b(n.t(n.f(\"diffs\",e,t,0))),n.b(`\n`+r),n.b(\"                </tbody>\"),n.b(`\n`+r),n.b(\"            </table>\"),n.b(`\n`+r),n.b(\"        </div>\"),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"line-by-line-numbers\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div class=\"line-num1\">'),n.b(n.v(n.f(\"oldNumber\",e,t,0))),n.b(\"</div>\"),n.b(`\n`+r),n.b('<div class=\"line-num2\">'),n.b(n.v(n.f(\"newNumber\",e,t,0))),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"side-by-side-file-diff\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div id=\"'),n.b(n.v(n.f(\"fileHtmlId\",e,t,0))),n.b('\" class=\"d2h-file-wrapper\" data-lang=\"'),n.b(n.v(n.d(\"file.language\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('    <div class=\"d2h-file-header\">'),n.b(`\n`+r),n.b(\"      \"),n.b(n.t(n.f(\"filePath\",e,t,0))),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b('    <div class=\"d2h-files-diff\">'),n.b(`\n`+r),n.b('        <div class=\"d2h-file-side-diff\">'),n.b(`\n`+r),n.b('            <div class=\"d2h-code-wrapper\">'),n.b(`\n`+r),n.b('                <table class=\"d2h-diff-table\">'),n.b(`\n`+r),n.b('                    <tbody class=\"d2h-diff-tbody\">'),n.b(`\n`+r),n.b(\"                    \"),n.b(n.t(n.d(\"diffs.left\",e,t,0))),n.b(`\n`+r),n.b(\"                    </tbody>\"),n.b(`\n`+r),n.b(\"                </table>\"),n.b(`\n`+r),n.b(\"            </div>\"),n.b(`\n`+r),n.b(\"        </div>\"),n.b(`\n`+r),n.b('        <div class=\"d2h-file-side-diff\">'),n.b(`\n`+r),n.b('            <div class=\"d2h-code-wrapper\">'),n.b(`\n`+r),n.b('                <table class=\"d2h-diff-table\">'),n.b(`\n`+r),n.b('                    <tbody class=\"d2h-diff-tbody\">'),n.b(`\n`+r),n.b(\"                    \"),n.b(n.t(n.d(\"diffs.right\",e,t,0))),n.b(`\n`+r),n.b(\"                    </tbody>\"),n.b(`\n`+r),n.b(\"                </table>\"),n.b(`\n`+r),n.b(\"            </div>\"),n.b(`\n`+r),n.b(\"        </div>\"),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"tag-file-added\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-tag d2h-added d2h-added-tag\">ADDED</span>'),n.fl()},partials:{},subs:{}});nt[\"tag-file-changed\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-tag d2h-changed d2h-changed-tag\">CHANGED</span>'),n.fl()},partials:{},subs:{}});nt[\"tag-file-deleted\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-tag d2h-deleted d2h-deleted-tag\">DELETED</span>'),n.fl()},partials:{},subs:{}});nt[\"tag-file-renamed\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-tag d2h-moved d2h-moved-tag\">RENAMED</span>'),n.fl()},partials:{},subs:{}});var nc=class{constructor({compiledTemplates:t={},rawTemplates:r={}}){let n=Object.entries(r).reduce((i,[a,s])=>{let o=T0.compile(s,{asString:!1});return Object.assign(Object.assign({},i),{[a]:o})},{});this.preCompiledTemplates=Object.assign(Object.assign(Object.assign({},nt),t),n)}static compile(t){return T0.compile(t,{asString:!1})}render(t,r,n,i,a){let s=this.templateKey(t,r);try{return this.preCompiledTemplates[s].render(n,i,a)}catch(o){throw new Error(`Could not find template to render '${s}'`)}}template(t,r){return this.preCompiledTemplates[this.templateKey(t,r)]}templateKey(t,r){return`${t}-${r}`}};var GB=Object.assign(Object.assign(Object.assign({},x0),S0),{outputFormat:cC.LINE_BY_LINE,drawFileList:!0});function PC(e,t={}){let r=Object.assign(Object.assign({},GB),t),n=typeof e==\"string\"?vC(e,r):e,i=new nc(r),{colorScheme:a}=r,s={colorScheme:a},o=r.drawFileList?new pd(i,s).render(n):\"\",c=r.outputFormat===\"side-by-side\"?new rc(i,r).render(n):new ec(i,r).render(n);return o+c}var gd=require(\"obsidian\");var Ta=class extends gd.ItemView{constructor(r,n){super(r);this.plugin=n;this.gettingDiff=!1;this.parser=new DOMParser,this.navigation=!0,this.gitRefreshRef=this.app.workspace.on(\"obsidian-git:status-changed\",()=>{this.refresh().catch(console.error)})}getViewType(){return ki.type}getDisplayText(){var r;if(((r=this.state)==null?void 0:r.bFile)!=null){let n=this.state.bFile.split(\"/\").last();return n!=null&&n.endsWith(\".md\")&&(n=n.slice(0,-3)),`Diff: ${n}`}return ki.name}getIcon(){return ki.icon}async setState(r,n){this.state=r,gd.Platform.isMobile&&(this.leaf.view.titleEl.textContent=this.getDisplayText()),await this.refresh()}getState(){return this.state}onClose(){return this.app.workspace.offref(this.gitRefreshRef),this.app.workspace.offref(this.gitViewRefreshRef),super.onClose()}async onOpen(){return await this.refresh(),super.onOpen()}async refresh(){var r;if((r=this.state)!=null&&r.bFile&&!this.gettingDiff&&this.plugin.gitManager){this.gettingDiff=!0;try{let n=await this.plugin.gitManager.getDiffString(this.state.bFile,this.state.aRef==\"HEAD\",this.state.bRef);this.contentEl.empty();let i=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);if(!n){if(this.plugin.gitManager instanceof Te&&await this.plugin.gitManager.isTracked(this.state.bFile))n=[`--- ${this.state.aFile}`,`+++ ${this.state.bFile}`,\"\"].join(`\n`);else if(await this.app.vault.adapter.exists(i)){let a=await this.app.vault.adapter.read(i);n=[...`--- /dev/null\n+++ ${this.state.bFile}\n@@ -0,0 +1,${a.split(`\n`).length} @@`.split(`\n`),...a.split(`\n`).map(o=>`+${o}`)].join(`\n`)}}if(n){let a=this.parser.parseFromString(PC(n),\"text/html\").querySelector(\".d2h-file-diff\");this.contentEl.append(a)}else{let a=this.contentEl.createDiv({cls:\"obsidian-git-center\"});a.createSpan({text:\"\\u26A0\\uFE0F\",attr:{style:\"font-size: 2em\"}}),a.createEl(\"br\"),a.createSpan({text:\"File not found: \"+this.state.bFile})}}finally{this.gettingDiff=!1}}}};g();var W3=require(\"obsidian\");g();g();g();var RC=\"5\";typeof window!=\"undefined\"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(RC);g();g();var no=\"[\",Ca=\"[!\",Pa=\"]\",Di={};var ct=Symbol(),qt=Symbol(\"filename\"),MC=Symbol(\"hmr\");g();g();var zB=[\"allowfullscreen\",\"async\",\"autofocus\",\"autoplay\",\"checked\",\"controls\",\"default\",\"disabled\",\"formnovalidate\",\"hidden\",\"indeterminate\",\"ismap\",\"loop\",\"multiple\",\"muted\",\"nomodule\",\"novalidate\",\"open\",\"playsinline\",\"readonly\",\"required\",\"reversed\",\"seamless\",\"selected\",\"webkitdirectory\"];var oZ=[...zB,\"formNoValidate\",\"isMap\",\"noModule\",\"playsInline\",\"readOnly\",\"value\",\"inert\",\"volume\",\"defaultValue\",\"defaultChecked\",\"srcObject\"];var VB=[\"touchstart\",\"touchmove\"];function OC(e){return VB.includes(e)}g();g();g();var vd=!0;g();var z=!1;g();var sn=Array.isArray,ic=Array.from,C0=Object.keys,Mt=Object.defineProperty,Br=Object.getOwnPropertyDescriptor,P0=Object.getOwnPropertyDescriptors,R0=Object.prototype,IC=Array.prototype,Ra=Object.getPrototypeOf;function M0(e){return typeof e==\"function\"}var _r=()=>{};function yd(e){for(var t=0;t<e.length;t++)e[t]()}g();g();var xr=Symbol(\"$state\"),Ma=Symbol(\"$state metadata\"),wd=Symbol(\"legacy props\"),FC=Symbol(\"\");g();g();function bd(e){return e===this.v}function O0(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e==\"object\"||typeof e==\"function\"}function io(e){return!O0(e,this.v)}g();function I0(){if(z){let e=new Error(\"bind_invalid_checkbox_value\\nUsing `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/bind_invalid_checkbox_value\")}function $C(){if(z){let e=new Error(`derived_references_self\nA derived value cannot reference itself recursively\nhttps://svelte.dev/e/derived_references_self`);throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/derived_references_self\")}function LC(e){if(z){let t=new Error(`effect_in_teardown\n\\`${e}\\` cannot be used inside an effect cleanup function\nhttps://svelte.dev/e/effect_in_teardown`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/effect_in_teardown\")}function DC(){if(z){let e=new Error(\"effect_in_unowned_derived\\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/effect_in_unowned_derived\")}function NC(e){if(z){let t=new Error(`effect_orphan\n\\`${e}\\` can only be used inside an effect (e.g. during component initialisation)\nhttps://svelte.dev/e/effect_orphan`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/effect_orphan\")}function jC(){if(z){let e=new Error(`effect_update_depth_exceeded\nMaximum update depth exceeded. This can happen when a reactive block or effect repeatedly sets a new value. Svelte limits the number of nested updates to prevent infinite loops\nhttps://svelte.dev/e/effect_update_depth_exceeded`);throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/effect_update_depth_exceeded\")}function BC(){if(z){let e=new Error(`hydration_failed\nFailed to hydrate the application\nhttps://svelte.dev/e/hydration_failed`);throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/hydration_failed\")}function HC(e){if(z){let t=new Error(`props_invalid_value\nCannot do \\`bind:${e}={undefined}\\` when \\`${e}\\` has a fallback value\nhttps://svelte.dev/e/props_invalid_value`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/props_invalid_value\")}function UC(e){if(z){let t=new Error(`rune_outside_svelte\nThe \\`${e}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\nhttps://svelte.dev/e/rune_outside_svelte`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/rune_outside_svelte\")}function GC(){if(z){let e=new Error(\"state_descriptors_fixed\\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\\nhttps://svelte.dev/e/state_descriptors_fixed\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/state_descriptors_fixed\")}function zC(){if(z){let e=new Error(\"state_prototype_fixed\\nCannot set prototype of `$state` object\\nhttps://svelte.dev/e/state_prototype_fixed\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/state_prototype_fixed\")}function VC(){if(z){let e=new Error(\"state_unsafe_local_read\\nReading state that was created inside the same derived is forbidden. Consider using `untrack` to read locally created state\\nhttps://svelte.dev/e/state_unsafe_local_read\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/state_unsafe_local_read\")}function WC(){if(z){let e=new Error(\"state_unsafe_mutation\\nUpdating state inside a derived or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\\nhttps://svelte.dev/e/state_unsafe_mutation\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/state_unsafe_mutation\")}g();var Jn=!1,Qn=!1;g();g();g();var ac=null;function ei(e){let t=Error(),r=t.stack;if(r){let n=r.split(`\n`),i=[`\n`];for(let a=0;a<n.length;a++){let s=n[a];if(s!==\"Error\"){if(s.includes(\"validate_each_keys\"))return null;s.includes(\"svelte/src/internal\")||i.push(s)}}if(i.length===1)return null;Mt(t,\"stack\",{value:i.join(`\n`)}),Mt(t,\"name\",{value:`${e}Error`})}return t}var Oa=new Set;function L0(e){Oa=e}function ut(e,t){var r={f:0,v:e,reactions:null,equals:bd,version:0};return z&&Qn&&(r.created=t!=null?t:ei(\"CreatedAt\"),r.debug=null),r}function ft(e){return qB(ut(e))}function Ni(e,t=!1){var n,i;let r=ut(e);return t||(r.equals=io),Jn&&he!==null&&he.l!==null&&((i=(n=he.l).s)!=null?i:n.s=[]).push(r),r}function qB(e){return fe!==null&&fe.f&2&&(on===null?XC([e]):on.push(e)),e}function re(e,t){return fe!==null&&ji()&&fe.f&18&&(on===null||!on.includes(e))&&WC(),so(e,t)}function so(e,t){if(!e.equals(t)&&(e.v=t,e.version=_d(),z&&Qn&&(e.updated=ei(\"UpdatedAt\")),YC(e,2048),ji()&&te!==null&&te.f&1024&&!(te.f&32)&&(At!==null&&At.includes(e)?(Xt(te,2048),oo(te)):ti===null?ZC([e]):ti.push(e)),z&&Oa.size>0)){let n=Array.from(Oa);var r=ri;ao(!0);try{for(let i of n)i.f&1024&&Xt(i,4096),Bi(i)&&Fa(i)}finally{ao(r)}Oa.clear()}return t}function YC(e,t){var r=e.reactions;if(r!==null)for(var n=ji(),i=r.length,a=0;a<i;a++){var s=r[a],o=s.f;if(!(o&2048)&&!(!n&&s===te)){if(z&&o&262144){Oa.add(s);continue}Xt(s,t),o&1280&&(o&2?YC(s,4096):oo(s))}}}g();g();g();var oc=\"font-weight: bold\",lc=\"font-weight: normal\";function KC(e,t,r){z?console.warn(`%c[svelte] hydration_attribute_changed\n%cThe \\`${e}\\` attribute on \\`${t}\\` changed its value between server and client renders. The client value, \\`${r}\\`, will be ignored in favour of the server value\nhttps://svelte.dev/e/hydration_attribute_changed`,oc,lc):console.warn(\"https://svelte.dev/e/hydration_attribute_changed\")}function lo(e){z?console.warn(`%c[svelte] hydration_mismatch\n%c${e?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${e}`:\"Hydration failed because the initial UI does not match what was rendered on the server\"}\nhttps://svelte.dev/e/hydration_mismatch`,oc,lc):console.warn(\"https://svelte.dev/e/hydration_mismatch\")}function JC(){z?console.warn(`%c[svelte] lifecycle_double_unmount\n%cTried to unmount a component that was not mounted\nhttps://svelte.dev/e/lifecycle_double_unmount`,oc,lc):console.warn(\"https://svelte.dev/e/lifecycle_double_unmount\")}function D0(e,t){z?console.warn(`%c[svelte] ownership_invalid_mutation\n%c${e?`${e} mutated a value owned by ${t}. This is strongly discouraged. Consider passing values to child components with \\`bind:\\`, or use a callback instead`:\"Mutating a value outside the component that created it is strongly discouraged. Consider passing values to child components with `bind:`, or use a callback instead\"}\nhttps://svelte.dev/e/ownership_invalid_mutation`,oc,lc):console.warn(\"https://svelte.dev/e/ownership_invalid_mutation\")}function xd(e){z?console.warn(`%c[svelte] state_proxy_equality_mismatch\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${e}\\` will produce unexpected results\nhttps://svelte.dev/e/state_proxy_equality_mismatch`,oc,lc):console.warn(\"https://svelte.dev/e/state_proxy_equality_mismatch\")}var ae=!1;function or(e){ae=e}var ue;function Qe(e){if(e===null)throw lo(),Di;return ue=e}function Ot(){return Qe(It(ue))}function B(e){if(ae){if(It(ue)!==null)throw lo(),Di;ue=e}}function co(e=1){if(ae){for(var t=e,r=ue;t--;)r=It(r);ue=r}}function uo(){for(var e=0,t=ue;;){if(t.nodeType===8){var r=t.data;if(r===Pa){if(e===0)return t;e-=1}else(r===no||r===Ca)&&(e+=1)}var n=It(t);t.remove(),t=n}}g();g();g();var YB={},XB=/at (?:.+ \\()?(.+):(\\d+):(\\d+)\\)?$/,ZB=/@(.+):(\\d+):(\\d+)$/;function KB(){var r;let e=new Error().stack;if(!e)return null;let t=[];for(let n of e.split(`\n`)){let i=(r=XB.exec(n))!=null?r:ZB.exec(n);i&&t.push({file:i[1],line:+i[2],column:+i[3]})}return t}function QC(){var t;let e=(t=KB())==null?void 0:t.slice(4);if(!e)return null;for(let r=0;r<e.length;r++){let n=e[r],i=YB[n.file];if(!i){if(r===0)return null;continue}for(let a of i){if(a.end==null)return null;if(a.start.line<n.line&&a.end.line>n.line)return a.component}}return null}var JB=Symbol(\"ADD_OWNER\");function N0(e,t){if(t.owners!==null)for(;e;){if(e.owners===null){t.owners=null;break}for(let r of e.owners)t.owners.add(r);e=e.parent}}function e3(e,t){return e.owners===null?!0:e.owners.has(t)||e.parent!==null&&e3(e.parent,t)}function t3(e){var t,r;return(r=(t=e==null?void 0:e.owners)==null?void 0:t.values().next().value)!=null?r:t3(e.parent)}var QB=!1;function r3(e){if(QB)return;let t=QC();if(t&&!e3(e,t)){let r=t3(e);r[qt]!==t[qt]?D0(t[qt],r[qt]):D0()}}function be(e,t=null,r){var l,u;var n=null;if(z&&Qn&&(n=ei(\"CreatedAt\")),typeof e!=\"object\"||e===null||xr in e)return e;let i=Ra(e);if(i!==R0&&i!==IC)return e;var a=new Map,s=sn(e),o=ut(0);s&&a.set(\"length\",ut(e.length,n));var c;if(z)if(c={parent:t,owners:null},r){let f=(u=(l=r.v)==null?void 0:l[Ma])==null?void 0:u.owners;c.owners=f?new Set(f):null}else c.owners=t===null?he!==null?new Set([he.function]):null:new Set;return new Proxy(e,{defineProperty(f,d,h){(!(\"value\"in h)||h.configurable===!1||h.enumerable===!1||h.writable===!1)&&GC();var p=a.get(d);return p===void 0?(p=ut(h.value,n),a.set(d,p)):re(p,be(h.value,c)),!0},deleteProperty(f,d){var h=a.get(d);if(h===void 0)d in f&&a.set(d,ut(ct,n));else{if(s&&typeof d==\"string\"){var p=a.get(\"length\"),m=Number(d);Number.isInteger(m)&&m<p.v&&re(p,m)}re(h,ct),n3(o)}return!0},get(f,d,h){var b;if(z&&d===Ma)return c;if(d===xr)return e;var p=a.get(d),m=d in f;if(p===void 0&&(!m||(b=Br(f,d))!=null&&b.writable)&&(p=ut(be(m?f[d]:ct,c),n),a.set(d,p)),p!==void 0){var v=R(p);if(z){var y=v==null?void 0:v[Ma];y&&(y==null?void 0:y.parent)!==c&&N0(c,y)}return v===ct?void 0:v}return Reflect.get(f,d,h)},getOwnPropertyDescriptor(f,d){var h=Reflect.getOwnPropertyDescriptor(f,d);if(h&&\"value\"in h){var p=a.get(d);p&&(h.value=R(p))}else if(h===void 0){var m=a.get(d),v=m==null?void 0:m.v;if(m!==void 0&&v!==ct)return{enumerable:!0,configurable:!0,value:v,writable:!0}}return h},has(f,d){var v;if(z&&d===Ma||d===xr)return!0;var h=a.get(d),p=h!==void 0&&h.v!==ct||Reflect.has(f,d);if(h!==void 0||te!==null&&(!p||(v=Br(f,d))!=null&&v.writable)){h===void 0&&(h=ut(p?be(f[d],c):ct,n),a.set(d,h));var m=R(h);if(m===ct)return!1}return p},set(f,d,h,p){var w;var m=a.get(d),v=d in f;if(s&&d===\"length\")for(var y=h;y<m.v;y+=1){var b=a.get(y+\"\");b!==void 0?re(b,ct):y in f&&(b=ut(ct,n),a.set(y+\"\",b))}if(m===void 0?(!v||(w=Br(f,d))!=null&&w.writable)&&(m=ut(void 0,n),re(m,be(h,c)),a.set(d,m)):(v=m.v!==ct,re(m,be(h,c))),z){var x=h==null?void 0:h[Ma];x&&(x==null?void 0:x.parent)!==c&&N0(c,x),r3(c)}var E=Reflect.getOwnPropertyDescriptor(f,d);if(E!=null&&E.set&&E.set.call(p,h),!v){if(s&&typeof d==\"string\"){var _=a.get(\"length\"),k=Number(d);Number.isInteger(k)&&k>=_.v&&re(_,k+1)}n3(o)}return!0},ownKeys(f){R(o);var d=Reflect.ownKeys(f).filter(m=>{var v=a.get(m);return v===void 0||v.v!==ct});for(var[h,p]of a)p.v!==ct&&!(h in f)&&d.push(h);return d},setPrototypeOf(){zC()}})}function n3(e,t=1){re(e,e.v+t)}function Ed(e){return e!==null&&typeof e==\"object\"&&xr in e?e[xr]:e}function i3(){let e=Array.prototype,t=Array.__svelte_cleanup;t&&t();let{indexOf:r,lastIndexOf:n,includes:i}=e;e.indexOf=function(a,s){let o=r.call(this,a,s);if(o===-1){for(let c=s!=null?s:0;c<this.length;c+=1)if(Ed(this[c])===a){xd(\"array.indexOf(...)\");break}}return o},e.lastIndexOf=function(a,s){let o=n.call(this,a,s!=null?s:this.length-1);if(o===-1){for(let c=0;c<=(s!=null?s:this.length-1);c+=1)if(Ed(this[c])===a){xd(\"array.lastIndexOf(...)\");break}}return o},e.includes=function(a,s){let o=i.call(this,a,s);if(!o){for(let c=0;c<this.length;c+=1)if(Ed(this[c])===a){xd(\"array.includes(...)\");break}}return o},Array.__svelte_cleanup=()=>{e.indexOf=r,e.lastIndexOf=n,e.includes=i}}var j0,a3,s3,o3;function Ad(){if(j0===void 0){j0=window,a3=document;var e=Element.prototype,t=Node.prototype;s3=Br(t,\"firstChild\").get,o3=Br(t,\"nextSibling\").get,e.__click=void 0,e.__className=\"\",e.__attributes=null,e.__styles=null,e.__e=void 0,Text.prototype.__t=void 0,z&&(e.__svelte_meta=null,i3())}}function Vr(e=\"\"){return document.createTextNode(e)}function kt(e){return s3.call(e)}function It(e){return o3.call(e)}function H(e,t){if(!ae)return kt(e);var r=kt(ue);if(r===null)r=ue.appendChild(Vr());else if(t&&r.nodeType!==3){var n=Vr();return r==null||r.before(n),Qe(n),n}return Qe(r),r}function cr(e,t){var i,a;if(!ae){var r=kt(e);return r instanceof Comment&&r.data===\"\"?It(r):r}if(t&&((i=ue)==null?void 0:i.nodeType)!==3){var n=Vr();return(a=ue)==null||a.before(n),Qe(n),n}return ue}function Z(e,t=1,r=!1){let n=ae?ue:e;for(var i;t--;)i=n,n=It(n);if(!ae)return n;var a=n==null?void 0:n.nodeType;if(r&&a!==3){var s=Vr();return n===null?i==null||i.after(s):n.before(s),Qe(s),s}return Qe(n),n}function fo(e){e.textContent=\"\"}g();function Ye(e){var i;var t=2050;te===null?t|=256:te.f|=1048576;var r=fe!==null&&fe.f&2?fe:null;let n={children:null,ctx:he,deps:null,equals:bd,f:t,fn:e,reactions:null,v:null,version:0,parent:r!=null?r:te};return z&&Qn&&(n.created=ei(\"CreatedAt\")),r!==null&&((i=r.children)!=null?i:r.children=[]).push(n),n}function G0(e){let t=Ye(e);return t.equals=io,t}function H0(e){var t=e.children;if(t!==null){e.children=null;for(var r=0;r<t.length;r+=1){var n=t[r];n.f&2?cc(n):Ft(n)}}}var B0=[];function e7(e){for(var t=e.parent;t!==null;){if(!(t.f&2))return t;t=t.parent}return null}function z0(e){var t,r=te;if(it(e7(e)),z){let n=Oa;L0(new Set);try{B0.includes(e)&&$C(),B0.push(e),H0(e),t=kd(e)}finally{it(r),L0(n),B0.pop()}}else try{H0(e),t=kd(e)}finally{it(r)}return t}function V0(e){var t=z0(e),r=(ni||e.f&256)&&e.deps!==null?4096:1024;Xt(e,r),e.equals(t)||(e.v=t,e.version=_d())}function cc(e){H0(e),$a(e,0),Xt(e,16384),e.v=e.children=e.deps=e.ctx=e.reactions=null}function c3(e){te===null&&fe===null&&NC(e),fe!==null&&fe.f&256&&DC(),Cd&&LC(e)}function t7(e,t){var r=t.last;r===null?t.last=t.first=e:(r.next=e,e.prev=r,t.last=e)}function La(e,t,r,n=!0){var u;var i=(e&64)!==0,a=te;if(z)for(;a!==null&&a.f&262144;)a=a.parent;var s={ctx:he,deps:null,deriveds:null,nodes_start:null,nodes_end:null,f:e|2048,first:null,fn:t,last:null,next:null,parent:i?null:a,prev:null,teardown:null,transitions:null,version:0};if(z&&(s.component_function=zr),r){var o=ri;try{ao(!0),Fa(s),s.f|=32768}catch(f){throw Ft(s),f}finally{ao(o)}}else t!==null&&oo(s);var c=r&&s.deps===null&&s.first===null&&s.nodes_start===null&&s.teardown===null&&(s.f&1048576)===0;if(!c&&!i&&n&&(a!==null&&t7(s,a),fe!==null&&fe.f&2)){var l=fe;((u=l.children)!=null?u:l.children=[]).push(s)}return s}function qr(e){let t=La(8,null,!1);return Xt(t,1024),t.teardown=e,t}function $t(e){var i;c3(\"$effect\");var t=te!==null&&(te.f&32)!==0&&he!==null&&!he.m;if(z&&Mt(e,\"name\",{value:\"$effect\"}),t){var r=he;((i=r.e)!=null?i:r.e=[]).push({fn:e,effect:te,reaction:fe})}else{var n=Sr(e);return n}}function X0(e){let t=La(64,e,!0);return()=>{Ft(t)}}function u3(e){let t=La(64,e,!0);return(r={})=>new Promise(n=>{r.outro?cn(t,()=>{Ft(t),n(void 0)}):(Ft(t),n(void 0))})}function Sr(e){return La(4,e,!1)}function lr(e){return La(8,e,!0)}function xe(e){return z&&Mt(e,\"name\",{value:\"{expression}\"}),ur(e)}function ur(e,t=0){return La(24|t,e,!0)}function Lt(e,t=!0){return La(40,e,!0,t)}function Z0(e){var t=e.teardown;if(t!==null){let r=Cd,n=fe;W0(!0),Tt(null);try{t.call(null)}finally{W0(r),Tt(n)}}}function K0(e){var t=e.deriveds;if(t!==null){e.deriveds=null;for(var r=0;r<t.length;r+=1)cc(t[r])}}function J0(e,t=!1){var r=e.first;for(e.first=e.last=null;r!==null;){var n=r.next;Ft(r,t),r=n}}function f3(e){for(var t=e.first;t!==null;){var r=t.next;t.f&32||Ft(t),t=r}}function Ft(e,t=!0){var r=!1;if((t||e.f&524288)&&e.nodes_start!==null){for(var n=e.nodes_start,i=e.nodes_end;n!==null;){var a=n===i?null:It(n);n.remove(),n=a}r=!0}J0(e,t&&!r),K0(e),$a(e,0),Xt(e,16384);var s=e.transitions;if(s!==null)for(let c of s)c.stop();Z0(e);var o=e.parent;o!==null&&o.first!==null&&Q0(e),z&&(e.component_function=null),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes_start=e.nodes_end=null}function Q0(e){var t=e.parent,r=e.prev,n=e.next;r!==null&&(r.next=n),n!==null&&(n.prev=r),t!==null&&(t.first===e&&(t.first=n),t.last===e&&(t.last=r))}function cn(e,t){var r=[];Td(e,r,!0),ev(r,()=>{Ft(e),t&&t()})}function ev(e,t){var r=e.length;if(r>0){var n=()=>--r||t();for(var i of e)i.out(n)}else t()}function Td(e,t,r){if(!(e.f&8192)){if(e.f^=8192,e.transitions!==null)for(let s of e.transitions)(s.is_global||r)&&t.push(s);for(var n=e.first;n!==null;){var i=n.next,a=(n.f&65536)!==0||(n.f&32)!==0;Td(n,t,a?r:!1),n=i}}}function Gi(e){d3(e,!0)}function d3(e,t){if(e.f&8192){Bi(e)&&Fa(e),e.f^=8192;for(var r=e.first;r!==null;){var n=r.next,i=(r.f&65536)!==0||(r.f&32)!==0;d3(r,i?t:!1),r=n}if(e.transitions!==null)for(let a of e.transitions)(a.is_global||t)&&a.in()}}g();var Pd=!1,p3=!1,tv=[],h3=[];function m3(){Pd=!1;let e=tv.slice();tv=[],yd(e)}function r7(){p3=!1;let e=h3.slice();h3=[],yd(e)}function fr(e){Pd||(Pd=!0,queueMicrotask(m3)),tv.push(e)}function g3(){Pd&&m3(),p3&&r7()}g();function uc(e){if(z){let t=new Error(`lifecycle_outside_component\n\\`${e}(...)\\` can only be used during component initialisation\nhttps://svelte.dev/e/lifecycle_outside_component`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/lifecycle_outside_component\")}var x3=0,a7=1,v3=new WeakSet,Rd=!1,Md=x3,fc=!1,po=null,ri=!1,Cd=!1;function ao(e){ri=e}function W0(e){Cd=e}var Da=[],mo=0,dc=[],fe=null;function Tt(e){fe=e}var te=null;function it(e){te=e}var on=null;function XC(e){on=e}var At=null,Er=0,ti=null;function ZC(e){ti=e}var S3=1,ni=!1,sc=null;var he=null;var zr=null;function _d(){return++S3}function ji(){return!Jn||he!==null&&he.l===null}function Bi(e){var s,o,c,l;var t=e.f;if(t&2048)return!0;if(t&4096){var r=e.deps,n=(t&256)!==0;if(r!==null){var i;if(t&512){for(i=0;i<r.length;i++)((o=(s=r[i]).reactions)!=null?o:s.reactions=[]).push(e);e.f^=512}for(i=0;i<r.length;i++){var a=r[i];if(Bi(a)&&V0(a),n&&te!==null&&!ni&&!((c=a==null?void 0:a.reactions)!=null&&c.includes(e))&&((l=a.reactions)!=null?l:a.reactions=[]).push(e),a.version>e.version)return!0}}(!n||te!==null&&!ni)&&Xt(e,1024)}return!1}function y3(e,t){for(var r=t;r!==null;){if(r.f&128)try{r.fn(e);return}catch(n){r.f^=128}r=r.parent}throw Rd=!1,e}function w3(e){return(e.f&16384)===0&&(e.parent===null||(e.parent.f&128)===0)}function go(e,t,r,n){var u,f;if(Rd){if(r===null&&(Rd=!1),w3(t))throw e;return}if(r!==null&&(Rd=!0),!z||n===null||!(e instanceof Error)||v3.has(e)){y3(e,t);return}v3.add(e);let i=[],a=(u=t.fn)==null?void 0:u.name;a&&i.push(a);let s=n;for(;s!==null;){if(z){var o=(f=s.function)==null?void 0:f[qt];if(o){let d=o.split(\"/\").pop();i.push(d)}}s=s.p}let c=/Firefox/.test(navigator.userAgent)?\"  \":\"\t\";Mt(e,\"message\",{value:e.message+`\n${i.map(d=>`\n${c}in ${d}`).join(\"\")}\n`}),Mt(e,\"component_stack\",{value:i});let l=e.stack;if(l){let d=l.split(`\n`),h=[];for(let p=0;p<d.length;p++){let m=d[p];m.includes(\"svelte/src/internal\")||h.push(m)}Mt(e,\"stack\",{value:h.join(`\n`)})}if(y3(e,t),w3(t))throw e}function kd(e){var d,h;var t=At,r=Er,n=ti,i=fe,a=ni,s=on,o=he,c=e.f;At=null,Er=0,ti=null,fe=c&96?null:e,ni=!ri&&(c&256)!==0,on=null,he=e.ctx;try{var l=(0,e.fn)(),u=e.deps;if(At!==null){var f;if($a(e,Er),u!==null&&Er>0)for(u.length=Er+At.length,f=0;f<At.length;f++)u[Er+f]=At[f];else e.deps=u=At;if(!ni)for(f=Er;f<u.length;f++)((h=(d=u[f]).reactions)!=null?h:d.reactions=[]).push(e)}else u!==null&&Er<u.length&&($a(e,Er),u.length=Er);return l}finally{At=t,Er=r,ti=n,fe=i,ni=a,on=s,he=o}}function s7(e,t){let r=t.reactions;if(r!==null){var n=r.indexOf(e);if(n!==-1){var i=r.length-1;i===0?r=t.reactions=null:(r[n]=r[i],r.pop())}}r===null&&t.f&2&&(At===null||!At.includes(t))&&(Xt(t,4096),t.f&768||(t.f^=512),$a(t,0))}function $a(e,t){var r=e.deps;if(r!==null)for(var n=t;n<r.length;n++)s7(e,r[n])}function Fa(e){var t=e.f;if(!(t&16384)){Xt(e,1024);var r=te,n=he;if(te=e,z){var i=zr;zr=e.component_function}try{t&16?f3(e):J0(e),K0(e),Z0(e);var a=kd(e);e.teardown=typeof a==\"function\"?a:null,e.version=S3,z&&dc.push(e)}catch(s){go(s,e,r,n||e.ctx)}finally{te=r,z&&(zr=i)}}}function b3(){console.error(\"Last ten effects were: \",dc.slice(-10).map(e=>e.fn)),dc=[]}function E3(){if(mo>1e3){mo=0;try{jC()}catch(e){if(z&&Mt(e,\"stack\",{value:\"\"}),po!==null)if(z)try{go(e,po,null,null)}catch(t){throw b3(),t}else go(e,po,null,null);else throw z&&b3(),e}}mo++}function A3(e){var t=e.length;if(t!==0){E3();var r=ri;ri=!0;try{for(var n=0;n<t;n++){var i=e[n];i.f&1024||(i.f^=1024);var a=[];k3(i,a),o7(a)}}finally{ri=r}}}function o7(e){var t=e.length;if(t!==0)for(var r=0;r<t;r++){var n=e[r];if(!(n.f&24576))try{Bi(n)&&(Fa(n),n.deps===null&&n.first===null&&n.nodes_start===null&&(n.teardown===null?Q0(n):n.fn=null))}catch(i){go(i,n,null,n.ctx)}}}function l7(){if(fc=!1,mo>1001)return;let e=Da;Da=[],A3(e),fc||(mo=0,po=null,z&&(dc=[]))}function oo(e){Md===x3&&(fc||(fc=!0,queueMicrotask(l7))),po=e;for(var t=e;t.parent!==null;){t=t.parent;var r=t.f;if(r&96){if(!(r&1024))return;t.f^=1024}}Da.push(t)}function k3(e,t){var r=e.first,n=[];e:for(;r!==null;){var i=r.f,a=(i&32)!==0,s=a&&(i&1024)!==0,o=r.next;if(!s&&!(i&8192))if(i&8){if(a)r.f^=1024;else try{Bi(r)&&Fa(r)}catch(f){go(f,r,null,r.ctx)}var c=r.first;if(c!==null){r=c;continue}}else i&4&&n.push(r);if(o===null){let f=r.parent;for(;f!==null;){if(e===f)break e;var l=f.next;if(l!==null){r=l;continue e}f=f.parent}}r=o}for(var u=0;u<n.length;u++)c=n[u],t.push(c),k3(c,t)}function vo(e){var t=Md,r=Da;try{E3();let i=[];Md=a7,Da=i,fc=!1,A3(r);var n=e==null?void 0:e();return g3(),(Da.length>0||i.length>0)&&vo(),mo=0,po=null,z&&(dc=[]),n}finally{Md=t,Da=r}}function R(e){var f,d;var t=e.f,r=(t&2)!==0;if(r&&t&16384){var n=z0(e);return cc(e),n}if(sc!==null&&sc.add(e),fe!==null){on!==null&&on.includes(e)&&VC();var i=fe.deps;At===null&&i!==null&&i[Er]===e?Er++:At===null?At=[e]:At.push(e),ti!==null&&te!==null&&te.f&1024&&!(te.f&32)&&ti.includes(e)&&(Xt(te,2048),oo(te))}else if(r&&e.deps===null)for(var a=e,s=a.parent,o=a;s!==null;)if(s.f&2){var c=s;o=c,s=c.parent}else{var l=s;(f=l.deriveds)!=null&&f.includes(o)||((d=l.deriveds)!=null?d:l.deriveds=[]).push(o);break}if(r&&(a=e,Bi(a)&&V0(a)),z&&Qn&&ac!==null&&fe!==null&&ac.reaction===fe){if(e.debug)e.debug();else if(e.created){var u=ac.entries.get(e);u===void 0&&(u={read:[]},ac.entries.set(e,u)),u.read.push(ei(\"TracedAt\"))}}return e.v}function Ue(e){let t=fe;try{return fe=null,e()}finally{fe=t}}var c7=-7169;function Xt(e,t){e.f=e.f&c7|t}function Xe(e,t=!1,r){he={p:he,c:null,e:null,m:!1,s:e,x:null,l:null},Jn&&!t&&(he.l={s:null,u:null,r1:[],r2:ut(!1)}),z&&(he.function=r,zr=r)}function Ze(e){var s,o;let t=he;if(t!==null){e!==void 0&&(t.x=e);let c=t.e;if(c!==null){var r=te,n=fe;t.e=null;try{for(var i=0;i<c.length;i++){var a=c[i];it(a.effect),Tt(a.reaction),Sr(a.fn)}}finally{it(r),Tt(n)}}he=t.p,z&&(zr=(o=(s=t.p)==null?void 0:s.function)!=null?o:null),t.m=!0}return e||{}}if(z){let e=function(t){if(!(t in globalThis)){let r;Object.defineProperty(globalThis,t,{configurable:!0,get:()=>{if(r!==void 0)return r;UC(t)},set:n=>{r=n}})}};e(\"$state\"),e(\"$effect\"),e(\"$derived\"),e(\"$inspect\"),e(\"$props\"),e(\"$bindable\")}g();var T3=new Map;function C3(e,t){var r=T3.get(e);r||(r=new Set,T3.set(e,r)),r.add(t)}g();g();g();g();g();g();function rv(e){ae&&kt(e)!==null&&fo(e)}var P3=!1;function nv(){P3||(P3=!0,document.addEventListener(\"reset\",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(let r of e.target.elements)(t=r.__on_r)==null||t.call(r)})},{capture:!0}))}function Fd(e){var t=fe,r=te;Tt(null),it(null);try{return e()}finally{Tt(t),it(r)}}function iv(e,t,r,n=r){e.addEventListener(t,()=>Fd(r));let i=e.__on_r;i?e.__on_r=()=>{i(),n(!0)}:e.__on_r=()=>n(!0),nv()}var av=new Set,$d=new Set;function R3(e,t,r,n){function i(a){if(n.capture||yo.call(t,a),!a.cancelBubble)return Fd(()=>r.call(this,a))}return e.startsWith(\"pointer\")||e.startsWith(\"touch\")||e===\"wheel\"?fr(()=>{t.addEventListener(e,i,n)}):t.addEventListener(e,i,n),i}function Ar(e,t,r,n,i){var a={capture:n,passive:i},s=R3(e,t,r,a);(t===document.body||t===window||t===document)&&qr(()=>{t.removeEventListener(e,s,a)})}function dt(e){for(var t=0;t<e.length;t++)av.add(e[t]);for(var r of $d)r(e)}function yo(e){var b;var t=this,r=t.ownerDocument,n=e.type,i=((b=e.composedPath)==null?void 0:b.call(e))||[],a=i[0]||e.target,s=0,o=e.__root;if(o){var c=i.indexOf(o);if(c!==-1&&(t===document||t===window)){e.__root=t;return}var l=i.indexOf(t);if(l===-1)return;c<=l&&(s=c)}if(a=i[s]||e.target,a!==t){Mt(e,\"currentTarget\",{configurable:!0,get(){return a||r}});var u=fe,f=te;Tt(null),it(null);try{for(var d,h=[];a!==null;){var p=a.assignedSlot||a.parentNode||a.host||null;try{var m=a[\"__\"+n];if(m!==void 0&&!a.disabled)if(sn(m)){var[v,...y]=m;v.apply(a,[e,...y])}else m.call(a,e)}catch(x){d?h.push(x):d=x}if(e.cancelBubble||p===t||p===null)break;a=p}if(d){for(let x of h)queueMicrotask(()=>{throw x});throw d}}finally{e.__root=t,delete e.currentTarget,Tt(u),it(f)}}}g();var f7;function M3(){f7=void 0}g();g();function Ld(e){var t=document.createElement(\"template\");return t.innerHTML=e,t.content}function Mn(e,t){var r=te;r.nodes_start===null&&(r.nodes_start=e,r.nodes_end=t)}function se(e,t){var r=(t&1)!==0,n=(t&2)!==0,i,a=!e.startsWith(\"<!>\");return()=>{if(ae)return Mn(ue,null),ue;i===void 0&&(i=Ld(a?e:\"<!>\"+e),r||(i=kt(i)));var s=n?document.importNode(i,!0):i.cloneNode(!0);if(r){var o=kt(s),c=s.lastChild;Mn(o,c)}else Mn(s,s);return s}}function ii(){if(ae)return Mn(ue,null),ue;var e=document.createDocumentFragment(),t=document.createComment(\"\"),r=Vr();return e.append(t,r),Mn(t,r),e}function ne(e,t){if(ae){te.nodes_end=ue,Ot();return}e!==null&&e.before(t)}var Dd=!0;function Oe(e,t){var n;var r=t==null?\"\":typeof t==\"object\"?t+\"\":t;r!==((n=e.__t)!=null?n:e.__t=e.nodeValue)&&(e.__t=r,e.nodeValue=r==null?\"\":r+\"\")}function zi(e,t){return O3(e,t)}function ov(e,t){var s;Ad(),t.intro=(s=t.intro)!=null?s:!1;let r=t.target,n=ae,i=ue;try{for(var a=kt(r);a&&(a.nodeType!==8||a.data!==no);)a=It(a);if(!a)throw Di;or(!0),Qe(a),Ot();let o=O3(e,{...t,anchor:a});if(ue===null||ue.nodeType!==8||ue.data!==Pa)throw lo(),Di;return or(!1),o}catch(o){if(o===Di)return t.recover===!1&&BC(),Ad(),fo(r),or(!1),zi(e,t);throw o}finally{or(n),Qe(i),M3()}}var wo=new Map;function O3(e,{target:t,anchor:r,props:n={},events:i,context:a,intro:s=!0}){Ad();var o=new Set,c=f=>{for(var d=0;d<f.length;d++){var h=f[d];if(!o.has(h)){o.add(h);var p=OC(h);t.addEventListener(h,yo,{passive:p});var m=wo.get(h);m===void 0?(document.addEventListener(h,yo,{passive:p}),wo.set(h,1)):wo.set(h,m+1)}}};c(ic(av)),$d.add(c);var l=void 0,u=u3(()=>{var f=r!=null?r:t.appendChild(Vr());return Lt(()=>{if(a){Xe({});var d=he;d.c=a}i&&(n.$$events=i),ae&&Mn(f,null),Dd=s,l=e(f,n)||{},Dd=!0,ae&&(te.nodes_end=ue),a&&Ze()}),()=>{var p;for(var d of o){t.removeEventListener(d,yo);var h=wo.get(d);--h===0?(document.removeEventListener(d,yo),wo.delete(d)):wo.set(d,h)}$d.delete(c),f!==r&&((p=f.parentNode)==null||p.removeChild(f))}});return sv.set(l,u),l}var sv=new WeakMap;function ai(e,t){let r=sv.get(e);return r?(sv.delete(e),r(t)):(z&&JC(),Promise.resolve())}g();g();g();g();function ge(e,t,r=!1){ae&&Ot();var n=e,i=null,a=null,s=ct,o=r?65536:0,c=!1;let l=(f,d=!0)=>{c=!0,u(d,f)},u=(f,d)=>{if(s===(s=f))return;let h=!1;if(ae){let p=n.data===Ca;!!s===p&&(n=uo(),Qe(n),or(!1),h=!0)}s?(i?Gi(i):d&&(i=Lt(()=>d(n))),a&&cn(a,()=>{a=null})):(a?Gi(a):d&&(a=Lt(()=>d(n))),i&&cn(i,()=>{i=null})),h&&or(!0)};ur(()=>{c=!1,t(l),c||u(null,null)},o),ae&&(n=ue)}g();g();g();var hc=null;function kr(e,t){return t}function w7(e,t,r,n){for(var i=[],a=t.length,s=0;s<a;s++)Td(t[s].e,i,!0);var o=a>0&&i.length===0&&r!==null;if(o){var c=r.parentNode;fo(c),c.append(r),n.clear(),Vi(e,t[0].prev,t[a-1].next)}ev(i,()=>{for(var l=0;l<a;l++){var u=t[l];o||(n.delete(u.k),Vi(e,u.prev,u.next)),Ft(u.e,!o)}})}function Tr(e,t,r,n,i,a=null){var s=e,o={flags:t,items:new Map,first:null},c=(t&4)!==0;if(c){var l=e;s=ae?Qe(kt(l)):l.appendChild(Vr())}ae&&Ot();var u=null,f=!1;ur(()=>{var d=r(),h=sn(d)?d:d==null?[]:ic(d),p=h.length;if(f&&p===0)return;f=p===0;let m=!1;if(ae){var v=s.data===Ca;v!==(p===0)&&(s=uo(),Qe(s),or(!1),m=!0)}if(ae){for(var y=null,b,x=0;x<p;x++){if(ue.nodeType===8&&ue.data===Pa){s=ue,m=!0,or(!1);break}var E=h[x],_=n(E,x);b=$3(ue,o,y,null,E,_,x,i,t,r),o.items.set(_,b),y=b}p>0&&Qe(uo())}if(!ae){var k=fe;b7(h,o,s,i,t,(k.f&8192)!==0,n,r)}a!==null&&(p===0?u?Gi(u):u=Lt(()=>a(s)):u!==null&&cn(u,()=>{u=null})),m&&or(!0),r()}),ae&&(s=ue)}function b7(e,t,r,n,i,a,s,o){var Q,de,ee,J;var c=(i&8)!==0,l=(i&3)!==0,u=e.length,f=t.items,d=t.first,h=d,p,m=null,v,y=[],b=[],x,E,_,k;if(c)for(k=0;k<u;k+=1)x=e[k],E=s(x,k),_=f.get(E),_!==void 0&&((Q=_.a)==null||Q.measure(),(v!=null?v:v=new Set).add(_));for(k=0;k<u;k+=1){if(x=e[k],E=s(x,k),_=f.get(E),_===void 0){var w=h?h.e.nodes_start:r;m=$3(w,t,m,m===null?t.first:m.next,x,E,k,n,i,o),f.set(E,m),y=[],b=[],h=m.next;continue}if(l&&_7(_,x,k,i),_.e.f&8192&&(Gi(_.e),c&&((de=_.a)==null||de.unfix(),(v!=null?v:v=new Set).delete(_))),_!==h){if(p!==void 0&&p.has(_)){if(y.length<b.length){var A=b[0],S;m=A.prev;var T=y[0],P=y[y.length-1];for(S=0;S<y.length;S+=1)I3(y[S],A,r);for(S=0;S<b.length;S+=1)p.delete(b[S]);Vi(t,T.prev,P.next),Vi(t,m,T),Vi(t,P,A),h=A,m=P,k-=1,y=[],b=[]}else p.delete(_),I3(_,h,r),Vi(t,_.prev,_.next),Vi(t,_,m===null?t.first:m.next),Vi(t,m,_),m=_;continue}for(y=[],b=[];h!==null&&h.k!==E;)(a||!(h.e.f&8192))&&(p!=null?p:p=new Set).add(h),b.push(h),h=h.next;if(h===null)continue;_=h}y.push(_),m=_,h=_.next}if(h!==null||p!==void 0){for(var O=p===void 0?[]:ic(p);h!==null;)(a||!(h.e.f&8192))&&O.push(h),h=h.next;var j=O.length;if(j>0){var D=i&4&&u===0?r:null;if(c){for(k=0;k<j;k+=1)(ee=O[k].a)==null||ee.measure();for(k=0;k<j;k+=1)(J=O[k].a)==null||J.fix()}w7(t,O,D,f)}}c&&fr(()=>{var Pe;if(v!==void 0)for(_ of v)(Pe=_.a)==null||Pe.apply()}),te.first=t.first&&t.first.e,te.last=m&&m.e}function _7(e,t,r,n){n&1&&so(e.v,t),n&2?so(e.i,r):e.i=r}function $3(e,t,r,n,i,a,s,o,c,l){var u=hc,f=(c&1)!==0,d=(c&16)===0,h=f?d?Ni(i):ut(i):i,p=c&2?ut(s):s;z&&f&&(h.debug=()=>{var v=typeof p==\"number\"?s:p.v;l()[v]});var m={i:p,v:h,k:a,a:null,e:null,prev:r,next:n};hc=m;try{return m.e=Lt(()=>o(e,h,p),ae),m.e.prev=r&&r.e,m.e.next=n&&n.e,r===null?t.first=m:(r.next=m,r.e.next=m.e),n!==null&&(n.prev=m,n.e.prev=m.e),m}finally{hc=u}}function I3(e,t,r){for(var n=e.next?e.next.e.nodes_start:r,i=t?t.e.nodes_start:r,a=e.e.nodes_start;a!==n;){var s=It(a);i.before(a),a=s}}function Vi(e,t,r){t===null?e.first=r:(t.next=r,t.e.next=r&&r.e),r!==null&&(r.prev=t,r.e.prev=t&&t.e)}g();g();g();g();g();g();function gt(e,t){fr(()=>{var i;var r=e.getRootNode(),n=r.host?r:(i=r.head)!=null?i:r.ownerDocument.head;if(!n.querySelector(\"#\"+t.hash)){let a=document.createElement(\"style\");a.id=t.hash,a.textContent=t.code,n.appendChild(a),z&&C3(t.hash,a)}})}g();g();g();g();g();function pe(e,t,r,n){var a;var i=(a=e.__attributes)!=null?a:e.__attributes={};if(ae&&(i[t]=e.getAttribute(t),t===\"src\"||t===\"srcset\"||t===\"href\"&&e.nodeName===\"LINK\")){n||k7(e,t,r!=null?r:\"\");return}i[t]!==(i[t]=r)&&(t===\"style\"&&\"__styles\"in e&&(e.__styles={}),t===\"loading\"&&(e[FC]=r),r==null?e.removeAttribute(t):typeof r!=\"string\"&&A7(e).includes(t)?e[t]=r:e.setAttribute(t,r))}var D3=new Map;function A7(e){var t=D3.get(e.nodeName);if(t)return t;D3.set(e.nodeName,t=[]);for(var r,n=e,i=Element.prototype;i!==n;){r=P0(n);for(var a in r)r[a].set&&t.push(a);n=Ra(n)}return t}function k7(e,t,r){var n;z&&(t===\"srcset\"&&T7(e,r)||uv((n=e.getAttribute(t))!=null?n:\"\",r)||KC(t,e.outerHTML.replace(e.innerHTML,e.innerHTML&&\"...\"),String(r)))}function uv(e,t){return e===t?!0:new URL(e,document.baseURI).href===new URL(t,document.baseURI).href}function N3(e){return e.split(\",\").map(t=>t.trim().split(\" \").filter(Boolean))}function T7(e,t){var r=N3(e.srcset),n=N3(t);return n.length===r.length&&n.every(([i,a],s)=>a===r[s][1]&&(uv(r[s][0],i)||uv(i,r[s][0])))}g();function at(e,t,r){if(r){if(e.classList.contains(t))return;e.classList.add(t)}else{if(!e.classList.contains(t))return;e.classList.remove(t)}}g();g();g();g();var C7=vd?()=>performance.now():()=>Date.now(),un={tick:e=>(vd?requestAnimationFrame:_r)(e),now:()=>C7(),tasks:new Set};function j3(){let e=un.now();un.tasks.forEach(t=>{t.c(e)||(un.tasks.delete(t),t.f())}),un.tasks.size!==0&&un.tick(j3)}function B3(e){let t;return un.tasks.size===0&&un.tick(j3),{promise:new Promise(r=>{un.tasks.add(t={c:e,f:r})}),abort(){un.tasks.delete(t)}}}function Nd(e,t){e.dispatchEvent(new CustomEvent(t))}function O7(e){if(e===\"float\")return\"cssFloat\";if(e===\"offset\")return\"cssOffset\";if(e.startsWith(\"--\"))return e;let t=e.split(\"-\");return t.length===1?t[0]:t[0]+t.slice(1).map(r=>r[0].toUpperCase()+r.slice(1)).join(\"\")}function H3(e){let t={},r=e.split(\";\");for(let n of r){let[i,a]=n.split(\":\");if(!i||a===void 0)break;let s=O7(i.trim());t[s]=a.trim()}return t}var I7=e=>e;function fn(e,t,r,n){var b;var i=(e&1)!==0,a=(e&2)!==0,s=i&&a,o=(e&4)!==0,c=s?\"both\":i?\"in\":\"out\",l,u=t.inert,f,d;function h(){var _;var x=fe,E=te;Tt(null),it(null);try{return l!=null?l:l=r()(t,(_=n==null?void 0:n())!=null?_:{},{direction:c})}finally{Tt(x),it(E)}}var p={is_global:o,in(){var x;if(t.inert=u,!i){d==null||d.abort(),(x=d==null?void 0:d.reset)==null||x.call(d);return}a||f==null||f.abort(),Nd(t,\"introstart\"),f=fv(t,h(),d,1,()=>{Nd(t,\"introend\"),f==null||f.abort(),f=l=void 0})},out(x){if(!a){x==null||x(),l=void 0;return}t.inert=!0,Nd(t,\"outrostart\"),d=fv(t,h(),f,0,()=>{Nd(t,\"outroend\"),x==null||x()})},stop:()=>{f==null||f.abort(),d==null||d.abort()}},m=te;if(((b=m.transitions)!=null?b:m.transitions=[]).push(p),i&&Dd){var v=o;if(!v){for(var y=m.parent;y&&y.f&65536;)for(;(y=y.parent)&&!(y.f&16););v=!y||(y.f&32768)!==0}v&&Sr(()=>{Ue(()=>p.in())})}}function fv(e,t,r,n,i){var a=n===1;if(M0(t)){var s,o=!1;return fr(()=>{if(!o){var v=t({direction:a?\"in\":\"out\"});s=fv(e,v,r,n,i)}}),{abort:()=>{o=!0,s==null||s.abort()},deactivate:()=>s.deactivate(),reset:()=>s.reset(),t:()=>s.t()}}if(r==null||r.deactivate(),!(t!=null&&t.duration))return i(),{abort:_r,deactivate:_r,reset:_r,t:()=>n};let{delay:c=0,css:l,tick:u,easing:f=I7}=t;var d=[];if(a&&r===void 0&&(u&&u(0,1),l)){var h=H3(l(0,1));d.push(h,h)}var p=()=>1-n,m=e.animate(d,{duration:c});return m.onfinish=()=>{var A;var v=(A=r==null?void 0:r.t())!=null?A:1-n;r==null||r.abort();var y=n-v,b=t.duration*Math.abs(y),x=[];if(b>0){if(l)for(var E=Math.ceil(b/16.666666666666668),_=0;_<=E;_+=1){var k=v+y*f(_/E),w=l(k,1-k);x.push(H3(w))}p=()=>{var S=m.currentTime;return v+y*f(S/b)},u&&B3(()=>{if(m.playState!==\"running\")return!1;var S=p();return u(S,1-S),!0})}m=e.animate(x,{duration:b,fill:\"forwards\"}),m.onfinish=()=>{p=()=>n,u==null||u(n,1-n),i()}},{abort:()=>{m&&(m.cancel(),m.effect=null,m.onfinish=_r)},deactivate:()=>{i=_r},reset:()=>{n===0&&(u==null||u(1,0))},t:()=>p()}}g();g();function pv(e,t,r=t){var n=ji();iv(e,\"input\",i=>{z&&e.type===\"checkbox\"&&I0();var a=i?e.defaultValue:e.value;if(a=dv(e)?hv(a):a,r(a),n&&a!==(a=t())){var s=e.selectionStart,o=e.selectionEnd;e.value=a!=null?a:\"\",o!==null&&(e.selectionStart=s,e.selectionEnd=Math.min(o,e.value.length))}}),(ae&&e.defaultValue!==e.value||Ue(t)==null&&e.value)&&r(dv(e)?hv(e.value):e.value),lr(()=>{z&&e.type===\"checkbox\"&&I0();var i=t();dv(e)&&i===hv(e.value)||e.type===\"date\"&&!i&&!e.value||i!==e.value&&(e.value=i!=null?i:\"\")})}function dv(e){var t=e.type;return t===\"number\"||t===\"range\"}function hv(e){return e===\"\"?null:+e}g();g();g();g();g();g();function U3(e,t){return e===t||(e==null?void 0:e[xr])===t}function Ge(e={},t,r,n){return Sr(()=>{var i,a;return lr(()=>{i=a,a=(n==null?void 0:n())||[],Ue(()=>{e!==r(...a)&&(t(e,...a),i&&U3(r(...i),e)&&t(null,...i))})}),()=>{fr(()=>{a&&U3(r(...a),e)&&t(null,...a)})}}),e}g();g();g();g();g();g();g();g();g();function mv(e){he===null&&uc(\"onMount\"),Jn&&he.l!==null?B7(he).m.push(e):$t(()=>{let t=Ue(e);if(typeof t==\"function\")return t})}function G3(e){he===null&&uc(\"onDestroy\"),mv(()=>()=>Ue(e))}function B7(e){var r;var t=e.l;return(r=t.u)!=null?r:t.u={a:[],b:[],m:[]}}var Bd=!1;function gv(e){var t=Bd;try{return Bd=!1,[e(),Bd]}finally{Bd=t}}function z3(e){for(var t=te,r=te;t!==null&&!(t.f&96);)t=t.parent;try{return it(t),e()}finally{it(r)}}function si(e,t,r,n){var w,A;var i=(r&1)!==0,a=!Jn||(r&2)!==0,s=(r&8)!==0,o=(r&16)!==0,c=!1,l;s?[l,c]=gv(()=>e[t]):l=e[t];var u=xr in e||wd in e,f=(A=(w=Br(e,t))==null?void 0:w.set)!=null?A:u&&s&&t in e?S=>e[t]=S:void 0,d=n,h=!0,p=!1,m=()=>(p=!0,h&&(h=!1,o?d=Ue(n):d=n),d);l===void 0&&n!==void 0&&(f&&a&&HC(t),l=m(),f&&f(l));var v;if(a)v=()=>{var S=e[t];return S===void 0?m():(h=!0,p=!1,S)};else{var y=z3(()=>(i?Ye:G0)(()=>e[t]));y.f|=131072,v=()=>{var S=R(y);return S!==void 0&&(d=void 0),S===void 0?d:S}}if(!(r&4))return v;if(f){var b=e.$$legacy;return function(S,T){return arguments.length>0?((!a||!T||b||c)&&f(T?v():S),S):v()}}var x=!1,E=!1,_=Ni(l),k=z3(()=>Ye(()=>{var S=v(),T=R(_);return x?(x=!1,E=!0,T):(E=!1,_.v=S)}));return i||(k.equals=io),function(S,T){if(sc!==null&&(x=E,v(),R(_)),arguments.length>0){let P=T?R(k):a&&s?be(S):S;return k.equals(P)||(x=!0,re(_,P),p&&d!==void 0&&(d=P),Ue(()=>R(k))),S}return R(k)}}g();g();g();g();function V3(e){return new vv(e)}var oi,Yr,vv=class{constructor(t){Pc(this,oi);Pc(this,Yr);var a,s;var r=new Map,n=(o,c)=>{var l=Ni(c);return r.set(o,l),l};let i=new Proxy({...t.props||{},$$events:{}},{get(o,c){var l;return R((l=r.get(c))!=null?l:n(c,Reflect.get(o,c)))},has(o,c){var l;return c===wd?!0:(R((l=r.get(c))!=null?l:n(c,Reflect.get(o,c))),Reflect.has(o,c))},set(o,c,l){var u;return re((u=r.get(c))!=null?u:n(c,l),l),Reflect.set(o,c,l)}});Rc(this,Yr,(t.hydrate?ov:zi)(t.component,{target:t.target,anchor:t.anchor,props:i,context:t.context,intro:(a=t.intro)!=null?a:!1,recover:t.recover})),(!((s=t==null?void 0:t.props)!=null&&s.$$host)||t.sync===!1)&&vo(),Rc(this,oi,i.$$events);for(let o of Object.keys(Bt(this,Yr)))o===\"$set\"||o===\"$destroy\"||o===\"$on\"||Mt(this,o,{get(){return Bt(this,Yr)[o]},set(c){Bt(this,Yr)[o]=c},enumerable:!0});Bt(this,Yr).$set=o=>{Object.assign(i,o)},Bt(this,Yr).$destroy=()=>{ai(Bt(this,Yr))}}$set(t){Bt(this,Yr).$set(t)}$on(t,r){Bt(this,oi)[t]=Bt(this,oi)[t]||[];let n=(...i)=>r.call(this,...i);return Bt(this,oi)[t].push(n),()=>{Bt(this,oi)[t]=Bt(this,oi)[t].filter(i=>i!==n)}}$destroy(){Bt(this,Yr).$destroy()}};oi=new WeakMap,Yr=new WeakMap;var Q7;typeof HTMLElement==\"function\"&&(Q7=class extends HTMLElement{constructor(t,r,n){super();Cr(this,\"$$ctor\");Cr(this,\"$$s\");Cr(this,\"$$c\");Cr(this,\"$$cn\",!1);Cr(this,\"$$d\",{});Cr(this,\"$$r\",!1);Cr(this,\"$$p_d\",{});Cr(this,\"$$l\",{});Cr(this,\"$$l_u\",new Map);Cr(this,\"$$me\");this.$$ctor=t,this.$$s=r,n&&this.attachShadow({mode:\"open\"})}addEventListener(t,r,n){if(this.$$l[t]=this.$$l[t]||[],this.$$l[t].push(r),this.$$c){let i=this.$$c.$on(t,r);this.$$l_u.set(r,i)}super.addEventListener(t,r,n)}removeEventListener(t,r,n){if(super.removeEventListener(t,r,n),this.$$c){let i=this.$$l_u.get(r);i&&(i(),this.$$l_u.delete(r))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(i){return a=>{let s=document.createElement(\"slot\");i!==\"default\"&&(s.name=i),ne(a,s)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;let r={},n=e9(this);for(let i of this.$$s)i in n&&(i===\"default\"&&!this.$$d.children?(this.$$d.children=t(i),r.default=!0):r[i]=t(i));for(let i of this.attributes){let a=this.$$g_p(i.name);a in this.$$d||(this.$$d[a]=yv(a,i.value,this.$$p_d,\"toProp\"))}for(let i in this.$$p_d)!(i in this.$$d)&&this[i]!==void 0&&(this.$$d[i]=this[i],delete this[i]);this.$$c=V3({component:this.$$ctor,target:this.shadowRoot||this,props:{...this.$$d,$$slots:r,$$host:this}}),this.$$me=X0(()=>{lr(()=>{var i;this.$$r=!0;for(let a of C0(this.$$c)){if(!((i=this.$$p_d[a])!=null&&i.reflect))continue;this.$$d[a]=this.$$c[a];let s=yv(a,this.$$d[a],this.$$p_d,\"toAttribute\");s==null?this.removeAttribute(this.$$p_d[a].attribute||a):this.setAttribute(this.$$p_d[a].attribute||a,s)}this.$$r=!1})});for(let i in this.$$l)for(let a of this.$$l[i]){let s=this.$$c.$on(i,a);this.$$l_u.set(a,s)}this.$$l={}}}attributeChangedCallback(t,r,n){var i;this.$$r||(t=this.$$g_p(t),this.$$d[t]=yv(t,n,this.$$p_d,\"toProp\"),(i=this.$$c)==null||i.$set({[t]:this.$$d[t]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(t){return C0(this.$$p_d).find(r=>this.$$p_d[r].attribute===t||!this.$$p_d[r].attribute&&r.toLowerCase()===t)||t}});function yv(e,t,r,n){var a;let i=(a=r[e])==null?void 0:a.type;if(t=i===\"Boolean\"&&typeof t!=\"boolean\"?t!=null:t,!n||!r[e])return t;if(n===\"toAttribute\")switch(i){case\"Object\":case\"Array\":return t==null?null:JSON.stringify(t);case\"Boolean\":return t?\"\":null;case\"Number\":return t==null?null:t;default:return t}else switch(i){case\"Object\":case\"Array\":return t&&JSON.parse(t);case\"Boolean\":return t;case\"Number\":return t!=null?+t:t;default:return t}}function e9(e){let t={};return e.childNodes.forEach(r=>{t[r.slot||\"default\"]=!0}),t}g();g();g();function bo(e,t,r,n){function i(a){return a instanceof r?a:new r(function(s){s(a)})}return new(r||(r=Promise))(function(a,s){function o(u){try{l(n.next(u))}catch(f){s(f)}}function c(u){try{l(n.throw(u))}catch(f){s(f)}}function l(u){u.done?a(u.value):i(u.value).then(o,c)}l((n=n.apply(e,t||[])).next())})}var _v=require(\"obsidian\");g();var wv=require(\"obsidian\");g();function r9(e){let t=e-1;return t*t*t+1}function In(e,{delay:t=0,duration:r=400,easing:n=r9,axis:i=\"y\"}={}){let a=getComputedStyle(e),s=+a.opacity,o=i===\"y\"?\"height\":\"width\",c=parseFloat(a[o]),l=i===\"y\"?[\"top\",\"bottom\"]:[\"left\",\"right\"],u=l.map(y=>`${y[0].toUpperCase()}${y.slice(1)}`),f=parseFloat(a[`padding${u[0]}`]),d=parseFloat(a[`padding${u[1]}`]),h=parseFloat(a[`margin${u[0]}`]),p=parseFloat(a[`margin${u[1]}`]),m=parseFloat(a[`border${u[0]}Width`]),v=parseFloat(a[`border${u[1]}Width`]);return{delay:t,duration:r,easing:n,css:y=>`overflow: hidden;opacity: ${Math.min(y*20,1)*s};${o}: ${y*c}px;padding-${l[0]}: ${y*f}px;padding-${l[1]}: ${y*d}px;margin-${l[0]}: ${y*h}px;margin-${l[1]}: ${y*p}px;border-${l[0]}-width: ${y*m}px;border-${l[1]}-width: ${y*v}px;`}}g();var pc=require(\"obsidian\");var n9=se('<div data-icon=\"go-to-file\" aria-label=\"Open File\" class=\"clickable-icon\"></div>'),i9=se('<main class=\"tree-item nav-file svelte-1wbh8tp\"><div class=\"tree-item-self is-clickable nav-file-title svelte-1wbh8tp\"><div class=\"tree-item-inner nav-file-title-content\"> </div> <div class=\"git-tools\"><div class=\"buttons\"><!></div> <span class=\"type\"> </span></div></div></main>'),a9={hash:\"svelte-1wbh8tp\",code:\"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}\"};function mc(e,t){Xe(t,!0),gt(e,a9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");$t(()=>{for(let y of r)y&&(0,pc.setIcon)(y,y.getAttr(\"data-icon\"))});function i(y){y.stopPropagation(),zs(t.diff.path)?a(y):s(y)}function a(y){var b;y.stopPropagation();let x=t.view.app.vault.getAbstractFileByPath(t.diff.vaultPath);x instanceof pc.TFile&&((b=rn(t.view.app,y))===null||b===void 0||b.openFile(x).catch(E=>t.view.plugin.displayError(E)))}function s(y){var b;t.view.plugin.tools.openDiff({event:y,aFile:(b=t.diff.fromPath)!==null&&b!==void 0?b:t.diff.path,aRef:`${t.diff.hash}^`,bFile:t.diff.path,bRef:t.diff.hash})}var o=i9();o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.diff.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=y=>{var b=n9();b.__click=a,Ge(b,x=>r[0]=x,()=>r==null?void 0:r[0]),Ar(\"auxclick\",b,a),ne(y,b)};ge(h,y=>{t.view.app.vault.getAbstractFileByPath(t.diff.vaultPath)instanceof pc.TFile&&y(p)})}B(d);var m=Z(d,2),v=H(m,!0);B(m),B(f),B(c),B(o),xe(()=>{pe(c,\"data-path\",t.diff.vaultPath),pe(c,\"data-tooltip-position\",R(n)),pe(c,\"aria-label\",t.diff.vaultPath),pe(m,\"data-type\",t.diff.status),Oe(v,t.diff.status)}),Ar(\"auxclick\",o,y=>{y.stopPropagation(),y.button==2?kn(t.view.app,y,t.diff.vaultPath,t.view.leaf,\"git-history\"):i(y)}),ne(e,o),Ze()}dt([\"click\"]);g();var s9=se(\"<div><!></div>\"),o9=(e,t,r)=>t(R(r)),l9=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),c9=se('<div class=\"tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title\"><div data-icon=\"folder\" style=\"padding-right: 5px; display: flex; \"></div> <div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content svelte-1lnl15d\"> </div></div> <!></div>'),u9=se('<main class=\"svelte-1lnl15d\"></main>'),f9={hash:\"svelte-1lnl15d\",code:\"main.svelte-1lnl15d .nav-folder-title-content:where(.svelte-1lnl15d) {display:flex;align-items:center;}\"};function gc(e,t){Xe(t,!0),gt(e,f9);let r=si(t,\"topLevel\",3,!1),n=be({}),i=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");function a(o){n[o.title]=!n[o.title]}var s=u9();Tr(s,21,()=>t.hierarchy.children,kr,(o,c)=>{var l=ii(),u=cr(l);{var f=h=>{var p=s9(),m=H(p);mc(m,{get diff(){return R(c).data},get view(){return t.view}}),B(p),ne(h,p)},d=h=>{var p=c9(),m=H(p);m.__click=[o9,a,c];var v=Z(H(m),2),y=Z(v,2),b=H(y,!0);B(y),B(m);var x=Z(m,2);{var E=_=>{var k=l9(),w=H(k);gc(w,{get hierarchy(){return R(c)},get plugin(){return t.plugin},get view(){return t.view}}),B(k),fn(3,k,()=>In,()=>({duration:150})),ne(_,k)};ge(x,_=>{n[R(c).title]||_(E)})}B(p),xe(()=>{at(p,\"is-collapsed\",n[R(c).title]),pe(m,\"data-tooltip-position\",R(i)),pe(m,\"aria-label\",R(c).vaultPath),at(v,\"is-collapsed\",n[R(c).title]),Oe(b,R(c).title)}),ne(h,p)};ge(u,h=>{R(c).data?h(f):h(d,!1)})}ne(o,l)}),B(s),xe(()=>at(s,\"topLevel\",r())),ne(e,s),Ze()}dt([\"click\"]);var d9=(e,t)=>re(t,!R(t)),h9=se('<div class=\"git-ref\"> </div>'),p9=se('<div class=\"git-author\"> </div>'),m9=se('<div class=\"git-date\"> </div>'),g9=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),v9=se('<main><div class=\"tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title\"><div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div><!> <!> <!> <div class=\"tree-item-inner nav-folder-title-content\"> </div></div></div> <!></div></main>'),y9={hash:\"svelte-45h\",code:\"\"};function bv(e,t){Xe(t,!0),gt(e,y9);let r=Ye(()=>({title:\"\",path:\"\",vaultPath:\"\",children:t.plugin.gitManager.getTreeStructure(t.log.diff.files)})),n=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\"),i=ft(!0);function a(_){let k=_.author.name;if(t.plugin.settings.authorInHistoryView==\"full\")return k;if(t.plugin.settings.authorInHistoryView==\"initials\")return k.split(\" \").filter(A=>A.length>0).map(A=>A[0].toUpperCase()).join(\"\")}var s=v9(),o=H(s),c=H(o);xe(()=>{var _;return pe(c,\"aria-label\",`${t.log.refs.length>0?t.log.refs.join(\", \")+`\n`:\"\"}${(_=t.log.author)==null?void 0:_.name}\n${(0,wv.moment)(t.log.date).format(t.plugin.settings.commitDateFormat)}\n${t.log.message}`)}),c.__click=[d9,i];var l=H(c),u=Z(l,2),f=H(u);{var d=_=>{var k=h9(),w=H(k,!0);xe(()=>Oe(w,t.log.refs.join(\", \"))),B(k),ne(_,k)};ge(f,_=>{t.log.refs.length>0&&_(d)})}var h=Z(f,2);{var p=_=>{var k=p9(),w=H(k,!0);xe(()=>Oe(w,a(t.log))),B(k),ne(_,k)};ge(h,_=>{var k;t.plugin.settings.authorInHistoryView!=\"hide\"&&((k=t.log.author)!=null&&k.name)&&_(p)})}var m=Z(h,2);{var v=_=>{var k=m9(),w=H(k,!0);xe(()=>Oe(w,(0,wv.moment)(t.log.date).format(t.plugin.settings.commitDateFormat))),B(k),ne(_,k)};ge(m,_=>{t.plugin.settings.dateInHistoryView&&_(v)})}var y=Z(m,2),b=H(y,!0);B(y),B(u),B(c);var x=Z(c,2);{var E=_=>{var k=g9(),w=H(k);{var A=T=>{gc(T,{get hierarchy(){return R(r)},get plugin(){return t.plugin},get view(){return t.view},topLevel:!0})},S=T=>{var P=ii(),O=cr(P);Tr(O,17,()=>t.log.diff.files,kr,(j,D)=>{mc(j,{get view(){return t.view},get diff(){return R(D)}})}),ne(T,P)};ge(w,T=>{t.showTree?T(A):T(S,!1)})}B(k),fn(3,k,()=>In,()=>({duration:150})),ne(_,k)};ge(x,_=>{R(i)||_(E)})}B(o),B(s),xe(()=>{at(o,\"is-collapsed\",R(i)),pe(c,\"data-tooltip-position\",R(n)),at(l,\"is-collapsed\",R(i)),Oe(b,t.log.message)}),ne(e,s),Ze()}dt([\"click\"]);function w9(e,t){t().catch(console.error)}var b9=(e,t,r,n)=>{re(t,!R(t)),(0,_v.setIcon)(r[0],R(t)?\"list\":\"folder\"),n(n().settings.treeStructure=R(t),!0),n().saveSettings()},_9=se('<div class=\"tree-item nav-folder mod-root\"></div>'),x9=se('<main><div class=\"nav-header\"><div class=\"nav-buttons-container\"><div id=\"layoutChange\" class=\"clickable-icon nav-action-button\" aria-label=\"Change Layout\"></div> <div id=\"refresh\" class=\"clickable-icon nav-action-button\" data-icon=\"refresh-cw\" aria-label=\"Refresh\" style=\"margin: 1px;\"></div></div></div> <div class=\"nav-files-container\" style=\"position: relative;\"><!></div> <div id=\"sentinel\"></div> <div style=\"margin-bottom:40px\"></div></main>'),S9={hash:\"svelte-45h\",code:\"\"};function xv(e,t){Xe(t,!0),gt(e,S9);let r=si(t,\"plugin\",15),n=ft(!1),i=be([]),a=ft(void 0),s=ft(be(r().settings.treeStructure)),o,c;$t(()=>{c&&c.empty()}),o=t.view.app.workspace.on(\"obsidian-git:head-change\",()=>void l().catch(console.error)),$t(()=>{i.forEach(x=>(0,_v.setIcon)(x,x.getAttr(\"data-icon\")))}),G3(()=>{t.view.app.workspace.offref(o)}),mv(()=>{let x=new IntersectionObserver(_=>{_[0].isIntersecting&&!R(n)&&u().catch(console.error)}),E=document.querySelector(\"#sentinel\");return E&&x.observe(E),()=>{x.disconnect()}}),l().catch(console.error);function l(){return bo(this,void 0,void 0,function*(){var x;if(!r().gitReady){re(a,void 0);return}re(n,!0);let E=r().gitManager instanceof Te,_;((x=R(a)===null||R(a)===void 0?void 0:R(a).length)!==null&&x!==void 0?x:0)==0?_=E?50:10:_=R(a).length,re(a,be(yield r().gitManager.log(void 0,!1,_))),re(n,!1)})}function u(){return bo(this,void 0,void 0,function*(){var x;if(!r().gitReady||R(a)===void 0)return;re(n,!0);let _=r().gitManager instanceof Te?50:10,k=yield r().gitManager.log(void 0,!1,_,(x=R(a).last())===null||x===void 0?void 0:x.hash);R(a).push(...k.slice(1)),re(n,!1)})}var f=x9(),d=H(f),h=H(d),p=H(h);p.__click=[b9,s,i,r],Ge(p,x=>i[0]=x,()=>i==null?void 0:i[0]);var m=Z(p,2);m.__click=[w9,l],Ge(m,x=>i[1]=x,()=>i==null?void 0:i[1]),B(h),B(d);var v=Z(d,2),y=H(v);{var b=x=>{var E=_9();Tr(E,21,()=>R(a),kr,(_,k)=>{bv(_,{get view(){return t.view},get showTree(){return R(s)},get log(){return R(k)},get plugin(){return r()}})}),B(E),ne(x,E)};ge(y,x=>{R(a)&&x(b)})}B(v),co(4),B(f),xe(()=>{pe(p,\"data-icon\",R(s)?\"list\":\"folder\"),at(m,\"loading\",R(n))}),ne(e,f),Ze()}dt([\"click\"]);var vc=class extends W3.ItemView{constructor(t,r){super(t),this.plugin=r,this.hoverPopover=null}getViewType(){return $r.type}getDisplayText(){return $r.name}getIcon(){return $r.icon}onClose(){return this._view&&ai(this._view),super.onClose()}reload(){this._view&&ai(this._view),this._view=zi(xv,{target:this.contentEl,props:{plugin:this.plugin,view:this}})}onOpen(){return this.reload(),super.onOpen()}};g();var q3=require(\"obsidian\"),Hd=class extends q3.FuzzySuggestModal{constructor(r,n){super(r.app);this.branches=n;this.setPlaceholder(\"Select branch to checkout\")}getItems(){return this.branches}getItemText(r){return r}onChooseItem(r,n){this.resolve(r)}openAndGetReslt(){return new Promise(r=>{this.resolve=r,this.open()})}onClose(){new Promise(r=>setTimeout(r,10)).then(()=>{this.resolve&&this.resolve(void 0)})}};g();var Q3=require(\"obsidian\");g();var Ec=require(\"obsidian\");g();var Y3=require(\"obsidian\"),Wi=class extends Y3.Modal{constructor(r,n,i){super(r);this.deletion=n;this.filename=i;this.resolve=null}myOpen(){return this.open(),new Promise(r=>{this.resolve=r})}onOpen(){let{contentEl:r,titleEl:n}=this;n.setText(`${this.deletion?\"Delete\":\"Discard\"} this file?`),r.createEl(\"p\").setText(`Do you really want to ${this.deletion?\"delete\":\"discard the changes of\"} \"${this.filename}\"`);let i=r.createDiv({cls:\"modal-button-container\"}),a=i.createEl(\"button\",{cls:\"mod-warning\",text:this.deletion?\"Delete\":\"Discard\"});a.addEventListener(\"click\",()=>{this.resolve&&this.resolve(!0),this.close()}),a.addEventListener(\"keypress\",()=>{this.resolve&&this.resolve(!0),this.close()});let s=i.createEl(\"button\",{text:\"Cancel\"});s.addEventListener(\"click\",()=>(this.resolve&&this.resolve(!1),this.close())),s.addEventListener(\"keypress\",()=>(this.resolve&&this.resolve(!1),this.close()))}onClose(){let{contentEl:r}=this;r.empty()}};g();var wc=require(\"obsidian\");g();g();var E9=ze(X3()),qi=require(\"obsidian\");function Na(e,t,r){let n=e.target;app.workspace.trigger(\"hover-link\",{event:e,source:t.getViewType(),hoverParent:t,targetEl:n,linktext:r})}function A9(e,t){t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}function k9(e,t){e.stopPropagation(),t.manager.stage(t.change.path,!1).catch(r=>t.view.plugin.displayError(r)).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})}function T9(e,t){e.stopPropagation();let r=t.change.workingDir==\"U\";new Wi(t.view.app,r,t.change.vaultPath).myOpen().then(n=>{if(n===!0)return r?t.view.app.vault.adapter.remove(t.change.vaultPath).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")}):t.manager.discard(t.change.path).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})},n=>t.view.plugin.displayError(n))}var C9=se('<div data-icon=\"go-to-file\" aria-label=\"Open File\" class=\"clickable-icon\"></div>'),P9=se('<main class=\"tree-item nav-file svelte-1wbh8tp\"><div class=\"tree-item-self is-clickable nav-file-title svelte-1wbh8tp\"><div class=\"tree-item-inner nav-file-title-content\"> </div> <div class=\"git-tools\"><div class=\"buttons\"><!> <div data-icon=\"undo\" aria-label=\"Discard\" class=\"clickable-icon\"></div> <div data-icon=\"plus\" aria-label=\"Stage\" class=\"clickable-icon\"></div></div> <div class=\"type\"> </div></div></div></main>'),R9={hash:\"svelte-1wbh8tp\",code:\"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}\"};function bc(e,t){Xe(t,!0),gt(e,R9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");$t(()=>{for(let x of r)x&&(0,wc.setIcon)(x,x.getAttr(\"data-icon\"))});function i(x){x.stopPropagation(),zs(t.change.path)?a(x):s(x)}function a(x){var E;x.stopPropagation();let _=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);_ instanceof wc.TFile&&((E=rn(t.view.app,x))===null||E===void 0||E.openFile(_).catch(k=>t.view.plugin.displayError(k)))}function s(x){x.stopPropagation(),t.view.plugin.tools.openDiff({aFile:t.change.path,aRef:\"\",event:x})}var o=P9();o.__mouseover=[A9,t],o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.change.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=x=>{var E=C9();E.__click=a,Ge(E,_=>r[0]=_,()=>r==null?void 0:r[0]),Ar(\"auxclick\",E,a),ne(x,E)};ge(h,x=>{t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)instanceof wc.TFile&&x(p)})}var m=Z(h,2);m.__click=[T9,t],Ge(m,x=>r[1]=x,()=>r==null?void 0:r[1]);var v=Z(m,2);v.__click=[k9,t],Ge(v,x=>r[2]=x,()=>r==null?void 0:r[2]),B(d);var y=Z(d,2),b=H(y,!0);B(y),B(f),B(c),B(o),xe(()=>{pe(c,\"data-path\",t.change.vaultPath),pe(c,\"data-tooltip-position\",R(n)),pe(c,\"aria-label\",t.change.vaultPath),pe(y,\"data-type\",t.change.workingDir),Oe(b,t.change.workingDir)}),Ar(\"auxclick\",o,x=>{x.stopPropagation(),x.button==2?kn(t.view.app,x,t.change.vaultPath,t.view.leaf,\"git-source-control\"):i(x)}),ne(e,o),Ze()}dt([\"mouseover\",\"click\"]);g();var Z3=require(\"obsidian\");function M9(e,t){t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}var O9=se('<main class=\"tree-item nav-file svelte-1wbh8tp\"><div class=\"tree-item-self is-clickable nav-file-title svelte-1wbh8tp\"><div class=\"tree-item-inner nav-file-title-content\"> </div> <div class=\"git-tools\"><span class=\"type\"> </span></div></div></main>'),I9={hash:\"svelte-1wbh8tp\",code:\"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}\"};function _c(e,t){Xe(t,!0),gt(e,I9);let r=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");function n(f){var d;f.stopPropagation();let h=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);h instanceof Z3.TFile&&((d=rn(t.view.app,f))===null||d===void 0||d.openFile(h).catch(p=>t.view.plugin.displayError(p)))}var i=O9();i.__mouseover=[M9,t],i.__click=n;var a=H(i),s=H(a),o=H(s,!0);xe(()=>Oe(o,Tn(t.change.vaultPath))),B(s);var c=Z(s,2),l=H(c),u=H(l,!0);B(l),B(c),B(a),B(i),xe(()=>{pe(a,\"data-path\",t.change.vaultPath),pe(a,\"data-tooltip-position\",R(r)),pe(a,\"aria-label\",t.change.vaultPath),pe(l,\"data-type\",t.change.workingDir),Oe(u,t.change.workingDir)}),Ar(\"auxclick\",i,f=>{f.stopPropagation(),f.button==2?kn(t.view.app,f,t.change.vaultPath,t.view.leaf,\"git-source-control\"):n(f)}),ne(e,i),Ze()}dt([\"mouseover\",\"click\"]);g();var xc=require(\"obsidian\");function F9(e,t){t.view.app.vault.getFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}function $9(e,t){e.stopPropagation(),t.manager.unstage(t.change.path,!1).catch(r=>t.view.plugin.displayError(r)).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})}var L9=se('<div data-icon=\"go-to-file\" aria-label=\"Open File\" class=\"clickable-icon\"></div>'),D9=se('<main class=\"tree-item nav-file svelte-1wbh8tp\"><div class=\"tree-item-self is-clickable nav-file-title svelte-1wbh8tp\"><div class=\"tree-item-inner nav-file-title-content\"> </div> <div class=\"git-tools\"><div class=\"buttons\"><!> <div data-icon=\"minus\" aria-label=\"Unstage\" class=\"clickable-icon\"></div></div> <div class=\"type\"> </div></div></div></main>'),N9={hash:\"svelte-1wbh8tp\",code:\"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}\"};function Sc(e,t){Xe(t,!0),gt(e,N9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");$t(()=>{for(let b of r)b&&(0,xc.setIcon)(b,b.getAttr(\"data-icon\"))});function i(b){b.stopPropagation(),zs(t.change.path)?a(b):s(b)}function a(b){var x;b.stopPropagation();let E=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);E instanceof xc.TFile&&((x=rn(t.view.app,b))===null||x===void 0||x.openFile(E).catch(_=>t.view.plugin.displayError(_)))}function s(b){b.stopPropagation(),t.view.plugin.tools.openDiff({aFile:t.change.path,aRef:\"HEAD\",bRef:\"\",event:b})}var o=D9();o.__mouseover=[F9,t],o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.change.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=b=>{var x=L9();x.__click=a,Ge(x,E=>r[0]=E,()=>r==null?void 0:r[0]),ne(b,x)};ge(h,b=>{t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)instanceof xc.TFile&&b(p)})}var m=Z(h,2);m.__click=[$9,t],Ge(m,b=>r[1]=b,()=>r==null?void 0:r[1]),B(d);var v=Z(d,2),y=H(v,!0);B(v),B(f),B(c),B(o),xe(()=>{pe(c,\"data-path\",t.change.vaultPath),pe(c,\"data-tooltip-position\",R(n)),pe(c,\"aria-label\",t.change.vaultPath),pe(v,\"data-type\",t.change.index),Oe(y,t.change.index)}),Ar(\"auxclick\",o,b=>{b.stopPropagation(),b.button==2?kn(t.view.app,b,t.change.vaultPath,t.view.leaf,\"git-source-control\"):i(b)}),ne(e,o),Ze()}dt([\"mouseover\",\"click\"]);g();g();var j9=se('<div class=\"tree-item nav-file\"><div class=\"tree-item-self nav-file-title\"><div class=\"tree-item-inner nav-file-title-content\"> </div></div></div>'),B9=se(\"<main><!></main>\");function ja(e,t){Xe(t,!0);var r=B9(),n=H(r);{var i=a=>{var s=j9(),o=H(s),c=H(o),l=H(c,!0);B(c),B(o),B(s),xe(()=>{pe(o,\"aria-label\",\"And \"+(t.files.length-500)+\" more files\"),Oe(l,\"And \"+(t.files.length-500)+\" more files\")}),ne(a,s)};ge(n,a=>{t.files.length>500&&a(i)})}B(r),ne(e,r),Ze()}var U9=se(\"<div><!></div>\"),G9=(e,t,r)=>t(R(r)),z9=(e,t,r)=>t(e,R(r).path),V9=se('<div data-icon=\"minus\" aria-label=\"Unstage\" class=\"clickable-icon\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-minus\"><line x1=\"4\" y1=\"9\" x2=\"14\" y2=\"9\"></line></svg></div>'),W9=(e,t,r)=>t(e,R(r)),q9=(e,t,r)=>t(e,R(r).path),Y9=se('<div data-icon=\"undo\" aria-label=\"Discard\" class=\"clickable-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-undo\"><path d=\"M3 7v6h6\"></path><path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\"></path></svg></div> <div data-icon=\"plus\" aria-label=\"Stage\" class=\"clickable-icon\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-plus\"><line x1=\"9\" y1=\"4\" x2=\"9\" y2=\"14\"></line><line x1=\"4\" y1=\"9\" x2=\"14\" y2=\"9\"></line></svg></div>',1),X9=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),Z9=se('<div class=\"tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title svelte-hup5mn\"><div data-icon=\"folder\" style=\"padding-right: 5px; display: flex; \"></div> <div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content\"> </div> <div class=\"git-tools\"><div class=\"buttons\"><!> <div style=\"width:11px\"></div></div></div></div> <!></div>'),K9=se('<main class=\"svelte-hup5mn\"><!> <!></main>'),J9={hash:\"svelte-hup5mn\",code:\"main.svelte-hup5mn .nav-folder-title:where(.svelte-hup5mn) {align-items:center;}\"};function Ba(e,t){Xe(t,!0),gt(e,J9);var r,n;let i=si(t,\"topLevel\",3,!1),a=be({});for(let p of t.hierarchy.children)a[p.title]=((n=(r=p.children)===null||r===void 0?void 0:r.length)!==null&&n!==void 0?n:0)>100;let s=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");function o(p,m){p.stopPropagation(),t.plugin.gitManager.stageAll({dir:m}).catch(v=>t.plugin.displayError(v)).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})}function c(p,m){p.stopPropagation(),t.plugin.gitManager.unstageAll({dir:m}).catch(v=>t.plugin.displayError(v)).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})}function l(p,m){p.stopPropagation(),new Wi(t.view.app,!1,m.vaultPath).myOpen().then(v=>{if(v===!0)return t.plugin.gitManager.discardAll({dir:m.path,status:t.plugin.cachedStatus}).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})},v=>t.plugin.displayError(v))}function u(p){a[p.title]=!a[p.title]}var f=K9(),d=H(f);Tr(d,17,()=>zl(t.hierarchy.children,500),kr,(p,m)=>{var v=ii(),y=cr(v);{var b=E=>{var _=U9(),k=H(_);{var w=S=>{Sc(S,{get change(){return R(m).data},get manager(){return t.plugin.gitManager},get view(){return t.view}})},A=S=>{var T=ii(),P=cr(T);{var O=D=>{bc(D,{get change(){return R(m).data},get manager(){return t.plugin.gitManager},get view(){return t.view}})},j=D=>{var Q=ii(),de=cr(Q);{var ee=J=>{_c(J,{get change(){return R(m).data},get view(){return t.view}})};ge(de,J=>{t.fileType==2&&J(ee)},!0)}ne(D,Q)};ge(P,D=>{t.fileType==1?D(O):D(j,!1)},!0)}ne(S,T)};ge(k,S=>{t.fileType==0?S(w):S(A,!1)})}B(_),ne(E,_)},x=E=>{var _=Z9();_.__click=[G9,u,m];var k=H(_),w=Z(H(k),2),A=Z(w,2),S=H(A,!0);B(A);var T=Z(A,2),P=H(T),O=H(P);{var j=ee=>{var J=V9();J.__click=[z9,c,m],ne(ee,J)},D=ee=>{var J=Y9(),Pe=cr(J);Pe.__click=[W9,l,m];var me=Z(Pe,2);me.__click=[q9,o,m],ne(ee,J)};ge(O,ee=>{t.fileType==0?ee(j):ee(D,!1)})}co(2),B(P),B(T),B(k);var Q=Z(k,2);{var de=ee=>{var J=X9(),Pe=H(J);Ba(Pe,{get hierarchy(){return R(m)},get plugin(){return t.plugin},get view(){return t.view},get fileType(){return t.fileType}}),B(J),fn(3,J,()=>In,()=>({duration:150})),ne(ee,J)};ge(Q,ee=>{a[R(m).title]||ee(de)})}B(_),xe(()=>{at(_,\"is-collapsed\",a[R(m).title]),pe(k,\"data-tooltip-position\",R(s)),pe(k,\"aria-label\",R(m).vaultPath),at(w,\"is-collapsed\",a[R(m).title]),Oe(S,R(m).title)}),Ar(\"auxclick\",_,ee=>kn(t.view.app,ee,R(m).vaultPath,t.view.leaf,\"git-source-control\")),ne(E,_)};ge(y,E=>{R(m).data?E(b):E(x,!1)})}ne(p,v)});var h=Z(d,2);ja(h,{get files(){return t.hierarchy.children}}),B(f),xe(()=>at(f,\"topLevel\",i())),ne(e,f),Ze()}dt([\"click\"]);function Q9(e,t,r,n,i,a){return bo(this,void 0,void 0,function*(){if(re(t,!0),R(r)){if(yield n().tools.hasTooBigFiles(R(r).staged))return n().setPluginState({gitAction:0}),!1;n().promiseQueue.addTask(()=>n().gitManager.commit({message:R(i)}).then(()=>re(i,be(n().settings.commitMessage))).finally(a))}})}function eH(e,t,r,n,i,a){re(t,!0),R(r)&&n().promiseQueue.addTask(()=>n().commitAndSync(!1,!1,R(i)).then(()=>{re(i,be(n().settings.commitMessage))}).finally(a))}function K3(e,t,r,n,i){re(t,!0),r().promiseQueue.addTask(()=>r().gitManager.stageAll({status:R(n)}).finally(i))}function J3(e,t,r,n,i){re(t,!0),r().promiseQueue.addTask(()=>r().gitManager.unstageAll({status:R(n)}).finally(i))}function tH(e,t,r,n){re(t,!0),r().promiseQueue.addTask(()=>r().push().finally(n))}function rH(e,t,r,n){re(t,!0),r().promiseQueue.addTask(()=>r().pullChangesFromRemote().finally(n))}function nH(e,t,r){e.stopPropagation(),new Wi(t.view.app,!1,r().gitManager.getRelativeVaultPath(\"/\")).myOpen().then(n=>{n===!0&&r().promiseQueue.addTask(()=>r().gitManager.discardAll({status:r().cachedStatus}).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")}))},console.error)}var iH=(e,t,r,n)=>{re(t,!R(t)),(0,Ec.setIcon)(r[6],R(t)?\"list\":\"folder\"),n().settings.treeStructure=R(t),n().saveSettings()},aH=(e,t)=>re(t,\"\"),sH=se('<div class=\"git-commit-msg-clear-button svelte-11adhly\"></div>'),oH=(e,t)=>re(t,!R(t)),lH=se(\"<!> <!>\",1),cH=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),uH=(e,t)=>re(t,!R(t)),fH=se(\"<!> <!>\",1),dH=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),hH=(e,t)=>re(t,!R(t)),pH=se(\"<!> <!>\",1),mH=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),gH=se('<div class=\"pulled nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title svelte-11adhly\"><div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content\">Recently Pulled Files</div> <span class=\"tree-item-flair\"> </span></div> <!></div>'),vH=se('<div class=\"tree-item nav-folder mod-root\"><div class=\"staged tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title svelte-11adhly\"><div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content\">Staged Changes</div> <div class=\"git-tools svelte-11adhly\"><div class=\"buttons\"><div data-icon=\"minus\" aria-label=\"Unstage\" class=\"clickable-icon\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-minus\"><line x1=\"4\" y1=\"9\" x2=\"14\" y2=\"9\"></line></svg></div></div> <div class=\"files-count svelte-11adhly\"> </div></div></div> <!></div> <div class=\"changes tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title svelte-11adhly\"><div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content\">Changes</div> <div class=\"git-tools svelte-11adhly\"><div class=\"buttons\"><div data-icon=\"undo\" aria-label=\"Discard\" class=\"clickable-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-undo\"><path d=\"M3 7v6h6\"></path><path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\"></path></svg></div> <div data-icon=\"plus\" aria-label=\"Stage\" class=\"clickable-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-plus\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line></svg></div></div> <div class=\"files-count svelte-11adhly\"> </div></div></div> <!></div> <!></div>'),yH=se('<main class=\"svelte-11adhly\"><div class=\"nav-header\"><div class=\"nav-buttons-container\"><div id=\"backup-btn\" data-icon=\"arrow-up-circle\" class=\"clickable-icon nav-action-button\" aria-label=\"Commit-and-sync\"></div> <div id=\"commit-btn\" data-icon=\"check\" class=\"clickable-icon nav-action-button\" aria-label=\"Commit\"></div> <div id=\"stage-all\" class=\"clickable-icon nav-action-button\" data-icon=\"plus-circle\" aria-label=\"Stage all\"></div> <div id=\"unstage-all\" class=\"clickable-icon nav-action-button\" data-icon=\"minus-circle\" aria-label=\"Unstage all\"></div> <div id=\"push\" class=\"clickable-icon nav-action-button\" data-icon=\"upload\" aria-label=\"Push\"></div> <div id=\"pull\" class=\"clickable-icon nav-action-button\" data-icon=\"download\" aria-label=\"Pull\"></div> <div id=\"layoutChange\" class=\"clickable-icon nav-action-button\" aria-label=\"Change Layout\"></div> <div id=\"refresh\" class=\"clickable-icon nav-action-button\" data-icon=\"refresh-cw\" aria-label=\"Refresh\" style=\"margin: 1px;\"></div></div></div> <div class=\"git-commit-msg svelte-11adhly\"><textarea class=\"commit-msg-input svelte-11adhly\" spellcheck=\"true\" placeholder=\"Commit Message\"></textarea> <!></div> <div class=\"nav-files-container\" style=\"position: relative;\"><!></div></main>'),wH={hash:\"svelte-11adhly\",code:`.commit-msg-input.svelte-11adhly {width:100%;overflow:hidden;resize:none;padding:7px 5px;background-color:var(--background-modifier-form-field);}.git-commit-msg.svelte-11adhly {position:relative;padding:0;width:calc(100% - var(--size-4-8));margin:4px auto;}main.svelte-11adhly .git-tools:where(.svelte-11adhly) .files-count:where(.svelte-11adhly) {padding-left:var(--size-2-1);width:11px;display:flex;align-items:center;justify-content:center;}.nav-folder-title.svelte-11adhly {align-items:center;}.git-commit-msg-clear-button.svelte-11adhly {position:absolute;background:transparent;border-radius:50%;color:var(--search-clear-button-color);cursor:var(--cursor);top:-4px;right:2px;bottom:0px;line-height:0;height:var(--input-height);width:28px;margin:auto;padding:0 0;text-align:center;display:flex;justify-content:center;align-items:center;transition:color 0.15s ease-in-out;}.git-commit-msg-clear-button.svelte-11adhly:after {content:\"\";height:var(--search-clear-button-size);width:var(--search-clear-button-size);display:block;background-color:currentColor;mask-image:url(\"data:image/svg+xml,<svg viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6 12C9.31371 12 12 9.31371 12 6C12 2.68629 9.31371 0 6 0C2.68629 0 0 2.68629 0 6C0 9.31371 2.68629 12 6 12ZM3.8705 3.09766L6.00003 5.22718L8.12955 3.09766L8.9024 3.8705L6.77287 6.00003L8.9024 8.12955L8.12955 8.9024L6.00003 6.77287L3.8705 8.9024L3.09766 8.12955L5.22718 6.00003L3.09766 3.8705L3.8705 3.09766Z' fill='currentColor'/></svg>\");mask-repeat:no-repeat;-webkit-mask-image:url(\"data:image/svg+xml,<svg viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6 12C9.31371 12 12 9.31371 12 6C12 2.68629 9.31371 0 6 0C2.68629 0 0 2.68629 0 6C0 9.31371 2.68629 12 6 12ZM3.8705 3.09766L6.00003 5.22718L8.12955 3.09766L8.9024 3.8705L6.77287 6.00003L8.9024 8.12955L8.12955 8.9024L6.00003 6.77287L3.8705 8.9024L3.09766 8.12955L5.22718 6.00003L3.09766 3.8705L3.8705 3.09766Z' fill='currentColor'/></svg>\");-webkit-mask-repeat:no-repeat;}`};function Ev(e,t){Xe(t,!0),gt(e,wH);let r=si(t,\"plugin\",7),n=ft(!1),i=ft(void 0),a=ft(be([])),s=ft(be(r().settings.commitMessage)),o=be([]),c=ft(void 0),l=ft(void 0),u=ft(void 0),f=ft(!0),d=ft(!0),h=ft(!0),p=ft(0),m=ft(be(r().settings.treeStructure));t.view.registerEvent(t.view.app.workspace.on(\"obsidian-git:loading-status\",()=>re(n,!0))),t.view.registerEvent(t.view.app.workspace.on(\"obsidian-git:status-changed\",()=>void v().catch(console.error))),t.view.plugin.cachedStatus==null?t.view.plugin.refresh().catch(console.error):v().catch(console.error),$t(()=>{o.forEach(F=>(0,Ec.setIcon)(F,F.getAttr(\"data-icon\")))}),$t(()=>{o.forEach(F=>{var G,N;!F||F.id!=\"push\"||(Ec.Platform.isMobile?(F.removeClass(\"button-border\"),R(p)>0&&F.addClass(\"button-border\")):((G=F.firstElementChild)===null||G===void 0||G.removeAttribute(\"color\"),R(p)>0&&((N=F.firstElementChild)===null||N===void 0||N.setAttr(\"color\",\"var(--text-accent)\"))))})});function v(){return bo(this,void 0,void 0,function*(){if(!r().gitReady){re(i,void 0);return}if(re(p,be(yield r().gitManager.getUnpushedCommits())),re(i,be(r().cachedStatus)),re(n,!1),r().lastPulledFiles&&r().lastPulledFiles!=R(a)&&(re(a,be(r().lastPulledFiles)),re(u,be({title:\"\",path:\"\",vaultPath:\"\",children:r().gitManager.getTreeStructure(R(a))}))),R(i)){let F=(G,N)=>G.vaultPath.split(\"/\").last().localeCompare(Tn(N.vaultPath));R(i).changed.sort(F),R(i).staged.sort(F),re(c,be({title:\"\",path:\"\",vaultPath:\"\",children:r().gitManager.getTreeStructure(R(i).changed)})),re(l,be({title:\"\",path:\"\",vaultPath:\"\",children:r().gitManager.getTreeStructure(R(i).staged)}))}else re(c,void 0),re(l,void 0)})}function y(){t.view.app.workspace.trigger(\"obsidian-git:refresh\")}let b=Ye(()=>(R(s).match(/\\n/g)||[]).length+1||1);var x=yH(),E=H(x),_=H(E),k=H(_);k.__click=[eH,n,i,r,s,y],Ge(k,F=>o[0]=F,()=>o==null?void 0:o[0]);var w=Z(k,2);w.__click=[Q9,n,i,r,s,y],Ge(w,F=>o[1]=F,()=>o==null?void 0:o[1]);var A=Z(w,2);A.__click=[K3,n,r,i,y],Ge(A,F=>o[2]=F,()=>o==null?void 0:o[2]);var S=Z(A,2);S.__click=[J3,n,r,i,y],Ge(S,F=>o[3]=F,()=>o==null?void 0:o[3]);var T=Z(S,2);T.__click=[tH,n,r,y],Ge(T,F=>o[4]=F,()=>o==null?void 0:o[4]);var P=Z(T,2);P.__click=[rH,n,r,y],Ge(P,F=>o[5]=F,()=>o==null?void 0:o[5]);var O=Z(P,2);O.__click=[iH,m,o,r],Ge(O,F=>o[6]=F,()=>o==null?void 0:o[6]);var j=Z(O,2);j.__click=y,Ge(j,F=>o[7]=F,()=>o==null?void 0:o[7]),B(_),B(E);var D=Z(E,2),Q=H(D);rv(Q);var de=Z(Q,2);{var ee=F=>{var G=sH();G.__click=[aH,s],pe(G,\"aria-label\",\"Clear\"),ne(F,G)};ge(de,F=>{R(s)&&F(ee)})}B(D);var J=Z(D,2),Pe=H(J);{var me=F=>{var G=vH(),N=H(G),Me=H(N);Me.__click=[oH,d];var Dt=H(Me),_t=Z(Dt,4),Ee=H(_t),st=H(Ee);st.__click=[J3,n,r,i,y],Ge(st,Nt=>o[8]=Nt,()=>o==null?void 0:o[8]),B(Ee);var ot=Z(Ee,2),Ct=H(ot,!0);B(ot),B(_t),B(Me);var $e=Z(Me,2);{var U=Nt=>{var Zt=cH(),li=H(Zt);{var Va=jt=>{Ba(jt,{get hierarchy(){return R(l)},get plugin(){return r()},get view(){return t.view},get fileType(){return 0},topLevel:!0})},Po=jt=>{var Yi=lH(),$n=cr(Yi);Tr($n,17,()=>zl(R(i).staged,500),kr,(Ro,Mo)=>{Sc(Ro,{get change(){return R(Mo)},get view(){return t.view},get manager(){return r().gitManager}})});var ci=Z($n,2);ja(ci,{get files(){return R(i).staged}}),ne(jt,Yi)};ge(li,jt=>{R(m)?jt(Va):jt(Po,!1)})}B(Zt),fn(3,Zt,()=>In,()=>({duration:150})),ne(Nt,Zt)};ge($e,Nt=>{R(d)&&Nt(U)})}B(N);var Le=Z(N,2),L=H(Le);L.__click=[uH,f];var Y=H(L),ye=Z(Y,4),De=H(ye),vt=H(De);vt.__click=[nH,t,r];var za=Z(vt,2);za.__click=[K3,n,r,i,y],Ge(za,Nt=>o[9]=Nt,()=>o==null?void 0:o[9]),B(De);var Lv=Z(De,2),IP=H(Lv,!0);B(Lv),B(ye),B(L);var FP=Z(L,2);{var $P=Nt=>{var Zt=dH(),li=H(Zt);{var Va=jt=>{Ba(jt,{get hierarchy(){return R(c)},get plugin(){return r()},get view(){return t.view},get fileType(){return 1},topLevel:!0})},Po=jt=>{var Yi=fH(),$n=cr(Yi);Tr($n,17,()=>zl(R(i).changed,500),kr,(Ro,Mo)=>{bc(Ro,{get change(){return R(Mo)},get view(){return t.view},get manager(){return r().gitManager}})});var ci=Z($n,2);ja(ci,{get files(){return R(i).changed}}),ne(jt,Yi)};ge(li,jt=>{R(m)?jt(Va):jt(Po,!1)})}B(Zt),fn(3,Zt,()=>In,()=>({duration:150})),ne(Nt,Zt)};ge(FP,Nt=>{R(f)&&Nt($P)})}B(Le);var LP=Z(Le,2);{var DP=Nt=>{var Zt=gH(),li=H(Zt);li.__click=[hH,h];var Va=Z(H(li),4),Po=H(Va,!0);B(Va),B(li);var jt=Z(li,2);{var Yi=$n=>{var ci=mH(),Ro=H(ci);{var Mo=Wa=>{Ba(Wa,{get hierarchy(){return R(u)},get plugin(){return r()},get view(){return t.view},get fileType(){return 2},topLevel:!0})},NP=Wa=>{var Dv=pH(),Nv=cr(Dv);Tr(Nv,17,()=>R(a),kr,(BP,HP)=>{_c(BP,{get change(){return R(HP)},get view(){return t.view}})});var jP=Z(Nv,2);ja(jP,{get files(){return R(a)}}),ne(Wa,Dv)};ge(Ro,Wa=>{R(m)?Wa(Mo):Wa(NP,!1)})}B(ci),fn(3,ci,()=>In,()=>({duration:150})),ne($n,ci)};ge(jt,$n=>{R(h)&&$n(Yi)})}B(Zt),xe(()=>{at(Zt,\"is-collapsed\",!R(h)),Oe(Po,R(a).length)}),ne(Nt,Zt)};ge(LP,Nt=>{R(a).length>0&&R(u)&&Nt(DP)})}B(G),xe(()=>{at(N,\"is-collapsed\",!R(d)),at(Dt,\"is-collapsed\",!R(d)),Oe(Ct,R(i).staged.length),at(Le,\"is-collapsed\",!R(f)),at(Y,\"is-collapsed\",!R(f)),Oe(IP,R(i).changed.length)}),ne(F,G)};ge(Pe,F=>{R(i)&&R(l)&&R(c)&&F(me)})}B(J),B(x),xe(()=>{pe(x,\"data-type\",St.type),pe(O,\"data-icon\",R(m)?\"list\":\"folder\"),at(j,\"loading\",R(n)),pe(Q,\"rows\",R(b))}),pv(Q,()=>R(s),F=>re(s,F)),ne(e,x),Ze()}dt([\"click\"]);var Ac=class extends Q3.ItemView{constructor(t,r){super(t),this.plugin=r,this.hoverPopover=null}getViewType(){return St.type}getDisplayText(){return St.name}getIcon(){return St.icon}onClose(){return this._view&&ai(this._view),super.onClose()}reload(){this._view&&ai(this._view),this._view=zi(Ev,{target:this.contentEl,props:{plugin:this.plugin,view:this}})}onOpen(){return this.reload(),super.onOpen()}};g();var Ud=class{constructor(t,r){this.statusBarEl=t;this.plugin=r;this.statusBarEl.addClass(\"mod-clickable\"),this.statusBarEl.onClickEvent(n=>{this.plugin.switchBranch().catch(i=>r.displayError(i))})}async display(){if(this.plugin.gitReady){let t=await this.plugin.gitManager.branchInfo();t.current!=null?this.statusBarEl.setText(t.current):this.statusBarEl.empty()}else this.statusBarEl.empty()}remove(){this.statusBarEl.remove()}};g();var _o=require(\"obsidian\");var kc=class{constructor(t){this.plugin=t}async hasTooBigFiles(t){let r=await this.plugin.gitManager.branchInfo(),n=r.tracking?Ii(r.tracking)[0]:null;if(!n)return!1;let i=await this.plugin.gitManager.getRemoteUrl(n);if(i!=null&&i.includes(\"github.com\")){let a=[],s=this.plugin.gitManager;for(let o of t){let c=this.plugin.app.vault.getAbstractFileByPath(o.vaultPath),l=!1;if(c instanceof _o.TFile)c.stat.size>=1e8&&(l=!0);else{let u=await this.plugin.app.vault.adapter.stat(o.vaultPath);u&&u.size>=1e8&&(l=!0)}if(l){let u=!1;s instanceof Te&&(u=await s.isFileTrackedByLFS(o.path)),u||a.push(o)}}if(a.length>0)return this.plugin.displayError(`Aborted commit, because the following files are too big:\n- ${a.map(o=>o.vaultPath).join(`\n- `)}\nPlease remove them or add to .gitignore.`),!0}return!1}async writeAndOpenFile(t){t!==void 0&&await this.plugin.app.vault.adapter.write(Ms,t);let r=!1;this.plugin.app.workspace.iterateAllLeaves(n=>{n.getDisplayText()!=\"\"&&Ms.startsWith(n.getDisplayText())&&(r=!0)}),r||await this.plugin.app.workspace.openLinkText(Ms,\"/\",!0)}openDiff({aFile:t,bFile:r,aRef:n,bRef:i,event:a}){var c,l;let s=this.plugin.settings.diffStyle;_o.Platform.isMobileApp&&(s=\"git_unified\");let o={aFile:t,bFile:r!=null?r:t,aRef:n,bRef:i};s==\"split\"?(c=rn(this.plugin.app,a))==null||c.setViewState({type:Ai.type,active:!0,state:o}):s==\"git_unified\"&&((l=rn(this.plugin.app,a))==null||l.setViewState({type:ki.type,active:!0,state:o}))}async runRawCommand(){let t=this.plugin.gitManager;if(!(t instanceof Te))return;let n=await new Fe(this.plugin,{placeholder:\"push origin master\",allowEmpty:!1}).openAndGetResult();n!==void 0&&this.plugin.promiseQueue.addTask(async()=>{let i=new _o.Notice(`Running '${n}'...`,999999);try{let a=await t.rawCommand(n);a?(i.setMessage(a),window.setTimeout(()=>i.hide(),5e3)):i.hide()}catch(a){throw i.hide(),a}})}};g();var To=require(\"obsidian\");var Xr=require(\"@codemirror/view\"),ko=require(\"@codemirror/state\");g();var Re=require(\"@codemirror/view\"),Se=require(\"@codemirror/state\");g();var Av=\"\\u037C\",eP=typeof Symbol==\"undefined\"?\"__\"+Av:Symbol.for(Av),kv=typeof Symbol==\"undefined\"?\"__styleSet\"+Math.floor(Math.random()*1e8):Symbol(\"styleSet\"),tP=typeof globalThis!=\"undefined\"?globalThis:typeof window!=\"undefined\"?window:{},Gd=class{constructor(t,r){this.rules=[];let{finish:n}=r||{};function i(s){return/^@/.test(s)?[s]:s.split(/,\\s*/)}function a(s,o,c,l){let u=[],f=/^@(\\w+)\\b/.exec(s[0]),d=f&&f[1]==\"keyframes\";if(f&&o==null)return c.push(s[0]+\";\");for(let h in o){let p=o[h];if(/&/.test(h))a(h.split(/,\\s*/).map(m=>s.map(v=>m.replace(/&/,v))).reduce((m,v)=>m.concat(v)),p,c);else if(p&&typeof p==\"object\"){if(!f)throw new RangeError(\"The value of a property (\"+h+\") should be a primitive value.\");a(i(h),p,u,d)}else p!=null&&u.push(h.replace(/_.*/,\"\").replace(/[A-Z]/g,m=>\"-\"+m.toLowerCase())+\": \"+p+\";\")}(u.length||d)&&c.push((n&&!f&&!l?s.map(n):s).join(\", \")+\" {\"+u.join(\" \")+\"}\")}for(let s in t)a(i(s),t[s],this.rules)}getRules(){return this.rules.join(`\n`)}static newName(){let t=tP[eP]||1;return tP[eP]=t+1,Av+t.toString(36)}static mount(t,r,n){let i=t[kv],a=n&&n.nonce;i?a&&i.setNonce(a):i=new Tv(t,a),i.mount(Array.isArray(r)?r:[r],t)}},rP=new Map,Tv=class{constructor(t,r){let n=t.ownerDocument||t,i=n.defaultView;if(!t.head&&t.adoptedStyleSheets&&i.CSSStyleSheet){let a=rP.get(n);if(a)return t[kv]=a;this.sheet=new i.CSSStyleSheet,rP.set(n,this)}else this.styleTag=n.createElement(\"style\"),r&&this.styleTag.setAttribute(\"nonce\",r);this.modules=[],t[kv]=this}mount(t,r){let n=this.sheet,i=0,a=0;for(let s=0;s<t.length;s++){let o=t[s],c=this.modules.indexOf(o);if(c<a&&c>-1&&(this.modules.splice(c,1),a--,c=-1),c==-1){if(this.modules.splice(a++,0,o),n)for(let l=0;l<o.rules.length;l++)n.insertRule(o.rules[l],i++)}else{for(;a<c;)i+=this.modules[a++].rules.length;i+=o.rules.length,a++}}if(n)r.adoptedStyleSheets.indexOf(this.sheet)<0&&(r.adoptedStyleSheets=[this.sheet,...r.adoptedStyleSheets]);else{let s=\"\";for(let c=0;c<this.modules.length;c++)s+=this.modules[c].getRules()+`\n`;this.styleTag.textContent=s;let o=r.head||r;this.styleTag.parentNode!=o&&o.insertBefore(this.styleTag,o.firstChild)}}setNonce(t){this.styleTag&&this.styleTag.getAttribute(\"nonce\")!=t&&this.styleTag.setAttribute(\"nonce\",t)}};var bP=require(\"@codemirror/language\"),bH=require(\"@lezer/highlight\"),ht=class e{constructor(t,r,n,i){this.fromA=t,this.toA=r,this.fromB=n,this.toB=i}offset(t,r=t){return new e(this.fromA+t,this.toA+t,this.fromB+r,this.toB+r)}};function Ua(e,t,r,n,i,a){if(e==n)return[];let s=Fv(e,t,r,n,i,a),o=$v(e,t+s,r,n,i+s,a);t+=s,r-=o,i+=s,a-=o;let c=r-t,l=a-i;if(!c||!l)return[new ht(t,r,i,a)];if(c>l){let f=e.slice(t,r).indexOf(n.slice(i,a));if(f>-1)return[new ht(t,t+f,i,i),new ht(t+f+l,r,a,a)]}else if(l>c){let f=n.slice(i,a).indexOf(e.slice(t,r));if(f>-1)return[new ht(t,t,i,i+f),new ht(r,r,i+f+c,a)]}if(c==1||l==1)return[new ht(t,r,i,a)];let u=xP(e,t,r,n,i,a);if(u){let[f,d,h]=u;return Ua(e,t,f,n,i,d).concat(Ua(e,f+h,r,n,d+h,a))}return _H(e,t,r,n,i,a)}var Tc=1e9;function _H(e,t,r,n,i,a){let s=r-t,o=a-i;if(Tc<1e9&&Math.min(s,o)>Tc*16)return Math.min(s,o)>Tc*64?[new ht(t,r,i,a)]:nP(e,t,r,n,i,a);let c=Math.ceil((s+o)/2);Cv.reset(c),Pv.reset(c);let l=(h,p)=>e.charCodeAt(t+h)==n.charCodeAt(i+p),u=(h,p)=>e.charCodeAt(r-h-1)==n.charCodeAt(a-p-1),f=(s-o)%2!=0?Pv:null,d=f?null:Cv;for(let h=0;h<c;h++){if(h>Tc)return nP(e,t,r,n,i,a);let p=Cv.advance(h,s,o,c,f,!1,l)||Pv.advance(h,s,o,c,d,!0,u);if(p)return xH(e,t,r,t+p[0],n,i,a,i+p[1])}return[new ht(t,r,i,a)]}var Yd=class{constructor(){this.vec=[]}reset(t){this.len=t<<1;for(let r=0;r<this.len;r++)this.vec[r]=-1;this.vec[t+1]=0,this.start=this.end=0}advance(t,r,n,i,a,s,o){for(let c=-t+this.start;c<=t-this.end;c+=2){let l=i+c,u=c==-t||c!=t&&this.vec[l-1]<this.vec[l+1]?this.vec[l+1]:this.vec[l-1]+1,f=u-c;for(;u<r&&f<n&&o(u,f);)u++,f++;if(this.vec[l]=u,u>r)this.end+=2;else if(f>n)this.start+=2;else if(a){let d=i+(r-n)-c;if(d>=0&&d<this.len&&a.vec[d]!=-1)if(s){let h=a.vec[d];if(h>=r-u)return[h,i+h-d]}else{let h=r-a.vec[d];if(u>=h)return[u,f]}}}return null}},Cv=new Yd,Pv=new Yd;function xH(e,t,r,n,i,a,s,o){let c=!1;return!Eo(e,n)&&++n==r&&(c=!0),!Eo(i,o)&&++o==s&&(c=!0),c?[new ht(t,r,a,s)]:Ua(e,t,n,i,a,o).concat(Ua(e,n,r,i,o,s))}function _P(e,t){let r=1,n=Math.min(e,t);for(;r<n;)r=r<<1;return r}function Fv(e,t,r,n,i,a){if(t==r||t==a||e.charCodeAt(t)!=n.charCodeAt(i))return 0;let s=_P(r-t,a-i);for(let o=t,c=i;;){let l=o+s,u=c+s;if(l>r||u>a||e.slice(o,l)!=n.slice(c,u)){if(s==1)return o-t-(Eo(e,o)?0:1);s=s>>1}else{if(l==r||u==a)return l-t;o=l,c=u}}}function $v(e,t,r,n,i,a){if(t==r||i==a||e.charCodeAt(r-1)!=n.charCodeAt(a-1))return 0;let s=_P(r-t,a-i);for(let o=r,c=a;;){let l=o-s,u=c-s;if(l<t||u<i||e.slice(l,o)!=n.slice(u,c)){if(s==1)return r-o-(Eo(e,o)?0:1);s=s>>1}else{if(l==t||u==i)return r-l;o=l,c=u}}}function Rv(e,t,r,n,i,a,s,o){let c=n.slice(i,a),l=null;for(;;){if(l||s<o)return l;for(let u=t+s;;){Eo(e,u)||u++;let f=u+s;if(Eo(e,f)||(f+=f==u+1?1:-1),f>=r)break;let d=e.slice(u,f),h=-1;for(;(h=c.indexOf(d,h+1))!=-1;){let p=Fv(e,f,r,n,i+h+d.length,a),m=$v(e,t,u,n,i,i+h),v=d.length+p+m;(!l||l[2]<v)&&(l=[u-m,i+h-m,v])}u=f}if(o<0)return l;s=s>>1}}function xP(e,t,r,n,i,a){let s=r-t,o=a-i;if(s<o){let c=xP(n,i,a,e,t,r);return c&&[c[1],c[0],c[2]]}return s<4||o*2<s?null:Rv(e,t,r,n,i,a,Math.floor(s/4),-1)}function nP(e,t,r,n,i,a){let s=r-t,o=a-i,c;if(s<o){let d=Rv(n,i,a,e,t,r,Math.floor(s/6),50);c=d&&[d[1],d[0],d[2]]}else c=Rv(e,t,r,n,i,a,Math.floor(o/6),50);if(!c)return[new ht(t,r,i,a)];let[l,u,f]=c;return Ua(e,t,l,n,i,u).concat(Ua(e,l+f,r,n,u+f,a))}function SP(e,t){for(let r=1;r<e.length;r++){let n=e[r-1],i=e[r];n.toA>i.fromA-t&&n.toB>i.fromB-t&&(e[r-1]=new ht(n.fromA,i.toA,n.fromB,i.toB),e.splice(r--,1))}}function SH(e,t,r){for(;;){SP(r,1);let n=!1;for(let i=0;i<r.length;i++){let a=r[i],s,o;(s=Fv(e,a.fromA,a.toA,t,a.fromB,a.toB))&&(a=r[i]=new ht(a.fromA+s,a.toA,a.fromB+s,a.toB)),(o=$v(e,a.fromA,a.toA,t,a.fromB,a.toB))&&(a=r[i]=new ht(a.fromA,a.toA-o,a.fromB,a.toB-o));let c=a.toA-a.fromA,l=a.toB-a.fromB;if(c&&l)continue;let u=a.fromA-(i?r[i-1].toA:0),f=(i<r.length-1?r[i+1].fromA:e.length)-a.toA;if(!u||!f)continue;let d=c?e.slice(a.fromA,a.toA):t.slice(a.fromB,a.toB);u<=d.length&&e.slice(a.fromA-u,a.fromA)==d.slice(d.length-u)?(r[i]=new ht(a.fromA-u,a.toA-u,a.fromB-u,a.toB-u),n=!0):f<=d.length&&e.slice(a.toA,a.toA+f)==d.slice(0,f)&&(r[i]=new ht(a.fromA+f,a.toA+f,a.fromB+f,a.toB+f),n=!0)}if(!n)break}return r}function EH(e,t,r){for(let n=0,i=0;i<e.length;i++){let a=e[i],s=a.toA-a.fromA,o=a.toB-a.fromB;if(s&&o||s>3||o>3){let c=i==e.length-1?t.length:e[i+1].fromA,l=a.fromA-n,u=c-a.toA,f=aP(t,a.fromA,Math.min(l,5)),d=iP(t,a.toA,Math.min(u,5)),h=a.fromA-f,p=d-a.toA;if(!s||!o){let m=Math.max(s,o),[v,y,b]=s?[t,a.fromA,a.toA]:[r,a.fromB,a.toB];h&&p&&(m>h&&t.slice(f,a.fromA)==v.slice(b-h,b)?(a=e[i]=new ht(f,f+s,a.fromB-h,a.toB-h),f=a.fromA,d=iP(t,a.toA,Math.min(c-a.toA,5))):m>p&&t.slice(a.toA,d)==v.slice(y,y+p)&&(a=e[i]=new ht(d-s,d,a.fromB+p,a.toB+p),d=a.toA,f=aP(t,a.fromA,Math.min(a.fromA-n,5))),h=a.fromA-f,p=d-a.toA)}if(h||p)a=e[i]=new ht(a.fromA-h,a.toA+p,a.fromB-h,a.toB+p);else if(s){if(!o){let m=oP(t,a.fromA,a.toA),v,y=m<0?-1:sP(t,a.toA,a.fromA);m>-1&&(v=m-a.fromA)<=u&&t.slice(a.fromA,m)==t.slice(a.toA,a.toA+v)?a=e[i]=a.offset(v):y>-1&&(v=a.toA-y)<=l&&t.slice(a.fromA-v,a.fromA)==t.slice(y,a.toA)&&(a=e[i]=a.offset(-v))}}else{let m=oP(r,a.fromB,a.toB),v,y=m<0?-1:sP(r,a.toB,a.fromB);m>-1&&(v=m-a.fromB)<=u&&r.slice(a.fromB,m)==r.slice(a.toB,a.toB+v)?a=e[i]=a.offset(v):y>-1&&(v=a.toB-y)<=l&&r.slice(a.fromB-v,a.fromB)==r.slice(y,a.toB)&&(a=e[i]=a.offset(-v))}n=a.toA}}return SP(e,3),e}var Ha;try{Ha=new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}]\",\"u\")}catch(e){}function EP(e){return e>48&&e<58||e>64&&e<91||e>96&&e<123}function AP(e,t){if(t==e.length)return 0;let r=e.charCodeAt(t);return r<192?EP(r)?1:0:Ha?!TP(r)||t==e.length-1?Ha.test(String.fromCharCode(r))?1:0:Ha.test(e.slice(t,t+2))?2:0:0}function kP(e,t){if(!t)return 0;let r=e.charCodeAt(t-1);return r<192?EP(r)?1:0:Ha?!CP(r)||t==1?Ha.test(String.fromCharCode(r))?1:0:Ha.test(e.slice(t-2,t))?2:0:0}function iP(e,t,r){if(t==e.length||!kP(e,t))return t;for(let n=t,i=t+r;;){let a=AP(e,n);if(!a)return n;if(n+=a,n>i)return t}}function aP(e,t,r){if(!t||!AP(e,t))return t;for(let n=t,i=t-r;;){let a=kP(e,n);if(!a)return n;if(n-=a,n<i)return t}}function sP(e,t,r){for(;t!=r;t--)if(e.charCodeAt(t-1)==10)return t;return-1}function oP(e,t,r){for(;t!=r;t++)if(e.charCodeAt(t)==10)return t;return-1}var TP=e=>e>=55296&&e<=56319,CP=e=>e>=56320&&e<=57343;function Eo(e,t){return!t||t==e.length||!TP(e.charCodeAt(t-1))||!CP(e.charCodeAt(t))}function AH(e,t,r){var n;return Tc=((n=r==null?void 0:r.scanLimit)!==null&&n!==void 0?n:1e9)>>1,SH(e,t,Ua(e,0,e.length,t,0,t.length))}function PP(e,t,r){return EH(AH(e,t,r),e,t)}var Fn=Se.Facet.define({combine:e=>e[0]}),Mv=Se.StateEffect.define(),Ao=Se.StateField.define({create(e){return null},update(e,t){for(let r of t.effects)r.is(Mv)&&(e=r.value);return e}});var So=class e{constructor(t,r,n,i,a){this.changes=t,this.fromA=r,this.toA=n,this.fromB=i,this.toB=a}offset(t,r){return t||r?new e(this.changes,this.fromA+t,this.toA+t,this.fromB+r,this.toB+r):this}get endA(){return Math.max(this.fromA,this.toA-1)}get endB(){return Math.max(this.fromB,this.toB-1)}static build(t,r,n){return RP(PP(t.toString(),r.toString(),n),t,r,0,0)}static updateA(t,r,n,i,a){return dP(fP(t,i,!0,n.length),t,r,n,a)}static updateB(t,r,n,i,a){return dP(fP(t,i,!1,r.length),t,r,n,a)}};function lP(e,t,r,n){let i=r.lineAt(e),a=n.lineAt(t);return i.to==e&&a.to==t&&e<r.length&&t<n.length?[e+1,t+1]:[i.from,a.from]}function cP(e,t,r,n){let i=r.lineAt(e),a=n.lineAt(t);return i.from==e&&a.from==t?[e,t]:[i.to+1,a.to+1]}function RP(e,t,r,n,i){let a=[];for(let s=0;s<e.length;s++){let o=e[s],[c,l]=lP(o.fromA+n,o.fromB+i,t,r),[u,f]=cP(o.toA+n,o.toB+i,t,r),d=[o.offset(-c+n,-l+i)];for(;s<e.length-1;){let h=e[s+1],[p,m]=lP(h.fromA+n,h.fromB+i,t,r);if(p>u+1&&m>f+1)break;d.push(h.offset(-c+n,-l+i)),[u,f]=cP(h.toA+n,h.toB+i,t,r),s++}a.push(new So(d,c,Math.max(c,u),l,Math.max(l,f)))}return a}var zd=1e3;function uP(e,t,r,n){let i=0,a=e.length;for(;;){if(i==a){let u=0,f=0;i&&({toA:u,toB:f}=e[i-1]);let d=t-(r?u:f);return[u+d,f+d]}let s=i+a>>1,o=e[s],[c,l]=r?[o.fromA,o.toA]:[o.fromB,o.toB];if(c>t)a=s;else if(l<=t)i=s+1;else return n?[o.fromA,o.fromB]:[o.toA,o.toB]}}function fP(e,t,r,n){let i=[];return t.iterChangedRanges((a,s,o,c)=>{let l=0,u=r?t.length:n,f=0,d=r?n:t.length;a>zd&&([l,f]=uP(e,a-zd,r,!0)),s<t.length-zd&&([u,d]=uP(e,s+zd,r,!1));let h=c-o-(s-a),p,[m,v]=r?[h,0]:[0,h];i.length&&(p=i[i.length-1]).toA>=l?i[i.length-1]={fromA:p.fromA,fromB:p.fromB,toA:u,toB:d,diffA:p.diffA+m,diffB:p.diffB+v}:i.push({fromA:l,toA:u,fromB:f,toB:d,diffA:m,diffB:v})}),i}function dP(e,t,r,n,i){if(!e.length)return t;let a=[];for(let s=0,o=0,c=0,l=0;;s++){let u=s==e.length?null:e[s],f=u?u.fromA+o:r.length,d=u?u.fromB+c:n.length;for(;l<t.length;){let v=t[l];if(v.toA+o>f||v.toB+c>d)break;a.push(v.offset(o,c)),l++}if(!u)break;let h=u.toA+o+u.diffA,p=u.toB+c+u.diffB,m=PP(r.sliceString(f,h),n.sliceString(d,p),i);for(let v of RP(m,r,n,f,d))a.push(v);for(o+=u.diffA,c+=u.diffB;l<t.length;){let v=t[l];if(v.fromA+o>h&&v.fromB+c>p)break;l++}}return a}var kH={scanLimit:500},MP=Re.ViewPlugin.fromClass(class{constructor(e){({deco:this.deco,gutter:this.gutter}=mP(e))}update(e){(e.docChanged||e.viewportChanged||TH(e.startState,e.state)||CH(e.startState,e.state))&&({deco:this.deco,gutter:this.gutter}=mP(e.view))}},{decorations:e=>e.deco}),Vd=Se.Prec.low((0,Re.gutter)({class:\"cm-changeGutter\",markers:e=>{var t;return((t=e.plugin(MP))===null||t===void 0?void 0:t.gutter)||Se.RangeSet.empty}}));function TH(e,t){return e.field(Ao,!1)!=t.field(Ao,!1)}function CH(e,t){return e.facet(Fn)!=t.facet(Fn)}var hP=Re.Decoration.line({class:\"cm-changedLine\"}),PH=Re.Decoration.mark({class:\"cm-changedText\"}),RH=Re.Decoration.mark({tagName:\"ins\",class:\"cm-insertedLine\"}),MH=Re.Decoration.mark({tagName:\"del\",class:\"cm-deletedLine\"}),pP=new class extends Re.GutterMarker{constructor(){super(...arguments),this.elementClass=\"cm-changedLineGutter\"}};function OH(e,t,r,n,i,a){let s=r?e.fromA:e.fromB,o=r?e.toA:e.toB,c=0;if(s!=o){i.add(s,s,hP),i.add(s,o,r?MH:RH),a&&a.add(s,s,pP);for(let l=t.iterRange(s,o-1),u=s;!l.next().done;){if(l.lineBreak){u++,i.add(u,u,hP),a&&a.add(u,u,pP);continue}let f=u+l.value.length;if(n)for(;c<e.changes.length;){let d=e.changes[c],h=s+(r?d.fromA:d.fromB),p=s+(r?d.toA:d.toB),m=Math.max(u,h),v=Math.min(f,p);if(m<v&&i.add(m,v,PH),p<f)c++;else break}u=f}}}function mP(e){let t=e.state.field(Ao),{side:r,highlightChanges:n,markGutter:i}=e.state.facet(Fn),a=r==\"a\",s=new Se.RangeSetBuilder,o=i?new Se.RangeSetBuilder:null,{from:c,to:l}=e.viewport;for(let u of t){if((a?u.fromA:u.fromB)>=l)break;(a?u.toA:u.toB)>c&&OH(u,e.state.doc,a,n,s,o)}return{deco:s.finish(),gutter:o&&o.finish()}}var xo=class extends Re.WidgetType{constructor(t){super(),this.height=t}eq(t){return this.height==t.height}toDOM(){let t=document.createElement(\"div\");return t.className=\"cm-mergeSpacer\",t.style.height=this.height+\"px\",t}updateDOM(t){return t.style.height=this.height+\"px\",!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}},Xd=Se.StateEffect.define({map:(e,t)=>e.map(t)}),Cc=Se.StateField.define({create:()=>Re.Decoration.none,update:(e,t)=>{for(let r of t.effects)if(r.is(Xd))return r.value;return e.map(t.changes)},provide:e=>Re.EditorView.decorations.from(e)}),Wd=.01;function gP(e,t){if(e.size!=t.size)return!1;let r=e.iter(),n=t.iter();for(;r.value;){if(r.from!=n.from||Math.abs(r.value.spec.widget.height-n.value.spec.widget.height)>1)return!1;r.next(),n.next()}return!0}function IH(e,t,r){let n=new Se.RangeSetBuilder,i=new Se.RangeSetBuilder,a=e.state.field(Cc).iter(),s=t.state.field(Cc).iter(),o=0,c=0,l=0,u=0,f=e.viewport,d=t.viewport;for(let v=0;;v++){let y=v<r.length?r[v]:null,b=y?y.fromA:e.state.doc.length,x=y?y.fromB:t.state.doc.length;if(o<b){let E=e.lineBlockAt(o).top+l,_=t.lineBlockAt(c).top+u,k=E-_;k<-Wd?(l-=k,n.add(o,o,Re.Decoration.widget({widget:new xo(-k),block:!0,side:-1}))):k>Wd&&(u+=k,i.add(c,c,Re.Decoration.widget({widget:new xo(k),block:!0,side:-1})))}if(b>o+1e3&&o<f.from&&b>f.from&&c<d.from&&x>d.from){let E=Math.min(f.from-o,d.from-c);o+=E,c+=E,v--}else if(y)o=y.toA,c=y.toB;else break;for(;a.value&&a.from<o;)l-=a.value.spec.widget.height,a.next();for(;s.value&&s.from<c;)u-=s.value.spec.widget.height,s.next()}for(;a.value;)l-=a.value.spec.widget.height,a.next();for(;s.value;)u-=s.value.spec.widget.height,s.next();let h=e.contentHeight+l-(t.contentHeight+u);h<Wd?n.add(e.state.doc.length,e.state.doc.length,Re.Decoration.widget({widget:new xo(-h),block:!0,side:1})):h>Wd&&i.add(t.state.doc.length,t.state.doc.length,Re.Decoration.widget({widget:new xo(h),block:!0,side:1}));let p=n.finish(),m=i.finish();gP(p,e.state.field(Cc))||e.dispatch({effects:Xd.of(p)}),gP(m,t.state.field(Cc))||t.dispatch({effects:Xd.of(m)})}var Ov=Se.StateEffect.define({map:(e,t)=>t.mapPos(e)}),Iv=class extends Re.WidgetType{constructor(t){super(),this.lines=t}eq(t){return this.lines==t.lines}toDOM(t){let r=document.createElement(\"div\");return r.className=\"cm-collapsedLines\",r.textContent=t.state.phrase(\"$ unchanged lines\",this.lines),r.addEventListener(\"click\",n=>{let i=t.posAtDOM(n.target);t.dispatch({effects:Ov.of(i)});let{side:a,sibling:s}=t.state.facet(Fn);s&&s().dispatch({effects:Ov.of(FH(i,t.state.field(Ao),a==\"a\"))})}),r}ignoreEvent(t){return t instanceof MouseEvent}get estimatedHeight(){return 27}};function FH(e,t,r){let n=0,i=0;for(let a=0;;a++){let s=a<t.length?t[a]:null;if(!s||(r?s.fromA:s.fromB)>=e)return i+(e-n);[n,i]=r?[s.toA,s.toB]:[s.toB,s.toA]}}var $H=Se.StateField.define({create(e){return Re.Decoration.none},update(e,t){e=e.map(t.changes);for(let r of t.effects)r.is(Ov)&&(e=e.update({filter:n=>n!=r.value}));return e},provide:e=>Re.EditorView.decorations.from(e)});function vP({margin:e=3,minSize:t=4}){return $H.init(r=>LH(r,e,t))}function LH(e,t,r){let n=new Se.RangeSetBuilder,i=e.facet(Fn).side==\"a\",a=e.field(Ao),s=1;for(let o=0;;o++){let c=o<a.length?a[o]:null,l=o?s+t:1,u=c?e.doc.lineAt(i?c.fromA:c.fromB).number-1-t:e.doc.lines,f=u-l+1;if(f>=r&&n.add(e.doc.line(l).from,e.doc.line(u).to,Re.Decoration.replace({widget:new Iv(f),block:!0})),!c)break;s=e.doc.lineAt(Math.min(e.doc.length,i?c.toA:c.toB)).number}return n.finish()}var DH=Re.EditorView.styleModule.of(new Gd({\".cm-mergeView\":{overflowY:\"auto\"},\".cm-mergeViewEditors\":{display:\"flex\",alignItems:\"stretch\"},\".cm-mergeViewEditor\":{flexGrow:1,flexBasis:0,overflow:\"hidden\"},\".cm-merge-revert\":{width:\"1.6em\",flexGrow:0,flexShrink:0,position:\"relative\"},\".cm-merge-revert button\":{position:\"absolute\",display:\"block\",width:\"100%\",boxSizing:\"border-box\",textAlign:\"center\",background:\"none\",border:\"none\",font:\"inherit\",cursor:\"pointer\"}})),NH=Re.EditorView.baseTheme({\".cm-mergeView & .cm-scroller, .cm-mergeView &\":{height:\"auto !important\",overflowY:\"visible !important\"},\"&.cm-merge-a .cm-changedLine, .cm-deletedChunk\":{backgroundColor:\"rgba(160, 128, 100, .08)\"},\"&.cm-merge-b .cm-changedLine\":{backgroundColor:\"rgba(100, 160, 128, .08)\"},\"&light.cm-merge-a .cm-changedText, &light .cm-deletedChunk .cm-deletedText\":{background:\"linear-gradient(#ee443366, #ee443366) bottom/100% 2px no-repeat\"},\"&dark.cm-merge-a .cm-changedText, &dark .cm-deletedChunk .cm-deletedText\":{background:\"linear-gradient(#ffaa9966, #ffaa9966) bottom/100% 2px no-repeat\"},\"&light.cm-merge-b .cm-changedText\":{background:\"linear-gradient(#22bb2266, #22bb2266) bottom/100% 2px no-repeat\"},\"&dark.cm-merge-b .cm-changedText\":{background:\"linear-gradient(#88ff8866, #88ff8866) bottom/100% 2px no-repeat\"},\".cm-insertedLine, .cm-deletedLine\":{textDecoration:\"none\"},\".cm-deletedChunk\":{paddingLeft:\"6px\",\"& .cm-chunkButtons\":{position:\"absolute\",insetInlineEnd:\"5px\"},\"& button\":{border:\"none\",cursor:\"pointer\",color:\"white\",margin:\"0 2px\",borderRadius:\"3px\",\"&[name=accept]\":{background:\"#2a2\"},\"&[name=reject]\":{background:\"#d43\"}}},\".cm-collapsedLines\":{padding:\"5px 5px 5px 10px\",cursor:\"pointer\",\"&:before\":{content:'\"\\u299A\"',marginInlineEnd:\"7px\"},\"&:after\":{content:'\"\\u299A\"',marginInlineStart:\"7px\"}},\"&light .cm-collapsedLines\":{color:\"#444\",background:\"linear-gradient(to bottom, transparent 0, #f3f3f3 30%, #f3f3f3 70%, transparent 100%)\"},\"&dark .cm-collapsedLines\":{color:\"#ddd\",background:\"linear-gradient(to bottom, transparent 0, #222 30%, #222 70%, transparent 100%)\"},\".cm-changeGutter\":{width:\"3px\",paddingLeft:\"1px\"},\"&light.cm-merge-a .cm-changedLineGutter, &light .cm-deletedLineGutter\":{background:\"#e43\"},\"&dark.cm-merge-a .cm-changedLineGutter, &dark .cm-deletedLineGutter\":{background:\"#fa9\"},\"&light.cm-merge-b .cm-changedLineGutter\":{background:\"#2b2\"},\"&dark.cm-merge-b .cm-changedLineGutter\":{background:\"#8f8\"}}),yP=new Se.Compartment,qd=new Se.Compartment,Zd=class{constructor(t){this.revertDOM=null,this.revertToA=!1,this.revertToLeft=!1,this.measuring=-1,this.diffConf=t.diffConfig||kH;let r=[Se.Prec.low(MP),NH,DH,Cc,Re.EditorView.updateListener.of(f=>{this.measuring<0&&(f.heightChanged||f.viewportChanged)&&!f.transactions.some(d=>d.effects.some(h=>h.is(Xd)))&&this.measure()})],n=[Fn.of({side:\"a\",sibling:()=>this.b,highlightChanges:t.highlightChanges!==!1,markGutter:t.gutter!==!1})];t.gutter!==!1&&n.push(Vd);let i=Se.EditorState.create({doc:t.a.doc,selection:t.a.selection,extensions:[t.a.extensions||[],Re.EditorView.editorAttributes.of({class:\"cm-merge-a\"}),qd.of(n),r]}),a=[Fn.of({side:\"b\",sibling:()=>this.a,highlightChanges:t.highlightChanges!==!1,markGutter:t.gutter!==!1})];t.gutter!==!1&&a.push(Vd);let s=Se.EditorState.create({doc:t.b.doc,selection:t.b.selection,extensions:[t.b.extensions||[],Re.EditorView.editorAttributes.of({class:\"cm-merge-b\"}),qd.of(a),r]});this.chunks=So.build(i.doc,s.doc,this.diffConf);let o=[Ao.init(()=>this.chunks),yP.of(t.collapseUnchanged?vP(t.collapseUnchanged):[])];i=i.update({effects:Se.StateEffect.appendConfig.of(o)}).state,s=s.update({effects:Se.StateEffect.appendConfig.of(o)}).state,this.dom=document.createElement(\"div\"),this.dom.className=\"cm-mergeView\",this.editorDOM=this.dom.appendChild(document.createElement(\"div\")),this.editorDOM.className=\"cm-mergeViewEditors\";let c=t.orientation||\"a-b\",l=document.createElement(\"div\");l.className=\"cm-mergeViewEditor\";let u=document.createElement(\"div\");u.className=\"cm-mergeViewEditor\",this.editorDOM.appendChild(c==\"a-b\"?l:u),this.editorDOM.appendChild(c==\"a-b\"?u:l),this.a=new Re.EditorView({state:i,parent:l,root:t.root,dispatchTransactions:f=>this.dispatch(f,this.a)}),this.b=new Re.EditorView({state:s,parent:u,root:t.root,dispatchTransactions:f=>this.dispatch(f,this.b)}),this.setupRevertControls(!!t.revertControls,t.revertControls==\"b-to-a\",t.renderRevertControl),t.parent&&t.parent.appendChild(this.dom),this.scheduleMeasure()}dispatch(t,r){if(t.some(n=>n.docChanged)){let n=t[t.length-1],i=t.reduce((s,o)=>s.compose(o.changes),Se.ChangeSet.empty(t[0].startState.doc.length));this.chunks=r==this.a?So.updateA(this.chunks,n.newDoc,this.b.state.doc,i,this.diffConf):So.updateB(this.chunks,this.a.state.doc,n.newDoc,i,this.diffConf),r.update([...t,n.state.update({effects:Mv.of(this.chunks)})]);let a=r==this.a?this.b:this.a;a.update([a.state.update({effects:Mv.of(this.chunks)})]),this.scheduleMeasure()}else r.update(t)}reconfigure(t){if(\"diffConfig\"in t&&(this.diffConf=t.diffConfig),\"orientation\"in t){let a=t.orientation!=\"b-a\";if(a!=(this.editorDOM.firstChild==this.a.dom.parentNode)){let s=this.a.dom.parentNode,o=this.b.dom.parentNode;s.remove(),o.remove(),this.editorDOM.insertBefore(a?s:o,this.editorDOM.firstChild),this.editorDOM.appendChild(a?o:s),this.revertToLeft=!this.revertToLeft,this.revertDOM&&(this.revertDOM.textContent=\"\")}}if(\"revertControls\"in t||\"renderRevertControl\"in t){let a=!!this.revertDOM,s=this.revertToA,o=this.renderRevert;\"revertControls\"in t&&(a=!!t.revertControls,s=t.revertControls==\"b-to-a\"),\"renderRevertControl\"in t&&(o=t.renderRevertControl),this.setupRevertControls(a,s,o)}let r=\"highlightChanges\"in t,n=\"gutter\"in t,i=\"collapseUnchanged\"in t;if(r||n||i){let a=[],s=[];if(r||n){let o=this.a.state.facet(Fn),c=n?t.gutter!==!1:o.markGutter,l=r?t.highlightChanges!==!1:o.highlightChanges;a.push(qd.reconfigure([Fn.of({side:\"a\",sibling:()=>this.b,highlightChanges:l,markGutter:c}),c?Vd:[]])),s.push(qd.reconfigure([Fn.of({side:\"b\",sibling:()=>this.a,highlightChanges:l,markGutter:c}),c?Vd:[]]))}if(i){let o=yP.reconfigure(t.collapseUnchanged?vP(t.collapseUnchanged):[]);a.push(o),s.push(o)}this.a.dispatch({effects:a}),this.b.dispatch({effects:s})}this.scheduleMeasure()}setupRevertControls(t,r,n){this.revertToA=r,this.revertToLeft=this.revertToA==(this.editorDOM.firstChild==this.a.dom.parentNode),this.renderRevert=n,!t&&this.revertDOM?(this.revertDOM.remove(),this.revertDOM=null):t&&!this.revertDOM?(this.revertDOM=this.editorDOM.insertBefore(document.createElement(\"div\"),this.editorDOM.firstChild.nextSibling),this.revertDOM.addEventListener(\"mousedown\",i=>this.revertClicked(i)),this.revertDOM.className=\"cm-merge-revert\"):this.revertDOM&&(this.revertDOM.textContent=\"\")}scheduleMeasure(){if(this.measuring<0){let t=this.dom.ownerDocument.defaultView||window;this.measuring=t.requestAnimationFrame(()=>{this.measuring=-1,this.measure()})}}measure(){IH(this.a,this.b,this.chunks),this.revertDOM&&this.updateRevertButtons()}updateRevertButtons(){let t=this.revertDOM,r=t.firstChild,n=this.a.viewport,i=this.b.viewport;for(let a=0;a<this.chunks.length;a++){let s=this.chunks[a];if(s.fromA>n.to||s.fromB>i.to)break;if(s.fromA<n.from||s.fromB<i.from)continue;let o=this.a.lineBlockAt(s.fromA).top+\"px\";for(;r&&+r.dataset.chunk<a;)r=wP(r);r&&r.dataset.chunk==String(a)?(r.style.top!=o&&(r.style.top=o),r=r.nextSibling):t.insertBefore(this.renderRevertButton(o,a),r)}for(;r;)r=wP(r)}renderRevertButton(t,r){let n;if(this.renderRevert)n=this.renderRevert();else{n=document.createElement(\"button\");let i=this.a.state.phrase(\"Revert this chunk\");n.setAttribute(\"aria-label\",i),n.setAttribute(\"title\",i),n.textContent=this.revertToLeft?\"\\u21DC\":\"\\u21DD\"}return n.style.top=t,n.setAttribute(\"data-chunk\",String(r)),n}revertClicked(t){let r=t.target,n;for(;r&&r.parentNode!=this.revertDOM;)r=r.parentNode;if(r&&(n=this.chunks[r.dataset.chunk])){let[i,a,s,o,c,l]=this.revertToA?[this.b,this.a,n.fromB,n.toB,n.fromA,n.toA]:[this.a,this.b,n.fromA,n.toA,n.fromB,n.toB],u=i.state.sliceDoc(s,Math.max(s,o-1));s!=o&&l<=a.state.doc.length&&(u+=i.state.lineBreak),a.dispatch({changes:{from:c,to:Math.min(a.state.doc.length,l),insert:u},userEvent:\"revert\"}),t.preventDefault()}}destroy(){this.a.destroy(),this.b.destroy(),this.measuring>-1&&(this.dom.ownerDocument.defaultView||window).cancelAnimationFrame(this.measuring),this.dom.remove()}};function wP(e){let t=e.nextSibling;return e.remove(),t}var Co=require(\"@codemirror/commands\"),Kd=require(\"@codemirror/search\");var Ga=class extends To.ItemView{constructor(r,n){super(r);this.plugin=n;this.refreshing=!1;this.ignoreNextModification=!1;this.navigation=!0,this.registerEvent(this.app.workspace.on(\"obsidian-git:status-changed\",()=>{this.mergeView?this.updateRefEditors().catch(console.error):this.createMergeView().catch(console.error)})),this.intervalRef=window.setInterval(()=>{this.mergeView&&this.updateRefEditors().catch(console.error)},30*1e3),this.registerEvent(this.app.vault.on(\"modify\",i=>{this.state.bRef==null&&i.path===this.state.bFile&&(this.ignoreNextModification?this.ignoreNextModification=!1:this.updateModifiableEditor().catch(console.error))})),this.registerEvent(this.app.vault.on(\"delete\",i=>{this.state.bRef==null&&i.path===this.state.bFile&&this.createMergeView().catch(console.error)})),this.registerEvent(this.app.vault.on(\"create\",i=>{this.state.bRef==null&&i.path===this.state.bFile&&this.createMergeView().catch(console.error)})),this.registerEvent(this.app.vault.on(\"rename\",(i,a)=>{this.state.bRef==null&&(i.path===this.state.bFile||a===this.state.bFile)&&this.createMergeView().catch(console.error)})),this.fileSaveDebouncer=(0,To.debounce)(i=>{let a=this.state.bFile;a&&(this.ignoreNextModification=!0,this.plugin.app.vault.adapter.write(a,i).catch(s=>this.plugin.displayError(s)))},1e3,!1)}getViewType(){return Ai.type}getDisplayText(){var r;if(((r=this.state)==null?void 0:r.bFile)!=null){let n=this.state.bFile.split(\"/\").last();return n!=null&&n.endsWith(\".md\")&&(n=n.slice(0,-3)),`Diff: ${n}`}return Ai.name}getIcon(){return Ai.icon}async setState(r,n){this.state=r,To.Platform.isMobile&&(this.leaf.view.titleEl.textContent=this.getDisplayText()),await super.setState(r,n),await this.createMergeView()}getState(){return this.state}onClose(){return window.clearInterval(this.intervalRef),super.onClose()}async onOpen(){return await this.createMergeView(),super.onOpen()}async gitShow(r,n){try{return await this.plugin.gitManager.show(r,n,!1)}catch(i){if(i instanceof wr&&(i.message.includes(\"does not exist\")||i.message.includes(\"unknown revision or path\")||i.message.includes(\"exists on disk, but not in\")||i.message.includes(\"fatal: bad object\")))return i.message.includes(\"fatal: bad object\")&&this.plugin.displayError(i.message),\"\";throw i}}async bShouldBeEditable(){if(this.state.bRef!=null)return!1;let r=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);return await this.app.vault.adapter.exists(r)}async updateModifiableEditor(){if(!this.mergeView||this.refreshing)return;let r=this.mergeView.b;this.refreshing=!0;let n=await this.app.vault.adapter.read(this.state.bFile);if(n!=r.state.doc.toString()){let i=r.state.update({changes:{from:0,to:r.state.doc.length,insert:n},annotations:[ko.Transaction.remote.of(!0)]});r.dispatch(i)}this.refreshing=!1}async updateRefEditors(){if(!this.mergeView||this.refreshing)return;let r=this.mergeView.a,n=this.mergeView.b;this.refreshing=!0;let i=await this.gitShow(this.state.aRef,this.state.aFile),a;if(this.state.bRef!=null&&(a=await this.gitShow(this.state.bRef,this.state.bFile)),i!=r.state.doc.toString()){let s=r.state.update({changes:{from:0,to:r.state.doc.length,insert:i}});r.dispatch(s)}if(a!=null&&a!=n.state.doc.toString()){let s=n.state.update({changes:{from:0,to:n.state.doc.length,insert:a}});n.dispatch(s)}this.refreshing=!1}async createMergeView(){var r,n,i;if((r=this.state)!=null&&r.aFile&&((n=this.state)!=null&&n.bFile)&&!this.refreshing&&this.plugin.gitManager){this.refreshing=!0,(i=this.mergeView)==null||i.destroy();let a=this.containerEl.children[1];a.empty(),this.contentEl.addClass(\"git-split-diff-view\"),this.bIsEditable=await this.bShouldBeEditable();let s=await this.gitShow(this.state.aRef,this.state.aFile),o;if(this.state.bRef!=null)o=await this.gitShow(this.state.bRef,this.state.bFile);else{let p=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);await this.app.vault.adapter.exists(p)?o=await this.app.vault.adapter.read(p):o=\"\"}let c=[(0,Xr.lineNumbers)(),(0,Kd.highlightSelectionMatches)(),(0,Xr.drawSelection)(),Xr.keymap.of([...Co.standardKeymap,Co.indentWithTab]),(0,Co.history)(),(0,Kd.search)(),Xr.EditorView.lineWrapping],l=this,u=Xr.ViewPlugin.define(p=>({update(m){if(m.docChanged&&!m.transactions.some(v=>v.annotation(ko.Transaction.remote))){let v=p.state.doc.toString();l.fileSaveDebouncer(v)}}})),f={doc:s,extensions:[...c,Xr.EditorView.editable.of(!1),ko.EditorState.readOnly.of(!0)]},d=[...c];this.bIsEditable?d.push(u):d.push(Xr.EditorView.editable.of(!1),ko.EditorState.readOnly.of(!0));let h={doc:o,extensions:d};a.addClasses([\"cm-s-obsidian\",\"mod-cm6\",\"markdown-source-view\",\"cm-content\"]),this.mergeView=new Zd({b:h,a:f,diffConfig:{scanLimit:this.bIsEditable?1e3:1e4},parent:a}),this.refreshing=!1}}};var Jd=class extends Ce.Plugin{constructor(){super(...arguments);this.automaticsManager=new Xl(this);this.tools=new kc(this);this.localStorage=new fd(this);this.state={gitAction:0,offlineMode:!1};this.gitReady=!1;this.promiseQueue=new ad(this);this.intervalsToClear=[];this.lineAuthoringFeature=new id(this)}setPluginState(r){var n;this.state=Object.assign(this.state,r),(n=this.statusBar)==null||n.display()}async updateCachedStatus(){var r,n;return this.app.workspace.trigger(\"obsidian-git:loading-status\"),this.cachedStatus=await this.gitManager.status(),this.cachedStatus.conflicted.length>0?(this.localStorage.setConflict(!0),await((r=this.branchBar)==null?void 0:r.display())):(this.localStorage.setConflict(!1),await((n=this.branchBar)==null?void 0:n.display())),this.app.workspace.trigger(\"obsidian-git:status-changed\",this.cachedStatus),this.cachedStatus}async refresh(){if(!this.gitReady)return;let r=this.app.workspace.getLeavesOfType(St.type),n=this.app.workspace.getLeavesOfType($r.type);(this.settings.changedFilesInStatusBar||r.some(i=>{var a;return!((a=i.isDeferred)!=null&&a)})||n.some(i=>{var a;return!((a=i.isDeferred)!=null&&a)}))&&await this.updateCachedStatus().catch(i=>this.displayError(i)),this.app.workspace.trigger(\"obsidian-git:refreshed\")}refreshUpdatedHead(){this.lineAuthoringFeature.refreshLineAuthorViews()}async onload(){console.log(\"loading \"+this.manifest.name+\" plugin: v\"+this.manifest.version),Yl.plugin=this,this.localStorage.migrate(),await this.loadSettings(),await this.migrateSettings(),this.settingsTab=new zf(this.app,this),this.addSettingTab(this.settingsTab),this.localStorage.getPluginDisabled()||(this.registerStuff(),this.app.workspace.onLayoutReady(()=>this.init({fromReload:!1}).catch(r=>this.displayError(r))))}onExternalSettingsChange(){this.reloadSettings().catch(r=>this.displayError(r))}async reloadSettings(){let r=JSON.stringify(this.settings);await this.loadSettings();let n=JSON.stringify(this.settings);r!==n&&(this.log(\"Reloading settings\"),this.unloadPlugin(),await this.init({fromReload:!0}),this.app.workspace.getLeavesOfType(St.type).forEach(i=>{var a;if(!((a=i.isDeferred)!=null&&a))return i.view.reload()}),this.app.workspace.getLeavesOfType($r.type).forEach(i=>{var a;if(!((a=i.isDeferred)!=null&&a))return i.view.reload()}))}registerStuff(){this.registerEvent(this.app.workspace.on(\"obsidian-git:refresh\",()=>{this.refresh().catch(r=>this.displayError(r))})),this.registerEvent(this.app.workspace.on(\"obsidian-git:head-change\",()=>{this.refreshUpdatedHead()})),this.registerEvent(this.app.workspace.on(\"file-menu\",(r,n,i)=>{this.handleFileMenu(r,n,i,\"file-manu\")})),this.registerEvent(this.app.workspace.on(\"obsidian-git:menu\",(r,n,i)=>{this.handleFileMenu(r,n,i,\"obsidian-git:menu\")})),this.registerEvent(this.app.workspace.on(\"active-leaf-change\",r=>{this.onActiveLeafChange(r)})),this.registerEvent(this.app.vault.on(\"modify\",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on(\"delete\",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on(\"create\",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on(\"rename\",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerView(St.type,r=>new Ac(r,this)),this.registerView($r.type,r=>new vc(r,this)),this.registerView(ki.type,r=>new Ta(r,this)),this.registerView(Ai.type,r=>new Ga(r,this)),this.addRibbonIcon(\"git-pull-request\",\"Open Git source control\",async()=>{var i;let r=this.app.workspace.getLeavesOfType(St.type),n;r.length===0?(n=(i=this.app.workspace.getRightLeaf(!1))!=null?i:this.app.workspace.getLeaf(),await n.setViewState({type:St.type})):n=r.first(),await this.app.workspace.revealLeaf(n)}),this.registerHoverLinkSource(St.type,{display:\"Git View\",defaultMod:!0}),this.lineAuthoringFeature.onLoadPlugin(),this.setRefreshDebouncer(),lC(this)}setRefreshDebouncer(){var r;(r=this.debRefresh)==null||r.cancel(),this.debRefresh=(0,Ce.debounce)(()=>{this.settings.refreshSourceControl&&this.refresh().catch(console.error)},this.settings.refreshSourceControlTimer,!0)}async addFileToGitignore(r){return await this.app.vault.adapter.append(this.gitManager.getRelativeVaultPath(\".gitignore\"),`\n`+this.gitManager.getRelativeRepoPath(r,!0)),this.refresh()}handleFileMenu(r,n,i,a){if(!this.gitReady||!this.settings.showFileMenu||!n)return;let s;if(typeof n==\"string\"?s=n:s=n.path,i==\"file-explorer-context-menu\"&&(r.addItem(o=>{o.setTitle(\"Git: Stage\").setIcon(\"plus-circle\").setSection(\"action\").onClick(c=>{this.promiseQueue.addTask(async()=>{n instanceof Ce.TFile?await this.gitManager.stage(n.path,!0):await this.gitManager.stageAll({dir:this.gitManager.getRelativeRepoPath(s,!0)}),this.displayMessage(`Staged ${s}`)})})}),r.addItem(o=>{o.setTitle(\"Git: Unstage\").setIcon(\"minus-circle\").setSection(\"action\").onClick(c=>{this.promiseQueue.addTask(async()=>{n instanceof Ce.TFile?await this.gitManager.unstage(n.path,!0):await this.gitManager.unstageAll({dir:this.gitManager.getRelativeRepoPath(s,!0)}),this.displayMessage(`Unstaged ${s}`)})})}),r.addItem(o=>{o.setTitle(\"Git: Add to .gitignore\").setIcon(\"file-x\").setSection(\"action\").onClick(c=>{this.addFileToGitignore(s).catch(l=>this.displayError(l))})})),i==\"git-source-control\"){r.addItem(c=>{c.setTitle(\"Git: Add to .gitignore\").setIcon(\"file-x\").setSection(\"action\").onClick(l=>{this.addFileToGitignore(s).catch(u=>this.displayError(u))})});let o=this.app.vault.adapter;a===\"obsidian-git:menu\"&&o instanceof Ce.FileSystemAdapter&&(r.addItem(c=>{c.setTitle(\"Open in default app\").setIcon(\"arrow-up-right\").setSection(\"action\").onClick(l=>{this.app.openWithDefaultApp(s)})}),r.addItem(c=>{c.setTitle(\"Show in system explorer\").setIcon(\"arrow-up-right\").setSection(\"action\").onClick(l=>{window.electron.shell.showItemInFolder(OP.join(o.getBasePath(),s))})}))}}async migrateSettings(){this.settings.mergeOnPull!=null&&(this.settings.syncMethod=this.settings.mergeOnPull?\"merge\":\"rebase\",this.settings.mergeOnPull=void 0,await this.saveSettings()),this.settings.autoCommitMessage===void 0&&(this.settings.autoCommitMessage=this.settings.commitMessage,await this.saveSettings()),this.settings.gitPath!=null&&(this.localStorage.setGitPath(this.settings.gitPath),this.settings.gitPath=void 0,await this.saveSettings()),this.settings.username!=null&&(this.localStorage.setPassword(this.settings.username),this.settings.username=void 0,await this.saveSettings())}unloadPlugin(){var r,n;this.gitReady=!1,this.lineAuthoringFeature.deactivateFeature(),this.automaticsManager.unload(),(r=this.branchBar)==null||r.remove(),(n=this.statusBar)==null||n.remove(),this.gitManager.unload(),this.promiseQueue.clear();for(let i of this.intervalsToClear)window.clearInterval(i);this.intervalsToClear=[],this.debRefresh.cancel()}onunload(){this.unloadPlugin(),console.log(\"unloading \"+this.manifest.name+\" plugin\")}async loadSettings(){let r=await this.loadData();r==null&&(r={showedMobileNotice:!0}),this.settings=Ex(ar,r)}async saveSettings(){var r;(r=this.settingsTab)==null||r.beforeSaveSettings(),await this.saveData(this.settings)}get useSimpleGit(){return Ce.Platform.isDesktopApp}async init({fromReload:r=!1}){var n;if(this.settings.showStatusBar){let i=this.addStatusBarItem();this.statusBar=new sd(i,this),this.intervalsToClear.push(window.setInterval(()=>{var a;return(a=this.statusBar)==null?void 0:a.display()},1e3))}try{this.useSimpleGit?(this.gitManager=new Te(this),await this.gitManager.setGitInstance()):this.gitManager=new an(this);let i=await this.gitManager.checkRequirements();switch(i){case\"missing-git\":this.displayError(`Cannot run git command. Trying to run: '${this.localStorage.getGitPath()||\"git\"}' .`);break;case\"missing-repo\":new Ce.Notice(\"Can't find a valid git repository. Please create one via the given command or clone an existing repo.\",1e4);break;case\"valid\":if(this.gitReady=!0,this.setPluginState({gitAction:0}),Ce.Platform.isDesktop&&this.settings.showBranchStatusBar){let a=this.addStatusBarItem();this.branchBar=new Ud(a,this),this.intervalsToClear.push(window.setInterval(()=>{var s;return void((s=this.branchBar)==null?void 0:s.display().catch(console.error))},6e4))}await((n=this.branchBar)==null?void 0:n.display()),this.lineAuthoringFeature.conditionallyActivateBySettings(),this.app.workspace.trigger(\"obsidian-git:refresh\"),this.app.workspace.trigger(\"obsidian-git:head-change\"),!r&&this.settings.autoPullOnBoot&&this.promiseQueue.addTask(()=>this.pullChangesFromRemote()),await this.automaticsManager.init();break;default:this.log(\"Something weird happened. The 'checkRequirements' result is \"+i)}}catch(i){this.displayError(i),console.error(i)}}async createNewRepo(){try{await this.gitManager.init(),new Ce.Notice(\"Initialized new repo\"),await this.init({fromReload:!0})}catch(r){this.displayError(r)}}async cloneNewRepo(){let n=await new Fe(this,{placeholder:\"Enter remote URL\"}).openAndGetResult();if(n){let i=\"Vault Root\",a=await new Fe(this,{options:this.gitManager instanceof an?[i]:[],placeholder:\"Enter directory for clone. It needs to be empty or not existent.\",allowEmpty:this.gitManager instanceof an}).openAndGetResult();if(a==null)return;if(a===i&&(a=\".\"),a=(0,Ce.normalizePath)(a),a===\"/\"&&(a=\".\"),a===\".\"){let f=await new Fe(this,{options:[\"NO\",\"YES\"],placeholder:`Does your remote repo contain a ${this.app.vault.configDir} directory at the root?`,onlySelection:!0}).openAndGetResult();if(f===void 0){new Ce.Notice(\"Aborted clone\");return}else if(f===\"YES\"){let d=\"DELETE ALL YOUR LOCAL CONFIG AND PLUGINS\";if(await new Fe(this,{options:[\"Abort clone\",d],placeholder:`To avoid conflicts, the local ${this.app.vault.configDir} directory needs to be deleted.`,onlySelection:!0}).openAndGetResult()===d)await this.app.vault.adapter.rmdir(this.app.vault.configDir,!0);else{new Ce.Notice(\"Aborted clone\");return}}}let s=await new Fe(this,{placeholder:\"Specify depth of clone. Leave empty for full clone.\",allowEmpty:!0}).openAndGetResult(),o;if(s!==\"\"&&(o=parseInt(s),isNaN(o))){new Ce.Notice(\"Invalid depth. Aborting clone.\");return}new Ce.Notice(`Cloning new repo into \"${a}\"`);let c=this.settings.basePath,l=a&&a!==\".\";l&&(this.settings.basePath=a);try{await this.gitManager.clone(Vg(n),a,o),new Ce.Notice(\"Cloned new repo.\"),new Ce.Notice(\"Please restart Obsidian\"),l&&await this.saveSettings()}catch(u){this.displayError(u),this.settings.basePath=c,await this.saveSettings()}}}async isAllInitialized(){return this.gitReady||await this.init({fromReload:!0}),this.gitReady}async pullChangesFromRemote(){if(!await this.isAllInitialized())return;let r=await this.pull();if(r!==!1){if(r||this.displayMessage(\"Pull: Everything is up-to-date\"),this.gitManager instanceof Te){let n=await this.updateCachedStatus();n.conflicted.length>0&&(this.displayError(`You have conflicts in ${n.conflicted.length} ${n.conflicted.length==1?\"file\":\"files\"}`),await this.handleConflict(n.conflicted))}this.app.workspace.trigger(\"obsidian-git:refresh\"),this.setPluginState({gitAction:0})}}async commitAndSync(r,n=!1,i){!await this.isAllInitialized()||(this.settings.syncMethod==\"reset\"&&this.settings.pullBeforePush&&await this.pull(),!await this.commit({fromAuto:r,requestCustomMessage:n,commitMessage:i}))||(this.settings.syncMethod!=\"reset\"&&this.settings.pullBeforePush&&await this.pull(),this.settings.disablePush||(await this.remotesAreSet()&&await this.gitManager.canPush()?await this.push():this.displayMessage(\"No commits to push\")),this.setPluginState({gitAction:0}))}async commit({fromAuto:r,requestCustomMessage:n=!1,onlyStaged:i=!1,commitMessage:a,amend:s=!1}){if(!await this.isAllInitialized())return!1;try{let o=this.localStorage.getConflict(),c,l,u;if(this.gitManager instanceof Te){if(await this.mayDeleteConflictFile(),l=await this.updateCachedStatus(),l.conflicted.length==0&&(o=!1),r&&l.conflicted.length>0)return this.displayError(`Did not commit, because you have conflicts in ${l.conflicted.length} ${l.conflicted.length==1?\"file\":\"files\"}. Please resolve them and commit per command.`),await this.handleConflict(l.conflicted),!1;c=[...l.changed,...l.staged]}else{if(r&&o)return this.displayError(\"Did not commit, because you have conflicts. Please resolve them and commit per command.\"),!1;if(o)await this.mayDeleteConflictFile(),l=await this.updateCachedStatus(),c=[...l.changed,...l.staged];else{let f=this.gitManager;i?c=await f.getStagedFiles():(u=await f.getUnstagedFiles(),c=u.map(({path:d})=>({vaultPath:this.gitManager.getRelativeVaultPath(d),path:d})))}}if(await this.tools.hasTooBigFiles(c))return this.setPluginState({gitAction:0}),!1;if(c.length!==0||o){let f=a!=null?a:a=r?this.settings.autoCommitMessage:this.settings.commitMessage;if(r&&this.settings.customMessageOnAutoBackup||n){!this.settings.disablePopups&&r&&new Ce.Notice(\"Auto backup: Please enter a custom commit message. Leave empty to abort\");let p=await new od(this).openAndGetResult();if(p!=null&&p!=\"\"&&p!=\"...\")f=p;else return this.setPluginState({gitAction:0}),!1}let d;i?d=await this.gitManager.commit({message:f,amend:s}):d=await this.gitManager.commitAll({message:f,status:l,unstagedFiles:u,amend:s}),this.gitManager instanceof Te&&await this.updateCachedStatus();let h=!1;d===void 0&&(h=!0,d=c.length),this.displayMessage(`Committed${h?\" approx.\":\"\"} ${d} ${d==1?\"file\":\"files\"}`)}else this.displayMessage(\"No changes to commit\");return this.app.workspace.trigger(\"obsidian-git:refresh\"),!0}catch(o){return this.displayError(o),!1}}async push(){if(!await this.isAllInitialized()||!await this.remotesAreSet())return!1;let r=this.localStorage.getConflict();try{this.gitManager instanceof Te&&await this.mayDeleteConflictFile();let n;if(this.gitManager instanceof Te&&(n=await this.updateCachedStatus()).conflicted.length>0)return this.displayError(`Cannot push. You have conflicts in ${n.conflicted.length} ${n.conflicted.length==1?\"file\":\"files\"}`),await this.handleConflict(n.conflicted),!1;if(this.gitManager instanceof an&&r)return this.displayError(\"Cannot push. You have conflicts\"),!1;this.log(\"Pushing....\");let i=await this.gitManager.push();return i!==void 0&&(i>0?this.displayMessage(`Pushed ${i} ${i==1?\"file\":\"files\"} to remote`):this.displayMessage(\"No commits to push\")),this.setPluginState({offlineMode:!1}),this.app.workspace.trigger(\"obsidian-git:refresh\"),!0}catch(n){return n instanceof Is?this.handleNoNetworkError(n):this.displayError(n),!1}}async pull(){if(!await this.remotesAreSet())return!1;try{this.log(\"Pulling....\");let r=await this.gitManager.pull()||[];return this.setPluginState({offlineMode:!1}),r.length>0&&(this.displayMessage(`Pulled ${r.length} ${r.length==1?\"file\":\"files\"} from remote`),this.lastPulledFiles=r),r.length}catch(r){return this.displayError(r),!1}}async fetch(){if(await this.remotesAreSet())try{await this.gitManager.fetch(),this.displayMessage(\"Fetched from remote\"),this.setPluginState({offlineMode:!1}),this.app.workspace.trigger(\"obsidian-git:refresh\")}catch(r){this.displayError(r)}}async mayDeleteConflictFile(){let r=this.app.vault.getAbstractFileByPath(Ms);r&&(this.app.workspace.iterateAllLeaves(n=>{var i;n.view instanceof Ce.MarkdownView&&((i=n.view.file)==null?void 0:i.path)==r.path&&n.detach()}),await this.app.vault.delete(r))}async stageFile(r){return await this.isAllInitialized()?(await this.gitManager.stage(r.path,!0),this.displayMessage(`Staged ${r.path}`),this.app.workspace.trigger(\"obsidian-git:refresh\"),this.setPluginState({gitAction:0}),!0):!1}async unstageFile(r){return await this.isAllInitialized()?(await this.gitManager.unstage(r.path,!0),this.displayMessage(`Unstaged ${r.path}`),this.app.workspace.trigger(\"obsidian-git:refresh\"),this.setPluginState({gitAction:0}),!0):!1}async switchBranch(){var i;if(!await this.isAllInitialized())return;let r=await this.gitManager.branchInfo(),n=await new Hd(this,r.branches).openAndGetReslt();if(n!=null)return await this.gitManager.checkout(n),this.displayMessage(`Switched to ${n}`),this.app.workspace.trigger(\"obsidian-git:refresh\"),await((i=this.branchBar)==null?void 0:i.display()),n}async switchRemoteBranch(){var a;if(!await this.isAllInitialized())return;let r=await this.selectRemoteBranch()||\"\",[n,i]=Ii(r);if(i!=null&&n!=null)return await this.gitManager.checkout(i,n),this.displayMessage(`Switched to ${r}`),await((a=this.branchBar)==null?void 0:a.display()),r}async createBranch(){var n;if(!await this.isAllInitialized())return;let r=await new Fe(this,{placeholder:\"Create new branch\"}).openAndGetResult();if(r!=null)return await this.gitManager.createBranch(r),this.displayMessage(`Created new branch ${r}`),await((n=this.branchBar)==null?void 0:n.display()),r}async deleteBranch(){var i;if(!await this.isAllInitialized())return;let r=await this.gitManager.branchInfo();r.current&&r.branches.remove(r.current);let n=await new Fe(this,{options:r.branches,placeholder:\"Delete branch\",onlySelection:!0}).openAndGetResult();if(n!=null){let a=!1;if(!await this.gitManager.branchIsMerged(n)){let o=await new Fe(this,{options:[\"YES\",\"NO\"],placeholder:\"This branch isn't merged into HEAD. Force delete?\",onlySelection:!0}).openAndGetResult();if(o!==\"YES\")return;a=o===\"YES\"}return await this.gitManager.deleteBranch(n,a),this.displayMessage(`Deleted branch ${n}`),await((i=this.branchBar)==null?void 0:i.display()),n}}async remotesAreSet(){return this.settings.updateSubmodules||(await this.gitManager.branchInfo()).tracking?!0:(new Ce.Notice(\"No upstream branch is set. Please select one.\"),await this.setUpstreamBranch())}async setUpstreamBranch(){let r=await this.selectRemoteBranch();return r==null?(this.displayError(\"Aborted. No upstream-branch is set!\",1e4),this.setPluginState({gitAction:0}),!1):(await this.gitManager.updateUpstreamBranch(r),this.displayMessage(`Set upstream branch to ${r}`),this.setPluginState({gitAction:0}),!0)}async discardAll(){await this.gitManager.discardAll({status:this.cachedStatus}),new Ce.Notice(\"All local changes have been discarded. New files remain untouched.\"),this.app.workspace.trigger(\"obsidian-git:refresh\")}async handleConflict(r){this.localStorage.setConflict(!0);let n;r!==void 0&&(n=[\"# Conflicts\",\"Please resolve them and commit them using the commands `Git: Commit all changes` followed by `Git: Push`\",\"(This file will automatically be deleted before commit)\",\"[[#Additional Instructions]] available below file list\",\"\",...r.map(i=>{let a=this.app.vault.getAbstractFileByPath(i);return a instanceof Ce.TFile?`- [[${this.app.metadataCache.fileToLinktext(a,\"/\")}]]`:`- Not a file: ${i}`}),`\n# Additional Instructions\nI strongly recommend to use \"Source mode\" for viewing the conflicted files. For simple conflicts, in each file listed above replace every occurrence of the following text blocks with the desired text.\n\n\\`\\`\\`diff\n<<<<<<< HEAD\n    File changes in local repository\n=======\n    File changes in remote repository\n>>>>>>> origin/main\n\\`\\`\\``]),await this.tools.writeAndOpenFile(n==null?void 0:n.join(`\n`))}async editRemotes(){if(!await this.isAllInitialized())return;let r=await this.gitManager.getRemotes(),i=await new Fe(this,{options:r,placeholder:\"Select or create a new remote by typing its name and selecting it\"}).openAndGetResult();if(i){let a=await this.gitManager.getRemoteUrl(i),o=await new Fe(this,{initialValue:a}).openAndGetResult();if(o)return await this.gitManager.setRemote(i,Vg(o)),i}}async selectRemoteBranch(){let r=await this.gitManager.getRemotes(),n;r.length===0&&(n=await this.editRemotes(),n==null&&(r=await this.gitManager.getRemotes()));let i=new Fe(this,{options:r,placeholder:\"Select or create a new remote by typing its name and selecting it\"}),a=n!=null?n:await i.openAndGetResult();if(a){this.displayMessage(\"Fetching remote branches\"),await this.gitManager.fetch(a);let s=await this.gitManager.getRemoteBranches(a);return await new Fe(this,{options:s,placeholder:\"Select or create a new remote branch by typing its name and selecting it\"}).openAndGetResult()}}async removeRemote(){if(!await this.isAllInitialized())return;let r=await this.gitManager.getRemotes(),i=await new Fe(this,{options:r,placeholder:\"Select a remote\"}).openAndGetResult();i&&await this.gitManager.removeRemote(i)}onActiveLeafChange(r){var s,o;let n=r==null?void 0:r.view;if(!(n!=null&&n.getState().file)&&!(n instanceof Ta||n instanceof Ga))return;let i=this.app.workspace.getLeavesOfType(St.type).first(),a=this.app.workspace.getLeavesOfType($r.type).first();if((s=i==null?void 0:i.view.containerEl.querySelector(\"div.nav-file-title.is-active\"))==null||s.removeClass(\"is-active\"),(o=a==null?void 0:a.view.containerEl.querySelector(\"div.nav-file-title.is-active\"))==null||o.removeClass(\"is-active\"),(r==null?void 0:r.view)instanceof Ta||(r==null?void 0:r.view)instanceof Ga){let c=r.view.state.bFile;this.lastDiffViewState=r.view.getState();let l;i&&r.view.state.aRef==\"HEAD\"?l=i.view.containerEl.querySelector(`div.staged div.nav-file-title[data-path='${c}']`):i&&r.view.state.aRef==\"\"?l=i.view.containerEl.querySelector(`div.changes div.nav-file-title[data-path='${c}']`):a&&(l=a.view.containerEl.querySelector(`div.nav-file-title[data-path='${c}']`)),l==null||l.addClass(\"is-active\")}else this.lastDiffViewState=void 0}handleNoNetworkError(r){this.state.offlineMode?this.log(\"Encountered network error, but already in offline mode\"):this.displayError(\"Git: Going into offline mode. Future network errors will no longer be displayed.\",2e3),this.setPluginState({gitAction:0,offlineMode:!0})}displayMessage(r,n=4*1e3){var i;(i=this.statusBar)==null||i.displayMessage(r.toLowerCase(),n),this.settings.disablePopups||(!this.settings.disablePopupsForNoChanges||!r.startsWith(\"No changes\"))&&new Ce.Notice(r,5*1e3),this.log(r)}displayError(r,n=10*1e3){var a;if(r instanceof gl.UserCanceledError){new Ce.Notice(\"Aborted\");return}let i;r instanceof Error?i=r:i=new Error(String(r)),this.setPluginState({gitAction:0}),new Ce.Notice(i.message,n),console.error(`${this.manifest.id}:`,i.stack),(a=this.statusBar)==null||a.displayMessage(i.message.toLowerCase(),n)}log(...r){console.log(`${this.manifest.id}:`,...r)}};\n/*! Bundled license information:\n\nieee754/index.js:\n  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)\n\nbuffer/index.js:\n  (*!\n   * The buffer module from node.js, for the browser.\n   *\n   * @author   Feross Aboukhadijeh <https://feross.org>\n   * @license  MIT\n   *)\n\nsafe-buffer/index.js:\n  (*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)\n\ncrc-32/crc32.js:\n  (*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com *)\n\njs-sha256/src/sha256.js:\n  (**\n   * [js-sha256]{@link https://github.com/emn178/js-sha256}\n   *\n   * @version 0.9.0\n   * @author Chen, Yi-Cyuan [emn178@gmail.com]\n   * @copyright Chen, Yi-Cyuan 2014-2017\n   * @license MIT\n   *)\n\nfeather-icons/dist/feather.js:\n  (*!\n    Copyright (c) 2016 Jed Watson.\n    Licensed under the MIT License (MIT), see\n    http://jedwatson.github.io/classnames\n  *)\n*/\n\n/* nosourcemap */"
  },
  {
    "path": ".obsidian/plugins/obsidian-git/lang/state.json",
    "content": "{\"type\":\"0\",\"state\":true,\"pluginVersion\":\"2.32.1\",\"translationVersion\":1731497952199}\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-git/lang/zh-cn.json",
    "content": "{\n    \"manifest\": {\n        \"translationVersion\": 1731497952199,\n        \"pluginVersion\": \"2.28.2\"\n    },\n    \"description\": {\n        \"original\": \"Integrate Git version control with automatic backup and other advanced features.\",\n        \"translation\": \"集成 Git 版本控制,具有自动备份和其他高级功能。\"\n    },\n    \"dict\": {\n        \"Notice(\\\"ObsidianGit: Base path does not exist\\\")\": \"Notice(\\\"ObsidianGit: 基础路径不存在\\\")\",\n        \"Notice(\\\"Authentication failed. Please try with different credentials\\\")\": \"Notice(\\\"验证失败。请尝试使用不同的凭据\\\")\",\n        \"Notice(\\\"This takes longer: Getting status\\\",this.noticeLength)\": \"Notice(\\\"这需要较长的时间:获取状态\\\",this.noticeLength)\",\n        \"Notice(\\\"Initializing pull\\\")\": \"Notice(\\\"初始化拉取\\\")\",\n        \"Notice(\\\"Finished pull\\\",!1)\": \"Notice(\\\"完成拉取\\\",!1)\",\n        \"Notice(\\\"Initializing push\\\")\": \"Notice(\\\"初始化推送\\\")\",\n        \"Notice(\\\"Initializing clone\\\")\": \"Notice(\\\"初始化克隆\\\")\",\n        \"Notice(\\\"Initializing fetch\\\")\": \"Notice(\\\"初始化获取\\\")\",\n        \"Notice(\\\"Please specify a valid number.\\\")\": \"Notice(\\\"请指定一个有效的数字。\\\")\",\n        \"Notice(`Automatic ${i} enabled! Every ${$s(r.settings.autoSaveInterval)\": \"Notice(`自动${i}已启用！每隔${$s(r.settings.autoSaveInterval)\",\n        \"Notice(`Automatic ${i} disabled!`)\": \"Notice(`自动${i}已禁用！`)\",\n        \"Notice(`Automatic push enabled! Every ${$s(r.settings.autoPushInterval)\": \"Notice(`自动推送已启用！每隔${$s(r.settings.autoPushInterval)\",\n        \"Notice(\\\"Automatic push disabled!\\\")\": \"Notice(\\\"自动推送已禁用！\\\")\",\n        \"Notice(`Automatic pull enabled! Every ${$s(r.settings.autoPullInterval)\": \"Notice(`自动拉取已启用！每隔${$s(r.settings.autoPullInterval)\",\n        \"Notice(\\\"Automatic pull disabled!\\\")\": \"Notice(\\\"自动拉取已禁用！\\\")\",\n        \"Notice(\\\"Obsidian must be restarted for the changes to take affect.\\\")\": \"Notice(\\\"Obsidian 必须重新启动以使更改生效。\\\")\",\n        \"Notice(\\\"Debug information copied to clipboard. May contain sensitive information!\\\")\": \"Notice(\\\"调试信息已复制到剪贴板。可能包含敏感信息！\\\")\",\n        \"Notice(\\\"It seems like you are not using GitHub\\\")\": \"Notice(\\\"您似乎没有使用 GitHub\\\")\",\n        \"Notice(\\\"Successfully deleted repository. Reloading plugin...\\\")\": \"Notice(\\\"成功删除了仓库。正在重新加载插件...\\\")\",\n        \"Notice(\\\"No repository found\\\")\": \"Notice(\\\"未找到仓库\\\")\",\n        \"Notice(\\\"Can't find a valid git repository. Please create one via the given command or clone an existing repo.\\\",1e4)\": \"Notice(\\\"无法找到有效的 Git 仓库。请通过给定的命令创建一个,或克隆一个现有的仓库。\\\",1e4)\",\n        \"Notice(\\\"Initialized new repo\\\")\": \"Notice(\\\"初始化新仓库\\\")\",\n        \"Notice(\\\"Aborted clone\\\")\": \"Notice(\\\"已终止克隆 clone\\\")\",\n        \"Notice(\\\"Invalid depth. Aborting clone.\\\")\": \"Notice(\\\"无效的深度。中止克隆。\\\")\",\n        \"Notice(`Cloning new repo into \\\"${a}\\\"`)\": \"Notice(`将新的仓库克隆到 \\\"${a}\\\"`)\",\n        \"Notice(\\\"Cloned new repo.\\\")\": \"Notice(\\\"克隆了新的仓库。\\\")\",\n        \"Notice(\\\"Please restart Obsidian\\\")\": \"Notice(\\\"请重启 Obsidian\\\")\",\n        \"Notice(\\\"Auto backup: Please enter a custom commit message. Leave empty to abort\\\")\": \"Notice(\\\"自动备份:请输入自定义提交信息。留空以中止\\\")\",\n        \"Notice(\\\"No upstream branch is set. Please select one.\\\")\": \"Notice(\\\"没有设置上游分支。请选择一个。\\\")\",\n        \"Notice(\\\"All local changes have been discarded. New files remain untouched.\\\")\": \"Notice(\\\"所有本地更改已被丢弃。新文件保持不变。\\\")\",\n        \"Notice(\\\"Aborted\\\")\": \"Notice(\\\"中止\\\")\",\n        \".log(`Did not delete ${y} because directory is not empty`)\": \".log(`未删除 ${y},因为目录不为空`)\",\n        \".log(\\\"No tracking branch found. Ignoring pull of main repo and updating submodules only.\\\")\": \".log(\\\"未找到跟踪分支。将忽略主仓库的拉取,仅更新子模块。\\\")\",\n        \".log(\\\"No tracking branch found. Ignoring push of main repo and updating submodules only.\\\")\": \".log(\\\"未找到跟踪分支。将忽略主仓库的推送,仅更新子模块。\\\")\",\n        \".log(\\\"Something weird happened:\\\")\": \".log(\\\"奇怪的事情发生了:\\\")\",\n        \".log(this.plg.manifest.name+\\\": Enabled line authoring.\\\")\": \".log(this.plg.manifest.name+\\\": 启用行作者功能。\\\")\",\n        \".log(this.plg.manifest.name+\\\": Disabled line authoring.\\\")\": \".log(this.plg.manifest.name+\\\": 禁用行作者功能。\\\")\",\n        \".log(\\\"loading \\\"+this.manifest.name+\\\" plugin: v\\\"+this.manifest.version)\": \".log(\\\"加载 \\\"+this.manifest.name+\\\" 插件:v\\\"+this.manifest.version)\",\n        \".log(\\\"Reloading settings\\\")\": \".log(\\\"重新加载设置\\\")\",\n        \".log(\\\"unloading \\\"+this.manifest.name+\\\" plugin\\\")\": \".log(\\\"卸载 \\\"+this.manifest.name+\\\" 插件\\\")\",\n        \".log(\\\"Something weird happened. The 'checkRequirements' result is \\\"+i)\": \".log(\\\"发生了奇怪的事情。“checkRequirements”结果是 \\\"+i)\",\n        \".log(\\\"Pushing....\\\")\": \".log(\\\"推送中....\\\")\",\n        \".log(\\\"Pulling....\\\")\": \".log(\\\"拉取中....\\\")\",\n        \".log(\\\"Encountered network error, but already in offline mode\\\")\": \".log(\\\"遇到网络错误,但已在离线模式\\\")\",\n        \".error(\\\"This browser lacks typed array (Uint8Array)\": \".error(\\\"此浏览器缺少类型化数组 (Uint8Array))\",\n        \".error(\\\"Failed to parse lines, starting in 0!\\\")\": \".error(\\\"解析行失败,从 0 开始！\\\")\",\n        \".error(\\\"Unknown state reached while processing groups of lines\\\",a,s,o)\": \".error(\\\"未知状态在处理行组时达到\\\",a,s,o)\",\n        \"name:\\\"\\\",email:\\\"\": \"name:\\\"\\\",邮件:\\\"\",\n        \"name:\\\"Source Control\\\"\": \"name:\\\"源代码管理\\\"\",\n        \"name:\\\"History\\\"\": \"name:\\\"历史记录\\\"\",\n        \"name:\\\"Diff View\\\"\": \"name:\\\"差异视图\\\"\",\n        \"name:\\\"Edit .gitignore\\\"\": \"name:\\\"编辑 .gitignore\\\"\",\n        \"name:\\\"Open source control view\\\"\": \"name:\\\"打开源代码管理视图\\\"\",\n        \"name:\\\"Open history view\\\"\": \"name:\\\"打开历史记录视图\\\"\",\n        \"name:\\\"Open diff view\\\"\": \"name:\\\"打开差异视图\\\"\",\n        \"name:\\\"Open file on GitHub\\\"\": \"name:\\\"在 GitHub 上打开文件\\\"\",\n        \"name:\\\"Open file history on GitHub\\\"\": \"name:\\\"在 GitHub 上查看文件历史\\\"\",\n        \"name:\\\"Pull\\\"\": \"name:\\\"拉取\\\"\",\n        \"name:\\\"Fetch\\\"\": \"name:\\\"获取\\\"\",\n        \"name:\\\"Switch to remote branch\\\"\": \"name:\\\"切换到远程分支\\\"\",\n        \"name:\\\"Add file to gitignore\\\"\": \"name:\\\"将文件添加到 .gitignore\\\"\",\n        \"name:\\\"Commit-and-sync\\\"\": \"name:\\\"提交并同步\\\"\",\n        \"name:\\\"Commit-and-sync and then close Obsidian\\\"\": \"name:\\\"提交并同步，然后关闭 Obsidian\\\"\",\n        \"name:\\\"Commit-and-sync with specific message\\\"\": \"name:\\\"提交并同步，使用特定消息\\\"\",\n        \"name:\\\"Commit all changes\\\"\": \"name:\\\"提交所有更改\\\"\",\n        \"name:\\\"Commit all changes with specific message\\\"\": \"name:\\\"使用特定消息提交所有更改\\\"\",\n        \"name:\\\"Commit staged\\\"\": \"name:\\\"提交暂存文件\\\"\",\n        \"name:\\\"Amend staged\\\"\": \"name:\\\"修改暂存文件\\\"\",\n        \"name:\\\"Commit staged with specific message\\\"\": \"name:\\\"使用特定消息提交暂存文件\\\"\",\n        \"name:\\\"Push\\\"\": \"name:\\\"推送\\\"\",\n        \"name:\\\"Stage current file\\\"\": \"name:\\\"暂存当前文件\\\"\",\n        \"name:\\\"Unstage current file\\\"\": \"name:\\\"取消暂存当前文件\\\"\",\n        \"name:\\\"Edit remotes\\\"\": \"name:\\\"编辑远程仓库\\\"\",\n        \"name:\\\"Remove remote\\\"\": \"name:\\\"移除远程仓库\\\"\",\n        \"name:\\\"Set upstream branch\\\"\": \"name:\\\"设置上游分支\\\"\",\n        \"name:\\\"CAUTION: Delete repository\\\"\": \"name:\\\"警告：删除仓库\\\"\",\n        \"name:\\\"Initialize a new repo\\\"\": \"name:\\\"初始化新仓库\\\"\",\n        \"name:\\\"Clone an existing remote repo\\\"\": \"name:\\\"克隆现有的远程仓库\\\"\",\n        \"name:\\\"List changed files\\\"\": \"name:\\\"列出已更改的文件\\\"\",\n        \"name:\\\"Switch branch\\\"\": \"name:\\\"切换分支\\\"\",\n        \"name:\\\"Create new branch\\\"\": \"name:\\\"创建新分支\\\"\",\n        \"name:\\\"Delete branch\\\"\": \"name:\\\"删除分支\\\"\",\n        \"name:\\\"CAUTION: Discard all changes\\\"\": \"name:\\\"警告：放弃所有更改\\\"\",\n        \"name:\\\"Toggle line author information\\\"\": \"name:\\\"切换行作者信息\\\"\",\n        \"name:\\\"fileIcon\\\"\": \"name:\\\"文件图标\\\"\",\n        \"name:\\\"fileTag\\\"\": \"name:\\\"文件标签\\\"\",\n        \"name:\\\"Commit Amend\\\"\": \"name:\\\"提交修改\\\"\",\n        \"description:`${st} '${Nr(he)}' of ${C}`\": \"description:`${st} '${Nr(he)}' 的 ${C}`\",\n        \"text:\\\"Git is not ready. When all settings are correct you can configure commit-sync, etc.\\\"\": \"text:\\\"Git还没有准备好。当所有设置都正确时,您可以配置提交同步等。\\\"\",\n        \"text:\\\"Save\\\"\": \"text:\\\"保存\\\"\",\n        \"text:\\\"File not found: \\\"\": \"text:\\\"文件未找到:\\\"\",\n        \"text:\\\"Cancel\\\"\": \"text:\\\"取消\\\"\",\n        \".setText(\\\"Copy Debug Information\\\")\": \".setText(\\\"复制调试信息\\\")\",\n        \".setText(`Debugging and logging:\\nYou can always see the logs of this and every other plugin by opening the console with`)\": \".setText(`调试和日志记录:\\n使用以下命令打开控制台,即可查看本插件和其他所有插件的日志`)\",\n        \".setText(\\\"Edit .gitignore\\\")\": \".setText(\\\"编辑 .gitignore\\\")\",\n        \".setText(`${this.deletion?\\\"Delete\\\":\\\"Discard\\\"} this file?`)\": \".setText(`${this.deletion?\\\"删除\\\":\\\"放弃\\\"} 这个文件？`)\",\n        \".setText(`Do you really want to ${this.deletion?\\\"delete\\\":\\\"discard the changes of\\\"} \\\"${this.filename}\\\"`)\": \".setText(`你真的想 ${this.deletion?\\\"删除\\\":\\\"放弃更改\\\"} \\\"${this.filename}\\\" 吗？`)\",\n        \".setButtonText(\\\"Preview\\\")\": \".setButtonText(\\\"预览\\\")\",\n        \".setButtonText(\\\"Reload\\\")\": \".setButtonText(\\\"重新加载\\\")\",\n        \".setName(\\\"Automatic\\\")\": \".setName(\\\"自动\\\")\",\n        \".setName(\\\"Split timers for automatic commit and sync\\\")\": \".setName(\\\"用于自动提交和同步的分割计时器\\\")\",\n        \".setName(`Auto ${i} interval (minutes)`)\": \".setName(`自动${i}间隔(分钟)`)\",\n        \".setName(`Auto ${i} after stopping file edits`)\": \".setName(`在停止文件编辑后自动 ${i} `)\",\n        \".setName(`Auto ${i} after latest commit`)\": \".setName(`在最新提交后自动 ${i} `)\",\n        \".setName(\\\"Auto push interval (minutes)\\\")\": \".setName(\\\"自动推送间隔(分钟)\\\")\",\n        \".setName(\\\"Auto pull interval (minutes)\\\")\": \".setName(\\\"自动拉取间隔(分钟)\\\")\",\n        \".setName(`Specify custom commit message on auto ${i}`)\": \".setName(`在自动 ${i} 中指定自定义提交消息`)\",\n        \".setName(`Commit message on auto ${i}`)\": \".setName(`自动 ${i} 的提交信息`)\",\n        \".setName(\\\"Commit message\\\")\": \".setName(\\\"提交信息\\\")\",\n        \".setName(\\\"Commit message on manual commit\\\")\": \".setName(\\\"手动提交时的提交信息\\\")\",\n        \".setName(\\\"{{date}} placeholder format\\\")\": \".setName(\\\"{{date}} 占位符格式\\\")\",\n        \".setName(\\\"{{hostname}} placeholder replacement\\\")\": \".setName(\\\"{{hostname}} 占位符替换\\\")\",\n        \".setName(\\\"Preview commit message\\\")\": \".setName(\\\"预览提交信息\\\")\",\n        \".setName(\\\"List filenames affected by commit in the commit body\\\")\": \".setName(\\\"在提交内容中列出受提交影响的文件名\\\")\",\n        \".setName(\\\"Pull\\\")\": \".setName(\\\"拉取\\\")\",\n        \".setName(\\\"Merge strategy\\\")\": \".setName(\\\"合并策略\\\")\",\n        \".setName(\\\"Pull on startup\\\")\": \".setName(\\\"开机时拉取\\\")\",\n        \".setName(\\\"Commit-and-sync\\\")\": \".setName(\\\"提交并同步\\\")\",\n        \".setName(\\\"Push on commit-and-sync\\\")\": \".setName(\\\"提交并同步时推送到远程仓库\\\")\",\n        \".setName(\\\"Pull on commit-and-sync\\\")\": \".setName(\\\"提交并同步时从远程仓库拉取\\\")\",\n        \".setName(\\\"Line author information\\\")\": \".setName(\\\"线路作者信息\\\")\",\n        \".setName(\\\"History view\\\")\": \".setName(\\\"历史视图\\\")\",\n        \".setName(\\\"Show Author\\\")\": \".setName(\\\"显示作者\\\")\",\n        \".setName(\\\"Show Date\\\")\": \".setName(\\\"显示日期\\\")\",\n        \".setName(\\\"Source control view\\\")\": \".setName(\\\"源控制视图\\\")\",\n        \".setName(\\\"Automatically refresh source control view on file changes\\\")\": \".setName(\\\"自动刷新文件更改的源控制视图\\\")\",\n        \".setName(\\\"Source control view refresh interval\\\")\": \".setName(\\\"源控制视图刷新间隔\\\")\",\n        \".setName(\\\"Miscellaneous\\\")\": \".setName(\\\"杂项\\\")\",\n        \".setName(\\\"Disable notifications\\\")\": \".setName(\\\"禁用通知\\\")\",\n        \".setName(\\\"Hide notifications for no changes\\\")\": \".setName(\\\"隐藏无更改的通知\\\")\",\n        \".setName(\\\"Show status bar\\\")\": \".setName(\\\"显示状态栏\\\")\",\n        \".setName(\\\"Show stage/unstage button in file menu\\\")\": \".setName(\\\"显示文件菜单中的暂存/取消暂存按钮\\\")\",\n        \".setName(\\\"Show branch status bar\\\")\": \".setName(\\\"显示分支状态栏\\\")\",\n        \".setName(\\\"Show the count of modified files in the status bar\\\")\": \".setName(\\\"显示状态栏中修改文件的数量\\\")\",\n        \".setName(\\\"Authentication/commit author\\\")\": \".setName(\\\"身份验证/提交作者\\\")\",\n        \".setName(\\\"Commit author\\\")\": \".setName(\\\"提交作者\\\")\",\n        \".setName(\\\"Username on your git server. E.g. your username on GitHub\\\")\": \".setName(\\\"在你的 Git 服务器上的用户名。例如:你在 GitHub 上的用户名\\\")\",\n        \".setName(\\\"Password/Personal access token\\\")\": \".setName(\\\"密码/个人访问令牌\\\")\",\n        \".setName(\\\"Author name for commit\\\")\": \".setName(\\\"提交的作者名称\\\")\",\n        \".setName(\\\"Author email for commit\\\")\": \".setName(\\\"提交作者的电子邮件\\\")\",\n        \".setName(\\\"Advanced\\\")\": \".setName(\\\"高级\\\")\",\n        \".setName(\\\"Update submodules\\\")\": \".setName(\\\"更新子模块\\\")\",\n        \".setName(\\\"Submodule recurse checkout/switch\\\")\": \".setName(\\\"子模块递归检出/切换\\\")\",\n        \".setName(\\\"Custom Git binary path\\\")\": \".setName(\\\"自定义 Git 二进制文件路径\\\")\",\n        \".setName(\\\"Additional environment variables\\\")\": \".setName(\\\"额外的环境变量\\\")\",\n        \".setName(\\\"Additional PATH environment variable paths\\\")\": \".setName(\\\"其他 PATH 环境变量路径\\\")\",\n        \".setName(\\\"Reload with new environment variables\\\")\": \".setName(\\\"重新加载新的环境变量\\\")\",\n        \".setName(\\\"Custom base path (Git repository path)\\\")\": \".setName(\\\"自定义基础路径(Git 仓库路径)\\\")\",\n        \".setName(\\\"Custom Git directory path (Instead of '.git')\\\")\": \".setName(\\\"自定义 Git 目录路径(取代 .git)\\\")\",\n        \".setName(\\\"Disable on this device\\\")\": \".setName(\\\"在此设备上禁用\\\")\",\n        \".setName(\\\"Support\\\")\": \".setName(\\\"支持\\\")\",\n        \".setName(\\\"Donate\\\")\": \".setName(\\\"捐赠\\\")\",\n        \".setName(\\\"Show commit authoring information next to each line\\\")\": \".setName(\\\"显示每行旁边的提交作者信息\\\")\",\n        \".setName(\\\"Follow movement and copies across files and commits\\\")\": \".setName(\\\"跟踪移动并跨文件和提交进行复制\\\")\",\n        \".setName(\\\"Show commit hash\\\")\": \".setName(\\\"显示提交哈希值\\\")\",\n        \".setName(\\\"Author name display\\\")\": \".setName(\\\"显示作者姓名\\\")\",\n        \".setName(\\\"Authoring date display\\\")\": \".setName(\\\"显示创建日期\\\")\",\n        \".setName(\\\"Custom authoring date format\\\")\": \".setName(\\\"自定义作者日期格式\\\")\",\n        \".setName(\\\"Authoring date display timezone\\\")\": \".setName(\\\"创建日期显示时区:\\\")\",\n        \".setName(\\\"Oldest age in coloring\\\")\": \".setName(\\\"着色最旧时间\\\")\",\n        \".setName(\\\"Text color\\\")\": \".setName(\\\"文本颜色\\\")\",\n        \".setName(\\\"Ignore whitespace and newlines in changes\\\")\": \".setName(\\\"忽略更改中的空格和换行符\\\")\",\n        \".setName(\\\"Split automatic commit and push\\\")\": \".setName(\\\"自动提交和推送分离\\\")\",\n        \".setName(`Vault ${commitOrBackup} interval (minutes)`)\": \".setName(`保险库 ${commitOrBackup} 间隔(分钟)`)\",\n        \".setName(`Auto Backup after stopping file edits`)\": \".setName(`停止文件编辑后自动备份`)\",\n        \".setName(`Auto ${commitOrBackup} after latest commit`)\": \".setName(`在最新提交后自动 ${commitOrBackup}`)\",\n        \".setName(`Vault push interval (minutes)`)\": \".setName(`仓库推送间隔(分钟)`)\",\n        \".setName(\\\"Specify custom commit message on auto backup\\\")\": \".setName(\\\"在自动备份时指定自定义提交信息\\\")\",\n        \".setName(\\\"Commit message on auto backup/commit\\\")\": \".setName(\\\"自动备份/提交的提交信息\\\")\",\n        \".setName(\\\"Commit message on manual backup/commit\\\")\": \".setName(\\\"手动备份/提交的提交信息\\\")\",\n        \".setName(\\\"Backup\\\")\": \".setName(\\\"备份\\\")\",\n        \".setName(\\\"Sync Method\\\")\": \".setName(\\\"同步方法\\\")\",\n        \".setName(\\\"Pull updates on startup\\\")\": \".setName(\\\"启动时检查更新\\\")\",\n        \".setName(\\\"Push on backup\\\")\": \".setName(\\\"备份推送\\\")\",\n        \".setName(\\\"Pull changes before push\\\")\": \".setName(\\\"在推送前拉取变更\\\")\",\n        \".setDesc(\\\"Enable to use one interval for commit and another for sync.\\\")\": \".setDesc(\\\"允许使用一个间隔进行提交,另一个间隔进行同步。\\\")\",\n        \".setDesc(`${r.settings.differentIntervalCommitAndPush?\\\"Commit\\\":\\\"Commit and sync\\\"} changes every X minutes. Set to 0 (default) to disable. (See below setting for further configuration!)`)\": \".setDesc(`${r.settings.differentIntervalCommitAndPush?\\\"提交\\\":\\\"提交并同步\\\"}每 X 分钟变更。设置为 0(默认)以禁用。(请参见下面的设置以进行进一步配置！)`)\",\n        \".setDesc(`Requires the ${i} interval not to be 0.\\n                        If turned on, do auto ${i} every ${$s(r.settings.autoSaveInterval)} after stopping file edits.\\n                        This also prevents auto ${i} while editing a file. If turned off, it's independent from the last file edit.`)\": \".setDesc(`需要 ${i} 间隔不为 0。\\n                        如果开启,则在停止文件编辑后每隔 ${$s(r.settings.autoSaveInterval)} 自动 ${i}。\\n                        这也会防止在编辑文件时自动 ${i}。如果关闭,则与上次文件编辑无关。`)\",\n        \".setDesc(`If turned on, sets last auto ${i} timestamp to the latest commit timestamp. This reduces the frequency of auto ${i} when doing manual commits.`)\": \".setDesc(`如果启用,将最后一次自动 ${i} 时间戳设置为最新的提交时间戳。这减少了在进行手动提交时自动 ${i} 的频率。`)\",\n        \".setDesc(\\\"Push commits every X minutes. Set to 0 (default) to disable.\\\")\": \".setDesc(\\\"每X分钟推送提交。设置为0(默认)以禁用。\\\")\",\n        \".setDesc(\\\"Pull changes every X minutes. Set to 0 (default) to disable.\\\")\": \".setDesc(\\\"每 X 分钟拉取更改。设置为 0(默认)以禁用。\\\")\",\n        \".setDesc(\\\"You will get a pop up to specify your message.\\\")\": \".setDesc(\\\"您将收到一个弹出窗口以指定您的消息。\\\")\",\n        \".setDesc(\\\"Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message).\\\")\": \".setDesc(\\\"可用占位符:{{date}}(见下文)、{{hostname}}(见下文)、{{numFiles}}(提交中更改的文件数量)和{{files}}(提交信息中的更改文件)。\\\")\",\n        \".setDesc(\\\"Specify custom hostname for every device.\\\")\": \".setDesc(\\\"为每个设备指定自定义主机名。\\\")\",\n        \".setDesc(\\\"Decide how to integrate commits from your remote branch into your local branch.\\\")\": \".setDesc(\\\"决定如何将远程分支中的提交集成到本地分支中。\\\")\",\n        \".setDesc(\\\"Automatically pull commits when Obsidian starts.\\\")\": \".setDesc(\\\"自动在 Obsidian 启动时拉取提交。\\\")\",\n        \".setDesc(\\\"Commit-and-sync with default settings means staging everything -> committing -> pulling -> pushing. Ideally this is a single action that you do regularly to keep your local and remote repository in sync.\\\")\": \".setDesc(\\\"使用默认设置的 提交和同步 意味着暂存所有内容 -> 提交 -> 拉取 -> 推送。理想情况下,这是一个你定期执行的单一操作,用于保持本地和远程仓库的同步。\\\")\",\n        \".setDesc(`Most of the time you want to push after committing. Turning this off turns a commit-and-sync action into commit ${r.settings.pullBeforePush?\\\"and pull \\\":\\\"\\\"}only. It will still be called commit-and-sync.`)\": \".setDesc(`大多数情况下,您希望在提交后推送。关闭此选项会将提交并同步操作变为仅提交${r.settings.pullBeforePush?\\\"和拉取\\\":\\\"\\\"}操作。它仍然会被称为提交并同步。`)\",\n        \".setDesc(`On commit-and-sync, pull commits as well. Turning this off turns a commit-and-sync action into commit ${r.settings.disablePush?\\\"\\\":\\\"and push \\\"}only.`)\": \".setDesc(`在提交并同步时,同时拉取提交。关闭此选项会将提交并同步操作变为仅提交${r.settings.disablePush?\\\"\\\":\\\"和推送\\\"}操作。`)\",\n        \".setDesc(\\\"Show the author of the commit in the history view.\\\")\": \".setDesc(\\\"在历史视图中显示提交的作者。\\\")\",\n        \".setDesc(\\\"Show the date of the commit in the history view. The {{date}} placeholder format is used to display the date.\\\")\": \".setDesc(\\\"在历史视图中显示提交的日期。使用 {{date}} 占位符格式来显示日期。\\\")\",\n        \".setDesc(\\\"On slower machines this may cause lags. If so, just disable this option.\\\")\": \".setDesc(\\\"在较慢的机器上,这可能会导致延迟。如果是这样,请禁用此选项。\\\")\",\n        \".setDesc(\\\"Milliseconds to wait after file change before refreshing the Source Control View.\\\")\": \".setDesc(\\\"在文件更改后等待的毫秒数,然后刷新源控制视图。\\\")\",\n        \".setDesc(\\\"Disable notifications for git operations to minimize distraction (refer to status bar for updates). Errors are still shown as notifications even if you enable this setting.\\\")\": \".setDesc(\\\"禁用 Git 操作的通知以减少干扰(请参阅状态栏以获取更新)。即使您启用此设置,错误仍会作为通知显示。\\\")\",\n        \".setDesc(\\\"Don't show notifications when there are no changes to commit or push.\\\")\": \".setDesc(\\\"当没有需要提交或推送的更改时,不显示通知。\\\")\",\n        \".setDesc(\\\"Obsidian must be restarted for the changes to take affect.\\\")\": \".setDesc(\\\"Obsidian必须重启以使更改生效。\\\")\",\n        \".setDesc(\\\"Type in your password. You won't be able to see it again.\\\")\": \".setDesc(\\\"输入您的密码。您将无法再次看到它。\\\")\",\n        \".setDesc(\\\"These settings usually don't need to be changed, but may be requried for special setups.\\\")\": \".setDesc(\\\"这些设置通常无需更改,但在特殊配置中可能需要。\\\")\",\n        \".setDesc('\\\"Commit-and-sync\\\" and \\\"pull\\\" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule.')\": \".setDesc('\\\"提交和同步\\\"以及\\\"拉取\\\"处理子模块。缺失的功能:冲突文件、拉取/推送/提交文件的数量。每个子模块需要设置跟踪分支。')\",\n        \".setDesc(\\\"Whenever a checkout happens on the root repository, recurse the checkout on the submodules (if the branches exist).\\\")\": \".setDesc(\\\"每当根仓库发生检出时,递归检出子模块(如果分支存在)。\\\")\",\n        \".setDesc(\\\"Use each line for a new environment variable in the format KEY=VALUE .\\\")\": \".setDesc(\\\"使用每一行作为新环境变量,格式为 KEY=VALUE 。\\\")\",\n        \".setDesc(\\\"Use each line for one path\\\")\": \".setDesc(\\\"每行使用一个路径\\\")\",\n        \".setDesc(\\\"Removing previously added environment variables will not take effect until Obsidian is restarted.\\\")\": \".setDesc(\\\"移除之前添加的环境变量直到 Obsidian 重启才生效。\\\")\",\n        \".setDesc(`\\n            Sets the relative path to the vault from which the Git binary should be executed.\\n             Mostly used to set the path to the Git repository, which is only required if the Git repository is below the vault root directory. Use \\\"\\\\\\\\\\\" instead of \\\"/\\\" on Windows.\\n            `)\": \".setDesc(`\\n            设置 Git 二进制文件应从哪个存储库执行的相对路径。主要用于设置 Git 仓库的路径,只有当 Git 仓库位于分库根目录之下时才需要。在 Windows 下使用\\\"\\\\\\\\\\\"代替\\\"/\\\"。\\n            `)\",\n        \".setDesc('Requires restart of Obsidian to take effect. Use \\\"\\\\\\\\\\\" instead of \\\"/\\\" on Windows.')\": \".setDesc('需要重启 Obsidian 才能生效。在 Windows 上使用\\\"\\\\\\\\\\\"而不是\\\"/\\\"。')\",\n        \".setDesc(\\\"Disables the plugin on this device. This setting is not synced.\\\")\": \".setDesc(\\\"禁用此设备上的插件。此设置不会同步。\\\")\",\n        \".setDesc(\\\"If you like this Plugin, consider donating to support continued development.\\\")\": \".setDesc(\\\"如果您喜欢这个插件,请考虑捐赠以支持持续开发。\\\")\",\n        \".setDesc(\\\"Only available on desktop currently.\\\")\": \".setDesc(\\\"目前仅在桌面版可用。\\\")\",\n        \".setDesc(\\\"If and how the author is displayed\\\")\": \".setDesc(\\\"作者的显示方式(如果有)\\\")\",\n        \".setDesc(\\\"If and how the date and time of authoring the line is displayed\\\")\": \".setDesc(\\\"如果以及如何显示该行的创作日期和时间\\\")\",\n        \".setDesc(\\\"Most of the time you want to push after committing. Turning this off turns a commit-and-sync action into commit only. It will still be called commit-and-sync.\\\")\": \".setDesc(\\\"大多数情况下,您希望在提交后进行推送。关闭此选项会将提交和同步操作变为仅提交。它仍将被称为提交和同步。\\\")\",\n        \".setDesc(\\\"On commit-and-sync, pull commits before pushing. Turning this off turns a commit-and-sync action into commit and push only.\\\")\": \".setDesc(\\\"在提交和同步时,在推送之前拉取提交。关闭此选项会将提交和同步操作变为仅提交和推送。\\\")\",\n        \".setDesc(\\n          \\\"Selects the method used for handling new changes found in your remote git repository.\\\"\\n        )\": \".setDesc(\\n          \\\"选择处理远程 Git 仓库中新变更的方法。\\\"\\n        )\",\n        \".setDesc(\\\"Automatically pull updates when Obsidian starts\\\")\": \".setDesc(\\\"启动 Obsidian 时自动拉取更新\\\")\",\n        \".setDesc(\\\"Disable to only commit changes\\\")\": \".setDesc(\\\"禁用以仅提交更改\\\")\",\n        \".setDesc(\\\"Commit -> pull -> push (Only if pushing is enabled)\\\")\": \".setDesc(\\\"提交 -> 拉取 -> 推送(仅当启用推送时)\\\")\",\n        \".setDesc(\\\"Show the author of the commit in the history view\\\")\": \".setDesc(\\\"在历史视图中显示提交的作者\\\")\",\n        \".setDesc(\\n      \\\"Show the date of the commit in the history view. The {{date}} placeholder format is used to display the date.\\\"\\n    )\": \".setDesc(\\n      \\\"在历史视图中显示提交的日期。使用 {{date}} 占位符格式来显示日期。\\\"\\n    )\",\n        \".setDesc(\\n      \\\"On slower machines this may cause lags. If so, just disable this option\\\"\\n    )\": \".setDesc(\\n      \\\"在较慢的机器上,这可能会导致延迟。如果出现这种情况,请禁用此选项。\\\"\\n    )\",\n        \".setDesc(\\n      \\\"Milliseconds to wait after file change before refreshing the Source Control View\\\"\\n    )\": \".setDesc(\\n      \\\"在文件更改后等待的毫秒数,之后刷新源代码控制视图\\\"\\n    )\",\n        \".setDesc(\\n      \\\"Disable notifications for git operations to minimize distraction (refer to status bar for updates). Errors are still shown as notifications even if you enable this setting\\\"\\n    )\": \".setDesc(\\n      \\\"禁用 Git 操作的通知以减少干扰(请参阅状态栏以获取更新)。即使启用此设置,错误仍会以通知形式显示。\\\"\\n    )\",\n        \".setDesc(\\n        \\\"Don't show notifications when there are no changes to commit/push\\\"\\n      )\": \".setDesc(\\n        \\\"当没有更改要提交/推送时,不显示通知\\\"\\n      )\",\n        \".setDesc(\\n      \\\"Obsidian must be restarted for the changes to take affect\\\"\\n    )\": \".setDesc(\\n      \\\"Obsidian 必须重启以使更改生效\\\"\\n    )\",\n        \".setDesc(\\n        \\\"Type in your password. You won't be able to see it again.\\\"\\n      )\": \".setDesc(\\n        \\\"输入你的密码。你将无法再次查看它。\\\"\\n      )\",\n        \".setDesc(\\n        '\\\"Create backup\\\" and \\\"pull\\\" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule'\\n      )\": \".setDesc(\\n        '创建备份”和“拉取”会处理子模块。缺失的功能:冲突文件,已拉取/推送/提交的文件数量。每个子模块需要设置跟踪分支。'\\n      )\",\n        \".setDesc(\\n          \\\"Whenever a checkout happens on the root repository, recurse the checkout on the submodules (if the branches exist).\\\"\\n        )\": \".setDesc(\\n          \\\"每当在根仓库上进行检出时,对子模块递归进行检出(如果分支存在)。\\\"\\n        )\",\n        \".setDesc(\\n        \\\"Use each line for a new environment variable in the format KEY=VALUE\\\"\\n      )\": \".setDesc(\\n        \\\"使用每行来表示一个新的环境变量,格式为 KEY=VALUE\\\"\\n      )\",\n        \".setDesc(\\n      `Requires restart of Obsidian to take effect. Use \\\"\\\\\\\\\\\" instead of \\\"/\\\" on Windows.`\\n    )\": \".setDesc(\\n      `需要重启 Obsidian 才能生效。在 Windows 上使用 \\\"\\\\\\\\\\\" 代替 \\\"/\\\".`\\n    )\",\n        \".setDesc(\\n      \\\"Disables the plugin on this device. This setting is not synced.\\\"\\n    )\": \".setDesc(\\n      \\\"在该设备上禁用插件。此设置不会同步。\\\"\\n    )\",\n        \".setDesc(\\n      \\\"If you like this Plugin, consider donating to support continued development.\\\"\\n    )\": \".setDesc(\\n      \\\"如果你喜欢这个插件,考虑捐款支持持续开发。\\\"\\n    )\",\n        \".setDesc(\\n        \\\"If and how the date and time of authoring the line is displayed\\\"\\n      )\": \".setDesc(\\n        \\\"作者编写行的日期和时间的显示方式(如果有的话)\\\"\\n      )\",\n        \".setPlaceholder(\\\"vault backup: {{date}}\\\")\": \".setPlaceholder(\\\"保险库备份:{{date}}\\\")\",\n        \".setPlaceholder(\\\"GIT_DIR=/path/to/git/dir\\\")\": \".setPlaceholder(\\\"GIT_DIR=/path/to/git/目录\\\")\",\n        \".setPlaceholder(\\\"directory/directory-with-git-repo\\\")\": \".setPlaceholder(\\\"目录/带 Git 仓库的目录\\\")\",\n        \".setPlaceholder(\\\"Type your message and select optional the version with the added date.\\\")\": \".setPlaceholder(\\\"输入您的消息并可选择添加日期的版本。\\\")\",\n        \".setPlaceholder(\\\"Not supported files will be opened by default app!\\\")\": \".setPlaceholder(\\\"不支持的文件将由默认应用程序打开！\\\")\",\n        \".setPlaceholder(\\\"Select branch to checkout\\\")\": \".setPlaceholder(\\\"选择要检出的分支\\\")\",\n        \".setPlaceholder(\\n      \\\"Not supported files will be opened by default app!\\\"\\n    )\": \".setPlaceholder(\\n      \\\"不支持的文件将默认由默认应用程序打开！\\\"\\n    )\",\n        \".setPlaceholder(\\n      \\\"Type your message and select optional the version with the added date.\\\"\\n    )\": \".setPlaceholder(\\n      \\\"输入您的信息并可选地选择带有添加日期的版本。\\\"\\n    )\",\n        \".setTitle(\\\"Copy commit hash\\\")\": \".setTitle(\\\"复制提交哈希\\\")\",\n        \".setTitle(\\\"Git: Stage\\\")\": \".setTitle(\\\"Git: 暂存\\\")\",\n        \".setTitle(\\\"Git: Unstage\\\")\": \".setTitle(\\\"Git: 撤销暂存\\\")\",\n        \".setTitle(\\\"Git: Add to .gitignore\\\")\": \".setTitle(\\\"Git: 添加到 .gitignore\\\")\",\n        \".innerText=`Color for ${i} commits`\": \".innerText=`${i} 提交的颜色`\",\n        \"super(`Modifying the index is not possible because you have unmerged files: ${e.toString}. Fix them up in the work tree, and then use 'git add/rm as appropriate to mark resolution and make a commit.`)\": \"super(`无法修改索引，因为您有未合并的文件: ${e.toString}。请在工作树中修复它们，然后使用 'git add/rm' 标记解决并提交.`)\",\n        \"super(`An internal error caused this command to fail. Please file a bug report at https://github.com/isomorphic-git/isomorphic-git/issues with this error message: ${e}`)\": \"super(`内部错误导致此命令失败。请在 https://github.com/isomorphic-git/isomorphic-git/issues 提交错误报告，附上此错误信息: ${e}`)\",\n        \"super(`The filepath \\\"${e}\\\" contains unsafe character sequences`)\": \"super(`文件路径 \\\"${e}\\\" 包含不安全的字符序列`)\",\n        \"super(`Could not find ${e}.`)\": \"super(`无法找到 ${e}.`)\",\n        \"super(`Object ${e} ${i?`at ${i}`:\\\"\\\"}was anticipated to be a ${r} but it is a ${n}.`)\": \"super(`对象 ${e} ${i?`位于 ${i}`:\\\"\\\"} 预计是 ${r}，但它是 ${n}.`)\",\n        \"super(`Expected a 40-char hex object id but saw \\\"${e}\\\".`)\": \"super(`预期是一个 40 字符的十六进制对象 ID，但看到的是 \\\"${e}\\\".`)\",\n        \"super(`Could not find a fetch refspec for remote \\\"${e}\\\". Make sure the config file has an entry like the following:\\n[remote \\\"${e}\\\"]\\n\\tfetch = +refs/heads/*:refs/remotes/origin/*\\n`)\": \"super(`找不到远程 \\\"${e}\\\" 的 fetch refspec。请确保配置文件中有如下条目：\\n[remote \\\"${e}\\\"]\\n\\tfetch = +refs/heads/*:refs/remotes/origin/*\\n`) \",\n        \"super(`Failed to create ${e} at ${n} because it already exists.${r?` (Hint: use 'force: true' parameter to overwrite existing ${e}.)`:\\\"\\\"}`)\": \"super(`创建 ${e} 在 ${n} 时失败，因为它已存在。${r?`（提示: 使用 'force: true' 参数覆盖现有的 ${e}。）`:\\\"\\\"}`)\",\n        \"super(`Found multiple ${e} matching \\\"${n}\\\" (${r.join(\\\", \\\")}). Use a longer abbreviation length to disambiguate them.`)\": \"super(`找到多个匹配 \\\"${n}\\\" 的 ${e} (${r.join(\\\", \\\")})。请使用更长的缩写长度以消除歧义。`)\",\n        \"super(`Your local changes to the following files would be overwritten by checkout: ${e.join(\\\", \\\")}`)\": \"super(`以下文件的本地更改将在检出时被覆盖：${e.join(\\\", \\\")}`)\",\n        \"super(`Failed to checkout \\\"${e}\\\" because commit ${n} is not available locally. Do a git fetch to make the branch available locally.`)\": \"super(`无法检出 \\\"${e}\\\"，因为提交 ${n} 在本地不可用。请执行 git fetch 使该分支在本地可用.`)\",\n        \"super(\\\"Empty response from git server.\\\")\": \"super(\\\"从 git 服务器收到空响应.\\\")\",\n        \"super(\\\"A simple fast-forward merge was not possible.\\\")\": \"super(\\\"无法进行简单的快进合并.\\\")\",\n        \"super(`One or more branches were not updated: ${e}`)\": \"super(`一个或多个分支未更新: ${e}`)\",\n        \"super(`HTTP Error: ${e} ${n}`)\": \"super(`HTTP 错误: ${e} ${n}`)\",\n        \"super(`\\\"${e}\\\" would be an invalid git reference. (Hint: a valid alternative would be \\\"${n}\\\".)`)\": \"super(`\\\"${e}\\\" 将是一个无效的 Git 引用。 (提示: 一个有效的替代方案是 \\\"${n}\\\".)`)\",\n        \"super(`Maximum search depth of ${e} exceeded.`)\": \"super(`超出了最大搜索深度 ${e}.`)\",\n        \"super(\\\"Merges with conflicts are not supported yet.\\\")\": \"super(\\\"尚不支持带有冲突的合并.\\\")\",\n        \"super(`Automatic merge failed with one or more merge conflicts in the following files: ${e.toString()}. Fix conflicts then commit the result.`)\": \"super(`自动合并失败，以下文件存在一个或多个合并冲突: ${e.toString()}。解决冲突后提交结果。`)\",\n        \"super(`No name was provided for ${e} in the argument or in the .git/config file.`)\": \"super(`在参数或 .git/config 文件中未提供 ${e} 的名称.`)\",\n        \"super(`The function requires a \\\"${e}\\\" parameter but none was provided.`)\": \"super(`该函数需要一个 \\\"${e}\\\" 参数，但未提供.`)\",\n        \"super('There are multiple errors that were thrown by the method. Please refer to the \\\"errors\\\" property to see more')\": \"super('该方法抛出了多个错误。请参阅 \\\"errors\\\" 属性查看更多')\",\n        \"super(`Expected \\\"${e}\\\" but received \\\"${n}\\\".`)\": \"super(`预期是 \\\"${e}\\\"，但接收到的是 \\\"${n}\\\".`)\",\n        \"super(`Push rejected${n}. Use \\\"force: true\\\" to override.`)\": \"super(`推送被拒绝${n}。使用 \\\"force: true\\\" 覆盖.`)\",\n        \"super(`Remote does not support the \\\"${e}\\\" so the \\\"${n}\\\" parameter cannot be used.`)\": \"super(`远程不支持 \\\"${e}\\\"，因此无法使用 \\\"${n}\\\" 参数.`)\",\n        \"super(`Remote did not reply using the \\\"smart\\\" HTTP protocol. Expected \\\"001e# service=git-upload-pack\\\" but received: ${e}`)\": \"super(`远程未使用 \\\"智能\\\" HTTP 协议回复。预期收到 \\\"001e# service=git-upload-pack\\\"，但收到: ${e}`)\",\n        \"super(`Git remote \\\"${e}\\\" uses an unrecognized transport protocol: \\\"${n}\\\"`)\": \"super(`Git 远程 \\\"${e}\\\" 使用了一个无法识别的传输协议: \\\"${n}\\\"`)\",\n        \"super(`Cannot parse remote URL: \\\"${e}\\\"`)\": \"super(`无法解析远程 URL: \\\"${e}\\\"`)\",\n        \"super(\\\"The operation was canceled.\\\")\": \"super(\\\"操作已取消.\\\")\",\n        \"super(`Could not merge index: Entry for '${e}' is not up to date. Either reset the index entry to HEAD, or stage your unstaged changes.`)\": \"super(`无法合并索引: '${e}' 的条目未更新。请重置索引条目为 HEAD，或暂存您的未暂存更改.`)\",\n        \"super(`\\\"${e}\\\" does not point to any commit. You're maybe working on a repository with no commits yet. `)\": \"super(`\\\"${e}\\\" 没有指向任何提交。您可能正在一个尚未有提交的仓库中工作.`)\",\n        \"super(\\\"No network connection available\\\")\": \"super(\\\"没有可用的网络连接\\\")\",\n        \"ue(\\\"invalid type passed to GitIndex.from\\\")\": \"ue(\\\"传递给 GitIndex.from 的类型无效\\\")\",\n        \"ue(\\\"Index file is empty (.git/index)\\\")\": \"ue(\\\"索引文件为空 (.git/index)\\\")\",\n        \"ue(`Invalid dircache magic file number: ${i}`)\": \"ue(`无效的 dircache 魔术文件编号: ${i}`)\",\n        \"ue(`Invalid checksum in GitIndex buffer: expected ${s} but saw ${a}`)\": \"ue(`GitIndex 缓冲区中的校验和无效: 预期 ${s} 但看到 ${a}`)\",\n        \"ue(`Unsupported dircache version: ${o}`)\": \"ue(`不支持的 dircache 版本: ${o}`)\",\n        \"ue(`Got a path length of: ${h}`)\": \"ue(`路径长度为: ${h}`)\",\n        \"ue(`Expected 1-8 null characters but got '${p}' after ${u.path}`)\": \"ue(`预期 1-8 个空字符，但在 ${u.path} 后得到了 '${p}'`)\",\n        \"ue(\\\"Unexpected end of file\\\")\": \"ue(\\\"文件意外结束\\\")\",\n        \"ue(`Unexpected GitTree entry mode: ${t.toString(8)`)\": \"ue(`意外的 GitTree 条目模式: ${t.toString(8)`) \",\n        \"ue(\\\"Invalid refspec\\\")\": \"ue(\\\"无效的引用规范\\\")\",\n        \"ue(`Unexpected GitTree entry mode: ${t}`)\": \"ue(`意外的 GitTree 条目模式: ${t}`)\",\n        \"ue(`GitTree: Error parsing buffer at byte location ${n}: Could not find the next space character.`)\": \"ue(`GitTree: 解析缓冲区时出错，字节位置 ${n}: 找不到下一个空格字符.`)\",\n        \"ue(`GitTree: Error parsing buffer at byte location ${n}: Could not find the next null character.`)\": \"ue(`GitTree: 解析缓冲区时出错，字节位置 ${n}: 找不到下一个空字符.`)\",\n        \"ue(`Could not understand file mode: ${t}`)\": \"ue(`无法理解文件模式: ${t}`)\",\n        \"ue(\\\"invalid type passed to GitTree constructor\\\")\": \"ue(\\\"传递给 GitTree 构造函数的类型无效\\\")\",\n        \"ue(`Length mismatch: expected ${a} bytes but got ${s} instead.`)\": \"ue(`长度不匹配: 预期 ${a} 字节，但实际得到 ${s} 字节.`)\",\n        \"ue(`applyDelta expected source buffer to be ${r} bytes but the provided buffer was ${e.length} bytes`)\": \"ue(`applyDelta 预期源缓冲区为 ${r} 字节，但提供的缓冲区为 ${e.length} 字节`) \",\n        \"ue(`applyDelta expected target buffer to be ${i} bytes but the resulting buffer was ${l} bytes`)\": \"ue(`applyDelta 预期目标缓冲区为 ${i} 字节，但结果缓冲区为 ${l} 字节`) \",\n        \"ue(`Invalid PACK header '${r}'`)\": \"ue(`无效的 PACK 头部 '${r}'`) \",\n        \"ue(`Invalid packfile version: ${i}`)\": \"ue(`无效的 packfile 版本: ${i}`) \",\n        \"ue(`Pako error: ${f.msg}`)\": \"ue(`Pako 错误: ${f.msg}`)\",\n        \"ue(\\\"Inflated object size is different from that stated in packfile.\\\")\": \"ue(\\\"膨胀后的对象大小与 packfile 中声明的不同.\\\")\",\n        \"ue(`Unable to read version ${a} packfile IDX. (Only version 2 supported)`)\": \"ue(`无法读取版本 ${a} 的 packfile IDX. (只支持版本 2)`) \",\n        \"ue(\\\"To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.\\\")\": \"ue(\\\"为了简化实现，我没有实现支持大于 2GB 的 packfile 所需的第五层功能.\\\")\",\n        \"ue(`Could not read object ${e} from packfile`)\": \"ue(`无法从 packfile 中读取对象 ${e}`)\",\n        \"ue(\\\"Tried to read from a GitPackIndex with no packfile loaded into memory\\\")\": \"ue(\\\"尝试从未加载 packfile 到内存中的 GitPackIndex 中读取\\\")\",\n        \"ue(\\\"Unrecognized type: 0b\\\"+s.toString(2))\": \"ue(\\\"无法识别的类型: 0b\\\"+s.toString(2))\",\n        \"ue(`Packfile told us object would have length ${c} but it had length ${h.byteLength}`)\": \"ue(`Packfile 告诉我们对象的长度为 ${c}，但它的长度为 ${h.byteLength}`)\",\n        \"ue(`SHA check failed! Expected ${r}, computed ${o}`)\": \"ue(`SHA 校验失败! 预期 ${r}, 计算得出 ${o}`)\",\n        \"ue(`invalid requested format \\\"${i}\\\"`)\": \"ue(`无效的请求格式 \\\"${i}\\\"`) \",\n        \"ue(\\\"invalid type passed to GitAnnotatedTag constructor\\\")\": \"ue(\\\"传递给 GitAnnotatedTag 构造函数的类型无效\\\")\",\n        \"ue(\\\"invalid type passed to GitCommit constructor\\\")\": \"ue(\\\"传递给 GitCommit 构造函数的类型无效\\\")\",\n        \"ue(\\\"commit 'parent' property should be an array\\\")\": \"ue(\\\"commit 的 'parent' 属性应该是一个数组\\\")\",\n        \"ue(\\\"GitObjectStoreLoose expects objects to write to be in deflated format\\\")\": \"ue(\\\"GitObjectStoreLoose 期望写入的对象应为压缩格式\\\")\",\n        \"ue(`Invalid mode 0o${_.toString(8)`)\": \"ue(`无效的模式 0o${_.toString(8)`) \",\n        \".displayMessage(`Staged ${r.path}`)\": \".displayMessage(`已暂存 ${r.path}`)\",\n        \".displayMessage(`Unstaged ${r.path}`)\": \".displayMessage(`未暂存 ${r.path}`)\",\n        \".displayMessage(\\\"Everything is up-to-date\\\")\": \".displayMessage(\\\"一切都是最新的\\\")\",\n        \".displayMessage(\\\"No commits to push\\\")\": \".displayMessage(\\\"没有提交可以推送\\\")\",\n        \".displayMessage(`Committed${d?\\\" approx.\\\":\\\"\\\"} ${h} ${h==1?\\\"file\\\":\\\"files\\\"}`)\": \".displayMessage(`已提交${d?\\\" 约\\\":\\\"\\\"} ${h} ${h==1?\\\"个文件\\\":\\\"个文件\\\"}`)\",\n        \".displayMessage(\\\"No changes to commit\\\")\": \".displayMessage(\\\"没有更改可以提交\\\")\",\n        \".displayMessage(`Pushed ${i} ${i==1?\\\"file\\\":\\\"files\\\"} to remote`)\": \".displayMessage(`已推送 ${i} ${i==1?\\\"个文件\\\":\\\"个文件\\\"} 到远程`) \",\n        \".displayMessage(`Pulled ${n.length} ${n.length==1?\\\"file\\\":\\\"files\\\"} from remote`)\": \".displayMessage(`已从远程拉取 ${n.length} ${n.length==1?\\\"个文件\\\":\\\"个文件\\\"}`)\",\n        \".displayMessage(\\\"Fetched from remote\\\")\": \".displayMessage(\\\"已从远程获取\\\")\",\n        \".displayMessage(`Staged ${n.path}`)\": \".displayMessage(`已暂存 ${n.path}`)\",\n        \".displayMessage(`Unstaged ${n.path}`)\": \".displayMessage(`未暂存 ${n.path}`)\",\n        \".displayMessage(`Switched to ${r}`)\": \".displayMessage(`已切换到 ${r}`)\",\n        \".displayMessage(`Switched to ${n}`)\": \".displayMessage(`已切换到 ${n}`)\",\n        \".displayMessage(`Created new branch ${n}`)\": \".displayMessage(`已创建新分支 ${n}`)\",\n        \".displayMessage(`Deleted branch ${r}`)\": \".displayMessage(`已删除分支 ${r}`)\",\n        \".displayMessage(`Set upstream branch to ${n}`)\": \".displayMessage(`已设置上游分支为 ${n}`)\",\n        \".displayMessage(\\\"Fetching remote branches\\\")\": \".displayMessage(\\\"正在获取远程分支\\\")\",\n        \".displayError(`Cannot run git command. Trying to run: '${this.localStorage.getGitPath()||\\\"git\\\"}' .`)\": \".displayError(`无法运行git命令。尝试运行: '${this.localStorage.getGitPath()||\\\"git\\\"}' .`)\",\n        \".displayError(\\\"Aborted. No upstream-branch is set!\\\",1e4)\": \".displayError(\\\"操作已中止。未设置上游分支！\\\",1e4)\",\n        \".displayError(\\\"Too many changes to display\\\")\": \".displayError(\\\"更改过多,无法显示\\\")\",\n        \".displayError(`Did not commit, because following files are too big: ${a.map(s=>s.vault_path).join(` `)}. Please remove them.`)\": \".displayError(`未提交,因为以下文件太大:${a.map(s=>s.vault_path).join(` `)}。请移除它们。`)\",\n        \".displayError(`You have conflicts in ${r.conflicted.length} ${r.conflicted.length==1?\\\"file\\\":\\\"files\\\"}`)\": \".displayError(`您在${r.conflicted.length}个${r.conflicted.length==1?\\\"文件\\\":\\\"文件\\\"}中有冲突`)\",\n        \".displayError(`Did not commit, because you have conflicts in ${c.conflicted.length} ${c.conflicted.length==1?\\\"file\\\":\\\"files\\\"}. Please resolve them and commit per command.`)\": \".displayError(`未提交,因为您在${c.conflicted.length}个${c.conflicted.length==1?\\\"文件\\\":\\\"文件\\\"}中有冲突。请解决这些冲突后通过命令提交。`)\",\n        \".displayError(\\\"Did not commit, because you have conflicts. Please resolve them and commit per command.\\\")\": \".displayError(\\\"未提交,因为您有冲突。请解决冲突后通过命令提交。\\\")\",\n        \".displayError(`Cannot push. You have conflicts in ${r.conflicted.length} ${r.conflicted.length==1?\\\"file\\\":\\\"files\\\"}`)\": \".displayError(`无法推送。您在${r.conflicted.length}个${r.conflicted.length==1?\\\"文件\\\":\\\"文件\\\"}中有冲突`)\",\n        \".displayError(\\\"Cannot push. You have conflicts\\\")\": \".displayError(\\\"无法推送。您有冲突\\\")\",\n        \".displayError(\\\"Git: Going into offline mode. Future network errors will no longer be displayed.\\\",2e3)\": \".displayError(\\\"Git:进入离线模式。未来的网络错误将不再显示。\\\",2e3)\",\n        \".displayError(`Pull failed (${this.plugin.settings.syncMethod})\": \".displayError(`拉取失败(${this.plugin.settings.syncMethod})\",\n        \".displayError(`Sync failed (${this.plugin.settings.syncMethod})\": \".displayError(`同步失败(${this.plugin.settings.syncMethod})\",\n        \"\\\"aria-label\\\",\\\"Open File\\\"\": \"\\\"aria-label\\\",\\\"打开文件\\\"\",\n        \"\\\"aria-label\\\",\\\"Change Layout\\\"\": \"\\\"aria-label\\\",\\\"更改布局\\\"\",\n        \"\\\"aria-label\\\",\\\"Refresh\\\"\": \"\\\"aria-label\\\",\\\"刷新\\\"\",\n        \"\\\"aria-label\\\",\\\"Discard\\\"\": \"\\\"aria-label\\\",\\\"丢弃\\\"\",\n        \"\\\"aria-label\\\",\\\"Stage\\\"\": \"\\\"aria-label\\\",\\\"暂存\\\"\",\n        \"\\\"aria-label\\\",\\\"Unstage\\\"\": \"\\\"aria-label\\\",\\\"取消暂存\\\"\",\n        \"\\\"aria-label\\\",\\\"Commit-and-sync\\\"\": \"\\\"aria-label\\\",\\\"提交并同步\\\"\",\n        \"\\\"aria-label\\\",\\\"Commit\\\"\": \"\\\"aria-label\\\",\\\"提交\\\"\",\n        \"\\\"aria-label\\\",\\\"Stage all\\\"\": \"\\\"aria-label\\\",\\\"暂存所有\\\"\",\n        \"\\\"aria-label\\\",\\\"Unstage all\\\"\": \"\\\"aria-label\\\",\\\"取消暂存所有\\\"\",\n        \"\\\"aria-label\\\",\\\"Push\\\"\": \"\\\"aria-label\\\",\\\"推送\\\"\",\n        \"\\\"aria-label\\\",\\\"Pull\\\"\": \"\\\"aria-label\\\",\\\"拉取\\\"\",\n        \"\\\"aria-label\\\",s=\\\"And \\\"+(t[0].length-500)+\\\" more files\\\"\": \"\\\"aria-label\\\",s=\\\"添加 \\\"+(t[0].length-500)+\\\" 更多文件\\\"\",\n        \"\\\"aria-label\\\",n=\\\"Clear\\\"\": \"\\\"aria-label\\\",n=\\\"清除\\\"\",\n        \".ariaLabel=\\\"You have merge conflicts. Resolve them and commit afterwards.\\\"\": \".ariaLabel=\\\"您有合并冲突。请解决冲突后再提交。\\\"\",\n        \".ariaLabel=\\\"Checking repository status...\\\"\": \".ariaLabel=\\\"正在检查仓库状态...\\\"\",\n        \".ariaLabel=\\\"Adding files...\\\"\": \".ariaLabel=\\\"正在添加文件...\\\"\",\n        \".ariaLabel=\\\"Committing changes...\\\"\": \".ariaLabel=\\\"正在提交更改...\\\"\",\n        \".ariaLabel=\\\"Pushing changes...\\\"\": \".ariaLabel=\\\"正在推送更改...\\\"\",\n        \".ariaLabel=\\\"Pulling changes...\\\"\": \".ariaLabel=\\\"正在拉取更改...\\\"\",\n        \".ariaLabel=\\\"Failed on initialization!\\\"\": \".ariaLabel=\\\"初始化失败！\\\"\",\n        \".ariaLabel=`${n?\\\"Offline: \\\":\\\"\\\"}Last Commit: ${i}`\": \".ariaLabel=`${n?\\\"离线：\\\":\\\"\\\"}上次提交：${i}`\",\n        \".ariaLabel=n?\\\"Git is offline\\\":\\\"Git is ready\\\"\": \".ariaLabel=n?\\\"Git离线\\\":\\\"Git准备就绪\\\"\",\n        \"placeholder:\\\"Specify your username\\\"\": \"placeholder:\\\"指定您的用户名\\\"\",\n        \"placeholder:\\\"Specify your password/personal access token\\\"\": \"placeholder:\\\"指定您的密码/个人访问令牌\\\"\",\n        \"placeholder:\\\"Do you really want to delete the repository (.git directory)? plugin action cannot be undone.\\\"\": \"placeholder:\\\"您确定要删除该仓库(.git目录)吗？此插件操作无法撤销。\\\"\",\n        \"placeholder:\\\"Do you want to discard all changes to tracked files? plugin action cannot be undone.\\\"\": \"placeholder:\\\"您想放弃所有跟踪文件的更改吗？此插件操作无法撤销。\\\"\",\n        \"placeholder:\\\"Enter remote URL\\\"\": \"placeholder:\\\"输入远程URL\\\"\",\n        \"placeholder:\\\"Enter directory for clone. It needs to be empty or not existent.\\\"\": \"placeholder:\\\"输入克隆目录。目录必须为空或不存在。\\\"\",\n        \"placeholder:\\\"Specify depth of clone. Leave empty for full clone.\\\"\": \"placeholder:\\\"指定克隆的深度。留空则为完整克隆。\\\"\",\n        \"placeholder:\\\"Create new branch\\\"\": \"placeholder:\\\"创建新分支\\\"\",\n        \"placeholder:\\\"Delete branch\\\"\": \"placeholder:\\\"删除分支\\\"\",\n        \"placeholder:\\\"This branch isn't merged into HEAD. Force delete?\\\"\": \"placeholder:\\\"此分支尚未合并到HEAD中。强制删除？\\\"\",\n        \"placeholder:\\\"Select or create a new remote by typing its name and selecting it\\\"\": \"placeholder:\\\"通过输入名称并选择来选择或创建新的远程\\\"\",\n        \"placeholder:\\\"Select or create a new remote branch by typing its name and selecting it\\\"\": \"placeholder:\\\"通过输入名称并选择来选择或创建新的远程分支\\\"\",\n        \"placeholder:\\\"Select a remote\\\"\": \"placeholder:\\\"选择一个远程\\\"\",\n        \"reason:\\\"Failed to get remote url of submodule\\\"\": \"reason:\\\"无法获取子模块的远程 URL\\\"\",\n        \"reason:\\\"Remote branch is not configured\\\"\": \"reason:\\\"远程分支未配置\\\"\",\n        \"reason:\\\"Failed to get current branch name\\\"\": \"reason:\\\"无法获取当前分支名称\\\"\",\n        \"reason:\\\"Failed to get remote url\\\"\": \"reason:\\\"无法获取远程 URL\\\"\",\n        \"reason:\\\"Could not parse remote url\\\"\": \"reason:\\\"无法解析远程 URL\\\"\",\n        \"-------------------------下拉列表-------------------------\": \"-------------------------下拉列表-------------------------\",\n        \"hide:\\\"Hide\\\",full:\\\"Full\\\",initials:\\\"Initials\\\"\": \"hide:\\\"隐藏\\\",full:\\\"完整\\\",initials:\\\"首字母\\\"\",\n        \"\\\"viewer-local\\\":\\\"My local (default)\\\",\\\"author-local\\\":\\\"Author's local\\\",utc0000:\\\"UTC+0000/Z\\\"\": \"\\\"viewer-local\\\":\\\"我的本地 (默认)\\\",\\\"author-local\\\":\\\"作者的本地\\\",utc0000:\\\"UTC+0000/Z\\\"\",\n        \"merge:\\\"Merge\\\",rebase:\\\"Rebase\\\",reset:\\\"Other sync service (Only updates the HEAD without touching the working directory)\\\"\": \"merge:\\\"合并\\\",rebase:\\\"变基\\\",reset:\\\"其他同步服务 (仅更新 HEAD,不触及工作目录)\\\"\",\n        \"hide:\\\"Hide\\\",initials:\\\"Initials (default)\\\",\\\"first name\\\":\\\"First name\\\",\\\"last name\\\":\\\"Last name\\\",full:\\\"Full name\\\"\": \"hide:\\\"隐藏\\\",initials:\\\"首字母 (默认)\\\",\\\"first name\\\":\\\"名\\\",\\\"last name\\\":\\\"姓\\\",full:\\\"全名\\\"\",\n        \"hide:\\\"Hide\\\",date:\\\"Date (default)\\\",datetime:\\\"Date and time\\\",\\\"natural language\\\":\\\"Natural language\\\",custom:\\\"Custom\\\"\": \"hide:\\\"隐藏\\\",date:\\\"日期 (默认)\\\",datetime:\\\"日期和时间\\\",\\\"natural language\\\":\\\"自然语言\\\",custom:\\\"自定义\\\"\",\n        \"inactive:\\\"Do not follow (default)\\\",\\\"same-commit\\\":\\\"Follow within same commit\\\",\\\"all-commits\\\":\\\"Follow within all commits (maybe slow)\\\"\": \"inactive:\\\"不跟踪 (默认)\\\",\\\"same-commit\\\":\\\"仅在当前提交中跟踪\\\",\\\"all-commits\\\":\\\"在所有提交中跟踪 (可能较慢)\\\"\",\n        \"---------------------------------------------------------\": \"---------------------------------------------------------\",\n        \".log(\\\"Something weird happened. The 'checkRequirements' result is \\\"+r)\": \".log(\\\"奇怪的事情发生了。'checkRequirements'的结果是\\\"+r)\",\n        \".createEl(\\\"button\\\", {\\n      text: \\\"Cancel\\\"\\n    })\": \".createEl(\\\"按钮\\\", {\\n      text: \\\"Cancel\\\"\\n    })\",\n        \".addRibbonIcon(\\\"git-pull-request\\\",\\\"Open Git source control\\\"\": \".addRibbonIcon(\\\"git-pull-request\\\",\\\"打开Git源代码管理\\\"\",\n        \"i=\\\"commit\\\"\": \"i=\\\" 提交 \\\"\",\n        \"\\\"commit-and-sync\\\"\": \"\\\" 提交并同步 \\\"\",\n        \"\\\"Changes\\\"\": \"\\\"更改\\\"\",\n        \"\\\"Staged Changes\\\"\": \"\\\"已暂存更改\\\"\",\n        \"\\\"Recently Pulled Files\\\"\": \"\\\"最近拉取的文件\\\"\",\n        \"`\\n            Specify custom date format. E.g. \\\"${Dh}. See <a href=\\\"https://momentjs.com\\\">Moment.js</a> for more formats.`\": \"`\\n            指定自定义日期格式。例如:\\\"${Dh}。更多格式请参见 <a href=\\\"https://momentjs.com\\\">Moment.js</a>。`\",\n        \"`\\n            <a href=\\\"${cL}\\\">Feature guide and quick examples</a></br>\\n            The commit hash, author name and authoring date can all be individually toggled.</br>Hide everything, to only show the age-colored sidebar.`\": \"`\\n            <a href=\\\"${cL}\\\">功能指南和快速示例</a></br>\\n            提交哈希、作者姓名和创作日期都可以单独切换。</br>隐藏所有内容,仅显示着色时间的侧边栏。`\",\n        \"`\\n                By default (deactivated), each line only shows the newest commit where it was changed.\\n                <br/>\\n                With <i>same commit</i>, cut-copy-paste-ing of text is followed within the same commit and the original commit of authoring will be shown.\\n                <br/>\\n                With <i>all commits</i>, cut-copy-paste-ing text inbetween multiple commits will be detected.\\n                <br/>\\n                It uses <a href=\\\"https://git-scm.com/docs/git-blame\\\">git-blame</a> and\\n                for matches (at least ${Sl} characters) within the same (or all) commit(s), <em>the originating</em> commit's information is shown.`\": \"`\\n                默认情况下(未激活),每行只显示最新的更改提交。\\n                <br/>\\n                使用 <i>同一提交</i>,剪切、复制和粘贴文本会在同一提交内进行,显示原始提交的作者信息。\\n                <br/>\\n                使用 <i>所有提交</i>,剪切、复制和粘贴文本将跨多个提交进行检测。\\n                <br/>\\n                它使用 <a href=\\\"https://git-scm.com/docs/git-blame\\\">git-blame</a>,并且对于在同一(或所有)提交中匹配的内容(至少 ${Sl} 个字符),显示<em>来源</em>提交的信息。`\",\n        \"`\\n                    The time-zone in which the authoring date should be shown.\\n                    Either your local time-zone (default),\\n                    the author's time-zone during commit creation or\\n                    <a href=\\\"https://en.wikipedia.org/wiki/UTC%C2%B100:00\\\">UTC\\\\xB100:00</a>.\\n            `\": \"`\\n                    显示创作日期的时区。\\n                    可以是您的本地时区(默认),\\n                    提交时作者的时区,或者\\n                    <a href=\\\"https://en.wikipedia.org/wiki/UTC%C2%B100:00\\\">UTC\\\\xB100:00</a>.\\n            `\",\n        \"`\\n                    Whitespace and newlines are interpreted as\\n                    part of the document and in changes\\n                    by default (hence not ignored).\\n                    This makes the last line being shown as 'changed'\\n                    when a new subsequent line is added,\\n                    even if the previously last line's text is the same.\\n                    <br>\\n                    If you don't care about purely-whitespace changes\\n                    (e.g. list nesting / quote indentation changes),\\n                    then activating this will provide more meaningful change detection.\\n                `\": \"`\\n                    空格和换行符默认被解释为\\n                    文档的一部分并且在更改中被识别(因此不会被忽略)。\\n                    这使得当添加新行时,最后一行仍然显示为“已更改”,\\n                    即使之前的最后一行文本相同。\\n                    <br>\\n                    如果您不关心纯空白的更改\\n                    (例如列表嵌套/引用缩进的变化),\\n                    那么启用此功能将提供更有意义的更改检测。\\n                `\",\n        \"'Unhandled error in \\\"FileSystem.exists()\\\" function'\": \"'\\\"FileSystem.exists()\\\"函数中出现未经处理的错误'\",\n        \"` (${this.unPushedCommits} unpushed commits)`\": \"` (${this.unPushedCommits} 个未推送的提交)`\",\n        \"            File without changes\": \"            文件没有更改\",\n        \"<a href=\\\"${lL}\\\">Format string</a> to display the authoring date.</br>Currently: ${r}\": \"<a href=\\\"${lL}\\\">格式字符串</a> 用于显示作者日期。</br>当前: ${r}\",\n        \"`The oldest age in the line author coloring. Everything older will have the same color.\\n            </br>Smallest valid age is \\\"1d\\\". Currently: ${r!==void 0?`${r.asDays()} days`:\\\"invalid!\\\"}`\": \"`行作者着色中的最旧时间。所有更旧的将共享相同的颜色。\\n</br>最小有效时间为 \\\"1d\\\"。当前：${r!==void 0?`${r.asDays()} 天`:\\\"无效!\\\"}`\",\n        \"The CSS color of the gutter text\": \"垂直线文本的 CSS 颜色\",\n        \"It is higly recommended to use\": \"强烈推荐使用\",\n        \"CSS variables</a>\": \"CSS 变量</a>\",\n        \"defined by themes\": \"由主题定义\",\n        \"</pre> or\": \"</pre> 或\",\n        \"because they automatically adapt to theme changes.<br/>\": \"因为它们会自动适应主题变化.<br/>\",\n        \"See: <a href\": \"参见: <a href\",\n        \"List of available CSS variables in Obsidian\": \"Obsidian 可用的 CSS 变量列表\",\n        \"`abcdef Author Name ${s}`\": \"`abcdef 作者姓名 ${s}`\",\n        \"Supports 'rgb(r,g,b)', 'hsl(h,s,l)', hex (#) and\": \"支持 'rgb(r,g,b)', 'hsl(h,s,l)', hex (#) 和\",\n        \"named colors (e.g. 'black', 'purple'). Color preview:\": \"颜色命名 (例如: 'black', 'purple'). 颜色预览:\",\n        \"oldest (${this.settings.lineAuthor.coloringMaxAge} or older)\": \"最旧 (${this.settings.lineAuthor.coloringMaxAge} 或更旧)\",\n        \":\\\"newest\\\"\": \":\\\"最新\\\"\",\n        \"Too many files to list\": \"文件数量过多，无法列出\",\n        \"Affected files:\": \"受影响的文件:\",\n        \"\\\"1 minute\\\":`${t} minutes`\": \"\\\" 1 分钟\\\":`${t} 分钟`\"\n    }\n}\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-git/main.js",
    "content": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source visit the plugins github repository (https://github.com/denolehov/obsidian-git)\n*/\n\nvar UP=Object.create;var Oo=Object.defineProperty;var GP=Object.getOwnPropertyDescriptor;var zP=Object.getOwnPropertyNames;var VP=Object.getPrototypeOf,WP=Object.prototype.hasOwnProperty;var jv=e=>{throw TypeError(e)};var qP=(e,t,r)=>t in e?Oo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var YP=(e,t)=>()=>(e&&(t=e(e=0)),t);var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),XP=(e,t)=>{for(var r in t)Oo(e,r,{get:t[r],enumerable:!0})},Bv=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of zP(t))!WP.call(e,i)&&i!==r&&Oo(e,i,{get:()=>t[i],enumerable:!(n=GP(t,i))||n.enumerable});return e};var ze=(e,t,r)=>(r=e!=null?UP(VP(e)):{},Bv(t||!e||!e.__esModule?Oo(r,\"default\",{value:e,enumerable:!0}):r,e)),ZP=e=>Bv(Oo({},\"__esModule\",{value:!0}),e);var Cr=(e,t,r)=>qP(e,typeof t!=\"symbol\"?t+\"\":t,r),Hv=(e,t,r)=>t.has(e)||jv(\"Cannot \"+r);var Bt=(e,t,r)=>(Hv(e,t,\"read from private field\"),r?r.call(e):t.get(e)),Pc=(e,t,r)=>t.has(e)?jv(\"Cannot add the same private member more than once\"):t instanceof WeakSet?t.add(e):t.set(e,r),Rc=(e,t,r,n)=>(Hv(e,t,\"write to private field\"),n?n.call(e,r):t.set(e,r),r);var zv=I(Mc=>{\"use strict\";g();Mc.byteLength=JP;Mc.toByteArray=eR;Mc.fromByteArray=nR;var dn=[],Pr=[],KP=typeof Uint8Array!=\"undefined\"?Uint8Array:Array,Qd=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(Xi=0,Uv=Qd.length;Xi<Uv;++Xi)dn[Xi]=Qd[Xi],Pr[Qd.charCodeAt(Xi)]=Xi;var Xi,Uv;Pr[45]=62;Pr[95]=63;function Gv(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=e.indexOf(\"=\");r===-1&&(r=t);var n=r===t?0:4-r%4;return[r,n]}function JP(e){var t=Gv(e),r=t[0],n=t[1];return(r+n)*3/4-n}function QP(e,t,r){return(t+r)*3/4-r}function eR(e){var t,r=Gv(e),n=r[0],i=r[1],a=new KP(QP(e,n,i)),s=0,o=i>0?n-4:n,c;for(c=0;c<o;c+=4)t=Pr[e.charCodeAt(c)]<<18|Pr[e.charCodeAt(c+1)]<<12|Pr[e.charCodeAt(c+2)]<<6|Pr[e.charCodeAt(c+3)],a[s++]=t>>16&255,a[s++]=t>>8&255,a[s++]=t&255;return i===2&&(t=Pr[e.charCodeAt(c)]<<2|Pr[e.charCodeAt(c+1)]>>4,a[s++]=t&255),i===1&&(t=Pr[e.charCodeAt(c)]<<10|Pr[e.charCodeAt(c+1)]<<4|Pr[e.charCodeAt(c+2)]>>2,a[s++]=t>>8&255,a[s++]=t&255),a}function tR(e){return dn[e>>18&63]+dn[e>>12&63]+dn[e>>6&63]+dn[e&63]}function rR(e,t,r){for(var n,i=[],a=t;a<r;a+=3)n=(e[a]<<16&16711680)+(e[a+1]<<8&65280)+(e[a+2]&255),i.push(tR(n));return i.join(\"\")}function nR(e){for(var t,r=e.length,n=r%3,i=[],a=16383,s=0,o=r-n;s<o;s+=a)i.push(rR(e,s,s+a>o?o:s+a));return n===1?(t=e[r-1],i.push(dn[t>>2]+dn[t<<4&63]+\"==\")):n===2&&(t=(e[r-2]<<8)+e[r-1],i.push(dn[t>>10]+dn[t>>4&63]+dn[t<<2&63]+\"=\")),i.join(\"\")}});var Vv=I(eh=>{g();eh.read=function(e,t,r,n,i){var a,s,o=i*8-n-1,c=(1<<o)-1,l=c>>1,u=-7,f=r?i-1:0,d=r?-1:1,h=e[t+f];for(f+=d,a=h&(1<<-u)-1,h>>=-u,u+=o;u>0;a=a*256+e[t+f],f+=d,u-=8);for(s=a&(1<<-u)-1,a>>=-u,u+=n;u>0;s=s*256+e[t+f],f+=d,u-=8);if(a===0)a=1-l;else{if(a===c)return s?NaN:(h?-1:1)*(1/0);s=s+Math.pow(2,n),a=a-l}return(h?-1:1)*s*Math.pow(2,a-n)};eh.write=function(e,t,r,n,i,a){var s,o,c,l=a*8-i-1,u=(1<<l)-1,f=u>>1,d=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:a-1,p=n?1:-1,m=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,s=u):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),s+f>=1?t+=d/c:t+=d*Math.pow(2,1-f),t*c>=2&&(s++,c/=2),s+f>=u?(o=0,s=u):s+f>=1?(o=(t*c-1)*Math.pow(2,i),s=s+f):(o=t*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;e[r+h]=o&255,h+=p,o/=256,i-=8);for(s=s<<i|o,l+=i;l>0;e[r+h]=s&255,h+=p,s/=256,l-=8);e[r+h-p]|=m*128}});var ch=I(Za=>{\"use strict\";g();var th=zv(),Ya=Vv(),Wv=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;Za.Buffer=M;Za.SlowBuffer=cR;Za.INSPECT_MAX_BYTES=50;var Oc=2147483647;Za.kMaxLength=Oc;M.TYPED_ARRAY_SUPPORT=iR();!M.TYPED_ARRAY_SUPPORT&&typeof console!=\"undefined\"&&typeof console.error==\"function\"&&console.error(\"此浏览器缺少类型化数组 (Uint8Array)) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");function iR(){try{let e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),e.foo()===42}catch(e){return!1}}Object.defineProperty(M.prototype,\"parent\",{enumerable:!0,get:function(){if(M.isBuffer(this))return this.buffer}});Object.defineProperty(M.prototype,\"offset\",{enumerable:!0,get:function(){if(M.isBuffer(this))return this.byteOffset}});function Ln(e){if(e>Oc)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,M.prototype),t}function M(e,t,r){if(typeof e==\"number\"){if(typeof t==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return ah(e)}return Zv(e,t,r)}M.poolSize=8192;function Zv(e,t,r){if(typeof e==\"string\")return sR(e,t);if(ArrayBuffer.isView(e))return oR(e);if(e==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(hn(e,ArrayBuffer)||e&&hn(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer!=\"undefined\"&&(hn(e,SharedArrayBuffer)||e&&hn(e.buffer,SharedArrayBuffer)))return nh(e,t,r);if(typeof e==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(n!=null&&n!==e)return M.from(n,t,r);let i=lR(e);if(i)return i;if(typeof Symbol!=\"undefined\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==\"function\")return M.from(e[Symbol.toPrimitive](\"string\"),t,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}M.from=function(e,t,r){return Zv(e,t,r)};Object.setPrototypeOf(M.prototype,Uint8Array.prototype);Object.setPrototypeOf(M,Uint8Array);function Kv(e){if(typeof e!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function aR(e,t,r){return Kv(e),e<=0?Ln(e):t!==void 0?typeof r==\"string\"?Ln(e).fill(t,r):Ln(e).fill(t):Ln(e)}M.alloc=function(e,t,r){return aR(e,t,r)};function ah(e){return Kv(e),Ln(e<0?0:sh(e)|0)}M.allocUnsafe=function(e){return ah(e)};M.allocUnsafeSlow=function(e){return ah(e)};function sR(e,t){if((typeof t!=\"string\"||t===\"\")&&(t=\"utf8\"),!M.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);let r=Jv(e,t)|0,n=Ln(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}function rh(e){let t=e.length<0?0:sh(e.length)|0,r=Ln(t);for(let n=0;n<t;n+=1)r[n]=e[n]&255;return r}function oR(e){if(hn(e,Uint8Array)){let t=new Uint8Array(e);return nh(t.buffer,t.byteOffset,t.byteLength)}return rh(e)}function nh(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');let n;return t===void 0&&r===void 0?n=new Uint8Array(e):r===void 0?n=new Uint8Array(e,t):n=new Uint8Array(e,t,r),Object.setPrototypeOf(n,M.prototype),n}function lR(e){if(M.isBuffer(e)){let t=sh(e.length)|0,r=Ln(t);return r.length===0||e.copy(r,0,0,t),r}if(e.length!==void 0)return typeof e.length!=\"number\"||lh(e.length)?Ln(0):rh(e);if(e.type===\"Buffer\"&&Array.isArray(e.data))return rh(e.data)}function sh(e){if(e>=Oc)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+Oc.toString(16)+\" bytes\");return e|0}function cR(e){return+e!=e&&(e=0),M.alloc(+e)}M.isBuffer=function(t){return t!=null&&t._isBuffer===!0&&t!==M.prototype};M.compare=function(t,r){if(hn(t,Uint8Array)&&(t=M.from(t,t.offset,t.byteLength)),hn(r,Uint8Array)&&(r=M.from(r,r.offset,r.byteLength)),!M.isBuffer(t)||!M.isBuffer(r))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(t===r)return 0;let n=t.length,i=r.length;for(let a=0,s=Math.min(n,i);a<s;++a)if(t[a]!==r[a]){n=t[a],i=r[a];break}return n<i?-1:i<n?1:0};M.isEncoding=function(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}};M.concat=function(t,r){if(!Array.isArray(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(t.length===0)return M.alloc(0);let n;if(r===void 0)for(r=0,n=0;n<t.length;++n)r+=t[n].length;let i=M.allocUnsafe(r),a=0;for(n=0;n<t.length;++n){let s=t[n];if(hn(s,Uint8Array))a+s.length>i.length?(M.isBuffer(s)||(s=M.from(s)),s.copy(i,a)):Uint8Array.prototype.set.call(i,s,a);else if(M.isBuffer(s))s.copy(i,a);else throw new TypeError('\"list\" argument must be an Array of Buffers');a+=s.length}return i};function Jv(e,t){if(M.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||hn(e,ArrayBuffer))return e.byteLength;if(typeof e!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&arguments[2]===!0;if(!n&&r===0)return 0;let i=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return ih(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return r*2;case\"hex\":return r>>>1;case\"base64\":return o1(e).length;default:if(i)return n?-1:ih(e).length;t=(\"\"+t).toLowerCase(),i=!0}}M.byteLength=Jv;function uR(e,t,r){let n=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0,t>>>=0,r<=t))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return bR(this,t,r);case\"utf8\":case\"utf-8\":return e1(this,t,r);case\"ascii\":return yR(this,t,r);case\"latin1\":case\"binary\":return wR(this,t,r);case\"base64\":return gR(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return _R(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}M.prototype._isBuffer=!0;function Zi(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}M.prototype.swap16=function(){let t=this.length;if(t%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let r=0;r<t;r+=2)Zi(this,r,r+1);return this};M.prototype.swap32=function(){let t=this.length;if(t%4!==0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let r=0;r<t;r+=4)Zi(this,r,r+3),Zi(this,r+1,r+2);return this};M.prototype.swap64=function(){let t=this.length;if(t%8!==0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let r=0;r<t;r+=8)Zi(this,r,r+7),Zi(this,r+1,r+6),Zi(this,r+2,r+5),Zi(this,r+3,r+4);return this};M.prototype.toString=function(){let t=this.length;return t===0?\"\":arguments.length===0?e1(this,0,t):uR.apply(this,arguments)};M.prototype.toLocaleString=M.prototype.toString;M.prototype.equals=function(t){if(!M.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this===t?!0:M.compare(this,t)===0};M.prototype.inspect=function(){let t=\"\",r=Za.INSPECT_MAX_BYTES;return t=this.toString(\"hex\",0,r).replace(/(.{2})/g,\"$1 \").trim(),this.length>r&&(t+=\" ... \"),\"<Buffer \"+t+\">\"};Wv&&(M.prototype[Wv]=M.prototype.inspect);M.prototype.compare=function(t,r,n,i,a){if(hn(t,Uint8Array)&&(t=M.from(t,t.offset,t.byteLength)),!M.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(r===void 0&&(r=0),n===void 0&&(n=t?t.length:0),i===void 0&&(i=0),a===void 0&&(a=this.length),r<0||n>t.length||i<0||a>this.length)throw new RangeError(\"out of range index\");if(i>=a&&r>=n)return 0;if(i>=a)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,a>>>=0,this===t)return 0;let s=a-i,o=n-r,c=Math.min(s,o),l=this.slice(i,a),u=t.slice(r,n);for(let f=0;f<c;++f)if(l[f]!==u[f]){s=l[f],o=u[f];break}return s<o?-1:o<s?1:0};function Qv(e,t,r,n,i){if(e.length===0)return-1;if(typeof r==\"string\"?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,lh(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0)if(i)r=0;else return-1;if(typeof t==\"string\"&&(t=M.from(t,n)),M.isBuffer(t))return t.length===0?-1:qv(e,t,r,n,i);if(typeof t==\"number\")return t=t&255,typeof Uint8Array.prototype.indexOf==\"function\"?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):qv(e,[t],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function qv(e,t,r,n,i){let a=1,s=e.length,o=t.length;if(n!==void 0&&(n=String(n).toLowerCase(),n===\"ucs2\"||n===\"ucs-2\"||n===\"utf16le\"||n===\"utf-16le\")){if(e.length<2||t.length<2)return-1;a=2,s/=2,o/=2,r/=2}function c(u,f){return a===1?u[f]:u.readUInt16BE(f*a)}let l;if(i){let u=-1;for(l=r;l<s;l++)if(c(e,l)===c(t,u===-1?0:l-u)){if(u===-1&&(u=l),l-u+1===o)return u*a}else u!==-1&&(l-=l-u),u=-1}else for(r+o>s&&(r=s-o),l=r;l>=0;l--){let u=!0;for(let f=0;f<o;f++)if(c(e,l+f)!==c(t,f)){u=!1;break}if(u)return l}return-1}M.prototype.includes=function(t,r,n){return this.indexOf(t,r,n)!==-1};M.prototype.indexOf=function(t,r,n){return Qv(this,t,r,n,!0)};M.prototype.lastIndexOf=function(t,r,n){return Qv(this,t,r,n,!1)};function fR(e,t,r,n){r=Number(r)||0;let i=e.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;let a=t.length;n>a/2&&(n=a/2);let s;for(s=0;s<n;++s){let o=parseInt(t.substr(s*2,2),16);if(lh(o))return s;e[r+s]=o}return s}function dR(e,t,r,n){return Ic(ih(t,e.length-r),e,r,n)}function hR(e,t,r,n){return Ic(AR(t),e,r,n)}function pR(e,t,r,n){return Ic(o1(t),e,r,n)}function mR(e,t,r,n){return Ic(kR(t,e.length-r),e,r,n)}M.prototype.write=function(t,r,n,i){if(r===void 0)i=\"utf8\",n=this.length,r=0;else if(n===void 0&&typeof r==\"string\")i=r,n=this.length,r=0;else if(isFinite(r))r=r>>>0,isFinite(n)?(n=n>>>0,i===void 0&&(i=\"utf8\")):(i=n,n=void 0);else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");let a=this.length-r;if((n===void 0||n>a)&&(n=a),t.length>0&&(n<0||r<0)||r>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");i||(i=\"utf8\");let s=!1;for(;;)switch(i){case\"hex\":return fR(this,t,r,n);case\"utf8\":case\"utf-8\":return dR(this,t,r,n);case\"ascii\":case\"latin1\":case\"binary\":return hR(this,t,r,n);case\"base64\":return pR(this,t,r,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return mR(this,t,r,n);default:if(s)throw new TypeError(\"Unknown encoding: \"+i);i=(\"\"+i).toLowerCase(),s=!0}};M.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function gR(e,t,r){return t===0&&r===e.length?th.fromByteArray(e):th.fromByteArray(e.slice(t,r))}function e1(e,t,r){r=Math.min(e.length,r);let n=[],i=t;for(;i<r;){let a=e[i],s=null,o=a>239?4:a>223?3:a>191?2:1;if(i+o<=r){let c,l,u,f;switch(o){case 1:a<128&&(s=a);break;case 2:c=e[i+1],(c&192)===128&&(f=(a&31)<<6|c&63,f>127&&(s=f));break;case 3:c=e[i+1],l=e[i+2],(c&192)===128&&(l&192)===128&&(f=(a&15)<<12|(c&63)<<6|l&63,f>2047&&(f<55296||f>57343)&&(s=f));break;case 4:c=e[i+1],l=e[i+2],u=e[i+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(f=(a&15)<<18|(c&63)<<12|(l&63)<<6|u&63,f>65535&&f<1114112&&(s=f))}}s===null?(s=65533,o=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),i+=o}return vR(n)}var Yv=4096;function vR(e){let t=e.length;if(t<=Yv)return String.fromCharCode.apply(String,e);let r=\"\",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=Yv));return r}function yR(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]&127);return n}function wR(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function bR(e,t,r){let n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);let i=\"\";for(let a=t;a<r;++a)i+=TR[e[a]];return i}function _R(e,t,r){let n=e.slice(t,r),i=\"\";for(let a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+n[a+1]*256);return i}M.prototype.slice=function(t,r){let n=this.length;t=~~t,r=r===void 0?n:~~r,t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),r<0?(r+=n,r<0&&(r=0)):r>n&&(r=n),r<t&&(r=t);let i=this.subarray(t,r);return Object.setPrototypeOf(i,M.prototype),i};function yt(e,t,r){if(e%1!==0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}M.prototype.readUintLE=M.prototype.readUIntLE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t],a=1,s=0;for(;++s<r&&(a*=256);)i+=this[t+s]*a;return i};M.prototype.readUintBE=M.prototype.readUIntBE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t+--r],a=1;for(;r>0&&(a*=256);)i+=this[t+--r]*a;return i};M.prototype.readUint8=M.prototype.readUInt8=function(t,r){return t=t>>>0,r||yt(t,1,this.length),this[t]};M.prototype.readUint16LE=M.prototype.readUInt16LE=function(t,r){return t=t>>>0,r||yt(t,2,this.length),this[t]|this[t+1]<<8};M.prototype.readUint16BE=M.prototype.readUInt16BE=function(t,r){return t=t>>>0,r||yt(t,2,this.length),this[t]<<8|this[t+1]};M.prototype.readUint32LE=M.prototype.readUInt32LE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+this[t+3]*16777216};M.prototype.readUint32BE=M.prototype.readUInt32BE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]*16777216+(this[t+1]<<16|this[t+2]<<8|this[t+3])};M.prototype.readBigUInt64LE=ui(function(t){t=t>>>0,Xa(t,\"offset\");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=r+this[++t]*2**8+this[++t]*2**16+this[++t]*2**24,a=this[++t]+this[++t]*2**8+this[++t]*2**16+n*2**24;return BigInt(i)+(BigInt(a)<<BigInt(32))});M.prototype.readBigUInt64BE=ui(function(t){t=t>>>0,Xa(t,\"offset\");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=r*2**24+this[++t]*2**16+this[++t]*2**8+this[++t],a=this[++t]*2**24+this[++t]*2**16+this[++t]*2**8+n;return(BigInt(i)<<BigInt(32))+BigInt(a)});M.prototype.readIntLE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t],a=1,s=0;for(;++s<r&&(a*=256);)i+=this[t+s]*a;return a*=128,i>=a&&(i-=Math.pow(2,8*r)),i};M.prototype.readIntBE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=r,a=1,s=this[t+--i];for(;i>0&&(a*=256);)s+=this[t+--i]*a;return a*=128,s>=a&&(s-=Math.pow(2,8*r)),s};M.prototype.readInt8=function(t,r){return t=t>>>0,r||yt(t,1,this.length),this[t]&128?(255-this[t]+1)*-1:this[t]};M.prototype.readInt16LE=function(t,r){t=t>>>0,r||yt(t,2,this.length);let n=this[t]|this[t+1]<<8;return n&32768?n|4294901760:n};M.prototype.readInt16BE=function(t,r){t=t>>>0,r||yt(t,2,this.length);let n=this[t+1]|this[t]<<8;return n&32768?n|4294901760:n};M.prototype.readInt32LE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24};M.prototype.readInt32BE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]};M.prototype.readBigInt64LE=ui(function(t){t=t>>>0,Xa(t,\"offset\");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=this[t+4]+this[t+5]*2**8+this[t+6]*2**16+(n<<24);return(BigInt(i)<<BigInt(32))+BigInt(r+this[++t]*2**8+this[++t]*2**16+this[++t]*2**24)});M.prototype.readBigInt64BE=ui(function(t){t=t>>>0,Xa(t,\"offset\");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=(r<<24)+this[++t]*2**16+this[++t]*2**8+this[++t];return(BigInt(i)<<BigInt(32))+BigInt(this[++t]*2**24+this[++t]*2**16+this[++t]*2**8+n)});M.prototype.readFloatLE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),Ya.read(this,t,!0,23,4)};M.prototype.readFloatBE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),Ya.read(this,t,!1,23,4)};M.prototype.readDoubleLE=function(t,r){return t=t>>>0,r||yt(t,8,this.length),Ya.read(this,t,!0,52,8)};M.prototype.readDoubleBE=function(t,r){return t=t>>>0,r||yt(t,8,this.length),Ya.read(this,t,!1,52,8)};function Kt(e,t,r,n,i,a){if(!M.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>i||t<a)throw new RangeError('\"value\" argument is out of bounds');if(r+n>e.length)throw new RangeError(\"Index out of range\")}M.prototype.writeUintLE=M.prototype.writeUIntLE=function(t,r,n,i){if(t=+t,r=r>>>0,n=n>>>0,!i){let o=Math.pow(2,8*n)-1;Kt(this,t,r,n,o,0)}let a=1,s=0;for(this[r]=t&255;++s<n&&(a*=256);)this[r+s]=t/a&255;return r+n};M.prototype.writeUintBE=M.prototype.writeUIntBE=function(t,r,n,i){if(t=+t,r=r>>>0,n=n>>>0,!i){let o=Math.pow(2,8*n)-1;Kt(this,t,r,n,o,0)}let a=n-1,s=1;for(this[r+a]=t&255;--a>=0&&(s*=256);)this[r+a]=t/s&255;return r+n};M.prototype.writeUint8=M.prototype.writeUInt8=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,1,255,0),this[r]=t&255,r+1};M.prototype.writeUint16LE=M.prototype.writeUInt16LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,65535,0),this[r]=t&255,this[r+1]=t>>>8,r+2};M.prototype.writeUint16BE=M.prototype.writeUInt16BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,65535,0),this[r]=t>>>8,this[r+1]=t&255,r+2};M.prototype.writeUint32LE=M.prototype.writeUInt32LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,4294967295,0),this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=t&255,r+4};M.prototype.writeUint32BE=M.prototype.writeUInt32BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,4294967295,0),this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=t&255,r+4};function t1(e,t,r,n,i){s1(t,n,i,e,r,7);let a=Number(t&BigInt(4294967295));e[r++]=a,a=a>>8,e[r++]=a,a=a>>8,e[r++]=a,a=a>>8,e[r++]=a;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,r}function r1(e,t,r,n,i){s1(t,n,i,e,r,7);let a=Number(t&BigInt(4294967295));e[r+7]=a,a=a>>8,e[r+6]=a,a=a>>8,e[r+5]=a,a=a>>8,e[r+4]=a;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s=s>>8,e[r+2]=s,s=s>>8,e[r+1]=s,s=s>>8,e[r]=s,r+8}M.prototype.writeBigUInt64LE=ui(function(t,r=0){return t1(this,t,r,BigInt(0),BigInt(\"0xffffffffffffffff\"))});M.prototype.writeBigUInt64BE=ui(function(t,r=0){return r1(this,t,r,BigInt(0),BigInt(\"0xffffffffffffffff\"))});M.prototype.writeIntLE=function(t,r,n,i){if(t=+t,r=r>>>0,!i){let c=Math.pow(2,8*n-1);Kt(this,t,r,n,c-1,-c)}let a=0,s=1,o=0;for(this[r]=t&255;++a<n&&(s*=256);)t<0&&o===0&&this[r+a-1]!==0&&(o=1),this[r+a]=(t/s>>0)-o&255;return r+n};M.prototype.writeIntBE=function(t,r,n,i){if(t=+t,r=r>>>0,!i){let c=Math.pow(2,8*n-1);Kt(this,t,r,n,c-1,-c)}let a=n-1,s=1,o=0;for(this[r+a]=t&255;--a>=0&&(s*=256);)t<0&&o===0&&this[r+a+1]!==0&&(o=1),this[r+a]=(t/s>>0)-o&255;return r+n};M.prototype.writeInt8=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,1,127,-128),t<0&&(t=255+t+1),this[r]=t&255,r+1};M.prototype.writeInt16LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,32767,-32768),this[r]=t&255,this[r+1]=t>>>8,r+2};M.prototype.writeInt16BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,32767,-32768),this[r]=t>>>8,this[r+1]=t&255,r+2};M.prototype.writeInt32LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,2147483647,-2147483648),this[r]=t&255,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24,r+4};M.prototype.writeInt32BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=t&255,r+4};M.prototype.writeBigInt64LE=ui(function(t,r=0){return t1(this,t,r,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});M.prototype.writeBigInt64BE=ui(function(t,r=0){return r1(this,t,r,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});function n1(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function i1(e,t,r,n,i){return t=+t,r=r>>>0,i||n1(e,t,r,4,34028234663852886e22,-34028234663852886e22),Ya.write(e,t,r,n,23,4),r+4}M.prototype.writeFloatLE=function(t,r,n){return i1(this,t,r,!0,n)};M.prototype.writeFloatBE=function(t,r,n){return i1(this,t,r,!1,n)};function a1(e,t,r,n,i){return t=+t,r=r>>>0,i||n1(e,t,r,8,17976931348623157e292,-17976931348623157e292),Ya.write(e,t,r,n,52,8),r+8}M.prototype.writeDoubleLE=function(t,r,n){return a1(this,t,r,!0,n)};M.prototype.writeDoubleBE=function(t,r,n){return a1(this,t,r,!1,n)};M.prototype.copy=function(t,r,n,i){if(!M.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(n||(n=0),!i&&i!==0&&(i=this.length),r>=t.length&&(r=t.length),r||(r=0),i>0&&i<n&&(i=n),i===n||t.length===0||this.length===0)return 0;if(r<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=this.length)throw new RangeError(\"Index out of range\");if(i<0)throw new RangeError(\"sourceEnd out of bounds\");i>this.length&&(i=this.length),t.length-r<i-n&&(i=t.length-r+n);let a=i-n;return this===t&&typeof Uint8Array.prototype.copyWithin==\"function\"?this.copyWithin(r,n,i):Uint8Array.prototype.set.call(t,this.subarray(n,i),r),a};M.prototype.fill=function(t,r,n,i){if(typeof t==\"string\"){if(typeof r==\"string\"?(i=r,r=0,n=this.length):typeof n==\"string\"&&(i=n,n=this.length),i!==void 0&&typeof i!=\"string\")throw new TypeError(\"encoding must be a string\");if(typeof i==\"string\"&&!M.isEncoding(i))throw new TypeError(\"Unknown encoding: \"+i);if(t.length===1){let s=t.charCodeAt(0);(i===\"utf8\"&&s<128||i===\"latin1\")&&(t=s)}}else typeof t==\"number\"?t=t&255:typeof t==\"boolean\"&&(t=Number(t));if(r<0||this.length<r||this.length<n)throw new RangeError(\"Out of range index\");if(n<=r)return this;r=r>>>0,n=n===void 0?this.length:n>>>0,t||(t=0);let a;if(typeof t==\"number\")for(a=r;a<n;++a)this[a]=t;else{let s=M.isBuffer(t)?t:M.from(t,i),o=s.length;if(o===0)throw new TypeError('The value \"'+t+'\" is invalid for argument \"value\"');for(a=0;a<n-r;++a)this[a+r]=s[a%o]}return this};var qa={};function oh(e,t,r){qa[e]=class extends r{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(i){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:i,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}oh(\"ERR_BUFFER_OUT_OF_BOUNDS\",function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"},RangeError);oh(\"ERR_INVALID_ARG_TYPE\",function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`},TypeError);oh(\"ERR_OUT_OF_RANGE\",function(e,t,r){let n=`The value of \"${e}\" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Xv(String(r)):typeof r==\"bigint\"&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=Xv(i)),i+=\"n\"),n+=` It must be ${t}. Received ${i}`,n},RangeError);function Xv(e){let t=\"\",r=e.length,n=e[0]===\"-\"?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function xR(e,t,r){Xa(t,\"offset\"),(e[t]===void 0||e[t+r]===void 0)&&Io(t,e.length-(r+1))}function s1(e,t,r,n,i,a){if(e>r||e<t){let s=typeof t==\"bigint\"?\"n\":\"\",o;throw a>3?t===0||t===BigInt(0)?o=`>= 0${s} and < 2${s} ** ${(a+1)*8}${s}`:o=`>= -(2${s} ** ${(a+1)*8-1}${s}) and < 2 ** ${(a+1)*8-1}${s}`:o=`>= ${t}${s} and <= ${r}${s}`,new qa.ERR_OUT_OF_RANGE(\"value\",o,e)}xR(n,i,a)}function Xa(e,t){if(typeof e!=\"number\")throw new qa.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function Io(e,t,r){throw Math.floor(e)!==e?(Xa(e,r),new qa.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",e)):t<0?new qa.ERR_BUFFER_OUT_OF_BOUNDS:new qa.ERR_OUT_OF_RANGE(r||\"offset\",`>= ${r?1:0} and <= ${t}`,e)}var SR=/[^+/0-9A-Za-z-_]/g;function ER(e){if(e=e.split(\"=\")[0],e=e.trim().replace(SR,\"\"),e.length<2)return\"\";for(;e.length%4!==0;)e=e+\"=\";return e}function ih(e,t){t=t||1/0;let r,n=e.length,i=null,a=[];for(let s=0;s<n;++s){if(r=e.charCodeAt(s),r>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}else if(s+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw new Error(\"Invalid code point\")}return a}function AR(e){let t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r)&255);return t}function kR(e,t){let r,n,i,a=[];for(let s=0;s<e.length&&!((t-=2)<0);++s)r=e.charCodeAt(s),n=r>>8,i=r%256,a.push(i),a.push(n);return a}function o1(e){return th.toByteArray(ER(e))}function Ic(e,t,r,n){let i;for(i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function hn(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}function lh(e){return e!==e}var TR=function(){let e=\"0123456789abcdef\",t=new Array(256);for(let r=0;r<16;++r){let n=r*16;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function ui(e){return typeof BigInt==\"undefined\"?CR:e}function CR(){throw new Error(\"BigInt not supported\")}});var l1,uh,Buffer,g=YP(()=>{l1=require(\"obsidian\");l1.Platform.isMobileApp?uh=ch().Buffer:uh=global.Buffer;Buffer=uh});var u1=I((XH,c1)=>{\"use strict\";g();var dr=function(e){if(e=e||{},this.Promise=e.Promise||Promise,this.queues=Object.create(null),this.domainReentrant=e.domainReentrant||!1,this.domainReentrant){if(typeof process==\"undefined\"||typeof process.domain==\"undefined\")throw new Error(\"Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, use a NodeJS version that still implements Domain, or install a browser polyfill.\");this.domains=Object.create(null)}this.timeout=e.timeout||dr.DEFAULT_TIMEOUT,this.maxOccupationTime=e.maxOccupationTime||dr.DEFAULT_MAX_OCCUPATION_TIME,this.maxExecutionTime=e.maxExecutionTime||dr.DEFAULT_MAX_EXECUTION_TIME,e.maxPending===1/0||Number.isInteger(e.maxPending)&&e.maxPending>=0?this.maxPending=e.maxPending:this.maxPending=dr.DEFAULT_MAX_PENDING};dr.DEFAULT_TIMEOUT=0;dr.DEFAULT_MAX_OCCUPATION_TIME=0;dr.DEFAULT_MAX_EXECUTION_TIME=0;dr.DEFAULT_MAX_PENDING=1e3;dr.prototype.acquire=function(e,t,r,n){if(Array.isArray(e))return this._acquireBatch(e,t,r,n);if(typeof t!=\"function\")throw new Error(\"You must pass a function to execute\");var i=null,a=null,s=null;typeof r!=\"function\"&&(n=r,r=null,s=new this.Promise(function(b,x){i=b,a=x})),n=n||{};var o=!1,c=null,l=null,u=null,f=this,d=function(b,x,E){l&&(clearTimeout(l),l=null),u&&(clearTimeout(u),u=null),b&&(f.queues[e]&&f.queues[e].length===0&&delete f.queues[e],f.domainReentrant&&delete f.domains[e]),o||(s?x?a(x):i(E):typeof r==\"function\"&&r(x,E),o=!0),b&&f.queues[e]&&f.queues[e].length>0&&f.queues[e].shift()()},h=function(b){if(o)return d(b);c&&(clearTimeout(c),c=null),f.domainReentrant&&b&&(f.domains[e]=process.domain);var x=n.maxExecutionTime||f.maxExecutionTime;if(x&&(u=setTimeout(function(){f.queues[e]&&d(b,new Error(\"Maximum execution time is exceeded \"+e))},x)),t.length===1){var E=!1;try{t(function(_,k){E||(E=!0,d(b,_,k))})}catch(_){E||(E=!0,d(b,_))}}else f._promiseTry(function(){return t()}).then(function(_){d(b,void 0,_)},function(_){d(b,_)})};f.domainReentrant&&process.domain&&(h=process.domain.bind(h));var p=n.maxPending||f.maxPending;if(!f.queues[e])f.queues[e]=[],h(!0);else if(f.domainReentrant&&process.domain&&process.domain===f.domains[e])h(!1);else if(f.queues[e].length>=p)d(!1,new Error(\"Too many pending tasks in queue \"+e));else{var m=function(){h(!0)};n.skipQueue?f.queues[e].unshift(m):f.queues[e].push(m);var v=n.timeout||f.timeout;v&&(c=setTimeout(function(){c=null,d(!1,new Error(\"async-lock timed out in queue \"+e))},v))}var y=n.maxOccupationTime||f.maxOccupationTime;if(y&&(l=setTimeout(function(){f.queues[e]&&d(!1,new Error(\"Maximum occupation time is exceeded in queue \"+e))},y)),s)return s};dr.prototype._acquireBatch=function(e,t,r,n){typeof r!=\"function\"&&(n=r,r=null);var i=this,a=function(o,c){return function(l){i.acquire(o,c,l,n)}},s=e.reduceRight(function(o,c){return a(c,o)},t);if(typeof r==\"function\")s(r);else return new this.Promise(function(o,c){s.length===1?s(function(l,u){l?c(l):o(u)}):o(s())})};dr.prototype.isBusy=function(e){return e?!!this.queues[e]:Object.keys(this.queues).length>0};dr.prototype._promiseTry=function(e){try{return this.Promise.resolve(e())}catch(t){return this.Promise.reject(t)}};c1.exports=dr});var d1=I((KH,f1)=>{\"use strict\";g();f1.exports=u1()});var h1=I((QH,fh)=>{g();typeof Object.create==\"function\"?fh.exports=function(t,r){r&&(t.super_=r,t.prototype=Object.create(r.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:fh.exports=function(t,r){if(r){t.super_=r;var n=function(){};n.prototype=r.prototype,t.prototype=new n,t.prototype.constructor=t}}});var hh=I((dh,m1)=>{g();var Fc=ch(),pn=Fc.Buffer;function p1(e,t){for(var r in e)t[r]=e[r]}pn.from&&pn.alloc&&pn.allocUnsafe&&pn.allocUnsafeSlow?m1.exports=Fc:(p1(Fc,dh),dh.Buffer=Ki);function Ki(e,t,r){return pn(e,t,r)}Ki.prototype=Object.create(pn.prototype);p1(pn,Ki);Ki.from=function(e,t,r){if(typeof e==\"number\")throw new TypeError(\"Argument must not be a number\");return pn(e,t,r)};Ki.alloc=function(e,t,r){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");var n=pn(e);return t!==void 0?typeof r==\"string\"?n.fill(t,r):n.fill(t):n.fill(0),n};Ki.allocUnsafe=function(e){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");return pn(e)};Ki.allocUnsafeSlow=function(e){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");return Fc.SlowBuffer(e)}});var y1=I((rU,v1)=>{g();var g1=hh().Buffer;function $c(e,t){this._block=g1.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}$c.prototype.update=function(e,t){typeof e==\"string\"&&(t=t||\"utf8\",e=g1.from(e,t));for(var r=this._block,n=this._blockSize,i=e.length,a=this._len,s=0;s<i;){for(var o=a%n,c=Math.min(i-s,n-o),l=0;l<c;l++)r[o+l]=e[s+l];a+=c,s+=c,a%n===0&&this._update(r)}return this._len+=i,this};$c.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=this._len*8;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(r&4294967295)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var a=this._hash();return e?a.toString(e):a};$c.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")};v1.exports=$c});var _1=I((iU,b1)=>{g();var PR=h1(),w1=y1(),RR=hh().Buffer,MR=[1518500249,1859775393,-1894007588,-899497514],OR=new Array(80);function Fo(){this.init(),this._w=OR,w1.call(this,64,56)}PR(Fo,w1);Fo.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function IR(e){return e<<1|e>>>31}function FR(e){return e<<5|e>>>27}function $R(e){return e<<30|e>>>2}function LR(e,t,r,n){return e===0?t&r|~t&n:e===2?t&r|t&n|r&n:t^r^n}Fo.prototype._update=function(e){for(var t=this._w,r=this._a|0,n=this._b|0,i=this._c|0,a=this._d|0,s=this._e|0,o=0;o<16;++o)t[o]=e.readInt32BE(o*4);for(;o<80;++o)t[o]=IR(t[o-3]^t[o-8]^t[o-14]^t[o-16]);for(var c=0;c<80;++c){var l=~~(c/20),u=FR(r)+LR(l,n,i,a)+s+t[c]+MR[l]|0;s=a,a=i,i=$R(n),n=r,r=u}this._a=r+this._a|0,this._b=n+this._b|0,this._c=i+this._c|0,this._d=a+this._d|0,this._e=s+this._e|0};Fo.prototype._hash=function(){var e=RR.allocUnsafe(20);return e.writeInt32BE(this._a|0,0),e.writeInt32BE(this._b|0,4),e.writeInt32BE(this._c|0,8),e.writeInt32BE(this._d|0,12),e.writeInt32BE(this._e|0,16),e};b1.exports=Fo});var S1=I(ph=>{g();var x1;(function(e){typeof DO_NOT_EXPORT_CRC==\"undefined\"?typeof ph==\"object\"?e(ph):typeof define==\"function\"&&define.amd?define(function(){var t={};return e(t),t}):e(x1={}):e(x1={})})(function(e){e.version=\"1.2.2\";function t(){for(var w=0,A=new Array(256),S=0;S!=256;++S)w=S,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,A[S]=w;return typeof Int32Array!=\"undefined\"?new Int32Array(A):A}var r=t();function n(w){var A=0,S=0,T=0,P=typeof Int32Array!=\"undefined\"?new Int32Array(4096):new Array(4096);for(T=0;T!=256;++T)P[T]=w[T];for(T=0;T!=256;++T)for(S=w[T],A=256+T;A<4096;A+=256)S=P[A]=S>>>8^w[S&255];var O=[];for(T=1;T!=16;++T)O[T-1]=typeof Int32Array!=\"undefined\"?P.subarray(T*256,T*256+256):P.slice(T*256,T*256+256);return O}var i=n(r),a=i[0],s=i[1],o=i[2],c=i[3],l=i[4],u=i[5],f=i[6],d=i[7],h=i[8],p=i[9],m=i[10],v=i[11],y=i[12],b=i[13],x=i[14];function E(w,A){for(var S=A^-1,T=0,P=w.length;T<P;)S=S>>>8^r[(S^w.charCodeAt(T++))&255];return~S}function _(w,A){for(var S=A^-1,T=w.length-15,P=0;P<T;)S=x[w[P++]^S&255]^b[w[P++]^S>>8&255]^y[w[P++]^S>>16&255]^v[w[P++]^S>>>24]^m[w[P++]]^p[w[P++]]^h[w[P++]]^d[w[P++]]^f[w[P++]]^u[w[P++]]^l[w[P++]]^c[w[P++]]^o[w[P++]]^s[w[P++]]^a[w[P++]]^r[w[P++]];for(T+=15;P<T;)S=S>>>8^r[(S^w[P++])&255];return~S}function k(w,A){for(var S=A^-1,T=0,P=w.length,O=0,j=0;T<P;)O=w.charCodeAt(T++),O<128?S=S>>>8^r[(S^O)&255]:O<2048?(S=S>>>8^r[(S^(192|O>>6&31))&255],S=S>>>8^r[(S^(128|O&63))&255]):O>=55296&&O<57344?(O=(O&1023)+64,j=w.charCodeAt(T++)&1023,S=S>>>8^r[(S^(240|O>>8&7))&255],S=S>>>8^r[(S^(128|O>>2&63))&255],S=S>>>8^r[(S^(128|j>>6&15|(O&3)<<4))&255],S=S>>>8^r[(S^(128|j&63))&255]):(S=S>>>8^r[(S^(224|O>>12&15))&255],S=S>>>8^r[(S^(128|O>>6&63))&255],S=S>>>8^r[(S^(128|O&63))&255]);return~S}e.table=r,e.bstr=E,e.buf=_,e.str=k})});var Dn=I(Ht=>{\"use strict\";g();var DR=typeof Uint8Array!=\"undefined\"&&typeof Uint16Array!=\"undefined\"&&typeof Int32Array!=\"undefined\";function NR(e,t){return Object.prototype.hasOwnProperty.call(e,t)}Ht.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(typeof r!=\"object\")throw new TypeError(r+\"must be non-object\");for(var n in r)NR(r,n)&&(e[n]=r[n])}}return e};Ht.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var jR={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray){e.set(t.subarray(r,r+n),i);return}for(var a=0;a<n;a++)e[i+a]=t[r+a]},flattenChunks:function(e){var t,r,n,i,a,s;for(n=0,t=0,r=e.length;t<r;t++)n+=e[t].length;for(s=new Uint8Array(n),i=0,t=0,r=e.length;t<r;t++)a=e[t],s.set(a,i),i+=a.length;return s}},BR={arraySet:function(e,t,r,n,i){for(var a=0;a<n;a++)e[i+a]=t[r+a]},flattenChunks:function(e){return[].concat.apply([],e)}};Ht.setTyped=function(e){e?(Ht.Buf8=Uint8Array,Ht.Buf16=Uint16Array,Ht.Buf32=Int32Array,Ht.assign(Ht,jR)):(Ht.Buf8=Array,Ht.Buf16=Array,Ht.Buf32=Array,Ht.assign(Ht,BR))};Ht.setTyped(DR)});var W1=I(Qa=>{\"use strict\";g();var HR=Dn(),UR=4,E1=0,A1=1,GR=2;function Ja(e){for(var t=e.length;--t>=0;)e[t]=0}var zR=0,M1=1,VR=2,WR=3,qR=258,_h=29,Bo=256,Lo=Bo+1+_h,Ka=30,xh=19,O1=2*Lo+1,Ji=15,mh=16,YR=7,Sh=256,I1=16,F1=17,$1=18,wh=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],Lc=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],XR=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],L1=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ZR=512,Nn=new Array((Lo+2)*2);Ja(Nn);var $o=new Array(Ka*2);Ja($o);var Do=new Array(ZR);Ja(Do);var No=new Array(qR-WR+1);Ja(No);var Eh=new Array(_h);Ja(Eh);var Dc=new Array(Ka);Ja(Dc);function gh(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}var D1,N1,j1;function vh(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function B1(e){return e<256?Do[e]:Do[256+(e>>>7)]}function jo(e,t){e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255}function Jt(e,t,r){e.bi_valid>mh-r?(e.bi_buf|=t<<e.bi_valid&65535,jo(e,e.bi_buf),e.bi_buf=t>>mh-e.bi_valid,e.bi_valid+=r-mh):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function mn(e,t,r){Jt(e,r[t*2],r[t*2+1])}function H1(e,t){var r=0;do r|=e&1,e>>>=1,r<<=1;while(--t>0);return r>>>1}function KR(e){e.bi_valid===16?(jo(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)}function JR(e,t){var r=t.dyn_tree,n=t.max_code,i=t.stat_desc.static_tree,a=t.stat_desc.has_stree,s=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,u,f,d,h,p,m=0;for(d=0;d<=Ji;d++)e.bl_count[d]=0;for(r[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<O1;l++)u=e.heap[l],d=r[r[u*2+1]*2+1]+1,d>c&&(d=c,m++),r[u*2+1]=d,!(u>n)&&(e.bl_count[d]++,h=0,u>=o&&(h=s[u-o]),p=r[u*2],e.opt_len+=p*(d+h),a&&(e.static_len+=p*(i[u*2+1]+h)));if(m!==0){do{for(d=c-1;e.bl_count[d]===0;)d--;e.bl_count[d]--,e.bl_count[d+1]+=2,e.bl_count[c]--,m-=2}while(m>0);for(d=c;d!==0;d--)for(u=e.bl_count[d];u!==0;)f=e.heap[--l],!(f>n)&&(r[f*2+1]!==d&&(e.opt_len+=(d-r[f*2+1])*r[f*2],r[f*2+1]=d),u--)}}function U1(e,t,r){var n=new Array(Ji+1),i=0,a,s;for(a=1;a<=Ji;a++)n[a]=i=i+r[a-1]<<1;for(s=0;s<=t;s++){var o=e[s*2+1];o!==0&&(e[s*2]=H1(n[o]++,o))}}function QR(){var e,t,r,n,i,a=new Array(Ji+1);for(r=0,n=0;n<_h-1;n++)for(Eh[n]=r,e=0;e<1<<wh[n];e++)No[r++]=n;for(No[r-1]=n,i=0,n=0;n<16;n++)for(Dc[n]=i,e=0;e<1<<Lc[n];e++)Do[i++]=n;for(i>>=7;n<Ka;n++)for(Dc[n]=i<<7,e=0;e<1<<Lc[n]-7;e++)Do[256+i++]=n;for(t=0;t<=Ji;t++)a[t]=0;for(e=0;e<=143;)Nn[e*2+1]=8,e++,a[8]++;for(;e<=255;)Nn[e*2+1]=9,e++,a[9]++;for(;e<=279;)Nn[e*2+1]=7,e++,a[7]++;for(;e<=287;)Nn[e*2+1]=8,e++,a[8]++;for(U1(Nn,Lo+1,a),e=0;e<Ka;e++)$o[e*2+1]=5,$o[e*2]=H1(e,5);D1=new gh(Nn,wh,Bo+1,Lo,Ji),N1=new gh($o,Lc,0,Ka,Ji),j1=new gh(new Array(0),XR,0,xh,YR)}function G1(e){var t;for(t=0;t<Lo;t++)e.dyn_ltree[t*2]=0;for(t=0;t<Ka;t++)e.dyn_dtree[t*2]=0;for(t=0;t<xh;t++)e.bl_tree[t*2]=0;e.dyn_ltree[Sh*2]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function z1(e){e.bi_valid>8?jo(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function e5(e,t,r,n){z1(e),n&&(jo(e,r),jo(e,~r)),HR.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}function k1(e,t,r,n){var i=t*2,a=r*2;return e[i]<e[a]||e[i]===e[a]&&n[t]<=n[r]}function yh(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&k1(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!k1(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function T1(e,t,r){var n,i,a=0,s,o;if(e.last_lit!==0)do n=e.pending_buf[e.d_buf+a*2]<<8|e.pending_buf[e.d_buf+a*2+1],i=e.pending_buf[e.l_buf+a],a++,n===0?mn(e,i,t):(s=No[i],mn(e,s+Bo+1,t),o=wh[s],o!==0&&(i-=Eh[s],Jt(e,i,o)),n--,s=B1(n),mn(e,s,r),o=Lc[s],o!==0&&(n-=Dc[s],Jt(e,n,o)));while(a<e.last_lit);mn(e,Sh,t)}function bh(e,t){var r=t.dyn_tree,n=t.stat_desc.static_tree,i=t.stat_desc.has_stree,a=t.stat_desc.elems,s,o,c=-1,l;for(e.heap_len=0,e.heap_max=O1,s=0;s<a;s++)r[s*2]!==0?(e.heap[++e.heap_len]=c=s,e.depth[s]=0):r[s*2+1]=0;for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,r[l*2]=1,e.depth[l]=0,e.opt_len--,i&&(e.static_len-=n[l*2+1]);for(t.max_code=c,s=e.heap_len>>1;s>=1;s--)yh(e,r,s);l=a;do s=e.heap[1],e.heap[1]=e.heap[e.heap_len--],yh(e,r,1),o=e.heap[1],e.heap[--e.heap_max]=s,e.heap[--e.heap_max]=o,r[l*2]=r[s*2]+r[o*2],e.depth[l]=(e.depth[s]>=e.depth[o]?e.depth[s]:e.depth[o])+1,r[s*2+1]=r[o*2+1]=l,e.heap[1]=l++,yh(e,r,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],JR(e,t),U1(r,c,e.bl_count)}function C1(e,t,r){var n,i=-1,a,s=t[0*2+1],o=0,c=7,l=4;for(s===0&&(c=138,l=3),t[(r+1)*2+1]=65535,n=0;n<=r;n++)a=s,s=t[(n+1)*2+1],!(++o<c&&a===s)&&(o<l?e.bl_tree[a*2]+=o:a!==0?(a!==i&&e.bl_tree[a*2]++,e.bl_tree[I1*2]++):o<=10?e.bl_tree[F1*2]++:e.bl_tree[$1*2]++,o=0,i=a,s===0?(c=138,l=3):a===s?(c=6,l=3):(c=7,l=4))}function P1(e,t,r){var n,i=-1,a,s=t[0*2+1],o=0,c=7,l=4;for(s===0&&(c=138,l=3),n=0;n<=r;n++)if(a=s,s=t[(n+1)*2+1],!(++o<c&&a===s)){if(o<l)do mn(e,a,e.bl_tree);while(--o!==0);else a!==0?(a!==i&&(mn(e,a,e.bl_tree),o--),mn(e,I1,e.bl_tree),Jt(e,o-3,2)):o<=10?(mn(e,F1,e.bl_tree),Jt(e,o-3,3)):(mn(e,$1,e.bl_tree),Jt(e,o-11,7));o=0,i=a,s===0?(c=138,l=3):a===s?(c=6,l=3):(c=7,l=4)}}function t5(e){var t;for(C1(e,e.dyn_ltree,e.l_desc.max_code),C1(e,e.dyn_dtree,e.d_desc.max_code),bh(e,e.bl_desc),t=xh-1;t>=3&&e.bl_tree[L1[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t}function r5(e,t,r,n){var i;for(Jt(e,t-257,5),Jt(e,r-1,5),Jt(e,n-4,4),i=0;i<n;i++)Jt(e,e.bl_tree[L1[i]*2+1],3);P1(e,e.dyn_ltree,t-1),P1(e,e.dyn_dtree,r-1)}function n5(e){var t=4093624447,r;for(r=0;r<=31;r++,t>>>=1)if(t&1&&e.dyn_ltree[r*2]!==0)return E1;if(e.dyn_ltree[9*2]!==0||e.dyn_ltree[10*2]!==0||e.dyn_ltree[13*2]!==0)return A1;for(r=32;r<Bo;r++)if(e.dyn_ltree[r*2]!==0)return A1;return E1}var R1=!1;function i5(e){R1||(QR(),R1=!0),e.l_desc=new vh(e.dyn_ltree,D1),e.d_desc=new vh(e.dyn_dtree,N1),e.bl_desc=new vh(e.bl_tree,j1),e.bi_buf=0,e.bi_valid=0,G1(e)}function V1(e,t,r,n){Jt(e,(zR<<1)+(n?1:0),3),e5(e,t,r,!0)}function a5(e){Jt(e,M1<<1,3),mn(e,Sh,Nn),KR(e)}function s5(e,t,r,n){var i,a,s=0;e.level>0?(e.strm.data_type===GR&&(e.strm.data_type=n5(e)),bh(e,e.l_desc),bh(e,e.d_desc),s=t5(e),i=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=i&&(i=a)):i=a=r+5,r+4<=i&&t!==-1?V1(e,t,r,n):e.strategy===UR||a===i?(Jt(e,(M1<<1)+(n?1:0),3),T1(e,Nn,$o)):(Jt(e,(VR<<1)+(n?1:0),3),r5(e,e.l_desc.max_code+1,e.d_desc.max_code+1,s+1),T1(e,e.dyn_ltree,e.dyn_dtree)),G1(e),n&&z1(e)}function o5(e,t,r){return e.pending_buf[e.d_buf+e.last_lit*2]=t>>>8&255,e.pending_buf[e.d_buf+e.last_lit*2+1]=t&255,e.pending_buf[e.l_buf+e.last_lit]=r&255,e.last_lit++,t===0?e.dyn_ltree[r*2]++:(e.matches++,t--,e.dyn_ltree[(No[r]+Bo+1)*2]++,e.dyn_dtree[B1(t)*2]++),e.last_lit===e.lit_bufsize-1}Qa._tr_init=i5;Qa._tr_stored_block=V1;Qa._tr_flush_block=s5;Qa._tr_tally=o5;Qa._tr_align=a5});var Ah=I((dU,q1)=>{\"use strict\";g();function l5(e,t,r,n){for(var i=e&65535|0,a=e>>>16&65535|0,s=0;r!==0;){s=r>2e3?2e3:r,r-=s;do i=i+t[n++]|0,a=a+i|0;while(--s);i%=65521,a%=65521}return i|a<<16|0}q1.exports=l5});var kh=I((pU,Y1)=>{\"use strict\";g();function c5(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e}return t}var u5=c5();function f5(e,t,r,n){var i=u5,a=n+r;e^=-1;for(var s=n;s<a;s++)e=e>>>8^i[(e^t[s])&255];return e^-1}Y1.exports=f5});var Nc=I((gU,X1)=>{\"use strict\";g();X1.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}});var iy=I(yn=>{\"use strict\";g();var Ut=Dn(),Rr=W1(),Q1=Ah(),fi=kh(),d5=Nc(),ra=0,h5=1,p5=3,gi=4,Z1=5,vn=0,K1=1,Mr=-2,m5=-3,Th=-5,g5=-1,v5=1,jc=2,y5=3,w5=4,b5=0,_5=2,Gc=8,x5=9,S5=15,E5=8,A5=29,k5=256,Ph=k5+1+A5,T5=30,C5=19,P5=2*Ph+1,R5=15,we=3,pi=258,Zr=pi+we+1,M5=32,zc=42,Rh=69,Bc=73,Hc=91,Uc=103,Qi=113,Uo=666,pt=1,Go=2,ea=3,rs=4,O5=3;function mi(e,t){return e.msg=d5[t],t}function J1(e){return(e<<1)-(e>4?9:0)}function hi(e){for(var t=e.length;--t>=0;)e[t]=0}function di(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),r!==0&&(Ut.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,t.pending===0&&(t.pending_out=0))}function xt(e,t){Rr._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,di(e.strm)}function Ae(e,t){e.pending_buf[e.pending++]=t}function Ho(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255}function I5(e,t,r,n){var i=e.avail_in;return i>n&&(i=n),i===0?0:(e.avail_in-=i,Ut.arraySet(t,e.input,e.next_in,i,r),e.state.wrap===1?e.adler=Q1(e.adler,t,i,r):e.state.wrap===2&&(e.adler=fi(e.adler,t,i,r)),e.next_in+=i,e.total_in+=i,i)}function ey(e,t){var r=e.max_chain_length,n=e.strstart,i,a,s=e.prev_length,o=e.nice_match,c=e.strstart>e.w_size-Zr?e.strstart-(e.w_size-Zr):0,l=e.window,u=e.w_mask,f=e.prev,d=e.strstart+pi,h=l[n+s-1],p=l[n+s];e.prev_length>=e.good_match&&(r>>=2),o>e.lookahead&&(o=e.lookahead);do if(i=t,!(l[i+s]!==p||l[i+s-1]!==h||l[i]!==l[n]||l[++i]!==l[n+1])){n+=2,i++;do;while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&n<d);if(a=pi-(d-n),n=d-pi,a>s){if(e.match_start=t,s=a,a>=o)break;h=l[n+s-1],p=l[n+s]}}while((t=f[t&u])>c&&--r!==0);return s<=e.lookahead?s:e.lookahead}function ta(e){var t=e.w_size,r,n,i,a,s;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-Zr)){Ut.arraySet(e.window,e.window,t,t,0),e.match_start-=t,e.strstart-=t,e.block_start-=t,n=e.hash_size,r=n;do i=e.head[--r],e.head[r]=i>=t?i-t:0;while(--n);n=t,r=n;do i=e.prev[--r],e.prev[r]=i>=t?i-t:0;while(--n);a+=t}if(e.strm.avail_in===0)break;if(n=I5(e.strm,e.window,e.strstart+e.lookahead,a),e.lookahead+=n,e.lookahead+e.insert>=we)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+we-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<we)););}while(e.lookahead<Zr&&e.strm.avail_in!==0)}function F5(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ta(e),e.lookahead===0&&t===ra)return pt;if(e.lookahead===0)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((e.strstart===0||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,xt(e,!1),e.strm.avail_out===0)||e.strstart-e.block_start>=e.w_size-Zr&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):(e.strstart>e.block_start&&(xt(e,!1),e.strm.avail_out===0),pt)}function Ch(e,t){for(var r,n;;){if(e.lookahead<Zr){if(ta(e),e.lookahead<Zr&&t===ra)return pt;if(e.lookahead===0)break}if(r=0,e.lookahead>=we&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),r!==0&&e.strstart-r<=e.w_size-Zr&&(e.match_length=ey(e,r)),e.match_length>=we)if(n=Rr._tr_tally(e,e.strstart-e.match_start,e.match_length-we),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=we){e.match_length--;do e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=e.strstart<we-1?e.strstart:we-1,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function es(e,t){for(var r,n,i;;){if(e.lookahead<Zr){if(ta(e),e.lookahead<Zr&&t===ra)return pt;if(e.lookahead===0)break}if(r=0,e.lookahead>=we&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=we-1,r!==0&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-Zr&&(e.match_length=ey(e,r),e.match_length<=5&&(e.strategy===v5||e.match_length===we&&e.strstart-e.match_start>4096)&&(e.match_length=we-1)),e.prev_length>=we&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-we,n=Rr._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-we),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=we-1,e.strstart++,n&&(xt(e,!1),e.strm.avail_out===0))return pt}else if(e.match_available){if(n=Rr._tr_tally(e,0,e.window[e.strstart-1]),n&&xt(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return pt}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=Rr._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<we-1?e.strstart:we-1,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function $5(e,t){for(var r,n,i,a,s=e.window;;){if(e.lookahead<=pi){if(ta(e),e.lookahead<=pi&&t===ra)return pt;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=we&&e.strstart>0&&(i=e.strstart-1,n=s[i],n===s[++i]&&n===s[++i]&&n===s[++i])){a=e.strstart+pi;do;while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&i<a);e.match_length=pi-(a-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=we?(r=Rr._tr_tally(e,1,e.match_length-we),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function L5(e,t){for(var r;;){if(e.lookahead===0&&(ta(e),e.lookahead===0)){if(t===ra)return pt;break}if(e.match_length=0,r=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function gn(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}var ts;ts=[new gn(0,0,0,0,F5),new gn(4,4,8,4,Ch),new gn(4,5,16,8,Ch),new gn(4,6,32,32,Ch),new gn(4,4,16,16,es),new gn(8,16,32,32,es),new gn(8,16,128,128,es),new gn(8,32,128,256,es),new gn(32,128,258,1024,es),new gn(32,258,258,4096,es)];function D5(e){e.window_size=2*e.w_size,hi(e.head),e.max_lazy_match=ts[e.level].max_lazy,e.good_match=ts[e.level].good_length,e.nice_match=ts[e.level].nice_length,e.max_chain_length=ts[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=we-1,e.match_available=0,e.ins_h=0}function N5(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Gc,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Ut.Buf16(P5*2),this.dyn_dtree=new Ut.Buf16((2*T5+1)*2),this.bl_tree=new Ut.Buf16((2*C5+1)*2),hi(this.dyn_ltree),hi(this.dyn_dtree),hi(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Ut.Buf16(R5+1),this.heap=new Ut.Buf16(2*Ph+1),hi(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Ut.Buf16(2*Ph+1),hi(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function ty(e){var t;return!e||!e.state?mi(e,Mr):(e.total_in=e.total_out=0,e.data_type=_5,t=e.state,t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?zc:Qi,e.adler=t.wrap===2?0:1,t.last_flush=ra,Rr._tr_init(t),vn)}function ry(e){var t=ty(e);return t===vn&&D5(e.state),t}function j5(e,t){return!e||!e.state||e.state.wrap!==2?Mr:(e.state.gzhead=t,vn)}function ny(e,t,r,n,i,a){if(!e)return Mr;var s=1;if(t===g5&&(t=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),i<1||i>x5||r!==Gc||n<8||n>15||t<0||t>9||a<0||a>w5)return mi(e,Mr);n===8&&(n=9);var o=new N5;return e.state=o,o.strm=e,o.wrap=s,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+we-1)/we),o.window=new Ut.Buf8(o.w_size*2),o.head=new Ut.Buf16(o.hash_size),o.prev=new Ut.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=o.lit_bufsize*4,o.pending_buf=new Ut.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=a,o.method=r,ry(e)}function B5(e,t){return ny(e,t,Gc,S5,E5,b5)}function H5(e,t){var r,n,i,a;if(!e||!e.state||t>Z1||t<0)return e?mi(e,Mr):Mr;if(n=e.state,!e.output||!e.input&&e.avail_in!==0||n.status===Uo&&t!==gi)return mi(e,e.avail_out===0?Th:Mr);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===zc)if(n.wrap===2)e.adler=0,Ae(n,31),Ae(n,139),Ae(n,8),n.gzhead?(Ae(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),Ae(n,n.gzhead.time&255),Ae(n,n.gzhead.time>>8&255),Ae(n,n.gzhead.time>>16&255),Ae(n,n.gzhead.time>>24&255),Ae(n,n.level===9?2:n.strategy>=jc||n.level<2?4:0),Ae(n,n.gzhead.os&255),n.gzhead.extra&&n.gzhead.extra.length&&(Ae(n,n.gzhead.extra.length&255),Ae(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=fi(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=Rh):(Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,n.level===9?2:n.strategy>=jc||n.level<2?4:0),Ae(n,O5),n.status=Qi);else{var s=Gc+(n.w_bits-8<<4)<<8,o=-1;n.strategy>=jc||n.level<2?o=0:n.level<6?o=1:n.level===6?o=2:o=3,s|=o<<6,n.strstart!==0&&(s|=M5),s+=31-s%31,n.status=Qi,Ho(n,s),n.strstart!==0&&(Ho(n,e.adler>>>16),Ho(n,e.adler&65535)),e.adler=1}if(n.status===Rh)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(n.gzhead.extra.length&65535)&&!(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size));)Ae(n,n.gzhead.extra[n.gzindex]&255),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=Bc)}else n.status=Bc;if(n.status===Bc)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}n.gzindex<n.gzhead.name.length?a=n.gzhead.name.charCodeAt(n.gzindex++)&255:a=0,Ae(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),a===0&&(n.gzindex=0,n.status=Hc)}else n.status=Hc;if(n.status===Hc)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}n.gzindex<n.gzhead.comment.length?a=n.gzhead.comment.charCodeAt(n.gzindex++)&255:a=0,Ae(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),a===0&&(n.status=Uc)}else n.status=Uc;if(n.status===Uc&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&di(e),n.pending+2<=n.pending_buf_size&&(Ae(n,e.adler&255),Ae(n,e.adler>>8&255),e.adler=0,n.status=Qi)):n.status=Qi),n.pending!==0){if(di(e),e.avail_out===0)return n.last_flush=-1,vn}else if(e.avail_in===0&&J1(t)<=J1(r)&&t!==gi)return mi(e,Th);if(n.status===Uo&&e.avail_in!==0)return mi(e,Th);if(e.avail_in!==0||n.lookahead!==0||t!==ra&&n.status!==Uo){var c=n.strategy===jc?L5(n,t):n.strategy===y5?$5(n,t):ts[n.level].func(n,t);if((c===ea||c===rs)&&(n.status=Uo),c===pt||c===ea)return e.avail_out===0&&(n.last_flush=-1),vn;if(c===Go&&(t===h5?Rr._tr_align(n):t!==Z1&&(Rr._tr_stored_block(n,0,0,!1),t===p5&&(hi(n.head),n.lookahead===0&&(n.strstart=0,n.block_start=0,n.insert=0))),di(e),e.avail_out===0))return n.last_flush=-1,vn}return t!==gi?vn:n.wrap<=0?K1:(n.wrap===2?(Ae(n,e.adler&255),Ae(n,e.adler>>8&255),Ae(n,e.adler>>16&255),Ae(n,e.adler>>24&255),Ae(n,e.total_in&255),Ae(n,e.total_in>>8&255),Ae(n,e.total_in>>16&255),Ae(n,e.total_in>>24&255)):(Ho(n,e.adler>>>16),Ho(n,e.adler&65535)),di(e),n.wrap>0&&(n.wrap=-n.wrap),n.pending!==0?vn:K1)}function U5(e){var t;return!e||!e.state?Mr:(t=e.state.status,t!==zc&&t!==Rh&&t!==Bc&&t!==Hc&&t!==Uc&&t!==Qi&&t!==Uo?mi(e,Mr):(e.state=null,t===Qi?mi(e,m5):vn))}function G5(e,t){var r=t.length,n,i,a,s,o,c,l,u;if(!e||!e.state||(n=e.state,s=n.wrap,s===2||s===1&&n.status!==zc||n.lookahead))return Mr;for(s===1&&(e.adler=Q1(e.adler,t,r,0)),n.wrap=0,r>=n.w_size&&(s===0&&(hi(n.head),n.strstart=0,n.block_start=0,n.insert=0),u=new Ut.Buf8(n.w_size),Ut.arraySet(u,t,r-n.w_size,n.w_size,0),t=u,r=n.w_size),o=e.avail_in,c=e.next_in,l=e.input,e.avail_in=r,e.next_in=0,e.input=t,ta(n);n.lookahead>=we;){i=n.strstart,a=n.lookahead-(we-1);do n.ins_h=(n.ins_h<<n.hash_shift^n.window[i+we-1])&n.hash_mask,n.prev[i&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=i,i++;while(--a);n.strstart=i,n.lookahead=we-1,ta(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=we-1,n.match_available=0,e.next_in=c,e.input=l,e.avail_in=o,n.wrap=s,vn}yn.deflateInit=B5;yn.deflateInit2=ny;yn.deflateReset=ry;yn.deflateResetKeep=ty;yn.deflateSetHeader=j5;yn.deflate=H5;yn.deflateEnd=U5;yn.deflateSetDictionary=G5;yn.deflateInfo=\"pako deflate (from Nodeca project)\"});var Mh=I(ns=>{\"use strict\";g();var Vc=Dn(),ay=!0,sy=!0;try{String.fromCharCode.apply(null,[0])}catch(e){ay=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){sy=!1}var zo=new Vc.Buf8(256);for(jn=0;jn<256;jn++)zo[jn]=jn>=252?6:jn>=248?5:jn>=240?4:jn>=224?3:jn>=192?2:1;var jn;zo[254]=zo[254]=1;ns.string2buf=function(e){var t,r,n,i,a,s=e.length,o=0;for(i=0;i<s;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<s&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new Vc.Buf8(o),a=0,i=0;a<o;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<s&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?t[a++]=r:r<2048?(t[a++]=192|r>>>6,t[a++]=128|r&63):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|r&63):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|r&63);return t};function oy(e,t){if(t<65534&&(e.subarray&&sy||!e.subarray&&ay))return String.fromCharCode.apply(null,Vc.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}ns.buf2binstring=function(e){return oy(e,e.length)};ns.binstring2buf=function(e){for(var t=new Vc.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t};ns.buf2string=function(e,t){var r,n,i,a,s=t||e.length,o=new Array(s*2);for(n=0,r=0;r<s;){if(i=e[r++],i<128){o[n++]=i;continue}if(a=zo[i],a>4){o[n++]=65533,r+=a-1;continue}for(i&=a===2?31:a===3?15:7;a>1&&r<s;)i=i<<6|e[r++]&63,a--;if(a>1){o[n++]=65533;continue}i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|i&1023)}return oy(o,n)};ns.utf8border=function(e,t){var r;for(t=t||e.length,t>e.length&&(t=e.length),r=t-1;r>=0&&(e[r]&192)===128;)r--;return r<0||r===0?t:r+zo[e[r]]>t?r:t}});var Oh=I((xU,ly)=>{\"use strict\";g();function z5(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}ly.exports=z5});var dy=I(qo=>{\"use strict\";g();var Vo=iy(),Wo=Dn(),Fh=Mh(),$h=Nc(),V5=Oh(),fy=Object.prototype.toString,W5=0,Ih=4,is=0,cy=1,uy=2,q5=-1,Y5=0,X5=8;function na(e){if(!(this instanceof na))return new na(e);this.options=Wo.assign({level:q5,method:X5,chunkSize:16384,windowBits:15,memLevel:8,strategy:Y5,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new V5,this.strm.avail_out=0;var r=Vo.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==is)throw new Error($h[r]);if(t.header&&Vo.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(typeof t.dictionary==\"string\"?n=Fh.string2buf(t.dictionary):fy.call(t.dictionary)===\"[object ArrayBuffer]\"?n=new Uint8Array(t.dictionary):n=t.dictionary,r=Vo.deflateSetDictionary(this.strm,n),r!==is)throw new Error($h[r]);this._dict_set=!0}}na.prototype.push=function(e,t){var r=this.strm,n=this.options.chunkSize,i,a;if(this.ended)return!1;a=t===~~t?t:t===!0?Ih:W5,typeof e==\"string\"?r.input=Fh.string2buf(e):fy.call(e)===\"[object ArrayBuffer]\"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(r.avail_out===0&&(r.output=new Wo.Buf8(n),r.next_out=0,r.avail_out=n),i=Vo.deflate(r,a),i!==cy&&i!==is)return this.onEnd(i),this.ended=!0,!1;(r.avail_out===0||r.avail_in===0&&(a===Ih||a===uy))&&(this.options.to===\"string\"?this.onData(Fh.buf2binstring(Wo.shrinkBuf(r.output,r.next_out))):this.onData(Wo.shrinkBuf(r.output,r.next_out)))}while((r.avail_in>0||r.avail_out===0)&&i!==cy);return a===Ih?(i=Vo.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===is):(a===uy&&(this.onEnd(is),r.avail_out=0),!0)};na.prototype.onData=function(e){this.chunks.push(e)};na.prototype.onEnd=function(e){e===is&&(this.options.to===\"string\"?this.result=this.chunks.join(\"\"):this.result=Wo.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Lh(e,t){var r=new na(t);if(r.push(e,!0),r.err)throw r.msg||$h[r.err];return r.result}function Z5(e,t){return t=t||{},t.raw=!0,Lh(e,t)}function K5(e,t){return t=t||{},t.gzip=!0,Lh(e,t)}qo.Deflate=na;qo.deflate=Lh;qo.deflateRaw=Z5;qo.gzip=K5});var py=I((kU,hy)=>{\"use strict\";g();var Wc=30,J5=12;hy.exports=function(t,r){var n,i,a,s,o,c,l,u,f,d,h,p,m,v,y,b,x,E,_,k,w,A,S,T,P;n=t.state,i=t.next_in,T=t.input,a=i+(t.avail_in-5),s=t.next_out,P=t.output,o=s-(r-t.avail_out),c=s+(t.avail_out-257),l=n.dmax,u=n.wsize,f=n.whave,d=n.wnext,h=n.window,p=n.hold,m=n.bits,v=n.lencode,y=n.distcode,b=(1<<n.lenbits)-1,x=(1<<n.distbits)-1;e:do{m<15&&(p+=T[i++]<<m,m+=8,p+=T[i++]<<m,m+=8),E=v[p&b];t:for(;;){if(_=E>>>24,p>>>=_,m-=_,_=E>>>16&255,_===0)P[s++]=E&65535;else if(_&16){k=E&65535,_&=15,_&&(m<_&&(p+=T[i++]<<m,m+=8),k+=p&(1<<_)-1,p>>>=_,m-=_),m<15&&(p+=T[i++]<<m,m+=8,p+=T[i++]<<m,m+=8),E=y[p&x];r:for(;;){if(_=E>>>24,p>>>=_,m-=_,_=E>>>16&255,_&16){if(w=E&65535,_&=15,m<_&&(p+=T[i++]<<m,m+=8,m<_&&(p+=T[i++]<<m,m+=8)),w+=p&(1<<_)-1,w>l){t.msg=\"invalid distance too far back\",n.mode=Wc;break e}if(p>>>=_,m-=_,_=s-o,w>_){if(_=w-_,_>f&&n.sane){t.msg=\"invalid distance too far back\",n.mode=Wc;break e}if(A=0,S=h,d===0){if(A+=u-_,_<k){k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}}else if(d<_){if(A+=u+d-_,_-=d,_<k){k-=_;do P[s++]=h[A++];while(--_);if(A=0,d<k){_=d,k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}}}else if(A+=d-_,_<k){k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}for(;k>2;)P[s++]=S[A++],P[s++]=S[A++],P[s++]=S[A++],k-=3;k&&(P[s++]=S[A++],k>1&&(P[s++]=S[A++]))}else{A=s-w;do P[s++]=P[A++],P[s++]=P[A++],P[s++]=P[A++],k-=3;while(k>2);k&&(P[s++]=P[A++],k>1&&(P[s++]=P[A++]))}}else if(_&64){t.msg=\"invalid distance code\",n.mode=Wc;break e}else{E=y[(E&65535)+(p&(1<<_)-1)];continue r}break}}else if(_&64)if(_&32){n.mode=J5;break e}else{t.msg=\"invalid literal/length code\",n.mode=Wc;break e}else{E=v[(E&65535)+(p&(1<<_)-1)];continue t}break}}while(i<a&&s<c);k=m>>3,i-=k,m-=k<<3,p&=(1<<m)-1,t.next_in=i,t.next_out=s,t.avail_in=i<a?5+(a-i):5-(i-a),t.avail_out=s<c?257+(c-s):257-(s-c),n.hold=p,n.bits=m}});var _y=I((CU,by)=>{\"use strict\";g();var my=Dn(),as=15,gy=852,vy=592,yy=0,Dh=1,wy=2,Q5=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],e6=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],t6=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],r6=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];by.exports=function(t,r,n,i,a,s,o,c){var l=c.bits,u=0,f=0,d=0,h=0,p=0,m=0,v=0,y=0,b=0,x=0,E,_,k,w,A,S=null,T=0,P,O=new my.Buf16(as+1),j=new my.Buf16(as+1),D=null,Q=0,de,ee,J;for(u=0;u<=as;u++)O[u]=0;for(f=0;f<i;f++)O[r[n+f]]++;for(p=l,h=as;h>=1&&O[h]===0;h--);if(p>h&&(p=h),h===0)return a[s++]=1<<24|64<<16|0,a[s++]=1<<24|64<<16|0,c.bits=1,0;for(d=1;d<h&&O[d]===0;d++);for(p<d&&(p=d),y=1,u=1;u<=as;u++)if(y<<=1,y-=O[u],y<0)return-1;if(y>0&&(t===yy||h!==1))return-1;for(j[1]=0,u=1;u<as;u++)j[u+1]=j[u]+O[u];for(f=0;f<i;f++)r[n+f]!==0&&(o[j[r[n+f]]++]=f);if(t===yy?(S=D=o,P=19):t===Dh?(S=Q5,T-=257,D=e6,Q-=257,P=256):(S=t6,D=r6,P=-1),x=0,f=0,u=d,A=s,m=p,v=0,k=-1,b=1<<p,w=b-1,t===Dh&&b>gy||t===wy&&b>vy)return 1;for(;;){de=u-v,o[f]<P?(ee=0,J=o[f]):o[f]>P?(ee=D[Q+o[f]],J=S[T+o[f]]):(ee=96,J=0),E=1<<u-v,_=1<<m,d=_;do _-=E,a[A+(x>>v)+_]=de<<24|ee<<16|J|0;while(_!==0);for(E=1<<u-1;x&E;)E>>=1;if(E!==0?(x&=E-1,x+=E):x=0,f++,--O[u]===0){if(u===h)break;u=r[n+o[f]]}if(u>p&&(x&w)!==k){for(v===0&&(v=p),A+=d,m=u-v,y=1<<m;m+v<h&&(y-=O[m+v],!(y<=0));)m++,y<<=1;if(b+=1<<m,t===Dh&&b>gy||t===wy&&b>vy)return 1;k=x&w,a[k]=p<<24|m<<16|A-s|0}}return x!==0&&(a[A+x]=u-v<<24|64<<16|0),c.bits=p,0}});var rw=I(Kr=>{\"use strict\";g();var hr=Dn(),Gh=Ah(),wn=kh(),n6=py(),Yo=_y(),i6=0,qy=1,Yy=2,xy=4,a6=5,qc=6,ia=0,s6=1,o6=2,Or=-2,Xy=-3,zh=-4,l6=-5,Sy=8,Zy=1,Ey=2,Ay=3,ky=4,Ty=5,Cy=6,Py=7,Ry=8,My=9,Oy=10,Zc=11,Bn=12,Nh=13,Iy=14,jh=15,Fy=16,$y=17,Ly=18,Dy=19,Yc=20,Xc=21,Ny=22,jy=23,By=24,Hy=25,Uy=26,Bh=27,Gy=28,zy=29,je=30,Vh=31,c6=32,u6=852,f6=592,d6=15,h6=d6;function Vy(e){return(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24)}function p6(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new hr.Buf16(320),this.work=new hr.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Ky(e){var t;return!e||!e.state?Or:(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=t.wrap&1),t.mode=Zy,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new hr.Buf32(u6),t.distcode=t.distdyn=new hr.Buf32(f6),t.sane=1,t.back=-1,ia)}function Jy(e){var t;return!e||!e.state?Or:(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,Ky(e))}function Qy(e,t){var r,n;return!e||!e.state||(n=e.state,t<0?(r=0,t=-t):(r=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15))?Or:(n.window!==null&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,Jy(e))}function ew(e,t){var r,n;return e?(n=new p6,e.state=n,n.window=null,r=Qy(e,t),r!==ia&&(e.state=null),r):Or}function m6(e){return ew(e,h6)}var Wy=!0,Hh,Uh;function g6(e){if(Wy){var t;for(Hh=new hr.Buf32(512),Uh=new hr.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Yo(qy,e.lens,0,288,Hh,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Yo(Yy,e.lens,0,32,Uh,0,e.work,{bits:5}),Wy=!1}e.lencode=Hh,e.lenbits=9,e.distcode=Uh,e.distbits=5}function tw(e,t,r,n){var i,a=e.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new hr.Buf8(a.wsize)),n>=a.wsize?(hr.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>n&&(i=n),hr.arraySet(a.window,t,r-n,i,a.wnext),n-=i,n?(hr.arraySet(a.window,t,r-n,n,0),a.wnext=n,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0}function v6(e,t){var r,n,i,a,s,o,c,l,u,f,d,h,p,m,v=0,y,b,x,E,_,k,w,A,S=new hr.Buf8(4),T,P,O=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&e.avail_in!==0)return Or;r=e.state,r.mode===Bn&&(r.mode=Nh),s=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,n=e.input,o=e.avail_in,l=r.hold,u=r.bits,f=o,d=c,A=ia;e:for(;;)switch(r.mode){case Zy:if(r.wrap===0){r.mode=Nh;break}for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.wrap&2&&l===35615){r.check=0,S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0),l=0,u=0,r.mode=Ey;break}if(r.flags=0,r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg=\"incorrect header check\",r.mode=je;break}if((l&15)!==Sy){e.msg=\"unknown compression method\",r.mode=je;break}if(l>>>=4,u-=4,w=(l&15)+8,r.wbits===0)r.wbits=w;else if(w>r.wbits){e.msg=\"invalid window size\",r.mode=je;break}r.dmax=1<<w,e.adler=r.check=1,r.mode=l&512?Oy:Bn,l=0,u=0;break;case Ey:for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.flags=l,(r.flags&255)!==Sy){e.msg=\"unknown compression method\",r.mode=je;break}if(r.flags&57344){e.msg=\"unknown header flags set\",r.mode=je;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0,r.mode=Ay;case Ay:for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.head&&(r.head.time=l),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,S[2]=l>>>16&255,S[3]=l>>>24&255,r.check=wn(r.check,S,4,0)),l=0,u=0,r.mode=ky;case ky:for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0,r.mode=Ty;case Ty:if(r.flags&1024){for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0}else r.head&&(r.head.extra=null);r.mode=Cy;case Cy:if(r.flags&1024&&(h=r.length,h>o&&(h=o),h&&(r.head&&(w=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),hr.arraySet(r.head.extra,n,a,h,w)),r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,r.length-=h),r.length))break e;r.length=0,r.mode=Py;case Py:if(r.flags&2048){if(o===0)break e;h=0;do w=n[a+h++],r.head&&w&&r.length<65536&&(r.head.name+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,w)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=Ry;case Ry:if(r.flags&4096){if(o===0)break e;h=0;do w=n[a+h++],r.head&&w&&r.length<65536&&(r.head.comment+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,w)break e}else r.head&&(r.head.comment=null);r.mode=My;case My:if(r.flags&512){for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l!==(r.check&65535)){e.msg=\"header crc mismatch\",r.mode=je;break}l=0,u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Bn;break;case Oy:for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}e.adler=r.check=Vy(l),l=0,u=0,r.mode=Zc;case Zc:if(r.havedict===0)return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,o6;e.adler=r.check=1,r.mode=Bn;case Bn:if(t===a6||t===qc)break e;case Nh:if(r.last){l>>>=u&7,u-=u&7,r.mode=Bh;break}for(;u<3;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}switch(r.last=l&1,l>>>=1,u-=1,l&3){case 0:r.mode=Iy;break;case 1:if(g6(r),r.mode=Yc,t===qc){l>>>=2,u-=2;break e}break;case 2:r.mode=$y;break;case 3:e.msg=\"invalid block type\",r.mode=je}l>>>=2,u-=2;break;case Iy:for(l>>>=u&7,u-=u&7;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if((l&65535)!==(l>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=je;break}if(r.length=l&65535,l=0,u=0,r.mode=jh,t===qc)break e;case jh:r.mode=Fy;case Fy:if(h=r.length,h){if(h>o&&(h=o),h>c&&(h=c),h===0)break e;hr.arraySet(i,n,a,h,s),o-=h,a+=h,c-=h,s+=h,r.length-=h;break}r.mode=Bn;break;case $y:for(;u<14;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.nlen=(l&31)+257,l>>>=5,u-=5,r.ndist=(l&31)+1,l>>>=5,u-=5,r.ncode=(l&15)+4,l>>>=4,u-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=je;break}r.have=0,r.mode=Ly;case Ly:for(;r.have<r.ncode;){for(;u<3;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.lens[O[r.have++]]=l&7,l>>>=3,u-=3}for(;r.have<19;)r.lens[O[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,T={bits:r.lenbits},A=Yo(i6,r.lens,0,19,r.lencode,0,r.work,T),r.lenbits=T.bits,A){e.msg=\"invalid code lengths set\",r.mode=je;break}r.have=0,r.mode=Dy;case Dy:for(;r.have<r.nlen+r.ndist;){for(;v=r.lencode[l&(1<<r.lenbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(x<16)l>>>=y,u-=y,r.lens[r.have++]=x;else{if(x===16){for(P=y+2;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l>>>=y,u-=y,r.have===0){e.msg=\"invalid bit length repeat\",r.mode=je;break}w=r.lens[r.have-1],h=3+(l&3),l>>>=2,u-=2}else if(x===17){for(P=y+3;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=y,u-=y,w=0,h=3+(l&7),l>>>=3,u-=3}else{for(P=y+7;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=y,u-=y,w=0,h=11+(l&127),l>>>=7,u-=7}if(r.have+h>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=je;break}for(;h--;)r.lens[r.have++]=w}}if(r.mode===je)break;if(r.lens[256]===0){e.msg=\"invalid code -- missing end-of-block\",r.mode=je;break}if(r.lenbits=9,T={bits:r.lenbits},A=Yo(qy,r.lens,0,r.nlen,r.lencode,0,r.work,T),r.lenbits=T.bits,A){e.msg=\"invalid literal/lengths set\",r.mode=je;break}if(r.distbits=6,r.distcode=r.distdyn,T={bits:r.distbits},A=Yo(Yy,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,T),r.distbits=T.bits,A){e.msg=\"invalid distances set\",r.mode=je;break}if(r.mode=Yc,t===qc)break e;case Yc:r.mode=Xc;case Xc:if(o>=6&&c>=258){e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,n6(e,d),s=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,n=e.input,o=e.avail_in,l=r.hold,u=r.bits,r.mode===Bn&&(r.back=-1);break}for(r.back=0;v=r.lencode[l&(1<<r.lenbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(b&&!(b&240)){for(E=y,_=b,k=x;v=r.lencode[k+((l&(1<<E+_)-1)>>E)],y=v>>>24,b=v>>>16&255,x=v&65535,!(E+y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=E,u-=E,r.back+=E}if(l>>>=y,u-=y,r.back+=y,r.length=x,b===0){r.mode=Uy;break}if(b&32){r.back=-1,r.mode=Bn;break}if(b&64){e.msg=\"invalid literal/length code\",r.mode=je;break}r.extra=b&15,r.mode=Ny;case Ny:if(r.extra){for(P=r.extra;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=jy;case jy:for(;v=r.distcode[l&(1<<r.distbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(!(b&240)){for(E=y,_=b,k=x;v=r.distcode[k+((l&(1<<E+_)-1)>>E)],y=v>>>24,b=v>>>16&255,x=v&65535,!(E+y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=E,u-=E,r.back+=E}if(l>>>=y,u-=y,r.back+=y,b&64){e.msg=\"invalid distance code\",r.mode=je;break}r.offset=x,r.extra=b&15,r.mode=By;case By:if(r.extra){for(P=r.extra;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=je;break}r.mode=Hy;case Hy:if(c===0)break e;if(h=d-c,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=je;break}h>r.wnext?(h-=r.wnext,p=r.wsize-h):p=r.wnext-h,h>r.length&&(h=r.length),m=r.window}else m=i,p=s-r.offset,h=r.length;h>c&&(h=c),c-=h,r.length-=h;do i[s++]=m[p++];while(--h);r.length===0&&(r.mode=Xc);break;case Uy:if(c===0)break e;i[s++]=r.length,c--,r.mode=Xc;break;case Bh:if(r.wrap){for(;u<32;){if(o===0)break e;o--,l|=n[a++]<<u,u+=8}if(d-=c,e.total_out+=d,r.total+=d,d&&(e.adler=r.check=r.flags?wn(r.check,i,d,s-d):Gh(r.check,i,d,s-d)),d=c,(r.flags?l:Vy(l))!==r.check){e.msg=\"incorrect data check\",r.mode=je;break}l=0,u=0}r.mode=Gy;case Gy:if(r.wrap&&r.flags){for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l!==(r.total&4294967295)){e.msg=\"incorrect length check\",r.mode=je;break}l=0,u=0}r.mode=zy;case zy:A=s6;break e;case je:A=Xy;break e;case Vh:return zh;case c6:default:return Or}return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,(r.wsize||d!==e.avail_out&&r.mode<je&&(r.mode<Bh||t!==xy))&&tw(e,e.output,e.next_out,d-e.avail_out)?(r.mode=Vh,zh):(f-=e.avail_in,d-=e.avail_out,e.total_in+=f,e.total_out+=d,r.total+=d,r.wrap&&d&&(e.adler=r.check=r.flags?wn(r.check,i,d,e.next_out-d):Gh(r.check,i,d,e.next_out-d)),e.data_type=r.bits+(r.last?64:0)+(r.mode===Bn?128:0)+(r.mode===Yc||r.mode===jh?256:0),(f===0&&d===0||t===xy)&&A===ia&&(A=l6),A)}function y6(e){if(!e||!e.state)return Or;var t=e.state;return t.window&&(t.window=null),e.state=null,ia}function w6(e,t){var r;return!e||!e.state||(r=e.state,!(r.wrap&2))?Or:(r.head=t,t.done=!1,ia)}function b6(e,t){var r=t.length,n,i,a;return!e||!e.state||(n=e.state,n.wrap!==0&&n.mode!==Zc)?Or:n.mode===Zc&&(i=1,i=Gh(i,t,r,0),i!==n.check)?Xy:(a=tw(e,t,r,r),a?(n.mode=Vh,zh):(n.havedict=1,ia))}Kr.inflateReset=Jy;Kr.inflateReset2=Qy;Kr.inflateResetKeep=Ky;Kr.inflateInit=m6;Kr.inflateInit2=ew;Kr.inflate=v6;Kr.inflateEnd=y6;Kr.inflateGetHeader=w6;Kr.inflateSetDictionary=b6;Kr.inflateInfo=\"pako inflate (from Nodeca project)\"});var Wh=I((OU,nw)=>{\"use strict\";g();nw.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}});var aw=I((FU,iw)=>{\"use strict\";g();function _6(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}iw.exports=_6});var ow=I(Zo=>{\"use strict\";g();var ss=rw(),Xo=Dn(),Kc=Mh(),et=Wh(),qh=Nc(),x6=Oh(),S6=aw(),sw=Object.prototype.toString;function aa(e){if(!(this instanceof aa))return new aa(e);this.options=Xo.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15||(t.windowBits|=15)),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new x6,this.strm.avail_out=0;var r=ss.inflateInit2(this.strm,t.windowBits);if(r!==et.Z_OK)throw new Error(qh[r]);if(this.header=new S6,ss.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary==\"string\"?t.dictionary=Kc.string2buf(t.dictionary):sw.call(t.dictionary)===\"[object ArrayBuffer]\"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=ss.inflateSetDictionary(this.strm,t.dictionary),r!==et.Z_OK)))throw new Error(qh[r])}aa.prototype.push=function(e,t){var r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,a,s,o,c,l,u=!1;if(this.ended)return!1;s=t===~~t?t:t===!0?et.Z_FINISH:et.Z_NO_FLUSH,typeof e==\"string\"?r.input=Kc.binstring2buf(e):sw.call(e)===\"[object ArrayBuffer]\"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(r.avail_out===0&&(r.output=new Xo.Buf8(n),r.next_out=0,r.avail_out=n),a=ss.inflate(r,et.Z_NO_FLUSH),a===et.Z_NEED_DICT&&i&&(a=ss.inflateSetDictionary(this.strm,i)),a===et.Z_BUF_ERROR&&u===!0&&(a=et.Z_OK,u=!1),a!==et.Z_STREAM_END&&a!==et.Z_OK)return this.onEnd(a),this.ended=!0,!1;r.next_out&&(r.avail_out===0||a===et.Z_STREAM_END||r.avail_in===0&&(s===et.Z_FINISH||s===et.Z_SYNC_FLUSH))&&(this.options.to===\"string\"?(o=Kc.utf8border(r.output,r.next_out),c=r.next_out-o,l=Kc.buf2string(r.output,o),r.next_out=c,r.avail_out=n-c,c&&Xo.arraySet(r.output,r.output,o,c,0),this.onData(l)):this.onData(Xo.shrinkBuf(r.output,r.next_out))),r.avail_in===0&&r.avail_out===0&&(u=!0)}while((r.avail_in>0||r.avail_out===0)&&a!==et.Z_STREAM_END);return a===et.Z_STREAM_END&&(s=et.Z_FINISH),s===et.Z_FINISH?(a=ss.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===et.Z_OK):(s===et.Z_SYNC_FLUSH&&(this.onEnd(et.Z_OK),r.avail_out=0),!0)};aa.prototype.onData=function(e){this.chunks.push(e)};aa.prototype.onEnd=function(e){e===et.Z_OK&&(this.options.to===\"string\"?this.result=this.chunks.join(\"\"):this.result=Xo.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Yh(e,t){var r=new aa(t);if(r.push(e,!0),r.err)throw r.msg||qh[r.err];return r.result}function E6(e,t){return t=t||{},t.raw=!0,Yh(e,t)}Zo.Inflate=aa;Zo.inflate=Yh;Zo.inflateRaw=E6;Zo.ungzip=Yh});var uw=I((NU,cw)=>{\"use strict\";g();var A6=Dn().assign,k6=dy(),T6=ow(),C6=Wh(),lw={};A6(lw,k6,T6,C6);cw.exports=lw});var hw=I((BU,dw)=>{\"use strict\";g();var fw=(e,t)=>function(...r){let n=t.promiseModule;return new n((i,a)=>{t.multiArgs?r.push((...s)=>{t.errorFirst?s[0]?a(s):(s.shift(),i(s)):i(s)}):t.errorFirst?r.push((s,o)=>{s?a(s):i(o)}):r.push(i),e.apply(this,r)})};dw.exports=(e,t)=>{t=Object.assign({exclude:[/.+(Sync|Stream)$/],errorFirst:!0,promiseModule:Promise},t);let r=typeof e;if(!(e!==null&&(r===\"object\"||r===\"function\")))throw new TypeError(`Expected \\`input\\` to be a \\`Function\\` or \\`Object\\`, got \\`${e===null?\"null\":r}\\``);let n=a=>{let s=o=>typeof o==\"string\"?a===o:o.test(a);return t.include?t.include.some(s):!t.exclude.some(s)},i;r===\"function\"?i=function(...a){return t.excludeMain?e(...a):fw(e,t).apply(this,a)}:i=Object.create(Object.getPrototypeOf(e));for(let a in e){let s=e[a];i[a]=typeof s==\"function\"&&n(a)?fw(s,t):s}return i}});var xw=I((UU,_w)=>{g();function pw(e){return Array.isArray(e)?e:[e]}var Kh=\"\",mw=\" \",Xh=\"\\\\\",P6=/^\\s+$/,R6=/(?:[^\\\\]|^)\\\\$/,M6=/^\\\\!/,O6=/^\\\\#/,I6=/\\r?\\n/g,F6=/^\\.*\\/|^\\.+$/,Zh=\"/\",yw=\"node-ignore\";typeof Symbol!=\"undefined\"&&(yw=Symbol.for(\"node-ignore\"));var gw=yw,$6=(e,t,r)=>Object.defineProperty(e,t,{value:r}),L6=/([0-z])-([0-z])/g,ww=()=>!1,D6=e=>e.replace(L6,(t,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?t:Kh),N6=e=>{let{length:t}=e;return e.slice(0,t-t%2)},j6=[[/^\\uFEFF/,()=>Kh],[/((?:\\\\\\\\)*?)(\\\\?\\s+)$/,(e,t,r)=>t+(r.indexOf(\"\\\\\")===0?mw:Kh)],[/(\\\\+?)\\s/g,(e,t)=>{let{length:r}=t;return t.slice(0,r-r%2)+mw}],[/[\\\\$.|*+(){^]/g,e=>`\\\\${e}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(e,t,r)=>t+6<r.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,(e,t,r)=>{let n=r.replace(/\\\\\\*/g,\"[^\\\\/]*\");return t+n}],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>Xh],[/\\\\\\\\/g,()=>Xh],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(e,t,r,n,i)=>t===Xh?`\\\\[${r}${N6(n)}${i}`:i===\"]\"&&n.length%2===0?`[${D6(r)}${n}]`:\"[]\"],[/(?:[^*])$/,e=>/\\/$/.test(e)?`${e}$`:`${e}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(e,t)=>`${t?`${t}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],vw=Object.create(null),B6=(e,t)=>{let r=vw[e];return r||(r=j6.reduce((n,[i,a])=>n.replace(i,a.bind(e)),e),vw[e]=r),t?new RegExp(r,\"i\"):new RegExp(r)},ep=e=>typeof e==\"string\",H6=e=>e&&ep(e)&&!P6.test(e)&&!R6.test(e)&&e.indexOf(\"#\")!==0,U6=e=>e.split(I6),Jh=class{constructor(t,r,n,i){this.origin=t,this.pattern=r,this.negative=n,this.regex=i}},G6=(e,t)=>{let r=e,n=!1;e.indexOf(\"!\")===0&&(n=!0,e=e.substr(1)),e=e.replace(M6,\"!\").replace(O6,\"#\");let i=B6(e,t);return new Jh(r,e,n,i)},z6=(e,t)=>{throw new t(e)},Hn=(e,t,r)=>ep(e)?e?Hn.isNotRelative(e)?r(`path should be a \\`path.relative()\\`d string, but got \"${t}\"`,RangeError):!0:r(\"path must not be empty\",TypeError):r(`path must be a string, but got \\`${t}\\``,TypeError),bw=e=>F6.test(e);Hn.isNotRelative=bw;Hn.convert=e=>e;var Qh=class{constructor({ignorecase:t=!0,ignoreCase:r=t,allowRelativePaths:n=!1}={}){$6(this,gw,!0),this._rules=[],this._ignoreCase=r,this._allowRelativePaths=n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(t){if(t&&t[gw]){this._rules=this._rules.concat(t._rules),this._added=!0;return}if(H6(t)){let r=G6(t,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(t){return this._added=!1,pw(ep(t)?U6(t):t).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(t){return this.add(t)}_testOne(t,r){let n=!1,i=!1;return this._rules.forEach(a=>{let{negative:s}=a;if(i===s&&n!==i||s&&!n&&!i&&!r)return;a.regex.test(t)&&(n=!s,i=s)}),{ignored:n,unignored:i}}_test(t,r,n,i){let a=t&&Hn.convert(t);return Hn(a,t,this._allowRelativePaths?ww:z6),this._t(a,r,n,i)}_t(t,r,n,i){if(t in r)return r[t];if(i||(i=t.split(Zh)),i.pop(),!i.length)return r[t]=this._testOne(t,n);let a=this._t(i.join(Zh)+Zh,r,n,i);return r[t]=a.ignored?a:this._testOne(t,n)}ignores(t){return this._test(t,this._ignoreCache,!1).ignored}createFilter(){return t=>!this.ignores(t)}filter(t){return pw(t).filter(this.createFilter())}test(t){return this._test(t,this._testCache,!0)}},Jc=e=>new Qh(e),V6=e=>Hn(e&&Hn.convert(e),e,ww);Jc.isPathValid=V6;Jc.default=Jc;_w.exports=Jc;if(typeof process!=\"undefined\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let e=r=>/^\\\\\\\\\\?\\\\/.test(r)||/[\"<>|\\u0000-\\u001F]+/u.test(r)?r:r.replace(/\\\\/g,\"/\");Hn.convert=e;let t=/^[a-z]:\\//i;Hn.isNotRelative=r=>t.test(r)||bw(r)}});var Ew=I((zU,Sw)=>{\"use strict\";g();function W6(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function bn(e,t,r){return t=t instanceof RegExp?t:new RegExp(W6(t),\"g\"),e.replace(t,r)}var q6={clean:function(t){if(typeof t!=\"string\")throw new Error(\"Expected a string, received: \"+t);return t=bn(t,\"./\",\"/\"),t=bn(t,\"..\",\".\"),t=bn(t,\" \",\"-\"),t=bn(t,/^[~^:?*\\\\\\-]/g,\"\"),t=bn(t,/[~^:?*\\\\]/g,\"-\"),t=bn(t,/[~^:?*\\\\\\-]$/g,\"\"),t=bn(t,\"@{\",\"-\"),t=bn(t,/\\.$/g,\"\"),t=bn(t,/\\/$/g,\"\"),t=bn(t,/\\.lock$/g,\"\"),t}};Sw.exports=q6});var kw=I((WU,Aw)=>{g();Aw.exports=function(e,t){var r=e,n=t,i=r.length,a=n.length,s=!1,o=null,c=i+1,l=[],u=[],f=[],d=\"\",h=-1,p=0,m=1,v,y,b=function(){i>=a&&(v=r,y=i,r=n,n=v,i=a,a=y,s=!0,c=i+1)},x=function(w,A,S){return{x:w,y:A,k:S}},E=function(w,A){return{elem:w,t:A}},_=function(w,A,S){var T,P,O;for(A>S?T=l[w-1+c]:T=l[w+1+c],O=Math.max(A,S),P=O-w;P<i&&O<a&&r[P]===n[O];)++P,++O;return l[w+c]=u.length,u[u.length]=new x(P,O,T),O},k=function(w){var A,S,T,P,O;for(A=S=1,T=P=0,O=w.length-1;O>=0;--O)for(;T<w[O].x||P<w[O].y;)w[O].y-w[O].x>P-T?(s?f[f.length]=new E(n[P],h):f[f.length]=new E(n[P],m),++S,++P):w[O].y-w[O].x<P-T?(s?f[f.length]=new E(r[T],m):f[f.length]=new E(r[T],h),++A,++T):(f[f.length]=new E(r[T],p),d+=r[T],++A,++S,++T,++P)};return b(),{SES_DELETE:-1,SES_COMMON:0,SES_ADD:1,editdistance:function(){return o},getlcs:function(){return d},getses:function(){return f},compose:function(){var w,A,S,T,P,O,j,D;for(w=a-i,A=i+a+3,S={},j=0;j<A;++j)S[j]=-1,l[j]=-1;T=-1;do{for(++T,D=-T;D<=w-1;++D)S[D+c]=_(D,S[D-1+c]+1,S[D+1+c]);for(D=w+T;D>=w+1;--D)S[D+c]=_(D,S[D-1+c]+1,S[D+1+c]);S[w+c]=_(w,S[w-1+c]+1,S[w+1+c])}while(S[w+c]!==a);for(o=w+2*T,P=l[w+c],O=[];P!==-1;)O[O.length]=new x(u[P].x,u[P].y,null),P=u[P].k;k(O)}}}});var Pw=I((YU,Cw)=>{g();var Y6=kw();function X6(e,t){var r=new Y6(e,t);r.compose();for(var n=r.getses(),i,a,s=e.length-1,o=t.length-1,c=n.length-1;c>=0;--c)n[c].t===r.SES_COMMON?(a?(a.chain={file1index:s,file2index:o,chain:null},a=a.chain):(i={file1index:s,file2index:o,chain:null},a=i),s--,o--):n[c].t===r.SES_DELETE?s--:n[c].t===r.SES_ADD&&o--;var l={file1index:-1,file2index:-1,chain:null};return a?(a.chain=l,i):l}function Tw(e,t){for(var r=[],n=e.length,i=t.length,a=X6(e,t);a!==null;a=a.chain){var s=n-a.file1index-1,o=i-a.file2index-1;n=a.file1index,i=a.file2index,(s||o)&&r.push({file1:[n+1,s],file2:[i+1,o]})}return r.reverse(),r}function Z6(e,t,r){var n,i=Tw(t,e),a=Tw(t,r),s=[];function o(j,D){s.push([j.file1[0],D,j.file1[1],j.file2[0],j.file2[1]])}for(n=0;n<i.length;n++)o(i[n],0);for(n=0;n<a.length;n++)o(a[n],2);s.sort(function(j,D){return j[0]-D[0]});var c=[],l=0;function u(j){j>l&&(c.push([1,l,j-l]),l=j)}for(var f=0;f<s.length;f++){for(var d=f,h=s[f],p=h[0],m=p+h[2];f<s.length-1;){var v=s[f+1],y=v[0];if(y>m)break;m=Math.max(m,y+v[2]),f++}if(u(p),d==f)h[4]>0&&c.push([h[1],h[3],h[4]]);else{var b={0:[e.length,-1,t.length,-1],2:[r.length,-1,t.length,-1]};for(n=d;n<=f;n++){h=s[n];var x=h[1],E=b[x],_=h[0],k=_+h[2],w=h[3],A=w+h[4];E[0]=Math.min(w,E[0]),E[1]=Math.max(A,E[1]),E[2]=Math.min(_,E[2]),E[3]=Math.max(k,E[3])}var S=b[0][0]+(p-b[0][2]),T=b[0][1]+(m-b[0][3]),P=b[2][0]+(p-b[2][2]),O=b[2][1]+(m-b[2][3]);c.push([-1,S,T-S,p,m-p,P,O-P])}l=m}return u(t.length),c}function K6(e,t,r){var n=[],i=[e,t,r],a=Z6(e,t,r),s=[];function o(){s.length&&n.push({ok:s}),s=[]}function c(h){for(var p=0;p<h.length;p++)s.push(h[p])}function l(h){if(h[2]!=h[6])return!0;for(var p=h[1],m=h[5],v=0;v<h[2];v++)if(e[v+p]!=r[v+m])return!0;return!1}for(var u=0;u<a.length;u++){var f=a[u],d=f[0];d==-1?l(f)?(o(),n.push({conflict:{a:e.slice(f[1],f[1]+f[2]),aIndex:f[1],o:t.slice(f[3],f[3]+f[4]),oIndex:f[3],b:r.slice(f[5],f[5]+f[6]),bIndex:f[5]}})):c(i[0].slice(f[1],f[1]+f[2])):c(i[d].slice(f[1],f[1]+f[2]))}return o(),n}Cw.exports=K6});var I2=I((tG,O2)=>{g();var Es=1e3,As=Es*60,ks=As*60,da=ks*24,eI=da*7,tI=da*365.25;O2.exports=function(e,t){t=t||{};var r=typeof e;if(r===\"string\"&&e.length>0)return rI(e);if(r===\"number\"&&isFinite(e))return t.long?iI(e):nI(e);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(e))};function rI(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]),n=(t[2]||\"ms\").toLowerCase();switch(n){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return r*tI;case\"weeks\":case\"week\":case\"w\":return r*eI;case\"days\":case\"day\":case\"d\":return r*da;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return r*ks;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return r*As;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return r*Es;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return r;default:return}}}}function nI(e){var t=Math.abs(e);return t>=da?Math.round(e/da)+\"d\":t>=ks?Math.round(e/ks)+\"h\":t>=As?Math.round(e/As)+\"m\":t>=Es?Math.round(e/Es)+\"s\":e+\"ms\"}function iI(e){var t=Math.abs(e);return t>=da?wu(e,t,da,\"day\"):t>=ks?wu(e,t,ks,\"hour\"):t>=As?wu(e,t,As,\"minute\"):t>=Es?wu(e,t,Es,\"second\"):e+\" ms\"}function wu(e,t,r,n){var i=t>=r*1.5;return Math.round(e/r)+\" \"+n+(i?\"s\":\"\")}});var $2=I((nG,F2)=>{g();function aI(e){r.debug=r,r.default=r,r.coerce=c,r.disable=a,r.enable=i,r.enabled=s,r.humanize=I2(),r.destroy=l,Object.keys(e).forEach(u=>{r[u]=e[u]}),r.names=[],r.skips=[],r.formatters={};function t(u){let f=0;for(let d=0;d<u.length;d++)f=(f<<5)-f+u.charCodeAt(d),f|=0;return r.colors[Math.abs(f)%r.colors.length]}r.selectColor=t;function r(u){let f,d=null,h,p;function m(...v){if(!m.enabled)return;let y=m,b=Number(new Date),x=b-(f||b);y.diff=x,y.prev=f,y.curr=b,f=b,v[0]=r.coerce(v[0]),typeof v[0]!=\"string\"&&v.unshift(\"%O\");let E=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(k,w)=>{if(k===\"%%\")return\"%\";E++;let A=r.formatters[w];if(typeof A==\"function\"){let S=v[E];k=A.call(y,S),v.splice(E,1),E--}return k}),r.formatArgs.call(y,v),(y.log||r.log).apply(y,v)}return m.namespace=u,m.useColors=r.useColors(),m.color=r.selectColor(u),m.extend=n,m.destroy=r.destroy,Object.defineProperty(m,\"enabled\",{enumerable:!0,configurable:!1,get:()=>d!==null?d:(h!==r.namespaces&&(h=r.namespaces,p=r.enabled(u)),p),set:v=>{d=v}}),typeof r.init==\"function\"&&r.init(m),m}function n(u,f){let d=r(this.namespace+(typeof f==\"undefined\"?\":\":f)+u);return d.log=this.log,d}function i(u){r.save(u),r.namespaces=u,r.names=[],r.skips=[];let f,d=(typeof u==\"string\"?u:\"\").split(/[\\s,]+/),h=d.length;for(f=0;f<h;f++)d[f]&&(u=d[f].replace(/\\*/g,\".*?\"),u[0]===\"-\"?r.skips.push(new RegExp(\"^\"+u.slice(1)+\"$\")):r.names.push(new RegExp(\"^\"+u+\"$\")))}function a(){let u=[...r.names.map(o),...r.skips.map(o).map(f=>\"-\"+f)].join(\",\");return r.enable(\"\"),u}function s(u){if(u[u.length-1]===\"*\")return!0;let f,d;for(f=0,d=r.skips.length;f<d;f++)if(r.skips[f].test(u))return!1;for(f=0,d=r.names.length;f<d;f++)if(r.names[f].test(u))return!0;return!1}function o(u){return u.toString().substring(2,u.toString().length-2).replace(/\\.\\*\\?$/,\"*\")}function c(u){return u instanceof Error?u.stack||u.message:u}function l(){console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\")}return r.enable(r.load()),r}F2.exports=aI});var _u=I((gr,bu)=>{g();gr.formatArgs=oI;gr.save=lI;gr.load=cI;gr.useColors=sI;gr.storage=uI();gr.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\"))}})();gr.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"];function sI(){if(typeof window!=\"undefined\"&&window.process&&(window.process.type===\"renderer\"||window.process.__nwjs))return!0;if(typeof navigator!=\"undefined\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/))return!1;let e;return typeof document!=\"undefined\"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=\"undefined\"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=\"undefined\"&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/))&&parseInt(e[1],10)>=31||typeof navigator!=\"undefined\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)}function oI(e){if(e[0]=(this.useColors?\"%c\":\"\")+this.namespace+(this.useColors?\" %c\":\" \")+e[0]+(this.useColors?\"%c \":\" \")+\"+\"+bu.exports.humanize(this.diff),!this.useColors)return;let t=\"color: \"+this.color;e.splice(1,0,t,\"color: inherit\");let r=0,n=0;e[0].replace(/%[a-zA-Z%]/g,i=>{i!==\"%%\"&&(r++,i===\"%c\"&&(n=r))}),e.splice(n,0,t)}gr.log=console.debug||console.log||(()=>{});function lI(e){try{e?gr.storage.setItem(\"debug\",e):gr.storage.removeItem(\"debug\")}catch(t){}}function cI(){let e;try{e=gr.storage.getItem(\"debug\")}catch(t){}return!e&&typeof process!=\"undefined\"&&\"env\"in process&&(e=process.env.DEBUG),e}function uI(){try{return localStorage}catch(e){}}bu.exports=$2()(gr);var{formatters:fI}=bu.exports;fI.j=function(e){try{return JSON.stringify(e)}catch(t){return\"[UnexpectedJSONParseError]: \"+t.message}}});var L2=I(vr=>{\"use strict\";g();var dI=vr&&vr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(vr,\"__esModule\",{value:!0});var hI=require(\"fs\"),pI=dI(_u()),Ts=pI.default(\"@kwsites/file-exists\");function mI(e,t,r){Ts(\"checking %s\",e);try{let n=hI.statSync(e);return n.isFile()&&t?(Ts(\"[OK] path represents a file\"),!0):n.isDirectory()&&r?(Ts(\"[OK] path represents a directory\"),!0):(Ts(\"[FAIL] path represents something other than a file or directory\"),!1)}catch(n){if(n.code===\"ENOENT\")return Ts(\"[FAIL] path is not accessible: %o\",n),!1;throw Ts(\"[FATAL] %o\",n),n}}function gI(e,t=vr.READABLE){return mI(e,(t&vr.FILE)>0,(t&vr.FOLDER)>0)}vr.exists=gI;vr.FILE=1;vr.FOLDER=2;vr.READABLE=vr.FILE+vr.FOLDER});var D2=I(xu=>{\"use strict\";g();function vI(e){for(var t in e)xu.hasOwnProperty(t)||(xu[t]=e[t])}Object.defineProperty(xu,\"__esModule\",{value:!0});vI(L2())});var Rp=I(ha=>{\"use strict\";g();Object.defineProperty(ha,\"__esModule\",{value:!0});ha.createDeferred=ha.deferred=void 0;function Pp(){let e,t,r=\"pending\";return{promise:new Promise((i,a)=>{e=i,t=a}),done(i){r===\"pending\"&&(r=\"resolved\",e(i))},fail(i){r===\"pending\"&&(r=\"rejected\",t(i))},get fulfilled(){return r!==\"pending\"},get status(){return r}}}ha.deferred=Pp;ha.createDeferred=Pp;ha.default=Pp});var kx=I((XG,Ax)=>{\"use strict\";g();Ax.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Cx=I((KG,Tx)=>{g();var xm={px:{px:1,cm:37.79527559055118,mm:3.7795275590551185,in:96,pt:1.3333333333333333,pc:16},cm:{px:.026458333333333334,cm:1,mm:.1,in:2.54,pt:.035277777777777776,pc:.42333333333333334},mm:{px:.26458333333333334,cm:10,mm:1,in:25.4,pt:.35277777777777775,pc:4.233333333333333},in:{px:.010416666666666666,cm:.39370078740157477,mm:.03937007874015748,in:1,pt:.013888888888888888,pc:.16666666666666666},pt:{px:.75,cm:28.346456692913385,mm:2.834645669291339,in:72,pt:1,pc:12},pc:{px:.0625,cm:2.3622047244094486,mm:.2362204724409449,in:6,pt:.08333333333333333,pc:1},deg:{deg:1,grad:.9,rad:180/Math.PI,turn:360},grad:{deg:1.1111111111111112,grad:1,rad:200/Math.PI,turn:400},rad:{deg:Math.PI/180,grad:Math.PI/200,rad:1,turn:Math.PI*2},turn:{deg:.002777777777777778,grad:.0025,rad:.5/Math.PI,turn:1},s:{s:1,ms:.001},ms:{s:1e3,ms:1},Hz:{Hz:1,kHz:1e3},kHz:{Hz:.001,kHz:1},dpi:{dpi:1,dpcm:.39370078740157477,dppx:.010416666666666666},dpcm:{dpi:2.54,dpcm:1,dppx:.026458333333333334},dppx:{dpi:96,dpcm:37.79527559055118,dppx:1}};Tx.exports=function(e,t,r,n){if(!xm.hasOwnProperty(r))throw new Error(\"Cannot convert to \"+r);if(!xm[r].hasOwnProperty(t))throw new Error(\"Cannot convert from \"+t+\" to \"+r);var i=xm[r][t]*e;return n!==!1?(n=Math.pow(10,parseInt(n)||5),Math.round(i*n)/n):i}});var Ux=I(Wn=>{\"use strict\";g();Object.defineProperty(Wn,\"__esModule\",{value:!0});Wn.fromRgba=Fs;Wn.fromRgb=Sm;Wn.fromHsla=qu;Wn.fromHsl=Bx;Wn.fromString=Hx;Wn.default=void 0;var Px=Ox(kx()),P$=Ox(Cx());function Ox(e){return e&&e.__esModule?e:{default:e}}function R$(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function Rx(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function M$(e,t,r){return t&&Rx(e.prototype,t),r&&Rx(e,r),e}function Wt(e,t){return $$(e)||F$(e,t)||I$(e,t)||O$()}function O$(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function I$(e,t){if(e){if(typeof e==\"string\")return Mx(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r===\"Object\"&&e.constructor&&(r=e.constructor.name),r===\"Map\"||r===\"Set\")return Array.from(e);if(r===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Mx(e,t)}}function Mx(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function F$(e,t){if(!(typeof Symbol==\"undefined\"||!(Symbol.iterator in Object(e)))){var r=[],n=!0,i=!1,a=void 0;try{for(var s=e[Symbol.iterator](),o;!(n=(o=s.next()).done)&&(r.push(o.value),!(t&&r.length===t));n=!0);}catch(c){i=!0,a=c}finally{try{!n&&s.return!=null&&s.return()}finally{if(i)throw a}}return r}}function $$(e){if(Array.isArray(e))return e}var Ix=/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?$/,Fx=/^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])?$/,$x=/^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)(?:\\s*,\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/,Lx=/^rgba?\\(\\s*(\\d+)\\s+(\\d+)\\s+(\\d+)(?:\\s*\\/\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/,Dx=/^rgba?\\(\\s*(\\d+%)\\s*,\\s*(\\d+%)\\s*,\\s*(\\d+%)(?:\\s*,\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/,Nx=/^rgba?\\(\\s*(\\d+%)\\s+(\\d+%)\\s+(\\d+%)(?:\\s*\\/\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/,jx=/^hsla?\\(\\s*(\\d+)(deg|rad|grad|turn)?\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%(?:\\s*,\\s*(0|1|0?\\.\\d+|\\d+%))?\\s*\\)$/;function Ol(e,t){return e.indexOf(t)>-1}function L$(e,t,r){var n=e/255,i=t/255,a=r/255,s=Math.max(n,i,a),o=Math.min(n,i,a),c=s-o,l=(s+o)/2;if(c===0)return[0,0,l*100];var u=c/(1-Math.abs(2*l-1)),f=function(){switch(s){case n:return(i-a)/c%6;case i:return(a-n)/c+2;default:return(n-i)/c+4}}();return[f*60,u*100,l*100]}function D$(e,t,r){var n=e/60,i=t/100,a=r/100,s=(1-Math.abs(2*a-1))*i,o=s*(1-Math.abs(n%2-1)),c=a-s/2,l=function(){return n<1?[s,o,0]:n<2?[o,s,0]:n<3?[0,s,o]:n<4?[0,o,s]:n<5?[o,0,s]:[s,0,o]}(),u=Wt(l,3),f=u[0],d=u[1],h=u[2];return[(f+c)*255,(d+c)*255,(h+c)*255]}var N$=function(){function e(t){var r=Wt(t,4),n=r[0],i=r[1],a=r[2],s=r[3];R$(this,e),this.values=[Math.max(Math.min(parseInt(n,10),255),0),Math.max(Math.min(parseInt(i,10),255),0),Math.max(Math.min(parseInt(a,10),255),0),s==null?1:Math.max(Math.min(parseFloat(s),255),0)]}return M$(e,[{key:\"toRgbString\",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3];return s===1?\"rgb(\".concat(n,\", \").concat(i,\", \").concat(a,\")\"):\"rgba(\".concat(n,\", \").concat(i,\", \").concat(a,\", \").concat(s,\")\")}},{key:\"toHslString\",value:function(){var r=this.toHslaArray(),n=Wt(r,4),i=n[0],a=n[1],s=n[2],o=n[3];return o===1?\"hsl(\".concat(i,\", \").concat(a,\"%, \").concat(s,\"%)\"):\"hsla(\".concat(i,\", \").concat(a,\"%, \").concat(s,\"%, \").concat(o,\")\")}},{key:\"toHexString\",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3];return n=Number(n).toString(16).padStart(2,\"0\"),i=Number(i).toString(16).padStart(2,\"0\"),a=Number(a).toString(16).padStart(2,\"0\"),s=s<1?parseInt(s*255,10).toString(16).padStart(2,\"0\"):\"\",\"#\".concat(n).concat(i).concat(a).concat(s)}},{key:\"toRgbaArray\",value:function(){return this.values}},{key:\"toHslaArray\",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3],o=L$(n,i,a),c=Wt(o,3),l=c[0],u=c[1],f=c[2];return[l,u,f,s]}}]),e}();function Fs(e){var t=Wt(e,4),r=t[0],n=t[1],i=t[2],a=t[3];return new N$([r,n,i,a])}function Sm(e){var t=Wt(e,3),r=t[0],n=t[1],i=t[2];return Fs([r,n,i,1])}function qu(e){var t=Wt(e,4),r=t[0],n=t[1],i=t[2],a=t[3],s=D$(r,n,i),o=Wt(s,3),c=o[0],l=o[1],u=o[2];return Fs([c,l,u,a])}function Bx(e){var t=Wt(e,3),r=t[0],n=t[1],i=t[2];return qu([r,n,i,1])}function j$(e){var t=Ix.exec(e)||Fx.exec(e),r=Wt(t,5),n=r[1],i=r[2],a=r[3],s=r[4];return n=parseInt(n.length<2?n.repeat(2):n,16),i=parseInt(i.length<2?i.repeat(2):i,16),a=parseInt(a.length<2?a.repeat(2):a,16),s=s&&(parseInt(s.length<2?s.repeat(2):s,16)/255).toPrecision(1)||1,Fs([n,i,a,s])}function B$(e){var t=$x.exec(e)||Dx.exec(e)||Lx.exec(e)||Nx.exec(e),r=Wt(t,5),n=r[1],i=r[2],a=r[3],s=r[4];return n=Ol(n,\"%\")?parseInt(n,10)*255/100:parseInt(n,10),i=Ol(i,\"%\")?parseInt(i,10)*255/100:parseInt(i,10),a=Ol(a,\"%\")>0?parseInt(a,10)*255/100:parseInt(a,10),s=s===void 0?1:parseFloat(s)/(Ol(s,\"%\")?100:1),Fs([n,i,a,s])}function H$(e){var t=jx.exec(e),r=Wt(t,6),n=r[1],i=r[2],a=r[3],s=r[4],o=r[5];return i=i||\"deg\",n=(0,P$.default)(parseFloat(n),i,\"deg\"),a=parseFloat(a),s=parseFloat(s),o=o===void 0?1:parseFloat(o)/(Ol(o,\"%\")?100:1),qu([n,a,s,o])}function Hx(e){return Px.default[e]?Sm(Px.default[e]):Ix.test(e)||Fx.test(e)?j$(e):$x.test(e)||Dx.test(e)||Lx.test(e)||Nx.test(e)?B$(e):jx.test(e)?H$(e):null}var U$={fromString:Hx,fromRgb:Sm,fromRgba:Fs,fromHsl:Bx,fromHsla:qu};Wn.default=U$});var Em=I((tz,zx)=>{\"use strict\";g();var Gx=Object.prototype.toString;zx.exports=function(t){var r=Gx.call(t),n=r===\"[object Arguments]\";return n||(n=r!==\"[object Array]\"&&t!==null&&typeof t==\"object\"&&typeof t.length==\"number\"&&t.length>=0&&Gx.call(t.callee)===\"[object Function]\"),n}});var Qx=I((nz,Jx)=>{\"use strict\";g();var Kx;Object.keys||(Il=Object.prototype.hasOwnProperty,Am=Object.prototype.toString,Vx=Em(),km=Object.prototype.propertyIsEnumerable,Wx=!km.call({toString:null},\"toString\"),qx=km.call(function(){},\"prototype\"),Fl=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],Yu=function(e){var t=e.constructor;return t&&t.prototype===e},Yx={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},Xx=function(){if(typeof window==\"undefined\")return!1;for(var e in window)try{if(!Yx[\"$\"+e]&&Il.call(window,e)&&window[e]!==null&&typeof window[e]==\"object\")try{Yu(window[e])}catch(t){return!0}}catch(t){return!0}return!1}(),Zx=function(e){if(typeof window==\"undefined\"||!Xx)return Yu(e);try{return Yu(e)}catch(t){return!1}},Kx=function(t){var r=t!==null&&typeof t==\"object\",n=Am.call(t)===\"[object Function]\",i=Vx(t),a=r&&Am.call(t)===\"[object String]\",s=[];if(!r&&!n&&!i)throw new TypeError(\"Object.keys called on a non-object\");var o=qx&&n;if(a&&t.length>0&&!Il.call(t,0))for(var c=0;c<t.length;++c)s.push(String(c));if(i&&t.length>0)for(var l=0;l<t.length;++l)s.push(String(l));else for(var u in t)!(o&&u===\"prototype\")&&Il.call(t,u)&&s.push(String(u));if(Wx)for(var f=Zx(t),d=0;d<Fl.length;++d)!(f&&Fl[d]===\"constructor\")&&Il.call(t,Fl[d])&&s.push(Fl[d]);return s});var Il,Am,Vx,km,Wx,qx,Fl,Yu,Yx,Xx,Zx;Jx.exports=Kx});var Zu=I((az,rS)=>{\"use strict\";g();var G$=Array.prototype.slice,z$=Em(),eS=Object.keys,Xu=eS?function(t){return eS(t)}:Qx(),tS=Object.keys;Xu.shim=function(){if(Object.keys){var t=function(){var r=Object.keys(arguments);return r&&r.length===arguments.length}(1,2);t||(Object.keys=function(n){return z$(n)?tS(G$.call(n)):tS(n)})}else Object.keys=Xu;return Object.keys||Xu};rS.exports=Xu});var iS=I((oz,nS)=>{\"use strict\";g();nS.exports=Error});var sS=I((cz,aS)=>{\"use strict\";g();aS.exports=EvalError});var lS=I((fz,oS)=>{\"use strict\";g();oS.exports=RangeError});var uS=I((hz,cS)=>{\"use strict\";g();cS.exports=ReferenceError});var Tm=I((mz,fS)=>{\"use strict\";g();fS.exports=SyntaxError});var qn=I((vz,dS)=>{\"use strict\";g();dS.exports=TypeError});var pS=I((wz,hS)=>{\"use strict\";g();hS.exports=URIError});var $l=I((_z,mS)=>{\"use strict\";g();mS.exports=function(){if(typeof Symbol!=\"function\"||typeof Object.getOwnPropertySymbols!=\"function\")return!1;if(typeof Symbol.iterator==\"symbol\")return!0;var t={},r=Symbol(\"test\"),n=Object(r);if(typeof r==\"string\"||Object.prototype.toString.call(r)!==\"[object Symbol]\"||Object.prototype.toString.call(n)!==\"[object Symbol]\")return!1;var i=42;t[r]=i;for(r in t)return!1;if(typeof Object.keys==\"function\"&&Object.keys(t).length!==0||typeof Object.getOwnPropertyNames==\"function\"&&Object.getOwnPropertyNames(t).length!==0)return!1;var a=Object.getOwnPropertySymbols(t);if(a.length!==1||a[0]!==r||!Object.prototype.propertyIsEnumerable.call(t,r))return!1;if(typeof Object.getOwnPropertyDescriptor==\"function\"){var s=Object.getOwnPropertyDescriptor(t,r);if(s.value!==i||s.enumerable!==!0)return!1}return!0}});var Ku=I((Sz,vS)=>{\"use strict\";g();var gS=typeof Symbol!=\"undefined\"&&Symbol,V$=$l();vS.exports=function(){return typeof gS!=\"function\"||typeof Symbol!=\"function\"||typeof gS(\"foo\")!=\"symbol\"||typeof Symbol(\"bar\")!=\"symbol\"?!1:V$()}});var wS=I((Az,yS)=>{\"use strict\";g();var Cm={__proto__:null,foo:{}},W$=Object;yS.exports=function(){return{__proto__:Cm}.foo===Cm.foo&&!(Cm instanceof W$)}});var xS=I((Tz,_S)=>{\"use strict\";g();var q$=\"Function.prototype.bind called on incompatible \",Y$=Object.prototype.toString,X$=Math.max,Z$=\"[object Function]\",bS=function(t,r){for(var n=[],i=0;i<t.length;i+=1)n[i]=t[i];for(var a=0;a<r.length;a+=1)n[a+t.length]=r[a];return n},K$=function(t,r){for(var n=[],i=r||0,a=0;i<t.length;i+=1,a+=1)n[a]=t[i];return n},J$=function(e,t){for(var r=\"\",n=0;n<e.length;n+=1)r+=e[n],n+1<e.length&&(r+=t);return r};_S.exports=function(t){var r=this;if(typeof r!=\"function\"||Y$.apply(r)!==Z$)throw new TypeError(q$+r);for(var n=K$(arguments,1),i,a=function(){if(this instanceof i){var u=r.apply(this,bS(n,arguments));return Object(u)===u?u:this}return r.apply(t,bS(n,arguments))},s=X$(0,r.length-n.length),o=[],c=0;c<s;c++)o[c]=\"$\"+c;if(i=Function(\"binder\",\"return function (\"+J$(o,\",\")+\"){ return binder.apply(this,arguments); }\")(a),r.prototype){var l=function(){};l.prototype=r.prototype,i.prototype=new l,l.prototype=null}return i}});var Ju=I((Pz,SS)=>{\"use strict\";g();var Q$=xS();SS.exports=Function.prototype.bind||Q$});var Pm=I((Mz,ES)=>{\"use strict\";g();var eL=Function.prototype.call,tL=Object.prototype.hasOwnProperty,rL=Ju();ES.exports=rL.call(eL,tL)});var en=I((Iz,PS)=>{\"use strict\";g();var ve,nL=iS(),iL=sS(),aL=lS(),sL=uS(),Ns=Tm(),Ds=qn(),oL=pS(),CS=Function,Rm=function(e){try{return CS('\"use strict\"; return ('+e+\").constructor;\")()}catch(t){}},va=Object.getOwnPropertyDescriptor;if(va)try{va({},\"\")}catch(e){va=null}var Mm=function(){throw new Ds},lL=va?function(){try{return arguments.callee,Mm}catch(e){try{return va(arguments,\"callee\").get}catch(t){return Mm}}}():Mm,$s=Ku()(),cL=wS()(),wt=Object.getPrototypeOf||(cL?function(e){return e.__proto__}:null),Ls={},uL=typeof Uint8Array==\"undefined\"||!wt?ve:wt(Uint8Array),ya={__proto__:null,\"%AggregateError%\":typeof AggregateError==\"undefined\"?ve:AggregateError,\"%Array%\":Array,\"%ArrayBuffer%\":typeof ArrayBuffer==\"undefined\"?ve:ArrayBuffer,\"%ArrayIteratorPrototype%\":$s&&wt?wt([][Symbol.iterator]()):ve,\"%AsyncFromSyncIteratorPrototype%\":ve,\"%AsyncFunction%\":Ls,\"%AsyncGenerator%\":Ls,\"%AsyncGeneratorFunction%\":Ls,\"%AsyncIteratorPrototype%\":Ls,\"%Atomics%\":typeof Atomics==\"undefined\"?ve:Atomics,\"%BigInt%\":typeof BigInt==\"undefined\"?ve:BigInt,\"%BigInt64Array%\":typeof BigInt64Array==\"undefined\"?ve:BigInt64Array,\"%BigUint64Array%\":typeof BigUint64Array==\"undefined\"?ve:BigUint64Array,\"%Boolean%\":Boolean,\"%DataView%\":typeof DataView==\"undefined\"?ve:DataView,\"%Date%\":Date,\"%decodeURI%\":decodeURI,\"%decodeURIComponent%\":decodeURIComponent,\"%encodeURI%\":encodeURI,\"%encodeURIComponent%\":encodeURIComponent,\"%Error%\":nL,\"%eval%\":eval,\"%EvalError%\":iL,\"%Float32Array%\":typeof Float32Array==\"undefined\"?ve:Float32Array,\"%Float64Array%\":typeof Float64Array==\"undefined\"?ve:Float64Array,\"%FinalizationRegistry%\":typeof FinalizationRegistry==\"undefined\"?ve:FinalizationRegistry,\"%Function%\":CS,\"%GeneratorFunction%\":Ls,\"%Int8Array%\":typeof Int8Array==\"undefined\"?ve:Int8Array,\"%Int16Array%\":typeof Int16Array==\"undefined\"?ve:Int16Array,\"%Int32Array%\":typeof Int32Array==\"undefined\"?ve:Int32Array,\"%isFinite%\":isFinite,\"%isNaN%\":isNaN,\"%IteratorPrototype%\":$s&&wt?wt(wt([][Symbol.iterator]())):ve,\"%JSON%\":typeof JSON==\"object\"?JSON:ve,\"%Map%\":typeof Map==\"undefined\"?ve:Map,\"%MapIteratorPrototype%\":typeof Map==\"undefined\"||!$s||!wt?ve:wt(new Map()[Symbol.iterator]()),\"%Math%\":Math,\"%Number%\":Number,\"%Object%\":Object,\"%parseFloat%\":parseFloat,\"%parseInt%\":parseInt,\"%Promise%\":typeof Promise==\"undefined\"?ve:Promise,\"%Proxy%\":typeof Proxy==\"undefined\"?ve:Proxy,\"%RangeError%\":aL,\"%ReferenceError%\":sL,\"%Reflect%\":typeof Reflect==\"undefined\"?ve:Reflect,\"%RegExp%\":RegExp,\"%Set%\":typeof Set==\"undefined\"?ve:Set,\"%SetIteratorPrototype%\":typeof Set==\"undefined\"||!$s||!wt?ve:wt(new Set()[Symbol.iterator]()),\"%SharedArrayBuffer%\":typeof SharedArrayBuffer==\"undefined\"?ve:SharedArrayBuffer,\"%String%\":String,\"%StringIteratorPrototype%\":$s&&wt?wt(\"\"[Symbol.iterator]()):ve,\"%Symbol%\":$s?Symbol:ve,\"%SyntaxError%\":Ns,\"%ThrowTypeError%\":lL,\"%TypedArray%\":uL,\"%TypeError%\":Ds,\"%Uint8Array%\":typeof Uint8Array==\"undefined\"?ve:Uint8Array,\"%Uint8ClampedArray%\":typeof Uint8ClampedArray==\"undefined\"?ve:Uint8ClampedArray,\"%Uint16Array%\":typeof Uint16Array==\"undefined\"?ve:Uint16Array,\"%Uint32Array%\":typeof Uint32Array==\"undefined\"?ve:Uint32Array,\"%URIError%\":oL,\"%WeakMap%\":typeof WeakMap==\"undefined\"?ve:WeakMap,\"%WeakRef%\":typeof WeakRef==\"undefined\"?ve:WeakRef,\"%WeakSet%\":typeof WeakSet==\"undefined\"?ve:WeakSet};if(wt)try{null.error}catch(e){AS=wt(wt(e)),ya[\"%Error.prototype%\"]=AS}var AS,fL=function e(t){var r;if(t===\"%AsyncFunction%\")r=Rm(\"async function () {}\");else if(t===\"%GeneratorFunction%\")r=Rm(\"function* () {}\");else if(t===\"%AsyncGeneratorFunction%\")r=Rm(\"async function* () {}\");else if(t===\"%AsyncGenerator%\"){var n=e(\"%AsyncGeneratorFunction%\");n&&(r=n.prototype)}else if(t===\"%AsyncIteratorPrototype%\"){var i=e(\"%AsyncGenerator%\");i&&wt&&(r=wt(i.prototype))}return ya[t]=r,r},kS={__proto__:null,\"%ArrayBufferPrototype%\":[\"ArrayBuffer\",\"prototype\"],\"%ArrayPrototype%\":[\"Array\",\"prototype\"],\"%ArrayProto_entries%\":[\"Array\",\"prototype\",\"entries\"],\"%ArrayProto_forEach%\":[\"Array\",\"prototype\",\"forEach\"],\"%ArrayProto_keys%\":[\"Array\",\"prototype\",\"keys\"],\"%ArrayProto_values%\":[\"Array\",\"prototype\",\"values\"],\"%AsyncFunctionPrototype%\":[\"AsyncFunction\",\"prototype\"],\"%AsyncGenerator%\":[\"AsyncGeneratorFunction\",\"prototype\"],\"%AsyncGeneratorPrototype%\":[\"AsyncGeneratorFunction\",\"prototype\",\"prototype\"],\"%BooleanPrototype%\":[\"Boolean\",\"prototype\"],\"%DataViewPrototype%\":[\"DataView\",\"prototype\"],\"%DatePrototype%\":[\"Date\",\"prototype\"],\"%ErrorPrototype%\":[\"Error\",\"prototype\"],\"%EvalErrorPrototype%\":[\"EvalError\",\"prototype\"],\"%Float32ArrayPrototype%\":[\"Float32Array\",\"prototype\"],\"%Float64ArrayPrototype%\":[\"Float64Array\",\"prototype\"],\"%FunctionPrototype%\":[\"Function\",\"prototype\"],\"%Generator%\":[\"GeneratorFunction\",\"prototype\"],\"%GeneratorPrototype%\":[\"GeneratorFunction\",\"prototype\",\"prototype\"],\"%Int8ArrayPrototype%\":[\"Int8Array\",\"prototype\"],\"%Int16ArrayPrototype%\":[\"Int16Array\",\"prototype\"],\"%Int32ArrayPrototype%\":[\"Int32Array\",\"prototype\"],\"%JSONParse%\":[\"JSON\",\"parse\"],\"%JSONStringify%\":[\"JSON\",\"stringify\"],\"%MapPrototype%\":[\"Map\",\"prototype\"],\"%NumberPrototype%\":[\"Number\",\"prototype\"],\"%ObjectPrototype%\":[\"Object\",\"prototype\"],\"%ObjProto_toString%\":[\"Object\",\"prototype\",\"toString\"],\"%ObjProto_valueOf%\":[\"Object\",\"prototype\",\"valueOf\"],\"%PromisePrototype%\":[\"Promise\",\"prototype\"],\"%PromiseProto_then%\":[\"Promise\",\"prototype\",\"then\"],\"%Promise_all%\":[\"Promise\",\"all\"],\"%Promise_reject%\":[\"Promise\",\"reject\"],\"%Promise_resolve%\":[\"Promise\",\"resolve\"],\"%RangeErrorPrototype%\":[\"RangeError\",\"prototype\"],\"%ReferenceErrorPrototype%\":[\"ReferenceError\",\"prototype\"],\"%RegExpPrototype%\":[\"RegExp\",\"prototype\"],\"%SetPrototype%\":[\"Set\",\"prototype\"],\"%SharedArrayBufferPrototype%\":[\"SharedArrayBuffer\",\"prototype\"],\"%StringPrototype%\":[\"String\",\"prototype\"],\"%SymbolPrototype%\":[\"Symbol\",\"prototype\"],\"%SyntaxErrorPrototype%\":[\"SyntaxError\",\"prototype\"],\"%TypedArrayPrototype%\":[\"TypedArray\",\"prototype\"],\"%TypeErrorPrototype%\":[\"TypeError\",\"prototype\"],\"%Uint8ArrayPrototype%\":[\"Uint8Array\",\"prototype\"],\"%Uint8ClampedArrayPrototype%\":[\"Uint8ClampedArray\",\"prototype\"],\"%Uint16ArrayPrototype%\":[\"Uint16Array\",\"prototype\"],\"%Uint32ArrayPrototype%\":[\"Uint32Array\",\"prototype\"],\"%URIErrorPrototype%\":[\"URIError\",\"prototype\"],\"%WeakMapPrototype%\":[\"WeakMap\",\"prototype\"],\"%WeakSetPrototype%\":[\"WeakSet\",\"prototype\"]},Ll=Ju(),Qu=Pm(),dL=Ll.call(Function.call,Array.prototype.concat),hL=Ll.call(Function.apply,Array.prototype.splice),TS=Ll.call(Function.call,String.prototype.replace),ef=Ll.call(Function.call,String.prototype.slice),pL=Ll.call(Function.call,RegExp.prototype.exec),mL=/[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g,gL=/\\\\(\\\\)?/g,vL=function(t){var r=ef(t,0,1),n=ef(t,-1);if(r===\"%\"&&n!==\"%\")throw new Ns(\"invalid intrinsic syntax, expected closing `%`\");if(n===\"%\"&&r!==\"%\")throw new Ns(\"invalid intrinsic syntax, expected opening `%`\");var i=[];return TS(t,mL,function(a,s,o,c){i[i.length]=o?TS(c,gL,\"$1\"):s||a}),i},yL=function(t,r){var n=t,i;if(Qu(kS,n)&&(i=kS[n],n=\"%\"+i[0]+\"%\"),Qu(ya,n)){var a=ya[n];if(a===Ls&&(a=fL(n)),typeof a==\"undefined\"&&!r)throw new Ds(\"intrinsic \"+t+\" exists, but is not available. Please file an issue!\");return{alias:i,name:n,value:a}}throw new Ns(\"intrinsic \"+t+\" does not exist!\")};PS.exports=function(t,r){if(typeof t!=\"string\"||t.length===0)throw new Ds(\"intrinsic name must be a non-empty string\");if(arguments.length>1&&typeof r!=\"boolean\")throw new Ds('\"allowMissing\" argument must be a boolean');if(pL(/^%?[^%]*%?$/,t)===null)throw new Ns(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");var n=vL(t),i=n.length>0?n[0]:\"\",a=yL(\"%\"+i+\"%\",r),s=a.name,o=a.value,c=!1,l=a.alias;l&&(i=l[0],hL(n,dL([0,1],l)));for(var u=1,f=!0;u<n.length;u+=1){var d=n[u],h=ef(d,0,1),p=ef(d,-1);if((h==='\"'||h===\"'\"||h===\"`\"||p==='\"'||p===\"'\"||p===\"`\")&&h!==p)throw new Ns(\"property names with quotes must have matching quotes\");if((d===\"constructor\"||!f)&&(c=!0),i+=\".\"+d,s=\"%\"+i+\"%\",Qu(ya,s))o=ya[s];else if(o!=null){if(!(d in o)){if(!r)throw new Ds(\"base intrinsic for \"+t+\" exists, but the property is not available.\");return}if(va&&u+1>=n.length){var m=va(o,d);f=!!m,f&&\"get\"in m&&!(\"originalValue\"in m.get)?o=m.get:o=o[d]}else f=Qu(o,d),o=o[d];f&&!c&&(ya[s]=o)}}return o}});var rf=I(($z,RS)=>{\"use strict\";g();var wL=en(),tf=wL(\"%Object.defineProperty%\",!0)||!1;if(tf)try{tf({},\"a\",{value:1})}catch(e){tf=!1}RS.exports=tf});var af=I((Dz,MS)=>{\"use strict\";g();var bL=en(),nf=bL(\"%Object.getOwnPropertyDescriptor%\",!0);if(nf)try{nf([],\"length\")}catch(e){nf=null}MS.exports=nf});var sf=I((jz,FS)=>{\"use strict\";g();var OS=rf(),_L=Tm(),js=qn(),IS=af();FS.exports=function(t,r,n){if(!t||typeof t!=\"object\"&&typeof t!=\"function\")throw new js(\"`obj` must be an object or a function`\");if(typeof r!=\"string\"&&typeof r!=\"symbol\")throw new js(\"`property` must be a string or a symbol`\");if(arguments.length>3&&typeof arguments[3]!=\"boolean\"&&arguments[3]!==null)throw new js(\"`nonEnumerable`, if provided, must be a boolean or null\");if(arguments.length>4&&typeof arguments[4]!=\"boolean\"&&arguments[4]!==null)throw new js(\"`nonWritable`, if provided, must be a boolean or null\");if(arguments.length>5&&typeof arguments[5]!=\"boolean\"&&arguments[5]!==null)throw new js(\"`nonConfigurable`, if provided, must be a boolean or null\");if(arguments.length>6&&typeof arguments[6]!=\"boolean\")throw new js(\"`loose`, if provided, must be a boolean\");var i=arguments.length>3?arguments[3]:null,a=arguments.length>4?arguments[4]:null,s=arguments.length>5?arguments[5]:null,o=arguments.length>6?arguments[6]:!1,c=!!IS&&IS(t,r);if(OS)OS(t,r,{configurable:s===null&&c?c.configurable:!s,enumerable:i===null&&c?c.enumerable:!i,value:n,writable:a===null&&c?c.writable:!a});else if(o||!i&&!a&&!s)t[r]=n;else throw new _L(\"This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.\")}});var of=I((Hz,LS)=>{\"use strict\";g();var Om=rf(),$S=function(){return!!Om};$S.hasArrayLengthDefineBug=function(){if(!Om)return null;try{return Om([],\"length\",{value:1}).length!==1}catch(t){return!0}};LS.exports=$S});var Ti=I((Gz,BS)=>{\"use strict\";g();var xL=Zu(),SL=typeof Symbol==\"function\"&&typeof Symbol(\"foo\")==\"symbol\",EL=Object.prototype.toString,AL=Array.prototype.concat,DS=sf(),kL=function(e){return typeof e==\"function\"&&EL.call(e)===\"[object Function]\"},NS=of()(),TL=function(e,t,r,n){if(t in e){if(n===!0){if(e[t]===r)return}else if(!kL(n)||!n())return}NS?DS(e,t,r,!0):DS(e,t,r)},jS=function(e,t){var r=arguments.length>2?arguments[2]:{},n=xL(t);SL&&(n=AL.call(n,Object.getOwnPropertySymbols(t)));for(var i=0;i<n.length;i+=1)TL(e,n[i],t[n[i]],r[n[i]])};jS.supportsDescriptors=!!NS;BS.exports=jS});var VS=I((Vz,zS)=>{\"use strict\";g();var CL=en(),HS=sf(),PL=of()(),US=af(),GS=qn(),RL=CL(\"%Math.floor%\");zS.exports=function(t,r){if(typeof t!=\"function\")throw new GS(\"`fn` is not a function\");if(typeof r!=\"number\"||r<0||r>4294967295||RL(r)!==r)throw new GS(\"`length` must be a positive 32-bit integer\");var n=arguments.length>2&&!!arguments[2],i=!0,a=!0;if(\"length\"in t&&US){var s=US(t,\"length\");s&&!s.configurable&&(i=!1),s&&!s.writable&&(a=!1)}return(i||a||!n)&&(PL?HS(t,\"length\",r,!0,!0):HS(t,\"length\",r)),t}});var wa=I((qz,lf)=>{\"use strict\";g();var Im=Ju(),cf=en(),ML=VS(),OL=qn(),YS=cf(\"%Function.prototype.apply%\"),XS=cf(\"%Function.prototype.call%\"),ZS=cf(\"%Reflect.apply%\",!0)||Im.call(XS,YS),WS=rf(),IL=cf(\"%Math.max%\");lf.exports=function(t){if(typeof t!=\"function\")throw new OL(\"a function is required\");var r=ZS(Im,XS,arguments);return ML(r,1+IL(0,t.length-(arguments.length-1)),!0)};var qS=function(){return ZS(Im,YS,arguments)};WS?WS(lf.exports,\"apply\",{value:qS}):lf.exports.apply=qS});var br=I((Xz,QS)=>{\"use strict\";g();var KS=en(),JS=wa(),FL=JS(KS(\"String.prototype.indexOf\"));QS.exports=function(t,r){var n=KS(t,!!r);return typeof n==\"function\"&&FL(t,\".prototype.\")>-1?JS(n):n}});var Fm=I((Kz,iE)=>{\"use strict\";g();var $L=Zu(),rE=$l()(),nE=br(),eE=Object,LL=nE(\"Array.prototype.push\"),tE=nE(\"Object.prototype.propertyIsEnumerable\"),DL=rE?Object.getOwnPropertySymbols:null;iE.exports=function(t,r){if(t==null)throw new TypeError(\"target must be an object\");var n=eE(t);if(arguments.length===1)return n;for(var i=1;i<arguments.length;++i){var a=eE(arguments[i]),s=$L(a),o=rE&&(Object.getOwnPropertySymbols||DL);if(o)for(var c=o(a),l=0;l<c.length;++l){var u=c[l];tE(a,u)&&LL(s,u)}for(var f=0;f<s.length;++f){var d=s[f];if(tE(a,d)){var h=a[d];n[d]=h}}}return n}});var Lm=I((Qz,aE)=>{\"use strict\";g();var $m=Fm(),NL=function(){if(!Object.assign)return!1;for(var e=\"abcdefghijklmnopqrst\",t=e.split(\"\"),r={},n=0;n<t.length;++n)r[t[n]]=t[n];var i=Object.assign({},r),a=\"\";for(var s in i)a+=s;return e!==a},jL=function(){if(!Object.assign||!Object.preventExtensions)return!1;var e=Object.preventExtensions({1:2});try{Object.assign(e,\"xy\")}catch(t){return e[1]===\"y\"}return!1};aE.exports=function(){return!Object.assign||NL()||jL()?$m:Object.assign}});var oE=I((tV,sE)=>{\"use strict\";g();var BL=Ti(),HL=Lm();sE.exports=function(){var t=HL();return BL(Object,{assign:t},{assign:function(){return Object.assign!==t}}),t}});var fE=I((nV,uE)=>{\"use strict\";g();var UL=Ti(),GL=wa(),zL=Fm(),lE=Lm(),VL=oE(),WL=GL.apply(lE()),cE=function(t,r){return WL(Object,arguments)};UL(cE,{getPolyfill:lE,implementation:zL,shim:VL});uE.exports=cE});var hE=I((aV,dE)=>{\"use strict\";g();var Nl=function(){return typeof function(){}.name==\"string\"},Dl=Object.getOwnPropertyDescriptor;if(Dl)try{Dl([],\"length\")}catch(e){Dl=null}Nl.functionsHaveConfigurableNames=function(){if(!Nl()||!Dl)return!1;var t=Dl(function(){},\"name\");return!!t&&!!t.configurable};var qL=Function.prototype.bind;Nl.boundFunctionsHaveNames=function(){return Nl()&&typeof qL==\"function\"&&function(){}.bind().name!==\"\"};dE.exports=Nl});var gE=I((oV,mE)=>{\"use strict\";g();var pE=sf(),YL=of()(),XL=hE().functionsHaveConfigurableNames(),ZL=qn();mE.exports=function(t,r){if(typeof t!=\"function\")throw new ZL(\"`fn` is not a function\");var n=arguments.length>2&&!!arguments[2];return(!n||XL)&&(YL?pE(t,\"name\",r,!0,!0):pE(t,\"name\",r)),t}});var Dm=I((cV,vE)=>{\"use strict\";g();var KL=gE(),JL=qn(),QL=Object;vE.exports=KL(function(){if(this==null||this!==QL(this))throw new JL(\"RegExp.prototype.flags getter called on non-object\");var t=\"\";return this.hasIndices&&(t+=\"d\"),this.global&&(t+=\"g\"),this.ignoreCase&&(t+=\"i\"),this.multiline&&(t+=\"m\"),this.dotAll&&(t+=\"s\"),this.unicode&&(t+=\"u\"),this.unicodeSets&&(t+=\"v\"),this.sticky&&(t+=\"y\"),t},\"get flags\",!0)});var Nm=I((fV,yE)=>{\"use strict\";g();var eD=Dm(),tD=Ti().supportsDescriptors,rD=Object.getOwnPropertyDescriptor;yE.exports=function(){if(tD&&/a/mig.flags===\"gim\"){var t=rD(RegExp.prototype,\"flags\");if(t&&typeof t.get==\"function\"&&\"dotAll\"in RegExp.prototype&&\"hasIndices\"in RegExp.prototype){var r=\"\",n={};if(Object.defineProperty(n,\"hasIndices\",{get:function(){r+=\"d\"}}),Object.defineProperty(n,\"sticky\",{get:function(){r+=\"y\"}}),t.get.call(n),r===\"dy\")return t.get}}return eD}});var _E=I((hV,bE)=>{\"use strict\";g();var nD=Ti().supportsDescriptors,iD=Nm(),aD=Object.getOwnPropertyDescriptor,sD=Object.defineProperty,oD=TypeError,wE=Object.getPrototypeOf,lD=/a/;bE.exports=function(){if(!nD||!wE)throw new oD(\"RegExp.prototype.flags requires a true ES5 environment that supports property descriptors\");var t=iD(),r=wE(lD),n=aD(r,\"flags\");return(!n||n.get!==t)&&sD(r,\"flags\",{configurable:!0,enumerable:!1,get:t}),t}});var AE=I((mV,EE)=>{\"use strict\";g();var cD=Ti(),uD=wa(),fD=Dm(),xE=Nm(),dD=_E(),SE=uD(xE());cD(SE,{getPolyfill:xE,implementation:fD,shim:dD});EE.exports=SE});var Ci=I((vV,kE)=>{\"use strict\";g();var hD=$l();kE.exports=function(){return hD()&&!!Symbol.toStringTag}});var Bm=I((wV,CE)=>{\"use strict\";g();var pD=Ci()(),mD=br(),jm=mD(\"Object.prototype.toString\"),uf=function(t){return pD&&t&&typeof t==\"object\"&&Symbol.toStringTag in t?!1:jm(t)===\"[object Arguments]\"},TE=function(t){return uf(t)?!0:t!==null&&typeof t==\"object\"&&typeof t.length==\"number\"&&t.length>=0&&jm(t)!==\"[object Array]\"&&jm(t.callee)===\"[object Function]\"},gD=function(){return uf(arguments)}();uf.isLegacyArguments=TE;CE.exports=gD?uf:TE});var PE=I(()=>{g()});var XE=I((EV,YE)=>{g();var Zm=typeof Map==\"function\"&&Map.prototype,Hm=Object.getOwnPropertyDescriptor&&Zm?Object.getOwnPropertyDescriptor(Map.prototype,\"size\"):null,df=Zm&&Hm&&typeof Hm.get==\"function\"?Hm.get:null,RE=Zm&&Map.prototype.forEach,Km=typeof Set==\"function\"&&Set.prototype,Um=Object.getOwnPropertyDescriptor&&Km?Object.getOwnPropertyDescriptor(Set.prototype,\"size\"):null,hf=Km&&Um&&typeof Um.get==\"function\"?Um.get:null,ME=Km&&Set.prototype.forEach,vD=typeof WeakMap==\"function\"&&WeakMap.prototype,Bl=vD?WeakMap.prototype.has:null,yD=typeof WeakSet==\"function\"&&WeakSet.prototype,Hl=yD?WeakSet.prototype.has:null,wD=typeof WeakRef==\"function\"&&WeakRef.prototype,OE=wD?WeakRef.prototype.deref:null,bD=Boolean.prototype.valueOf,_D=Object.prototype.toString,xD=Function.prototype.toString,SD=String.prototype.match,Jm=String.prototype.slice,Ri=String.prototype.replace,ED=String.prototype.toUpperCase,IE=String.prototype.toLowerCase,UE=RegExp.prototype.test,FE=Array.prototype.concat,En=Array.prototype.join,AD=Array.prototype.slice,$E=Math.floor,Vm=typeof BigInt==\"function\"?BigInt.prototype.valueOf:null,Gm=Object.getOwnPropertySymbols,Wm=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?Symbol.prototype.toString:null,Bs=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"object\",Rt=typeof Symbol==\"function\"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Bs||!0)?Symbol.toStringTag:null,GE=Object.prototype.propertyIsEnumerable,LE=(typeof Reflect==\"function\"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function DE(e,t){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||UE.call(/e/,t))return t;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e==\"number\"){var n=e<0?-$E(-e):$E(e);if(n!==e){var i=String(n),a=Jm.call(t,i.length+1);return Ri.call(i,r,\"$&_\")+\".\"+Ri.call(Ri.call(a,/([0-9]{3})/g,\"$&_\"),/_$/,\"\")}}return Ri.call(t,r,\"$&_\")}var qm=PE(),NE=qm.custom,jE=VE(NE)?NE:null;YE.exports=function e(t,r,n,i){var a=r||{};if(Pi(a,\"quoteStyle\")&&a.quoteStyle!==\"single\"&&a.quoteStyle!==\"double\")throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');if(Pi(a,\"maxStringLength\")&&(typeof a.maxStringLength==\"number\"?a.maxStringLength<0&&a.maxStringLength!==1/0:a.maxStringLength!==null))throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');var s=Pi(a,\"customInspect\")?a.customInspect:!0;if(typeof s!=\"boolean\"&&s!==\"symbol\")throw new TypeError(\"option \\\"customInspect\\\", if provided, must be `true`, `false`, or `'symbol'`\");if(Pi(a,\"indent\")&&a.indent!==null&&a.indent!==\"\t\"&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');if(Pi(a,\"numericSeparator\")&&typeof a.numericSeparator!=\"boolean\")throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');var o=a.numericSeparator;if(typeof t==\"undefined\")return\"undefined\";if(t===null)return\"null\";if(typeof t==\"boolean\")return t?\"true\":\"false\";if(typeof t==\"string\")return qE(t,a);if(typeof t==\"number\"){if(t===0)return 1/0/t>0?\"0\":\"-0\";var c=String(t);return o?DE(t,c):c}if(typeof t==\"bigint\"){var l=String(t)+\"n\";return o?DE(t,l):l}var u=typeof a.depth==\"undefined\"?5:a.depth;if(typeof n==\"undefined\"&&(n=0),n>=u&&u>0&&typeof t==\"object\")return Ym(t)?\"[Array]\":\"[Object]\";var f=GD(a,n);if(typeof i==\"undefined\")i=[];else if(WE(i,t)>=0)return\"[Circular]\";function d(j,D,Q){if(D&&(i=AD.call(i),i.push(D)),Q){var de={depth:a.depth};return Pi(a,\"quoteStyle\")&&(de.quoteStyle=a.quoteStyle),e(j,de,n+1,i)}return e(j,a,n+1,i)}if(typeof t==\"function\"&&!BE(t)){var h=FD(t),p=ff(t,d);return\"[Function\"+(h?\": \"+h:\" (anonymous)\")+\"]\"+(p.length>0?\" { \"+En.call(p,\", \")+\" }\":\"\")}if(VE(t)){var m=Bs?Ri.call(String(t),/^(Symbol\\(.*\\))_[^)]*$/,\"$1\"):Wm.call(t);return typeof t==\"object\"&&!Bs?jl(m):m}if(BD(t)){for(var v=\"<\"+IE.call(String(t.nodeName)),y=t.attributes||[],b=0;b<y.length;b++)v+=\" \"+y[b].name+\"=\"+zE(kD(y[b].value),\"double\",a);return v+=\">\",t.childNodes&&t.childNodes.length&&(v+=\"...\"),v+=\"</\"+IE.call(String(t.nodeName))+\">\",v}if(Ym(t)){if(t.length===0)return\"[]\";var x=ff(t,d);return f&&!UD(x)?\"[\"+Xm(x,f)+\"]\":\"[ \"+En.call(x,\", \")+\" ]\"}if(CD(t)){var E=ff(t,d);return!(\"cause\"in Error.prototype)&&\"cause\"in t&&!GE.call(t,\"cause\")?\"{ [\"+String(t)+\"] \"+En.call(FE.call(\"[cause]: \"+d(t.cause),E),\", \")+\" }\":E.length===0?\"[\"+String(t)+\"]\":\"{ [\"+String(t)+\"] \"+En.call(E,\", \")+\" }\"}if(typeof t==\"object\"&&s){if(jE&&typeof t[jE]==\"function\"&&qm)return qm(t,{depth:u-n});if(s!==\"symbol\"&&typeof t.inspect==\"function\")return t.inspect()}if($D(t)){var _=[];return RE&&RE.call(t,function(j,D){_.push(d(D,t,!0)+\" => \"+d(j,t))}),HE(\"Map\",df.call(t),_,f)}if(ND(t)){var k=[];return ME&&ME.call(t,function(j){k.push(d(j,t))}),HE(\"Set\",hf.call(t),k,f)}if(LD(t))return zm(\"WeakMap\");if(jD(t))return zm(\"WeakSet\");if(DD(t))return zm(\"WeakRef\");if(RD(t))return jl(d(Number(t)));if(OD(t))return jl(d(Vm.call(t)));if(MD(t))return jl(bD.call(t));if(PD(t))return jl(d(String(t)));if(typeof window!=\"undefined\"&&t===window)return\"{ [object Window] }\";if(typeof globalThis!=\"undefined\"&&t===globalThis||typeof global!=\"undefined\"&&t===global)return\"{ [object globalThis] }\";if(!TD(t)&&!BE(t)){var w=ff(t,d),A=LE?LE(t)===Object.prototype:t instanceof Object||t.constructor===Object,S=t instanceof Object?\"\":\"null prototype\",T=!A&&Rt&&Object(t)===t&&Rt in t?Jm.call(Mi(t),8,-1):S?\"Object\":\"\",P=A||typeof t.constructor!=\"function\"?\"\":t.constructor.name?t.constructor.name+\" \":\"\",O=P+(T||S?\"[\"+En.call(FE.call([],T||[],S||[]),\": \")+\"] \":\"\");return w.length===0?O+\"{}\":f?O+\"{\"+Xm(w,f)+\"}\":O+\"{ \"+En.call(w,\", \")+\" }\"}return String(t)};function zE(e,t,r){var n=(r.quoteStyle||t)===\"double\"?'\"':\"'\";return n+e+n}function kD(e){return Ri.call(String(e),/\"/g,\"&quot;\")}function Ym(e){return Mi(e)===\"[object Array]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function TD(e){return Mi(e)===\"[object Date]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function BE(e){return Mi(e)===\"[object RegExp]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function CD(e){return Mi(e)===\"[object Error]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function PD(e){return Mi(e)===\"[object String]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function RD(e){return Mi(e)===\"[object Number]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function MD(e){return Mi(e)===\"[object Boolean]\"&&(!Rt||!(typeof e==\"object\"&&Rt in e))}function VE(e){if(Bs)return e&&typeof e==\"object\"&&e instanceof Symbol;if(typeof e==\"symbol\")return!0;if(!e||typeof e!=\"object\"||!Wm)return!1;try{return Wm.call(e),!0}catch(t){}return!1}function OD(e){if(!e||typeof e!=\"object\"||!Vm)return!1;try{return Vm.call(e),!0}catch(t){}return!1}var ID=Object.prototype.hasOwnProperty||function(e){return e in this};function Pi(e,t){return ID.call(e,t)}function Mi(e){return _D.call(e)}function FD(e){if(e.name)return e.name;var t=SD.call(xD.call(e),/^function\\s*([\\w$]+)/);return t?t[1]:null}function WE(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}function $D(e){if(!df||!e||typeof e!=\"object\")return!1;try{df.call(e);try{hf.call(e)}catch(t){return!0}return e instanceof Map}catch(t){}return!1}function LD(e){if(!Bl||!e||typeof e!=\"object\")return!1;try{Bl.call(e,Bl);try{Hl.call(e,Hl)}catch(t){return!0}return e instanceof WeakMap}catch(t){}return!1}function DD(e){if(!OE||!e||typeof e!=\"object\")return!1;try{return OE.call(e),!0}catch(t){}return!1}function ND(e){if(!hf||!e||typeof e!=\"object\")return!1;try{hf.call(e);try{df.call(e)}catch(t){return!0}return e instanceof Set}catch(t){}return!1}function jD(e){if(!Hl||!e||typeof e!=\"object\")return!1;try{Hl.call(e,Hl);try{Bl.call(e,Bl)}catch(t){return!0}return e instanceof WeakSet}catch(t){}return!1}function BD(e){return!e||typeof e!=\"object\"?!1:typeof HTMLElement!=\"undefined\"&&e instanceof HTMLElement?!0:typeof e.nodeName==\"string\"&&typeof e.getAttribute==\"function\"}function qE(e,t){if(e.length>t.maxStringLength){var r=e.length-t.maxStringLength,n=\"... \"+r+\" more character\"+(r>1?\"s\":\"\");return qE(Jm.call(e,0,t.maxStringLength),t)+n}var i=Ri.call(Ri.call(e,/(['\\\\])/g,\"\\\\$1\"),/[\\x00-\\x1f]/g,HD);return zE(i,\"single\",t)}function HD(e){var t=e.charCodeAt(0),r={8:\"b\",9:\"t\",10:\"n\",12:\"f\",13:\"r\"}[t];return r?\"\\\\\"+r:\"\\\\x\"+(t<16?\"0\":\"\")+ED.call(t.toString(16))}function jl(e){return\"Object(\"+e+\")\"}function zm(e){return e+\" { ? }\"}function HE(e,t,r,n){var i=n?Xm(r,n):En.call(r,\", \");return e+\" (\"+t+\") {\"+i+\"}\"}function UD(e){for(var t=0;t<e.length;t++)if(WE(e[t],`\n`)>=0)return!1;return!0}function GD(e,t){var r;if(e.indent===\"\t\")r=\"\t\";else if(typeof e.indent==\"number\"&&e.indent>0)r=En.call(Array(e.indent+1),\" \");else return null;return{base:r,prev:En.call(Array(t+1),r)}}function Xm(e,t){if(e.length===0)return\"\";var r=`\n`+t.prev+t.base;return r+En.call(e,\",\"+r)+`\n`+t.prev}function ff(e,t){var r=Ym(e),n=[];if(r){n.length=e.length;for(var i=0;i<e.length;i++)n[i]=Pi(e,i)?t(e[i],e):\"\"}var a=typeof Gm==\"function\"?Gm(e):[],s;if(Bs){s={};for(var o=0;o<a.length;o++)s[\"$\"+a[o]]=a[o]}for(var c in e)Pi(e,c)&&(r&&String(Number(c))===c&&c<e.length||Bs&&s[\"$\"+c]instanceof Symbol||(UE.call(/[^\\w$]/,c)?n.push(t(c,e)+\": \"+t(e[c],e)):n.push(c+\": \"+t(e[c],e))));if(typeof Gm==\"function\")for(var l=0;l<a.length;l++)GE.call(e,a[l])&&n.push(\"[\"+t(a[l])+\"]: \"+t(e[a[l]],e));return n}});var eg=I((kV,KE)=>{\"use strict\";g();var ZE=en(),Hs=br(),zD=XE(),VD=qn(),pf=ZE(\"%WeakMap%\",!0),mf=ZE(\"%Map%\",!0),WD=Hs(\"WeakMap.prototype.get\",!0),qD=Hs(\"WeakMap.prototype.set\",!0),YD=Hs(\"WeakMap.prototype.has\",!0),XD=Hs(\"Map.prototype.get\",!0),ZD=Hs(\"Map.prototype.set\",!0),KD=Hs(\"Map.prototype.has\",!0),Qm=function(e,t){for(var r=e,n;(n=r.next)!==null;r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},JD=function(e,t){var r=Qm(e,t);return r&&r.value},QD=function(e,t,r){var n=Qm(e,t);n?n.value=r:e.next={key:t,next:e.next,value:r}},eN=function(e,t){return!!Qm(e,t)};KE.exports=function(){var t,r,n,i={assert:function(a){if(!i.has(a))throw new VD(\"Side channel does not contain \"+zD(a))},get:function(a){if(pf&&a&&(typeof a==\"object\"||typeof a==\"function\")){if(t)return WD(t,a)}else if(mf){if(r)return XD(r,a)}else if(n)return JD(n,a)},has:function(a){if(pf&&a&&(typeof a==\"object\"||typeof a==\"function\")){if(t)return YD(t,a)}else if(mf){if(r)return KD(r,a)}else if(n)return eN(n,a);return!1},set:function(a,s){pf&&a&&(typeof a==\"object\"||typeof a==\"function\")?(t||(t=new pf),qD(t,a,s)):mf?(r||(r=new mf),ZD(r,a,s)):(n||(n={key:{},next:null}),QD(n,a,s))}};return i}});var QE=I((CV,JE)=>{\"use strict\";g();var tN=Pm(),Ul=eg()(),Yn=qn(),tg={assert:function(e,t){if(!e||typeof e!=\"object\"&&typeof e!=\"function\")throw new Yn(\"`O` is not an object\");if(typeof t!=\"string\")throw new Yn(\"`slot` must be a string\");if(Ul.assert(e),!tg.has(e,t))throw new Yn(\"`\"+t+\"` is not present on `O`\")},get:function(e,t){if(!e||typeof e!=\"object\"&&typeof e!=\"function\")throw new Yn(\"`O` is not an object\");if(typeof t!=\"string\")throw new Yn(\"`slot` must be a string\");var r=Ul.get(e);return r&&r[\"$\"+t]},has:function(e,t){if(!e||typeof e!=\"object\"&&typeof e!=\"function\")throw new Yn(\"`O` is not an object\");if(typeof t!=\"string\")throw new Yn(\"`slot` must be a string\");var r=Ul.get(e);return!!r&&tN(r,\"$\"+t)},set:function(e,t,r){if(!e||typeof e!=\"object\"&&typeof e!=\"function\")throw new Yn(\"`O` is not an object\");if(typeof t!=\"string\")throw new Yn(\"`slot` must be a string\");var n=Ul.get(e);n||(n={},Ul.set(e,n)),n[\"$\"+t]=r}};Object.freeze&&Object.freeze(tg);JE.exports=tg});var rA=I((RV,tA)=>{\"use strict\";g();var Gl=QE(),rN=SyntaxError,eA=typeof StopIteration==\"object\"?StopIteration:null;tA.exports=function(t){if(!eA)throw new rN(\"this environment lacks StopIteration\");Gl.set(t,\"[[Done]]\",!1);var r={next:function(){var i=Gl.get(this,\"[[Iterator]]\"),a=Gl.get(i,\"[[Done]]\");try{return{done:a,value:a?void 0:i.next()}}catch(s){if(Gl.set(i,\"[[Done]]\",!0),s!==eA)throw s;return{done:!0,value:void 0}}}};return Gl.set(r,\"[[Iterator]]\",t),r}});var rg=I((OV,nA)=>{g();var nN={}.toString;nA.exports=Array.isArray||function(e){return nN.call(e)==\"[object Array]\"}});var ng=I((FV,iA)=>{\"use strict\";g();var iN=String.prototype.valueOf,aN=function(t){try{return iN.call(t),!0}catch(r){return!1}},sN=Object.prototype.toString,oN=\"[object String]\",lN=Ci()();iA.exports=function(t){return typeof t==\"string\"?!0:typeof t!=\"object\"?!1:lN?aN(t):sN.call(t)===oN}});var ag=I((LV,oA)=>{\"use strict\";g();var ig=typeof Map==\"function\"&&Map.prototype?Map:null,cN=typeof Set==\"function\"&&Set.prototype?Set:null,gf;ig||(gf=function(t){return!1});var sA=ig?Map.prototype.has:null,aA=cN?Set.prototype.has:null;!gf&&!sA&&(gf=function(t){return!1});oA.exports=gf||function(t){if(!t||typeof t!=\"object\")return!1;try{if(sA.call(t),aA)try{aA.call(t)}catch(r){return!0}return t instanceof ig}catch(r){}return!1}});var og=I((NV,uA)=>{\"use strict\";g();var uN=typeof Map==\"function\"&&Map.prototype?Map:null,sg=typeof Set==\"function\"&&Set.prototype?Set:null,vf;sg||(vf=function(t){return!1});var lA=uN?Map.prototype.has:null,cA=sg?Set.prototype.has:null;!vf&&!cA&&(vf=function(t){return!1});uA.exports=vf||function(t){if(!t||typeof t!=\"object\")return!1;try{if(cA.call(t),lA)try{lA.call(t)}catch(r){return!0}return t instanceof sg}catch(r){}return!1}});var xA=I((BV,bf)=>{\"use strict\";g();var fA=Bm(),dA=rA();Ku()()||$l()()?(yf=Symbol.iterator,bf.exports=function(t){if(t!=null&&typeof t[yf]!=\"undefined\")return t[yf]();if(fA(t))return Array.prototype[yf].call(t)}):(hA=rg(),pA=ng(),lg=en(),mA=lg(\"%Map%\",!0),gA=lg(\"%Set%\",!0),Lr=br(),cg=Lr(\"Array.prototype.push\"),ug=Lr(\"String.prototype.charCodeAt\"),vA=Lr(\"String.prototype.slice\"),yA=function(t,r){var n=t.length;if(r+1>=n)return r+1;var i=ug(t,r);if(i<55296||i>56319)return r+1;var a=ug(t,r+1);return a<56320||a>57343?r+1:r+2},wf=function(t){var r=0;return{next:function(){var i=r>=t.length,a;return i||(a=t[r],r+=1),{done:i,value:a}}}},fg=function(t,r){if(hA(t)||fA(t))return wf(t);if(pA(t)){var n=0;return{next:function(){var a=yA(t,n),s=vA(t,n,a);return n=a,{done:a>t.length,value:s}}}}if(r&&typeof t[\"_es6-shim iterator_\"]!=\"undefined\")return t[\"_es6-shim iterator_\"]()},!mA&&!gA?bf.exports=function(t){if(t!=null)return fg(t,!0)}:(wA=ag(),bA=og(),dg=Lr(\"Map.prototype.forEach\",!0),hg=Lr(\"Set.prototype.forEach\",!0),(typeof process==\"undefined\"||!process.versions||!process.versions.node)&&(pg=Lr(\"Map.prototype.iterator\",!0),mg=Lr(\"Set.prototype.iterator\",!0)),gg=Lr(\"Map.prototype.@@iterator\",!0)||Lr(\"Map.prototype._es6-shim iterator_\",!0),vg=Lr(\"Set.prototype.@@iterator\",!0)||Lr(\"Set.prototype._es6-shim iterator_\",!0),_A=function(t){if(wA(t)){if(pg)return dA(pg(t));if(gg)return gg(t);if(dg){var r=[];return dg(t,function(i,a){cg(r,[a,i])}),wf(r)}}if(bA(t)){if(mg)return dA(mg(t));if(vg)return vg(t);if(hg){var n=[];return hg(t,function(i){cg(n,i)}),wf(n)}}},bf.exports=function(t){return _A(t)||fg(t)}));var yf,hA,pA,lg,mA,gA,Lr,cg,ug,vA,yA,wf,fg,wA,bA,dg,hg,pg,mg,gg,vg,_A});var yg=I((UV,EA)=>{\"use strict\";g();var SA=function(e){return e!==e};EA.exports=function(t,r){return t===0&&r===0?1/t===1/r:!!(t===r||SA(t)&&SA(r))}});var wg=I((zV,AA)=>{\"use strict\";g();var fN=yg();AA.exports=function(){return typeof Object.is==\"function\"?Object.is:fN}});var TA=I((WV,kA)=>{\"use strict\";g();var dN=wg(),hN=Ti();kA.exports=function(){var t=dN();return hN(Object,{is:t},{is:function(){return Object.is!==t}}),t}});var MA=I((YV,RA)=>{\"use strict\";g();var pN=Ti(),mN=wa(),gN=yg(),CA=wg(),vN=TA(),PA=mN(CA(),Object);pN(PA,{getPolyfill:CA,implementation:gN,shim:vN});RA.exports=PA});var _g=I((ZV,$A)=>{\"use strict\";g();var yN=wa(),FA=br(),wN=en(),bg=wN(\"%ArrayBuffer%\",!0),_f=FA(\"ArrayBuffer.prototype.byteLength\",!0),bN=FA(\"Object.prototype.toString\"),OA=!!bg&&!_f&&new bg(0).slice,IA=!!OA&&yN(OA);$A.exports=_f||IA?function(t){if(!t||typeof t!=\"object\")return!1;try{return _f?_f(t):IA(t,0),!0}catch(r){return!1}}:bg?function(t){return bN(t)===\"[object ArrayBuffer]\"}:function(t){return!1}});var DA=I((JV,LA)=>{\"use strict\";g();var _N=Date.prototype.getDay,xN=function(t){try{return _N.call(t),!0}catch(r){return!1}},SN=Object.prototype.toString,EN=\"[object Date]\",AN=Ci()();LA.exports=function(t){return typeof t!=\"object\"||t===null?!1:AN?xN(t):SN.call(t)===EN}});var UA=I((eW,HA)=>{\"use strict\";g();var xg=br(),NA=Ci()(),jA,BA,Sg,Eg;NA&&(jA=xg(\"Object.prototype.hasOwnProperty\"),BA=xg(\"RegExp.prototype.exec\"),Sg={},xf=function(){throw Sg},Eg={toString:xf,valueOf:xf},typeof Symbol.toPrimitive==\"symbol\"&&(Eg[Symbol.toPrimitive]=xf));var xf,kN=xg(\"Object.prototype.toString\"),TN=Object.getOwnPropertyDescriptor,CN=\"[object RegExp]\";HA.exports=NA?function(t){if(!t||typeof t!=\"object\")return!1;var r=TN(t,\"lastIndex\"),n=r&&jA(r,\"value\");if(!n)return!1;try{BA(t,Eg)}catch(i){return i===Sg}}:function(t){return!t||typeof t!=\"object\"&&typeof t!=\"function\"?!1:kN(t)===CN}});var VA=I((rW,zA)=>{\"use strict\";g();var PN=br(),GA=PN(\"SharedArrayBuffer.prototype.byteLength\",!0);zA.exports=GA?function(t){if(!t||typeof t!=\"object\")return!1;try{return GA(t),!0}catch(r){return!1}}:function(t){return!1}});var qA=I((iW,WA)=>{\"use strict\";g();var RN=Number.prototype.toString,MN=function(t){try{return RN.call(t),!0}catch(r){return!1}},ON=Object.prototype.toString,IN=\"[object Number]\",FN=Ci()();WA.exports=function(t){return typeof t==\"number\"?!0:typeof t!=\"object\"?!1:FN?MN(t):ON.call(t)===IN}});var ZA=I((sW,XA)=>{\"use strict\";g();var YA=br(),$N=YA(\"Boolean.prototype.toString\"),LN=YA(\"Object.prototype.toString\"),DN=function(t){try{return $N(t),!0}catch(r){return!1}},NN=\"[object Boolean]\",jN=Ci()();XA.exports=function(t){return typeof t==\"boolean\"?!0:t===null||typeof t!=\"object\"?!1:jN&&Symbol.toStringTag in t?DN(t):LN(t)===NN}});var ek=I((lW,Ag)=>{\"use strict\";g();var BN=Object.prototype.toString,HN=Ku()();HN?(KA=Symbol.prototype.toString,JA=/^Symbol\\(.*\\)$/,QA=function(t){return typeof t.valueOf()!=\"symbol\"?!1:JA.test(KA.call(t))},Ag.exports=function(t){if(typeof t==\"symbol\")return!0;if(BN.call(t)!==\"[object Symbol]\")return!1;try{return QA(t)}catch(r){return!1}}):Ag.exports=function(t){return!1};var KA,JA,QA});var nk=I((uW,rk)=>{\"use strict\";g();var tk=typeof BigInt!=\"undefined\"&&BigInt;rk.exports=function(){return typeof tk==\"function\"&&typeof BigInt==\"function\"&&typeof tk(42)==\"bigint\"&&typeof BigInt(42)==\"bigint\"}});var sk=I((dW,kg)=>{\"use strict\";g();var UN=nk()();UN?(ik=BigInt.prototype.valueOf,ak=function(t){try{return ik.call(t),!0}catch(r){}return!1},kg.exports=function(t){return t===null||typeof t==\"undefined\"||typeof t==\"boolean\"||typeof t==\"string\"||typeof t==\"number\"||typeof t==\"symbol\"||typeof t==\"function\"?!1:typeof t==\"bigint\"?!0:ak(t)}):kg.exports=function(t){return!1};var ik,ak});var lk=I((pW,ok)=>{\"use strict\";g();var GN=ng(),zN=qA(),VN=ZA(),WN=ek(),qN=sk();ok.exports=function(t){if(t==null||typeof t!=\"object\"&&typeof t!=\"function\")return null;if(GN(t))return\"String\";if(zN(t))return\"Number\";if(VN(t))return\"Boolean\";if(WN(t))return\"Symbol\";if(qN(t))return\"BigInt\"}});var fk=I((gW,uk)=>{\"use strict\";g();var Sf=typeof WeakMap==\"function\"&&WeakMap.prototype?WeakMap:null,ck=typeof WeakSet==\"function\"&&WeakSet.prototype?WeakSet:null,Ef;Sf||(Ef=function(t){return!1});var Cg=Sf?Sf.prototype.has:null,Tg=ck?ck.prototype.has:null;!Ef&&!Cg&&(Ef=function(t){return!1});uk.exports=Ef||function(t){if(!t||typeof t!=\"object\")return!1;try{if(Cg.call(t,Cg),Tg)try{Tg.call(t,Tg)}catch(r){return!0}return t instanceof Sf}catch(r){}return!1}});var hk=I((yW,Rg)=>{\"use strict\";g();var YN=en(),dk=br(),XN=YN(\"%WeakSet%\",!0),Pg=dk(\"WeakSet.prototype.has\",!0);Pg?(Af=dk(\"WeakMap.prototype.has\",!0),Rg.exports=function(t){if(!t||typeof t!=\"object\")return!1;try{if(Pg(t,Pg),Af)try{Af(t,Af)}catch(r){return!0}return t instanceof XN}catch(r){}return!1}):Rg.exports=function(t){return!1};var Af});var mk=I((bW,pk)=>{\"use strict\";g();var ZN=ag(),KN=og(),JN=fk(),QN=hk();pk.exports=function(t){if(t&&typeof t==\"object\"){if(ZN(t))return\"Map\";if(KN(t))return\"Set\";if(JN(t))return\"WeakMap\";if(QN(t))return\"WeakSet\"}return!1}});var wk=I((xW,yk)=>{\"use strict\";g();var vk=Function.prototype.toString,Us=typeof Reflect==\"object\"&&Reflect!==null&&Reflect.apply,Og,kf;if(typeof Us==\"function\"&&typeof Object.defineProperty==\"function\")try{Og=Object.defineProperty({},\"length\",{get:function(){throw kf}}),kf={},Us(function(){throw 42},null,Og)}catch(e){e!==kf&&(Us=null)}else Us=null;var ej=/^\\s*class\\b/,Ig=function(t){try{var r=vk.call(t);return ej.test(r)}catch(n){return!1}},Mg=function(t){try{return Ig(t)?!1:(vk.call(t),!0)}catch(r){return!1}},Tf=Object.prototype.toString,tj=\"[object Object]\",rj=\"[object Function]\",nj=\"[object GeneratorFunction]\",ij=\"[object HTMLAllCollection]\",aj=\"[object HTML document.all class]\",sj=\"[object HTMLCollection]\",oj=typeof Symbol==\"function\"&&!!Symbol.toStringTag,lj=!(0 in[,]),Fg=function(){return!1};typeof document==\"object\"&&(gk=document.all,Tf.call(gk)===Tf.call(document.all)&&(Fg=function(t){if((lj||!t)&&(typeof t==\"undefined\"||typeof t==\"object\"))try{var r=Tf.call(t);return(r===ij||r===aj||r===sj||r===tj)&&t(\"\")==null}catch(n){}return!1}));var gk;yk.exports=Us?function(t){if(Fg(t))return!0;if(!t||typeof t!=\"function\"&&typeof t!=\"object\")return!1;try{Us(t,null,Og)}catch(r){if(r!==kf)return!1}return!Ig(t)&&Mg(t)}:function(t){if(Fg(t))return!0;if(!t||typeof t!=\"function\"&&typeof t!=\"object\")return!1;if(oj)return Mg(t);if(Ig(t))return!1;var r=Tf.call(t);return r!==rj&&r!==nj&&!/^\\[object HTML/.test(r)?!1:Mg(t)}});var xk=I((EW,_k)=>{\"use strict\";g();var cj=wk(),uj=Object.prototype.toString,bk=Object.prototype.hasOwnProperty,fj=function(t,r,n){for(var i=0,a=t.length;i<a;i++)bk.call(t,i)&&(n==null?r(t[i],i,t):r.call(n,t[i],i,t))},dj=function(t,r,n){for(var i=0,a=t.length;i<a;i++)n==null?r(t.charAt(i),i,t):r.call(n,t.charAt(i),i,t)},hj=function(t,r,n){for(var i in t)bk.call(t,i)&&(n==null?r(t[i],i,t):r.call(n,t[i],i,t))},pj=function(t,r,n){if(!cj(r))throw new TypeError(\"iterator must be a function\");var i;arguments.length>=3&&(i=n),uj.call(t)===\"[object Array]\"?fj(t,r,i):typeof t==\"string\"?dj(t,r,i):hj(t,r,i)};_k.exports=pj});var Ek=I((kW,Sk)=>{\"use strict\";g();Sk.exports=[\"Float32Array\",\"Float64Array\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"BigInt64Array\",\"BigUint64Array\"]});var kk=I((CW,Ak)=>{\"use strict\";g();var $g=Ek(),mj=typeof globalThis==\"undefined\"?global:globalThis;Ak.exports=function(){for(var t=[],r=0;r<$g.length;r++)typeof mj[$g[r]]==\"function\"&&(t[t.length]=$g[r]);return t}});var Mk=I((RW,Rk)=>{\"use strict\";g();var Pf=xk(),gj=kk(),Tk=wa(),Ng=br(),Cf=af(),vj=Ng(\"Object.prototype.toString\"),Pk=Ci()(),Ck=typeof globalThis==\"undefined\"?global:globalThis,Dg=gj(),jg=Ng(\"String.prototype.slice\"),Lg=Object.getPrototypeOf,yj=Ng(\"Array.prototype.indexOf\",!0)||function(t,r){for(var n=0;n<t.length;n+=1)if(t[n]===r)return n;return-1},Rf={__proto__:null};Pk&&Cf&&Lg?Pf(Dg,function(e){var t=new Ck[e];if(Symbol.toStringTag in t){var r=Lg(t),n=Cf(r,Symbol.toStringTag);if(!n){var i=Lg(r);n=Cf(i,Symbol.toStringTag)}Rf[\"$\"+e]=Tk(n.get)}}):Pf(Dg,function(e){var t=new Ck[e],r=t.slice||t.set;r&&(Rf[\"$\"+e]=Tk(r))});var wj=function(t){var r=!1;return Pf(Rf,function(n,i){if(!r)try{\"$\"+n(t)===i&&(r=jg(i,1))}catch(a){}}),r},bj=function(t){var r=!1;return Pf(Rf,function(n,i){if(!r)try{n(t),r=jg(i,1)}catch(a){}}),r};Rk.exports=function(t){if(!t||typeof t!=\"object\")return!1;if(!Pk){var r=jg(vj(t),8,-1);return yj(Dg,r)>-1?r:r!==\"Object\"?!1:bj(t)}return Cf?wj(t):null}});var Fk=I((OW,Ik)=>{\"use strict\";g();var _j=br(),Ok=_j(\"ArrayBuffer.prototype.byteLength\",!0),xj=_g();Ik.exports=function(t){return xj(t)?Ok?Ok(t):t.byteLength:NaN}});var aT=I((FW,iT)=>{\"use strict\";g();var tT=fE(),An=br(),$k=AE(),Sj=en(),Gs=xA(),Ej=eg(),Lk=MA(),Dk=Bm(),Nk=rg(),jk=_g(),Bk=DA(),Hk=UA(),Uk=VA(),Gk=Zu(),zk=lk(),Vk=mk(),Wk=Mk(),qk=Fk(),Yk=An(\"SharedArrayBuffer.prototype.byteLength\",!0),Xk=An(\"Date.prototype.getTime\"),Bg=Object.getPrototypeOf,Zk=An(\"Object.prototype.toString\"),Of=Sj(\"%Set%\",!0),Hg=An(\"Map.prototype.has\",!0),If=An(\"Map.prototype.get\",!0),Kk=An(\"Map.prototype.size\",!0),Ff=An(\"Set.prototype.add\",!0),rT=An(\"Set.prototype.delete\",!0),$f=An(\"Set.prototype.has\",!0),Mf=An(\"Set.prototype.size\",!0);function Jk(e,t,r,n){for(var i=Gs(e),a;(a=i.next())&&!a.done;)if(tn(t,a.value,r,n))return rT(e,a.value),!0;return!1}function nT(e){if(typeof e==\"undefined\")return null;if(typeof e!=\"object\")return typeof e==\"symbol\"?!1:typeof e==\"string\"||typeof e==\"number\"?+e==+e:!0}function Aj(e,t,r,n,i,a){var s=nT(r);if(s!=null)return s;var o=If(t,s),c=tT({},i,{strict:!1});return typeof o==\"undefined\"&&!Hg(t,s)||!tn(n,o,c,a)?!1:!Hg(e,s)&&tn(n,o,c,a)}function kj(e,t,r){var n=nT(r);return n!=null?n:$f(t,n)&&!$f(e,n)}function Qk(e,t,r,n,i,a){for(var s=Gs(e),o,c;(o=s.next())&&!o.done;)if(c=o.value,tn(r,c,i,a)&&tn(n,If(t,c),i,a))return rT(e,c),!0;return!1}function tn(e,t,r,n){var i=r||{};if(i.strict?Lk(e,t):e===t)return!0;var a=zk(e),s=zk(t);if(a!==s)return!1;if(!e||!t||typeof e!=\"object\"&&typeof t!=\"object\")return i.strict?Lk(e,t):e==t;var o=n.has(e),c=n.has(t),l;if(o&&c){if(n.get(e)===n.get(t))return!0}else l={};return o||n.set(e,l),c||n.set(t,l),Pj(e,t,i,n)}function eT(e){return!e||typeof e!=\"object\"||typeof e.length!=\"number\"||typeof e.copy!=\"function\"||typeof e.slice!=\"function\"||e.length>0&&typeof e[0]!=\"number\"?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}function Tj(e,t,r,n){if(Mf(e)!==Mf(t))return!1;for(var i=Gs(e),a=Gs(t),s,o,c;(s=i.next())&&!s.done;)if(s.value&&typeof s.value==\"object\")c||(c=new Of),Ff(c,s.value);else if(!$f(t,s.value)){if(r.strict||!kj(e,t,s.value))return!1;c||(c=new Of),Ff(c,s.value)}if(c){for(;(o=a.next())&&!o.done;)if(o.value&&typeof o.value==\"object\"){if(!Jk(c,o.value,r.strict,n))return!1}else if(!r.strict&&!$f(e,o.value)&&!Jk(c,o.value,r.strict,n))return!1;return Mf(c)===0}return!0}function Cj(e,t,r,n){if(Kk(e)!==Kk(t))return!1;for(var i=Gs(e),a=Gs(t),s,o,c,l,u,f;(s=i.next())&&!s.done;)if(l=s.value[0],u=s.value[1],l&&typeof l==\"object\")c||(c=new Of),Ff(c,l);else if(f=If(t,l),typeof f==\"undefined\"&&!Hg(t,l)||!tn(u,f,r,n)){if(r.strict||!Aj(e,t,l,u,r,n))return!1;c||(c=new Of),Ff(c,l)}if(c){for(;(o=a.next())&&!o.done;)if(l=o.value[0],f=o.value[1],l&&typeof l==\"object\"){if(!Qk(c,e,l,f,r,n))return!1}else if(!r.strict&&(!e.has(l)||!tn(If(e,l),f,r,n))&&!Qk(c,e,l,f,tT({},r,{strict:!1}),n))return!1;return Mf(c)===0}return!0}function Pj(e,t,r,n){var i,a;if(typeof e!=typeof t||e==null||t==null||Zk(e)!==Zk(t)||Dk(e)!==Dk(t))return!1;var s=Nk(e),o=Nk(t);if(s!==o)return!1;var c=e instanceof Error,l=t instanceof Error;if(c!==l||(c||l)&&(e.name!==t.name||e.message!==t.message))return!1;var u=Hk(e),f=Hk(t);if(u!==f||(u||f)&&(e.source!==t.source||$k(e)!==$k(t)))return!1;var d=Bk(e),h=Bk(t);if(d!==h||(d||h)&&Xk(e)!==Xk(t)||r.strict&&Bg&&Bg(e)!==Bg(t))return!1;var p=Wk(e),m=Wk(t);if(p!==m)return!1;if(p||m){if(e.length!==t.length)return!1;for(i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}var v=eT(e),y=eT(t);if(v!==y)return!1;if(v||y){if(e.length!==t.length)return!1;for(i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}var b=jk(e),x=jk(t);if(b!==x)return!1;if(b||x)return qk(e)!==qk(t)?!1:typeof Uint8Array==\"function\"&&tn(new Uint8Array(e),new Uint8Array(t),r,n);var E=Uk(e),_=Uk(t);if(E!==_)return!1;if(E||_)return Yk(e)!==Yk(t)?!1:typeof Uint8Array==\"function\"&&tn(new Uint8Array(e),new Uint8Array(t),r,n);if(typeof e!=typeof t)return!1;var k=Gk(e),w=Gk(t);if(k.length!==w.length)return!1;for(k.sort(),w.sort(),i=k.length-1;i>=0;i--)if(k[i]!=w[i])return!1;for(i=k.length-1;i>=0;i--)if(a=k[i],!tn(e[a],t[a],r,n))return!1;var A=Vk(e),S=Vk(t);return A!==S?!1:A===\"Set\"||S===\"Set\"?Tj(e,t,r,n):A===\"Map\"?Cj(e,t,r,n):!0}iT.exports=function(t,r,n){return tn(t,r,n,Ej())}});var Xg=I((exports,module)=>{g();(function(){\"use strict\";var ERROR=\"input is invalid type\",WINDOW=typeof window==\"object\",root=WINDOW?window:{};root.JS_SHA256_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&typeof self==\"object\",NODE_JS=!root.JS_SHA256_NO_NODE_JS&&typeof process==\"object\"&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_SHA256_NO_COMMON_JS&&typeof module==\"object\"&&module.exports,AMD=typeof define==\"function\"&&define.amd,ARRAY_BUFFER=!root.JS_SHA256_NO_ARRAY_BUFFER&&typeof ArrayBuffer!=\"undefined\",HEX_CHARS=\"0123456789abcdef\".split(\"\"),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],K=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],OUTPUT_TYPES=[\"hex\",\"array\",\"digest\",\"arrayBuffer\"],blocks=[];(root.JS_SHA256_NO_NODE_JS||!Array.isArray)&&(Array.isArray=function(e){return Object.prototype.toString.call(e)===\"[object Array]\"}),ARRAY_BUFFER&&(root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW||!ArrayBuffer.isView)&&(ArrayBuffer.isView=function(e){return typeof e==\"object\"&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e,t){return function(r){return new Sha256(t,!0).update(r)[e]()}},createMethod=function(e){var t=createOutputMethod(\"hex\",e);NODE_JS&&(t=nodeWrap(t,e)),t.create=function(){return new Sha256(e)},t.update=function(i){return t.create().update(i)};for(var r=0;r<OUTPUT_TYPES.length;++r){var n=OUTPUT_TYPES[r];t[n]=createOutputMethod(n,e)}return t},nodeWrap=function(method,is224){var crypto=eval(\"require('crypto')\"),Buffer=eval(\"require('buffer').Buffer\"),algorithm=is224?\"sha224\":\"sha256\",nodeMethod=function(e){if(typeof e==\"string\")return crypto.createHash(algorithm).update(e,\"utf8\").digest(\"hex\");if(e==null)throw new Error(ERROR);return e.constructor===ArrayBuffer&&(e=new Uint8Array(e)),Array.isArray(e)||ArrayBuffer.isView(e)||e.constructor===Buffer?crypto.createHash(algorithm).update(new Buffer(e)).digest(\"hex\"):method(e)};return nodeMethod},createHmacOutputMethod=function(e,t){return function(r,n){return new HmacSha256(r,t,!0).update(n)[e]()}},createHmacMethod=function(e){var t=createHmacOutputMethod(\"hex\",e);t.create=function(i){return new HmacSha256(i,e)},t.update=function(i,a){return t.create(i).update(a)};for(var r=0;r<OUTPUT_TYPES.length;++r){var n=OUTPUT_TYPES[r];t[n]=createHmacOutputMethod(n,e)}return t};function Sha256(e,t){t?(blocks[0]=blocks[16]=blocks[1]=blocks[2]=blocks[3]=blocks[4]=blocks[5]=blocks[6]=blocks[7]=blocks[8]=blocks[9]=blocks[10]=blocks[11]=blocks[12]=blocks[13]=blocks[14]=blocks[15]=0,this.blocks=blocks):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=e}Sha256.prototype.update=function(e){if(!this.finalized){var t,r=typeof e;if(r!==\"string\"){if(r===\"object\"){if(e===null)throw new Error(ERROR);if(ARRAY_BUFFER&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!Array.isArray(e)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(e)))throw new Error(ERROR)}else throw new Error(ERROR);t=!0}for(var n,i=0,a,s=e.length,o=this.blocks;i<s;){if(this.hashed&&(this.hashed=!1,o[0]=this.block,o[16]=o[1]=o[2]=o[3]=o[4]=o[5]=o[6]=o[7]=o[8]=o[9]=o[10]=o[11]=o[12]=o[13]=o[14]=o[15]=0),t)for(a=this.start;i<s&&a<64;++i)o[a>>2]|=e[i]<<SHIFT[a++&3];else for(a=this.start;i<s&&a<64;++i)n=e.charCodeAt(i),n<128?o[a>>2]|=n<<SHIFT[a++&3]:n<2048?(o[a>>2]|=(192|n>>6)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]):n<55296||n>=57344?(o[a>>2]|=(224|n>>12)<<SHIFT[a++&3],o[a>>2]|=(128|n>>6&63)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]):(n=65536+((n&1023)<<10|e.charCodeAt(++i)&1023),o[a>>2]|=(240|n>>18)<<SHIFT[a++&3],o[a>>2]|=(128|n>>12&63)<<SHIFT[a++&3],o[a>>2]|=(128|n>>6&63)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]);this.lastByteIndex=a,this.bytes+=a-this.start,a>=64?(this.block=o[16],this.start=a-64,this.hash(),this.hashed=!0):this.start=a}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Sha256.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[16]=this.block,e[t>>2]|=EXTRA[t&3],this.block=e[16],t>=56&&(this.hashed||this.hash(),e[0]=this.block,e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.hBytes<<3|this.bytes>>>29,e[15]=this.bytes<<3,this.hash()}},Sha256.prototype.hash=function(){var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=this.blocks,l,u,f,d,h,p,m,v,y,b,x;for(l=16;l<64;++l)h=c[l-15],u=(h>>>7|h<<25)^(h>>>18|h<<14)^h>>>3,h=c[l-2],f=(h>>>17|h<<15)^(h>>>19|h<<13)^h>>>10,c[l]=c[l-16]+u+c[l-7]+f<<0;for(x=t&r,l=0;l<64;l+=4)this.first?(this.is224?(v=300032,h=c[0]-1413257819,o=h-150054599<<0,n=h+24177077<<0):(v=704751109,h=c[0]-210244248,o=h-1521486534<<0,n=h+143694565<<0),this.first=!1):(u=(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10),f=(i>>>6|i<<26)^(i>>>11|i<<21)^(i>>>25|i<<7),v=e&t,d=v^e&r^x,m=i&a^~i&s,h=o+f+m+K[l]+c[l],p=u+d,o=n+h<<0,n=h+p<<0),u=(n>>>2|n<<30)^(n>>>13|n<<19)^(n>>>22|n<<10),f=(o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7),y=n&e,d=y^n&t^v,m=o&i^~o&a,h=s+f+m+K[l+1]+c[l+1],p=u+d,s=r+h<<0,r=h+p<<0,u=(r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10),f=(s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7),b=r&n,d=b^r&e^y,m=s&o^~s&i,h=a+f+m+K[l+2]+c[l+2],p=u+d,a=t+h<<0,t=h+p<<0,u=(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10),f=(a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7),x=t&r,d=x^t&n^b,m=a&s^~a&o,h=i+f+m+K[l+3]+c[l+3],p=u+d,i=e+h<<0,e=h+p<<0;this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+r<<0,this.h3=this.h3+n<<0,this.h4=this.h4+i<<0,this.h5=this.h5+a<<0,this.h6=this.h6+s<<0,this.h7=this.h7+o<<0},Sha256.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[e&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[t&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[r&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[n&15]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[i&15]+HEX_CHARS[a>>28&15]+HEX_CHARS[a>>24&15]+HEX_CHARS[a>>20&15]+HEX_CHARS[a>>16&15]+HEX_CHARS[a>>12&15]+HEX_CHARS[a>>8&15]+HEX_CHARS[a>>4&15]+HEX_CHARS[a&15]+HEX_CHARS[s>>28&15]+HEX_CHARS[s>>24&15]+HEX_CHARS[s>>20&15]+HEX_CHARS[s>>16&15]+HEX_CHARS[s>>12&15]+HEX_CHARS[s>>8&15]+HEX_CHARS[s>>4&15]+HEX_CHARS[s&15];return this.is224||(c+=HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[o&15]),c},Sha256.prototype.toString=Sha256.prototype.hex,Sha256.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=[e>>24&255,e>>16&255,e>>8&255,e&255,t>>24&255,t>>16&255,t>>8&255,t&255,r>>24&255,r>>16&255,r>>8&255,r&255,n>>24&255,n>>16&255,n>>8&255,n&255,i>>24&255,i>>16&255,i>>8&255,i&255,a>>24&255,a>>16&255,a>>8&255,a&255,s>>24&255,s>>16&255,s>>8&255,s&255];return this.is224||c.push(o>>24&255,o>>16&255,o>>8&255,o&255),c},Sha256.prototype.array=Sha256.prototype.digest,Sha256.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(this.is224?28:32),t=new DataView(e);return t.setUint32(0,this.h0),t.setUint32(4,this.h1),t.setUint32(8,this.h2),t.setUint32(12,this.h3),t.setUint32(16,this.h4),t.setUint32(20,this.h5),t.setUint32(24,this.h6),this.is224||t.setUint32(28,this.h7),e};function HmacSha256(e,t,r){var n,i=typeof e;if(i===\"string\"){var a=[],s=e.length,o=0,c;for(n=0;n<s;++n)c=e.charCodeAt(n),c<128?a[o++]=c:c<2048?(a[o++]=192|c>>6,a[o++]=128|c&63):c<55296||c>=57344?(a[o++]=224|c>>12,a[o++]=128|c>>6&63,a[o++]=128|c&63):(c=65536+((c&1023)<<10|e.charCodeAt(++n)&1023),a[o++]=240|c>>18,a[o++]=128|c>>12&63,a[o++]=128|c>>6&63,a[o++]=128|c&63);e=a}else if(i===\"object\"){if(e===null)throw new Error(ERROR);if(ARRAY_BUFFER&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!Array.isArray(e)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(e)))throw new Error(ERROR)}else throw new Error(ERROR);e.length>64&&(e=new Sha256(t,!0).update(e).array());var l=[],u=[];for(n=0;n<64;++n){var f=e[n]||0;l[n]=92^f,u[n]=54^f}Sha256.call(this,t,r),this.update(u),this.oKeyPad=l,this.inner=!0,this.sharedMemory=r}HmacSha256.prototype=new Sha256,HmacSha256.prototype.finalize=function(){if(Sha256.prototype.finalize.call(this),this.inner){this.inner=!1;var e=this.array();Sha256.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(e),Sha256.prototype.finalize.call(this)}};var exports=createMethod();exports.sha256=exports,exports.sha224=createMethod(!0),exports.sha256.hmac=createHmacMethod(),exports.sha224.hmac=createHmacMethod(!0),COMMON_JS?module.exports=exports:(root.sha256=exports.sha256,root.sha224=exports.sha224,AMD&&define(function(){return exports}))})()});var kC=I(E0=>{g();(function(e){var t=/\\S/,r=/\\\"/g,n=/\\n/g,i=/\\r/g,a=/\\\\/g,s=/\\u2028/,o=/\\u2029/;e.tags={\"#\":1,\"^\":2,\"<\":3,$:4,\"/\":5,\"!\":6,\">\":7,\"=\":8,_v:9,\"{\":10,\"&\":11,_t:12},e.scan=function(A,S){var T=A.length,P=0,O=1,j=2,D=P,Q=null,de=null,ee=\"\",J=[],Pe=!1,me=0,F=0,G=\"{{\",N=\"}}\";function Me(){ee.length>0&&(J.push({tag:\"_t\",text:new String(ee)}),ee=\"\")}function Dt(){for(var st=!0,ot=F;ot<J.length;ot++)if(st=e.tags[J[ot].tag]<e.tags._v||J[ot].tag==\"_t\"&&J[ot].text.match(t)===null,!st)return!1;return st}function _t(st,ot){if(Me(),st&&Dt())for(var Ct=F,$e;Ct<J.length;Ct++)J[Ct].text&&(($e=J[Ct+1])&&$e.tag==\">\"&&($e.indent=J[Ct].text.toString()),J.splice(Ct,1));else ot||J.push({tag:`\n`});Pe=!1,F=J.length}function Ee(st,ot){var Ct=\"=\"+N,$e=st.indexOf(Ct,ot),U=l(st.substring(st.indexOf(\"=\",ot)+1,$e)).split(\" \");return G=U[0],N=U[U.length-1],$e+Ct.length-1}for(S&&(S=S.split(\" \"),G=S[0],N=S[1]),me=0;me<T;me++)D==P?u(G,A,me)?(--me,Me(),D=O):A.charAt(me)==`\n`?_t(Pe):ee+=A.charAt(me):D==O?(me+=G.length-1,de=e.tags[A.charAt(me+1)],Q=de?A.charAt(me+1):\"_v\",Q==\"=\"?(me=Ee(A,me),D=P):(de&&me++,D=j),Pe=me):u(N,A,me)?(J.push({tag:Q,n:l(ee),otag:G,ctag:N,i:Q==\"/\"?Pe-G.length:me+N.length}),ee=\"\",me+=N.length-1,D=P,Q==\"{\"&&(N==\"}}\"?me++:c(J[J.length-1]))):ee+=A.charAt(me);return _t(Pe,!0),J};function c(w){w.n.substr(w.n.length-1)===\"}\"&&(w.n=w.n.substring(0,w.n.length-1))}function l(w){return w.trim?w.trim():w.replace(/^\\s*|\\s*$/g,\"\")}function u(w,A,S){if(A.charAt(S)!=w.charAt(0))return!1;for(var T=1,P=w.length;T<P;T++)if(A.charAt(S+T)!=w.charAt(T))return!1;return!0}var f={_t:!0,\"\\n\":!0,$:!0,\"/\":!0};function d(w,A,S,T){var P=[],O=null,j=null,D=null;for(j=S[S.length-1];w.length>0;){if(D=w.shift(),j&&j.tag==\"<\"&&!(D.tag in f))throw new Error(\"Illegal content in < super tag.\");if(e.tags[D.tag]<=e.tags.$||h(D,T))S.push(D),D.nodes=d(w,D.tag,S,T);else if(D.tag==\"/\"){if(S.length===0)throw new Error(\"Closing tag without opener: /\"+D.n);if(O=S.pop(),D.n!=O.n&&!p(D.n,O.n,T))throw new Error(\"Nesting error: \"+O.n+\" vs. \"+D.n);return O.end=D.i,P}else D.tag==`\n`&&(D.last=w.length==0||w[0].tag==`\n`);P.push(D)}if(S.length>0)throw new Error(\"missing closing tag: \"+S.pop().n);return P}function h(w,A){for(var S=0,T=A.length;S<T;S++)if(A[S].o==w.n)return w.tag=\"#\",!0}function p(w,A,S){for(var T=0,P=S.length;T<P;T++)if(S[T].c==w&&S[T].o==A)return!0}function m(w){var A=[];for(var S in w)A.push('\"'+b(S)+'\": function(c,p,t,i) {'+w[S]+\"}\");return\"{ \"+A.join(\",\")+\" }\"}function v(w){var A=[];for(var S in w.partials)A.push('\"'+b(S)+'\":{name:\"'+b(w.partials[S].name)+'\", '+v(w.partials[S])+\"}\");return\"partials: {\"+A.join(\",\")+\"}, subs: \"+m(w.subs)}e.stringify=function(w,A,S){return\"{code: function (c,p,i) { \"+e.wrapMain(w.code)+\" },\"+v(w)+\"}\"};var y=0;e.generate=function(w,A,S){y=0;var T={code:\"\",subs:{},partials:{}};return e.walk(w,T),S.asString?this.stringify(T,A,S):this.makeTemplate(T,A,S)},e.wrapMain=function(w){return'var t=this;t.b(i=i||\"\");'+w+\"return t.fl();\"},e.template=e.Template,e.makeTemplate=function(w,A,S){var T=this.makePartials(w);return T.code=new Function(\"c\",\"p\",\"i\",this.wrapMain(w.code)),new this.template(T,A,this,S)},e.makePartials=function(w){var A,S={subs:{},partials:w.partials,name:w.name};for(A in S.partials)S.partials[A]=this.makePartials(S.partials[A]);for(A in w.subs)S.subs[A]=new Function(\"c\",\"p\",\"t\",\"i\",w.subs[A]);return S};function b(w){return w.replace(a,\"\\\\\\\\\").replace(r,'\\\\\"').replace(n,\"\\\\n\").replace(i,\"\\\\r\").replace(s,\"\\\\u2028\").replace(o,\"\\\\u2029\")}function x(w){return~w.indexOf(\".\")?\"d\":\"f\"}function E(w,A){var S=\"<\"+(A.prefix||\"\"),T=S+w.n+y++;return A.partials[T]={name:w.n,partials:{}},A.code+='t.b(t.rp(\"'+b(T)+'\",c,p,\"'+(w.indent||\"\")+'\"));',T}e.codegen={\"#\":function(w,A){A.code+=\"if(t.s(t.\"+x(w.n)+'(\"'+b(w.n)+'\",c,p,1),c,p,0,'+w.i+\",\"+w.end+',\"'+w.otag+\" \"+w.ctag+'\")){t.rs(c,p,function(c,p,t){',e.walk(w.nodes,A),A.code+=\"});c.pop();}\"},\"^\":function(w,A){A.code+=\"if(!t.s(t.\"+x(w.n)+'(\"'+b(w.n)+'\",c,p,1),c,p,1,0,0,\"\")){',e.walk(w.nodes,A),A.code+=\"};\"},\">\":E,\"<\":function(w,A){var S={partials:{},code:\"\",subs:{},inPartial:!0};e.walk(w.nodes,S);var T=A.partials[E(w,A)];T.subs=S.subs,T.partials=S.partials},$:function(w,A){var S={subs:{},code:\"\",partials:A.partials,prefix:w.n};e.walk(w.nodes,S),A.subs[w.n]=S.code,A.inPartial||(A.code+='t.sub(\"'+b(w.n)+'\",c,p,i);')},\"\\n\":function(w,A){A.code+=k('\"\\\\n\"'+(w.last?\"\":\" + i\"))},_v:function(w,A){A.code+=\"t.b(t.v(t.\"+x(w.n)+'(\"'+b(w.n)+'\",c,p,0)));'},_t:function(w,A){A.code+=k('\"'+b(w.text)+'\"')},\"{\":_,\"&\":_};function _(w,A){A.code+=\"t.b(t.t(t.\"+x(w.n)+'(\"'+b(w.n)+'\",c,p,0)));'}function k(w){return\"t.b(\"+w+\");\"}e.walk=function(w,A){for(var S,T=0,P=w.length;T<P;T++)S=e.codegen[w[T].tag],S&&S(w[T],A);return A},e.parse=function(w,A,S){return S=S||{},d(w,\"\",[],S.sectionTags||[])},e.cache={},e.cacheKey=function(w,A){return[w,!!A.asString,!!A.disableLambda,A.delimiters,!!A.modelGet].join(\"||\")},e.compile=function(w,A){A=A||{};var S=e.cacheKey(w,A),T=this.cache[S];if(T){var P=T.partials;for(var O in P)delete P[O].instance;return T}return T=this.generate(this.parse(this.scan(w,A.delimiters),w,A),w,A),this.cache[S]=T}})(typeof E0!=\"undefined\"?E0:Hogan)});var TC=I(A0=>{g();var UB={};(function(e){e.Template=function(d,h,p,m){d=d||{},this.r=d.code||this.r,this.c=p,this.options=m||{},this.text=h||\"\",this.partials=d.partials||{},this.subs=d.subs||{},this.buf=\"\"},e.Template.prototype={r:function(d,h,p){return\"\"},v:u,t:l,render:function(h,p,m){return this.ri([h],p||{},m)},ri:function(d,h,p){return this.r(d,h,p)},ep:function(d,h){var p=this.partials[d],m=h[p.name];if(p.instance&&p.base==m)return p.instance;if(typeof m==\"string\"){if(!this.c)throw new Error(\"No compiler available.\");m=this.c.compile(m,this.options)}if(!m)return null;if(this.partials[d].base=m,p.subs){h.stackText||(h.stackText={});for(key in p.subs)h.stackText[key]||(h.stackText[key]=this.activeSub!==void 0&&h.stackText[this.activeSub]?h.stackText[this.activeSub]:this.text);m=r(m,p.subs,p.partials,this.stackSubs,this.stackPartials,h.stackText)}return this.partials[d].instance=m,m},rp:function(d,h,p,m){var v=this.ep(d,p);return v?v.ri(h,p,m):\"\"},rs:function(d,h,p){var m=d[d.length-1];if(!f(m)){p(d,h,this);return}for(var v=0;v<m.length;v++)d.push(m[v]),p(d,h,this),d.pop()},s:function(d,h,p,m,v,y,b){var x;return f(d)&&d.length===0?!1:(typeof d==\"function\"&&(d=this.ms(d,h,p,m,v,y,b)),x=!!d,!m&&x&&h&&h.push(typeof d==\"object\"?d:h[h.length-1]),x)},d:function(d,h,p,m){var v,y=d.split(\".\"),b=this.f(y[0],h,p,m),x=this.options.modelGet,E=null;if(d===\".\"&&f(h[h.length-2]))b=h[h.length-1];else for(var _=1;_<y.length;_++)v=t(y[_],b,x),v!==void 0?(E=b,b=v):b=\"\";return m&&!b?!1:(!m&&typeof b==\"function\"&&(h.push(E),b=this.mv(b,h,p),h.pop()),b)},f:function(d,h,p,m){for(var v=!1,y=null,b=!1,x=this.options.modelGet,E=h.length-1;E>=0;E--)if(y=h[E],v=t(d,y,x),v!==void 0){b=!0;break}return b?(!m&&typeof v==\"function\"&&(v=this.mv(v,h,p)),v):m?!1:\"\"},ls:function(d,h,p,m,v){var y=this.options.delimiters;return this.options.delimiters=v,this.b(this.ct(l(d.call(h,m)),h,p)),this.options.delimiters=y,!1},ct:function(d,h,p){if(this.options.disableLambda)throw new Error(\"Lambda features disabled.\");return this.c.compile(d,this.options).render(h,p)},b:function(d){this.buf+=d},fl:function(){var d=this.buf;return this.buf=\"\",d},ms:function(d,h,p,m,v,y,b){var x,E=h[h.length-1],_=d.call(E);return typeof _==\"function\"?m?!0:(x=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(_,E,p,x.substring(v,y),b)):_},mv:function(d,h,p){var m=h[h.length-1],v=d.call(m);return typeof v==\"function\"?this.ct(l(v.call(m)),m,p):v},sub:function(d,h,p,m){var v=this.subs[d];v&&(this.activeSub=d,v(h,p,this,m),this.activeSub=!1)}};function t(d,h,p){var m;return h&&typeof h==\"object\"&&(h[d]!==void 0?m=h[d]:p&&h.get&&typeof h.get==\"function\"&&(m=h.get(d))),m}function r(d,h,p,m,v,y){function b(){}b.prototype=d;function x(){}x.prototype=d.subs;var E,_=new b;_.subs=new x,_.subsText={},_.buf=\"\",m=m||{},_.stackSubs=m,_.subsText=y;for(E in h)m[E]||(m[E]=h[E]);for(E in m)_.subs[E]=m[E];v=v||{},_.stackPartials=v;for(E in p)v[E]||(v[E]=p[E]);for(E in v)_.partials[E]=v[E];return _}var n=/&/g,i=/</g,a=/>/g,s=/\\'/g,o=/\\\"/g,c=/[&<>\\\"\\']/;function l(d){return String(d==null?\"\":d)}function u(d){return d=l(d),c.test(d)?d.replace(n,\"&amp;\").replace(i,\"&lt;\").replace(a,\"&gt;\").replace(s,\"&#39;\").replace(o,\"&quot;\"):d}var f=Array.isArray||function(d){return Object.prototype.toString.call(d)===\"[object Array]\"}})(typeof A0!=\"undefined\"?A0:UB)});var k0=I((LX,CC)=>{g();var md=kC();md.Template=TC().Template;md.template=md.Template;CC.exports=md});var X3=I((yc,Sv)=>{g();(function(t,r){typeof yc==\"object\"&&typeof Sv==\"object\"?Sv.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof yc==\"object\"?yc.feather=r():t.feather=r()})(typeof self!=\"undefined\"?self:yc,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.r=function(n){Object.defineProperty(n,\"__esModule\",{value:!0})},r.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(i,\"a\",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p=\"\",r(r.s=0)}({\"./dist/icons.json\":function(e){e.exports={activity:'<polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"></polyline>',airplay:'<path d=\"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1\"></path><polygon points=\"12 15 17 21 7 21 12 15\"></polygon>',\"alert-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>',\"alert-octagon\":'<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>',\"alert-triangle\":'<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>',\"align-center\":'<line x1=\"18\" y1=\"10\" x2=\"6\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"18\" y1=\"18\" x2=\"6\" y2=\"18\"></line>',\"align-justify\":'<line x1=\"21\" y1=\"10\" x2=\"3\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"21\" y1=\"18\" x2=\"3\" y2=\"18\"></line>',\"align-left\":'<line x1=\"17\" y1=\"10\" x2=\"3\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"17\" y1=\"18\" x2=\"3\" y2=\"18\"></line>',\"align-right\":'<line x1=\"21\" y1=\"10\" x2=\"7\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"21\" y1=\"18\" x2=\"7\" y2=\"18\"></line>',anchor:'<circle cx=\"12\" cy=\"5\" r=\"3\"></circle><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"8\"></line><path d=\"M5 12H2a10 10 0 0 0 20 0h-3\"></path>',aperture:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"14.31\" y1=\"8\" x2=\"20.05\" y2=\"17.94\"></line><line x1=\"9.69\" y1=\"8\" x2=\"21.17\" y2=\"8\"></line><line x1=\"7.38\" y1=\"12\" x2=\"13.12\" y2=\"2.06\"></line><line x1=\"9.69\" y1=\"16\" x2=\"3.95\" y2=\"6.06\"></line><line x1=\"14.31\" y1=\"16\" x2=\"2.83\" y2=\"16\"></line><line x1=\"16.62\" y1=\"12\" x2=\"10.88\" y2=\"21.94\"></line>',archive:'<polyline points=\"21 8 21 21 3 21 3 8\"></polyline><rect x=\"1\" y=\"3\" width=\"22\" height=\"5\"></rect><line x1=\"10\" y1=\"12\" x2=\"14\" y2=\"12\"></line>',\"arrow-down-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"8 12 12 16 16 12\"></polyline><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line>',\"arrow-down-left\":'<line x1=\"17\" y1=\"7\" x2=\"7\" y2=\"17\"></line><polyline points=\"17 17 7 17 7 7\"></polyline>',\"arrow-down-right\":'<line x1=\"7\" y1=\"7\" x2=\"17\" y2=\"17\"></line><polyline points=\"17 7 17 17 7 17\"></polyline>',\"arrow-down\":'<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><polyline points=\"19 12 12 19 5 12\"></polyline>',\"arrow-left-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 8 8 12 12 16\"></polyline><line x1=\"16\" y1=\"12\" x2=\"8\" y2=\"12\"></line>',\"arrow-left\":'<line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"></line><polyline points=\"12 19 5 12 12 5\"></polyline>',\"arrow-right-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 16 16 12 12 8\"></polyline><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',\"arrow-right\":'<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line><polyline points=\"12 5 19 12 12 19\"></polyline>',\"arrow-up-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"16 12 12 8 8 12\"></polyline><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"8\"></line>',\"arrow-up-left\":'<line x1=\"17\" y1=\"17\" x2=\"7\" y2=\"7\"></line><polyline points=\"7 17 7 7 17 7\"></polyline>',\"arrow-up-right\":'<line x1=\"7\" y1=\"17\" x2=\"17\" y2=\"7\"></line><polyline points=\"7 7 17 7 17 17\"></polyline>',\"arrow-up\":'<line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"></line><polyline points=\"5 12 12 5 19 12\"></polyline>',\"at-sign\":'<circle cx=\"12\" cy=\"12\" r=\"4\"></circle><path d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94\"></path>',award:'<circle cx=\"12\" cy=\"8\" r=\"7\"></circle><polyline points=\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\"></polyline>',\"bar-chart-2\":'<line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\"></line><line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"></line><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\"></line>',\"bar-chart\":'<line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"10\"></line><line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"4\"></line><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"16\"></line>',\"battery-charging\":'<path d=\"M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19\"></path><line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"11\"></line><polyline points=\"11 6 7 12 13 12 9 18\"></polyline>',battery:'<rect x=\"1\" y=\"6\" width=\"18\" height=\"12\" rx=\"2\" ry=\"2\"></rect><line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"11\"></line>',\"bell-off\":'<path d=\"M13.73 21a2 2 0 0 1-3.46 0\"></path><path d=\"M18.63 13A17.89 17.89 0 0 1 18 8\"></path><path d=\"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14\"></path><path d=\"M18 8a6 6 0 0 0-9.33-5\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',bell:'<path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"></path><path d=\"M13.73 21a2 2 0 0 1-3.46 0\"></path>',bluetooth:'<polyline points=\"6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5\"></polyline>',bold:'<path d=\"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"></path><path d=\"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"></path>',\"book-open\":'<path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"></path><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"></path>',book:'<path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"></path><path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"></path>',bookmark:'<path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"></path>',box:'<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>',briefcase:'<rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"></path>',calendar:'<rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>',\"camera-off\":'<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56\"></path>',camera:'<path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"></path><circle cx=\"12\" cy=\"13\" r=\"4\"></circle>',cast:'<path d=\"M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6\"></path><line x1=\"2\" y1=\"20\" x2=\"2.01\" y2=\"20\"></line>',\"check-circle\":'<path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path><polyline points=\"22 4 12 14.01 9 11.01\"></polyline>',\"check-square\":'<polyline points=\"9 11 12 14 22 4\"></polyline><path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"></path>',check:'<polyline points=\"20 6 9 17 4 12\"></polyline>',\"chevron-down\":'<polyline points=\"6 9 12 15 18 9\"></polyline>',\"chevron-left\":'<polyline points=\"15 18 9 12 15 6\"></polyline>',\"chevron-right\":'<polyline points=\"9 18 15 12 9 6\"></polyline>',\"chevron-up\":'<polyline points=\"18 15 12 9 6 15\"></polyline>',\"chevrons-down\":'<polyline points=\"7 13 12 18 17 13\"></polyline><polyline points=\"7 6 12 11 17 6\"></polyline>',\"chevrons-left\":'<polyline points=\"11 17 6 12 11 7\"></polyline><polyline points=\"18 17 13 12 18 7\"></polyline>',\"chevrons-right\":'<polyline points=\"13 17 18 12 13 7\"></polyline><polyline points=\"6 17 11 12 6 7\"></polyline>',\"chevrons-up\":'<polyline points=\"17 11 12 6 7 11\"></polyline><polyline points=\"17 18 12 13 7 18\"></polyline>',chrome:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"21.17\" y1=\"8\" x2=\"12\" y2=\"8\"></line><line x1=\"3.95\" y1=\"6.06\" x2=\"8.54\" y2=\"14\"></line><line x1=\"10.88\" y1=\"21.94\" x2=\"15.46\" y2=\"14\"></line>',circle:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle>',clipboard:'<path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"></path><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" ry=\"1\"></rect>',clock:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 6 12 12 16 14\"></polyline>',\"cloud-drizzle\":'<line x1=\"8\" y1=\"19\" x2=\"8\" y2=\"21\"></line><line x1=\"8\" y1=\"13\" x2=\"8\" y2=\"15\"></line><line x1=\"16\" y1=\"19\" x2=\"16\" y2=\"21\"></line><line x1=\"16\" y1=\"13\" x2=\"16\" y2=\"15\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"17\"></line><path d=\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"></path>',\"cloud-lightning\":'<path d=\"M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9\"></path><polyline points=\"13 11 9 17 15 17 11 23\"></polyline>',\"cloud-off\":'<path d=\"M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',\"cloud-rain\":'<line x1=\"16\" y1=\"13\" x2=\"16\" y2=\"21\"></line><line x1=\"8\" y1=\"13\" x2=\"8\" y2=\"21\"></line><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"23\"></line><path d=\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"></path>',\"cloud-snow\":'<path d=\"M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25\"></path><line x1=\"8\" y1=\"16\" x2=\"8.01\" y2=\"16\"></line><line x1=\"8\" y1=\"20\" x2=\"8.01\" y2=\"20\"></line><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line><line x1=\"12\" y1=\"22\" x2=\"12.01\" y2=\"22\"></line><line x1=\"16\" y1=\"16\" x2=\"16.01\" y2=\"16\"></line><line x1=\"16\" y1=\"20\" x2=\"16.01\" y2=\"20\"></line>',cloud:'<path d=\"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z\"></path>',code:'<polyline points=\"16 18 22 12 16 6\"></polyline><polyline points=\"8 6 2 12 8 18\"></polyline>',codepen:'<polygon points=\"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2\"></polygon><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"15.5\"></line><polyline points=\"22 8.5 12 15.5 2 8.5\"></polyline><polyline points=\"2 15.5 12 8.5 22 15.5\"></polyline><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"8.5\"></line>',codesandbox:'<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"7.5 4.21 12 6.81 16.5 4.21\"></polyline><polyline points=\"7.5 19.79 7.5 14.6 3 12\"></polyline><polyline points=\"21 12 16.5 14.6 16.5 19.79\"></polyline><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>',coffee:'<path d=\"M18 8h1a4 4 0 0 1 0 8h-1\"></path><path d=\"M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z\"></path><line x1=\"6\" y1=\"1\" x2=\"6\" y2=\"4\"></line><line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"4\"></line><line x1=\"14\" y1=\"1\" x2=\"14\" y2=\"4\"></line>',columns:'<path d=\"M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18\"></path>',command:'<path d=\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\"></path>',compass:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polygon points=\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\"></polygon>',copy:'<rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>',\"corner-down-left\":'<polyline points=\"9 10 4 15 9 20\"></polyline><path d=\"M20 4v7a4 4 0 0 1-4 4H4\"></path>',\"corner-down-right\":'<polyline points=\"15 10 20 15 15 20\"></polyline><path d=\"M4 4v7a4 4 0 0 0 4 4h12\"></path>',\"corner-left-down\":'<polyline points=\"14 15 9 20 4 15\"></polyline><path d=\"M20 4h-7a4 4 0 0 0-4 4v12\"></path>',\"corner-left-up\":'<polyline points=\"14 9 9 4 4 9\"></polyline><path d=\"M20 20h-7a4 4 0 0 1-4-4V4\"></path>',\"corner-right-down\":'<polyline points=\"10 15 15 20 20 15\"></polyline><path d=\"M4 4h7a4 4 0 0 1 4 4v12\"></path>',\"corner-right-up\":'<polyline points=\"10 9 15 4 20 9\"></polyline><path d=\"M4 20h7a4 4 0 0 0 4-4V4\"></path>',\"corner-up-left\":'<polyline points=\"9 14 4 9 9 4\"></polyline><path d=\"M20 20v-7a4 4 0 0 0-4-4H4\"></path>',\"corner-up-right\":'<polyline points=\"15 14 20 9 15 4\"></polyline><path d=\"M4 20v-7a4 4 0 0 1 4-4h12\"></path>',cpu:'<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" ry=\"2\"></rect><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"></rect><line x1=\"9\" y1=\"1\" x2=\"9\" y2=\"4\"></line><line x1=\"15\" y1=\"1\" x2=\"15\" y2=\"4\"></line><line x1=\"9\" y1=\"20\" x2=\"9\" y2=\"23\"></line><line x1=\"15\" y1=\"20\" x2=\"15\" y2=\"23\"></line><line x1=\"20\" y1=\"9\" x2=\"23\" y2=\"9\"></line><line x1=\"20\" y1=\"14\" x2=\"23\" y2=\"14\"></line><line x1=\"1\" y1=\"9\" x2=\"4\" y2=\"9\"></line><line x1=\"1\" y1=\"14\" x2=\"4\" y2=\"14\"></line>',\"credit-card\":'<rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\"></rect><line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\"></line>',crop:'<path d=\"M6.13 1L6 16a2 2 0 0 0 2 2h15\"></path><path d=\"M1 6.13L16 6a2 2 0 0 1 2 2v15\"></path>',crosshair:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"22\" y1=\"12\" x2=\"18\" y2=\"12\"></line><line x1=\"6\" y1=\"12\" x2=\"2\" y2=\"12\"></line><line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"2\"></line><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"18\"></line>',database:'<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"></ellipse><path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"></path><path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"></path>',delete:'<path d=\"M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z\"></path><line x1=\"18\" y1=\"9\" x2=\"12\" y2=\"15\"></line><line x1=\"12\" y1=\"9\" x2=\"18\" y2=\"15\"></line>',disc:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"3\"></circle>',\"divide-circle\":'<line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8\"></line><circle cx=\"12\" cy=\"12\" r=\"10\"></circle>',\"divide-square\":'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8\"></line>',divide:'<circle cx=\"12\" cy=\"6\" r=\"2\"></circle><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line><circle cx=\"12\" cy=\"18\" r=\"2\"></circle>',\"dollar-sign\":'<line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\"></line><path d=\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"></path>',\"download-cloud\":'<polyline points=\"8 17 12 21 16 17\"></polyline><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"></line><path d=\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\"></path>',download:'<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>',dribbble:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M8.56 2.75c4.37 6.03 6.02 9.42 8.03 17.72m2.54-15.38c-3.72 4.35-8.94 5.66-16.88 5.85m19.5 1.9c-3.5-.93-6.63-.82-8.94 0-2.58.92-5.01 2.86-7.44 6.32\"></path>',droplet:'<path d=\"M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z\"></path>',\"edit-2\":'<path d=\"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\"></path>',\"edit-3\":'<path d=\"M12 20h9\"></path><path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\"></path>',edit:'<path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"></path>',\"external-link\":'<path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line>',\"eye-off\":'<path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',eye:'<path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle>',facebook:'<path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"></path>',\"fast-forward\":'<polygon points=\"13 19 22 12 13 5 13 19\"></polygon><polygon points=\"2 19 11 12 2 5 2 19\"></polygon>',feather:'<path d=\"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z\"></path><line x1=\"16\" y1=\"8\" x2=\"2\" y2=\"22\"></line><line x1=\"17.5\" y1=\"15\" x2=\"9\" y2=\"15\"></line>',figma:'<path d=\"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z\"></path><path d=\"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z\"></path><path d=\"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z\"></path><path d=\"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z\"></path><path d=\"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z\"></path>',\"file-minus\":'<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\"></line>',\"file-plus\":'<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"12\"></line><line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\"></line>',\"file-text\":'<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line><polyline points=\"10 9 9 9 8 9\"></polyline>',file:'<path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"></path><polyline points=\"13 2 13 9 20 9\"></polyline>',film:'<rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\"></rect><line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\"></line><line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\"></line><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"2\" y1=\"7\" x2=\"7\" y2=\"7\"></line><line x1=\"2\" y1=\"17\" x2=\"7\" y2=\"17\"></line><line x1=\"17\" y1=\"17\" x2=\"22\" y2=\"17\"></line><line x1=\"17\" y1=\"7\" x2=\"22\" y2=\"7\"></line>',filter:'<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>',flag:'<path d=\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\"></path><line x1=\"4\" y1=\"22\" x2=\"4\" y2=\"15\"></line>',\"folder-minus\":'<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path><line x1=\"9\" y1=\"14\" x2=\"15\" y2=\"14\"></line>',\"folder-plus\":'<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"17\"></line><line x1=\"9\" y1=\"14\" x2=\"15\" y2=\"14\"></line>',folder:'<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path>',framer:'<path d=\"M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7\"></path>',frown:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M16 16s-1.5-2-4-2-4 2-4 2\"></path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>',gift:'<polyline points=\"20 12 20 22 4 22 4 12\"></polyline><rect x=\"2\" y=\"7\" width=\"20\" height=\"5\"></rect><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"7\"></line><path d=\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"></path><path d=\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"></path>',\"git-branch\":'<line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\"></line><circle cx=\"18\" cy=\"6\" r=\"3\"></circle><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><path d=\"M18 9a9 9 0 0 1-9 9\"></path>',\"git-commit\":'<circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"1.05\" y1=\"12\" x2=\"7\" y2=\"12\"></line><line x1=\"17.01\" y1=\"12\" x2=\"22.96\" y2=\"12\"></line>',\"git-merge\":'<circle cx=\"18\" cy=\"18\" r=\"3\"></circle><circle cx=\"6\" cy=\"6\" r=\"3\"></circle><path d=\"M6 21V9a9 9 0 0 0 9 9\"></path>',\"git-pull-request\":'<circle cx=\"18\" cy=\"18\" r=\"3\"></circle><circle cx=\"6\" cy=\"6\" r=\"3\"></circle><path d=\"M13 6h3a2 2 0 0 1 2 2v7\"></path><line x1=\"6\" y1=\"9\" x2=\"6\" y2=\"21\"></line>',github:'<path d=\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\"></path>',gitlab:'<path d=\"M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z\"></path>',globe:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"></path>',grid:'<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>',\"hard-drive\":'<line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\"></line><path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"></path><line x1=\"6\" y1=\"16\" x2=\"6.01\" y2=\"16\"></line><line x1=\"10\" y1=\"16\" x2=\"10.01\" y2=\"16\"></line>',hash:'<line x1=\"4\" y1=\"9\" x2=\"20\" y2=\"9\"></line><line x1=\"4\" y1=\"15\" x2=\"20\" y2=\"15\"></line><line x1=\"10\" y1=\"3\" x2=\"8\" y2=\"21\"></line><line x1=\"16\" y1=\"3\" x2=\"14\" y2=\"21\"></line>',headphones:'<path d=\"M3 18v-6a9 9 0 0 1 18 0v6\"></path><path d=\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\"></path>',heart:'<path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path>',\"help-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"></path><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>',hexagon:'<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path>',home:'<path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"></path><polyline points=\"9 22 9 12 15 12 15 22\"></polyline>',image:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle><polyline points=\"21 15 16 10 5 21\"></polyline>',inbox:'<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"></polyline><path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"></path>',info:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line>',instagram:'<rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\"></rect><path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"></path><line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"></line>',italic:'<line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\"></line><line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\"></line><line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\"></line>',key:'<path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\"></path>',layers:'<polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline>',layout:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"></line>',\"life-buoy\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"4.93\" y1=\"4.93\" x2=\"9.17\" y2=\"9.17\"></line><line x1=\"14.83\" y1=\"14.83\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"14.83\" y1=\"9.17\" x2=\"19.07\" y2=\"4.93\"></line><line x1=\"14.83\" y1=\"9.17\" x2=\"18.36\" y2=\"5.64\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"9.17\" y2=\"14.83\"></line>',\"link-2\":'<path d=\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\"></path><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',link:'<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path>',linkedin:'<path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"></path><rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"></rect><circle cx=\"4\" cy=\"4\" r=\"2\"></circle>',list:'<line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line>',loader:'<line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\"></line><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"></line><line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\"></line><line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\"></line><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\"></line><line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\"></line>',lock:'<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"></path>',\"log-in\":'<path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"></path><polyline points=\"10 17 15 12 10 7\"></polyline><line x1=\"15\" y1=\"12\" x2=\"3\" y2=\"12\"></line>',\"log-out\":'<path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"></path><polyline points=\"16 17 21 12 16 7\"></polyline><line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"></line>',mail:'<path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"></path><polyline points=\"22,6 12,13 2,6\"></polyline>',\"map-pin\":'<path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"></path><circle cx=\"12\" cy=\"10\" r=\"3\"></circle>',map:'<polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\"></polygon><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\"></line><line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\"></line>',\"maximize-2\":'<polyline points=\"15 3 21 3 21 9\"></polyline><polyline points=\"9 21 3 21 3 15\"></polyline><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"></line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"></line>',maximize:'<path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"></path>',meh:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"8\" y1=\"15\" x2=\"16\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>',menu:'<line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line>',\"message-circle\":'<path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"></path>',\"message-square\":'<path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"></path>',\"mic-off\":'<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6\"></path><path d=\"M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23\"></path><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>',mic:'<path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>',\"minimize-2\":'<polyline points=\"4 14 10 14 10 20\"></polyline><polyline points=\"20 10 14 10 14 4\"></polyline><line x1=\"14\" y1=\"10\" x2=\"21\" y2=\"3\"></line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"></line>',minimize:'<path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"></path>',\"minus-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',\"minus-square\":'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',minus:'<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>',monitor:'<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line>',moon:'<path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"></path>',\"more-horizontal\":'<circle cx=\"12\" cy=\"12\" r=\"1\"></circle><circle cx=\"19\" cy=\"12\" r=\"1\"></circle><circle cx=\"5\" cy=\"12\" r=\"1\"></circle>',\"more-vertical\":'<circle cx=\"12\" cy=\"12\" r=\"1\"></circle><circle cx=\"12\" cy=\"5\" r=\"1\"></circle><circle cx=\"12\" cy=\"19\" r=\"1\"></circle>',\"mouse-pointer\":'<path d=\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\"></path><path d=\"M13 13l6 6\"></path>',move:'<polyline points=\"5 9 2 12 5 15\"></polyline><polyline points=\"9 5 12 2 15 5\"></polyline><polyline points=\"15 19 12 22 9 19\"></polyline><polyline points=\"19 9 22 12 19 15\"></polyline><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\"></line>',music:'<path d=\"M9 18V5l12-2v13\"></path><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><circle cx=\"18\" cy=\"16\" r=\"3\"></circle>',\"navigation-2\":'<polygon points=\"12 2 19 21 12 17 5 21 12 2\"></polygon>',navigation:'<polygon points=\"3 11 22 2 13 21 11 13 3 11\"></polygon>',octagon:'<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon>',package:'<line x1=\"16.5\" y1=\"9.4\" x2=\"7.5\" y2=\"4.21\"></line><path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>',paperclip:'<path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"></path>',\"pause-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"10\" y1=\"15\" x2=\"10\" y2=\"9\"></line><line x1=\"14\" y1=\"15\" x2=\"14\" y2=\"9\"></line>',pause:'<rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect>',\"pen-tool\":'<path d=\"M12 19l7-7 3 3-7 7-3-3z\"></path><path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\"></path><path d=\"M2 2l7.586 7.586\"></path><circle cx=\"11\" cy=\"11\" r=\"2\"></circle>',percent:'<line x1=\"19\" y1=\"5\" x2=\"5\" y2=\"19\"></line><circle cx=\"6.5\" cy=\"6.5\" r=\"2.5\"></circle><circle cx=\"17.5\" cy=\"17.5\" r=\"2.5\"></circle>',\"phone-call\":'<path d=\"M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"phone-forwarded\":'<polyline points=\"19 1 23 5 19 9\"></polyline><line x1=\"15\" y1=\"5\" x2=\"23\" y2=\"5\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"phone-incoming\":'<polyline points=\"16 2 16 8 22 8\"></polyline><line x1=\"23\" y1=\"1\" x2=\"16\" y2=\"8\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"phone-missed\":'<line x1=\"23\" y1=\"1\" x2=\"17\" y2=\"7\"></line><line x1=\"17\" y1=\"1\" x2=\"23\" y2=\"7\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"phone-off\":'<path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\"></path><line x1=\"23\" y1=\"1\" x2=\"1\" y2=\"23\"></line>',\"phone-outgoing\":'<polyline points=\"23 7 23 1 17 1\"></polyline><line x1=\"16\" y1=\"8\" x2=\"23\" y2=\"1\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',phone:'<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>',\"pie-chart\":'<path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\"></path><path d=\"M22 12A10 10 0 0 0 12 2v10z\"></path>',\"play-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polygon points=\"10 8 16 12 10 16 10 8\"></polygon>',play:'<polygon points=\"5 3 19 12 5 21 5 3\"></polygon>',\"plus-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',\"plus-square\":'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>',plus:'<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>',pocket:'<path d=\"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z\"></path><polyline points=\"8 10 12 14 16 10\"></polyline>',power:'<path d=\"M18.36 6.64a9 9 0 1 1-12.73 0\"></path><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"12\"></line>',printer:'<polyline points=\"6 9 6 2 18 2 18 9\"></polyline><path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"></path><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\"></rect>',radio:'<circle cx=\"12\" cy=\"12\" r=\"2\"></circle><path d=\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\"></path>',\"refresh-ccw\":'<polyline points=\"1 4 1 10 7 10\"></polyline><polyline points=\"23 20 23 14 17 14\"></polyline><path d=\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15\"></path>',\"refresh-cw\":'<polyline points=\"23 4 23 10 17 10\"></polyline><polyline points=\"1 20 1 14 7 14\"></polyline><path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"></path>',repeat:'<polyline points=\"17 1 21 5 17 9\"></polyline><path d=\"M3 11V9a4 4 0 0 1 4-4h14\"></path><polyline points=\"7 23 3 19 7 15\"></polyline><path d=\"M21 13v2a4 4 0 0 1-4 4H3\"></path>',rewind:'<polygon points=\"11 19 2 12 11 5 11 19\"></polygon><polygon points=\"22 19 13 12 22 5 22 19\"></polygon>',\"rotate-ccw\":'<polyline points=\"1 4 1 10 7 10\"></polyline><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"></path>',\"rotate-cw\":'<polyline points=\"23 4 23 10 17 10\"></polyline><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"></path>',rss:'<path d=\"M4 11a9 9 0 0 1 9 9\"></path><path d=\"M4 4a16 16 0 0 1 16 16\"></path><circle cx=\"5\" cy=\"19\" r=\"1\"></circle>',save:'<path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"></path><polyline points=\"17 21 17 13 7 13 7 21\"></polyline><polyline points=\"7 3 7 8 15 8\"></polyline>',scissors:'<circle cx=\"6\" cy=\"6\" r=\"3\"></circle><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><line x1=\"20\" y1=\"4\" x2=\"8.12\" y2=\"15.88\"></line><line x1=\"14.47\" y1=\"14.48\" x2=\"20\" y2=\"20\"></line><line x1=\"8.12\" y1=\"8.12\" x2=\"12\" y2=\"12\"></line>',search:'<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>',send:'<line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon>',server:'<rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect><rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect><line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\"></line><line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\"></line>',settings:'<circle cx=\"12\" cy=\"12\" r=\"3\"></circle><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"></path>',\"share-2\":'<circle cx=\"18\" cy=\"5\" r=\"3\"></circle><circle cx=\"6\" cy=\"12\" r=\"3\"></circle><circle cx=\"18\" cy=\"19\" r=\"3\"></circle><line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"></line><line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"></line>',share:'<path d=\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\"></path><polyline points=\"16 6 12 2 8 6\"></polyline><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"15\"></line>',\"shield-off\":'<path d=\"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18\"></path><path d=\"M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',shield:'<path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"></path>',\"shopping-bag\":'<path d=\"M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"></path><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><path d=\"M16 10a4 4 0 0 1-8 0\"></path>',\"shopping-cart\":'<circle cx=\"9\" cy=\"21\" r=\"1\"></circle><circle cx=\"20\" cy=\"21\" r=\"1\"></circle><path d=\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"></path>',shuffle:'<polyline points=\"16 3 21 3 21 8\"></polyline><line x1=\"4\" y1=\"20\" x2=\"21\" y2=\"3\"></line><polyline points=\"21 16 21 21 16 21\"></polyline><line x1=\"15\" y1=\"15\" x2=\"21\" y2=\"21\"></line><line x1=\"4\" y1=\"4\" x2=\"9\" y2=\"9\"></line>',sidebar:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"></line>',\"skip-back\":'<polygon points=\"19 20 9 12 19 4 19 20\"></polygon><line x1=\"5\" y1=\"19\" x2=\"5\" y2=\"5\"></line>',\"skip-forward\":'<polygon points=\"5 4 15 12 5 20 5 4\"></polygon><line x1=\"19\" y1=\"5\" x2=\"19\" y2=\"19\"></line>',slack:'<path d=\"M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z\"></path><path d=\"M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"></path><path d=\"M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z\"></path><path d=\"M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z\"></path><path d=\"M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z\"></path><path d=\"M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\"></path><path d=\"M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z\"></path><path d=\"M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z\"></path>',slash:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\"></line>',sliders:'<line x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"></line><line x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"></line><line x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"></line><line x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"></line><line x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"></line><line x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"></line><line x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"></line>',smartphone:'<rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line>',smile:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"></path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>',speaker:'<rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" ry=\"2\"></rect><circle cx=\"12\" cy=\"14\" r=\"4\"></circle><line x1=\"12\" y1=\"6\" x2=\"12.01\" y2=\"6\"></line>',square:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>',star:'<polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>',\"stop-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"></rect>',sun:'<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>',sunrise:'<path d=\"M17 18a5 5 0 0 0-10 0\"></path><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"9\"></line><line x1=\"4.22\" y1=\"10.22\" x2=\"5.64\" y2=\"11.64\"></line><line x1=\"1\" y1=\"18\" x2=\"3\" y2=\"18\"></line><line x1=\"21\" y1=\"18\" x2=\"23\" y2=\"18\"></line><line x1=\"18.36\" y1=\"11.64\" x2=\"19.78\" y2=\"10.22\"></line><line x1=\"23\" y1=\"22\" x2=\"1\" y2=\"22\"></line><polyline points=\"8 6 12 2 16 6\"></polyline>',sunset:'<path d=\"M17 18a5 5 0 0 0-10 0\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"2\"></line><line x1=\"4.22\" y1=\"10.22\" x2=\"5.64\" y2=\"11.64\"></line><line x1=\"1\" y1=\"18\" x2=\"3\" y2=\"18\"></line><line x1=\"21\" y1=\"18\" x2=\"23\" y2=\"18\"></line><line x1=\"18.36\" y1=\"11.64\" x2=\"19.78\" y2=\"10.22\"></line><line x1=\"23\" y1=\"22\" x2=\"1\" y2=\"22\"></line><polyline points=\"16 5 12 9 8 5\"></polyline>',table:'<path d=\"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18\"></path>',tablet:'<rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line>',tag:'<path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"></path><line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\"></line>',target:'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"6\"></circle><circle cx=\"12\" cy=\"12\" r=\"2\"></circle>',terminal:'<polyline points=\"4 17 10 11 4 5\"></polyline><line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"></line>',thermometer:'<path d=\"M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z\"></path>',\"thumbs-down\":'<path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"></path>',\"thumbs-up\":'<path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"></path>',\"toggle-left\":'<rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" ry=\"7\"></rect><circle cx=\"8\" cy=\"12\" r=\"3\"></circle>',\"toggle-right\":'<rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" ry=\"7\"></rect><circle cx=\"16\" cy=\"12\" r=\"3\"></circle>',tool:'<path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"></path>',\"trash-2\":'<polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>',trash:'<polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path>',trello:'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><rect x=\"7\" y=\"7\" width=\"3\" height=\"9\"></rect><rect x=\"14\" y=\"7\" width=\"3\" height=\"5\"></rect>',\"trending-down\":'<polyline points=\"23 18 13.5 8.5 8.5 13.5 1 6\"></polyline><polyline points=\"17 18 23 18 23 12\"></polyline>',\"trending-up\":'<polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"></polyline><polyline points=\"17 6 23 6 23 12\"></polyline>',triangle:'<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path>',truck:'<rect x=\"1\" y=\"3\" width=\"15\" height=\"13\"></rect><polygon points=\"16 8 20 8 23 11 23 16 16 16 16 8\"></polygon><circle cx=\"5.5\" cy=\"18.5\" r=\"2.5\"></circle><circle cx=\"18.5\" cy=\"18.5\" r=\"2.5\"></circle>',tv:'<rect x=\"2\" y=\"7\" width=\"20\" height=\"15\" rx=\"2\" ry=\"2\"></rect><polyline points=\"17 2 12 7 7 2\"></polyline>',twitch:'<path d=\"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7\"></path>',twitter:'<path d=\"M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z\"></path>',type:'<polyline points=\"4 7 4 4 20 4 20 7\"></polyline><line x1=\"9\" y1=\"20\" x2=\"15\" y2=\"20\"></line><line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"></line>',umbrella:'<path d=\"M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7\"></path>',underline:'<path d=\"M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3\"></path><line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\"></line>',unlock:'<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect><path d=\"M7 11V7a5 5 0 0 1 9.9-1\"></path>',\"upload-cloud\":'<polyline points=\"16 16 12 12 8 16\"></polyline><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"></line><path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\"></path><polyline points=\"16 16 12 12 8 16\"></polyline>',upload:'<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"17 8 12 3 7 8\"></polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"></line>',\"user-check\":'<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><polyline points=\"17 11 19 13 23 9\"></polyline>',\"user-minus\":'<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"></line>',\"user-plus\":'<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\"></line><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"></line>',\"user-x\":'<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"18\" y1=\"8\" x2=\"23\" y2=\"13\"></line><line x1=\"23\" y1=\"8\" x2=\"18\" y2=\"13\"></line>',user:'<path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path><circle cx=\"12\" cy=\"7\" r=\"4\"></circle>',users:'<path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"9\" cy=\"7\" r=\"4\"></circle><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"></path><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"></path>',\"video-off\":'<path d=\"M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',video:'<polygon points=\"23 7 16 12 23 17 23 7\"></polygon><rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\"></rect>',voicemail:'<circle cx=\"5.5\" cy=\"11.5\" r=\"4.5\"></circle><circle cx=\"18.5\" cy=\"11.5\" r=\"4.5\"></circle><line x1=\"5.5\" y1=\"16\" x2=\"18.5\" y2=\"16\"></line>',\"volume-1\":'<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"></path>',\"volume-2\":'<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"></path>',\"volume-x\":'<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"></line><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"></line>',volume:'<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon>',watch:'<circle cx=\"12\" cy=\"12\" r=\"7\"></circle><polyline points=\"12 9 12 12 13.5 13.5\"></polyline><path d=\"M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83\"></path>',\"wifi-off\":'<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M16.72 11.06A10.94 10.94 0 0 1 19 12.55\"></path><path d=\"M5 12.55a10.94 10.94 0 0 1 5.17-2.39\"></path><path d=\"M10.71 5.05A16 16 0 0 1 22.58 9\"></path><path d=\"M1.42 9a15.91 15.91 0 0 1 4.7-2.88\"></path><path d=\"M8.53 16.11a6 6 0 0 1 6.95 0\"></path><line x1=\"12\" y1=\"20\" x2=\"12.01\" y2=\"20\"></line>',wifi:'<path d=\"M5 12.55a11 11 0 0 1 14.08 0\"></path><path d=\"M1.42 9a16 16 0 0 1 21.16 0\"></path><path d=\"M8.53 16.11a6 6 0 0 1 6.95 0\"></path><line x1=\"12\" y1=\"20\" x2=\"12.01\" y2=\"20\"></line>',wind:'<path d=\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\"></path>',\"x-circle\":'<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>',\"x-octagon\":'<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>',\"x-square\":'<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>',x:'<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>',youtube:'<path d=\"M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z\"></path><polygon points=\"9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02\"></polygon>',\"zap-off\":'<polyline points=\"12.41 6.75 13 2 10.57 4.92\"></polyline><polyline points=\"18.57 12.91 21 10 15.66 10\"></polyline><polyline points=\"8 8 3 14 12 14 11 22 16 16\"></polyline><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>',zap:'<polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"></polygon>',\"zoom-in\":'<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line>',\"zoom-out\":'<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line>'}},\"./node_modules/classnames/dedupe.js\":function(e,t,r){var n,i;(function(){\"use strict\";var a=function(){function s(){}s.prototype=Object.create(null);function o(m,v){for(var y=v.length,b=0;b<y;++b)h(m,v[b])}var c={}.hasOwnProperty;function l(m,v){m[v]=!0}function u(m,v){for(var y in v)c.call(v,y)&&(m[y]=!!v[y])}var f=/\\s+/;function d(m,v){for(var y=v.split(f),b=y.length,x=0;x<b;++x)m[y[x]]=!0}function h(m,v){if(v){var y=typeof v;y===\"string\"?d(m,v):Array.isArray(v)?o(m,v):y===\"object\"?u(m,v):y===\"number\"&&l(m,v)}}function p(){for(var m=arguments.length,v=Array(m),y=0;y<m;y++)v[y]=arguments[y];var b=new s;o(b,v);var x=[];for(var E in b)b[E]&&x.push(E);return x.join(\" \")}return p}();typeof e!=\"undefined\"&&e.exports?e.exports=a:(n=[],i=function(){return a}.apply(t,n),i!==void 0&&(e.exports=i))})()},\"./node_modules/core-js/es/array/from.js\":function(e,t,r){r(\"./node_modules/core-js/modules/es.string.iterator.js\"),r(\"./node_modules/core-js/modules/es.array.from.js\");var n=r(\"./node_modules/core-js/internals/path.js\");e.exports=n.Array.from},\"./node_modules/core-js/internals/a-function.js\":function(e,t){e.exports=function(r){if(typeof r!=\"function\")throw TypeError(String(r)+\" is not a function\");return r}},\"./node_modules/core-js/internals/an-object.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/is-object.js\");e.exports=function(i){if(!n(i))throw TypeError(String(i)+\" is not an object\");return i}},\"./node_modules/core-js/internals/array-from.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/bind-context.js\"),i=r(\"./node_modules/core-js/internals/to-object.js\"),a=r(\"./node_modules/core-js/internals/call-with-safe-iteration-closing.js\"),s=r(\"./node_modules/core-js/internals/is-array-iterator-method.js\"),o=r(\"./node_modules/core-js/internals/to-length.js\"),c=r(\"./node_modules/core-js/internals/create-property.js\"),l=r(\"./node_modules/core-js/internals/get-iterator-method.js\");e.exports=function(f){var d=i(f),h=typeof this==\"function\"?this:Array,p=arguments.length,m=p>1?arguments[1]:void 0,v=m!==void 0,y=0,b=l(d),x,E,_,k;if(v&&(m=n(m,p>2?arguments[2]:void 0,2)),b!=null&&!(h==Array&&s(b)))for(k=b.call(d),E=new h;!(_=k.next()).done;y++)c(E,y,v?a(k,m,[_.value,y],!0):_.value);else for(x=o(d.length),E=new h(x);x>y;y++)c(E,y,v?m(d[y],y):d[y]);return E.length=y,E}},\"./node_modules/core-js/internals/array-includes.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/to-indexed-object.js\"),i=r(\"./node_modules/core-js/internals/to-length.js\"),a=r(\"./node_modules/core-js/internals/to-absolute-index.js\");e.exports=function(s){return function(o,c,l){var u=n(o),f=i(u.length),d=a(l,f),h;if(s&&c!=c){for(;f>d;)if(h=u[d++],h!=h)return!0}else for(;f>d;d++)if((s||d in u)&&u[d]===c)return s||d||0;return!s&&-1}}},\"./node_modules/core-js/internals/bind-context.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/a-function.js\");e.exports=function(i,a,s){if(n(i),a===void 0)return i;switch(s){case 0:return function(){return i.call(a)};case 1:return function(o){return i.call(a,o)};case 2:return function(o,c){return i.call(a,o,c)};case 3:return function(o,c,l){return i.call(a,o,c,l)}}return function(){return i.apply(a,arguments)}}},\"./node_modules/core-js/internals/call-with-safe-iteration-closing.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/an-object.js\");e.exports=function(i,a,s,o){try{return o?a(n(s)[0],s[1]):a(s)}catch(l){var c=i.return;throw c!==void 0&&n(c.call(i)),l}}},\"./node_modules/core-js/internals/check-correctness-of-iteration.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),i=n(\"iterator\"),a=!1;try{var s=0,o={next:function(){return{done:!!s++}},return:function(){a=!0}};o[i]=function(){return this},Array.from(o,function(){throw 2})}catch(c){}e.exports=function(c,l){if(!l&&!a)return!1;var u=!1;try{var f={};f[i]=function(){return{next:function(){return{done:u=!0}}}},c(f)}catch(d){}return u}},\"./node_modules/core-js/internals/classof-raw.js\":function(e,t){var r={}.toString;e.exports=function(n){return r.call(n).slice(8,-1)}},\"./node_modules/core-js/internals/classof.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/classof-raw.js\"),i=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),a=i(\"toStringTag\"),s=n(function(){return arguments}())==\"Arguments\",o=function(c,l){try{return c[l]}catch(u){}};e.exports=function(c){var l,u,f;return c===void 0?\"Undefined\":c===null?\"Null\":typeof(u=o(l=Object(c),a))==\"string\"?u:s?n(l):(f=n(l))==\"Object\"&&typeof l.callee==\"function\"?\"Arguments\":f}},\"./node_modules/core-js/internals/copy-constructor-properties.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/has.js\"),i=r(\"./node_modules/core-js/internals/own-keys.js\"),a=r(\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\"),s=r(\"./node_modules/core-js/internals/object-define-property.js\");e.exports=function(o,c){for(var l=i(c),u=s.f,f=a.f,d=0;d<l.length;d++){var h=l[d];n(o,h)||u(o,h,f(c,h))}}},\"./node_modules/core-js/internals/correct-prototype-getter.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\");e.exports=!n(function(){function i(){}return i.prototype.constructor=null,Object.getPrototypeOf(new i)!==i.prototype})},\"./node_modules/core-js/internals/create-iterator-constructor.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/iterators-core.js\").IteratorPrototype,i=r(\"./node_modules/core-js/internals/object-create.js\"),a=r(\"./node_modules/core-js/internals/create-property-descriptor.js\"),s=r(\"./node_modules/core-js/internals/set-to-string-tag.js\"),o=r(\"./node_modules/core-js/internals/iterators.js\"),c=function(){return this};e.exports=function(l,u,f){var d=u+\" Iterator\";return l.prototype=i(n,{next:a(1,f)}),s(l,d,!1,!0),o[d]=c,l}},\"./node_modules/core-js/internals/create-property-descriptor.js\":function(e,t){e.exports=function(r,n){return{enumerable:!(r&1),configurable:!(r&2),writable:!(r&4),value:n}}},\"./node_modules/core-js/internals/create-property.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/to-primitive.js\"),i=r(\"./node_modules/core-js/internals/object-define-property.js\"),a=r(\"./node_modules/core-js/internals/create-property-descriptor.js\");e.exports=function(s,o,c){var l=n(o);l in s?i.f(s,l,a(0,c)):s[l]=c}},\"./node_modules/core-js/internals/define-iterator.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/export.js\"),i=r(\"./node_modules/core-js/internals/create-iterator-constructor.js\"),a=r(\"./node_modules/core-js/internals/object-get-prototype-of.js\"),s=r(\"./node_modules/core-js/internals/object-set-prototype-of.js\"),o=r(\"./node_modules/core-js/internals/set-to-string-tag.js\"),c=r(\"./node_modules/core-js/internals/hide.js\"),l=r(\"./node_modules/core-js/internals/redefine.js\"),u=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),f=r(\"./node_modules/core-js/internals/is-pure.js\"),d=r(\"./node_modules/core-js/internals/iterators.js\"),h=r(\"./node_modules/core-js/internals/iterators-core.js\"),p=h.IteratorPrototype,m=h.BUGGY_SAFARI_ITERATORS,v=u(\"iterator\"),y=\"keys\",b=\"values\",x=\"entries\",E=function(){return this};e.exports=function(_,k,w,A,S,T,P){i(w,k,A);var O=function(G){if(G===S&&ee)return ee;if(!m&&G in Q)return Q[G];switch(G){case y:return function(){return new w(this,G)};case b:return function(){return new w(this,G)};case x:return function(){return new w(this,G)}}return function(){return new w(this)}},j=k+\" Iterator\",D=!1,Q=_.prototype,de=Q[v]||Q[\"@@iterator\"]||S&&Q[S],ee=!m&&de||O(S),J=k==\"Array\"&&Q.entries||de,Pe,me,F;if(J&&(Pe=a(J.call(new _)),p!==Object.prototype&&Pe.next&&(!f&&a(Pe)!==p&&(s?s(Pe,p):typeof Pe[v]!=\"function\"&&c(Pe,v,E)),o(Pe,j,!0,!0),f&&(d[j]=E))),S==b&&de&&de.name!==b&&(D=!0,ee=function(){return de.call(this)}),(!f||P)&&Q[v]!==ee&&c(Q,v,ee),d[k]=ee,S)if(me={values:O(b),keys:T?ee:O(y),entries:O(x)},P)for(F in me)(m||D||!(F in Q))&&l(Q,F,me[F]);else n({target:k,proto:!0,forced:m||D},me);return me}},\"./node_modules/core-js/internals/descriptors.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\");e.exports=!n(function(){return Object.defineProperty({},\"a\",{get:function(){return 7}}).a!=7})},\"./node_modules/core-js/internals/document-create-element.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/is-object.js\"),a=n.document,s=i(a)&&i(a.createElement);e.exports=function(o){return s?a.createElement(o):{}}},\"./node_modules/core-js/internals/enum-bug-keys.js\":function(e,t){e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},\"./node_modules/core-js/internals/export.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\").f,a=r(\"./node_modules/core-js/internals/hide.js\"),s=r(\"./node_modules/core-js/internals/redefine.js\"),o=r(\"./node_modules/core-js/internals/set-global.js\"),c=r(\"./node_modules/core-js/internals/copy-constructor-properties.js\"),l=r(\"./node_modules/core-js/internals/is-forced.js\");e.exports=function(u,f){var d=u.target,h=u.global,p=u.stat,m,v,y,b,x,E;if(h?v=n:p?v=n[d]||o(d,{}):v=(n[d]||{}).prototype,v)for(y in f){if(x=f[y],u.noTargetGet?(E=i(v,y),b=E&&E.value):b=v[y],m=l(h?y:d+(p?\".\":\"#\")+y,u.forced),!m&&b!==void 0){if(typeof x==typeof b)continue;c(x,b)}(u.sham||b&&b.sham)&&a(x,\"sham\",!0),s(v,y,x,u)}}},\"./node_modules/core-js/internals/fails.js\":function(e,t){e.exports=function(r){try{return!!r()}catch(n){return!0}}},\"./node_modules/core-js/internals/function-to-string.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/shared.js\");e.exports=n(\"native-function-to-string\",Function.toString)},\"./node_modules/core-js/internals/get-iterator-method.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/classof.js\"),i=r(\"./node_modules/core-js/internals/iterators.js\"),a=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),s=a(\"iterator\");e.exports=function(o){if(o!=null)return o[s]||o[\"@@iterator\"]||i[n(o)]}},\"./node_modules/core-js/internals/global.js\":function(e,t,r){(function(n){var i=\"object\",a=function(s){return s&&s.Math==Math&&s};e.exports=a(typeof globalThis==i&&globalThis)||a(typeof window==i&&window)||a(typeof self==i&&self)||a(typeof n==i&&n)||Function(\"return this\")()}).call(this,r(\"./node_modules/webpack/buildin/global.js\"))},\"./node_modules/core-js/internals/has.js\":function(e,t){var r={}.hasOwnProperty;e.exports=function(n,i){return r.call(n,i)}},\"./node_modules/core-js/internals/hidden-keys.js\":function(e,t){e.exports={}},\"./node_modules/core-js/internals/hide.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/object-define-property.js\"),a=r(\"./node_modules/core-js/internals/create-property-descriptor.js\");e.exports=n?function(s,o,c){return i.f(s,o,a(1,c))}:function(s,o,c){return s[o]=c,s}},\"./node_modules/core-js/internals/html.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=n.document;e.exports=i&&i.documentElement},\"./node_modules/core-js/internals/ie8-dom-define.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/fails.js\"),a=r(\"./node_modules/core-js/internals/document-create-element.js\");e.exports=!n&&!i(function(){return Object.defineProperty(a(\"div\"),\"a\",{get:function(){return 7}}).a!=7})},\"./node_modules/core-js/internals/indexed-object.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\"),i=r(\"./node_modules/core-js/internals/classof-raw.js\"),a=\"\".split;e.exports=n(function(){return!Object(\"z\").propertyIsEnumerable(0)})?function(s){return i(s)==\"String\"?a.call(s,\"\"):Object(s)}:Object},\"./node_modules/core-js/internals/internal-state.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/native-weak-map.js\"),i=r(\"./node_modules/core-js/internals/global.js\"),a=r(\"./node_modules/core-js/internals/is-object.js\"),s=r(\"./node_modules/core-js/internals/hide.js\"),o=r(\"./node_modules/core-js/internals/has.js\"),c=r(\"./node_modules/core-js/internals/shared-key.js\"),l=r(\"./node_modules/core-js/internals/hidden-keys.js\"),u=i.WeakMap,f,d,h,p=function(_){return h(_)?d(_):f(_,{})},m=function(_){return function(k){var w;if(!a(k)||(w=d(k)).type!==_)throw TypeError(\"Incompatible receiver, \"+_+\" required\");return w}};if(n){var v=new u,y=v.get,b=v.has,x=v.set;f=function(_,k){return x.call(v,_,k),k},d=function(_){return y.call(v,_)||{}},h=function(_){return b.call(v,_)}}else{var E=c(\"state\");l[E]=!0,f=function(_,k){return s(_,E,k),k},d=function(_){return o(_,E)?_[E]:{}},h=function(_){return o(_,E)}}e.exports={set:f,get:d,has:h,enforce:p,getterFor:m}},\"./node_modules/core-js/internals/is-array-iterator-method.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),i=r(\"./node_modules/core-js/internals/iterators.js\"),a=n(\"iterator\"),s=Array.prototype;e.exports=function(o){return o!==void 0&&(i.Array===o||s[a]===o)}},\"./node_modules/core-js/internals/is-forced.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\"),i=/#|\\.prototype\\./,a=function(u,f){var d=o[s(u)];return d==l?!0:d==c?!1:typeof f==\"function\"?n(f):!!f},s=a.normalize=function(u){return String(u).replace(i,\".\").toLowerCase()},o=a.data={},c=a.NATIVE=\"N\",l=a.POLYFILL=\"P\";e.exports=a},\"./node_modules/core-js/internals/is-object.js\":function(e,t){e.exports=function(r){return typeof r==\"object\"?r!==null:typeof r==\"function\"}},\"./node_modules/core-js/internals/is-pure.js\":function(e,t){e.exports=!1},\"./node_modules/core-js/internals/iterators-core.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/object-get-prototype-of.js\"),i=r(\"./node_modules/core-js/internals/hide.js\"),a=r(\"./node_modules/core-js/internals/has.js\"),s=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),o=r(\"./node_modules/core-js/internals/is-pure.js\"),c=s(\"iterator\"),l=!1,u=function(){return this},f,d,h;[].keys&&(h=[].keys(),\"next\"in h?(d=n(n(h)),d!==Object.prototype&&(f=d)):l=!0),f==null&&(f={}),!o&&!a(f,c)&&i(f,c,u),e.exports={IteratorPrototype:f,BUGGY_SAFARI_ITERATORS:l}},\"./node_modules/core-js/internals/iterators.js\":function(e,t){e.exports={}},\"./node_modules/core-js/internals/native-symbol.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/fails.js\");e.exports=!!Object.getOwnPropertySymbols&&!n(function(){return!String(Symbol())})},\"./node_modules/core-js/internals/native-weak-map.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/function-to-string.js\"),a=n.WeakMap;e.exports=typeof a==\"function\"&&/native code/.test(i.call(a))},\"./node_modules/core-js/internals/object-create.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/an-object.js\"),i=r(\"./node_modules/core-js/internals/object-define-properties.js\"),a=r(\"./node_modules/core-js/internals/enum-bug-keys.js\"),s=r(\"./node_modules/core-js/internals/hidden-keys.js\"),o=r(\"./node_modules/core-js/internals/html.js\"),c=r(\"./node_modules/core-js/internals/document-create-element.js\"),l=r(\"./node_modules/core-js/internals/shared-key.js\"),u=l(\"IE_PROTO\"),f=\"prototype\",d=function(){},h=function(){var p=c(\"iframe\"),m=a.length,v=\"<\",y=\"script\",b=\">\",x=\"java\"+y+\":\",E;for(p.style.display=\"none\",o.appendChild(p),p.src=String(x),E=p.contentWindow.document,E.open(),E.write(v+y+b+\"document.F=Object\"+v+\"/\"+y+b),E.close(),h=E.F;m--;)delete h[f][a[m]];return h()};e.exports=Object.create||function(m,v){var y;return m!==null?(d[f]=n(m),y=new d,d[f]=null,y[u]=m):y=h(),v===void 0?y:i(y,v)},s[u]=!0},\"./node_modules/core-js/internals/object-define-properties.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/object-define-property.js\"),a=r(\"./node_modules/core-js/internals/an-object.js\"),s=r(\"./node_modules/core-js/internals/object-keys.js\");e.exports=n?Object.defineProperties:function(c,l){a(c);for(var u=s(l),f=u.length,d=0,h;f>d;)i.f(c,h=u[d++],l[h]);return c}},\"./node_modules/core-js/internals/object-define-property.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/ie8-dom-define.js\"),a=r(\"./node_modules/core-js/internals/an-object.js\"),s=r(\"./node_modules/core-js/internals/to-primitive.js\"),o=Object.defineProperty;t.f=n?o:function(l,u,f){if(a(l),u=s(u,!0),a(f),i)try{return o(l,u,f)}catch(d){}if(\"get\"in f||\"set\"in f)throw TypeError(\"Accessors not supported\");return\"value\"in f&&(l[u]=f.value),l}},\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/descriptors.js\"),i=r(\"./node_modules/core-js/internals/object-property-is-enumerable.js\"),a=r(\"./node_modules/core-js/internals/create-property-descriptor.js\"),s=r(\"./node_modules/core-js/internals/to-indexed-object.js\"),o=r(\"./node_modules/core-js/internals/to-primitive.js\"),c=r(\"./node_modules/core-js/internals/has.js\"),l=r(\"./node_modules/core-js/internals/ie8-dom-define.js\"),u=Object.getOwnPropertyDescriptor;t.f=n?u:function(d,h){if(d=s(d),h=o(h,!0),l)try{return u(d,h)}catch(p){}if(c(d,h))return a(!i.f.call(d,h),d[h])}},\"./node_modules/core-js/internals/object-get-own-property-names.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/object-keys-internal.js\"),i=r(\"./node_modules/core-js/internals/enum-bug-keys.js\"),a=i.concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(o){return n(o,a)}},\"./node_modules/core-js/internals/object-get-own-property-symbols.js\":function(e,t){t.f=Object.getOwnPropertySymbols},\"./node_modules/core-js/internals/object-get-prototype-of.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/has.js\"),i=r(\"./node_modules/core-js/internals/to-object.js\"),a=r(\"./node_modules/core-js/internals/shared-key.js\"),s=r(\"./node_modules/core-js/internals/correct-prototype-getter.js\"),o=a(\"IE_PROTO\"),c=Object.prototype;e.exports=s?Object.getPrototypeOf:function(l){return l=i(l),n(l,o)?l[o]:typeof l.constructor==\"function\"&&l instanceof l.constructor?l.constructor.prototype:l instanceof Object?c:null}},\"./node_modules/core-js/internals/object-keys-internal.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/has.js\"),i=r(\"./node_modules/core-js/internals/to-indexed-object.js\"),a=r(\"./node_modules/core-js/internals/array-includes.js\"),s=r(\"./node_modules/core-js/internals/hidden-keys.js\"),o=a(!1);e.exports=function(c,l){var u=i(c),f=0,d=[],h;for(h in u)!n(s,h)&&n(u,h)&&d.push(h);for(;l.length>f;)n(u,h=l[f++])&&(~o(d,h)||d.push(h));return d}},\"./node_modules/core-js/internals/object-keys.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/object-keys-internal.js\"),i=r(\"./node_modules/core-js/internals/enum-bug-keys.js\");e.exports=Object.keys||function(s){return n(s,i)}},\"./node_modules/core-js/internals/object-property-is-enumerable.js\":function(e,t,r){\"use strict\";var n={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,a=i&&!n.call({1:2},1);t.f=a?function(o){var c=i(this,o);return!!c&&c.enumerable}:n},\"./node_modules/core-js/internals/object-set-prototype-of.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/validate-set-prototype-of-arguments.js\");e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var i=!1,a={},s;try{s=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set,s.call(a,[]),i=a instanceof Array}catch(o){}return function(c,l){return n(c,l),i?s.call(c,l):c.__proto__=l,c}}():void 0)},\"./node_modules/core-js/internals/own-keys.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/object-get-own-property-names.js\"),a=r(\"./node_modules/core-js/internals/object-get-own-property-symbols.js\"),s=r(\"./node_modules/core-js/internals/an-object.js\"),o=n.Reflect;e.exports=o&&o.ownKeys||function(l){var u=i.f(s(l)),f=a.f;return f?u.concat(f(l)):u}},\"./node_modules/core-js/internals/path.js\":function(e,t,r){e.exports=r(\"./node_modules/core-js/internals/global.js\")},\"./node_modules/core-js/internals/redefine.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/shared.js\"),a=r(\"./node_modules/core-js/internals/hide.js\"),s=r(\"./node_modules/core-js/internals/has.js\"),o=r(\"./node_modules/core-js/internals/set-global.js\"),c=r(\"./node_modules/core-js/internals/function-to-string.js\"),l=r(\"./node_modules/core-js/internals/internal-state.js\"),u=l.get,f=l.enforce,d=String(c).split(\"toString\");i(\"inspectSource\",function(h){return c.call(h)}),(e.exports=function(h,p,m,v){var y=v?!!v.unsafe:!1,b=v?!!v.enumerable:!1,x=v?!!v.noTargetGet:!1;if(typeof m==\"function\"&&(typeof p==\"string\"&&!s(m,\"name\")&&a(m,\"name\",p),f(m).source=d.join(typeof p==\"string\"?p:\"\")),h===n){b?h[p]=m:o(p,m);return}else y?!x&&h[p]&&(b=!0):delete h[p];b?h[p]=m:a(h,p,m)})(Function.prototype,\"toString\",function(){return typeof this==\"function\"&&u(this).source||c.call(this)})},\"./node_modules/core-js/internals/require-object-coercible.js\":function(e,t){e.exports=function(r){if(r==null)throw TypeError(\"Can't call method on \"+r);return r}},\"./node_modules/core-js/internals/set-global.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/hide.js\");e.exports=function(a,s){try{i(n,a,s)}catch(o){n[a]=s}return s}},\"./node_modules/core-js/internals/set-to-string-tag.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/object-define-property.js\").f,i=r(\"./node_modules/core-js/internals/has.js\"),a=r(\"./node_modules/core-js/internals/well-known-symbol.js\"),s=a(\"toStringTag\");e.exports=function(o,c,l){o&&!i(o=l?o:o.prototype,s)&&n(o,s,{configurable:!0,value:c})}},\"./node_modules/core-js/internals/shared-key.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/shared.js\"),i=r(\"./node_modules/core-js/internals/uid.js\"),a=n(\"keys\");e.exports=function(s){return a[s]||(a[s]=i(s))}},\"./node_modules/core-js/internals/shared.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/set-global.js\"),a=r(\"./node_modules/core-js/internals/is-pure.js\"),s=\"__core-js_shared__\",o=n[s]||i(s,{});(e.exports=function(c,l){return o[c]||(o[c]=l!==void 0?l:{})})(\"versions\",[]).push({version:\"3.1.3\",mode:a?\"pure\":\"global\",copyright:\"\\xA9 2019 Denis Pushkarev (zloirock.ru)\"})},\"./node_modules/core-js/internals/string-at.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/to-integer.js\"),i=r(\"./node_modules/core-js/internals/require-object-coercible.js\");e.exports=function(a,s,o){var c=String(i(a)),l=n(s),u=c.length,f,d;return l<0||l>=u?o?\"\":void 0:(f=c.charCodeAt(l),f<55296||f>56319||l+1===u||(d=c.charCodeAt(l+1))<56320||d>57343?o?c.charAt(l):f:o?c.slice(l,l+2):(f-55296<<10)+(d-56320)+65536)}},\"./node_modules/core-js/internals/to-absolute-index.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/to-integer.js\"),i=Math.max,a=Math.min;e.exports=function(s,o){var c=n(s);return c<0?i(c+o,0):a(c,o)}},\"./node_modules/core-js/internals/to-indexed-object.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/indexed-object.js\"),i=r(\"./node_modules/core-js/internals/require-object-coercible.js\");e.exports=function(a){return n(i(a))}},\"./node_modules/core-js/internals/to-integer.js\":function(e,t){var r=Math.ceil,n=Math.floor;e.exports=function(i){return isNaN(i=+i)?0:(i>0?n:r)(i)}},\"./node_modules/core-js/internals/to-length.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/to-integer.js\"),i=Math.min;e.exports=function(a){return a>0?i(n(a),9007199254740991):0}},\"./node_modules/core-js/internals/to-object.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/require-object-coercible.js\");e.exports=function(i){return Object(n(i))}},\"./node_modules/core-js/internals/to-primitive.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/is-object.js\");e.exports=function(i,a){if(!n(i))return i;var s,o;if(a&&typeof(s=i.toString)==\"function\"&&!n(o=s.call(i))||typeof(s=i.valueOf)==\"function\"&&!n(o=s.call(i))||!a&&typeof(s=i.toString)==\"function\"&&!n(o=s.call(i)))return o;throw TypeError(\"Can't convert object to primitive value\")}},\"./node_modules/core-js/internals/uid.js\":function(e,t){var r=0,n=Math.random();e.exports=function(i){return\"Symbol(\".concat(i===void 0?\"\":i,\")_\",(++r+n).toString(36))}},\"./node_modules/core-js/internals/validate-set-prototype-of-arguments.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/is-object.js\"),i=r(\"./node_modules/core-js/internals/an-object.js\");e.exports=function(a,s){if(i(a),!n(s)&&s!==null)throw TypeError(\"Can't set \"+String(s)+\" as a prototype\")}},\"./node_modules/core-js/internals/well-known-symbol.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/global.js\"),i=r(\"./node_modules/core-js/internals/shared.js\"),a=r(\"./node_modules/core-js/internals/uid.js\"),s=r(\"./node_modules/core-js/internals/native-symbol.js\"),o=n.Symbol,c=i(\"wks\");e.exports=function(l){return c[l]||(c[l]=s&&o[l]||(s?o:a)(\"Symbol.\"+l))}},\"./node_modules/core-js/modules/es.array.from.js\":function(e,t,r){var n=r(\"./node_modules/core-js/internals/export.js\"),i=r(\"./node_modules/core-js/internals/array-from.js\"),a=r(\"./node_modules/core-js/internals/check-correctness-of-iteration.js\"),s=!a(function(o){Array.from(o)});n({target:\"Array\",stat:!0,forced:s},{from:i})},\"./node_modules/core-js/modules/es.string.iterator.js\":function(e,t,r){\"use strict\";var n=r(\"./node_modules/core-js/internals/string-at.js\"),i=r(\"./node_modules/core-js/internals/internal-state.js\"),a=r(\"./node_modules/core-js/internals/define-iterator.js\"),s=\"String Iterator\",o=i.set,c=i.getterFor(s);a(String,\"String\",function(l){o(this,{type:s,string:String(l),index:0})},function(){var u=c(this),f=u.string,d=u.index,h;return d>=f.length?{value:void 0,done:!0}:(h=n(f,d,!0),u.index+=h.length,{value:h,done:!1})})},\"./node_modules/webpack/buildin/global.js\":function(e,t){var r;r=function(){return this}();try{r=r||Function(\"return this\")()||(0,eval)(\"this\")}catch(n){typeof window==\"object\"&&(r=window)}e.exports=r},\"./src/default-attrs.json\":function(e){e.exports={xmlns:\"http://www.w3.org/2000/svg\",width:24,height:24,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",\"stroke-width\":2,\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},\"./src/icon.js\":function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=Object.assign||function(h){for(var p=1;p<arguments.length;p++){var m=arguments[p];for(var v in m)Object.prototype.hasOwnProperty.call(m,v)&&(h[v]=m[v])}return h},i=function(){function h(p,m){for(var v=0;v<m.length;v++){var y=m[v];y.enumerable=y.enumerable||!1,y.configurable=!0,\"value\"in y&&(y.writable=!0),Object.defineProperty(p,y.key,y)}}return function(p,m,v){return m&&h(p.prototype,m),v&&h(p,v),p}}(),a=r(\"./node_modules/classnames/dedupe.js\"),s=l(a),o=r(\"./src/default-attrs.json\"),c=l(o);function l(h){return h&&h.__esModule?h:{default:h}}function u(h,p){if(!(h instanceof p))throw new TypeError(\"Cannot call a class as a function\")}var f=function(){function h(p,m){var v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];u(this,h),this.name=p,this.contents=m,this.tags=v,this.attrs=n({},c.default,{class:\"feather feather-\"+p})}return i(h,[{key:\"toSvg\",value:function(){var m=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},v=n({},this.attrs,m,{class:(0,s.default)(this.attrs.class,m.class)});return\"<svg \"+d(v)+\">\"+this.contents+\"</svg>\"}},{key:\"toString\",value:function(){return this.contents}}]),h}();function d(h){return Object.keys(h).map(function(p){return p+'=\"'+h[p]+'\"'}).join(\" \")}t.default=f},\"./src/icons.js\":function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=r(\"./src/icon.js\"),i=l(n),a=r(\"./dist/icons.json\"),s=l(a),o=r(\"./src/tags.json\"),c=l(o);function l(u){return u&&u.__esModule?u:{default:u}}t.default=Object.keys(s.default).map(function(u){return new i.default(u,s.default[u],c.default[u])}).reduce(function(u,f){return u[f.name]=f,u},{})},\"./src/index.js\":function(e,t,r){\"use strict\";var n=r(\"./src/icons.js\"),i=l(n),a=r(\"./src/to-svg.js\"),s=l(a),o=r(\"./src/replace.js\"),c=l(o);function l(u){return u&&u.__esModule?u:{default:u}}e.exports={icons:i.default,toSvg:s.default,replace:c.default}},\"./src/replace.js\":function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=Object.assign||function(d){for(var h=1;h<arguments.length;h++){var p=arguments[h];for(var m in p)Object.prototype.hasOwnProperty.call(p,m)&&(d[m]=p[m])}return d},i=r(\"./node_modules/classnames/dedupe.js\"),a=c(i),s=r(\"./src/icons.js\"),o=c(s);function c(d){return d&&d.__esModule?d:{default:d}}function l(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(typeof document==\"undefined\")throw new Error(\"`feather.replace()` only works in a browser environment.\");var h=document.querySelectorAll(\"[data-feather]\");Array.from(h).forEach(function(p){return u(p,d)})}function u(d){var h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},p=f(d),m=p[\"data-feather\"];if(delete p[\"data-feather\"],o.default[m]===void 0){console.warn(\"feather: '\"+m+\"' is not a valid icon\");return}var v=o.default[m].toSvg(n({},h,p,{class:(0,a.default)(h.class,p.class)})),y=new DOMParser().parseFromString(v,\"image/svg+xml\"),b=y.querySelector(\"svg\");d.parentNode.replaceChild(b,d)}function f(d){return Array.from(d.attributes).reduce(function(h,p){return h[p.name]=p.value,h},{})}t.default=l},\"./src/tags.json\":function(e){e.exports={activity:[\"pulse\",\"health\",\"action\",\"motion\"],airplay:[\"stream\",\"cast\",\"mirroring\"],\"alert-circle\":[\"warning\",\"alert\",\"danger\"],\"alert-octagon\":[\"warning\",\"alert\",\"danger\"],\"alert-triangle\":[\"warning\",\"alert\",\"danger\"],\"align-center\":[\"text alignment\",\"center\"],\"align-justify\":[\"text alignment\",\"justified\"],\"align-left\":[\"text alignment\",\"left\"],\"align-right\":[\"text alignment\",\"right\"],anchor:[],archive:[\"index\",\"box\"],\"at-sign\":[\"mention\",\"at\",\"email\",\"message\"],award:[\"achievement\",\"badge\"],aperture:[\"camera\",\"photo\"],\"bar-chart\":[\"statistics\",\"diagram\",\"graph\"],\"bar-chart-2\":[\"statistics\",\"diagram\",\"graph\"],battery:[\"power\",\"electricity\"],\"battery-charging\":[\"power\",\"electricity\"],bell:[\"alarm\",\"notification\",\"sound\"],\"bell-off\":[\"alarm\",\"notification\",\"silent\"],bluetooth:[\"wireless\"],\"book-open\":[\"read\",\"library\"],book:[\"read\",\"dictionary\",\"booklet\",\"magazine\",\"library\"],bookmark:[\"read\",\"clip\",\"marker\",\"tag\"],box:[\"cube\"],briefcase:[\"work\",\"bag\",\"baggage\",\"folder\"],calendar:[\"date\"],camera:[\"photo\"],cast:[\"chromecast\",\"airplay\"],\"chevron-down\":[\"expand\"],\"chevron-up\":[\"collapse\"],circle:[\"off\",\"zero\",\"record\"],clipboard:[\"copy\"],clock:[\"time\",\"watch\",\"alarm\"],\"cloud-drizzle\":[\"weather\",\"shower\"],\"cloud-lightning\":[\"weather\",\"bolt\"],\"cloud-rain\":[\"weather\"],\"cloud-snow\":[\"weather\",\"blizzard\"],cloud:[\"weather\"],codepen:[\"logo\"],codesandbox:[\"logo\"],code:[\"source\",\"programming\"],coffee:[\"drink\",\"cup\",\"mug\",\"tea\",\"cafe\",\"hot\",\"beverage\"],columns:[\"layout\"],command:[\"keyboard\",\"cmd\",\"terminal\",\"prompt\"],compass:[\"navigation\",\"safari\",\"travel\",\"direction\"],copy:[\"clone\",\"duplicate\"],\"corner-down-left\":[\"arrow\",\"return\"],\"corner-down-right\":[\"arrow\"],\"corner-left-down\":[\"arrow\"],\"corner-left-up\":[\"arrow\"],\"corner-right-down\":[\"arrow\"],\"corner-right-up\":[\"arrow\"],\"corner-up-left\":[\"arrow\"],\"corner-up-right\":[\"arrow\"],cpu:[\"processor\",\"technology\"],\"credit-card\":[\"purchase\",\"payment\",\"cc\"],crop:[\"photo\",\"image\"],crosshair:[\"aim\",\"target\"],database:[\"storage\",\"memory\"],delete:[\"remove\"],disc:[\"album\",\"cd\",\"dvd\",\"music\"],\"dollar-sign\":[\"currency\",\"money\",\"payment\"],droplet:[\"water\"],edit:[\"pencil\",\"change\"],\"edit-2\":[\"pencil\",\"change\"],\"edit-3\":[\"pencil\",\"change\"],eye:[\"view\",\"watch\"],\"eye-off\":[\"view\",\"watch\",\"hide\",\"hidden\"],\"external-link\":[\"outbound\"],facebook:[\"logo\",\"social\"],\"fast-forward\":[\"music\"],figma:[\"logo\",\"design\",\"tool\"],\"file-minus\":[\"delete\",\"remove\",\"erase\"],\"file-plus\":[\"add\",\"create\",\"new\"],\"file-text\":[\"data\",\"txt\",\"pdf\"],film:[\"movie\",\"video\"],filter:[\"funnel\",\"hopper\"],flag:[\"report\"],\"folder-minus\":[\"directory\"],\"folder-plus\":[\"directory\"],folder:[\"directory\"],framer:[\"logo\",\"design\",\"tool\"],frown:[\"emoji\",\"face\",\"bad\",\"sad\",\"emotion\"],gift:[\"present\",\"box\",\"birthday\",\"party\"],\"git-branch\":[\"code\",\"version control\"],\"git-commit\":[\"code\",\"version control\"],\"git-merge\":[\"code\",\"version control\"],\"git-pull-request\":[\"code\",\"version control\"],github:[\"logo\",\"version control\"],gitlab:[\"logo\",\"version control\"],globe:[\"world\",\"browser\",\"language\",\"translate\"],\"hard-drive\":[\"computer\",\"server\",\"memory\",\"data\"],hash:[\"hashtag\",\"number\",\"pound\"],headphones:[\"music\",\"audio\",\"sound\"],heart:[\"like\",\"love\",\"emotion\"],\"help-circle\":[\"question mark\"],hexagon:[\"shape\",\"node.js\",\"logo\"],home:[\"house\",\"living\"],image:[\"picture\"],inbox:[\"email\"],instagram:[\"logo\",\"camera\"],key:[\"password\",\"login\",\"authentication\",\"secure\"],layers:[\"stack\"],layout:[\"window\",\"webpage\"],\"life-buoy\":[\"help\",\"life ring\",\"support\"],link:[\"chain\",\"url\"],\"link-2\":[\"chain\",\"url\"],linkedin:[\"logo\",\"social media\"],list:[\"options\"],lock:[\"security\",\"password\",\"secure\"],\"log-in\":[\"sign in\",\"arrow\",\"enter\"],\"log-out\":[\"sign out\",\"arrow\",\"exit\"],mail:[\"email\",\"message\"],\"map-pin\":[\"location\",\"navigation\",\"travel\",\"marker\"],map:[\"location\",\"navigation\",\"travel\"],maximize:[\"fullscreen\"],\"maximize-2\":[\"fullscreen\",\"arrows\",\"expand\"],meh:[\"emoji\",\"face\",\"neutral\",\"emotion\"],menu:[\"bars\",\"navigation\",\"hamburger\"],\"message-circle\":[\"comment\",\"chat\"],\"message-square\":[\"comment\",\"chat\"],\"mic-off\":[\"record\",\"sound\",\"mute\"],mic:[\"record\",\"sound\",\"listen\"],minimize:[\"exit fullscreen\",\"close\"],\"minimize-2\":[\"exit fullscreen\",\"arrows\",\"close\"],minus:[\"subtract\"],monitor:[\"tv\",\"screen\",\"display\"],moon:[\"dark\",\"night\"],\"more-horizontal\":[\"ellipsis\"],\"more-vertical\":[\"ellipsis\"],\"mouse-pointer\":[\"arrow\",\"cursor\"],move:[\"arrows\"],music:[\"note\"],navigation:[\"location\",\"travel\"],\"navigation-2\":[\"location\",\"travel\"],octagon:[\"stop\"],package:[\"box\",\"container\"],paperclip:[\"attachment\"],pause:[\"music\",\"stop\"],\"pause-circle\":[\"music\",\"audio\",\"stop\"],\"pen-tool\":[\"vector\",\"drawing\"],percent:[\"discount\"],\"phone-call\":[\"ring\"],\"phone-forwarded\":[\"call\"],\"phone-incoming\":[\"call\"],\"phone-missed\":[\"call\"],\"phone-off\":[\"call\",\"mute\"],\"phone-outgoing\":[\"call\"],phone:[\"call\"],play:[\"music\",\"start\"],\"pie-chart\":[\"statistics\",\"diagram\"],\"play-circle\":[\"music\",\"start\"],plus:[\"add\",\"new\"],\"plus-circle\":[\"add\",\"new\"],\"plus-square\":[\"add\",\"new\"],pocket:[\"logo\",\"save\"],power:[\"on\",\"off\"],printer:[\"fax\",\"office\",\"device\"],radio:[\"signal\"],\"refresh-cw\":[\"synchronise\",\"arrows\"],\"refresh-ccw\":[\"arrows\"],repeat:[\"loop\",\"arrows\"],rewind:[\"music\"],\"rotate-ccw\":[\"arrow\"],\"rotate-cw\":[\"arrow\"],rss:[\"feed\",\"subscribe\"],save:[\"floppy disk\"],scissors:[\"cut\"],search:[\"find\",\"magnifier\",\"magnifying glass\"],send:[\"message\",\"mail\",\"email\",\"paper airplane\",\"paper aeroplane\"],settings:[\"cog\",\"edit\",\"gear\",\"preferences\"],\"share-2\":[\"network\",\"connections\"],shield:[\"security\",\"secure\"],\"shield-off\":[\"security\",\"insecure\"],\"shopping-bag\":[\"ecommerce\",\"cart\",\"purchase\",\"store\"],\"shopping-cart\":[\"ecommerce\",\"cart\",\"purchase\",\"store\"],shuffle:[\"music\"],\"skip-back\":[\"music\"],\"skip-forward\":[\"music\"],slack:[\"logo\"],slash:[\"ban\",\"no\"],sliders:[\"settings\",\"controls\"],smartphone:[\"cellphone\",\"device\"],smile:[\"emoji\",\"face\",\"happy\",\"good\",\"emotion\"],speaker:[\"audio\",\"music\"],star:[\"bookmark\",\"favorite\",\"like\"],\"stop-circle\":[\"media\",\"music\"],sun:[\"brightness\",\"weather\",\"light\"],sunrise:[\"weather\",\"time\",\"morning\",\"day\"],sunset:[\"weather\",\"time\",\"evening\",\"night\"],tablet:[\"device\"],tag:[\"label\"],target:[\"logo\",\"bullseye\"],terminal:[\"code\",\"command line\",\"prompt\"],thermometer:[\"temperature\",\"celsius\",\"fahrenheit\",\"weather\"],\"thumbs-down\":[\"dislike\",\"bad\",\"emotion\"],\"thumbs-up\":[\"like\",\"good\",\"emotion\"],\"toggle-left\":[\"on\",\"off\",\"switch\"],\"toggle-right\":[\"on\",\"off\",\"switch\"],tool:[\"settings\",\"spanner\"],trash:[\"garbage\",\"delete\",\"remove\",\"bin\"],\"trash-2\":[\"garbage\",\"delete\",\"remove\",\"bin\"],triangle:[\"delta\"],truck:[\"delivery\",\"van\",\"shipping\",\"transport\",\"lorry\"],tv:[\"television\",\"stream\"],twitch:[\"logo\"],twitter:[\"logo\",\"social\"],type:[\"text\"],umbrella:[\"rain\",\"weather\"],unlock:[\"security\"],\"user-check\":[\"followed\",\"subscribed\"],\"user-minus\":[\"delete\",\"remove\",\"unfollow\",\"unsubscribe\"],\"user-plus\":[\"new\",\"add\",\"create\",\"follow\",\"subscribe\"],\"user-x\":[\"delete\",\"remove\",\"unfollow\",\"unsubscribe\",\"unavailable\"],user:[\"person\",\"account\"],users:[\"group\"],\"video-off\":[\"camera\",\"movie\",\"film\"],video:[\"camera\",\"movie\",\"film\"],voicemail:[\"phone\"],volume:[\"music\",\"sound\",\"mute\"],\"volume-1\":[\"music\",\"sound\"],\"volume-2\":[\"music\",\"sound\"],\"volume-x\":[\"music\",\"sound\",\"mute\"],watch:[\"clock\",\"time\"],\"wifi-off\":[\"disabled\"],wifi:[\"connection\",\"signal\",\"wireless\"],wind:[\"weather\",\"air\"],\"x-circle\":[\"cancel\",\"close\",\"delete\",\"remove\",\"times\",\"clear\"],\"x-octagon\":[\"delete\",\"stop\",\"alert\",\"warning\",\"times\",\"clear\"],\"x-square\":[\"cancel\",\"close\",\"delete\",\"remove\",\"times\",\"clear\"],x:[\"cancel\",\"close\",\"delete\",\"remove\",\"times\",\"clear\"],youtube:[\"logo\",\"video\",\"play\"],\"zap-off\":[\"flash\",\"camera\",\"lightning\"],zap:[\"flash\",\"camera\",\"lightning\"],\"zoom-in\":[\"magnifying glass\"],\"zoom-out\":[\"magnifying glass\"]}},\"./src/to-svg.js\":function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=r(\"./src/icons.js\"),i=a(n);function a(o){return o&&o.__esModule?o:{default:o}}function s(o){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(console.warn(\"feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead.\"),!o)throw new Error(\"The required `key` (icon name) parameter is missing.\");if(!i.default[o])throw new Error(\"No icon matching '\"+o+\"'. See the complete list of icons at https://feathericons.com\");return i.default[o].toSvg(c)}t.default=s},0:function(e,t,r){r(\"./node_modules/core-js/es/array/from.js\"),e.exports=r(\"./src/index.js\")}})})});var jH={};XP(jH,{default:()=>Jd});module.exports=ZP(jH);g();g();var Jo=ze(d1(),1),Sp=ze(_1(),1),Jw=ze(S1(),1),du=ze(uw(),1),tu=ze(hw(),1),Qw=ze(xw(),1),Jr=ze(Ew(),1),e2=ze(Pw(),1),_e=class e extends Error{constructor(t){super(t),this.caller=\"\"}toJSON(){return{code:this.code,data:this.data,caller:this.caller,message:this.message,stack:this.stack}}fromJSON(t){let r=new e(t.message);return r.code=t.code,r.data=t.data,r.caller=t.caller,r.stack=t.stack,r}get isIsomorphicGitError(){return!0}},Qo=class e extends _e{constructor(t){super(`Modifying the index is not possible because you have unmerged files: ${t.toString}. Fix them up in the work tree, and then use 'git add/rm as appropriate to mark resolution and make a commit.`),this.code=this.name=e.code,this.data={filepaths:t}}};Qo.code=\"UnmergedPathsError\";var le=class e extends _e{constructor(t){super(`An internal error caused this command to fail. Please file a bug report at https://github.com/isomorphic-git/isomorphic-git/issues with this error message: ${t}`),this.code=this.name=e.code,this.data={message:t}}};le.code=\"InternalError\";var cs=class e extends _e{constructor(t){super(`The filepath \"${t}\" contains unsafe character sequences`),this.code=this.name=e.code,this.data={filepath:t}}};cs.code=\"UnsafeFilepathError\";var Ir=class{constructor(t){this.buffer=t,this._start=0}eof(){return this._start>=this.buffer.length}tell(){return this._start}seek(t){this._start=t}slice(t){let r=this.buffer.slice(this._start,this._start+t);return this._start+=t,r}toString(t,r){let n=this.buffer.toString(t,this._start,this._start+r);return this._start+=r,n}write(t,r,n){let i=this.buffer.write(t,this._start,r,n);return this._start+=r,i}copy(t,r,n){let i=t.copy(this.buffer,this._start,r,n);return this._start+=i,i}readUInt8(){let t=this.buffer.readUInt8(this._start);return this._start+=1,t}writeUInt8(t){let r=this.buffer.writeUInt8(t,this._start);return this._start+=1,r}readUInt16BE(){let t=this.buffer.readUInt16BE(this._start);return this._start+=2,t}writeUInt16BE(t){let r=this.buffer.writeUInt16BE(t,this._start);return this._start+=2,r}readUInt32BE(){let t=this.buffer.readUInt32BE(this._start);return this._start+=4,t}writeUInt32BE(t){let r=this.buffer.writeUInt32BE(t,this._start);return this._start+=4,r}};function hu(e,t){return-(e<t)||+(e>t)}function t2(e,t){return hu(e.path,t.path)}function r2(e){let t=e>0?e>>12:0;t!==4&&t!==8&&t!==10&&t!==14&&(t=8);let r=e&511;return r&73?r=493:r=420,t!==8&&(r=0),(t<<12)+r}var _n=2**32;function Rw(e,t,r,n){if(e!==void 0&&t!==void 0)return[e,t];r===void 0&&(r=n.valueOf());let i=Math.floor(r/1e3),a=(r-i*1e3)*1e6;return[i,a]}function us(e){let[t,r]=Rw(e.ctimeSeconds,e.ctimeNanoseconds,e.ctimeMs,e.ctime),[n,i]=Rw(e.mtimeSeconds,e.mtimeNanoseconds,e.mtimeMs,e.mtime);return{ctimeSeconds:t%_n,ctimeNanoseconds:r%_n,mtimeSeconds:n%_n,mtimeNanoseconds:i%_n,dev:e.dev%_n,ino:e.ino%_n,mode:r2(e.mode%_n),uid:e.uid%_n,gid:e.gid%_n,size:e.size>-1?e.size%_n:0}}function J6(e){let t=\"\";for(let r of new Uint8Array(e))r<16&&(t+=\"0\"),t+=r.toString(16);return t}var tp=null;async function Gn(e){return tp===null&&(tp=await eM()),tp?n2(e):Q6(e)}function Q6(e){return new Sp.default().update(e).digest(\"hex\")}async function n2(e){let t=await crypto.subtle.digest(\"SHA-1\",e);return J6(t)}async function eM(){try{if(await n2(new Uint8Array([]))===\"da39a3ee5e6b4b0d3255bfef95601890afd80709\")return!0}catch(e){}return!1}function tM(e){return{assumeValid:!!(e&32768),extended:!!(e&16384),stage:(e&12288)>>12,nameLength:e&4095}}function rM(e){let t=e.flags;return t.extended=!1,t.nameLength=Math.min(Buffer.from(e.path).length,4095),(t.assumeValid?32768:0)+(t.extended?16384:0)+((t.stage&3)<<12)+(t.nameLength&4095)}var fp=class e{constructor(t,r){this._dirty=!1,this._unmergedPaths=r||new Set,this._entries=t||new Map}_addEntry(t){if(t.flags.stage===0)t.stages=[t],this._entries.set(t.path,t),this._unmergedPaths.delete(t.path);else{let r=this._entries.get(t.path);r||(this._entries.set(t.path,t),r=t),r.stages[t.flags.stage]=t,this._unmergedPaths.add(t.path)}}static async from(t){if(Buffer.isBuffer(t))return e.fromBuffer(t);if(t===null)return new e(null);throw new le(\"invalid type passed to GitIndex.from\")}static async fromBuffer(t){if(t.length===0)throw new le(\"Index file is empty (.git/index)\");let r=new e,n=new Ir(t),i=n.toString(\"utf8\",4);if(i!==\"DIRC\")throw new le(`Invalid dircache magic file number: ${i}`);let a=await Gn(t.slice(0,-20)),s=t.slice(-20).toString(\"hex\");if(s!==a)throw new le(`Invalid checksum in GitIndex buffer: expected ${s} but saw ${a}`);let o=n.readUInt32BE();if(o!==2)throw new le(`Unsupported dircache version: ${o}`);let c=n.readUInt32BE(),l=0;for(;!n.eof()&&l<c;){let u={};u.ctimeSeconds=n.readUInt32BE(),u.ctimeNanoseconds=n.readUInt32BE(),u.mtimeSeconds=n.readUInt32BE(),u.mtimeNanoseconds=n.readUInt32BE(),u.dev=n.readUInt32BE(),u.ino=n.readUInt32BE(),u.mode=n.readUInt32BE(),u.uid=n.readUInt32BE(),u.gid=n.readUInt32BE(),u.size=n.readUInt32BE(),u.oid=n.slice(20).toString(\"hex\");let f=n.readUInt16BE();u.flags=tM(f);let d=t.indexOf(0,n.tell()+1)-n.tell();if(d<1)throw new le(`Got a path length of: ${d}`);if(u.path=n.toString(\"utf8\",d),u.path.includes(\"..\\\\\")||u.path.includes(\"../\"))throw new cs(u.path);let h=8-(n.tell()-12)%8;for(h===0&&(h=8);h--;){let p=n.readUInt8();if(p!==0)throw new le(`Expected 1-8 null characters but got '${p}' after ${u.path}`);if(n.eof())throw new le(\"Unexpected end of file\")}u.stages=[],r._addEntry(u),l++}return r}get unmergedPaths(){return[...this._unmergedPaths]}get entries(){return[...this._entries.values()].sort(t2)}get entriesMap(){return this._entries}get entriesFlat(){return[...this.entries].flatMap(t=>t.stages.length>1?t.stages.filter(r=>r):t)}*[Symbol.iterator](){for(let t of this.entries)yield t}insert({filepath:t,stats:r,oid:n,stage:i=0}){r||(r={ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,mode:0,uid:0,gid:0,size:0}),r=us(r);let a=Buffer.from(t),s={ctimeSeconds:r.ctimeSeconds,ctimeNanoseconds:r.ctimeNanoseconds,mtimeSeconds:r.mtimeSeconds,mtimeNanoseconds:r.mtimeNanoseconds,dev:r.dev,ino:r.ino,mode:r.mode||33188,uid:r.uid,gid:r.gid,size:r.size,path:t,oid:n,flags:{assumeValid:!1,extended:!1,stage:i,nameLength:a.length<4095?a.length:4095},stages:[]};this._addEntry(s),this._dirty=!0}delete({filepath:t}){if(this._entries.has(t))this._entries.delete(t);else for(let r of this._entries.keys())r.startsWith(t+\"/\")&&this._entries.delete(r);this._unmergedPaths.has(t)&&this._unmergedPaths.delete(t),this._dirty=!0}clear(){this._entries.clear(),this._dirty=!0}has({filepath:t}){return this._entries.has(t)}render(){return this.entries.map(t=>`${t.mode.toString(8)} ${t.oid}    ${t.path}`).join(`\n`)}static async _entryToBuffer(t){let r=Buffer.from(t.path),n=Math.ceil((62+r.length+1)/8)*8,i=Buffer.alloc(n),a=new Ir(i),s=us(t);return a.writeUInt32BE(s.ctimeSeconds),a.writeUInt32BE(s.ctimeNanoseconds),a.writeUInt32BE(s.mtimeSeconds),a.writeUInt32BE(s.mtimeNanoseconds),a.writeUInt32BE(s.dev),a.writeUInt32BE(s.ino),a.writeUInt32BE(s.mode),a.writeUInt32BE(s.uid),a.writeUInt32BE(s.gid),a.writeUInt32BE(s.size),a.write(t.oid,20,\"hex\"),a.writeUInt16BE(rM(t)),a.write(t.path,r.length,\"utf8\"),i}async toObject(){let t=Buffer.alloc(12),r=new Ir(t);r.write(\"DIRC\",4,\"utf8\"),r.writeUInt32BE(2),r.writeUInt32BE(this.entriesFlat.length);let n=[];for(let o of this.entries)if(n.push(e._entryToBuffer(o)),o.stages.length>1)for(let c of o.stages)c&&c!==o&&n.push(e._entryToBuffer(c));n=await Promise.all(n);let i=Buffer.concat(n),a=Buffer.concat([t,i]),s=await Gn(a);return Buffer.concat([a,Buffer.from(s,\"hex\")])}};function ru(e,t,r=!0,n=!0){let i=us(e),a=us(t);return r&&i.mode!==a.mode||i.mtimeSeconds!==a.mtimeSeconds||i.ctimeSeconds!==a.ctimeSeconds||i.uid!==a.uid||i.gid!==a.gid||n&&i.ino!==a.ino||i.size!==a.size}var rp=null,os=Symbol(\"IndexCache\");function nM(){return{map:new Map,stats:new Map}}async function iM(e,t,r){let n=await e.lstat(t),i=await e.read(t),a=await fp.from(i);r.map.set(t,a),r.stats.set(t,n)}async function aM(e,t,r){let n=r.stats.get(t);if(n===void 0)return!0;let i=await e.lstat(t);return n===null||i===null?!1:ru(n,i)}var mt=class{static async acquire({fs:t,gitdir:r,cache:n,allowUnmerged:i=!0},a){n[os]||(n[os]=nM());let s=`${r}/index`;rp===null&&(rp=new Jo.default({maxPending:1/0}));let o,c=[];return await rp.acquire(s,async()=>{await aM(t,s,n[os])&&await iM(t,s,n[os]);let l=n[os].map.get(s);if(c=l.unmergedPaths,c.length&&!i)throw new Qo(c);if(o=await a(l),l._dirty){let u=await l.toObject();await t.write(s,u),n[os].stats.set(s,await t.lstat(s)),l._dirty=!1}}),o}};function nu(e){let t=Math.max(e.lastIndexOf(\"/\"),e.lastIndexOf(\"\\\\\"));return t>-1&&(e=e.slice(t+1)),e}function fs(e){let t=Math.max(e.lastIndexOf(\"/\"),e.lastIndexOf(\"\\\\\"));return t===-1?\".\":t===0?\"/\":e.slice(0,t)}function i2(e){let t=new Map,r=function(i){if(!t.has(i)){let a={type:\"tree\",fullpath:i,basename:nu(i),metadata:{},children:[]};t.set(i,a),a.parent=r(fs(i)),a.parent&&a.parent!==a&&a.parent.children.push(a)}return t.get(i)},n=function(i,a){if(!t.has(i)){let s={type:\"blob\",fullpath:i,basename:nu(i),metadata:a,parent:r(fs(i)),children:[]};s.parent&&s.parent.children.push(s),t.set(i,s)}return t.get(i)};r(\".\");for(let i of e)n(i.path,i);return t}function sM(e){switch(e){case 16384:return\"tree\";case 33188:return\"blob\";case 33261:return\"blob\";case 40960:return\"blob\";case 57344:return\"commit\"}throw new le(`Unexpected GitTree entry mode: ${e.toString(8)}`)}var dp=class{constructor({fs:t,gitdir:r,cache:n}){this.treePromise=mt.acquire({fs:t,gitdir:r,cache:n},async function(a){return i2(a.entries)});let i=this;this.ConstructEntry=class{constructor(s){this._fullpath=s,this._type=!1,this._mode=!1,this._stat=!1,this._oid=!1}async type(){return i.type(this)}async mode(){return i.mode(this)}async stat(){return i.stat(this)}async content(){return i.content(this)}async oid(){return i.oid(this)}}}async readdir(t){let r=t._fullpath,i=(await this.treePromise).get(r);if(!i||i.type===\"blob\")return null;if(i.type!==\"tree\")throw new Error(`ENOTDIR: not a directory, scandir '${r}'`);let a=i.children.map(s=>s.fullpath);return a.sort(hu),a}async type(t){return t._type===!1&&await t.stat(),t._type}async mode(t){return t._mode===!1&&await t.stat(),t._mode}async stat(t){if(t._stat===!1){let n=(await this.treePromise).get(t._fullpath);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t._fullpath}'`);let i=n.type===\"tree\"?{}:us(n.metadata);t._type=n.type===\"tree\"?\"tree\":sM(i.mode),t._mode=i.mode,n.type===\"tree\"?t._stat=void 0:t._stat=i}return t._stat}async content(t){}async oid(t){if(t._oid===!1){let n=(await this.treePromise).get(t._fullpath);t._oid=n.metadata.oid}return t._oid}},pu=Symbol(\"GitWalkSymbol\");function mu(){let e=Object.create(null);return Object.defineProperty(e,pu,{value:function({fs:t,gitdir:r,cache:n}){return new dp({fs:t,gitdir:r,cache:n})}}),Object.freeze(e),e}var Ne=class e extends _e{constructor(t){super(`Could not find ${t}.`),this.code=this.name=e.code,this.data={what:t}}};Ne.code=\"NotFoundError\";var Gt=class e extends _e{constructor(t,r,n,i){super(`Object ${t} ${i?`at ${i}`:\"\"}was anticipated to be a ${n} but it is a ${r}.`),this.code=this.name=e.code,this.data={oid:t,actual:r,expected:n,filepath:i}}};Gt.code=\"ObjectTypeError\";var bi=class e extends _e{constructor(t){super(`Expected a 40-char hex object id but saw \"${t}\".`),this.code=this.name=e.code,this.data={value:t}}};bi.code=\"InvalidOidError\";var el=class e extends _e{constructor(t){super(`Could not find a fetch refspec for remote \"${t}\". Make sure the config file has an entry like the following:\n[remote \"${t}\"]\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`),this.code=this.name=e.code,this.data={remote:t}}};el.code=\"NoRefspecError\";var iu=class e{constructor(t){if(this.refs=new Map,this.parsedConfig=[],t){let r=null;this.parsedConfig=t.trim().split(`\n`).map(n=>{if(/^\\s*#/.test(n))return{line:n,comment:!0};let i=n.indexOf(\" \");if(n.startsWith(\"^\")){let a=n.slice(1);return this.refs.set(r+\"^{}\",a),{line:n,ref:r,peeled:a}}else{let a=n.slice(0,i);return r=n.slice(i+1),this.refs.set(r,a),{line:n,ref:r,oid:a}}})}return this}static from(t){return new e(t)}delete(t){this.parsedConfig=this.parsedConfig.filter(r=>r.ref!==t),this.refs.delete(t)}toString(){return this.parsedConfig.map(({line:t})=>t).join(`\n`)+`\n`}},au=class e{constructor({remotePath:t,localPath:r,force:n,matchPrefix:i}){Object.assign(this,{remotePath:t,localPath:r,force:n,matchPrefix:i})}static from(t){let[r,n,i,a,s]=t.match(/^(\\+?)(.*?)(\\*?):(.*?)(\\*?)$/).slice(1),o=r===\"+\",c=i===\"*\";if(c!==(s===\"*\"))throw new le(\"Invalid refspec\");return new e({remotePath:n,localPath:a,force:o,matchPrefix:c})}translate(t){if(this.matchPrefix){if(t.startsWith(this.remotePath))return this.localPath+t.replace(this.remotePath,\"\")}else if(t===this.remotePath)return this.localPath;return null}reverseTranslate(t){if(this.matchPrefix){if(t.startsWith(this.localPath))return this.remotePath+t.replace(this.localPath,\"\")}else if(t===this.localPath)return this.remotePath;return null}},hp=class e{constructor(t=[]){this.rules=t}static from(t){let r=[];for(let n of t)r.push(au.from(n));return new e(r)}add(t){let r=au.from(t);this.rules.push(r)}translate(t){let r=[];for(let n of this.rules)for(let i of t){let a=n.translate(i);a&&r.push([i,a])}return r}translateOne(t){let r=null;for(let n of this.rules){let i=n.translate(t);i&&(r=i)}return r}localNamespaces(){return this.rules.filter(t=>t.matchPrefix).map(t=>t.localPath.replace(/\\/$/,\"\"))}};function oM(e,t){let r=e.replace(/\\^\\{\\}$/,\"\"),n=t.replace(/\\^\\{\\}$/,\"\"),i=-(r<n)||+(r>n);return i===0?e.endsWith(\"^{}\")?1:-1:i}var Mw=new Map;function Ow(e){let t=Mw.get(e);return t||(t=lM(e),Mw.set(e,t)),t}function lM(e){return e=e.split(\"/./\").join(\"/\").replace(/\\/{2,}/g,\"/\"),e===\"/.\"?\"/\":e===\"./\"||(e.startsWith(\"./\")&&(e=e.slice(2)),e.endsWith(\"/.\")&&(e=e.slice(0,-2)),e.length>1&&e.endsWith(\"/\")&&(e=e.slice(0,-1)),e===\"\")?\".\":e}function $(...e){return Ow(e.map(Ow).join(\"/\"))}var cM=e=>{e=e.toLowerCase();let t=parseInt(e);return e.endsWith(\"k\")&&(t*=1024),e.endsWith(\"m\")&&(t*=1024*1024),e.endsWith(\"g\")&&(t*=1024*1024*1024),t},Ko=e=>{if(e=e.trim().toLowerCase(),e===\"true\"||e===\"yes\"||e===\"on\")return!0;if(e===\"false\"||e===\"no\"||e===\"off\")return!1;throw Error(`Expected 'true', 'false', 'yes', 'no', 'on', or 'off', but got ${e}`)},Iw={core:{filemode:Ko,bare:Ko,logallrefupdates:Ko,symlinks:Ko,ignorecase:Ko,bigFileThreshold:cM}},uM=/^\\[([A-Za-z0-9-.]+)(?: \"(.*)\")?\\]$/,fM=/^[A-Za-z0-9-.]+$/,dM=/^([A-Za-z][A-Za-z-]*)(?: *= *(.*))?$/,hM=/^[A-Za-z][A-Za-z-]*$/,pM=/^(.*?)( *[#;].*)$/,mM=e=>{let t=uM.exec(e);if(t!=null){let[r,n]=t.slice(1);return[r,n]}return null},gM=e=>{let t=dM.exec(e);if(t!=null){let[r,n=\"true\"]=t.slice(1),i=vM(n),a=yM(i);return[r,a]}return null},vM=e=>{let t=pM.exec(e);if(t==null)return e;let[r,n]=t.slice(1);return Fw(r)&&Fw(n)?`${r}${n}`:r},Fw=e=>(e.match(/(?:^|[^\\\\])\"/g)||[]).length%2!==0,yM=e=>e.split(\"\").reduce((t,r,n,i)=>{let a=r==='\"'&&i[n-1]!==\"\\\\\",s=r===\"\\\\\"&&i[n+1]==='\"';return a||s?t:t+r},\"\"),$w=e=>e!=null?e.toLowerCase():null,pp=(e,t,r)=>[$w(e),t,$w(r)].filter(n=>n!=null).join(\".\"),Lw=e=>{let t=e.split(\".\"),r=t.shift(),n=t.pop(),i=t.length?t.join(\".\"):void 0;return{section:r,subsection:i,name:n,path:pp(r,i,n),sectionPath:pp(r,i,null)}},wM=(e,t)=>e.reduce((r,n,i)=>t(n)?i:r,-1),mp=class e{constructor(t){let r=null,n=null;this.parsedConfig=t?t.split(`\n`).map(i=>{let a=null,s=null,o=i.trim(),c=mM(o),l=c!=null;if(l)[r,n]=c;else{let f=gM(o);f!=null&&([a,s]=f)}let u=pp(r,n,a);return{line:i,isSection:l,section:r,subsection:n,name:a,value:s,path:u}}):[]}static from(t){return new e(t)}async get(t,r=!1){let n=Lw(t).path,i=this.parsedConfig.filter(a=>a.path===n).map(({section:a,name:s,value:o})=>{let c=Iw[a]&&Iw[a][s];return c?c(o):o});return r?i:i.pop()}async getall(t){return this.get(t,!0)}async getSubsections(t){return this.parsedConfig.filter(r=>r.section===t&&r.isSection).map(r=>r.subsection)}async deleteSection(t,r){this.parsedConfig=this.parsedConfig.filter(n=>!(n.section===t&&n.subsection===r))}async append(t,r){return this.set(t,r,!0)}async set(t,r,n=!1){let{section:i,subsection:a,name:s,path:o,sectionPath:c}=Lw(t),l=wM(this.parsedConfig,u=>u.path===o);if(r==null)l!==-1&&this.parsedConfig.splice(l,1);else if(l!==-1){let u=this.parsedConfig[l],f=Object.assign({},u,{name:s,value:r,modified:!0});n?this.parsedConfig.splice(l+1,0,f):this.parsedConfig[l]=f}else{let u=this.parsedConfig.findIndex(d=>d.path===c),f={section:i,subsection:a,name:s,value:r,modified:!0,path:o};if(fM.test(i)&&hM.test(s))if(u>=0)this.parsedConfig.splice(u+1,0,f);else{let d={section:i,subsection:a,modified:!0,path:c};this.parsedConfig.push(d,f)}}}toString(){return this.parsedConfig.map(({line:t,section:r,subsection:n,name:i,value:a,modified:s=!1})=>s?i!=null&&a!=null?typeof a==\"string\"&&/[#;]/.test(a)?`\t${i} = \"${a}\"`:`\t${i} = ${a}`:n!=null?`[${r} \"${n}\"]`:`[${r}]`:t).join(`\n`)}},We=class{static async get({fs:t,gitdir:r}){let n=await t.read(`${r}/config`,{encoding:\"utf8\"});return mp.from(n)}static async save({fs:t,gitdir:r,config:n}){await t.write(`${r}/config`,n.toString(),{encoding:\"utf8\"})}},Qc=e=>[`${e}`,`refs/${e}`,`refs/tags/${e}`,`refs/heads/${e}`,`refs/remotes/${e}`,`refs/remotes/${e}/HEAD`],bM=[\"config\",\"description\",\"index\",\"shallow\",\"commondir\"],np;async function vi(e,t){return np===void 0&&(np=new Jo.default),np.acquire(e,t)}var q=class e{static async updateRemoteRefs({fs:t,gitdir:r,remote:n,refs:i,symrefs:a,tags:s,refspecs:o=void 0,prune:c=!1,pruneTags:l=!1}){for(let v of i.values())if(!v.match(/[0-9a-f]{40}/))throw new bi(v);let u=await We.get({fs:t,gitdir:r});if(!o){if(o=await u.getall(`remote.${n}.fetch`),o.length===0)throw new el(n);o.unshift(`+HEAD:refs/remotes/${n}/HEAD`)}let f=hp.from(o),d=new Map;if(l){let v=await e.listRefs({fs:t,gitdir:r,filepath:\"refs/tags\"});await e.deleteRefs({fs:t,gitdir:r,refs:v.map(y=>`refs/tags/${y}`)})}if(s){for(let v of i.keys())if(v.startsWith(\"refs/tags\")&&!v.endsWith(\"^{}\")&&!await e.exists({fs:t,gitdir:r,ref:v})){let y=i.get(v);d.set(v,y)}}let h=f.translate([...i.keys()]);for(let[v,y]of h){let b=i.get(v);d.set(y,b)}let p=f.translate([...a.keys()]);for(let[v,y]of p){let b=a.get(v),x=f.translateOne(b);x&&d.set(y,`ref: ${x}`)}let m=[];if(c){for(let v of f.localNamespaces()){let y=(await e.listRefs({fs:t,gitdir:r,filepath:v})).map(b=>`${v}/${b}`);for(let b of y)d.has(b)||m.push(b)}m.length>0&&await e.deleteRefs({fs:t,gitdir:r,refs:m})}for(let[v,y]of d)await vi(v,async()=>t.write($(r,v),`${y.trim()}\n`,\"utf8\"));return{pruned:m}}static async writeRef({fs:t,gitdir:r,ref:n,value:i}){if(!i.match(/[0-9a-f]{40}/))throw new bi(i);await vi(n,async()=>t.write($(r,n),`${i.trim()}\n`,\"utf8\"))}static async writeSymbolicRef({fs:t,gitdir:r,ref:n,value:i}){await vi(n,async()=>t.write($(r,n),`ref: ${i.trim()}\n`,\"utf8\"))}static async deleteRef({fs:t,gitdir:r,ref:n}){return e.deleteRefs({fs:t,gitdir:r,refs:[n]})}static async deleteRefs({fs:t,gitdir:r,refs:n}){await Promise.all(n.map(o=>t.rm($(r,o))));let i=await vi(\"packed-refs\",async()=>t.read(`${r}/packed-refs`,{encoding:\"utf8\"})),a=iu.from(i),s=a.refs.size;for(let o of n)a.refs.has(o)&&a.delete(o);a.refs.size<s&&(i=a.toString(),await vi(\"packed-refs\",async()=>t.write(`${r}/packed-refs`,i,{encoding:\"utf8\"})))}static async resolve({fs:t,gitdir:r,ref:n,depth:i=void 0}){if(i!==void 0&&(i--,i===-1))return n;if(n.startsWith(\"ref: \"))return n=n.slice(5),e.resolve({fs:t,gitdir:r,ref:n,depth:i});if(n.length===40&&/[0-9a-f]{40}/.test(n))return n;let a=await e.packedRefs({fs:t,gitdir:r}),s=Qc(n).filter(o=>!bM.includes(o));for(let o of s){let c=await vi(o,async()=>await t.read(`${r}/${o}`,{encoding:\"utf8\"})||a.get(o));if(c)return e.resolve({fs:t,gitdir:r,ref:c.trim(),depth:i})}throw new Ne(n)}static async exists({fs:t,gitdir:r,ref:n}){try{return await e.expand({fs:t,gitdir:r,ref:n}),!0}catch(i){return!1}}static async expand({fs:t,gitdir:r,ref:n}){if(n.length===40&&/[0-9a-f]{40}/.test(n))return n;let i=await e.packedRefs({fs:t,gitdir:r}),a=Qc(n);for(let s of a)if(await vi(s,async()=>t.exists(`${r}/${s}`))||i.has(s))return s;throw new Ne(n)}static async expandAgainstMap({ref:t,map:r}){let n=Qc(t);for(let i of n)if(await r.has(i))return i;throw new Ne(t)}static resolveAgainstMap({ref:t,fullref:r=t,depth:n=void 0,map:i}){if(n!==void 0&&(n--,n===-1))return{fullref:r,oid:t};if(t.startsWith(\"ref: \"))return t=t.slice(5),e.resolveAgainstMap({ref:t,fullref:r,depth:n,map:i});if(t.length===40&&/[0-9a-f]{40}/.test(t))return{fullref:r,oid:t};let a=Qc(t);for(let s of a){let o=i.get(s);if(o)return e.resolveAgainstMap({ref:o.trim(),fullref:s,depth:n,map:i})}throw new Ne(t)}static async packedRefs({fs:t,gitdir:r}){let n=await vi(\"packed-refs\",async()=>t.read(`${r}/packed-refs`,{encoding:\"utf8\"}));return iu.from(n).refs}static async listRefs({fs:t,gitdir:r,filepath:n}){let i=e.packedRefs({fs:t,gitdir:r}),a=null;try{a=await t.readdirDeep(`${r}/${n}`),a=a.map(s=>s.replace(`${r}/${n}/`,\"\"))}catch(s){a=[]}for(let s of(await i).keys())s.startsWith(n)&&(s=s.replace(n+\"/\",\"\"),a.includes(s)||a.push(s));return a.sort(oM),a}static async listBranches({fs:t,gitdir:r,remote:n}){return n?e.listRefs({fs:t,gitdir:r,filepath:`refs/remotes/${n}`}):e.listRefs({fs:t,gitdir:r,filepath:\"refs/heads\"})}static async listTags({fs:t,gitdir:r}){return(await e.listRefs({fs:t,gitdir:r,filepath:\"refs/tags\"})).filter(i=>!i.endsWith(\"^{}\"))}};function _M(e,t){return hu(Dw(e),Dw(t))}function Dw(e){return e.mode===\"040000\"?e.path+\"/\":e.path}function a2(e){switch(e){case\"040000\":return\"tree\";case\"100644\":return\"blob\";case\"100755\":return\"blob\";case\"120000\":return\"blob\";case\"160000\":return\"commit\"}throw new le(`Unexpected GitTree entry mode: ${e}`)}function xM(e){let t=[],r=0;for(;r<e.length;){let n=e.indexOf(32,r);if(n===-1)throw new le(`GitTree: Error parsing buffer at byte location ${r}: Could not find the next space character.`);let i=e.indexOf(0,r);if(i===-1)throw new le(`GitTree: Error parsing buffer at byte location ${r}: Could not find the next null character.`);let a=e.slice(r,n).toString(\"utf8\");a===\"40000\"&&(a=\"040000\");let s=a2(a),o=e.slice(n+1,i).toString(\"utf8\");if(o.includes(\"\\\\\")||o.includes(\"/\"))throw new cs(o);let c=e.slice(i+1,i+21).toString(\"hex\");r=i+21,t.push({mode:a,path:o,oid:c,type:s})}return t}function SM(e){if(typeof e==\"number\"&&(e=e.toString(8)),e.match(/^0?4.*/))return\"040000\";if(e.match(/^1006.*/))return\"100644\";if(e.match(/^1007.*/))return\"100755\";if(e.match(/^120.*/))return\"120000\";if(e.match(/^160.*/))return\"160000\";throw new le(`Could not understand file mode: ${e}`)}function EM(e){return!e.oid&&e.sha&&(e.oid=e.sha),e.mode=SM(e.mode),e.type||(e.type=a2(e.mode)),e}var er=class e{constructor(t){if(Buffer.isBuffer(t))this._entries=xM(t);else if(Array.isArray(t))this._entries=t.map(EM);else throw new le(\"invalid type passed to GitTree constructor\");this._entries.sort(t2)}static from(t){return new e(t)}render(){return this._entries.map(t=>`${t.mode} ${t.type} ${t.oid}    ${t.path}`).join(`\n`)}toObject(){let t=[...this._entries];return t.sort(_M),Buffer.concat(t.map(r=>{let n=Buffer.from(r.mode.replace(/^0/,\"\")),i=Buffer.from(\" \"),a=Buffer.from(r.path,\"utf8\"),s=Buffer.from([0]),o=Buffer.from(r.oid,\"hex\");return Buffer.concat([n,i,a,s,o])}))}entries(){return this._entries}*[Symbol.iterator](){for(let t of this._entries)yield t}},_i=class{static wrap({type:t,object:r}){return Buffer.concat([Buffer.from(`${t} ${r.byteLength.toString()}\\0`),Buffer.from(r)])}static unwrap(t){let r=t.indexOf(32),n=t.indexOf(0),i=t.slice(0,r).toString(\"utf8\"),a=t.slice(r+1,n).toString(\"utf8\"),s=t.length-(n+1);if(parseInt(a)!==s)throw new le(`Length mismatch: expected ${a} bytes but got ${s} instead.`);return{type:i,object:Buffer.from(t.slice(n+1))}}};async function AM({fs:e,gitdir:t,oid:r}){let n=`objects/${r.slice(0,2)}/${r.slice(2)}`,i=await e.read(`${t}/${n}`);return i?{object:i,format:\"deflated\",source:n}:null}function kM(e,t){let r=new Ir(e),n=Nw(r);if(n!==t.byteLength)throw new le(`applyDelta expected source buffer to be ${n} bytes but the provided buffer was ${t.length} bytes`);let i=Nw(r),a,s=Bw(r,t);if(s.byteLength===i)a=s;else{a=Buffer.alloc(i);let o=new Ir(a);for(o.copy(s);!r.eof();)o.copy(Bw(r,t));let c=o.tell();if(i!==c)throw new le(`applyDelta expected target buffer to be ${i} bytes but the resulting buffer was ${c} bytes`)}return a}function Nw(e){let t=0,r=0,n=null;do n=e.readUInt8(),t|=(n&127)<<r,r+=7;while(n&128);return t}function jw(e,t,r){let n=0,i=0;for(;r--;)t&1&&(n|=e.readUInt8()<<i),t>>=1,i+=8;return n}function Bw(e,t){let r=e.readUInt8(),n=128,i=15,a=112;if(r&n){let s=jw(e,r&i,4),o=jw(e,(r&a)>>4,3);return o===0&&(o=65536),t.slice(s,s+o)}else return e.slice(r)}function TM(e){let t=[e];return{next(){return Promise.resolve({done:t.length===0,value:t.pop()})},return(){return t=[],{}},[Symbol.asyncIterator](){return this}}}function s2(e){return e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]?e[Symbol.iterator]():e.next?e:TM(e)}var su=class{constructor(t){if(typeof Buffer==\"undefined\")throw new Error(\"Missing Buffer dependency\");this.stream=s2(t),this.buffer=null,this.cursor=0,this.undoCursor=0,this.started=!1,this._ended=!1,this._discardedBytes=0}eof(){return this._ended&&this.cursor===this.buffer.length}tell(){return this._discardedBytes+this.cursor}async byte(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(1),this.buffer[this.undoCursor]}async chunk(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(this.buffer.length),this.buffer.slice(this.undoCursor,this.cursor)}async read(t){if(!this.eof())return this.started||await this._init(),this.cursor+t>this.buffer.length&&(this._trim(),await this._accumulate(t)),this._moveCursor(t),this.buffer.slice(this.undoCursor,this.cursor)}async skip(t){this.eof()||(this.started||await this._init(),this.cursor+t>this.buffer.length&&(this._trim(),await this._accumulate(t)),this._moveCursor(t))}async undo(){this.cursor=this.undoCursor}async _next(){this.started=!0;let{done:t,value:r}=await this.stream.next();return t&&(this._ended=!0,!r)?Buffer.alloc(0):(r&&(r=Buffer.from(r)),r)}_trim(){this.buffer=this.buffer.slice(this.undoCursor),this.cursor-=this.undoCursor,this._discardedBytes+=this.undoCursor,this.undoCursor=0}_moveCursor(t){this.undoCursor=this.cursor,this.cursor+=t,this.cursor>this.buffer.length&&(this.cursor=this.buffer.length)}async _accumulate(t){if(this._ended)return;let r=[this.buffer];for(;this.cursor+t>CM(r);){let n=await this._next();if(this._ended)break;r.push(n)}this.buffer=Buffer.concat(r)}async _loadnext(){this._discardedBytes+=this.buffer.length,this.undoCursor=0,this.cursor=0,this.buffer=await this._next()}async _init(){this.buffer=await this._next()}};function CM(e){return e.reduce((t,r)=>t+r.length,0)}async function PM(e,t){let r=new su(e),n=await r.read(4);if(n=n.toString(\"utf8\"),n!==\"PACK\")throw new le(`Invalid PACK header '${n}'`);let i=await r.read(4);if(i=i.readUInt32BE(0),i!==2)throw new le(`Invalid packfile version: ${i}`);let a=await r.read(4);if(a=a.readUInt32BE(0),!(a<1))for(;!r.eof()&&a--;){let s=r.tell(),{type:o,length:c,ofs:l,reference:u}=await RM(r),f=new du.default.Inflate;for(;!f.result;){let d=await r.chunk();if(!d)break;if(f.push(d,!1),f.err)throw new le(`Pako error: ${f.msg}`);if(f.result){if(f.result.length!==c)throw new le(\"Inflated object size is different from that stated in packfile.\");await r.undo(),await r.read(d.length-f.strm.avail_in);let h=r.tell();await t({data:f.result,type:o,num:a,offset:s,end:h,reference:u,ofs:l})}}}}async function RM(e){let t=await e.byte(),r=t>>4&7,n=t&15;if(t&128){let s=4;do t=await e.byte(),n|=(t&127)<<s,s+=7;while(t&128)}let i,a;if(r===6){let s=0;i=0;let o=[];do t=await e.byte(),i|=(t&127)<<s,s+=7,o.push(t);while(t&128);a=Buffer.from(o)}return r===7&&(a=await e.read(20)),{type:r,length:n,ofs:i,reference:a}}var ip=!1;async function o2(e){return ip===null&&(ip=OM()),ip?MM(e):du.default.inflate(e)}async function MM(e){let t=new DecompressionStream(\"deflate\"),r=new Blob([e]).stream().pipeThrough(t);return new Uint8Array(await new Response(r).arrayBuffer())}function OM(){try{if(new DecompressionStream(\"deflate\"))return!0}catch(e){}return!1}function IM(e){let t=[],r=0,n=0;do{r=e.readUInt8();let i=r&127;t.push(i),n=r&128}while(n);return t.reduce((i,a)=>i+1<<7|a,-1)}function FM(e,t){let r=t,n=4,i=null;do i=e.readUInt8(),r|=(i&127)<<n,n+=7;while(i&128);return r}var tl=class e{constructor(t){Object.assign(this,t),this.offsetCache={}}static async fromIdx({idx:t,getExternalRefDelta:r}){let n=new Ir(t);if(n.slice(4).toString(\"hex\")!==\"ff744f63\")return;let a=n.readUInt32BE();if(a!==2)throw new le(`Unable to read version ${a} packfile IDX. (Only version 2 supported)`);if(t.byteLength>2048*1024*1024)throw new le(\"To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.\");n.seek(n.tell()+4*255);let s=n.readUInt32BE(),o=[];for(let u=0;u<s;u++){let f=n.slice(20).toString(\"hex\");o[u]=f}n.seek(n.tell()+4*s);let c=new Map;for(let u=0;u<s;u++)c.set(o[u],n.readUInt32BE());let l=n.slice(20).toString(\"hex\");return new e({hashes:o,crcs:{},offsets:c,packfileSha:l,getExternalRefDelta:r})}static async fromPack({pack:t,getExternalRefDelta:r,onProgress:n}){let i={1:\"commit\",2:\"tree\",3:\"blob\",4:\"tag\",6:\"ofs-delta\",7:\"ref-delta\"},a={},s=t.slice(-20).toString(\"hex\"),o=[],c={},l=new Map,u=null,f=null;await PM([t],async({data:v,type:y,reference:b,offset:x,num:E})=>{u===null&&(u=E);let _=Math.floor((u-E)*100/u);_!==f&&n&&await n({phase:\"Receiving objects\",loaded:u-E,total:u}),f=_,y=i[y],[\"commit\",\"tree\",\"blob\",\"tag\"].includes(y)?a[x]={type:y,offset:x}:y===\"ofs-delta\"?a[x]={type:y,offset:x}:y===\"ref-delta\"&&(a[x]={type:y,offset:x})});let d=Object.keys(a).map(Number);for(let[v,y]of d.entries()){let b=v+1===d.length?t.byteLength-20:d[v+1],x=a[y],E=Jw.default.buf(t.slice(y,b))>>>0;x.end=b,x.crc=E}let h=new e({pack:Promise.resolve(t),packfileSha:s,crcs:c,hashes:o,offsets:l,getExternalRefDelta:r});f=null;let p=0,m=[0,0,0,0,0,0,0,0,0,0,0,0];for(let v in a){v=Number(v);let y=Math.floor(p*100/u);y!==f&&n&&await n({phase:\"Resolving deltas\",loaded:p,total:u}),p++,f=y;let b=a[v];if(!b.oid)try{h.readDepth=0,h.externalReadDepth=0;let{type:x,object:E}=await h.readSlice({start:v});m[h.readDepth]+=1;let _=await Gn(_i.wrap({type:x,object:E}));b.oid=_,o.push(_),l.set(_,v),c[_]=b.crc}catch(x){continue}}return o.sort(),h}async toBuffer(){let t=[],r=(l,u)=>{t.push(Buffer.from(l,u))};r(\"ff744f63\",\"hex\"),r(\"00000002\",\"hex\");let n=new Ir(Buffer.alloc(256*4));for(let l=0;l<256;l++){let u=0;for(let f of this.hashes)parseInt(f.slice(0,2),16)<=l&&u++;n.writeUInt32BE(u)}t.push(n.buffer);for(let l of this.hashes)r(l,\"hex\");let i=new Ir(Buffer.alloc(this.hashes.length*4));for(let l of this.hashes)i.writeUInt32BE(this.crcs[l]);t.push(i.buffer);let a=new Ir(Buffer.alloc(this.hashes.length*4));for(let l of this.hashes)a.writeUInt32BE(this.offsets.get(l));t.push(a.buffer),r(this.packfileSha,\"hex\");let s=Buffer.concat(t),o=await Gn(s),c=Buffer.alloc(20);return c.write(o,\"hex\"),Buffer.concat([s,c])}async load({pack:t}){this.pack=t}async unload(){this.pack=null}async read({oid:t}){if(!this.offsets.get(t)){if(this.getExternalRefDelta)return this.externalReadDepth++,this.getExternalRefDelta(t);throw new le(`Could not read object ${t} from packfile`)}let r=this.offsets.get(t);return this.readSlice({start:r})}async readSlice({start:t}){if(this.offsetCache[t])return Object.assign({},this.offsetCache[t]);this.readDepth++;let r={16:\"commit\",32:\"tree\",48:\"blob\",64:\"tag\",96:\"ofs_delta\",112:\"ref_delta\"};if(!this.pack)throw new le(\"Tried to read from a GitPackIndex with no packfile loaded into memory\");let n=(await this.pack).slice(t),i=new Ir(n),a=i.readUInt8(),s=a&112,o=r[s];if(o===void 0)throw new le(\"Unrecognized type: 0b\"+s.toString(2));let c=a&15,l=c;a&128&&(l=FM(i,c));let f=null,d=null;if(o===\"ofs_delta\"){let p=IM(i),m=t-p;({object:f,type:o}=await this.readSlice({start:m}))}if(o===\"ref_delta\"){let p=i.slice(20).toString(\"hex\");({object:f,type:o}=await this.read({oid:p}))}let h=n.slice(i.tell());if(d=Buffer.from(await o2(h)),d.byteLength!==l)throw new le(`Packfile told us object would have length ${l} but it had length ${d.byteLength}`);return f&&(d=Buffer.from(kM(d,f))),this.readDepth>3&&(this.offsetCache[t]={type:o,object:d}),{type:o,format:\"content\",object:d}}},eu=Symbol(\"PackfileCache\");async function $M({fs:e,filename:t,getExternalRefDelta:r,emitter:n,emitterPrefix:i}){let a=await e.read(t);return tl.fromIdx({idx:a,getExternalRefDelta:r})}function Ep({fs:e,cache:t,filename:r,getExternalRefDelta:n,emitter:i,emitterPrefix:a}){t[eu]||(t[eu]=new Map);let s=t[eu].get(r);return s||(s=$M({fs:e,filename:r,getExternalRefDelta:n,emitter:i,emitterPrefix:a}),t[eu].set(r,s)),s}async function LM({fs:e,cache:t,gitdir:r,oid:n,format:i=\"content\",getExternalRefDelta:a}){let s=await e.readdir($(r,\"objects/pack\"));s=s.filter(o=>o.endsWith(\".idx\"));for(let o of s){let c=`${r}/objects/pack/${o}`,l=await Ep({fs:e,cache:t,filename:c,getExternalRefDelta:a});if(l.error)throw new le(l.error);if(l.offsets.has(n)){if(!l.pack){let f=c.replace(/idx$/,\"pack\");l.pack=e.read(f)}let u=await l.read({oid:n,getExternalRefDelta:a});return u.format=\"content\",u.source=`objects/pack/${o.replace(/idx$/,\"pack\")}`,u}}return null}async function qe({fs:e,cache:t,gitdir:r,oid:n,format:i=\"content\"}){let a=u=>qe({fs:e,cache:t,gitdir:r,oid:u}),s;if(n===\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"&&(s={format:\"wrapped\",object:Buffer.from(\"tree 0\\0\")}),s||(s=await AM({fs:e,gitdir:r,oid:n})),!s){if(s=await LM({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:a}),!s)throw new Ne(n);return s}if(i===\"deflated\"||(s.format===\"deflated\"&&(s.object=Buffer.from(await o2(s.object)),s.format=\"wrapped\"),i===\"wrapped\"))return s;let o=await Gn(s.object);if(o!==n)throw new le(`SHA check failed! Expected ${n}, computed ${o}`);let{object:c,type:l}=_i.unwrap(s.object);if(s.type=l,s.object=c,s.format=\"content\",i===\"content\")return s;throw new le(`invalid requested format \"${i}\"`)}var Qr=class e extends _e{constructor(t,r,n=!0){super(`Failed to create ${t} at ${r} because it already exists.${n?` (Hint: use 'force: true' parameter to overwrite existing ${t}.)`:\"\"}`),this.code=this.name=e.code,this.data={noun:t,where:r,canForce:n}}};Qr.code=\"AlreadyExistsError\";var rl=class e extends _e{constructor(t,r,n){super(`Found multiple ${t} matching \"${r}\" (${n.join(\", \")}). Use a longer abbreviation length to disambiguate them.`),this.code=this.name=e.code,this.data={nouns:t,short:r,matches:n}}};rl.code=\"AmbiguousError\";var nl=class e extends _e{constructor(t){super(`Your local changes to the following files would be overwritten by checkout: ${t.join(\", \")}`),this.code=this.name=e.code,this.data={filepaths:t}}};nl.code=\"CheckoutConflictError\";var il=class e extends _e{constructor(t,r){super(`Failed to checkout \"${t}\" because commit ${r} is not available locally. Do a git fetch to make the branch available locally.`),this.code=this.name=e.code,this.data={ref:t,oid:r}}};il.code=\"CommitNotFetchedError\";var al=class e extends _e{constructor(){super(\"从 git 服务器收到空响应.\"),this.code=this.name=e.code,this.data={}}};al.code=\"EmptyServerResponseError\";var sl=class e extends _e{constructor(){super(\"无法进行简单的快进合并.\"),this.code=this.name=e.code,this.data={}}};sl.code=\"FastForwardError\";var ol=class e extends _e{constructor(t,r){super(`One or more branches were not updated: ${t}`),this.code=this.name=e.code,this.data={prettyDetails:t,result:r}}};ol.code=\"GitPushError\";var ds=class e extends _e{constructor(t,r,n){super(`HTTP Error: ${t} ${r}`),this.code=this.name=e.code,this.data={statusCode:t,statusMessage:r,response:n}}};ds.code=\"HttpError\";var xi=class e extends _e{constructor(t){let r=\"invalid filepath\";t===\"leading-slash\"||t===\"trailing-slash\"?r='\"filepath\" parameter should not include leading or trailing directory separators because these can cause problems on some platforms.':t===\"directory\"&&(r='\"filepath\" should not be a directory.'),super(r),this.code=this.name=e.code,this.data={reason:t}}};xi.code=\"InvalidFilepathError\";var zn=class e extends _e{constructor(t,r){super(`\"${t}\" would be an invalid git reference. (Hint: a valid alternative would be \"${r}\".)`),this.code=this.name=e.code,this.data={ref:t,suggestion:r}}};zn.code=\"InvalidRefNameError\";var ll=class e extends _e{constructor(t){super(`Maximum search depth of ${t} exceeded.`),this.code=this.name=e.code,this.data={depth:t}}};ll.code=\"MaxDepthError\";var hs=class e extends _e{constructor(){super(\"尚不支持带有冲突的合并.\"),this.code=this.name=e.code,this.data={}}};hs.code=\"MergeNotSupportedError\";var ps=class e extends _e{constructor(t,r,n,i){super(`Automatic merge failed with one or more merge conflicts in the following files: ${t.toString()}. Fix conflicts then commit the result.`),this.code=this.name=e.code,this.data={filepaths:t,bothModified:r,deleteByUs:n,deleteByTheirs:i}}};ps.code=\"MergeConflictError\";var zt=class e extends _e{constructor(t){super(`No name was provided for ${t} in the argument or in the .git/config file.`),this.code=this.name=e.code,this.data={role:t}}};zt.code=\"MissingNameError\";var Qt=class e extends _e{constructor(t){super(`The function requires a \"${t}\" parameter but none was provided.`),this.code=this.name=e.code,this.data={parameter:t}}};Qt.code=\"MissingParameterError\";var cl=class e extends _e{constructor(t){super('该方法抛出了多个错误。请参阅 \"errors\" 属性查看更多'),this.code=this.name=e.code,this.data={errors:t},this.errors=t}};cl.code=\"MultipleGitError\";var la=class e extends _e{constructor(t,r){super(`Expected \"${t}\" but received \"${r}\".`),this.code=this.name=e.code,this.data={expected:t,actual:r}}};la.code=\"ParseError\";var ms=class e extends _e{constructor(t){let r=\"\";t===\"not-fast-forward\"?r=\" because it was not a simple fast-forward\":t===\"tag-exists\"&&(r=\" because tag already exists\"),super(`Push rejected${r}. Use \"force: true\" to override.`),this.code=this.name=e.code,this.data={reason:t}}};ms.code=\"PushRejectedError\";var yi=class e extends _e{constructor(t,r){super(`Remote does not support the \"${t}\" so the \"${r}\" parameter cannot be used.`),this.code=this.name=e.code,this.data={capability:t,parameter:r}}};yi.code=\"RemoteCapabilityError\";var ul=class e extends _e{constructor(t,r){super(`Remote did not reply using the \"smart\" HTTP protocol. Expected \"001e# service=git-upload-pack\" but received: ${t}`),this.code=this.name=e.code,this.data={preview:t,response:r}}};ul.code=\"SmartHttpError\";var fl=class e extends _e{constructor(t,r,n){super(`Git remote \"${t}\" uses an unrecognized transport protocol: \"${r}\"`),this.code=this.name=e.code,this.data={url:t,transport:r,suggestion:n}}};fl.code=\"UnknownTransportError\";var dl=class e extends _e{constructor(t){super(`Cannot parse remote URL: \"${t}\"`),this.code=this.name=e.code,this.data={url:t}}};dl.code=\"UrlParseError\";var gs=class e extends _e{constructor(){super(\"操作已取消.\"),this.code=this.name=e.code,this.data={}}};gs.code=\"UserCanceledError\";var hl=class e extends _e{constructor(t){super(`Could not merge index: Entry for '${t}' is not up to date. Either reset the index entry to HEAD, or stage your unstaged changes.`),this.code=this.name=e.code,this.data={filepath:t}}};hl.code=\"IndexResetError\";var pl=class e extends _e{constructor(t){super(`\"${t}\" does not point to any commit. You're maybe working on a repository with no commits yet. `),this.code=this.name=e.code,this.data={ref:t}}};pl.code=\"NoCommitError\";var gl=Object.freeze({__proto__:null,AlreadyExistsError:Qr,AmbiguousError:rl,CheckoutConflictError:nl,CommitNotFetchedError:il,EmptyServerResponseError:al,FastForwardError:sl,GitPushError:ol,HttpError:ds,InternalError:le,InvalidFilepathError:xi,InvalidOidError:bi,InvalidRefNameError:zn,MaxDepthError:ll,MergeNotSupportedError:hs,MergeConflictError:ps,MissingNameError:zt,MissingParameterError:Qt,MultipleGitError:cl,NoRefspecError:el,NotFoundError:Ne,ObjectTypeError:Gt,ParseError:la,PushRejectedError:ms,RemoteCapabilityError:yi,SmartHttpError:ul,UnknownTransportError:fl,UnsafeFilepathError:cs,UrlParseError:dl,UserCanceledError:gs,UnmergedPathsError:Qo,IndexResetError:hl,NoCommitError:pl});function gp({name:e,email:t,timestamp:r,timezoneOffset:n}){return n=DM(n),`${e} <${t}> ${r} ${n}`}function DM(e){let t=NM(jM(e));e=Math.abs(e);let r=Math.floor(e/60);e-=r*60;let n=String(r),i=String(e);return n.length<2&&(n=\"0\"+n),i.length<2&&(i=\"0\"+i),(t===-1?\"-\":\"+\")+n+i}function NM(e){return Math.sign(e)||(Object.is(e,-0)?-1:1)}function jM(e){return e===0?e:-e}function Un(e){return e=e.replace(/\\r/g,\"\"),e=e.replace(/^\\n+/,\"\"),e=e.replace(/\\n+$/,\"\")+`\n`,e}function ou(e){let[,t,r,n,i]=e.match(/^(.*) <(.*)> (.*) (.*)$/);return{name:t,email:r,timestamp:Number(n),timezoneOffset:BM(i)}}function BM(e){let[,t,r,n]=e.match(/(\\+|-)(\\d\\d)(\\d\\d)/);return n=(t===\"+\"?1:-1)*(Number(r)*60+Number(n)),HM(n)}function HM(e){return e===0?e:-e}var pr=class e{constructor(t){if(typeof t==\"string\")this._tag=t;else if(Buffer.isBuffer(t))this._tag=t.toString(\"utf8\");else if(typeof t==\"object\")this._tag=e.render(t);else throw new le(\"invalid type passed to GitAnnotatedTag constructor\")}static from(t){return new e(t)}static render(t){return`object ${t.object}\ntype ${t.type}\ntag ${t.tag}\ntagger ${gp(t.tagger)}\n\n${t.message}\n${t.gpgsig?t.gpgsig:\"\"}`}justHeaders(){return this._tag.slice(0,this._tag.indexOf(`\n\n`))}message(){let t=this.withoutSignature();return t.slice(t.indexOf(`\n\n`)+2)}parse(){return Object.assign(this.headers(),{message:this.message(),gpgsig:this.gpgsig()})}render(){return this._tag}headers(){let t=this.justHeaders().split(`\n`),r=[];for(let i of t)i[0]===\" \"?r[r.length-1]+=`\n`+i.slice(1):r.push(i);let n={};for(let i of r){let a=i.slice(0,i.indexOf(\" \")),s=i.slice(i.indexOf(\" \")+1);Array.isArray(n[a])?n[a].push(s):n[a]=s}return n.tagger&&(n.tagger=ou(n.tagger)),n.committer&&(n.committer=ou(n.committer)),n}withoutSignature(){let t=Un(this._tag);return t.indexOf(`\n-----BEGIN PGP SIGNATURE-----`)===-1?t:t.slice(0,t.lastIndexOf(`\n-----BEGIN PGP SIGNATURE-----`))}gpgsig(){if(this._tag.indexOf(`\n-----BEGIN PGP SIGNATURE-----`)===-1)return;let t=this._tag.slice(this._tag.indexOf(\"-----BEGIN PGP SIGNATURE-----\"),this._tag.indexOf(\"-----END PGP SIGNATURE-----\")+27);return Un(t)}payload(){return this.withoutSignature()+`\n`}toObject(){return Buffer.from(this._tag,\"utf8\")}static async sign(t,r,n){let i=t.payload(),{signature:a}=await r({payload:i,secretKey:n});a=Un(a);let s=i+a;return e.from(s)}};function ap(e){return e.trim().split(`\n`).map(t=>\" \"+t).join(`\n`)+`\n`}function UM(e){return e.split(`\n`).map(t=>t.replace(/^ /,\"\")).join(`\n`)}var tr=class e{constructor(t){if(typeof t==\"string\")this._commit=t;else if(Buffer.isBuffer(t))this._commit=t.toString(\"utf8\");else if(typeof t==\"object\")this._commit=e.render(t);else throw new le(\"invalid type passed to GitCommit constructor\")}static fromPayloadSignature({payload:t,signature:r}){let n=e.justHeaders(t),i=e.justMessage(t),a=Un(n+`\ngpgsig`+ap(r)+`\n`+i);return new e(a)}static from(t){return new e(t)}toObject(){return Buffer.from(this._commit,\"utf8\")}headers(){return this.parseHeaders()}message(){return e.justMessage(this._commit)}parse(){return Object.assign({message:this.message()},this.headers())}static justMessage(t){return Un(t.slice(t.indexOf(`\n\n`)+2))}static justHeaders(t){return t.slice(0,t.indexOf(`\n\n`))}parseHeaders(){let t=e.justHeaders(this._commit).split(`\n`),r=[];for(let i of t)i[0]===\" \"?r[r.length-1]+=`\n`+i.slice(1):r.push(i);let n={parent:[]};for(let i of r){let a=i.slice(0,i.indexOf(\" \")),s=i.slice(i.indexOf(\" \")+1);Array.isArray(n[a])?n[a].push(s):n[a]=s}return n.author&&(n.author=ou(n.author)),n.committer&&(n.committer=ou(n.committer)),n}static renderHeaders(t){let r=\"\";if(t.tree?r+=`tree ${t.tree}\n`:r+=`tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\n`,t.parent){if(t.parent.length===void 0)throw new le(\"commit 'parent' property should be an array\");for(let a of t.parent)r+=`parent ${a}\n`}let n=t.author;r+=`author ${gp(n)}\n`;let i=t.committer||t.author;return r+=`committer ${gp(i)}\n`,t.gpgsig&&(r+=\"gpgsig\"+ap(t.gpgsig)),r}static render(t){return e.renderHeaders(t)+`\n`+Un(t.message)}render(){return this._commit}withoutSignature(){let t=Un(this._commit);if(t.indexOf(`\ngpgsig`)===-1)return t;let r=t.slice(0,t.indexOf(`\ngpgsig`)),n=t.slice(t.indexOf(`-----END PGP SIGNATURE-----\n`)+28);return Un(r+`\n`+n)}isolateSignature(){let t=this._commit.slice(this._commit.indexOf(\"-----BEGIN PGP SIGNATURE-----\"),this._commit.indexOf(\"-----END PGP SIGNATURE-----\")+27);return UM(t)}static async sign(t,r,n){let i=t.withoutSignature(),a=e.justMessage(t._commit),{signature:s}=await r({payload:i,secretKey:n});s=Un(s);let c=e.justHeaders(t._commit)+`\ngpgsig`+ap(s)+`\n`+a;return e.from(c)}};async function vs({fs:e,cache:t,gitdir:r,oid:n}){if(n===\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\")return{tree:er.from([]),oid:n};let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i===\"tag\")return n=pr.from(a).parse().object,vs({fs:e,cache:t,gitdir:r,oid:n});if(i===\"commit\")return n=tr.from(a).parse().tree,vs({fs:e,cache:t,gitdir:r,oid:n});if(i!==\"tree\")throw new Gt(n,i,\"tree\");return{tree:er.from(a),oid:n}}var vp=class{constructor({fs:t,gitdir:r,ref:n,cache:i}){this.fs=t,this.cache=i,this.gitdir=r,this.mapPromise=(async()=>{let s=new Map,o;try{o=await q.resolve({fs:t,gitdir:r,ref:n})}catch(l){l instanceof Ne&&(o=\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\")}let c=await vs({fs:t,cache:this.cache,gitdir:r,oid:o});return c.type=\"tree\",c.mode=\"40000\",s.set(\".\",c),s})();let a=this;this.ConstructEntry=class{constructor(o){this._fullpath=o,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return a.type(this)}async mode(){return a.mode(this)}async stat(){return a.stat(this)}async content(){return a.content(this)}async oid(){return a.oid(this)}}}async readdir(t){let r=t._fullpath,{fs:n,cache:i,gitdir:a}=this,s=await this.mapPromise,o=s.get(r);if(!o)throw new Error(`No obj for ${r}`);let c=o.oid;if(!c)throw new Error(`No oid for obj ${JSON.stringify(o)}`);if(o.type!==\"tree\")return null;let{type:l,object:u}=await qe({fs:n,cache:i,gitdir:a,oid:c});if(l!==o.type)throw new Gt(c,l,o.type);let f=er.from(u);for(let d of f)s.set($(r,d.path),d);return f.entries().map(d=>$(r,d.path))}async type(t){if(t._type===!1){let r=await this.mapPromise,{type:n}=r.get(t._fullpath);t._type=n}return t._type}async mode(t){if(t._mode===!1){let r=await this.mapPromise,{mode:n}=r.get(t._fullpath);t._mode=r2(parseInt(n,8))}return t._mode}async stat(t){}async content(t){if(t._content===!1){let r=await this.mapPromise,{fs:n,cache:i,gitdir:a}=this,o=r.get(t._fullpath).oid,{type:c,object:l}=await qe({fs:n,cache:i,gitdir:a,oid:o});c!==\"blob\"?t._content=void 0:t._content=new Uint8Array(l)}return t._content}async oid(t){if(t._oid===!1){let n=(await this.mapPromise).get(t._fullpath);t._oid=n.oid}return t._oid}};function wi({ref:e=\"HEAD\"}={}){let t=Object.create(null);return Object.defineProperty(t,pu,{value:function({fs:r,gitdir:n,cache:i}){return new vp({fs:r,gitdir:n,ref:e,cache:i})}}),Object.freeze(t),t}var yp=class{constructor({fs:t,dir:r,gitdir:n,cache:i}){this.fs=t,this.cache=i,this.dir=r,this.gitdir=n;let a=this;this.ConstructEntry=class{constructor(o){this._fullpath=o,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return a.type(this)}async mode(){return a.mode(this)}async stat(){return a.stat(this)}async content(){return a.content(this)}async oid(){return a.oid(this)}}}async readdir(t){let r=t._fullpath,{fs:n,dir:i}=this,a=await n.readdir($(i,r));return a===null?null:a.map(s=>$(r,s))}async type(t){return t._type===!1&&await t.stat(),t._type}async mode(t){return t._mode===!1&&await t.stat(),t._mode}async stat(t){if(t._stat===!1){let{fs:r,dir:n}=this,i=await r.lstat(`${n}/${t._fullpath}`);if(!i)throw new Error(`ENOENT: no such file or directory, lstat '${t._fullpath}'`);let a=i.isDirectory()?\"tree\":\"blob\";a===\"blob\"&&!i.isFile()&&!i.isSymbolicLink()&&(a=\"special\"),t._type=a,i=us(i),t._mode=i.mode,i.size===-1&&t._actualSize&&(i.size=t._actualSize),t._stat=i}return t._stat}async content(t){if(t._content===!1){let{fs:r,dir:n,gitdir:i}=this;if(await t.type()===\"tree\")t._content=void 0;else{let s=await(await We.get({fs:r,gitdir:i})).get(\"core.autocrlf\"),o=await r.read(`${n}/${t._fullpath}`,{autocrlf:s});t._actualSize=o.length,t._stat&&t._stat.size===-1&&(t._stat.size=t._actualSize),t._content=new Uint8Array(o)}}return t._content}async oid(t){if(t._oid===!1){let{fs:r,gitdir:n,cache:i}=this,a;await mt.acquire({fs:r,gitdir:n,cache:i},async function(s){let o=s.entriesMap.get(t._fullpath),c=await t.stat(),u=await(await We.get({fs:r,gitdir:n})).get(\"core.filemode\"),f=typeof process!=\"undefined\"?process.platform!==\"win32\":!0;!o||ru(c,o,u,f)?await t.content()===void 0?a=void 0:(a=await Gn(_i.wrap({type:\"blob\",object:await t.content()})),o&&a===o.oid&&(!u||c.mode===o.mode)&&ru(c,o,u,f)&&s.insert({filepath:t._fullpath,stats:c,oid:a})):a=o.oid}),t._oid=a}return t._oid}};function gu(){let e=Object.create(null);return Object.defineProperty(e,pu,{value:function({fs:t,dir:r,gitdir:n,cache:i}){return new yp({fs:t,dir:r,gitdir:n,cache:i})}}),Object.freeze(e),e}function GM(e,t){let r=t-e;return Array.from({length:r},(n,i)=>e+i)}var l2=typeof Array.prototype.flat==\"undefined\"?e=>e.reduce((t,r)=>t.concat(r),[]):e=>e.flat(),wp=class{constructor(){this.value=null}consider(t){t!=null&&(this.value===null?this.value=t:t<this.value&&(this.value=t))}reset(){this.value=null}};function*zM(e){let t=new wp,r,n=[],i=e.length;for(let a=0;a<i;a++)n[a]=e[a].next().value,n[a]!==void 0&&t.consider(n[a]);if(t.value!==null)for(;;){let a=[];r=t.value,t.reset();for(let s=0;s<i;s++)n[s]!==void 0&&n[s]===r?(a[s]=n[s],n[s]=e[s].next().value):a[s]=null,n[s]!==void 0&&t.consider(n[s]);if(yield a,t.value===null)return}}async function ys({fs:e,cache:t,dir:r,gitdir:n,trees:i,map:a=async(c,l)=>l,reduce:s=async(c,l)=>{let u=l2(l);return c!==void 0&&u.unshift(c),u},iterate:o=(c,l)=>Promise.all([...l].map(c))}){let c=i.map(h=>h[pu]({fs:e,dir:r,gitdir:n,cache:t})),l=new Array(c.length).fill(\".\"),u=GM(0,c.length),f=async h=>{u.map(v=>{h[v]=h[v]&&new c[v].ConstructEntry(h[v])});let m=(await Promise.all(u.map(v=>h[v]?c[v].readdir(h[v]):[]))).map(v=>v===null?[]:v).map(v=>v[Symbol.iterator]());return{entries:h,children:zM(m)}},d=async h=>{let{entries:p,children:m}=await f(h),v=p.find(b=>b&&b._fullpath)._fullpath,y=await a(v,p);if(y!==null){let b=await o(d,m);return b=b.filter(x=>x!==void 0),s(y,b)}};return d(l)}async function bp(e,t){let r=await e.readdir(t);r==null?await e.rm(t):r.length?await Promise.all(r.map(n=>{let i=$(t,n);return e.lstat(i).then(a=>{if(a)return a.isDirectory()?bp(e,i):e.rm(i)})})).then(()=>e.rmdir(t)):await e.rmdir(t)}function VM(e){return WM(e)&&Hw(e.then)&&Hw(e.catch)}function WM(e){return e&&typeof e==\"object\"}function Hw(e){return typeof e==\"function\"}function Uw(e){return VM((r=>{try{return r.readFile().catch(n=>n)}catch(n){return n}})(e))}var Gw=[\"readFile\",\"writeFile\",\"mkdir\",\"rmdir\",\"unlink\",\"stat\",\"lstat\",\"readdir\",\"readlink\",\"symlink\"];function zw(e,t){if(Uw(t))for(let r of Gw)e[`_${r}`]=t[r].bind(t);else for(let r of Gw)e[`_${r}`]=(0,tu.default)(t[r].bind(t));Uw(t)?t.rm?e._rm=t.rm.bind(t):t.rmdir.length>1?e._rm=t.rmdir.bind(t):e._rm=bp.bind(null,e):t.rm?e._rm=(0,tu.default)(t.rm.bind(t)):t.rmdir.length>2?e._rm=(0,tu.default)(t.rmdir.bind(t)):e._rm=bp.bind(null,e)}var X=class{constructor(t){if(typeof t._original_unwrapped_fs!=\"undefined\")return t;let r=Object.getOwnPropertyDescriptor(t,\"promises\");r&&r.enumerable?zw(this,t.promises):zw(this,t),this._original_unwrapped_fs=t}async exists(t,r={}){try{return await this._stat(t),!0}catch(n){if(n.code===\"ENOENT\"||n.code===\"ENOTDIR\")return!1;throw console.log('\"FileSystem.exists()\"函数中出现未经处理的错误',n),n}}async read(t,r={}){try{let n=await this._readFile(t,r);if(r.autocrlf===\"true\")try{n=new TextDecoder(\"utf8\",{fatal:!0}).decode(n),n=n.replace(/\\r\\n/g,`\n`),n=new TextEncoder().encode(n)}catch(i){}return typeof n!=\"string\"&&(n=Buffer.from(n)),n}catch(n){return null}}async write(t,r,n={}){try{await this._writeFile(t,r,n);return}catch(i){await this.mkdir(fs(t)),await this._writeFile(t,r,n)}}async mkdir(t,r=!1){try{await this._mkdir(t);return}catch(n){if(n===null||n.code===\"EEXIST\")return;if(r)throw n;if(n.code===\"ENOENT\"){let i=fs(t);if(i===\".\"||i===\"/\"||i===t)throw n;await this.mkdir(i),await this.mkdir(t,!0)}}}async rm(t){try{await this._unlink(t)}catch(r){if(r.code!==\"ENOENT\")throw r}}async rmdir(t,r){try{r&&r.recursive?await this._rm(t,r):await this._rmdir(t)}catch(n){if(n.code!==\"ENOENT\")throw n}}async readdir(t){try{let r=await this._readdir(t);return r.sort(hu),r}catch(r){return r.code===\"ENOTDIR\"?null:[]}}async readdirDeep(t){let r=await this._readdir(t);return(await Promise.all(r.map(async i=>{let a=t+\"/\"+i;return(await this._stat(a)).isDirectory()?this.readdirDeep(a):a}))).reduce((i,a)=>i.concat(a),[])}async lstat(t){try{return await this._lstat(t)}catch(r){if(r.code===\"ENOENT\")return null;throw r}}async readlink(t,r={encoding:\"buffer\"}){try{let n=await this._readlink(t,r);return Buffer.isBuffer(n)?n:Buffer.from(n)}catch(n){if(n.code===\"ENOENT\")return null;throw n}}async writelink(t,r){return this._symlink(r.toString(\"utf8\"),t)}};function C(e,t){if(t===void 0)throw new Qt(e)}async function lu(e,t){return!e&&!t?!1:e&&!t||!e&&t?!0:!(await e.type()===\"tree\"&&await t.type()===\"tree\"||await e.type()===await t.type()&&await e.mode()===await t.mode()&&await e.oid()===await t.oid())}async function qM({fs:e,dir:t,gitdir:r=$(t,\".git\"),commit:n=\"HEAD\",cache:i={}}){try{C(\"fs\",e),C(\"dir\",t),C(\"gitdir\",r);let a=new X(e),s=[wi({ref:n}),gu(),mu()],o=[];await mt.acquire({fs:a,gitdir:r,cache:i},async function(l){o=l.unmergedPaths});let c=await ys({fs:a,cache:i,dir:t,gitdir:r,trees:s,map:async function(l,[u,f,d]){let h=!await lu(f,d),p=o.includes(l),m=!await lu(d,u);if(h||p)return u?{path:l,mode:await u.mode(),oid:await u.oid(),type:await u.type(),content:await u.content()}:void 0;if(m)return!1;throw new hl(l)}});await mt.acquire({fs:a,gitdir:r,cache:i},async function(l){for(let u of c)if(u!==!1){if(!u){await a.rmdir(`${t}/${u.path}`,{recursive:!0}),l.delete({filepath:u.path});continue}if(u.type===\"blob\"){let f=new TextDecoder().decode(u.content);await a.write(`${t}/${u.path}`,f,{mode:u.mode}),l.insert({filepath:u.path,oid:u.oid,stage:0})}}})}catch(a){throw a.caller=\"git.abortMerge\",a}}var ws=class{static async isIgnored({fs:t,dir:r,gitdir:n=$(r,\".git\"),filepath:i}){if(nu(i)===\".git\")return!0;if(i===\".\")return!1;let a=\"\",s=$(n,\"info\",\"exclude\");await t.exists(s)&&(a=await t.read(s,\"utf8\"));let o=[{gitignore:$(r,\".gitignore\"),filepath:i}],c=i.split(\"/\").filter(Boolean);for(let u=1;u<c.length;u++){let f=c.slice(0,u).join(\"/\"),d=c.slice(u).join(\"/\");o.push({gitignore:$(r,f,\".gitignore\"),filepath:d})}let l=!1;for(let u of o){let f;try{f=await t.read(u.gitignore,\"utf8\")}catch(p){if(p.code===\"NOENT\")continue}let d=(0,Qw.default)().add(a);d.add(f);let h=fs(u.filepath);if(h!==\".\"&&d.ignores(h))return!0;l?l=!d.test(u.filepath).unignored:l=d.test(u.filepath).ignored}return l}};async function YM({fs:e,gitdir:t,object:r,format:n,oid:i}){if(n!==\"deflated\")throw new le(\"GitObjectStoreLoose expects objects to write to be in deflated format\");let a=`objects/${i.slice(0,2)}/${i.slice(2)}`,s=`${t}/${a}`;await e.exists(s)||await e.write(s,r)}var sp=null;async function c2(e){return sp===null&&(sp=ZM()),sp?XM(e):du.default.deflate(e)}async function XM(e){let t=new CompressionStream(\"deflate\"),r=new Blob([e]).stream().pipeThrough(t);return new Uint8Array(await new Response(r).arrayBuffer())}function ZM(){try{return new CompressionStream(\"deflate\").writable.close(),new Blob([]).stream().cancel(),!0}catch(e){return!1}}async function mr({fs:e,gitdir:t,type:r,object:n,format:i=\"content\",oid:a=void 0,dryRun:s=!1}){return i!==\"deflated\"&&(i!==\"wrapped\"&&(n=_i.wrap({type:r,object:n})),a=await Gn(n),n=Buffer.from(await c2(n))),s||await YM({fs:e,gitdir:t,object:n,format:\"deflated\",oid:a}),a}function KM(e){let t;for(;~(t=e.indexOf(92));)e[t]=47;return e}async function JM({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,cache:i={},force:a=!1,parallel:s=!0}){try{C(\"fs\",e),C(\"dir\",t),C(\"gitdir\",r),C(\"filepath\",n);let o=new X(e);await mt.acquire({fs:o,gitdir:r,cache:i},async c=>_p({dir:t,gitdir:r,fs:o,filepath:n,index:c,force:a,parallel:s}))}catch(o){throw o.caller=\"git.add\",o}}async function _p({dir:e,gitdir:t,fs:r,filepath:n,index:i,force:a,parallel:s}){n=Array.isArray(n)?n:[n];let o=n.map(async f=>{if(!a&&await ws.isIgnored({fs:r,dir:e,gitdir:t,filepath:f}))return;let d=await r.lstat($(e,f));if(!d)throw new Ne(f);if(d.isDirectory()){let h=await r.readdir($(e,f));if(s){let p=h.map(m=>_p({dir:e,gitdir:t,fs:r,filepath:[$(f,m)],index:i,force:a,parallel:s}));await Promise.all(p)}else for(let p of h)await _p({dir:e,gitdir:t,fs:r,filepath:[$(f,p)],index:i,force:a,parallel:s})}else{let p=await(await We.get({fs:r,gitdir:t})).get(\"core.autocrlf\"),m=d.isSymbolicLink()?await r.readlink($(e,f)).then(KM):await r.read($(e,f),{autocrlf:p});if(m===null)throw new Ne(f);let v=await mr({fs:r,gitdir:t,type:\"blob\",object:m});i.insert({filepath:f,stats:d,oid:v})}}),c=await Promise.allSettled(o),l=c.filter(f=>f.status===\"rejected\").map(f=>f.reason);if(l.length>1)throw new cl(l);if(l.length===1)throw l[0];return c.filter(f=>f.status===\"fulfilled\"&&f.value).map(f=>f.value)}async function ml({fs:e,gitdir:t,path:r}){return(await We.get({fs:e,gitdir:t})).get(r)}function u2(e,...t){for(let r of t)if(r)for(let n of Object.keys(r)){let i=r[n];i!==void 0&&(e[n]=i)}return e}async function ca({fs:e,gitdir:t,author:r,commit:n}){let i=Math.floor(Date.now()/1e3),a={name:await ml({fs:e,gitdir:t,path:\"user.name\"}),email:await ml({fs:e,gitdir:t,path:\"user.email\"})||\"\",timestamp:i,timezoneOffset:new Date(i*1e3).getTimezoneOffset()},s=u2({},a,n?n.author:void 0,r);if(s.name!==void 0)return s}async function bs({fs:e,gitdir:t,author:r,committer:n,commit:i}){let a=Math.floor(Date.now()/1e3),s={name:await ml({fs:e,gitdir:t,path:\"user.name\"}),email:await ml({fs:e,gitdir:t,path:\"user.email\"})||\"\",timestamp:a,timezoneOffset:new Date(a*1e3).getTimezoneOffset()},o=u2({},s,i?i.committer:void 0,r,n);if(o.name!==void 0)return o}async function f2({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i===\"tag\")return n=pr.from(a).parse().object,f2({fs:e,cache:t,gitdir:r,oid:n});if(i!==\"commit\")throw new Gt(n,i,\"commit\");return{commit:tr.from(a),oid:n}}async function cu({fs:e,cache:t,gitdir:r,oid:n}){let{commit:i,oid:a}=await f2({fs:e,cache:t,gitdir:r,oid:n});return{oid:a,commit:i.parse(),payload:i.withoutSignature()}}async function vu({fs:e,cache:t,onSign:r,gitdir:n,message:i,author:a,committer:s,signingKey:o,amend:c=!1,dryRun:l=!1,noUpdateBranch:u=!1,ref:f,parent:d,tree:h}){let p=!1;f||(f=await q.resolve({fs:e,gitdir:n,ref:\"HEAD\",depth:2}));let m,v;try{m=await q.resolve({fs:e,gitdir:n,ref:f}),v=await cu({fs:e,gitdir:n,oid:m,cache:{}})}catch(x){p=!0}if(c&&p)throw new pl(f);let y=c?await ca({fs:e,gitdir:n,author:a,commit:v.commit}):await ca({fs:e,gitdir:n,author:a});if(!y)throw new zt(\"author\");let b=c?await bs({fs:e,gitdir:n,author:y,committer:s,commit:v.commit}):await bs({fs:e,gitdir:n,author:y,committer:s});if(!b)throw new zt(\"committer\");return mt.acquire({fs:e,gitdir:n,cache:t,allowUnmerged:!1},async function(x){let _=i2(x.entries).get(\".\");if(h||(h=await d2({fs:e,gitdir:n,inode:_,dryRun:l})),d?d=await Promise.all(d.map(A=>q.resolve({fs:e,gitdir:n,ref:A}))):c?d=v.commit.parent:d=m?[m]:[],!i)if(c)i=v.commit.message;else throw new Qt(\"message\");let k=tr.from({tree:h,parent:d,author:y,committer:b,message:i});o&&(k=await tr.sign(k,r,o));let w=await mr({fs:e,gitdir:n,type:\"commit\",object:k.toObject(),dryRun:l});return!u&&!l&&await q.writeRef({fs:e,gitdir:n,ref:f,value:w}),w})}async function d2({fs:e,gitdir:t,inode:r,dryRun:n}){let i=r.children;for(let c of i)c.type===\"tree\"&&(c.metadata.mode=\"040000\",c.metadata.oid=await d2({fs:e,gitdir:t,inode:c,dryRun:n}));let a=i.map(c=>({mode:c.metadata.mode,path:c.basename,oid:c.metadata.oid,type:c.type})),s=er.from(a);return await mr({fs:e,gitdir:t,type:\"tree\",object:s.toObject(),dryRun:n})}async function vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i}){if(i.startsWith(\"/\"))throw new xi(\"leading-slash\");if(i.endsWith(\"/\"))throw new xi(\"trailing-slash\");let a=n,s=await vs({fs:e,cache:t,gitdir:r,oid:n}),o=s.tree;if(i===\"\")n=s.oid;else{let c=i.split(\"/\");n=await h2({fs:e,cache:t,gitdir:r,tree:o,pathArray:c,oid:a,filepath:i})}return n}async function h2({fs:e,cache:t,gitdir:r,tree:n,pathArray:i,oid:a,filepath:s}){let o=i.shift();for(let c of n)if(c.path===o){if(i.length===0)return c.oid;{let{type:l,object:u}=await qe({fs:e,cache:t,gitdir:r,oid:c.oid});if(l!==\"tree\")throw new Gt(a,l,\"tree\",s);return n=er.from(u),h2({fs:e,cache:t,gitdir:r,tree:n,pathArray:i,oid:a,filepath:s})}}throw new Ne(`file or directory found at \"${a}:${s}\"`)}async function Ss({fs:e,cache:t,gitdir:r,oid:n,filepath:i=void 0}){i!==void 0&&(n=await vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i}));let{tree:a,oid:s}=await vs({fs:e,cache:t,gitdir:r,oid:n});return{oid:s,tree:a.entries()}}async function Ap({fs:e,gitdir:t,tree:r}){let n=er.from(r).toObject();return await mr({fs:e,gitdir:t,type:\"tree\",object:n,format:\"content\"})}async function QM({fs:e,cache:t,onSign:r,gitdir:n,ref:i,oid:a,note:s,force:o,author:c,committer:l,signingKey:u}){let f;try{f=await q.resolve({gitdir:n,fs:e,ref:i})}catch(y){if(!(y instanceof Ne))throw y}let h=(await Ss({fs:e,cache:t,gitdir:n,oid:f||\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"})).tree;if(o)h=h.filter(y=>y.path!==a);else for(let y of h)if(y.path===a)throw new Qr(\"note\",a);typeof s==\"string\"&&(s=Buffer.from(s,\"utf8\"));let p=await mr({fs:e,gitdir:n,type:\"blob\",object:s,format:\"content\"});h.push({mode:\"100644\",path:a,oid:p,type:\"blob\"});let m=await Ap({fs:e,gitdir:n,tree:h});return await vu({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tree:m,parent:f&&[f],message:`Note added by 'isomorphic-git addNote'\n`,author:c,committer:l,signingKey:u})}async function eO({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),ref:i=\"refs/notes/commits\",oid:a,note:s,force:o,author:c,committer:l,signingKey:u,cache:f={}}){try{C(\"fs\",e),C(\"gitdir\",n),C(\"oid\",a),C(\"note\",s),u&&C(\"onSign\",t);let d=new X(e),h=await ca({fs:d,gitdir:n,author:c});if(!h)throw new zt(\"author\");let p=await bs({fs:d,gitdir:n,author:h,committer:l});if(!p)throw new zt(\"committer\");return await QM({fs:new X(d),cache:f,onSign:t,gitdir:n,ref:i,oid:a,note:s,force:o,author:h,committer:p,signingKey:u})}catch(d){throw d.caller=\"git.addNote\",d}}async function p2({fs:e,gitdir:t,remote:r,url:n,force:i}){if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let a=await We.get({fs:e,gitdir:t});if(!i&&(await a.getSubsections(\"remote\")).includes(r)&&n!==await a.get(`remote.${r}.url`))throw new Qr(\"remote\",r);await a.set(`remote.${r}.url`,n),await a.set(`remote.${r}.fetch`,`+refs/heads/*:refs/remotes/${r}/*`),await We.save({fs:e,gitdir:t,config:a})}async function tO({fs:e,dir:t,gitdir:r=$(t,\".git\"),remote:n,url:i,force:a=!1}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"remote\",n),C(\"url\",i),await p2({fs:new X(e),gitdir:r,remote:n,url:i,force:a})}catch(s){throw s.caller=\"git.addRemote\",s}}async function rO({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tagger:a,message:s=i,gpgsig:o,object:c,signingKey:l,force:u=!1}){if(i=i.startsWith(\"refs/tags/\")?i:`refs/tags/${i}`,!u&&await q.exists({fs:e,gitdir:n,ref:i}))throw new Qr(\"tag\",i);let f=await q.resolve({fs:e,gitdir:n,ref:c||\"HEAD\"}),{type:d}=await qe({fs:e,cache:t,gitdir:n,oid:f}),h=pr.from({object:f,type:d,tag:i.replace(\"refs/tags/\",\"\"),tagger:a,message:s,gpgsig:o});l&&(h=await pr.sign(h,r,l));let p=await mr({fs:e,gitdir:n,type:\"tag\",object:h.toObject()});await q.writeRef({fs:e,gitdir:n,ref:i,value:p})}async function nO({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),ref:i,tagger:a,message:s=i,gpgsig:o,object:c,signingKey:l,force:u=!1,cache:f={}}){try{C(\"fs\",e),C(\"gitdir\",n),C(\"ref\",i),l&&C(\"onSign\",t);let d=new X(e),h=await ca({fs:d,gitdir:n,author:a});if(!h)throw new zt(\"tagger\");return await rO({fs:d,cache:f,onSign:t,gitdir:n,ref:i,tagger:h,message:s,gpgsig:o,object:c,signingKey:l,force:u})}catch(d){throw d.caller=\"git.annotatedTag\",d}}async function iO({fs:e,gitdir:t,ref:r,object:n,checkout:i=!1,force:a=!1}){if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let s=`refs/heads/${r}`;if(!a&&await q.exists({fs:e,gitdir:t,ref:s}))throw new Qr(\"branch\",r,!1);let o;try{o=await q.resolve({fs:e,gitdir:t,ref:n||\"HEAD\"})}catch(c){}o&&await q.writeRef({fs:e,gitdir:t,ref:s,value:o}),i&&await q.writeSymbolicRef({fs:e,gitdir:t,ref:\"HEAD\",value:s})}async function aO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,object:i,checkout:a=!1,force:s=!1}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),await iO({fs:new X(e),gitdir:r,ref:n,object:i,checkout:a,force:s})}catch(o){throw o.caller=\"git.branch\",o}}var m2=(e,t)=>e===\".\"||t==null||t.length===0||t===\".\"?!0:t.length>=e.length?t.startsWith(e):e.startsWith(t);async function kp({fs:e,cache:t,onProgress:r,onPostCheckout:n,dir:i,gitdir:a,remote:s,ref:o,filepaths:c,noCheckout:l,noUpdateHead:u,dryRun:f,force:d,track:h=!0}){let p;if(n)try{p=await q.resolve({fs:e,gitdir:a,ref:\"HEAD\"})}catch(v){p=\"0000000000000000000000000000000000000000\"}let m;try{m=await q.resolve({fs:e,gitdir:a,ref:o})}catch(v){if(o===\"HEAD\")throw v;let y=`${s}/${o}`;if(m=await q.resolve({fs:e,gitdir:a,ref:y}),h){let b=await We.get({fs:e,gitdir:a});await b.set(`branch.${o}.remote`,s),await b.set(`branch.${o}.merge`,`refs/heads/${o}`),await We.save({fs:e,gitdir:a,config:b})}await q.writeRef({fs:e,gitdir:a,ref:`refs/heads/${o}`,value:m})}if(!l){let v;try{v=await sO({fs:e,cache:t,onProgress:r,dir:i,gitdir:a,ref:o,force:d,filepaths:c})}catch(_){throw _ instanceof Ne&&_.data.what===m?new il(o,m):_}let y=v.filter(([_])=>_===\"conflict\").map(([_,k])=>k);if(y.length>0)throw new nl(y);let b=v.filter(([_])=>_===\"error\").map(([_,k])=>k);if(b.length>0)throw new le(b.join(\", \"));if(f){n&&await n({previousHead:p,newHead:m,type:c!=null&&c.length>0?\"file\":\"branch\"});return}let x=0,E=v.length;await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){await Promise.all(v.filter(([k])=>k===\"delete\"||k===\"delete-index\").map(async function([k,w]){let A=`${i}/${w}`;k===\"delete\"&&await e.rm(A),_.delete({filepath:w}),r&&await r({phase:\"Updating workdir\",loaded:++x,total:E})}))}),await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){for(let[k,w]of v)if(k===\"rmdir\"||k===\"rmdir-index\"){let A=`${i}/${w}`;try{k===\"rmdir-index\"&&_.delete({filepath:w}),await e.rmdir(A),r&&await r({phase:\"Updating workdir\",loaded:++x,total:E})}catch(S){if(S.code===\"ENOTEMPTY\")console.log(`Did not delete ${w} because directory is not empty`);else throw S}}}),await Promise.all(v.filter(([_])=>_===\"mkdir\"||_===\"mkdir-index\").map(async function([_,k]){let w=`${i}/${k}`;await e.mkdir(w),r&&await r({phase:\"Updating workdir\",loaded:++x,total:E})})),await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){await Promise.all(v.filter(([k])=>k===\"create\"||k===\"create-index\"||k===\"update\"||k===\"mkdir-index\").map(async function([k,w,A,S,T]){let P=`${i}/${w}`;try{if(k!==\"create-index\"&&k!==\"mkdir-index\"){let{object:j}=await qe({fs:e,cache:t,gitdir:a,oid:A});if(T&&await e.rm(P),S===33188)await e.write(P,j);else if(S===33261)await e.write(P,j,{mode:511});else if(S===40960)await e.writelink(P,j);else throw new le(`Invalid mode 0o${S.toString(8)} detected in blob ${A}`)}let O=await e.lstat(P);S===33261&&(O.mode=493),k===\"mkdir-index\"&&(O.mode=57344),_.insert({filepath:w,stats:O,oid:A}),r&&await r({phase:\"Updating workdir\",loaded:++x,total:E})}catch(O){console.log(O)}}))}),n&&await n({previousHead:p,newHead:m,type:c!=null&&c.length>0?\"file\":\"branch\"})}if(!u){let v=await q.expand({fs:e,gitdir:a,ref:o});v.startsWith(\"refs/heads\")?await q.writeSymbolicRef({fs:e,gitdir:a,ref:\"HEAD\",value:v}):await q.writeRef({fs:e,gitdir:a,ref:\"HEAD\",value:m})}}async function sO({fs:e,cache:t,onProgress:r,dir:n,gitdir:i,ref:a,force:s,filepaths:o}){let c=0;return ys({fs:e,cache:t,dir:n,gitdir:i,trees:[wi({ref:a}),gu(),mu()],map:async function(l,[u,f,d]){if(l===\".\")return;if(o&&!o.some(p=>m2(l,p)))return null;switch(r&&await r({phase:\"Analyzing workdir\",loaded:++c}),[!!d,!!u,!!f].map(Number).join(\"\")){case\"000\":return;case\"001\":return s&&o&&o.includes(l)?[\"delete\",l]:void 0;case\"010\":switch(await u.type()){case\"tree\":return[\"mkdir\",l];case\"blob\":return[\"create\",l,await u.oid(),await u.mode()];case\"commit\":return[\"mkdir-index\",l,await u.oid(),await u.mode()];default:return[\"error\",`new entry Unhandled type ${await u.type()}`]}case\"011\":switch(`${await u.type()}-${await f.type()}`){case\"tree-tree\":return;case\"tree-blob\":case\"blob-tree\":return[\"conflict\",l];case\"blob-blob\":return await u.oid()!==await f.oid()?s?[\"update\",l,await u.oid(),await u.mode(),await u.mode()!==await f.mode()]:[\"conflict\",l]:await u.mode()!==await f.mode()?s?[\"update\",l,await u.oid(),await u.mode(),!0]:[\"conflict\",l]:[\"create-index\",l,await u.oid(),await u.mode()];case\"commit-tree\":return;case\"commit-blob\":return[\"conflict\",l];default:return[\"error\",`new entry Unhandled type ${u.type}`]}case\"100\":return[\"delete-index\",l];case\"101\":switch(await d.type()){case\"tree\":return[\"rmdir\",l];case\"blob\":return await d.oid()!==await f.oid()?s?[\"delete\",l]:[\"conflict\",l]:[\"delete\",l];case\"commit\":return[\"rmdir-index\",l];default:return[\"error\",`delete entry Unhandled type ${await d.type()}`]}case\"110\":case\"111\":switch(`${await d.type()}-${await u.type()}`){case\"tree-tree\":return;case\"blob-blob\":{if(await d.oid()===await u.oid()&&await d.mode()===await u.mode()&&!s)return;if(f){if(await f.oid()!==await d.oid()&&await f.oid()!==await u.oid())return s?[\"update\",l,await u.oid(),await u.mode(),await u.mode()!==await f.mode()]:[\"conflict\",l]}else if(s)return[\"update\",l,await u.oid(),await u.mode(),await u.mode()!==await d.mode()];return await u.mode()!==await d.mode()?[\"update\",l,await u.oid(),await u.mode(),!0]:await u.oid()!==await d.oid()?[\"update\",l,await u.oid(),await u.mode(),!1]:void 0}case\"tree-blob\":return[\"update-dir-to-blob\",l,await u.oid()];case\"blob-tree\":return[\"update-blob-to-tree\",l];case\"commit-commit\":return[\"mkdir-index\",l,await u.oid(),await u.mode()];default:return[\"error\",`update entry Unhandled type ${await d.type()}-${await u.type()}`]}}},reduce:async function(l,u){return u=l2(u),l?l&&l[0]===\"rmdir\"?(u.push(l),u):(u.unshift(l),u):u}})}async function oO({fs:e,onProgress:t,onPostCheckout:r,dir:n,gitdir:i=$(n,\".git\"),remote:a=\"origin\",ref:s,filepaths:o,noCheckout:c=!1,noUpdateHead:l=s===void 0,dryRun:u=!1,force:f=!1,track:d=!0,cache:h={}}){try{C(\"fs\",e),C(\"dir\",n),C(\"gitdir\",i);let p=s||\"HEAD\";return await kp({fs:new X(e),cache:h,onProgress:t,onPostCheckout:r,dir:n,gitdir:i,remote:a,ref:p,filepaths:o,noCheckout:c,noUpdateHead:l,dryRun:u,force:f,track:d})}catch(p){throw p.caller=\"git.checkout\",p}}var lO=new RegExp(\"^refs/(heads/|tags/|remotes/)?(.*)\");function oa(e){let t=lO.exec(e);return t?t[1]===\"remotes/\"&&e.endsWith(\"/HEAD\")?t[2].slice(0,-5):t[2]:e}async function fa({fs:e,gitdir:t,fullname:r=!1,test:n=!1}){let i=await q.resolve({fs:e,gitdir:t,ref:\"HEAD\",depth:2});if(n)try{await q.resolve({fs:e,gitdir:t,ref:i})}catch(a){return}if(i.startsWith(\"refs/\"))return r?i:oa(i)}function cO(e){return e=e.replace(/^git@([^:]+):/,\"https://$1/\"),e=e.replace(/^ssh:\\/\\//,\"https://\"),e}function g2({username:e=\"\",password:t=\"\"}){return`Basic ${Buffer.from(`${e}:${t}`).toString(\"base64\")}`}async function yl(e,t){let r=s2(e);for(;;){let{value:n,done:i}=await r.next();if(n&&await t(n),i)break}r.return&&r.return()}async function uu(e){let t=0,r=[];await yl(e,a=>{r.push(a),t+=a.byteLength});let n=new Uint8Array(t),i=0;for(let a of r)n.set(a,i),i+=a.byteLength;return n}function Vw(e){let t=e.match(/^https?:\\/\\/([^/]+)@/);if(t==null)return{url:e,auth:{}};t=t[1];let[r,n]=t.split(\":\");return e=e.replace(`${t}@`,\"\"),{url:e,auth:{username:r,password:n}}}function xp(e,t){let r=t.toString(16);return\"0\".repeat(e-r.length)+r}var Ve=class{static flush(){return Buffer.from(\"0000\",\"utf8\")}static delim(){return Buffer.from(\"0001\",\"utf8\")}static encode(t){typeof t==\"string\"&&(t=Buffer.from(t));let r=t.length+4,n=xp(4,r);return Buffer.concat([Buffer.from(n,\"utf8\"),t])}static streamReader(t){let r=new su(t);return async function(){try{let i=await r.read(4);if(i==null)return!0;if(i=parseInt(i.toString(\"utf8\"),16),i===0||i===1)return null;let a=await r.read(i-4);return a==null?!0:a}catch(i){return t.error=i,!0}}}};async function Ww(e){let t={},r;for(;r=await e(),r!==!0;){if(r===null)continue;r=r.toString(\"utf8\").replace(/\\n$/,\"\");let n=r.indexOf(\"=\");if(n>-1){let i=r.slice(0,n),a=r.slice(n+1);t[i]=a}else t[r]=!0}return{protocolVersion:2,capabilities2:t}}async function qw(e,{service:t}){let r=new Set,n=new Map,i=new Map,a=Ve.streamReader(e),s=await a();for(;s===null;)s=await a();if(s===!0)throw new al;if(s.includes(\"version 2\"))return Ww(a);if(s.toString(\"utf8\").replace(/\\n$/,\"\")!==`# service=${t}`)throw new la(`# service=${t}\\\\n`,s.toString(\"utf8\"));let o=await a();for(;o===null;)o=await a();if(o===!0)return{capabilities:r,refs:n,symrefs:i};if(o=o.toString(\"utf8\"),o.includes(\"version 2\"))return Ww(a);let[c,l]=op(o,\"\\0\",\"\\\\x00\");if(l.split(\" \").map(u=>r.add(u)),c!==\"0000000000000000000000000000000000000000 capabilities^{}\"){let[u,f]=op(c,\" \",\" \");for(n.set(f,u);;){let d=await a();if(d===!0)break;if(d!==null){let[h,p]=op(d.toString(\"utf8\"),\" \",\" \");n.set(p,h)}}}for(let u of r)if(u.startsWith(\"symref=\")){let f=u.match(/symref=([^:]+):(.*)/);f.length===3&&i.set(f[1],f[2])}return{protocolVersion:1,capabilities:r,refs:n,symrefs:i}}function op(e,t,r){let n=e.trim().split(t);if(n.length!==2)throw new la(`Two strings separated by '${r}'`,e.toString(\"utf8\"));return n}var Yw=(e,t)=>e.endsWith(\"?\")?`${e}${t}`:`${e}/${t.replace(/^https?:\\/\\//,\"\")}`,Xw=(e,t)=>{(t.username||t.password)&&(e.Authorization=g2(t)),t.headers&&Object.assign(e,t.headers)},lp=async e=>{try{let t=Buffer.from(await uu(e.body)),r=t.toString(\"utf8\");return{preview:r.length<256?r:r.slice(0,256)+\"...\",response:r,data:t}}catch(t){return{}}},_s=class{static async capabilities(){return[\"discover\",\"connect\"]}static async discover({http:t,onProgress:r,onAuth:n,onAuthSuccess:i,onAuthFailure:a,corsProxy:s,service:o,url:c,headers:l,protocolVersion:u}){let{url:f,auth:d}=Vw(c),h=s?Yw(s,f):f;(d.username||d.password)&&(l.Authorization=g2(d)),u===2&&(l[\"Git-Protocol\"]=\"version=2\");let p,m,v=!1;do if(p=await t.request({onProgress:r,method:\"GET\",url:`${h}/info/refs?service=${o}`,headers:l}),m=!1,p.statusCode===401||p.statusCode===203){let y=v?a:n;if(y){if(d=await y(f,{...d,headers:{...l}}),d&&d.cancel)throw new gs;d&&(Xw(l,d),v=!0,m=!0)}}else p.statusCode===200&&v&&i&&await i(f,d);while(m);if(p.statusCode!==200){let{response:y}=await lp(p);throw new ds(p.statusCode,p.statusMessage,y)}if(p.headers[\"content-type\"]===`application/x-${o}-advertisement`){let y=await qw(p.body,{service:o});return y.auth=d,y}else{let{preview:y,response:b,data:x}=await lp(p);try{let E=await qw([x],{service:o});return E.auth=d,E}catch(E){throw new ul(y,b)}}}static async connect({http:t,onProgress:r,corsProxy:n,service:i,url:a,auth:s,body:o,headers:c}){let l=Vw(a);l&&(a=l.url),n&&(a=Yw(n,a)),c[\"content-type\"]=`application/x-${i}-request`,c.accept=`application/x-${i}-result`,Xw(c,s);let u=await t.request({onProgress:r,method:\"POST\",url:`${a}/${i}`,body:o,headers:c});if(u.statusCode!==200){let{response:f}=lp(u);throw new ds(u.statusCode,u.statusMessage,f)}return u}};function uO({url:e}){if(e.startsWith(\"git@\"))return{transport:\"ssh\",address:e};let t=e.match(/(\\w+)(:\\/\\/|::)(.*)/);if(t!==null){if(t[2]===\"://\")return{transport:t[1],address:t[0]};if(t[2]===\"::\")return{transport:t[1],address:t[3]}}}var xs=class{static getRemoteHelperFor({url:t}){let r=new Map;r.set(\"http\",_s),r.set(\"https\",_s);let n=uO({url:t});if(!n)throw new dl(t);if(r.has(n.transport))return r.get(n.transport);throw new fl(t,n.transport,n.transport===\"ssh\"?cO(t):void 0)}},sa=null,ua=class{static async read({fs:t,gitdir:r}){sa===null&&(sa=new Jo.default);let n=$(r,\"shallow\"),i=new Set;return await sa.acquire(n,async function(){let a=await t.read(n,{encoding:\"utf8\"});if(a===null||a.trim()===\"\")return i;a.trim().split(`\n`).map(s=>i.add(s))}),i}static async write({fs:t,gitdir:r,oids:n}){sa===null&&(sa=new Jo.default);let i=$(r,\"shallow\");if(n.size>0){let a=[...n].join(`\n`)+`\n`;await sa.acquire(i,async function(){await t.write(i,a,{encoding:\"utf8\"})})}else await sa.acquire(i,async function(){await t.rm(i)})}};async function fO({fs:e,gitdir:t,oid:r}){let n=`objects/${r.slice(0,2)}/${r.slice(2)}`;return e.exists(`${t}/${n}`)}async function dO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i}){let a=await e.readdir($(r,\"objects/pack\"));a=a.filter(s=>s.endsWith(\".idx\"));for(let s of a){let o=`${r}/objects/pack/${s}`,c=await Ep({fs:e,cache:t,filename:o,getExternalRefDelta:i});if(c.error)throw new le(c.error);if(c.offsets.has(n))return!0}return!1}async function Zw({fs:e,cache:t,gitdir:r,oid:n,format:i=\"content\"}){let a=o=>qe({fs:e,cache:t,gitdir:r,oid:o}),s=await fO({fs:e,gitdir:r,oid:n});return s||(s=await dO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:a})),s}function hO(e){let i=\"5041434b\"+\"00000002\"+\"00000000\";return e.slice(0,12).toString(\"hex\")===i}function v2(e,t){let r=e.map(n=>n.split(\"=\",1)[0]);return t.filter(n=>{let i=n.split(\"=\",1)[0];return r.includes(i)})}var yu={name:\"isomorphic-git\",version:\"1.27.1\",agent:\"git/isomorphic-git@1.27.1\"},ls=class{constructor(){this._queue=[]}write(t){if(this._ended)throw Error(\"You cannot write to a FIFO that has already been ended!\");if(this._waiting){let r=this._waiting;this._waiting=null,r({value:t})}else this._queue.push(t)}end(){if(this._ended=!0,this._waiting){let t=this._waiting;this._waiting=null,t({done:!0})}}destroy(t){this.error=t,this.end()}async next(){if(this._queue.length>0)return{value:this._queue.shift()};if(this._ended)return{done:!0};if(this._waiting)throw Error(\"You cannot call read until the previous call to read has returned!\");return new Promise(t=>{this._waiting=t})}};function pO(e){let t=e.indexOf(\"\\r\"),r=e.indexOf(`\n`);return t===-1&&r===-1?-1:t===-1?r+1:r===-1?t+1:r===t+1?r+1:Math.min(t,r)+1}function y2(e){let t=new ls,r=\"\";return(async()=>(await yl(e,n=>{for(n=n.toString(\"utf8\"),r+=n;;){let i=pO(r);if(i===-1)break;t.write(r.slice(0,i)),r=r.slice(i)}}),r.length>0&&t.write(r),t.end()))(),t}var fu=class{static demux(t){let r=Ve.streamReader(t),n=new ls,i=new ls,a=new ls,s=async function(){let o=await r();if(o===null)return s();if(o===!0){n.end(),a.end(),t.error?i.destroy(t.error):i.end();return}switch(o[0]){case 1:{i.write(o.slice(1));break}case 2:{a.write(o.slice(1));break}case 3:{let c=o.slice(1);a.write(c),n.end(),a.end(),i.destroy(new Error(c.toString(\"utf8\")));return}default:n.write(o)}s()};return s(),{packetlines:n,packfile:i,progress:a}}};async function mO(e){let{packetlines:t,packfile:r,progress:n}=fu.demux(e),i=[],a=[],s=[],o=!1,c=!1;return new Promise((l,u)=>{yl(t,f=>{let d=f.toString(\"utf8\").trim();if(d.startsWith(\"shallow\")){let h=d.slice(-41).trim();h.length!==40&&u(new bi(h)),i.push(h)}else if(d.startsWith(\"unshallow\")){let h=d.slice(-41).trim();h.length!==40&&u(new bi(h)),a.push(h)}else if(d.startsWith(\"ACK\")){let[,h,p]=d.split(\" \");s.push({oid:h,status:p}),p||(c=!0)}else d.startsWith(\"NAK\")?(o=!0,c=!0):(c=!0,o=!0);c&&(e.error?u(e.error):l({shallows:i,unshallows:a,acks:s,nak:o,packfile:r,progress:n}))}).finally(()=>{c||(e.error?u(e.error):l({shallows:i,unshallows:a,acks:s,nak:o,packfile:r,progress:n}))})})}function gO({capabilities:e=[],wants:t=[],haves:r=[],shallows:n=[],depth:i=null,since:a=null,exclude:s=[]}){let o=[];t=[...new Set(t)];let c=` ${e.join(\" \")}`;for(let l of t)o.push(Ve.encode(`want ${l}${c}\n`)),c=\"\";for(let l of n)o.push(Ve.encode(`shallow ${l}\n`));i!==null&&o.push(Ve.encode(`deepen ${i}\n`)),a!==null&&o.push(Ve.encode(`deepen-since ${Math.floor(a.valueOf()/1e3)}\n`));for(let l of s)o.push(Ve.encode(`deepen-not ${l}\n`));o.push(Ve.flush());for(let l of r)o.push(Ve.encode(`have ${l}\n`));return o.push(Ve.encode(`done\n`)),o}async function Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:c,ref:l,remoteRef:u,remote:f,url:d,corsProxy:h,depth:p=null,since:m=null,exclude:v=[],relative:y=!1,tags:b=!1,singleBranch:x=!1,headers:E={},prune:_=!1,pruneTags:k=!1}){let w=l||await fa({fs:e,gitdir:c,test:!0}),A=await We.get({fs:e,gitdir:c}),S=f||w&&await A.get(`branch.${w}.remote`)||\"origin\",T=d||await A.get(`remote.${S}.url`);if(typeof T==\"undefined\")throw new Qt(\"remote OR url\");let P=u||w&&await A.get(`branch.${w}.merge`)||l||\"HEAD\";h===void 0&&(h=await A.get(\"http.corsProxy\"));let O=xs.getRemoteHelperFor({url:T}),j=await O.discover({http:r,onAuth:a,onAuthSuccess:s,onAuthFailure:o,corsProxy:h,service:\"git-upload-pack\",url:T,headers:E,protocolVersion:1}),D=j.auth,Q=j.refs;if(Q.size===0)return{defaultBranch:null,fetchHead:null,fetchHeadDescription:null};if(p!==null&&!j.capabilities.has(\"shallow\"))throw new yi(\"shallow\",\"depth\");if(m!==null&&!j.capabilities.has(\"deepen-since\"))throw new yi(\"deepen-since\",\"since\");if(v.length>0&&!j.capabilities.has(\"deepen-not\"))throw new yi(\"deepen-not\",\"exclude\");if(y===!0&&!j.capabilities.has(\"deepen-relative\"))throw new yi(\"deepen-relative\",\"relative\");let{oid:de,fullref:ee}=q.resolveAgainstMap({ref:P,map:Q});for(let U of Q.keys())U===ee||U===\"HEAD\"||U.startsWith(\"refs/heads/\")||b&&U.startsWith(\"refs/tags/\")||Q.delete(U);let J=v2([...j.capabilities],[\"multi_ack_detailed\",\"no-done\",\"side-band-64k\",\"ofs-delta\",`agent=${yu.agent}`]);y&&J.push(\"deepen-relative\");let Pe=x?[de]:Q.values(),me=x?[w]:await q.listRefs({fs:e,gitdir:c,filepath:\"refs\"}),F=[];for(let U of me)try{U=await q.expand({fs:e,gitdir:c,ref:U});let Le=await q.resolve({fs:e,gitdir:c,ref:U});await Zw({fs:e,cache:t,gitdir:c,oid:Le})&&F.push(Le)}catch(Le){}F=[...new Set(F)];let G=await ua.read({fs:e,gitdir:c}),N=j.capabilities.has(\"shallow\")?[...G]:[],Me=gO({capabilities:J,wants:Pe,haves:F,shallows:N,depth:p,since:m,exclude:v}),Dt=Buffer.from(await uu(Me)),_t=await O.connect({http:r,onProgress:n,corsProxy:h,service:\"git-upload-pack\",url:T,auth:D,body:[Dt],headers:E}),Ee=await mO(_t.body);_t.headers&&(Ee.headers=_t.headers);for(let U of Ee.shallows)if(!G.has(U))try{let{object:Le}=await qe({fs:e,cache:t,gitdir:c,oid:U}),L=new tr(Le),Y=await Promise.all(L.headers().parent.map(De=>Zw({fs:e,cache:t,gitdir:c,oid:De})));Y.length===0||Y.every(De=>De)||G.add(U)}catch(Le){G.add(U)}for(let U of Ee.unshallows)G.delete(U);if(await ua.write({fs:e,gitdir:c,oids:G}),x){let U=new Map([[ee,de]]),Le=new Map,L=10,Y=ee;for(;L--;){let vt=j.symrefs.get(Y);if(vt===void 0)break;Le.set(Y,vt),Y=vt}let ye=Q.get(Y);ye&&U.set(Y,ye);let{pruned:De}=await q.updateRemoteRefs({fs:e,gitdir:c,remote:S,refs:U,symrefs:Le,tags:b,prune:_});_&&(Ee.pruned=De)}else{let{pruned:U}=await q.updateRemoteRefs({fs:e,gitdir:c,remote:S,refs:Q,symrefs:j.symrefs,tags:b,prune:_,pruneTags:k});_&&(Ee.pruned=U)}if(Ee.HEAD=j.symrefs.get(\"HEAD\"),Ee.HEAD===void 0){let{oid:U}=q.resolveAgainstMap({ref:\"HEAD\",map:Q});for(let[Le,L]of Q.entries())if(Le!==\"HEAD\"&&L===U){Ee.HEAD=Le;break}}let st=ee.startsWith(\"refs/tags\")?\"tag\":\"branch\";if(Ee.FETCH_HEAD={oid:de,description:`${st} '${oa(ee)}' of ${T}`},n||i){let U=y2(Ee.progress);yl(U,async Le=>{if(i&&await i(Le),n){let L=Le.match(/([^:]*).*\\((\\d+?)\\/(\\d+?)\\)/);L&&await n({phase:L[1].trim(),loaded:parseInt(L[2],10),total:parseInt(L[3],10)})}})}let ot=Buffer.from(await uu(Ee.packfile));if(_t.body.error)throw _t.body.error;let Ct=ot.slice(-20).toString(\"hex\"),$e={defaultBranch:Ee.HEAD,fetchHead:Ee.FETCH_HEAD.oid,fetchHeadDescription:Ee.FETCH_HEAD.description};if(Ee.headers&&($e.headers=Ee.headers),_&&($e.pruned=Ee.pruned),Ct!==\"\"&&!hO(ot)){$e.packfile=`objects/pack/pack-${Ct}.pack`;let U=$(c,$e.packfile);await e.write(U,ot);let Le=Y=>qe({fs:e,cache:t,gitdir:c,oid:Y}),L=await tl.fromPack({pack:ot,getExternalRefDelta:Le,onProgress:n});await e.write(U.replace(/\\.pack$/,\".idx\"),await L.toBuffer())}return $e}async function w2({fs:e,bare:t=!1,dir:r,gitdir:n=t?r:$(r,\".git\"),defaultBranch:i=\"master\"}){if(await e.exists(n+\"/config\"))return;let a=[\"hooks\",\"info\",\"objects/info\",\"objects/pack\",\"refs/heads\",\"refs/tags\"];a=a.map(s=>n+\"/\"+s);for(let s of a)await e.mkdir(s);await e.write(n+\"/config\",`[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = ${t}\n`+(t?\"\":`\tlogallrefupdates = true\n`)+`\tsymlinks = false\n\tignorecase = true\n`),await e.write(n+\"/HEAD\",`ref: refs/heads/${i}\n`)}async function vO({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,onPostCheckout:c,dir:l,gitdir:u,url:f,corsProxy:d,ref:h,remote:p,depth:m,since:v,exclude:y,relative:b,singleBranch:x,noCheckout:E,noTags:_,headers:k}){try{if(await w2({fs:e,gitdir:u}),await p2({fs:e,gitdir:u,remote:p,url:f,force:!1}),d){let S=await We.get({fs:e,gitdir:u});await S.set(\"http.corsProxy\",d),await We.save({fs:e,gitdir:u,config:S})}let{defaultBranch:w,fetchHead:A}=await Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:u,ref:h,remote:p,corsProxy:d,depth:m,since:v,exclude:y,relative:b,singleBranch:x,headers:k,tags:!_});if(A===null)return;h=h||w,h=h.replace(\"refs/heads/\",\"\"),await kp({fs:e,cache:t,onProgress:n,onPostCheckout:c,dir:l,gitdir:u,ref:h,remote:p,noCheckout:E})}catch(w){throw await e.rmdir(u,{recursive:!0,maxRetries:10}).catch(()=>{}),w}}async function yO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPostCheckout:o,dir:c,gitdir:l=$(c,\".git\"),url:u,corsProxy:f=void 0,ref:d=void 0,remote:h=\"origin\",depth:p=void 0,since:m=void 0,exclude:v=[],relative:y=!1,singleBranch:b=!1,noCheckout:x=!1,noTags:E=!1,headers:_={},cache:k={}}){try{return C(\"fs\",e),C(\"http\",t),C(\"gitdir\",l),x||C(\"dir\",c),C(\"url\",u),await vO({fs:new X(e),cache:k,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPostCheckout:o,dir:c,gitdir:l,url:u,corsProxy:f,ref:d,remote:h,depth:p,since:m,exclude:v,relative:y,singleBranch:b,noCheckout:x,noTags:E,headers:_})}catch(w){throw w.caller=\"git.clone\",w}}async function wO({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),message:i,author:a,committer:s,signingKey:o,amend:c=!1,dryRun:l=!1,noUpdateBranch:u=!1,ref:f,parent:d,tree:h,cache:p={}}){try{C(\"fs\",e),c||C(\"message\",i),o&&C(\"onSign\",t);let m=new X(e);return await vu({fs:m,cache:p,onSign:t,gitdir:n,message:i,author:a,committer:s,signingKey:o,amend:c,dryRun:l,noUpdateBranch:u,ref:f,parent:d,tree:h})}catch(m){throw m.caller=\"git.commit\",m}}async function bO({fs:e,dir:t,gitdir:r=$(t,\".git\"),fullname:n=!1,test:i=!1}){try{return C(\"fs\",e),C(\"gitdir\",r),await fa({fs:new X(e),gitdir:r,fullname:n,test:i})}catch(a){throw a.caller=\"git.currentBranch\",a}}async function _O({fs:e,gitdir:t,ref:r}){if(r=r.startsWith(\"refs/heads/\")?r:`refs/heads/${r}`,!await q.exists({fs:e,gitdir:t,ref:r}))throw new Ne(r);let i=await q.expand({fs:e,gitdir:t,ref:r}),a=await fa({fs:e,gitdir:t,fullname:!0});if(i===a){let c=await q.resolve({fs:e,gitdir:t,ref:i});await q.writeRef({fs:e,gitdir:t,ref:\"HEAD\",value:c})}await q.deleteRef({fs:e,gitdir:t,ref:i});let s=oa(r),o=await We.get({fs:e,gitdir:t});await o.deleteSection(\"branch\",s),await We.save({fs:e,gitdir:t,config:o})}async function xO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n}){try{return C(\"fs\",e),C(\"ref\",n),await _O({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller=\"git.deleteBranch\",i}}async function SO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n}){try{C(\"fs\",e),C(\"ref\",n),await q.deleteRef({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller=\"git.deleteRef\",i}}async function EO({fs:e,gitdir:t,remote:r}){let n=await We.get({fs:e,gitdir:t});await n.deleteSection(\"remote\",r),await We.save({fs:e,gitdir:t,config:n})}async function AO({fs:e,dir:t,gitdir:r=$(t,\".git\"),remote:n}){try{return C(\"fs\",e),C(\"remote\",n),await EO({fs:new X(e),gitdir:r,remote:n})}catch(i){throw i.caller=\"git.deleteRemote\",i}}async function kO({fs:e,gitdir:t,ref:r}){r=r.startsWith(\"refs/tags/\")?r:`refs/tags/${r}`,await q.deleteRef({fs:e,gitdir:t,ref:r})}async function TO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n}){try{return C(\"fs\",e),C(\"ref\",n),await kO({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller=\"git.deleteTag\",i}}async function CO({fs:e,gitdir:t,oid:r}){let n=r.slice(0,2);return(await e.readdir(`${t}/objects/${n}`)).map(a=>`${n}${a}`).filter(a=>a.startsWith(r))}async function PO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i}){let a=[],s=await e.readdir($(r,\"objects/pack\"));s=s.filter(o=>o.endsWith(\".idx\"));for(let o of s){let c=`${r}/objects/pack/${o}`,l=await Ep({fs:e,cache:t,filename:c,getExternalRefDelta:i});if(l.error)throw new le(l.error);for(let u of l.offsets.keys())u.startsWith(n)&&a.push(u)}return a}async function RO({fs:e,cache:t,gitdir:r,oid:n}){let i=o=>qe({fs:e,cache:t,gitdir:r,oid:o}),a=await CO({fs:e,gitdir:r,oid:n}),s=await PO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i});for(let o of s)a.indexOf(o)===-1&&a.push(o);if(a.length===1)return a[0];throw a.length>1?new rl(\"oids\",n,a):new Ne(`an object matching \"${n}\"`)}async function MO({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await RO({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller=\"git.expandOid\",a}}async function OO({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),await q.expand({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller=\"git.expandRef\",i}}async function Cp({fs:e,cache:t,gitdir:r,oids:n}){let i={},a=n.length,s=n.map((o,c)=>({index:c,oid:o}));for(;s.length;){let o=new Set;for(let{oid:l,index:u}of s)i[l]||(i[l]=new Set),i[l].add(u),i[l].size===a&&o.add(l);if(o.size>0)return[...o];let c=new Map;for(let{oid:l,index:u}of s)try{let{object:f}=await qe({fs:e,cache:t,gitdir:r,oid:l}),d=tr.from(f),{parent:h}=d.parseHeaders();for(let p of h)(!i[p]||!i[p].has(u))&&c.set(p+\":\"+u,{oid:p,index:u})}catch(f){}s=Array.from(c.values())}return[]}var cp=/^.*(\\r?\\n|$)/gm;function IO({branches:e,contents:t}){let r=e[1],n=e[2],i=t[0],a=t[1],s=t[2],o=a.match(cp),c=i.match(cp),l=s.match(cp),u=(0,e2.default)(o,c,l),f=7,d=\"\",h=!0;for(let p of u)p.ok&&(d+=p.ok.join(\"\")),p.conflict&&(h=!1,d+=`${\"<\".repeat(f)} ${r}\n`,d+=p.conflict.a.join(\"\"),d+=`${\"=\".repeat(f)}\n`,d+=p.conflict.b.join(\"\"),d+=`${\">\".repeat(f)} ${n}\n`);return{cleanMerge:h,mergedText:d}}async function FO({fs:e,cache:t,dir:r,gitdir:n=$(r,\".git\"),index:i,ourOid:a,baseOid:s,theirOid:o,ourName:c=\"ours\",baseName:l=\"base\",theirName:u=\"theirs\",dryRun:f=!1,abortOnConflict:d=!0,mergeDriver:h}){let p=wi({ref:a}),m=wi({ref:s}),v=wi({ref:o}),y=[],b=[],x=[],E=[],_=await ys({fs:e,cache:t,dir:r,gitdir:n,trees:[p,m,v],map:async function(k,[w,A,S]){let T=nu(k),P=await lu(w,A),O=await lu(S,A);switch(`${P}-${O}`){case\"false-false\":return{mode:await A.mode(),path:T,oid:await A.oid(),type:await A.type()};case\"false-true\":return S?{mode:await S.mode(),path:T,oid:await S.oid(),type:await S.type()}:void 0;case\"true-false\":return w?{mode:await w.mode(),path:T,oid:await w.oid(),type:await w.type()}:void 0;case\"true-true\":{if(w&&A&&S&&await w.type()===\"blob\"&&await A.type()===\"blob\"&&await S.type()===\"blob\")return $O({fs:e,gitdir:n,path:T,ours:w,base:A,theirs:S,ourName:c,baseName:l,theirName:u,mergeDriver:h}).then(async j=>{if(j.cleanMerge)d||i.insert({filepath:k,oid:j.mergeResult.oid,stage:0});else if(y.push(k),b.push(k),!d){let D=await A.oid(),Q=await w.oid(),de=await S.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:D,stage:1}),i.insert({filepath:k,oid:Q,stage:2}),i.insert({filepath:k,oid:de,stage:3})}return j.mergeResult});if(A&&!w&&S&&await A.type()===\"blob\"&&await S.type()===\"blob\"){if(y.push(k),x.push(k),!d){let j=await A.oid(),D=await S.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:j,stage:1}),i.insert({filepath:k,oid:D,stage:3})}return{mode:await S.mode(),oid:await S.oid(),type:\"blob\",path:T}}if(A&&w&&!S&&await A.type()===\"blob\"&&await w.type()===\"blob\"){if(y.push(k),E.push(k),!d){let j=await A.oid(),D=await w.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:j,stage:1}),i.insert({filepath:k,oid:D,stage:2})}return{mode:await w.mode(),oid:await w.oid(),type:\"blob\",path:T}}if(A&&!w&&!S&&await A.type()===\"blob\")return;throw new hs}}},reduce:y.length!==0&&(!r||d)?void 0:async(k,w)=>{let A=w.filter(Boolean);if(k&&!(k&&k.type===\"tree\"&&A.length===0)){if(A.length>0){let T=new er(A).toObject(),P=await mr({fs:e,gitdir:n,type:\"tree\",object:T,dryRun:f});k.oid=P}return k}}});return y.length!==0?(r&&!d&&await ys({fs:e,cache:t,dir:r,gitdir:n,trees:[wi({ref:_.oid})],map:async function(k,[w]){let A=`${r}/${k}`;if(await w.type()===\"blob\"){let S=await w.mode(),T=new TextDecoder().decode(await w.content());await e.write(A,T,{mode:S})}return!0}}),new ps(y,b,x,E)):_.oid}async function $O({fs:e,gitdir:t,path:r,ours:n,base:i,theirs:a,ourName:s,theirName:o,baseName:c,dryRun:l,mergeDriver:u=IO}){let f=\"blob\",d=await i.mode()===await n.mode()?await a.mode():await n.mode();if(await n.oid()===await a.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await n.oid(),type:f}};if(await n.oid()===await i.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await a.oid(),type:f}};if(await a.oid()===await i.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await n.oid(),type:f}};let h=Buffer.from(await n.content()).toString(\"utf8\"),p=Buffer.from(await i.content()).toString(\"utf8\"),m=Buffer.from(await a.content()).toString(\"utf8\"),{mergedText:v,cleanMerge:y}=await u({branches:[c,s,o],contents:[p,h,m],path:r}),b=await mr({fs:e,gitdir:t,type:\"blob\",object:Buffer.from(v,\"utf8\"),dryRun:l});return{cleanMerge:y,mergeResult:{mode:d,path:r,oid:b,type:f}}}async function b2({fs:e,cache:t,dir:r,gitdir:n,ours:i,theirs:a,fastForward:s=!0,fastForwardOnly:o=!1,dryRun:c=!1,noUpdateBranch:l=!1,abortOnConflict:u=!0,message:f,author:d,committer:h,signingKey:p,onSign:m,mergeDriver:v}){i===void 0&&(i=await fa({fs:e,gitdir:n,fullname:!0})),i=await q.expand({fs:e,gitdir:n,ref:i}),a=await q.expand({fs:e,gitdir:n,ref:a});let y=await q.resolve({fs:e,gitdir:n,ref:i}),b=await q.resolve({fs:e,gitdir:n,ref:a}),x=await Cp({fs:e,cache:t,gitdir:n,oids:[y,b]});if(x.length!==1)throw new hs;let E=x[0];if(E===b)return{oid:y,alreadyMerged:!0};if(s&&E===y)return!c&&!l&&await q.writeRef({fs:e,gitdir:n,ref:i,value:b}),{oid:b,fastForward:!0};{if(o)throw new sl;let _=await mt.acquire({fs:e,gitdir:n,cache:t,allowUnmerged:!1},async w=>FO({fs:e,cache:t,dir:r,gitdir:n,index:w,ourOid:y,theirOid:b,baseOid:E,ourName:oa(i),baseName:\"base\",theirName:oa(a),dryRun:c,abortOnConflict:u,mergeDriver:v}));if(_ instanceof ps)throw _;return f||(f=`Merge branch '${oa(a)}' into ${oa(i)}`),{oid:await vu({fs:e,cache:t,gitdir:n,message:f,ref:i,tree:_,parent:[y,b],author:d,committer:h,signingKey:p,onSign:m,dryRun:c,noUpdateBranch:l}),tree:_,mergeCommit:!0}}}async function _2({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,dir:c,gitdir:l,ref:u,url:f,remote:d,remoteRef:h,prune:p,pruneTags:m,fastForward:v,fastForwardOnly:y,corsProxy:b,singleBranch:x,headers:E,author:_,committer:k,signingKey:w}){try{if(!u){let T=await fa({fs:e,gitdir:l});if(!T)throw new Qt(\"ref\");u=T}let{fetchHead:A,fetchHeadDescription:S}=await Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:l,corsProxy:b,ref:u,url:f,remote:d,remoteRef:h,singleBranch:x,headers:E,prune:p,pruneTags:m});await b2({fs:e,cache:t,gitdir:l,ours:u,theirs:A,fastForward:v,fastForwardOnly:y,message:`Merge ${S}`,author:_,committer:k,signingKey:w,dryRun:!1,noUpdateBranch:!1}),await kp({fs:e,cache:t,onProgress:n,dir:c,gitdir:l,ref:u,remote:d,noCheckout:!1})}catch(A){throw A.caller=\"git.pull\",A}}async function LO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,\".git\"),ref:l,url:u,remote:f,remoteRef:d,corsProxy:h,singleBranch:p,headers:m={},cache:v={}}){try{C(\"fs\",e),C(\"http\",t),C(\"gitdir\",c);let y={name:\"\",邮件:\"\",timestamp:Date.now(),timezoneOffset:0};return await _2({fs:new X(e),cache:v,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c,ref:l,url:u,remote:f,remoteRef:d,fastForwardOnly:!0,corsProxy:h,singleBranch:p,headers:m,author:y,committer:y})}catch(y){throw y.caller=\"git.fastForward\",y}}async function DO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,\".git\"),ref:l,remote:u,remoteRef:f,url:d,corsProxy:h,depth:p=null,since:m=null,exclude:v=[],relative:y=!1,tags:b=!1,singleBranch:x=!1,headers:E={},prune:_=!1,pruneTags:k=!1,cache:w={}}){try{return C(\"fs\",e),C(\"http\",t),C(\"gitdir\",c),await Tp({fs:new X(e),cache:w,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,gitdir:c,ref:l,remote:u,remoteRef:f,url:d,corsProxy:h,depth:p,since:m,exclude:v,relative:y,tags:b,singleBranch:x,headers:E,prune:_,pruneTags:k})}catch(A){throw A.caller=\"git.fetch\",A}}async function NO({fs:e,dir:t,gitdir:r=$(t,\".git\"),oids:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oids\",n),await Cp({fs:new X(e),cache:i,gitdir:r,oids:n})}catch(a){throw a.caller=\"git.findMergeBase\",a}}async function x2({fs:e,filepath:t}){if(await e.exists($(t,\".git\")))return t;{let r=fs(t);if(r===t)throw new Ne(`git root for ${t}`);return x2({fs:e,filepath:r})}}async function jO({fs:e,filepath:t}){try{return C(\"fs\",e),C(\"filepath\",t),await x2({fs:new X(e),filepath:t})}catch(r){throw r.caller=\"git.findRoot\",r}}async function BO({fs:e,dir:t,gitdir:r=$(t,\".git\"),path:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"path\",n),await ml({fs:new X(e),gitdir:r,path:n})}catch(i){throw i.caller=\"git.getConfig\",i}}async function HO({fs:e,gitdir:t,path:r}){return(await We.get({fs:e,gitdir:t})).getall(r)}async function UO({fs:e,dir:t,gitdir:r=$(t,\".git\"),path:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"path\",n),await HO({fs:new X(e),gitdir:r,path:n})}catch(i){throw i.caller=\"git.getConfigAll\",i}}async function GO({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1}){try{C(\"http\",e),C(\"url\",a);let l=await xs.getRemoteHelperFor({url:a}).discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?\"git-receive-pack\":\"git-upload-pack\",url:a,headers:s,protocolVersion:1}),u={capabilities:[...l.capabilities]};for(let[f,d]of l.refs){let h=f.split(\"/\"),p=h.pop(),m=u;for(let v of h)m[v]=m[v]||{},m=m[v];m[p]=d}for(let[f,d]of l.symrefs){let h=f.split(\"/\"),p=h.pop(),m=u;for(let v of h)m[v]=m[v]||{},m=m[v];m[p]=d}return u}catch(c){throw c.caller=\"git.getRemoteInfo\",c}}function S2(e,t,r,n){let i=[];for(let[a,s]of e.refs){if(t&&!a.startsWith(t))continue;if(a.endsWith(\"^{}\")){if(n){let c=a.replace(\"^{}\",\"\"),l=i[i.length-1],u=l.ref===c?l:i.find(f=>f.ref===c);if(u===void 0)throw new Error(\"I did not expect this to happen\");u.peeled=s}continue}let o={ref:a,oid:s};r&&e.symrefs.has(a)&&(o.target=e.symrefs.get(a)),i.push(o)}return i}async function zO({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1,protocolVersion:c=2}){try{C(\"http\",e),C(\"url\",a);let u=await xs.getRemoteHelperFor({url:a}).discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?\"git-receive-pack\":\"git-upload-pack\",url:a,headers:s,protocolVersion:c});if(u.protocolVersion===2)return{protocolVersion:u.protocolVersion,capabilities:u.capabilities2};let f={};for(let d of u.capabilities){let[h,p]=d.split(\"=\");p?f[h]=p:f[h]=!0}return{protocolVersion:1,capabilities:f,refs:S2(u,void 0,!0,!0)}}catch(l){throw l.caller=\"git.getRemoteInfo2\",l}}async function VO({type:e,object:t,format:r=\"content\",oid:n=void 0}){return r!==\"deflated\"&&(r!==\"wrapped\"&&(t=_i.wrap({type:e,object:t})),n=await Gn(t)),{oid:n,object:t}}async function WO({object:e}){try{C(\"object\",e),typeof e==\"string\"?e=Buffer.from(e,\"utf8\"):e=Buffer.from(e);let t=\"blob\",{oid:r,object:n}=await VO({type:\"blob\",format:\"content\",object:e});return{oid:r,type:t,object:new Uint8Array(n),format:\"wrapped\"}}catch(t){throw t.caller=\"git.hashBlob\",t}}async function qO({fs:e,cache:t,onProgress:r,dir:n,gitdir:i,filepath:a}){try{a=$(n,a);let s=await e.read(a),o=l=>qe({fs:e,cache:t,gitdir:i,oid:l}),c=await tl.fromPack({pack:s,getExternalRefDelta:o,onProgress:r});return await e.write(a.replace(/\\.pack$/,\".idx\"),await c.toBuffer()),{oids:[...c.hashes]}}catch(s){throw s.caller=\"git.indexPack\",s}}async function YO({fs:e,onProgress:t,dir:r,gitdir:n=$(r,\".git\"),filepath:i,cache:a={}}){try{return C(\"fs\",e),C(\"dir\",r),C(\"gitdir\",r),C(\"filepath\",i),await qO({fs:new X(e),cache:a,onProgress:t,dir:r,gitdir:n,filepath:i})}catch(s){throw s.caller=\"git.indexPack\",s}}async function XO({fs:e,bare:t=!1,dir:r,gitdir:n=t?r:$(r,\".git\"),defaultBranch:i=\"master\"}){try{return C(\"fs\",e),C(\"gitdir\",n),t||C(\"dir\",r),await w2({fs:new X(e),bare:t,dir:r,gitdir:n,defaultBranch:i})}catch(a){throw a.caller=\"git.init\",a}}async function E2({fs:e,cache:t,gitdir:r,oid:n,ancestor:i,depth:a}){let s=await ua.read({fs:e,gitdir:r});if(!n)throw new Qt(\"oid\");if(!i)throw new Qt(\"ancestor\");if(n===i)return!1;let o=[n],c=new Set,l=0;for(;o.length;){if(l++===a)throw new ll(a);let u=o.shift(),{type:f,object:d}=await qe({fs:e,cache:t,gitdir:r,oid:u});if(f!==\"commit\")throw new Gt(u,f,\"commit\");let h=tr.from(d).parse();for(let p of h.parent)if(p===i)return!0;if(!s.has(u))for(let p of h.parent)c.has(p)||(o.push(p),c.add(p))}return!1}async function ZO({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,ancestor:i,depth:a=-1,cache:s={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),C(\"ancestor\",i),await E2({fs:new X(e),cache:s,gitdir:r,oid:n,ancestor:i,depth:a})}catch(o){throw o.caller=\"git.isDescendent\",o}}async function KO({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n}){try{return C(\"fs\",e),C(\"dir\",t),C(\"gitdir\",r),C(\"filepath\",n),ws.isIgnored({fs:new X(e),dir:t,gitdir:r,filepath:n})}catch(i){throw i.caller=\"git.isIgnored\",i}}async function JO({fs:e,dir:t,gitdir:r=$(t,\".git\"),remote:n}){try{return C(\"fs\",e),C(\"gitdir\",r),q.listBranches({fs:new X(e),gitdir:r,remote:n})}catch(i){throw i.caller=\"git.listBranches\",i}}async function QO({fs:e,gitdir:t,ref:r,cache:n}){if(r){let i=await q.resolve({gitdir:t,fs:e,ref:r}),a=[];return await A2({fs:e,cache:n,gitdir:t,oid:i,filenames:a,prefix:\"\"}),a}else return mt.acquire({fs:e,gitdir:t,cache:n},async function(i){return i.entries.map(a=>a.path)})}async function A2({fs:e,cache:t,gitdir:r,oid:n,filenames:i,prefix:a}){let{tree:s}=await Ss({fs:e,cache:t,gitdir:r,oid:n});for(let o of s)o.type===\"tree\"?await A2({fs:e,cache:t,gitdir:r,oid:o.oid,filenames:i,prefix:$(a,o.path)}):i.push($(a,o.path))}async function e8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),await QO({fs:new X(e),cache:i,gitdir:r,ref:n})}catch(a){throw a.caller=\"git.listFiles\",a}}async function t8({fs:e,cache:t,gitdir:r,ref:n}){let i;try{i=await q.resolve({gitdir:r,fs:e,ref:n})}catch(o){if(o instanceof Ne)return[]}return(await Ss({fs:e,cache:t,gitdir:r,oid:i})).tree.map(o=>({target:o.path,note:o.oid}))}async function r8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n=\"refs/notes/commits\",cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),await t8({fs:new X(e),cache:i,gitdir:r,ref:n})}catch(a){throw a.caller=\"git.listNotes\",a}}async function n8({fs:e,gitdir:t}){let r=await We.get({fs:e,gitdir:t}),n=await r.getSubsections(\"remote\");return Promise.all(n.map(async a=>{let s=await r.get(`remote.${a}.url`);return{remote:a,url:s}}))}async function i8({fs:e,dir:t,gitdir:r=$(t,\".git\")}){try{return C(\"fs\",e),C(\"gitdir\",r),await n8({fs:new X(e),gitdir:r})}catch(n){throw n.caller=\"git.listRemotes\",n}}async function a8(e){let t=Ve.streamReader(e),r=[],n;for(;n=await t(),n!==!0;){if(n===null)continue;n=n.toString(\"utf8\").replace(/\\n$/,\"\");let[i,a,...s]=n.split(\" \"),o={ref:a,oid:i};for(let c of s){let[l,u]=c.split(\":\");l===\"symref-target\"?o.target=u:l===\"peeled\"&&(o.peeled=u)}r.push(o)}return r}async function s8({prefix:e,symrefs:t,peelTags:r}){let n=[];return n.push(Ve.encode(`command=ls-refs\n`)),n.push(Ve.encode(`agent=${yu.agent}\n`)),(r||t||e)&&n.push(Ve.delim()),r&&n.push(Ve.encode(\"peel\")),t&&n.push(Ve.encode(\"symrefs\")),e&&n.push(Ve.encode(`ref-prefix ${e}`)),n.push(Ve.flush()),n}async function o8({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1,protocolVersion:c=2,prefix:l,symrefs:u,peelTags:f}){try{C(\"http\",e),C(\"url\",a);let d=await _s.discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?\"git-receive-pack\":\"git-upload-pack\",url:a,headers:s,protocolVersion:c});if(d.protocolVersion===1)return S2(d,l,u,f);let h=await s8({prefix:l,symrefs:u,peelTags:f}),p=await _s.connect({http:e,auth:d.auth,headers:s,corsProxy:i,service:o?\"git-receive-pack\":\"git-upload-pack\",url:a,body:h});return a8(p.body)}catch(d){throw d.caller=\"git.listServerRefs\",d}}async function l8({fs:e,dir:t,gitdir:r=$(t,\".git\")}){try{return C(\"fs\",e),C(\"gitdir\",r),q.listTags({fs:new X(e),gitdir:r})}catch(n){throw n.caller=\"git.listTags\",n}}function c8(e,t){return e.committer.timestamp-t.committer.timestamp}var u8=\"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391\";async function Kw({fs:e,cache:t,gitdir:r,oid:n,fileId:i}){if(i===u8)return;let a=n,s,o=await vs({fs:e,cache:t,gitdir:r,oid:n}),c=o.tree;return i===o.oid?s=o.path:(s=await k2({fs:e,cache:t,gitdir:r,tree:c,fileId:i,oid:a}),Array.isArray(s)&&(s.length===0?s=void 0:s.length===1&&(s=s[0]))),s}async function k2({fs:e,cache:t,gitdir:r,tree:n,fileId:i,oid:a,filepaths:s=[],parentPath:o=\"\"}){let c=n.entries().map(function(l){let u;return l.oid===i?(u=$(o,l.path),s.push(u)):l.type===\"tree\"&&(u=qe({fs:e,cache:t,gitdir:r,oid:l.oid}).then(function({object:f}){return k2({fs:e,cache:t,gitdir:r,tree:er.from(f),fileId:i,oid:a,filepaths:s,parentPath:$(o,l.path)})})),u});return await Promise.all(c),s}async function f8({fs:e,cache:t,gitdir:r,filepath:n,ref:i,depth:a,since:s,force:o,follow:c}){let l=typeof s==\"undefined\"?void 0:Math.floor(s.valueOf()/1e3),u=[],f=await ua.read({fs:e,gitdir:r}),d=await q.resolve({fs:e,gitdir:r,ref:i}),h=[await cu({fs:e,cache:t,gitdir:r,oid:d})],p,m,v;function y(b){v&&n&&u.push(b)}for(;h.length>0;){let b=h.pop();if(l!==void 0&&b.commit.committer.timestamp<=l)break;if(n){let x;try{x=await vl({fs:e,cache:t,gitdir:r,oid:b.commit.tree,filepath:n}),m&&p!==x&&u.push(m),p=x,m=b,v=!0}catch(E){if(E instanceof Ne){let _=c&&p;if(_&&(_=await Kw({fs:e,cache:t,gitdir:r,oid:b.commit.tree,fileId:p}),_))if(Array.isArray(_)){if(m){let k=await Kw({fs:e,cache:t,gitdir:r,oid:m.commit.tree,fileId:p});if(Array.isArray(k))if(_=_.filter(w=>k.indexOf(w)===-1),_.length===1)_=_[0],n=_,m&&u.push(m);else{_=!1,m&&u.push(m);break}}}else n=_,m&&u.push(m);if(!_){if(v&&p&&(u.push(m),!o))break;if(!o&&!c)throw E}m=b,v=!1}else throw E}}else u.push(b);if(a!==void 0&&u.length===a){y(b);break}if(!f.has(b.oid))for(let x of b.commit.parent){let E=await cu({fs:e,cache:t,gitdir:r,oid:x});h.map(_=>_.oid).includes(E.oid)||h.push(E)}h.length===0&&y(b),h.sort((x,E)=>c8(x.commit,E.commit))}return u}async function d8({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,ref:i=\"HEAD\",depth:a,since:s,force:o,follow:c,cache:l={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",i),await f8({fs:new X(e),cache:l,gitdir:r,filepath:n,ref:i,depth:a,since:s,force:o,follow:c})}catch(u){throw u.caller=\"git.log\",u}}async function h8({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),ours:i,theirs:a,fastForward:s=!0,fastForwardOnly:o=!1,dryRun:c=!1,noUpdateBranch:l=!1,abortOnConflict:u=!0,message:f,author:d,committer:h,signingKey:p,cache:m={},mergeDriver:v}){try{C(\"fs\",e),p&&C(\"onSign\",t);let y=new X(e),b=await ca({fs:y,gitdir:n,author:d});if(!b&&(!o||!s))throw new zt(\"author\");let x=await bs({fs:y,gitdir:n,author:b,committer:h});if(!x&&(!o||!s))throw new zt(\"committer\");return await b2({fs:y,cache:m,dir:r,gitdir:n,ours:i,theirs:a,fastForward:s,fastForwardOnly:o,dryRun:c,noUpdateBranch:l,abortOnConflict:u,message:f,author:b,committer:x,signingKey:p,onSign:t,mergeDriver:v})}catch(y){throw y.caller=\"git.merge\",y}}var p8={commit:16,tree:32,blob:48,tag:64,ofs_delta:96,ref_delta:112};async function T2({fs:e,cache:t,dir:r,gitdir:n=$(r,\".git\"),oids:i}){let a=new Sp.default,s=[];function o(u,f){let d=Buffer.from(u,f);s.push(d),a.update(d)}async function c({stype:u,object:f}){let d=p8[u],h=f.length,p=h>15?128:0,m=h&15;h=h>>>4;let v=(p|d|m).toString(16);for(o(v,\"hex\");p;)p=h>127?128:0,v=p|h&127,o(xp(2,v),\"hex\"),h=h>>>7;o(Buffer.from(await c2(f)))}o(\"PACK\"),o(\"00000002\",\"hex\"),o(xp(8,i.length),\"hex\");for(let u of i){let{type:f,object:d}=await qe({fs:e,cache:t,gitdir:n,oid:u});await c({write:o,object:d,stype:f})}let l=a.digest();return s.push(l),s}async function m8({fs:e,cache:t,gitdir:r,oids:n,write:i}){let a=await T2({fs:e,cache:t,gitdir:r,oids:n}),s=Buffer.from(await uu(a)),c=`pack-${s.slice(-20).toString(\"hex\")}.pack`;return i?(await e.write($(r,`objects/pack/${c}`),s),{filename:c}):{filename:c,packfile:new Uint8Array(s)}}async function g8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oids:n,write:i=!1,cache:a={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oids\",n),await m8({fs:new X(e),cache:a,gitdir:r,oids:n,write:i})}catch(s){throw s.caller=\"git.packObjects\",s}}async function v8({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,\".git\"),ref:l,url:u,remote:f,remoteRef:d,prune:h=!1,pruneTags:p=!1,fastForward:m=!0,fastForwardOnly:v=!1,corsProxy:y,singleBranch:b,headers:x={},author:E,committer:_,signingKey:k,cache:w={}}){try{C(\"fs\",e),C(\"gitdir\",c);let A=new X(e),S=await ca({fs:A,gitdir:c,author:E});if(!S)throw new zt(\"author\");let T=await bs({fs:A,gitdir:c,author:S,committer:_});if(!T)throw new zt(\"committer\");return await _2({fs:A,cache:w,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c,ref:l,url:u,remote:f,remoteRef:d,fastForward:m,fastForwardOnly:v,corsProxy:y,singleBranch:b,headers:x,author:S,committer:T,signingKey:k,prune:h,pruneTags:p})}catch(A){throw A.caller=\"git.pull\",A}}async function y8({fs:e,cache:t,dir:r,gitdir:n=$(r,\".git\"),start:i,finish:a}){let s=await ua.read({fs:e,gitdir:n}),o=new Set,c=new Set;for(let f of i)o.add(await q.resolve({fs:e,gitdir:n,ref:f}));for(let f of a)try{let d=await q.resolve({fs:e,gitdir:n,ref:f});c.add(d)}catch(d){}let l=new Set;async function u(f){l.add(f);let{type:d,object:h}=await qe({fs:e,cache:t,gitdir:n,oid:f});if(d===\"tag\"){let m=pr.from(h).headers().object;return u(m)}if(d!==\"commit\")throw new Gt(f,d,\"commit\");if(!s.has(f)){let m=tr.from(h).headers().parent;for(f of m)!c.has(f)&&!l.has(f)&&await u(f)}}for(let f of o)await u(f);return l}async function up({fs:e,cache:t,dir:r,gitdir:n=$(r,\".git\"),oids:i}){let a=new Set;async function s(o){if(a.has(o))return;a.add(o);let{type:c,object:l}=await qe({fs:e,cache:t,gitdir:n,oid:o});if(c===\"tag\"){let f=pr.from(l).headers().object;await s(f)}else if(c===\"commit\"){let f=tr.from(l).headers().tree;await s(f)}else if(c===\"tree\"){let u=er.from(l);for(let f of u)f.type===\"blob\"&&a.add(f.oid),f.type===\"tree\"&&await s(f.oid)}}for(let o of i)await s(o);return a}async function w8(e){let t={},r=\"\",n=Ve.streamReader(e),i=await n();for(;i!==!0;)i!==null&&(r+=i.toString(\"utf8\")+`\n`),i=await n();let a=r.toString(\"utf8\").split(`\n`);if(i=a.shift(),!i.startsWith(\"unpack \"))throw new la('unpack ok\" or \"unpack [error message]',i);t.ok=i===\"unpack ok\",t.ok||(t.error=i.slice(7)),t.refs={};for(let s of a){if(s.trim()===\"\")continue;let o=s.slice(0,2),c=s.slice(3),l=c.indexOf(\" \");l===-1&&(l=c.length);let u=c.slice(0,l),f=c.slice(l+1);t.refs[u]={ok:o===\"ok\",error:f}}return t}async function b8({capabilities:e=[],triplets:t=[]}){let r=[],n=`\\0 ${e.join(\" \")}`;for(let i of t)r.push(Ve.encode(`${i.oldoid} ${i.oid} ${i.fullRef}${n}\n`)),n=\"\";return r.push(Ve.flush()),r}async function _8({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,onPrePush:c,gitdir:l,ref:u,remoteRef:f,remote:d,url:h,force:p=!1,delete:m=!1,corsProxy:v,headers:y={}}){let b=u||await fa({fs:e,gitdir:l});if(typeof b==\"undefined\")throw new Qt(\"ref\");let x=await We.get({fs:e,gitdir:l});d=d||await x.get(`branch.${b}.pushRemote`)||await x.get(\"remote.pushDefault\")||await x.get(`branch.${b}.remote`)||\"origin\";let E=h||await x.get(`remote.${d}.pushurl`)||await x.get(`remote.${d}.url`);if(typeof E==\"undefined\")throw new Qt(\"remote OR url\");let _=f||await x.get(`branch.${b}.merge`);if(typeof E==\"undefined\")throw new Qt(\"remoteRef\");v===void 0&&(v=await x.get(\"http.corsProxy\"));let k=await q.expand({fs:e,gitdir:l,ref:b}),w=m?\"0000000000000000000000000000000000000000\":await q.resolve({fs:e,gitdir:l,ref:k}),A=xs.getRemoteHelperFor({url:E}),S=await A.discover({http:r,onAuth:a,onAuthSuccess:s,onAuthFailure:o,corsProxy:v,service:\"git-receive-pack\",url:E,headers:y,protocolVersion:1}),T=S.auth,P;if(!_)P=k;else try{P=await q.expandAgainstMap({ref:_,map:S.refs})}catch(G){if(G instanceof Ne)P=_.startsWith(\"refs/\")?_:`refs/heads/${_}`;else throw G}let O=S.refs.get(P)||\"0000000000000000000000000000000000000000\";if(c&&!await c({remote:d,url:E,localRef:{ref:m?\"(delete)\":k,oid:w},remoteRef:{ref:P,oid:O}}))throw new gs;let j=!S.capabilities.has(\"no-thin\"),D=new Set;if(!m){let G=[...S.refs.values()],N=new Set;if(O!==\"0000000000000000000000000000000000000000\"){let Me=await Cp({fs:e,cache:t,gitdir:l,oids:[w,O]});for(let Dt of Me)G.push(Dt);j&&(N=await up({fs:e,cache:t,gitdir:l,oids:Me}))}if(!G.includes(w)){let Me=await y8({fs:e,cache:t,gitdir:l,start:[w],finish:G});D=await up({fs:e,cache:t,gitdir:l,oids:Me})}if(j){try{let Me=await q.resolve({fs:e,gitdir:l,ref:`refs/remotes/${d}/HEAD`,depth:2}),{oid:Dt}=await q.resolveAgainstMap({ref:Me.replace(`refs/remotes/${d}/`,\"\"),fullref:Me,map:S.refs}),_t=[Dt];for(let Ee of await up({fs:e,cache:t,gitdir:l,oids:_t}))N.add(Ee)}catch(Me){}for(let Me of N)D.delete(Me)}if(w===O&&(p=!0),!p){if(k.startsWith(\"refs/tags\")&&O!==\"0000000000000000000000000000000000000000\")throw new ms(\"tag-exists\");if(w!==\"0000000000000000000000000000000000000000\"&&O!==\"0000000000000000000000000000000000000000\"&&!await E2({fs:e,cache:t,gitdir:l,oid:w,ancestor:O,depth:-1}))throw new ms(\"not-fast-forward\")}}let Q=v2([...S.capabilities],[\"report-status\",\"side-band-64k\",`agent=${yu.agent}`]),de=await b8({capabilities:Q,triplets:[{oldoid:O,oid:w,fullRef:P}]}),ee=m?[]:await T2({fs:e,cache:t,gitdir:l,oids:[...D]}),J=await A.connect({http:r,onProgress:n,corsProxy:v,service:\"git-receive-pack\",url:E,auth:T,headers:y,body:[...de,...ee]}),{packfile:Pe,progress:me}=await fu.demux(J.body);if(i){let G=y2(me);yl(G,async N=>{await i(N)})}let F=await w8(Pe);if(J.headers&&(F.headers=J.headers),d&&F.ok&&F.refs[P].ok&&!k.startsWith(\"refs/tags\")){let G=`refs/remotes/${d}/${P.replace(\"refs/heads\",\"\")}`;m?await q.deleteRef({fs:e,gitdir:l,ref:G}):await q.writeRef({fs:e,gitdir:l,ref:G,value:w})}if(F.ok&&Object.values(F.refs).every(G=>G.ok))return F;{let G=Object.entries(F.refs).filter(([N,Me])=>!Me.ok).map(([N,Me])=>`\n  - ${N}: ${Me.error}`).join(\"\");throw new ol(G,F)}}async function x8({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPrePush:o,dir:c,gitdir:l=$(c,\".git\"),ref:u,remoteRef:f,remote:d=\"origin\",url:h,force:p=!1,delete:m=!1,corsProxy:v,headers:y={},cache:b={}}){try{return C(\"fs\",e),C(\"http\",t),C(\"gitdir\",l),await _8({fs:new X(e),cache:b,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPrePush:o,gitdir:l,ref:u,remoteRef:f,remote:d,url:h,force:p,delete:m,corsProxy:v,headers:y})}catch(x){throw x.caller=\"git.push\",x}}async function C2({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i===\"tag\")return n=pr.from(a).parse().object,C2({fs:e,cache:t,gitdir:r,oid:n});if(i!==\"blob\")throw new Gt(n,i,\"blob\");return{oid:n,blob:new Uint8Array(a)}}async function P2({fs:e,cache:t,gitdir:r,oid:n,filepath:i=void 0}){return i!==void 0&&(n=await vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i})),await C2({fs:e,cache:t,gitdir:r,oid:n})}async function wl({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,filepath:i,cache:a={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await P2({fs:new X(e),cache:a,gitdir:r,oid:n,filepath:i})}catch(s){throw s.caller=\"git.readBlob\",s}}async function S8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await cu({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller=\"git.readCommit\",a}}async function E8({fs:e,cache:t,gitdir:r,ref:n=\"refs/notes/commits\",oid:i}){let a=await q.resolve({gitdir:r,fs:e,ref:n}),{blob:s}=await P2({fs:e,cache:t,gitdir:r,oid:a,filepath:i});return s}async function A8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n=\"refs/notes/commits\",oid:i,cache:a={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),C(\"oid\",i),await E8({fs:new X(e),cache:a,gitdir:r,ref:n,oid:i})}catch(s){throw s.caller=\"git.readNote\",s}}async function k8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,format:i=\"parsed\",filepath:a=void 0,encoding:s=void 0,cache:o={}}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n);let c=new X(e);a!==void 0&&(n=await vl({fs:c,cache:o,gitdir:r,oid:n,filepath:a}));let u=await qe({fs:c,cache:o,gitdir:r,oid:n,format:i===\"parsed\"?\"content\":i});if(u.oid=n,i===\"parsed\")switch(u.format=\"parsed\",u.type){case\"commit\":u.object=tr.from(u.object).parse();break;case\"tree\":u.object=er.from(u.object).entries();break;case\"blob\":s?u.object=u.object.toString(s):(u.object=new Uint8Array(u.object),u.format=\"content\");break;case\"tag\":u.object=pr.from(u.object).parse();break;default:throw new Gt(u.oid,u.type,\"blob|commit|tag|tree\")}else(u.format===\"deflated\"||u.format===\"wrapped\")&&(u.type=u.format);return u}catch(c){throw c.caller=\"git.readObject\",c}}async function T8({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n,format:\"content\"});if(i!==\"tag\")throw new Gt(n,i,\"tag\");let s=pr.from(a);return{oid:n,tag:s.parse(),payload:s.payload()}}async function C8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,cache:i={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await T8({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller=\"git.readTag\",a}}async function P8({fs:e,dir:t,gitdir:r=$(t,\".git\"),oid:n,filepath:i=void 0,cache:a={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"oid\",n),await Ss({fs:new X(e),cache:a,gitdir:r,oid:n,filepath:i})}catch(s){throw s.caller=\"git.readTree\",s}}async function R8({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,cache:i={}}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"filepath\",n),await mt.acquire({fs:new X(e),gitdir:r,cache:i},async function(a){a.delete({filepath:n})})}catch(a){throw a.caller=\"git.remove\",a}}async function M8({fs:e,cache:t,onSign:r,gitdir:n,ref:i=\"refs/notes/commits\",oid:a,author:s,committer:o,signingKey:c}){let l;try{l=await q.resolve({gitdir:n,fs:e,ref:i})}catch(p){if(!(p instanceof Ne))throw p}let f=(await Ss({fs:e,gitdir:n,oid:l||\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"})).tree;f=f.filter(p=>p.path!==a);let d=await Ap({fs:e,gitdir:n,tree:f});return await vu({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tree:d,parent:l&&[l],message:`Note removed by 'isomorphic-git removeNote'\n`,author:s,committer:o,signingKey:c})}async function O8({fs:e,onSign:t,dir:r,gitdir:n=$(r,\".git\"),ref:i=\"refs/notes/commits\",oid:a,author:s,committer:o,signingKey:c,cache:l={}}){try{C(\"fs\",e),C(\"gitdir\",n),C(\"oid\",a);let u=new X(e),f=await ca({fs:u,gitdir:n,author:s});if(!f)throw new zt(\"author\");let d=await bs({fs:u,gitdir:n,author:f,committer:o});if(!d)throw new zt(\"committer\");return await M8({fs:u,cache:l,onSign:t,gitdir:n,ref:i,oid:a,author:f,committer:d,signingKey:c})}catch(u){throw u.caller=\"git.removeNote\",u}}async function I8({fs:e,gitdir:t,oldref:r,ref:n,checkout:i=!1}){if(n!==Jr.default.clean(n))throw new zn(n,Jr.default.clean(n));if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let a=`refs/heads/${r}`,s=`refs/heads/${n}`;if(await q.exists({fs:e,gitdir:t,ref:s}))throw new Qr(\"branch\",n,!1);let c=await q.resolve({fs:e,gitdir:t,ref:a,depth:1});await q.writeRef({fs:e,gitdir:t,ref:s,value:c}),await q.deleteRef({fs:e,gitdir:t,ref:a});let u=await fa({fs:e,gitdir:t,fullname:!0})===a;(i||u)&&await q.writeSymbolicRef({fs:e,gitdir:t,ref:\"HEAD\",value:s})}async function F8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,oldref:i,checkout:a=!1}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),C(\"oldref\",i),await I8({fs:new X(e),gitdir:r,ref:n,oldref:i,checkout:a})}catch(s){throw s.caller=\"git.renameBranch\",s}}async function R2({gitdir:e,type:t,object:r}){return Gn(_i.wrap({type:t,object:r}))}async function $8({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,ref:i,cache:a={}}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"filepath\",n);let s=new X(e),o,c;try{o=await q.resolve({fs:s,gitdir:r,ref:i||\"HEAD\"})}catch(f){if(i)throw f}if(o)try{o=await vl({fs:s,cache:a,gitdir:r,oid:o,filepath:n})}catch(f){o=null}let l={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:0,uid:0,gid:0,size:0},u=t&&await s.read($(t,n));u&&(c=await R2({gitdir:r,type:\"blob\",object:u}),o===c&&(l=await s.lstat($(t,n)))),await mt.acquire({fs:s,gitdir:r,cache:a},async function(f){f.delete({filepath:n}),o&&f.insert({filepath:n,stats:l,oid:o})})}catch(s){throw s.caller=\"git.reset\",s}}async function L8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,depth:i}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),await q.resolve({fs:new X(e),gitdir:r,ref:n,depth:i})}catch(a){throw a.caller=\"git.resolveRef\",a}}async function D8({fs:e,dir:t,gitdir:r=$(t,\".git\"),path:n,value:i,append:a=!1}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"path\",n);let s=new X(e),o=await We.get({fs:s,gitdir:r});a?await o.append(n,i):await o.set(n,i),await We.save({fs:s,gitdir:r,config:o})}catch(s){throw s.caller=\"git.setConfig\",s}}async function N8({fs:e,dir:t,gitdir:r=$(t,\".git\"),filepath:n,cache:i={}}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"filepath\",n);let a=new X(e);if(await ws.isIgnored({fs:a,gitdir:r,dir:t,filepath:n}))return\"ignored\";let o=await j8({fs:a,cache:i,gitdir:r}),c=await M2({fs:a,cache:i,gitdir:r,tree:o,path:n}),l=await mt.acquire({fs:a,gitdir:r,cache:i},async function(m){for(let v of m)if(v.path===n)return v;return null}),u=await a.lstat($(t,n)),f=c!==null,d=l!==null,h=u!==null,p=async()=>{if(d&&!ru(l,u))return l.oid;{let m=await a.read($(t,n)),v=await R2({gitdir:r,type:\"blob\",object:m});return d&&l.oid===v&&u.size!==-1&&mt.acquire({fs:a,gitdir:r,cache:i},async function(y){y.insert({filepath:n,stats:u,oid:v})}),v}};if(!f&&!h&&!d)return\"absent\";if(!f&&!h&&d)return\"*absent\";if(!f&&h&&!d)return\"*added\";if(!f&&h&&d)return await p()===l.oid?\"added\":\"*added\";if(f&&!h&&!d)return\"deleted\";if(f&&!h&&d)return c===l.oid,\"*deleted\";if(f&&h&&!d)return await p()===c?\"*undeleted\":\"*undeletemodified\";if(f&&h&&d){let m=await p();return m===c?m===l.oid?\"unmodified\":\"*unmodified\":m===l.oid?\"modified\":\"*modified\"}}catch(a){throw a.caller=\"git.status\",a}}async function M2({fs:e,cache:t,gitdir:r,tree:n,path:i}){typeof i==\"string\"&&(i=i.split(\"/\"));let a=i.shift();for(let s of n)if(s.path===a){if(i.length===0)return s.oid;let{type:o,object:c}=await qe({fs:e,cache:t,gitdir:r,oid:s.oid});if(o===\"tree\"){let l=er.from(c);return M2({fs:e,cache:t,gitdir:r,tree:l,path:i})}if(o===\"blob\")throw new Gt(s.oid,o,\"blob\",i.join(\"/\"))}return null}async function j8({fs:e,cache:t,gitdir:r}){let n;try{n=await q.resolve({fs:e,gitdir:r,ref:\"HEAD\"})}catch(a){if(a instanceof Ne)return[]}let{tree:i}=await Ss({fs:e,cache:t,gitdir:r,oid:n});return i}async function B8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n=\"HEAD\",filepaths:i=[\".\"],filter:a,cache:s={},ignored:o=!1}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n);let c=new X(e);return await ys({fs:c,cache:s,dir:t,gitdir:r,trees:[wi({ref:n}),gu(),mu()],map:async function(l,[u,f,d]){if(!u&&!d&&f&&!o&&await ws.isIgnored({fs:c,dir:t,filepath:l})||!i.some(k=>m2(l,k)))return null;if(a&&!a(l))return;let[h,p,m]=await Promise.all([u&&u.type(),f&&f.type(),d&&d.type()]),v=[h,p,m].includes(\"blob\");if((h===\"tree\"||h===\"special\")&&!v)return;if(h===\"commit\")return null;if((p===\"tree\"||p===\"special\")&&!v)return;if(m===\"commit\")return null;if((m===\"tree\"||m===\"special\")&&!v)return;let y=h===\"blob\"?await u.oid():void 0,b=m===\"blob\"?await d.oid():void 0,x;h!==\"blob\"&&p===\"blob\"&&m!==\"blob\"?x=\"42\":p===\"blob\"&&(x=await f.oid());let E=[void 0,y,x,b],_=E.map(k=>E.indexOf(k));return _.shift(),[l,..._]}})}catch(c){throw c.caller=\"git.statusMatrix\",c}}async function H8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,object:i,force:a=!1}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n);let s=new X(e);if(n===void 0)throw new Qt(\"ref\");n=n.startsWith(\"refs/tags/\")?n:`refs/tags/${n}`;let o=await q.resolve({fs:s,gitdir:r,ref:i||\"HEAD\"});if(!a&&await q.exists({fs:s,gitdir:r,ref:n}))throw new Qr(\"tag\",n);await q.writeRef({fs:s,gitdir:r,ref:n,value:o})}catch(s){throw s.caller=\"git.tag\",s}}async function U8({fs:e,dir:t,gitdir:r=$(t,\".git\"),cache:n={},filepath:i,oid:a,mode:s,add:o,remove:c,force:l}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"filepath\",i);let u=new X(e);if(c)return await mt.acquire({fs:u,gitdir:r,cache:n},async function(d){let h;if(!l&&(h=await u.lstat($(t,i)),h)){if(h.isDirectory())throw new xi(\"directory\");return}d.has({filepath:i})&&d.delete({filepath:i})});let f;if(!a){if(f=await u.lstat($(t,i)),!f)throw new Ne(`file at \"${i}\" on disk and \"remove\" not set`);if(f.isDirectory())throw new xi(\"directory\")}return await mt.acquire({fs:u,gitdir:r,cache:n},async function(d){if(!o&&!d.has({filepath:i}))throw new Ne(`file at \"${i}\" in index and \"add\" not set`);let h={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:s,uid:0,gid:0,size:0};if(!a){h=f;let p=h.isSymbolicLink()?await u.readlink($(t,i)):await u.read($(t,i));a=await mr({fs:u,gitdir:r,type:\"blob\",format:\"content\",object:p})}return d.insert({filepath:i,oid:a,stats:h}),a})}catch(u){throw u.caller=\"git.updateIndex\",u}}function G8(){try{return yu.version}catch(e){throw e.caller=\"git.version\",e}}async function z8({fs:e,dir:t,gitdir:r=$(t,\".git\"),trees:n,map:i,reduce:a,iterate:s,cache:o={}}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"trees\",n),await ys({fs:new X(e),cache:o,dir:t,gitdir:r,trees:n,map:i,reduce:a,iterate:s})}catch(c){throw c.caller=\"git.walk\",c}}async function V8({fs:e,dir:t,gitdir:r=$(t,\".git\"),blob:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"blob\",n),await mr({fs:new X(e),gitdir:r,type:\"blob\",object:n,format:\"content\"})}catch(i){throw i.caller=\"git.writeBlob\",i}}async function W8({fs:e,gitdir:t,commit:r}){let n=tr.from(r).toObject();return await mr({fs:e,gitdir:t,type:\"commit\",object:n,format:\"content\"})}async function q8({fs:e,dir:t,gitdir:r=$(t,\".git\"),commit:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"commit\",n),await W8({fs:new X(e),gitdir:r,commit:n})}catch(i){throw i.caller=\"git.writeCommit\",i}}async function Y8({fs:e,dir:t,gitdir:r=$(t,\".git\"),type:n,object:i,format:a=\"parsed\",oid:s,encoding:o=void 0}){try{let c=new X(e);if(a===\"parsed\"){switch(n){case\"commit\":i=tr.from(i).toObject();break;case\"tree\":i=er.from(i).toObject();break;case\"blob\":i=Buffer.from(i,o);break;case\"tag\":i=pr.from(i).toObject();break;default:throw new Gt(s||\"\",n,\"blob|commit|tag|tree\")}a=\"content\"}return s=await mr({fs:c,gitdir:r,type:n,object:i,oid:s,format:a}),s}catch(c){throw c.caller=\"git.writeObject\",c}}async function X8({fs:e,dir:t,gitdir:r=$(t,\".git\"),ref:n,value:i,force:a=!1,symbolic:s=!1}){try{C(\"fs\",e),C(\"gitdir\",r),C(\"ref\",n),C(\"value\",i);let o=new X(e);if(n!==Jr.default.clean(n))throw new zn(n,Jr.default.clean(n));if(!a&&await q.exists({fs:o,gitdir:r,ref:n}))throw new Qr(\"ref\",n);s?await q.writeSymbolicRef({fs:o,gitdir:r,ref:n,value:i}):(i=await q.resolve({fs:o,gitdir:r,ref:i}),await q.writeRef({fs:o,gitdir:r,ref:n,value:i}))}catch(o){throw o.caller=\"git.writeRef\",o}}async function Z8({fs:e,gitdir:t,tag:r}){let n=pr.from(r).toObject();return await mr({fs:e,gitdir:t,type:\"tag\",object:n,format:\"content\"})}async function K8({fs:e,dir:t,gitdir:r=$(t,\".git\"),tag:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"tag\",n),await Z8({fs:new X(e),gitdir:r,tag:n})}catch(i){throw i.caller=\"git.writeTag\",i}}async function J8({fs:e,dir:t,gitdir:r=$(t,\".git\"),tree:n}){try{return C(\"fs\",e),C(\"gitdir\",r),C(\"tree\",n),await Ap({fs:new X(e),gitdir:r,tree:n})}catch(i){throw i.caller=\"git.writeTree\",i}}var Q8={Errors:gl,STAGE:mu,TREE:wi,WORKDIR:gu,add:JM,abortMerge:qM,addNote:eO,addRemote:tO,annotatedTag:nO,branch:aO,checkout:oO,clone:yO,commit:wO,getConfig:BO,getConfigAll:UO,setConfig:D8,currentBranch:bO,deleteBranch:xO,deleteRef:SO,deleteRemote:AO,deleteTag:TO,expandOid:MO,expandRef:OO,fastForward:LO,fetch:DO,findMergeBase:NO,findRoot:jO,getRemoteInfo:GO,getRemoteInfo2:zO,hashBlob:WO,indexPack:YO,init:XO,isDescendent:ZO,isIgnored:KO,listBranches:JO,listFiles:e8,listNotes:r8,listRemotes:i8,listServerRefs:o8,listTags:l8,log:d8,merge:h8,packObjects:g8,pull:v8,push:x8,readBlob:wl,readCommit:S8,readNote:A8,readObject:k8,readTag:C8,readTree:P8,remove:R8,removeNote:O8,renameBranch:F8,resetIndex:$8,updateIndex:U8,resolveRef:L8,status:N8,statusMatrix:B8,tag:H8,version:G8,walk:z8,writeBlob:V8,writeCommit:q8,writeObject:Y8,writeRef:X8,writeTag:K8,writeTree:J8},ie=Q8;var OP=ze(require(\"path\")),Ce=require(\"obsidian\");g();var Sa=require(\"obsidian\");g();var qg=require(\"child_process\"),yT=ze(_u()),Zn=ze(require(\"fs/promises\")),Xn=require(\"obsidian\"),Be=ze(require(\"path\")),Vl=require(\"path\");g();var $u=ze(D2(),1),Mu=ze(_u(),1),c_=require(\"child_process\"),W_=ze(Rp(),1),Cs=ze(Rp(),1),yx=require(\"node:events\"),Iu=Object.defineProperty,yI=Object.defineProperties,wI=Object.getOwnPropertyDescriptor,bI=Object.getOwnPropertyDescriptors,Zp=Object.getOwnPropertyNames,N2=Object.getOwnPropertySymbols,vb=Object.prototype.hasOwnProperty,_I=Object.prototype.propertyIsEnumerable,j2=(e,t,r)=>t in e?Iu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Fr=(e,t)=>{for(var r in t||(t={}))vb.call(t,r)&&j2(e,r,t[r]);if(N2)for(var r of N2(t))_I.call(t,r)&&j2(e,r,t[r]);return e},xl=(e,t)=>yI(e,bI(t)),W=(e,t)=>function(){return e&&(t=(0,e[Zp(e)[0]])(e=0)),t},xI=(e,t)=>function(){return t||(0,e[Zp(e)[0]])((t={exports:{}}).exports,t),t.exports},rt=(e,t)=>{for(var r in t)Iu(e,r,{get:t[r],enumerable:!0})},SI=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Zp(t))!vb.call(e,i)&&i!==r&&Iu(e,i,{get:()=>t[i],enumerable:!(n=wI(t,i))||n.enumerable});return e},Ke=e=>SI(Iu({},\"__esModule\",{value:!0}),e),_l=(e,t,r)=>new Promise((n,i)=>{var a=c=>{try{o(r.next(c))}catch(l){i(l)}},s=c=>{try{o(r.throw(c))}catch(l){i(l)}},o=c=>c.done?n(c.value):Promise.resolve(c.value).then(a,s);o((r=r.apply(e,t)).next())});function EI(...e){let t=new String(e);return Fu.set(t,e),t}function Pu(e){return e instanceof String&&Fu.has(e)}function B2(e){return Fu.get(e)||[]}var Fu,kl=W({\"src/lib/args/pathspec.ts\"(){\"use strict\";Fu=new WeakMap}}),wr,Ei=W({\"src/lib/errors/git-error.ts\"(){\"use strict\";wr=class extends Error{constructor(e,t){super(t),this.task=e,Object.setPrototypeOf(this,new.target.prototype)}}}}),Tl,Rs=W({\"src/lib/errors/git-response-error.ts\"(){\"use strict\";Ei(),Tl=class extends wr{constructor(e,t){super(void 0,t||String(e)),this.git=e}}}}),yb,wb=W({\"src/lib/errors/task-configuration-error.ts\"(){\"use strict\";Ei(),yb=class extends wr{constructor(e){super(void 0,e)}}}});function bb(e){return typeof e==\"function\"?e:ga}function _b(e){return typeof e==\"function\"&&e!==ga}function xb(e,t){let r=e.indexOf(t);return r<=0?[e,\"\"]:[e.substr(0,r),e.substr(r+1)]}function Sb(e,t=0){return Eb(e)&&e.length>t?e[t]:void 0}function ma(e,t=0){if(Eb(e)&&e.length>t)return e[e.length-1-t]}function Eb(e){return!!(e&&typeof e.length==\"number\")}function Cl(e=\"\",t=!0,r=`\n`){return e.split(r).reduce((n,i)=>{let a=t?i.trim():i;return a&&n.push(a),n},[])}function Kp(e,t){return Cl(e,!0).map(r=>t(r))}function Jp(e){return(0,$u.exists)(e,$u.FOLDER)}function ke(e,t){return Array.isArray(e)?e.includes(t)||e.push(t):e.add(t),t}function Ab(e,t){return Array.isArray(e)&&!e.includes(t)&&e.push(t),e}function Lu(e,t){if(Array.isArray(e)){let r=e.indexOf(t);r>=0&&e.splice(r,1)}else e.delete(t);return t}function xn(e){return Array.isArray(e)?e:[e]}function kb(e){return e.replace(/[\\s-]+(.)/g,(t,r)=>r.toUpperCase())}function Tb(e){return xn(e).map(String)}function Ie(e,t=0){if(e==null)return t;let r=parseInt(e,10);return isNaN(r)?t:r}function Sl(e,t){let r=[];for(let n=0,i=e.length;n<i;n++)r.push(t,e[n]);return r}function El(e){return(Array.isArray(e)?Buffer.concat(e):e).toString(\"utf-8\")}function Cb(e,t){return Object.assign({},...t.map(r=>r in e?{[r]:e[r]}:{}))}function Dp(e=0){return new Promise(t=>setTimeout(t,e))}function Np(e){if(e!==!1)return e}var Ps,ga,Pl,Du=W({\"src/lib/utils/util.ts\"(){\"use strict\";Ps=\"\\0\",ga=()=>{},Pl=Object.prototype.toString.call.bind(Object.prototype.toString)}});function Sn(e,t,r){return t(e)?e:arguments.length>2?r:void 0}function Qp(e,t){let r=Pu(e)?\"string\":typeof e;return/number|string|boolean/.test(r)&&(!t||!t.includes(r))}function em(e){return!!e&&Pl(e)===\"[object Object]\"}function Pb(e){return typeof e==\"function\"}var Rl,Pt,Rb,Ru,tm,Mb=W({\"src/lib/utils/argument-filters.ts\"(){\"use strict\";Du(),kl(),Rl=e=>Array.isArray(e),Pt=e=>typeof e==\"string\",Rb=e=>Array.isArray(e)&&e.every(Pt),Ru=e=>Pt(e)||Array.isArray(e)&&e.every(Pt),tm=e=>e==null||\"number|boolean|function\".includes(typeof e)?!1:Array.isArray(e)||typeof e==\"string\"||typeof e.length==\"number\"}}),jp,AI=W({\"src/lib/utils/exit-codes.ts\"(){\"use strict\";jp=(e=>(e[e.SUCCESS=0]=\"SUCCESS\",e[e.ERROR=1]=\"ERROR\",e[e.NOT_FOUND=-2]=\"NOT_FOUND\",e[e.UNCLEAN=128]=\"UNCLEAN\",e))(jp||{})}}),Al,kI=W({\"src/lib/utils/git-output-streams.ts\"(){\"use strict\";Al=class{constructor(e,t){this.stdOut=e,this.stdErr=t}asStrings(){return new Al(this.stdOut.toString(\"utf8\"),this.stdErr.toString(\"utf8\"))}}}}),ce,Si,TI=W({\"src/lib/utils/line-parser.ts\"(){\"use strict\";ce=class{constructor(e,t){this.matches=[],this.parse=(r,n)=>(this.resetMatches(),this._regExp.every((i,a)=>this.addMatch(i,a,r(a)))?this.useMatches(n,this.prepareMatches())!==!1:!1),this._regExp=Array.isArray(e)?e:[e],t&&(this.useMatches=t)}useMatches(e,t){throw new Error(\"LineParser:useMatches not implemented\")}resetMatches(){this.matches.length=0}prepareMatches(){return this.matches}addMatch(e,t,r){let n=r&&e.exec(r);return n&&this.pushMatch(t,n),!!n}pushMatch(e,t){this.matches.push(...t.slice(1))}},Si=class extends ce{addMatch(e,t,r){return/^remote:\\s/.test(String(r))&&super.addMatch(e,t,r)}pushMatch(e,t){(e>0||t.length>1)&&super.pushMatch(e,t)}}}});function Ob(...e){let t=process.cwd(),r=Object.assign(Fr({baseDir:t},Ib),...e.filter(n=>typeof n==\"object\"&&n));return r.baseDir=r.baseDir||t,r.trimmed=r.trimmed===!0,r}var Ib,CI=W({\"src/lib/utils/simple-git-options.ts\"(){\"use strict\";Ib={binary:\"git\",maxConcurrentProcesses:5,config:[],trimmed:!1}}});function rm(e,t=[]){return em(e)?Object.keys(e).reduce((r,n)=>{let i=e[n];return Pu(i)?r.push(i):Qp(i,[\"boolean\"])?r.push(n+\"=\"+i):r.push(n),r},t):t}function rr(e,t=0,r=!1){let n=[];for(let i=0,a=t<0?e.length:t;i<a;i++)\"string|number\".includes(typeof e[i])&&n.push(String(e[i]));return rm(nm(e),n),r||n.push(...PI(e)),n}function PI(e){let t=typeof ma(e)==\"function\";return Sn(ma(e,t?1:0),Rl,[])}function nm(e){let t=Pb(ma(e));return Sn(ma(e,t?1:0),em)}function Je(e,t=!0){let r=bb(ma(e));return t||_b(r)?r:void 0}var RI=W({\"src/lib/utils/task-options.ts\"(){\"use strict\";Mb(),Du(),kl()}});function Bp(e,t){return e(t.stdOut,t.stdErr)}function ir(e,t,r,n=!0){return xn(r).forEach(i=>{for(let a=Cl(i,n),s=0,o=a.length;s<o;s++){let c=(l=0)=>{if(!(s+l>=o))return a[s+l]};t.some(({parse:l})=>l(c,e))}}),e}var MI=W({\"src/lib/utils/task-parser.ts\"(){\"use strict\";Du()}}),Fb={};rt(Fb,{ExitCodes:()=>jp,GitOutputStreams:()=>Al,LineParser:()=>ce,NOOP:()=>ga,NULL:()=>Ps,RemoteLineParser:()=>Si,append:()=>ke,appendTaskOptions:()=>rm,asArray:()=>xn,asCamelCase:()=>kb,asFunction:()=>bb,asNumber:()=>Ie,asStringArray:()=>Tb,bufferToString:()=>El,callTaskParser:()=>Bp,createInstanceConfig:()=>Ob,delay:()=>Dp,filterArray:()=>Rl,filterFunction:()=>Pb,filterHasLength:()=>tm,filterPlainObject:()=>em,filterPrimitives:()=>Qp,filterString:()=>Pt,filterStringArray:()=>Rb,filterStringOrStringArray:()=>Ru,filterType:()=>Sn,first:()=>Sb,folderExists:()=>Jp,forEachLineWithContent:()=>Kp,getTrailingOptions:()=>rr,including:()=>Ab,isUserFunction:()=>_b,last:()=>ma,objectToString:()=>Pl,orVoid:()=>Np,parseStringResponse:()=>ir,pick:()=>Cb,prefixedArray:()=>Sl,remove:()=>Lu,splitOn:()=>xb,toLinesWithContent:()=>Cl,trailingFunctionArgument:()=>Je,trailingOptionsArgument:()=>nm});var oe=W({\"src/lib/utils/index.ts\"(){\"use strict\";Mb(),AI(),kI(),TI(),CI(),RI(),MI(),Du()}}),$b={};rt($b,{CheckRepoActions:()=>Hp,checkIsBareRepoTask:()=>Db,checkIsRepoRootTask:()=>Lb,checkIsRepoTask:()=>OI});function OI(e){switch(e){case\"bare\":return Db();case\"root\":return Lb()}return{commands:[\"rev-parse\",\"--is-inside-work-tree\"],format:\"utf-8\",onError:Nu,parser:im}}function Lb(){return{commands:[\"rev-parse\",\"--git-dir\"],format:\"utf-8\",onError:Nu,parser(t){return/^\\.(git)?$/.test(t.trim())}}}function Db(){return{commands:[\"rev-parse\",\"--is-bare-repository\"],format:\"utf-8\",onError:Nu,parser:im}}function II(e){return/(Not a git repository|Kein Git-Repository)/i.test(String(e))}var Hp,Nu,im,Nb=W({\"src/lib/tasks/check-is-repo.ts\"(){\"use strict\";oe(),Hp=(e=>(e.BARE=\"bare\",e.IN_TREE=\"tree\",e.IS_REPO_ROOT=\"root\",e))(Hp||{}),Nu=({exitCode:e},t,r,n)=>{if(e===128&&II(t))return r(Buffer.from(\"false\"));n(t)},im=e=>e.trim()===\"true\"}});function FI(e,t){let r=new jb(e),n=e?Hb:Bb;return Cl(t).forEach(i=>{let a=i.replace(n,\"\");r.paths.push(a),(Ub.test(a)?r.folders:r.files).push(a)}),r}var jb,Bb,Hb,Ub,$I=W({\"src/lib/responses/CleanSummary.ts\"(){\"use strict\";oe(),jb=class{constructor(e){this.dryRun=e,this.paths=[],this.files=[],this.folders=[]}},Bb=/^[a-z]+\\s*/i,Hb=/^[a-z]+\\s+[a-z]+\\s*/i,Ub=/\\/$/}}),Up={};rt(Up,{EMPTY_COMMANDS:()=>ju,adhocExecTask:()=>Gb,configurationErrorTask:()=>nr,isBufferTask:()=>Vb,isEmptyTask:()=>Wb,straightThroughBufferTask:()=>zb,straightThroughStringTask:()=>Vt});function Gb(e){return{commands:ju,format:\"empty\",parser:e}}function nr(e){return{commands:ju,format:\"empty\",parser(){throw typeof e==\"string\"?new yb(e):e}}}function Vt(e,t=!1){return{commands:e,format:\"utf-8\",parser(r){return t?String(r).trim():r}}}function zb(e){return{commands:e,format:\"buffer\",parser(t){return t}}}function Vb(e){return e.format===\"buffer\"}function Wb(e){return e.format===\"empty\"||!e.commands.length}var ju,tt=W({\"src/lib/tasks/task.ts\"(){\"use strict\";wb(),ju=[]}}),qb={};rt(qb,{CONFIG_ERROR_INTERACTIVE_MODE:()=>am,CONFIG_ERROR_MODE_REQUIRED:()=>sm,CONFIG_ERROR_UNKNOWN_OPTION:()=>om,CleanOptions:()=>Au,cleanTask:()=>Yb,cleanWithOptionsTask:()=>LI,isCleanOptionsArray:()=>DI});function LI(e,t){let{cleanMode:r,options:n,valid:i}=NI(e);return r?i.options?(n.push(...t),n.some(HI)?nr(am):Yb(r,n)):nr(om+JSON.stringify(e)):nr(sm)}function Yb(e,t){return{commands:[\"clean\",`-${e}`,...t],format:\"utf-8\",parser(n){return FI(e===\"n\",n)}}}function DI(e){return Array.isArray(e)&&e.every(t=>lm.has(t))}function NI(e){let t,r=[],n={cleanMode:!1,options:!0};return e.replace(/[^a-z]i/g,\"\").split(\"\").forEach(i=>{jI(i)?(t=i,n.cleanMode=!0):n.options=n.options&&BI(r[r.length]=`-${i}`)}),{cleanMode:t,options:r,valid:n}}function jI(e){return e===\"f\"||e===\"n\"}function BI(e){return/^-[a-z]$/i.test(e)&&lm.has(e.charAt(1))}function HI(e){return/^-[^\\-]/.test(e)?e.indexOf(\"i\")>0:e===\"--interactive\"}var am,sm,om,Au,lm,Xb=W({\"src/lib/tasks/clean.ts\"(){\"use strict\";$I(),oe(),tt(),am=\"Git clean interactive mode is not supported\",sm='Git clean mode parameter (\"n\" or \"f\") is required',om=\"Git clean unknown option found in: \",Au=(e=>(e.DRY_RUN=\"n\",e.FORCE=\"f\",e.IGNORED_INCLUDED=\"x\",e.IGNORED_ONLY=\"X\",e.EXCLUDING=\"e\",e.QUIET=\"q\",e.RECURSIVE=\"d\",e))(Au||{}),lm=new Set([\"i\",...Tb(Object.values(Au))])}});function UI(e){let t=new Kb;for(let r of Zb(e))t.addValue(r.file,String(r.key),r.value);return t}function GI(e,t){let r=null,n=[],i=new Map;for(let a of Zb(e,t))a.key===t&&(n.push(r=a.value),i.has(a.file)||i.set(a.file,[]),i.get(a.file).push(r));return{key:t,paths:Array.from(i.keys()),scopes:i,value:r,values:n}}function zI(e){return e.replace(/^(file):/,\"\")}function*Zb(e,t=null){let r=e.split(\"\\0\");for(let n=0,i=r.length-1;n<i;){let a=zI(r[n++]),s=r[n++],o=t;if(s.includes(`\n`)){let c=xb(s,`\n`);o=c[0],s=c[1]}yield{file:a,key:o,value:s}}}var Kb,VI=W({\"src/lib/responses/ConfigList.ts\"(){\"use strict\";oe(),Kb=class{constructor(){this.files=[],this.values=Object.create(null)}get all(){return this._all||(this._all=this.files.reduce((e,t)=>Object.assign(e,this.values[t]),{})),this._all}addFile(e){if(!(e in this.values)){let t=ma(this.files);this.values[e]=t?Object.create(this.values[t]):{},this.files.push(e)}return this.values[e]}addValue(e,t,r){let n=this.addFile(e);n.hasOwnProperty(t)?Array.isArray(n[t])?n[t].push(r):n[t]=[n[t],r]:n[t]=r,this._all=void 0}}}});function Mp(e,t){return typeof e==\"string\"&&Gp.hasOwnProperty(e)?e:t}function WI(e,t,r,n){let i=[\"config\",`--${n}`];return r&&i.push(\"--add\"),i.push(e,t),{commands:i,format:\"utf-8\",parser(a){return a}}}function qI(e,t){let r=[\"config\",\"--null\",\"--show-origin\",\"--get-all\",e];return t&&r.splice(1,0,`--${t}`),{commands:r,format:\"utf-8\",parser(n){return GI(n,e)}}}function YI(e){let t=[\"config\",\"--list\",\"--show-origin\",\"--null\"];return e&&t.push(`--${e}`),{commands:t,format:\"utf-8\",parser(r){return UI(r)}}}function XI(){return{addConfig(e,t,...r){return this._runTask(WI(e,t,r[0]===!0,Mp(r[1],\"local\")),Je(arguments))},getConfig(e,t){return this._runTask(qI(e,Mp(t,void 0)),Je(arguments))},listConfig(...e){return this._runTask(YI(Mp(e[0],void 0)),Je(arguments))}}}var Gp,Jb=W({\"src/lib/tasks/config.ts\"(){\"use strict\";VI(),oe(),Gp=(e=>(e.system=\"system\",e.global=\"global\",e.local=\"local\",e.worktree=\"worktree\",e))(Gp||{})}});function ZI(e){return Qb.has(e)}var Op,Qb,e_=W({\"src/lib/tasks/diff-name-status.ts\"(){\"use strict\";Op=(e=>(e.ADDED=\"A\",e.COPIED=\"C\",e.DELETED=\"D\",e.MODIFIED=\"M\",e.RENAMED=\"R\",e.CHANGED=\"T\",e.UNMERGED=\"U\",e.UNKNOWN=\"X\",e.BROKEN=\"B\",e))(Op||{}),Qb=new Set(Object.values(Op))}});function KI(...e){return new r_().param(...e)}function JI(e){let t=new Set,r={};return Kp(e,n=>{let[i,a,s]=n.split(Ps);t.add(i),(r[i]=r[i]||[]).push({line:Ie(a),path:i,preview:s})}),{paths:t,results:r}}function QI(){return{grep(e){let t=Je(arguments),r=rr(arguments);for(let i of t_)if(r.includes(i))return this._runTask(nr(`git.grep: use of \"${i}\" is not supported.`),t);typeof e==\"string\"&&(e=KI().param(e));let n=[\"grep\",\"--null\",\"-n\",\"--full-name\",...r,...e];return this._runTask({commands:n,format:\"utf-8\",parser(i){return JI(i)}},t)}}}var t_,bl,H2,r_,n_=W({\"src/lib/tasks/grep.ts\"(){\"use strict\";oe(),tt(),t_=[\"-h\"],bl=Symbol(\"grepQuery\"),r_=class{constructor(){this[H2]=[]}*[(H2=bl,Symbol.iterator)](){for(let e of this[bl])yield e}and(...e){return e.length&&this[bl].push(\"--and\",\"(\",...Sl(e,\"-e\"),\")\"),this}param(...e){return this[bl].push(...Sl(e,\"-e\")),this}}}}),i_={};rt(i_,{ResetMode:()=>ku,getResetMode:()=>tF,resetTask:()=>eF});function eF(e,t){let r=[\"reset\"];return a_(e)&&r.push(`--${e}`),r.push(...t),Vt(r)}function tF(e){if(a_(e))return e;switch(typeof e){case\"string\":case\"undefined\":return\"soft\"}}function a_(e){return s_.includes(e)}var ku,s_,o_=W({\"src/lib/tasks/reset.ts\"(){\"use strict\";tt(),ku=(e=>(e.MIXED=\"mixed\",e.SOFT=\"soft\",e.HARD=\"hard\",e.MERGE=\"merge\",e.KEEP=\"keep\",e))(ku||{}),s_=Array.from(Object.values(ku))}});function rF(){return(0,Mu.default)(\"simple-git\")}function U2(e,t,r){return!t||!String(t).replace(/\\s*/,\"\")?r?(n,...i)=>{e(n,...i),r(n,...i)}:e:(n,...i)=>{e(`%s ${n}`,t,...i),r&&r(n,...i)}}function nF(e,t,{namespace:r}){if(typeof e==\"string\")return e;let n=t&&t.namespace||\"\";return n.startsWith(r)?n.substr(r.length+1):n||r}function cm(e,t,r,n=rF()){let i=e&&`[${e}]`||\"\",a=[],s=typeof t==\"string\"?n.extend(t):t,o=nF(Sn(t,Pt),s,n);return l(r);function c(u,f){return ke(a,cm(e,o.replace(/^[^:]+/,u),f,n))}function l(u){let f=u&&`[${u}]`||\"\",d=s&&U2(s,f)||ga,h=U2(n,`${i} ${f}`,d);return Object.assign(s?d:h,{label:e,sibling:c,info:h,step:l})}}var l_=W({\"src/lib/git-logger.ts\"(){\"use strict\";oe(),Mu.default.formatters.L=e=>String(tm(e)?e.length:\"-\"),Mu.default.formatters.B=e=>Buffer.isBuffer(e)?e.toString(\"utf8\"):Pl(e)}}),Su,zp,iF=W({\"src/lib/runners/tasks-pending-queue.ts\"(){\"use strict\";Ei(),l_(),Su=class{constructor(e=\"GitExecutor\"){this.logLabel=e,this._queue=new Map}withProgress(e){return this._queue.get(e)}createProgress(e){let t=Su.getName(e.commands[0]),r=cm(this.logLabel,t);return{task:e,logger:r,name:t}}push(e){let t=this.createProgress(e);return t.logger(\"Adding task to the queue, commands = %o\",e.commands),this._queue.set(e,t),t}fatal(e){for(let[t,{logger:r}]of Array.from(this._queue.entries()))t===e.task?(r.info(\"Failed %o\",e),r(\"Fatal exception, any as-yet un-started tasks run through this executor will not be attempted\")):r.info(\"A fatal exception occurred in a previous task, the queue has been purged: %o\",e.message),this.complete(t);if(this._queue.size!==0)throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`)}complete(e){this.withProgress(e)&&this._queue.delete(e)}attempt(e){let t=this.withProgress(e);if(!t)throw new wr(void 0,\"TasksPendingQueue: attempt called for an unknown task\");return t.logger(\"Starting task\"),t}static getName(e=\"empty\"){return`task:${e}:${++Su.counter}`}},zp=Su,zp.counter=0}});function pa(e,t){return{method:Sb(e.commands)||\"\",commands:t}}function aF(e,t){return r=>{t(\"[ERROR] child process exception %o\",r),e.push(Buffer.from(String(r.stack),\"ascii\"))}}function G2(e,t,r,n){return i=>{r(\"%s received %L bytes\",t,i),n(\"%B\",i),e.push(i)}}var Vp,sF=W({\"src/lib/runners/git-executor-chain.ts\"(){\"use strict\";Ei(),tt(),oe(),iF(),Vp=class{constructor(e,t,r){this._executor=e,this._scheduler=t,this._plugins=r,this._chain=Promise.resolve(),this._queue=new zp}get cwd(){return this._cwd||this._executor.cwd}set cwd(e){this._cwd=e}get env(){return this._executor.env}get outputHandler(){return this._executor.outputHandler}chain(){return this}push(e){return this._queue.push(e),this._chain=this._chain.then(()=>this.attemptTask(e))}attemptTask(e){return _l(this,null,function*(){let t=yield this._scheduler.next(),r=()=>this._queue.complete(e);try{let{logger:n}=this._queue.attempt(e);return yield Wb(e)?this.attemptEmptyTask(e,n):this.attemptRemoteTask(e,n)}catch(n){throw this.onFatalException(e,n)}finally{r(),t()}})}onFatalException(e,t){let r=t instanceof wr?Object.assign(t,{task:e}):new wr(e,t&&String(t));return this._chain=Promise.resolve(),this._queue.fatal(r),r}attemptRemoteTask(e,t){return _l(this,null,function*(){let r=this._plugins.exec(\"spawn.binary\",\"\",pa(e,e.commands)),n=this._plugins.exec(\"spawn.args\",[...e.commands],pa(e,e.commands)),i=yield this.gitResponse(e,r,n,this.outputHandler,t.step(\"SPAWN\")),a=yield this.handleTaskData(e,n,i,t.step(\"HANDLE\"));return t(\"passing response to task's parser as a %s\",e.format),Vb(e)?Bp(e.parser,a):Bp(e.parser,a.asStrings())})}attemptEmptyTask(e,t){return _l(this,null,function*(){return t(\"empty task bypassing child process to call to task's parser\"),e.parser(this)})}handleTaskData(e,t,r,n){let{exitCode:i,rejection:a,stdOut:s,stdErr:o}=r;return new Promise((c,l)=>{n(\"Preparing to handle process response exitCode=%d stdOut=\",i);let{error:u}=this._plugins.exec(\"task.error\",{error:a},Fr(Fr({},pa(e,t)),r));if(u&&e.onError)return n.info(\"exitCode=%s handling with custom error handler\"),e.onError(r,u,f=>{n.info(\"custom error handler treated as success\"),n(\"custom error returned a %s\",Pl(f)),c(new Al(Array.isArray(f)?Buffer.concat(f):f,Buffer.concat(o)))},l);if(u)return n.info(\"handling as error: exitCode=%s stdErr=%s rejection=%o\",i,o.length,a),l(u);n.info(\"retrieving task output complete\"),c(new Al(Buffer.concat(s),Buffer.concat(o)))})}gitResponse(e,t,r,n,i){return _l(this,null,function*(){let a=i.sibling(\"output\"),s=this._plugins.exec(\"spawn.options\",{cwd:this.cwd,env:this.env,windowsHide:!0},pa(e,e.commands));return new Promise(o=>{let c=[],l=[];i.info(\"%s %o\",t,r),i(\"%O\",s);let u=this._beforeSpawn(e,r);if(u)return o({stdOut:c,stdErr:l,exitCode:9901,rejection:u});this._plugins.exec(\"spawn.before\",void 0,xl(Fr({},pa(e,r)),{kill(d){u=d||u}}));let f=(0,c_.spawn)(t,r,s);f.stdout.on(\"data\",G2(c,\"stdOut\",i,a.step(\"stdOut\"))),f.stderr.on(\"data\",G2(l,\"stdErr\",i,a.step(\"stdErr\"))),f.on(\"error\",aF(l,i)),n&&(i(\"Passing child process stdOut/stdErr to custom outputHandler\"),n(t,f.stdout,f.stderr,[...r])),this._plugins.exec(\"spawn.after\",void 0,xl(Fr({},pa(e,r)),{spawned:f,close(d,h){o({stdOut:c,stdErr:l,exitCode:d,rejection:u||h})},kill(d){f.killed||(u=d,f.kill(\"SIGINT\"))}}))})})}_beforeSpawn(e,t){let r;return this._plugins.exec(\"spawn.before\",void 0,xl(Fr({},pa(e,t)),{kill(n){r=n||r}})),r}}}}),u_={};rt(u_,{GitExecutor:()=>f_});var f_,oF=W({\"src/lib/runners/git-executor.ts\"(){\"use strict\";sF(),f_=class{constructor(e,t,r){this.cwd=e,this._scheduler=t,this._plugins=r,this._chain=new Vp(this,this._scheduler,this._plugins)}chain(){return new Vp(this,this._scheduler,this._plugins)}push(e){return this._chain.push(e)}}}});function lF(e,t,r=ga){let n=a=>{r(null,a)},i=a=>{(a==null?void 0:a.task)===e&&r(a instanceof Tl?cF(a):a,void 0)};t.then(n,i)}function cF(e){let t=n=>{console.warn(`simple-git deprecation notice: accessing GitResponseError.${n} should be GitResponseError.git.${n}, this will no longer be available in version 3`),t=ga};return Object.create(e,Object.getOwnPropertyNames(e.git).reduce(r,{}));function r(n,i){return i in e||(n[i]={enumerable:!1,configurable:!1,get(){return t(i),e.git[i]}}),n}}var uF=W({\"src/lib/task-callback.ts\"(){\"use strict\";Rs(),oe()}});function z2(e,t){return Gb(r=>{if(!Jp(e))throw new Error(`Git.cwd: cannot change to non-directory \"${e}\"`);return(t||r).cwd=e})}var fF=W({\"src/lib/tasks/change-working-directory.ts\"(){\"use strict\";oe(),tt()}});function Ip(e){let t=[\"checkout\",...e];return t[1]===\"-b\"&&t.includes(\"-B\")&&(t[1]=Lu(t,\"-B\")),Vt(t)}function dF(){return{checkout(){return this._runTask(Ip(rr(arguments,1)),Je(arguments))},checkoutBranch(e,t){return this._runTask(Ip([\"-b\",e,t,...rr(arguments)]),Je(arguments))},checkoutLocalBranch(e){return this._runTask(Ip([\"-b\",e,...rr(arguments)]),Je(arguments))}}}var hF=W({\"src/lib/tasks/checkout.ts\"(){\"use strict\";oe(),tt()}});function pF(){return{count:0,garbage:0,inPack:0,packs:0,prunePackable:0,size:0,sizeGarbage:0,sizePack:0}}function mF(){return{countObjects(){return this._runTask({commands:[\"count-objects\",\"--verbose\"],format:\"utf-8\",parser(e){return ir(pF(),[d_],e)}})}}}var d_,gF=W({\"src/lib/tasks/count-objects.ts\"(){\"use strict\";oe(),d_=new ce(/([a-z-]+): (\\d+)$/,(e,[t,r])=>{let n=kb(t);e.hasOwnProperty(n)&&(e[n]=Ie(r))})}});function vF(e){return ir({author:null,branch:\"\",commit:\"\",root:!1,summary:{changes:0,insertions:0,deletions:0}},h_,e)}var h_,yF=W({\"src/lib/parsers/parse-commit.ts\"(){\"use strict\";oe(),h_=[new ce(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/,(e,[t,r,n])=>{e.branch=t,e.commit=n,e.root=!!r}),new ce(/\\s*Author:\\s(.+)/i,(e,[t])=>{let r=t.split(\"<\"),n=r.pop();!n||!n.includes(\"@\")||(e.author={email:n.substr(0,n.length-1),name:r.join(\"<\").trim()})}),new ce(/(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,(e,[t,r,n])=>{e.summary.changes=parseInt(t,10)||0,e.summary.insertions=parseInt(r,10)||0,e.summary.deletions=parseInt(n,10)||0}),new ce(/^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,(e,[t,r,n])=>{e.summary.changes=parseInt(t,10)||0;let i=parseInt(r,10)||0;n===\"-\"?e.summary.deletions=i:n===\"+\"&&(e.summary.insertions=i)})]}});function wF(e,t,r){return{commands:[\"-c\",\"core.abbrev=40\",\"commit\",...Sl(e,\"-m\"),...t,...r],format:\"utf-8\",parser:vF}}function bF(){return{commit(t,...r){let n=Je(arguments),i=e(t)||wF(xn(t),xn(Sn(r[0],Ru,[])),[...Sn(r[1],Rl,[]),...rr(arguments,0,!0)]);return this._runTask(i,n)}};function e(t){return!Ru(t)&&nr(\"git.commit: requires the commit message to be supplied as a string/string[]\")}}var _F=W({\"src/lib/tasks/commit.ts\"(){\"use strict\";yF(),oe(),tt()}});function xF(){return{firstCommit(){return this._runTask(Vt([\"rev-list\",\"--max-parents=0\",\"HEAD\"],!0),Je(arguments))}}}var SF=W({\"src/lib/tasks/first-commit.ts\"(){\"use strict\";oe(),tt()}});function EF(e,t){let r=[\"hash-object\",e];return t&&r.push(\"-w\"),Vt(r,!0)}var AF=W({\"src/lib/tasks/hash-object.ts\"(){\"use strict\";tt()}});function kF(e,t,r){let n=String(r).trim(),i;if(i=p_.exec(n))return new Tu(e,t,!1,i[1]);if(i=m_.exec(n))return new Tu(e,t,!0,i[1]);let a=\"\",s=n.split(\" \");for(;s.length;)if(s.shift()===\"in\"){a=s.join(\" \");break}return new Tu(e,t,/^re/i.test(n),a)}var Tu,p_,m_,TF=W({\"src/lib/responses/InitSummary.ts\"(){\"use strict\";Tu=class{constructor(e,t,r,n){this.bare=e,this.path=t,this.existing=r,this.gitDir=n}},p_=/^Init.+ repository in (.+)$/,m_=/^Rein.+ in (.+)$/}});function CF(e){return e.includes(um)}function PF(e=!1,t,r){let n=[\"init\",...r];return e&&!CF(n)&&n.splice(1,0,um),{commands:n,format:\"utf-8\",parser(i){return kF(n.includes(\"--bare\"),t,i)}}}var um,RF=W({\"src/lib/tasks/init.ts\"(){\"use strict\";TF(),um=\"--bare\"}});function fm(e){for(let t=0;t<e.length;t++){let r=dm.exec(e[t]);if(r)return`--${r[1]}`}return\"\"}function MF(e){return dm.test(e)}var dm,Ml=W({\"src/lib/args/log-format.ts\"(){\"use strict\";dm=/^--(stat|numstat|name-only|name-status)(=|$)/}}),g_,OF=W({\"src/lib/responses/DiffSummary.ts\"(){\"use strict\";g_=class{constructor(){this.changed=0,this.deletions=0,this.insertions=0,this.files=[]}}}});function v_(e=\"\"){let t=y_[e];return r=>ir(new g_,t,r,!1)}var Fp,V2,W2,q2,y_,w_=W({\"src/lib/parsers/parse-diff-summary.ts\"(){\"use strict\";Ml(),OF(),e_(),oe(),Fp=[new ce(/^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,(e,[t,r,n=\"\"])=>{e.files.push({file:t.trim(),changes:Ie(r),insertions:n.replace(/[^+]/g,\"\").length,deletions:n.replace(/[^-]/g,\"\").length,binary:!1})}),new ce(/^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,(e,[t,r,n])=>{e.files.push({file:t.trim(),before:Ie(r),after:Ie(n),binary:!0})}),new ce(/(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,(e,[t,r])=>{let n=/(\\d+) i/.exec(r),i=/(\\d+) d/.exec(r);e.changed=Ie(t),e.insertions=Ie(n==null?void 0:n[1]),e.deletions=Ie(i==null?void 0:i[1])})],V2=[new ce(/(\\d+)\\t(\\d+)\\t(.+)$/,(e,[t,r,n])=>{let i=Ie(t),a=Ie(r);e.changed++,e.insertions+=i,e.deletions+=a,e.files.push({file:n,changes:i+a,insertions:i,deletions:a,binary:!1})}),new ce(/-\\t-\\t(.+)$/,(e,[t])=>{e.changed++,e.files.push({file:t,after:0,before:0,binary:!0})})],W2=[new ce(/(.+)$/,(e,[t])=>{e.changed++,e.files.push({file:t,changes:0,insertions:0,deletions:0,binary:!1})})],q2=[new ce(/([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,(e,[t,r,n,i,a])=>{e.changed++,e.files.push({file:a!=null?a:n,changes:0,insertions:0,deletions:0,binary:!1,status:Np(ZI(t)&&t),from:Np(!!a&&n!==a&&n),similarity:Ie(r)})})],y_={\"\":Fp,\"--stat\":Fp,\"--numstat\":V2,\"--name-status\":q2,\"--name-only\":W2}}});function IF(e,t){return t.reduce((r,n,i)=>(r[n]=e[i]||\"\",r),Object.create({diff:null}))}function b_(e=mm,t=__,r=\"\"){let n=v_(r);return function(i){let a=Cl(i.trim(),!1,hm).map(function(s){let o=s.split(pm),c=IF(o[0].split(e),t);return o.length>1&&o[1].trim()&&(c.diff=n(o[1])),c});return{all:a,latest:a.length&&a[0]||null,total:a.length}}}var hm,pm,mm,__,x_=W({\"src/lib/parsers/parse-list-log-summary.ts\"(){\"use strict\";oe(),w_(),Ml(),hm=\"\\xF2\\xF2\\xF2\\xF2\\xF2\\xF2 \",pm=\" \\xF2\\xF2\",mm=\" \\xF2 \",__=[\"hash\",\"date\",\"message\",\"refs\",\"author_name\",\"author_email\"]}}),S_={};rt(S_,{diffSummaryTask:()=>FF,validateLogFormatConfig:()=>Bu});function FF(e){let t=fm(e),r=[\"diff\"];return t===\"\"&&(t=\"--stat\",r.push(\"--stat=4096\")),r.push(...e),Bu(r)||{commands:r,format:\"utf-8\",parser:v_(t)}}function Bu(e){let t=e.filter(MF);if(t.length>1)return nr(`Summary flags are mutually exclusive - pick one of ${t.join(\",\")}`);if(t.length&&e.includes(\"-z\"))return nr(`Summary flag ${t} parsing is not compatible with null termination option '-z'`)}var gm=W({\"src/lib/tasks/diff.ts\"(){\"use strict\";Ml(),w_(),tt()}});function $F(e,t){let r=[],n=[];return Object.keys(e).forEach(i=>{r.push(i),n.push(String(e[i]))}),[r,n.join(t)]}function LF(e){return Object.keys(e).reduce((t,r)=>(r in Wp||(t[r]=e[r]),t),{})}function E_(e={},t=[]){let r=Sn(e.splitter,Pt,mm),n=!Qp(e.format)&&e.format?e.format:{hash:\"%H\",date:e.strictDate===!1?\"%ai\":\"%aI\",message:\"%s\",refs:\"%D\",body:e.multiLine?\"%B\":\"%b\",author_name:e.mailMap!==!1?\"%aN\":\"%an\",author_email:e.mailMap!==!1?\"%aE\":\"%ae\"},[i,a]=$F(n,r),s=[],o=[`--pretty=format:${hm}${a}${pm}`,...t],c=e.n||e[\"max-count\"]||e.maxCount;if(c&&o.push(`--max-count=${c}`),e.from||e.to){let l=e.symmetric!==!1?\"...\":\"..\";s.push(`${e.from||\"\"}${l}${e.to||\"\"}`)}return Pt(e.file)&&o.push(\"--follow\",EI(e.file)),rm(LF(e),o),{fields:i,splitter:r,commands:[...o,...s]}}function DF(e,t,r){let n=b_(e,t,fm(r));return{commands:[\"log\",...r],format:\"utf-8\",parser:n}}function NF(){return{log(...r){let n=Je(arguments),i=E_(nm(arguments),Sn(arguments[0],Rl)),a=t(...r)||Bu(i.commands)||e(i);return this._runTask(a,n)}};function e(r){return DF(r.splitter,r.fields,r.commands)}function t(r,n){return Pt(r)&&Pt(n)&&nr(\"git.log(string, string) should be replaced with git.log({ from: string, to: string })\")}}var Wp,A_=W({\"src/lib/tasks/log.ts\"(){\"use strict\";Ml(),kl(),x_(),oe(),tt(),gm(),Wp=(e=>(e[e[\"--pretty\"]=0]=\"--pretty\",e[e[\"max-count\"]=1]=\"max-count\",e[e.maxCount=2]=\"maxCount\",e[e.n=3]=\"n\",e[e.file=4]=\"file\",e[e.format=5]=\"format\",e[e.from=6]=\"from\",e[e.to=7]=\"to\",e[e.splitter=8]=\"splitter\",e[e.symmetric=9]=\"symmetric\",e[e.mailMap=10]=\"mailMap\",e[e.multiLine=11]=\"multiLine\",e[e.strictDate=12]=\"strictDate\",e))(Wp||{})}}),Cu,k_,jF=W({\"src/lib/responses/MergeSummary.ts\"(){\"use strict\";Cu=class{constructor(e,t=null,r){this.reason=e,this.file=t,this.meta=r}toString(){return`${this.file}:${this.reason}`}},k_=class{constructor(){this.conflicts=[],this.merges=[],this.result=\"success\"}get failed(){return this.conflicts.length>0}get reason(){return this.result}toString(){return this.conflicts.length?`CONFLICTS: ${this.conflicts.join(\", \")}`:\"OK\"}}}}),qp,T_,BF=W({\"src/lib/responses/PullSummary.ts\"(){\"use strict\";qp=class{constructor(){this.remoteMessages={all:[]},this.created=[],this.deleted=[],this.files=[],this.deletions={},this.insertions={},this.summary={changes:0,deletions:0,insertions:0}}},T_=class{constructor(){this.remote=\"\",this.hash={local:\"\",remote:\"\"},this.branch={local:\"\",remote:\"\"},this.message=\"\"}toString(){return this.message}}}});function $p(e){return e.objects=e.objects||{compressing:0,counting:0,enumerating:0,packReused:0,reused:{count:0,delta:0},total:{count:0,delta:0}}}function Y2(e){let t=/^\\s*(\\d+)/.exec(e),r=/delta (\\d+)/i.exec(e);return{count:Ie(t&&t[1]||\"0\"),delta:Ie(r&&r[1]||\"0\")}}var C_,HF=W({\"src/lib/parsers/parse-remote-objects.ts\"(){\"use strict\";oe(),C_=[new Si(/^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,(e,[t,r])=>{let n=t.toLowerCase(),i=$p(e.remoteMessages);Object.assign(i,{[n]:Ie(r)})}),new Si(/^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,(e,[t,r])=>{let n=t.toLowerCase(),i=$p(e.remoteMessages);Object.assign(i,{[n]:Ie(r)})}),new Si(/total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,(e,[t,r,n])=>{let i=$p(e.remoteMessages);i.total=Y2(t),i.reused=Y2(r),i.packReused=Ie(n)})]}});function P_(e,t){return ir({remoteMessages:new M_},R_,t)}var R_,M_,O_=W({\"src/lib/parsers/parse-remote-messages.ts\"(){\"use strict\";oe(),HF(),R_=[new Si(/^remote:\\s*(.+)$/,(e,[t])=>(e.remoteMessages.all.push(t.trim()),!1)),...C_,new Si([/create a (?:pull|merge) request/i,/\\s(https?:\\/\\/\\S+)$/],(e,[t])=>{e.remoteMessages.pullRequestUrl=t}),new Si([/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i,/\\s(https?:\\/\\/\\S+)$/],(e,[t,r,n])=>{e.remoteMessages.vulnerabilities={count:Ie(t),summary:r,url:n}})],M_=class{constructor(){this.all=[]}}}});function UF(e,t){let r=ir(new T_,I_,[e,t]);return r.message&&r}var X2,Z2,K2,J2,I_,Q2,vm,F_=W({\"src/lib/parsers/parse-pull.ts\"(){\"use strict\";BF(),oe(),O_(),X2=/^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/,Z2=/(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/,K2=/^(create|delete) mode \\d+ (.+)/,J2=[new ce(X2,(e,[t,r,n])=>{e.files.push(t),r&&(e.insertions[t]=r.length),n&&(e.deletions[t]=n.length)}),new ce(Z2,(e,[t,,r,,n])=>r!==void 0||n!==void 0?(e.summary.changes=+t||0,e.summary.insertions=+r||0,e.summary.deletions=+n||0,!0):!1),new ce(K2,(e,[t,r])=>{ke(e.files,r),ke(t===\"create\"?e.created:e.deleted,r)})],I_=[new ce(/^from\\s(.+)$/i,(e,[t])=>void(e.remote=t)),new ce(/^fatal:\\s(.+)$/,(e,[t])=>void(e.message=t)),new ce(/([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,(e,[t,r,n,i])=>{e.branch.local=n,e.hash.local=t,e.branch.remote=i,e.hash.remote=r})],Q2=(e,t)=>ir(new qp,J2,[e,t]),vm=(e,t)=>Object.assign(new qp,Q2(e,t),P_(e,t))}}),eb,$_,tb,GF=W({\"src/lib/parsers/parse-merge.ts\"(){\"use strict\";jF(),oe(),F_(),eb=[new ce(/^Auto-merging\\s+(.+)$/,(e,[t])=>{e.merges.push(t)}),new ce(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/,(e,[t,r])=>{e.conflicts.push(new Cu(t,r))}),new ce(/^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,(e,[t,r,n])=>{e.conflicts.push(new Cu(t,r,{deleteRef:n}))}),new ce(/^CONFLICT\\s+\\((.+)\\):/,(e,[t])=>{e.conflicts.push(new Cu(t,null))}),new ce(/^Automatic merge failed;\\s+(.+)$/,(e,[t])=>{e.result=t})],$_=(e,t)=>Object.assign(tb(e,t),vm(e,t)),tb=e=>ir(new k_,eb,e)}});function rb(e){return e.length?{commands:[\"merge\",...e],format:\"utf-8\",parser(t,r){let n=$_(t,r);if(n.failed)throw new Tl(n);return n}}:nr(\"Git.merge requires at least one option\")}var zF=W({\"src/lib/tasks/merge.ts\"(){\"use strict\";Rs(),GF(),tt()}});function VF(e,t,r){let n=r.includes(\"deleted\"),i=r.includes(\"tag\")||/^refs\\/tags/.test(e),a=!r.includes(\"new\");return{deleted:n,tag:i,branch:!i,new:!a,alreadyUpdated:a,local:e,remote:t}}var nb,L_,ib,WF=W({\"src/lib/parsers/parse-push.ts\"(){\"use strict\";oe(),O_(),nb=[new ce(/^Pushing to (.+)$/,(e,[t])=>{e.repo=t}),new ce(/^updating local tracking ref '(.+)'/,(e,[t])=>{e.ref=xl(Fr({},e.ref||{}),{local:t})}),new ce(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/,(e,[t,r,n])=>{e.pushed.push(VF(t,r,n))}),new ce(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,(e,[t,r,n])=>{e.branch=xl(Fr({},e.branch||{}),{local:t,remote:r,remoteName:n})}),new ce(/^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,(e,[t,r,n,i])=>{e.update={head:{local:t,remote:r},hash:{from:n,to:i}}})],L_=(e,t)=>{let r=ib(e,t),n=P_(e,t);return Fr(Fr({},r),n)},ib=(e,t)=>ir({pushed:[]},nb,[e,t])}}),D_={};rt(D_,{pushTagsTask:()=>qF,pushTask:()=>ym});function qF(e={},t){return ke(t,\"--tags\"),ym(e,t)}function ym(e={},t){let r=[\"push\",...t];return e.branch&&r.splice(1,0,e.branch),e.remote&&r.splice(1,0,e.remote),Lu(r,\"-v\"),ke(r,\"--verbose\"),ke(r,\"--porcelain\"),{commands:r,format:\"utf-8\",parser:L_}}var N_=W({\"src/lib/tasks/push.ts\"(){\"use strict\";WF(),oe()}});function YF(){return{showBuffer(){let e=[\"show\",...rr(arguments,1)];return e.includes(\"--binary\")||e.splice(1,0,\"--binary\"),this._runTask(zb(e),Je(arguments))},show(){let e=[\"show\",...rr(arguments,1)];return this._runTask(Vt(e),Je(arguments))}}}var XF=W({\"src/lib/tasks/show.ts\"(){\"use strict\";oe(),tt()}}),ab,j_,ZF=W({\"src/lib/responses/FileStatusSummary.ts\"(){\"use strict\";ab=/^(.+)\\0(.+)$/,j_=class{constructor(e,t,r){if(this.path=e,this.index=t,this.working_dir=r,t===\"R\"||r===\"R\"){let n=ab.exec(e)||[null,e,e];this.from=n[2]||\"\",this.path=n[1]||\"\"}}}}});function sb(e){let[t,r]=e.split(Ps);return{from:r||t,to:t}}function yr(e,t,r){return[`${e}${t}`,r]}function Lp(e,...t){return t.map(r=>yr(e,r,(n,i)=>ke(n.conflicted,i)))}function KF(e,t){let r=t.trim();switch(\" \"){case r.charAt(2):return n(r.charAt(0),r.charAt(1),r.substr(3));case r.charAt(1):return n(\" \",r.charAt(0),r.substr(2));default:return}function n(i,a,s){let o=`${i}${a}`,c=B_.get(o);c&&c(e,s),o!==\"##\"&&o!==\"!!\"&&e.files.push(new j_(s,i,a))}}var ob,B_,H_,JF=W({\"src/lib/responses/StatusSummary.ts\"(){\"use strict\";oe(),ZF(),ob=class{constructor(){this.not_added=[],this.conflicted=[],this.created=[],this.deleted=[],this.ignored=void 0,this.modified=[],this.renamed=[],this.files=[],this.staged=[],this.ahead=0,this.behind=0,this.current=null,this.tracking=null,this.detached=!1,this.isClean=()=>!this.files.length}},B_=new Map([yr(\" \",\"A\",(e,t)=>ke(e.created,t)),yr(\" \",\"D\",(e,t)=>ke(e.deleted,t)),yr(\" \",\"M\",(e,t)=>ke(e.modified,t)),yr(\"A\",\" \",(e,t)=>ke(e.created,t)&&ke(e.staged,t)),yr(\"A\",\"M\",(e,t)=>ke(e.created,t)&&ke(e.staged,t)&&ke(e.modified,t)),yr(\"D\",\" \",(e,t)=>ke(e.deleted,t)&&ke(e.staged,t)),yr(\"M\",\" \",(e,t)=>ke(e.modified,t)&&ke(e.staged,t)),yr(\"M\",\"M\",(e,t)=>ke(e.modified,t)&&ke(e.staged,t)),yr(\"R\",\" \",(e,t)=>{ke(e.renamed,sb(t))}),yr(\"R\",\"M\",(e,t)=>{let r=sb(t);ke(e.renamed,r),ke(e.modified,r.to)}),yr(\"!\",\"!\",(e,t)=>{ke(e.ignored=e.ignored||[],t)}),yr(\"?\",\"?\",(e,t)=>ke(e.not_added,t)),...Lp(\"A\",\"A\",\"U\"),...Lp(\"D\",\"D\",\"U\"),...Lp(\"U\",\"A\",\"D\",\"U\"),[\"##\",(e,t)=>{let r=/ahead (\\d+)/,n=/behind (\\d+)/,i=/^(.+?(?=(?:\\.{3}|\\s|$)))/,a=/\\.{3}(\\S*)/,s=/\\son\\s([\\S]+)$/,o;o=r.exec(t),e.ahead=o&&+o[1]||0,o=n.exec(t),e.behind=o&&+o[1]||0,o=i.exec(t),e.current=o&&o[1],o=a.exec(t),e.tracking=o&&o[1],o=s.exec(t),e.current=o&&o[1]||e.current,e.detached=/\\(no branch\\)/.test(t)}]]),H_=function(e){let t=e.split(Ps),r=new ob;for(let n=0,i=t.length;n<i;){let a=t[n++].trim();a&&(a.charAt(0)===\"R\"&&(a+=Ps+(t[n++]||\"\")),KF(r,a))}return r}}});function QF(e){return{format:\"utf-8\",commands:[\"status\",\"--porcelain\",\"-b\",\"-u\",\"--null\",...e.filter(r=>!U_.includes(r))],parser(r){return H_(r)}}}var U_,e4=W({\"src/lib/tasks/status.ts\"(){\"use strict\";JF(),U_=[\"--null\",\"-z\"]}});function Ou(e=0,t=0,r=0,n=\"\",i=!0){return Object.defineProperty({major:e,minor:t,patch:r,agent:n,installed:i},\"toString\",{value(){return`${this.major}.${this.minor}.${this.patch}`},configurable:!1,enumerable:!1})}function t4(){return Ou(0,0,0,\"\",!1)}function r4(){return{version(){return this._runTask({commands:[\"--version\"],format:\"utf-8\",parser:n4,onError(e,t,r,n){if(e.exitCode===-2)return r(Buffer.from(wm));n(t)}})}}}function n4(e){return e===wm?t4():ir(Ou(0,0,0,e),G_,e)}var wm,G_,i4=W({\"src/lib/tasks/version.ts\"(){\"use strict\";oe(),wm=\"installed=false\",G_=[new ce(/version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,(e,[t,r,n,i=\"\"])=>{Object.assign(e,Ou(Ie(t),Ie(r),Ie(n),i))}),new ce(/version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,(e,[t,r,n,i=\"\"])=>{Object.assign(e,Ou(Ie(t),Ie(r),n,i))})]}}),z_={};rt(z_,{SimpleGitApi:()=>Yp});var Yp,a4=W({\"src/lib/simple-git-api.ts\"(){\"use strict\";uF(),fF(),hF(),gF(),_F(),Jb(),SF(),n_(),AF(),RF(),A_(),zF(),N_(),XF(),e4(),tt(),i4(),oe(),Yp=class{constructor(e){this._executor=e}_runTask(e,t){let r=this._executor.chain(),n=r.push(e);return t&&lF(e,n,t),Object.create(this,{then:{value:n.then.bind(n)},catch:{value:n.catch.bind(n)},_executor:{value:r}})}add(e){return this._runTask(Vt([\"add\",...xn(e)]),Je(arguments))}cwd(e){let t=Je(arguments);return typeof e==\"string\"?this._runTask(z2(e,this._executor),t):typeof(e==null?void 0:e.path)==\"string\"?this._runTask(z2(e.path,e.root&&this._executor||void 0),t):this._runTask(nr(\"Git.cwd: workingDirectory must be supplied as a string\"),t)}hashObject(e,t){return this._runTask(EF(e,t===!0),Je(arguments))}init(e){return this._runTask(PF(e===!0,this._executor.cwd,rr(arguments)),Je(arguments))}merge(){return this._runTask(rb(rr(arguments)),Je(arguments))}mergeFromTo(e,t){return Pt(e)&&Pt(t)?this._runTask(rb([e,t,...rr(arguments)]),Je(arguments,!1)):this._runTask(nr(\"Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings\"))}outputHandler(e){return this._executor.outputHandler=e,this}push(){let e=ym({remote:Sn(arguments[0],Pt),branch:Sn(arguments[1],Pt)},rr(arguments));return this._runTask(e,Je(arguments))}stash(){return this._runTask(Vt([\"stash\",...rr(arguments)]),Je(arguments))}status(){return this._runTask(QF(rr(arguments)),Je(arguments))}},Object.assign(Yp.prototype,dF(),bF(),XI(),mF(),xF(),QI(),NF(),YF(),r4())}}),V_={};rt(V_,{Scheduler:()=>q_});var lb,q_,s4=W({\"src/lib/runners/scheduler.ts\"(){\"use strict\";oe(),l_(),lb=(()=>{let e=0;return()=>{e++;let{promise:t,done:r}=(0,W_.createDeferred)();return{promise:t,done:r,id:e}}})(),q_=class{constructor(e=2){this.concurrency=e,this.logger=cm(\"\",\"scheduler\"),this.pending=[],this.running=[],this.logger(\"Constructed, concurrency=%s\",e)}schedule(){if(!this.pending.length||this.running.length>=this.concurrency){this.logger(\"Schedule attempt ignored, pending=%s running=%s concurrency=%s\",this.pending.length,this.running.length,this.concurrency);return}let e=ke(this.running,this.pending.shift());this.logger(\"Attempting id=%s\",e.id),e.done(()=>{this.logger(\"Completing id=\",e.id),Lu(this.running,e),this.schedule()})}next(){let{promise:e,id:t}=ke(this.pending,lb());return this.logger(\"Scheduling id=%s\",t),this.schedule(),e}}}}),Y_={};rt(Y_,{applyPatchTask:()=>o4});function o4(e,t){return Vt([\"apply\",...t,...e])}var l4=W({\"src/lib/tasks/apply-patch.ts\"(){\"use strict\";tt()}});function c4(e,t){return{branch:e,hash:t,success:!0}}function u4(e){return{branch:e,hash:null,success:!1}}var X_,f4=W({\"src/lib/responses/BranchDeleteSummary.ts\"(){\"use strict\";X_=class{constructor(){this.all=[],this.branches={},this.errors=[]}get success(){return!this.errors.length}}}});function Z_(e,t){return t===1&&Xp.test(e)}var cb,Xp,ub,Hu,d4=W({\"src/lib/parsers/parse-branch-delete.ts\"(){\"use strict\";f4(),oe(),cb=/(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/,Xp=/^error[^']+'([^']+)'/m,ub=[new ce(cb,(e,[t,r])=>{let n=c4(t,r);e.all.push(n),e.branches[t]=n}),new ce(Xp,(e,[t])=>{let r=u4(t);e.errors.push(r),e.all.push(r),e.branches[t]=r})],Hu=(e,t)=>ir(new X_,ub,[e,t])}}),K_,h4=W({\"src/lib/responses/BranchSummary.ts\"(){\"use strict\";K_=class{constructor(){this.all=[],this.branches={},this.current=\"\",this.detached=!1}push(e,t,r,n,i){e===\"*\"&&(this.detached=t,this.current=r),this.all.push(r),this.branches[r]={current:e===\"*\",linkedWorkTree:e===\"+\",name:r,commit:n,label:i}}}}});function fb(e){return e?e.charAt(0):\"\"}function J_(e){return ir(new K_,Q_,e)}var Q_,p4=W({\"src/lib/parsers/parse-branch.ts\"(){\"use strict\";h4(),oe(),Q_=[new ce(/^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,(e,[t,r,n,i])=>{e.push(fb(t),!0,r,n,i)}),new ce(new RegExp(\"^([*+]\\\\s)?(\\\\S+)\\\\s+([a-z0-9]+)\\\\s?(.*)$\",\"s\"),(e,[t,r,n,i])=>{e.push(fb(t),!1,r,n,i)})]}}),ex={};rt(ex,{branchLocalTask:()=>g4,branchTask:()=>m4,containsDeleteBranchCommand:()=>tx,deleteBranchTask:()=>y4,deleteBranchesTask:()=>v4});function tx(e){let t=[\"-d\",\"-D\",\"--delete\"];return e.some(r=>t.includes(r))}function m4(e){let t=tx(e),r=[\"branch\",...e];return r.length===1&&r.push(\"-a\"),r.includes(\"-v\")||r.splice(1,0,\"-v\"),{format:\"utf-8\",commands:r,parser(n,i){return t?Hu(n,i).all[0]:J_(n)}}}function g4(){return{format:\"utf-8\",commands:[\"branch\",\"-v\"],parser:J_}}function v4(e,t=!1){return{format:\"utf-8\",commands:[\"branch\",\"-v\",t?\"-D\":\"-d\",...e],parser(r,n){return Hu(r,n)},onError({exitCode:r,stdOut:n},i,a,s){if(!Z_(String(i),r))return s(i);a(n)}}}function y4(e,t=!1){let r={format:\"utf-8\",commands:[\"branch\",\"-v\",t?\"-D\":\"-d\",e],parser(n,i){return Hu(n,i).branches[e]},onError({exitCode:n,stdErr:i,stdOut:a},s,o,c){if(!Z_(String(s),n))return c(s);throw new Tl(r.parser(El(a),El(i)),String(s))}};return r}var w4=W({\"src/lib/tasks/branch.ts\"(){\"use strict\";Rs(),d4(),p4(),oe()}}),rx,b4=W({\"src/lib/responses/CheckIgnore.ts\"(){\"use strict\";rx=e=>e.split(/\\n/g).map(t=>t.trim()).filter(t=>!!t)}}),nx={};rt(nx,{checkIgnoreTask:()=>_4});function _4(e){return{commands:[\"check-ignore\",...e],format:\"utf-8\",parser:rx}}var x4=W({\"src/lib/tasks/check-ignore.ts\"(){\"use strict\";b4()}}),ix={};rt(ix,{cloneMirrorTask:()=>E4,cloneTask:()=>ax});function S4(e){return/^--upload-pack(=|$)/.test(e)}function ax(e,t,r){let n=[\"clone\",...r];return Pt(e)&&n.push(e),Pt(t)&&n.push(t),n.find(S4)?nr(\"git.fetch: potential exploit argument blocked.\"):Vt(n)}function E4(e,t,r){return ke(r,\"--mirror\"),ax(e,t,r)}var A4=W({\"src/lib/tasks/clone.ts\"(){\"use strict\";tt(),oe()}});function k4(e,t){return ir({raw:e,remote:null,branches:[],tags:[],updated:[],deleted:[]},sx,[e,t])}var sx,T4=W({\"src/lib/parsers/parse-fetch.ts\"(){\"use strict\";oe(),sx=[new ce(/From (.+)$/,(e,[t])=>{e.remote=t}),new ce(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/,(e,[t,r])=>{e.branches.push({name:t,tracking:r})}),new ce(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/,(e,[t,r])=>{e.tags.push({name:t,tracking:r})}),new ce(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/,(e,[t])=>{e.deleted.push({tracking:t})}),new ce(/\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,(e,[t,r,n,i])=>{e.updated.push({name:n,tracking:i,to:r,from:t})})]}}),ox={};rt(ox,{fetchTask:()=>P4});function C4(e){return/^--upload-pack(=|$)/.test(e)}function P4(e,t,r){let n=[\"fetch\",...r];return e&&t&&n.push(e,t),n.find(C4)?nr(\"git.fetch: potential exploit argument blocked.\"):{commands:n,format:\"utf-8\",parser:k4}}var R4=W({\"src/lib/tasks/fetch.ts\"(){\"use strict\";T4(),tt()}});function M4(e){return ir({moves:[]},lx,e)}var lx,O4=W({\"src/lib/parsers/parse-move.ts\"(){\"use strict\";oe(),lx=[new ce(/^Renaming (.+) to (.+)$/,(e,[t,r])=>{e.moves.push({from:t,to:r})})]}}),cx={};rt(cx,{moveTask:()=>I4});function I4(e,t){return{commands:[\"mv\",\"-v\",...xn(e),t],format:\"utf-8\",parser:M4}}var F4=W({\"src/lib/tasks/move.ts\"(){\"use strict\";O4(),oe()}}),ux={};rt(ux,{pullTask:()=>$4});function $4(e,t,r){let n=[\"pull\",...r];return e&&t&&n.splice(1,0,e,t),{commands:n,format:\"utf-8\",parser(i,a){return vm(i,a)},onError(i,a,s,o){let c=UF(El(i.stdOut),El(i.stdErr));if(c)return o(new Tl(c));o(a)}}}var L4=W({\"src/lib/tasks/pull.ts\"(){\"use strict\";Rs(),F_(),oe()}});function D4(e){let t={};return fx(e,([r])=>t[r]={name:r}),Object.values(t)}function N4(e){let t={};return fx(e,([r,n,i])=>{t.hasOwnProperty(r)||(t[r]={name:r,refs:{fetch:\"\",push:\"\"}}),i&&n&&(t[r].refs[i.replace(/[^a-z]/g,\"\")]=n)}),Object.values(t)}function fx(e,t){Kp(e,r=>t(r.split(/\\s+/)))}var j4=W({\"src/lib/responses/GetRemoteSummary.ts\"(){\"use strict\";oe()}}),dx={};rt(dx,{addRemoteTask:()=>B4,getRemotesTask:()=>H4,listRemotesTask:()=>U4,remoteTask:()=>G4,removeRemoteTask:()=>z4});function B4(e,t,r){return Vt([\"remote\",\"add\",...r,e,t])}function H4(e){let t=[\"remote\"];return e&&t.push(\"-v\"),{commands:t,format:\"utf-8\",parser:e?N4:D4}}function U4(e){let t=[...e];return t[0]!==\"ls-remote\"&&t.unshift(\"ls-remote\"),Vt(t)}function G4(e){let t=[...e];return t[0]!==\"remote\"&&t.unshift(\"remote\"),Vt(t)}function z4(e){return Vt([\"remote\",\"remove\",e])}var V4=W({\"src/lib/tasks/remote.ts\"(){\"use strict\";j4(),tt()}}),hx={};rt(hx,{stashListTask:()=>W4});function W4(e={},t){let r=E_(e),n=[\"stash\",\"list\",...r.commands,...t],i=b_(r.splitter,r.fields,fm(n));return Bu(n)||{commands:n,format:\"utf-8\",parser:i}}var q4=W({\"src/lib/tasks/stash-list.ts\"(){\"use strict\";Ml(),x_(),gm(),A_()}}),px={};rt(px,{addSubModuleTask:()=>Y4,initSubModuleTask:()=>X4,subModuleTask:()=>Uu,updateSubModuleTask:()=>Z4});function Y4(e,t){return Uu([\"add\",e,t])}function X4(e){return Uu([\"init\",...e])}function Uu(e){let t=[...e];return t[0]!==\"submodule\"&&t.unshift(\"submodule\"),Vt(t)}function Z4(e){return Uu([\"update\",...e])}var K4=W({\"src/lib/tasks/sub-module.ts\"(){\"use strict\";tt()}});function J4(e,t){let r=isNaN(e),n=isNaN(t);return r!==n?r?1:-1:r?mx(e,t):0}function mx(e,t){return e===t?0:e>t?1:-1}function Q4(e){return e.trim()}function Eu(e){return typeof e==\"string\"&&parseInt(e.replace(/^\\D+/g,\"\"),10)||0}var db,gx,e$=W({\"src/lib/responses/TagList.ts\"(){\"use strict\";db=class{constructor(e,t){this.all=e,this.latest=t}},gx=function(e,t=!1){let r=e.split(`\n`).map(Q4).filter(Boolean);t||r.sort(function(i,a){let s=i.split(\".\"),o=a.split(\".\");if(s.length===1||o.length===1)return J4(Eu(s[0]),Eu(o[0]));for(let c=0,l=Math.max(s.length,o.length);c<l;c++){let u=mx(Eu(s[c]),Eu(o[c]));if(u)return u}return 0});let n=t?r[0]:[...r].reverse().find(i=>i.indexOf(\".\")>=0);return new db(r,n)}}}),vx={};rt(vx,{addAnnotatedTagTask:()=>n$,addTagTask:()=>r$,tagListTask:()=>t$});function t$(e=[]){let t=e.some(r=>/^--sort=/.test(r));return{format:\"utf-8\",commands:[\"tag\",\"-l\",...e],parser(r){return gx(r,t)}}}function r$(e){return{format:\"utf-8\",commands:[\"tag\",e],parser(){return{name:e}}}}function n$(e,t){return{format:\"utf-8\",commands:[\"tag\",\"-a\",\"-m\",t,e],parser(){return{name:e}}}}var i$=W({\"src/lib/tasks/tag.ts\"(){\"use strict\";e$()}}),a$=xI({\"src/git.js\"(e,t){\"use strict\";var{GitExecutor:r}=(oF(),Ke(u_)),{SimpleGitApi:n}=(a4(),Ke(z_)),{Scheduler:i}=(s4(),Ke(V_)),{configurationErrorTask:a}=(tt(),Ke(Up)),{asArray:s,filterArray:o,filterPrimitives:c,filterString:l,filterStringOrStringArray:u,filterType:f,getTrailingOptions:d,trailingFunctionArgument:h,trailingOptionsArgument:p}=(oe(),Ke(Fb)),{applyPatchTask:m}=(l4(),Ke(Y_)),{branchTask:v,branchLocalTask:y,deleteBranchesTask:b,deleteBranchTask:x}=(w4(),Ke(ex)),{checkIgnoreTask:E}=(x4(),Ke(nx)),{checkIsRepoTask:_}=(Nb(),Ke($b)),{cloneTask:k,cloneMirrorTask:w}=(A4(),Ke(ix)),{cleanWithOptionsTask:A,isCleanOptionsArray:S}=(Xb(),Ke(qb)),{diffSummaryTask:T}=(gm(),Ke(S_)),{fetchTask:P}=(R4(),Ke(ox)),{moveTask:O}=(F4(),Ke(cx)),{pullTask:j}=(L4(),Ke(ux)),{pushTagsTask:D}=(N_(),Ke(D_)),{addRemoteTask:Q,getRemotesTask:de,listRemotesTask:ee,remoteTask:J,removeRemoteTask:Pe}=(V4(),Ke(dx)),{getResetMode:me,resetTask:F}=(o_(),Ke(i_)),{stashListTask:G}=(q4(),Ke(hx)),{addSubModuleTask:N,initSubModuleTask:Me,subModuleTask:Dt,updateSubModuleTask:_t}=(K4(),Ke(px)),{addAnnotatedTagTask:Ee,addTagTask:st,tagListTask:ot}=(i$(),Ke(vx)),{straightThroughBufferTask:Ct,straightThroughStringTask:$e}=(tt(),Ke(Up));function U(L,Y){this._plugins=Y,this._executor=new r(L.baseDir,new i(L.maxConcurrentProcesses),Y),this._trimmed=L.trimmed}(U.prototype=Object.create(n.prototype)).constructor=U,U.prototype.customBinary=function(L){return this._plugins.reconfigure(\"binary\",L),this},U.prototype.env=function(L,Y){return arguments.length===1&&typeof L==\"object\"?this._executor.env=L:(this._executor.env=this._executor.env||{})[L]=Y,this},U.prototype.stashList=function(L){return this._runTask(G(p(arguments)||{},o(L)&&L||[]),h(arguments))};function Le(L,Y,ye,De){return typeof ye!=\"string\"?a(`git.${L}() requires a string 'repoPath'`):Y(ye,f(De,l),d(arguments))}U.prototype.clone=function(){return this._runTask(Le(\"clone\",k,...arguments),h(arguments))},U.prototype.mirror=function(){return this._runTask(Le(\"mirror\",w,...arguments),h(arguments))},U.prototype.mv=function(L,Y){return this._runTask(O(L,Y),h(arguments))},U.prototype.checkoutLatestTag=function(L){var Y=this;return this.pull(function(){Y.tags(function(ye,De){Y.checkout(De.latest,L)})})},U.prototype.pull=function(L,Y,ye,De){return this._runTask(j(f(L,l),f(Y,l),d(arguments)),h(arguments))},U.prototype.fetch=function(L,Y){return this._runTask(P(f(L,l),f(Y,l),d(arguments)),h(arguments))},U.prototype.silent=function(L){return console.warn(\"simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3\"),this},U.prototype.tags=function(L,Y){return this._runTask(ot(d(arguments)),h(arguments))},U.prototype.rebase=function(){return this._runTask($e([\"rebase\",...d(arguments)]),h(arguments))},U.prototype.reset=function(L){return this._runTask(F(me(L),d(arguments)),h(arguments))},U.prototype.revert=function(L){let Y=h(arguments);return typeof L!=\"string\"?this._runTask(a(\"Commit must be a string\"),Y):this._runTask($e([\"revert\",...d(arguments,0,!0),L]),Y)},U.prototype.addTag=function(L){let Y=typeof L==\"string\"?st(L):a(\"Git.addTag requires a tag name\");return this._runTask(Y,h(arguments))},U.prototype.addAnnotatedTag=function(L,Y){return this._runTask(Ee(L,Y),h(arguments))},U.prototype.deleteLocalBranch=function(L,Y,ye){return this._runTask(x(L,typeof Y==\"boolean\"?Y:!1),h(arguments))},U.prototype.deleteLocalBranches=function(L,Y,ye){return this._runTask(b(L,typeof Y==\"boolean\"?Y:!1),h(arguments))},U.prototype.branch=function(L,Y){return this._runTask(v(d(arguments)),h(arguments))},U.prototype.branchLocal=function(L){return this._runTask(y(),h(arguments))},U.prototype.raw=function(L){let Y=!Array.isArray(L),ye=[].slice.call(Y?arguments:L,0);for(let vt=0;vt<ye.length&&Y;vt++)if(!c(ye[vt])){ye.splice(vt,ye.length-vt);break}ye.push(...d(arguments,0,!0));var De=h(arguments);return ye.length?this._runTask($e(ye,this._trimmed),De):this._runTask(a(\"Raw: must supply one or more command to execute\"),De)},U.prototype.submoduleAdd=function(L,Y,ye){return this._runTask(N(L,Y),h(arguments))},U.prototype.submoduleUpdate=function(L,Y){return this._runTask(_t(d(arguments,!0)),h(arguments))},U.prototype.submoduleInit=function(L,Y){return this._runTask(Me(d(arguments,!0)),h(arguments))},U.prototype.subModule=function(L,Y){return this._runTask(Dt(d(arguments)),h(arguments))},U.prototype.listRemote=function(){return this._runTask(ee(d(arguments)),h(arguments))},U.prototype.addRemote=function(L,Y,ye){return this._runTask(Q(L,Y,d(arguments)),h(arguments))},U.prototype.removeRemote=function(L,Y){return this._runTask(Pe(L),h(arguments))},U.prototype.getRemotes=function(L,Y){return this._runTask(de(L===!0),h(arguments))},U.prototype.remote=function(L,Y){return this._runTask(J(d(arguments)),h(arguments))},U.prototype.tag=function(L,Y){let ye=d(arguments);return ye[0]!==\"tag\"&&ye.unshift(\"tag\"),this._runTask($e(ye),h(arguments))},U.prototype.updateServerInfo=function(L){return this._runTask($e([\"update-server-info\"]),h(arguments))},U.prototype.pushTags=function(L,Y){let ye=D({remote:f(L,l)},d(arguments));return this._runTask(ye,h(arguments))},U.prototype.rm=function(L){return this._runTask($e([\"rm\",\"-f\",...s(L)]),h(arguments))},U.prototype.rmKeepLocal=function(L){return this._runTask($e([\"rm\",\"--cached\",...s(L)]),h(arguments))},U.prototype.catFile=function(L,Y){return this._catFile(\"utf-8\",arguments)},U.prototype.binaryCatFile=function(){return this._catFile(\"buffer\",arguments)},U.prototype._catFile=function(L,Y){var ye=h(Y),De=[\"cat-file\"],vt=Y[0];if(typeof vt==\"string\")return this._runTask(a(\"Git.catFile: options must be supplied as an array of strings\"),ye);Array.isArray(vt)&&De.push.apply(De,vt);let za=L===\"buffer\"?Ct(De):$e(De);return this._runTask(za,ye)},U.prototype.diff=function(L,Y){let ye=l(L)?a(\"git.diff: supplying options as a single string is no longer supported, switch to an array of strings\"):$e([\"diff\",...d(arguments)]);return this._runTask(ye,h(arguments))},U.prototype.diffSummary=function(){return this._runTask(T(d(arguments,1)),h(arguments))},U.prototype.applyPatch=function(L){let Y=u(L)?m(s(L),d([].slice.call(arguments,1))):a(\"git.applyPatch requires one or more string patches as the first argument\");return this._runTask(Y,h(arguments))},U.prototype.revparse=function(){let L=[\"rev-parse\",...d(arguments,!0)];return this._runTask($e(L,!0),h(arguments))},U.prototype.clean=function(L,Y,ye){let De=S(L),vt=De&&L.join(\"\")||f(L,l)||\"\",za=d([].slice.call(arguments,De?1:0));return this._runTask(A(vt,za),h(arguments))},U.prototype.exec=function(L){let Y={commands:[],format:\"utf-8\",parser(){typeof L==\"function\"&&L()}};return this._runTask(Y)},U.prototype.clearQueue=function(){return this},U.prototype.checkIgnore=function(L,Y){return this._runTask(E(s(f(L,u,[]))),h(arguments))},U.prototype.checkIsRepo=function(L,Y){return this._runTask(_(f(L,l)),h(arguments))},t.exports=U}});kl();Ei();var s$=class extends wr{constructor(e,t){super(void 0,t),this.config=e}};Ei();Ei();var Vn=class extends wr{constructor(e,t,r){super(e,r),this.task=e,this.plugin=t,Object.setPrototypeOf(this,new.target.prototype)}};Rs();wb();Nb();Xb();Jb();e_();n_();o_();function o$(e){return e?[{type:\"spawn.before\",action(n,i){e.aborted&&i.kill(new Vn(void 0,\"abort\",\"Abort already signaled\"))}},{type:\"spawn.after\",action(n,i){function a(){i.kill(new Vn(void 0,\"abort\",\"Abort signal received\"))}e.addEventListener(\"abort\",a),i.spawned.on(\"close\",()=>e.removeEventListener(\"abort\",a))}}]:void 0}function l$(e){return typeof e==\"string\"&&e.trim().toLowerCase()===\"-c\"}function c$(e,t){if(l$(e)&&/^\\s*protocol(.[a-z]+)?.allow/.test(t))throw new Vn(void 0,\"unsafe\",\"Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol\")}function u$(e,t){if(/^\\s*--(upload|receive)-pack/.test(e))throw new Vn(void 0,\"unsafe\",\"Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack\");if(t===\"clone\"&&/^\\s*-u\\b/.test(e))throw new Vn(void 0,\"unsafe\",\"Use of clone with option -u is not permitted without enabling allowUnsafePack\");if(t===\"push\"&&/^\\s*--exec\\b/.test(e))throw new Vn(void 0,\"unsafe\",\"Use of push with option --exec is not permitted without enabling allowUnsafePack\")}function f$({allowUnsafeProtocolOverride:e=!1,allowUnsafePack:t=!1}={}){return{type:\"spawn.args\",action(r,n){return r.forEach((i,a)=>{let s=a<r.length?r[a+1]:\"\";e||c$(i,s),t||u$(i,n.method)}),r}}}oe();function d$(e){let t=Sl(e,\"-c\");return{type:\"spawn.args\",action(r){return[...t,...r]}}}oe();var hb=(0,Cs.deferred)().promise;function h$({onClose:e=!0,onExit:t=50}={}){function r(){let i=-1,a={close:(0,Cs.deferred)(),closeTimeout:(0,Cs.deferred)(),exit:(0,Cs.deferred)(),exitTimeout:(0,Cs.deferred)()},s=Promise.race([e===!1?hb:a.closeTimeout.promise,t===!1?hb:a.exitTimeout.promise]);return n(e,a.close,a.closeTimeout),n(t,a.exit,a.exitTimeout),{close(o){i=o,a.close.done()},exit(o){i=o,a.exit.done()},get exitCode(){return i},result:s}}function n(i,a,s){i!==!1&&(i===!0?a.promise:a.promise.then(()=>Dp(i))).then(s.done)}return{type:\"spawn.after\",action(i,a){return _l(this,arguments,function*(s,{spawned:o,close:c}){var l,u;let f=r(),d=!0,h=()=>void(d=!1);(l=o.stdout)==null||l.on(\"data\",h),(u=o.stderr)==null||u.on(\"data\",h),o.on(\"error\",h),o.on(\"close\",p=>f.close(p)),o.on(\"exit\",p=>f.exit(p));try{yield f.result,d&&(yield Dp(50)),c(f.exitCode)}catch(p){c(f.exitCode,p)}})}}}oe();var p$=\"Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings\",pb=\"Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option\";function m$(e){return!e||!/^([a-z]:)?([a-z0-9/.\\\\_-]+)$/i.test(e)}function mb(e,t){if(e.length<1||e.length>2)throw new Vn(void 0,\"binary\",p$);if(e.some(m$))if(t)console.warn(pb);else throw new Vn(void 0,\"binary\",pb);let[n,i]=e;return{binary:n,prefix:i}}function g$(e,t=[\"git\"],r=!1){let n=mb(xn(t),r);e.on(\"binary\",i=>{n=mb(xn(i),r)}),e.append(\"spawn.binary\",()=>n.binary),e.append(\"spawn.args\",i=>n.prefix?[n.prefix,...i]:i)}Ei();function v$(e){return!!(e.exitCode&&e.stdErr.length)}function y$(e){return Buffer.concat([...e.stdOut,...e.stdErr])}function w$(e=!1,t=v$,r=y$){return(n,i)=>!e&&n||!t(i)?n:r(i)}function gb(e){return{type:\"task.error\",action(t,r){let n=e(t.error,{stdErr:r.stdErr,stdOut:r.stdOut,exitCode:r.exitCode});return Buffer.isBuffer(n)?{error:new wr(void 0,n.toString(\"utf-8\"))}:{error:n}}}}oe();var b$=class{constructor(){this.plugins=new Set,this.events=new yx.EventEmitter}on(e,t){this.events.on(e,t)}reconfigure(e,t){this.events.emit(e,t)}append(e,t){let r=ke(this.plugins,{type:e,action:t});return()=>this.plugins.delete(r)}add(e){let t=[];return xn(e).forEach(r=>r&&this.plugins.add(ke(t,r))),()=>{t.forEach(r=>this.plugins.delete(r))}}exec(e,t,r){let n=t,i=Object.freeze(Object.create(r));for(let a of this.plugins)a.type===e&&(n=a.action(n,i));return n}};oe();function _$(e){let t=\"--progress\",r=[\"checkout\",\"clone\",\"fetch\",\"pull\",\"push\"];return[{type:\"spawn.args\",action(a,s){return r.includes(s.method)?Ab(a,t):a}},{type:\"spawn.after\",action(a,s){var o;s.commands.includes(t)&&((o=s.spawned.stderr)==null||o.on(\"data\",c=>{let l=/^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(c.toString(\"utf8\"));l&&e({method:s.method,stage:x$(l[1]),progress:Ie(l[2]),processed:Ie(l[3]),total:Ie(l[4])})}))}}]}function x$(e){return String(e.toLowerCase().split(\" \",1))||\"unknown\"}oe();function S$(e){let t=Cb(e,[\"uid\",\"gid\"]);return{type:\"spawn.options\",action(r){return Fr(Fr({},t),r)}}}function E$({block:e,stdErr:t=!0,stdOut:r=!0}){if(e>0)return{type:\"spawn.after\",action(n,i){var a,s;let o;function c(){o&&clearTimeout(o),o=setTimeout(u,e)}function l(){var f,d;(f=i.spawned.stdout)==null||f.off(\"data\",c),(d=i.spawned.stderr)==null||d.off(\"data\",c),i.spawned.off(\"exit\",l),i.spawned.off(\"close\",l),o&&clearTimeout(o)}function u(){l(),i.kill(new Vn(void 0,\"timeout\",\"block timeout reached\"))}r&&((a=i.spawned.stdout)==null||a.on(\"data\",c)),t&&((s=i.spawned.stderr)==null||s.on(\"data\",c)),i.spawned.on(\"exit\",l),i.spawned.on(\"close\",l),c()}}}kl();function A$(){return{type:\"spawn.args\",action(e){let t=[],r;function n(i){(r=r||[]).push(...i)}for(let i=0;i<e.length;i++){let a=e[i];if(Pu(a)){n(B2(a));continue}if(a===\"--\"){n(e.slice(i+1).flatMap(s=>Pu(s)&&B2(s)||s));break}t.push(a)}return r?[...t,\"--\",...r.map(String)]:t}}}oe();var k$=a$();function T$(e,t){var r;let n=new b$,i=Ob(e&&(typeof e==\"string\"?{baseDir:e}:e)||{},t);if(!Jp(i.baseDir))throw new s$(i,\"Cannot use simple-git on a directory that does not exist\");return Array.isArray(i.config)&&n.add(d$(i.config)),n.add(f$(i.unsafe)),n.add(A$()),n.add(h$(i.completion)),i.abort&&n.add(o$(i.abort)),i.progress&&n.add(_$(i.progress)),i.timeout&&n.add(E$(i.timeout)),i.spawnOptions&&n.add(S$(i.spawnOptions)),n.add(gb(w$(!0))),i.errors&&n.add(gb(i.errors)),g$(n,i.binary,(r=i.unsafe)==null?void 0:r.allowUnsafeCustomBinary),new k$(i,n)}Rs();var wx=T$;g();var bx=require(\"obsidian\"),Gu=\"YYYY-MM-DD\",bm=`${Gu} HH:mm`,_m=`${Gu} HH:mm:ss`,zu=40,Ms=\"conflict-files-obsidian-git.md\",ar={commitMessage:\"vault backup: {{date}}\",commitDateFormat:_m,autoSaveInterval:0,autoPushInterval:0,autoPullInterval:0,autoPullOnBoot:!1,disablePush:!1,pullBeforePush:!0,disablePopups:!1,disablePopupsForNoChanges:!1,listChangedFilesInMessageBody:!1,showStatusBar:!0,updateSubmodules:!1,syncMethod:\"merge\",customMessageOnAutoBackup:!1,autoBackupAfterFileChange:!1,treeStructure:!1,refreshSourceControl:bx.Platform.isDesktopApp,basePath:\"\",differentIntervalCommitAndPush:!1,changedFilesInStatusBar:!1,showedMobileNotice:!1,refreshSourceControlTimer:7e3,showBranchStatusBar:!0,setLastSaveToLastCommit:!1,submoduleRecurseCheckout:!1,gitDir:\"\",showFileMenu:!0,authorInHistoryView:\"hide\",dateInHistoryView:!1,diffStyle:\"split\",lineAuthor:{show:!1,followMovement:\"inactive\",authorDisplay:\"initials\",showCommitHash:!1,dateTimeFormatOptions:\"date\",dateTimeFormatCustomString:bm,dateTimeTimezone:\"viewer-local\",coloringMaxAge:\"1y\",colorNew:{r:255,g:150,b:150},colorOld:{r:120,g:160,b:255},textColorCss:\"var(--text-muted)\",ignoreWhitespace:!1,gutterSpacingFallbackLength:5}},St={type:\"git-view\",name:\"源代码管理\",icon:\"git-pull-request\"},$r={type:\"git-history-view\",name:\"历史记录\",icon:\"history\"},Ai={type:\"split-diff-view\",name:\"Diff view\",icon:\"diff\"},ki={type:\"diff-view\",name:\"差异视图\",icon:\"git-pull-request\"},Vu=\"C:\\\\Program Files\\\\Git\\\\cmd\\\\git.exe\",Wu=\"git_credentials_input\",Os=\"obsidian_askpass.sh\",_x=`#!/bin/sh\n\nPROMPT=\"$1\"\nTEMP_FILE=\"$OBSIDIAN_GIT_CREDENTIALS_INPUT\"\n\ncleanup() {\n    rm -f \"$TEMP_FILE\" \"$TEMP_FILE.response\"\n}\ntrap cleanup EXIT\n\necho \"$PROMPT\" > \"$TEMP_FILE\"\n\nwhile [ ! -e \"$TEMP_FILE.response\" ]; do\n    if [ ! -e \"$TEMP_FILE\" ]; then\n        echo \"Trigger file got removed: Abort\" >&2\n        exit 1\n    fi\n    sleep 0.1\ndone\n\nRESPONSE=$(cat \"$TEMP_FILE.response\")\n\necho \"$RESPONSE\"\n`,xx=[\"3dm\",\"3ds\",\"3g2\",\"3gp\",\"7z\",\"a\",\"aac\",\"adp\",\"afdesign\",\"afphoto\",\"afpub\",\"ai\",\"aif\",\"aiff\",\"alz\",\"ape\",\"apk\",\"appimage\",\"ar\",\"arj\",\"asf\",\"au\",\"avi\",\"bak\",\"baml\",\"bh\",\"bin\",\"bk\",\"bmp\",\"btif\",\"bz2\",\"bzip2\",\"cab\",\"caf\",\"cgm\",\"class\",\"cmx\",\"cpio\",\"cr2\",\"cur\",\"dat\",\"dcm\",\"deb\",\"dex\",\"djvu\",\"dll\",\"dmg\",\"dng\",\"doc\",\"docm\",\"docx\",\"dot\",\"dotm\",\"dra\",\"DS_Store\",\"dsk\",\"dts\",\"dtshd\",\"dvb\",\"dwg\",\"dxf\",\"ecelp4800\",\"ecelp7470\",\"ecelp9600\",\"egg\",\"eol\",\"eot\",\"epub\",\"exe\",\"f4v\",\"fbs\",\"fh\",\"fla\",\"flac\",\"flatpak\",\"fli\",\"flv\",\"fpx\",\"fst\",\"fvt\",\"g3\",\"gh\",\"gif\",\"graffle\",\"gz\",\"gzip\",\"h261\",\"h263\",\"h264\",\"icns\",\"ico\",\"ief\",\"img\",\"ipa\",\"iso\",\"jar\",\"jpeg\",\"jpg\",\"jpgv\",\"jpm\",\"jxr\",\"key\",\"ktx\",\"lha\",\"lib\",\"lvp\",\"lz\",\"lzh\",\"lzma\",\"lzo\",\"m3u\",\"m4a\",\"m4v\",\"mar\",\"mdi\",\"mht\",\"mid\",\"midi\",\"mj2\",\"mka\",\"mkv\",\"mmr\",\"mng\",\"mobi\",\"mov\",\"movie\",\"mp3\",\"mp4\",\"mp4a\",\"mpeg\",\"mpg\",\"mpga\",\"mxu\",\"nef\",\"npx\",\"numbers\",\"nupkg\",\"o\",\"odp\",\"ods\",\"odt\",\"oga\",\"ogg\",\"ogv\",\"otf\",\"ott\",\"pages\",\"pbm\",\"pcx\",\"pdb\",\"pdf\",\"pea\",\"pgm\",\"pic\",\"png\",\"pnm\",\"pot\",\"potm\",\"potx\",\"ppa\",\"ppam\",\"ppm\",\"pps\",\"ppsm\",\"ppsx\",\"ppt\",\"pptm\",\"pptx\",\"psd\",\"pya\",\"pyc\",\"pyo\",\"pyv\",\"qt\",\"rar\",\"ras\",\"raw\",\"resources\",\"rgb\",\"rip\",\"rlc\",\"rmf\",\"rmvb\",\"rpm\",\"rtf\",\"rz\",\"s3m\",\"s7z\",\"scpt\",\"sgi\",\"shar\",\"snap\",\"sil\",\"sketch\",\"slk\",\"smv\",\"snk\",\"so\",\"stl\",\"suo\",\"sub\",\"swf\",\"tar\",\"tbz\",\"tbz2\",\"tga\",\"tgz\",\"thmx\",\"tif\",\"tiff\",\"tlz\",\"ttc\",\"ttf\",\"txz\",\"udf\",\"uvh\",\"uvi\",\"uvm\",\"uvp\",\"uvs\",\"uvu\",\"viv\",\"vob\",\"war\",\"wav\",\"wax\",\"wbmp\",\"wdp\",\"weba\",\"webm\",\"webp\",\"whl\",\"wim\",\"wm\",\"wma\",\"wmv\",\"wmx\",\"woff\",\"woff2\",\"wrm\",\"wvx\",\"xbm\",\"xif\",\"xla\",\"xlam\",\"xls\",\"xlsb\",\"xlsm\",\"xlsx\",\"xlt\",\"xltm\",\"xltx\",\"xm\",\"xmind\",\"xpi\",\"xpm\",\"xwd\",\"xz\",\"z\",\"zip\",\"zipx\"];g();var Sx=require(\"obsidian\"),C$={options:[],placeholder:\"\",allowEmpty:!1,onlySelection:!1,initialValue:void 0},Fe=class extends Sx.SuggestModal{constructor(t,r){super(t.app),this.config={...C$,...r},this.setPlaceholder(this.config.placeholder)}openAndGetResult(){return new Promise(t=>{this.resolve=t,this.open(),this.config.initialValue!=null&&(this.inputEl.value=this.config.initialValue,this.inputEl.dispatchEvent(new Event(\"input\")))})}onClose(){new Promise(t=>setTimeout(t,10)).then(()=>{this.resolve&&this.resolve(void 0)})}getSuggestions(t){return this.config.onlySelection?this.config.options:this.config.allowEmpty?[t.length>0?t:\" \",...this.config.options]:[t.length>0?t:\"...\",...this.config.options]}renderSuggestion(t,r){r.setText(t)}onChooseSuggestion(t,r){if(this.resolve){let n;this.config.allowEmpty&&t===\" \"?n=\"\":t===\"...\"?n=void 0:n=t,this.resolve(n)}}};g();function Ex(e,t){let r=Object.assign({},e.lineAuthor,t.lineAuthor);return Object.assign({},e,t,{lineAuthor:r})}var Is=class extends Error{constructor(r){super(\"没有可用的网络连接\");this.originalError=r}};g();var sT=ze(Ux()),oT=ze(aT()),ba=require(\"obsidian\");var Ug=(e,t)=>e===\".\"||t==null||t.length===0||t===\".\"?!0:t.length>=e.length?t.startsWith(e):e.startsWith(t);function rn(e,t){let r;if(t){if(t.button===0||t.button===1){let n=ba.Keymap.isModEvent(t);r=e.workspace.getLeaf(n)}}else r=e.workspace.getLeaf(!1);return r}function kn(e,t,r,n,i){if(t.button==2){let a=e.vault.getAbstractFileByPath(r);if(a!=null){let s=new ba.Menu;e.workspace.trigger(\"file-menu\",s,a,i,n),s.showAtPosition({x:t.pageX,y:t.pageY})}else{let s=new ba.Menu;e.workspace.trigger(\"obsidian-git:menu\",s,r,i,n),s.showAtPosition({x:t.pageX,y:t.pageY})}}}function Oi(e){throw new Error(\"Impossible branch: \"+e)}function Gg(e){return`rgb(${e.r},${e.g},${e.b})`}function lT(e){var a;let t=(a=sT.fromString(e))==null?void 0:a.toRgbaArray();if(t===void 0)return;let[r,n,i]=t;return{r,g:n,b:i}}function cT(e){return e.diff(ba.moment.unix(0),\"seconds\")}function uT(e){if(e.length!==0)return e.slice().sort()[Math.floor(e.length/2)]}function fT(e,t){return(0,oT.default)(e,t,{strict:!0})}function zl(e,t){return new Proxy(e,{get(r,n){return n===\"length\"?Math.min(t,r.length):r[n]}})}function dT(e,t,r){return e.length<=t?new Array(t-e.length).fill(r).join(\"\")+e:e.substring(e.length-t)}function hT(e,t){if(t<=0)return e;let r=new Array(t).fill(\" \").join(\"\"),n=e.substring(t,e.length);return r+n}function zg(e,t,r){return e<=t&&t<=r}function Ii(e){let[t,...r]=e.split(\"/\");return[t,r.length===0?void 0:r.join(\"/\")]}function Tn(e){return e.endsWith(\"/\")?e:e.split(\"/\").last().replace(/\\.md$/,\"\")}function pT(e){return e===1?\"1 minute\":`${e} minutes`}function Rj(e){let t=e.lastIndexOf(\".\");return e.substring(t+1)}function zs(e){if(e.endsWith(\".md\"))return!1;let t=Rj(e);return xx.includes(t)}function Vg(e){return(e.startsWith(\"https://github.com/\")||e.startsWith(\"https://gitlab.com/\"))&&(e.endsWith(\".git\")||(e=e+\".git\")),e}g();var mT=require(\"obsidian\"),Vs=class{constructor(t){this.plugin=t,this.app=t.app}getRelativeVaultPath(t){return this.plugin.settings.basePath?this.plugin.settings.basePath+\"/\"+t:t}getRelativeRepoPath(t,r=!0){return r&&this.plugin.settings.basePath.length>0?t.substring(this.plugin.settings.basePath.length+1):t}unload(){}_getTreeStructure(t,r=0){let n=[];for(t=[...t];t.length>0;){let i=t.first(),a=i.path.substring(r);if(a.contains(\"/\")){let s=a.substring(0,a.indexOf(\"/\")),o=t.filter(l=>l.path.substring(r).startsWith(s+\"/\"));o.forEach(l=>t.remove(l));let c=i.path.substring(0,a.indexOf(\"/\")+r);n.push({title:s,path:c,vaultPath:this.getRelativeVaultPath(c),children:this._getTreeStructure(o,(r>0?r+s.length:s.length)+1)})}else n.push({title:a,data:i,path:i.path,vaultPath:this.getRelativeVaultPath(i.path)}),t.remove(i)}return n}simplify(t){var r,n,i,a;for(let s of t){for(;;){let o=((r=s.children)==null?void 0:r.length)==1,c=((i=(n=s.children)==null?void 0:n.first())==null?void 0:i.data)==null;if(!(s.children!=null&&o&&c))break;let l=s.children.first();s.title+=\"/\"+l.title,s.data=l.data,s.path=l.path,s.vaultPath=l.vaultPath,s.children=l.children}s.children!=null&&this.simplify(s.children),(a=s.children)==null||a.sort((o,c)=>{let l=(c.data==null?1:0)-(o.data==null?1:0);return l!=0?l:o.title.localeCompare(c.title)})}return t.sort((s,o)=>{let c=(o.data==null?1:0)-(s.data==null?1:0);return c!=0?c:s.title.localeCompare(o.title)})}getTreeStructure(t){let r=this._getTreeStructure(t);return this.simplify(r)}async formatCommitMessage(t){let r;if(t.includes(\"{{numFiles}}\")){r=await this.status();let n=r.staged.length;t=t.replace(\"{{numFiles}}\",String(n))}if(t.includes(\"{{hostname}}\")){let n=this.plugin.localStorage.getHostname()||\"\";t=t.replace(\"{{hostname}}\",n)}if(t.includes(\"{{files}}\")){r=r!=null?r:await this.status();let n={},i=\"\";if(r.staged.length<100){r.staged.forEach(s=>{s.index in n?n[s.index].push(s.path):n[s.index]=[s.path]});let a=[];for(let[s,o]of Object.entries(n))a.push(s+\" \"+o.join(\" \"));i=a.join(\", \")}else i=\"文件数量过多，无法列出\";t=t.replace(\"{{files}}\",i)}if(t=t.replace(\"{{date}}\",(0,mT.moment)().format(this.plugin.settings.commitDateFormat)),this.plugin.settings.listChangedFilesInMessageBody){let n=r!=null?r:await this.status(),i=\"\";n.staged.length<100?i=n.staged.map(a=>a.path).join(`\n`):i=\"文件数量过多，无法列出\",t=t+`\n\n受影响的文件:\n`+i}return t}};var Te=class extends Vs{constructor(r){super(r);this.useDefaultWindowsGitPath=!1}async setGitInstance(r=!1){if(this.isGitInstalled()){let n=this.app.vault.adapter,i=n.getBasePath(),a=i;this.plugin.settings.basePath&&(await n.exists((0,Xn.normalizePath)(this.plugin.settings.basePath))?a=Be.join(i,this.plugin.settings.basePath):r||new Xn.Notice(\"ObsidianGit: 基础路径不存在\")),this.absoluteRepoPath=a,this.git=wx({baseDir:a,binary:this.plugin.localStorage.getGitPath()||(this.useDefaultWindowsGitPath?Vu:void 0),config:[\"core.quotepath=off\"],unsafe:{allowUnsafeCustomBinary:!0}});let s=this.plugin.localStorage.getPATHPaths(),o=this.plugin.localStorage.getEnvVars(),c=this.plugin.settings.gitDir;if(s.length>0){let f=process.env.PATH+\":\"+s.join(\":\");process.env.PATH=f}c&&(process.env.GIT_DIR=c);for(let f of o){let[d,h]=f.split(\"=\");process.env[d]=h}if(yT.default.enable(\"simple-git\"),await this.git.checkIsRepo()){let f=await this.git.revparse(\"--show-cdup\"),d=(0,Vl.resolve)(a+Vl.sep+f);this.absoluteRepoPath=d,await this.git.cwd(d)}let l=Be.join(i,this.app.vault.configDir,\"plugins\",\"obsidian-git\"),u=Be.join(l,Os);process.env.SSH_ASKPASS==null&&(process.env.SSH_ASKPASS=u),process.env.OBSIDIAN_GIT_CREDENTIALS_INPUT=Be.join(l,Wu),process.env.SSH_ASKPASS==u&&this.askpass().catch(f=>this.plugin.displayError(f))}}getRelativeVaultPath(r){let i=this.app.vault.adapter.getBasePath(),a=Be.join(this.absoluteRepoPath,r),s=Be.relative(i,a);return Xn.Platform.isWin&&(s=s.replace(/\\\\/g,\"/\")),s}getRelativeRepoPath(r,n=!0){if(n){let a=this.plugin.app.vault.adapter.getBasePath(),s=this.absoluteRepoPath,o=Be.join(a,r),c=Be.relative(s,o);return Xn.Platform.isWin&&(c=c.replace(/\\\\/g,\"/\")),c}return r}async askpass(){let r=this.app.vault.adapter,n=r.getBasePath(),i=Be.join(n,this.app.vault.configDir,\"plugins\",\"obsidian-git\"),a=this.app.vault.configDir+\"/plugins/obsidian-git/\";await Zn.writeFile(Be.join(i,Os),_x),await Zn.chmod(Be.join(i,Os),493),this.watchAbortController=new AbortController;let{signal:s}=this.watchAbortController;try{let o=Zn.watch(i,{signal:s});for await(let c of o){if(c.filename!=Wu)continue;let l=a+Wu;if(!await r.exists(l))continue;let u=await r.read(l),f;u.length>60&&(f=new Xn.Notice(u,999999));let d=await new Fe(this.plugin,{allowEmpty:!0,placeholder:u.length>60?\"Enter a response to the message.\":u}).openAndGetResult();f==null||f.hide(),await r.exists(l)&&await r.write(`${l}.response`,d!=null?d:\"\")}}catch(o){this.plugin.displayError(o),await Zn.rm(Be.join(i,Os),{force:!0}),await Zn.rm(Be.join(i,`${Os}.response`),{force:!0}),await new Promise(c=>setTimeout(c,5e3)),this.plugin.log(\"Retry watch for ask pass\"),await this.askpass()}}unload(){var r;(r=this.watchAbortController)==null||r.abort()}async status(){this.plugin.setPluginState({gitAction:1});let r=await this.git.status();this.plugin.setPluginState({gitAction:0});let n=r.files.map(i=>{let a=this.formatPath(i);return{path:a.path,from:a.from,index:i.index===\"?\"?\"U\":i.index,workingDir:i.working_dir===\"?\"?\"U\":i.working_dir,vaultPath:this.getRelativeVaultPath(a.path)}});return{all:n,changed:n.filter(i=>i.workingDir!==\" \"),staged:n.filter(i=>i.index!==\" \"&&i.index!=\"U\"),conflicted:r.conflicted.map(i=>this.formatPath({path:i}).path)}}async submoduleAwareHeadRevisonInContainingDirectory(r){let n=this.getRelativeRepoPath(r),a=[\"-C\",Be.dirname(n),\"rev-parse\",\"HEAD\"],s=this.git.raw(a);return s.catch(o=>console.warn(\"obsidian-git: rev-parse error:\",o)),s}async getSubmodulePaths(){return new Promise(r=>{this.git.outputHandler((n,i,a,s)=>{if(!(s.contains(\"submodule\")&&s.contains(\"foreach\")))return;let o=\"\",c=this.app.vault.adapter.getBasePath()+(this.plugin.settings.basePath?\"/\"+this.plugin.settings.basePath:\"\");i.on(\"data\",l=>{o+=l.toString(\"utf8\")}),i.on(\"end\",()=>{let u=o.split(`\n`).map(f=>{let d=f.match(/'([^']*)'/);if(d!=null)return c+\"/\"+d[1]+Vl.sep}).filter(f=>!!f);u.reverse(),r(u)})}),this.git.subModule([\"foreach\",\"--recursive\",\"\"]).then(()=>{this.git.outputHandler(()=>{})},n=>this.plugin.displayError(n))})}formatPath(r,n=!1){function i(a){if(a!=null)return a.startsWith('\"')&&a.endsWith('\"')?a.substring(1,a.length-1):a}return n?{from:i(r.from),path:i(r.path)}:{path:i(r.path)}}async blame(r,n,i){if(r=this.getRelativeRepoPath(r),!await this.isTracked(r))return\"untracked\";let a=await this.getSubmoduleOfFile(r),s=a?[\"-C\",a.submodule]:[],o=a?a.relativeFilepath:r;s.push(\"blame\",\"--porcelain\"),i&&s.push(\"-w\");let c=`-C${zu}`;switch(n){case\"inactive\":break;case\"same-commit\":s.push(\"-C\",c);break;case\"all-commits\":s.push(\"-C\",\"-C\",c);break;default:Oi(n)}s.push(\"--\",o);let l=await this.git.raw(s);return Mj(l)}async isTracked(r){let n=await this.getSubmoduleOfFile(r),i=n?[\"-C\",n.submodule]:[],a=n?n.relativeFilepath:r;return i.push(\"ls-files\",\"--\",a),this.git.raw(i).then(s=>s.trim()!==\"\")}async commitAll({message:r}){if(this.plugin.settings.updateSubmodules){this.plugin.setPluginState({gitAction:4});let i=await this.getSubmodulePaths();for(let a of i)await this.git.cwd({path:a,root:!1}).add(\"-A\"),await this.git.cwd({path:a,root:!1}).commit(await this.formatCommitMessage(r))}this.plugin.setPluginState({gitAction:3}),await this.git.add(\"-A\"),this.plugin.setPluginState({gitAction:4});let n=await this.git.commit(await this.formatCommitMessage(r));return this.app.workspace.trigger(\"obsidian-git:head-change\"),n.summary.changes}async commit({message:r,amend:n}){this.plugin.setPluginState({gitAction:4});let i=(await this.git.commit(await this.formatCommitMessage(r),n?[\"--amend\"]:[])).summary.changes;return this.app.workspace.trigger(\"obsidian-git:head-change\"),this.plugin.setPluginState({gitAction:0}),i}async stage(r,n){this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.git.add([\"--\",r]),this.plugin.setPluginState({gitAction:0})}async stageAll({dir:r}){this.plugin.setPluginState({gitAction:3}),await this.git.add(r!=null?r:\"-A\"),this.plugin.setPluginState({gitAction:0})}async unstageAll({dir:r}){this.plugin.setPluginState({gitAction:3}),await this.git.reset(r!=null?[\"--\",r]:[]),this.plugin.setPluginState({gitAction:0})}async unstage(r,n){this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.git.reset([\"--\",r]),this.plugin.setPluginState({gitAction:0})}async discard(r){this.plugin.setPluginState({gitAction:3}),await this.isTracked(r)?await this.git.checkout([\"--\",r]):await this.app.vault.adapter.rmdir(this.getRelativeVaultPath(r),!0),this.plugin.setPluginState({gitAction:0})}async hashObject(r){r=this.getRelativeRepoPath(r);let n=await this.getSubmoduleOfFile(r),i=n?[\"-C\",n.submodule]:[],a=n?n.relativeFilepath:r;return i.push(\"hash-object\",\"--\",a),this.git.raw(i)}async discardAll({dir:r}){return this.discard(r!=null?r:\".\")}async pull(){this.plugin.setPluginState({gitAction:2});try{this.plugin.settings.updateSubmodules&&await this.git.subModule([\"update\",\"--remote\",\"--merge\",\"--recursive\"]);let r=await this.branchInfo(),n=await this.git.revparse([r.current]);if(!r.tracking&&this.plugin.settings.updateSubmodules){this.plugin.log(\"未找到跟踪分支。将忽略主仓库的拉取,仅更新子模块。\");return}await this.git.fetch();let i=await this.git.revparse([r.tracking]);if(n!==i){if(this.plugin.settings.syncMethod===\"merge\"||this.plugin.settings.syncMethod===\"rebase\")try{switch(this.plugin.settings.syncMethod){case\"merge\":await this.git.merge([r.tracking]);break;case\"rebase\":await this.git.rebase([r.tracking])}}catch(o){this.plugin.displayError(`拉取失败(${this.plugin.settings.syncMethod}): ${\"message\"in o?o.message:o}`);return}else if(this.plugin.settings.syncMethod===\"reset\")try{await this.git.raw([\"update-ref\",`refs/heads/${r.current}`,i]),await this.unstageAll({})}catch(o){this.plugin.displayError(`同步失败(${this.plugin.settings.syncMethod}): ${\"message\"in o?o.message:o}`)}this.app.workspace.trigger(\"obsidian-git:head-change\");let a=await this.git.revparse([r.current]);return(await this.git.diff([`${n}..${a}`,\"--name-only\"])).split(/\\r\\n|\\r|\\n/).filter(o=>o.length>0).map(o=>({path:o,workingDir:\"P\",vaultPath:this.getRelativeVaultPath(o)}))}else return[]}catch(r){this.convertErrors(r)}}async push(){this.plugin.setPluginState({gitAction:5});try{if(this.plugin.settings.updateSubmodules){let s=await this.git.env({...process.env,OBSIDIAN_GIT:1}).subModule([\"foreach\",\"--recursive\",`tracking=$(git for-each-ref --format='%(upstream:short)' \"$(git symbolic-ref -q HEAD)\"); echo $tracking; if [ ! -z \"$(git diff --shortstat $tracking)\" ]; then git push; fi`]);console.log(s)}let r=await this.git.status(),n=r.tracking,i=r.current;if(!n&&this.plugin.settings.updateSubmodules){this.plugin.log(\"未找到跟踪分支。将忽略主仓库的推送,仅更新子模块。\");return}let a=(await this.git.diffSummary([i,n,\"--\"])).changed;return await this.git.env({...process.env,OBSIDIAN_GIT:1}).push(),a}catch(r){this.convertErrors(r)}}async getUnpushedCommits(){let r=await this.git.status(),n=r.tracking,i=r.current;return n==null||i==null?0:(await this.git.diffSummary([i,n,\"--\"])).changed}async canPush(){if(this.plugin.settings.updateSubmodules===!0)return!0;let r=await this.git.status(),n=r.tracking,i=r.current;return n?(await this.git.diffSummary([i,n,\"--\"])).changed!==0:!1}async checkRequirements(){return this.isGitInstalled()?await this.git.checkIsRepo()?\"valid\":\"missing-repo\":\"missing-git\"}async branchInfo(){let r=await this.git.status(),n=await this.git.branch([\"--no-color\"]);return{current:r.current||void 0,tracking:r.tracking||void 0,branches:n.all}}async getRemoteUrl(r){try{return await this.git.remote([\"get-url\",r])||void 0}catch(n){if(String(n).contains(r))return;throw n}}async log(r,n=!0,i,a){let s;r&&(s=this.getRelativeRepoPath(r,n));let o={file:s,maxCount:i,\"--diff-merges\":\"first-parent\",\"--name-status\":null};return a&&(o[a]=null),(await this.git.log(o)).all.map(l=>{var u,f,d,h;return{...l,author:{name:l.author_name,email:l.author_email},refs:l.refs.split(\", \").filter(p=>p.length>0),diff:{...l.diff,files:(f=(u=l.diff)==null?void 0:u.files.map(p=>({...p,status:p.status,path:p.file,hash:l.hash,vaultPath:this.getRelativeVaultPath(p.file),fromPath:p.from,fromVaultPath:p.from!=null?this.getRelativeVaultPath(p.from):void 0,binary:p.binary})))!=null?f:[]},fileName:(h=(d=l.diff)==null?void 0:d.files.first())==null?void 0:h.file}})}async show(r,n,i=!0){let a=this.getRelativeRepoPath(n,i);return this.git.show([r+\":\"+a])}async checkout(r,n){if(n&&(r=`${n}/${r}`),await this.git.checkout(r),this.plugin.settings.submoduleRecurseCheckout){let i=await this.getSubmodulePaths();for(let a of i){let s=await this.git.cwd({path:a,root:!1}).branch();Object.keys(s.branches).includes(r)&&await this.git.cwd({path:a,root:!1}).checkout(r)}}}async createBranch(r){await this.git.checkout([\"-b\",r])}async deleteBranch(r,n){await this.git.branch([n?\"-D\":\"-d\",r])}async branchIsMerged(r){return!(await this.git.branch([\"--no-merged\"])).all.contains(r)}async init(){await this.git.init(!1)}async clone(r,n,i){await this.git.clone(r,Be.join(this.app.vault.adapter.getBasePath(),n),i?[\"--depth\",`${i}`]:[])}async setConfig(r,n){n==null?await this.git.raw([\"config\",\"--local\",\"--unset\",r]):await this.git.addConfig(r,n)}async getConfig(r){let i=(await this.git.listConfig(\"local\")).all[r];if(typeof i==\"string\"||i==null)return i;throw new Error(\"Config value is not a string\")}async fetch(r){await this.git.fetch(r!=null?[r]:[])}async setRemote(r,n){(await this.getRemotes()).includes(r)?await this.git.remote([\"set-url\",r,n]):await this.git.remote([\"add\",r,n])}async getRemoteBranches(r){let n=await this.git.branch([\"-r\",\"--list\",`${r}*`]),i=[];for(let a in n.branches)i.push(n.branches[a].name);return i}async getRemotes(){let r=await this.git.remote([]);return r?r.trim().split(`\n`):[]}async removeRemote(r){await this.git.removeRemote(r)}async updateUpstreamBranch(r){try{await this.git.branch([\"--set-upstream-to\",r])}catch(n){try{await this.git.branch([\"--set-upstream\",r])}catch(i){await this.git.push([\"--set-upstream\",...Ii(r)])}}}updateGitPath(r){return this.setGitInstance()}updateBasePath(r){return this.setGitInstance(!0)}async getDiffString(r,n=!1,i){return n?await this.git.diff([\"--cached\",\"--\",r]):i?await this.git.show([`${i}`,\"--\",r]):await this.git.diff([\"--\",r])}async diff(r,n,i){return await this.git.diff([`${n}..${i}`,\"--\",r])}async rawCommand(r){let n=r.split(\" \");return await this.git.raw(n[0],...n.slice(1))}async getSubmoduleOfFile(r){if(!await this.app.vault.adapter.exists(Be.dirname(r)))return;let n=await this.git.raw([\"-C\",Be.dirname(r),\"rev-parse\",\"--show-toplevel\"],c=>c&&console.warn(\"get-submodule-of-file\",c==null?void 0:c.message));if(n=n.trim(),(await this.git.raw([\"-C\",Be.dirname(r),\"rev-parse\",\"--show-superproject-working-tree\"],c=>c&&console.warn(\"get-submodule-of-file\",c==null?void 0:c.message))).trim()===\"\")return;let s=this.app.vault.adapter.getFullPath(Be.normalize(r)),o=Be.relative(n,s);return{submodule:n,relativeFilepath:o}}async getLastCommitTime(){let r=await this.git.log({n:1});if(r!=null&&r.latest!=null)return new Date(r.latest.date)}isGitInstalled(){let r=this.plugin.localStorage.getGitPath(),n=(0,qg.spawnSync)(r||\"git\",[\"--version\"],{stdio:\"ignore\"});if(n.error)if(Xn.Platform.isWin&&!r){this.plugin.log(`Git not found in PATH. Checking standard installation path(${Vu}) of Git for Windows.`);let i=(0,qg.spawnSync)(Vu,[\"--version\"],{stdio:\"ignore\"});if(i.error)return console.error(i.error),!1;this.useDefaultWindowsGitPath=!0}else return console.error(n.error),!1;else this.useDefaultWindowsGitPath=!1;return!0}convertErrors(r){if(r instanceof wr){let n=String(r.message);if(n.contains(\"Could not resolve host\")||n.contains(\"Unable to resolve host\")||n.match(/ssh: connect to host .*? port .*?: Operation timed out/)!=null||n.match(/ssh: connect to host .*? port .*?: Network is unreachable/)!=null||n.match(/ssh: connect to host .*? port .*?: Undefined error: 0/)!=null)throw new Is(n)}throw r}async isFileTrackedByLFS(r){try{return(await this.git.raw([\"check-attr\",\"filter\",r])).includes(\"filter: lfs\")}catch(n){let i=n instanceof Error?n.message:String(n);return this.plugin.displayError(`Error checking LFS status: ${i}`),!1}}},wT={hash:\"000000\",isZeroCommit:!0,summary:\"\"};function Mj(e){let r=e.replace(`\\r\n`,`\n`).split(`\n`),n={commits:new Map,hashPerLine:[void 0],originalFileLineNrPerLine:[void 0],finalFileLineNrPerLine:[void 0],groupSizePerStartingLine:new Map},i=1;for(let a=0;a<r.length;){if(gT(r[a])){let s=r[a].split(\" \"),o=Oj(s,i,n);for(a++;gT(r[a]);a++){let c=r[a].split(\" \");Ij(c,n,i)}Fj(n.commits.get(o)),i+=1}else if(!(r[a]===\"\"&&a===r.length-1))throw Error(`Expected non-whitespace line or EOF, but found: ${r[a]}`);a++}return n}function Oj(e,t,r){let n=e[0];if(r.hashPerLine.push(n),r.originalFileLineNrPerLine.push(parseInt(e[1])),r.finalFileLineNrPerLine.push(parseInt(e[2])),e.length>=4&&r.groupSizePerStartingLine.set(t,parseInt(e[3])),parseInt(e[2])!==t)throw Error(`git-blame output is out of order: ${t} vs ${e[2]}`);return n}function Ij(e,t,r){let n=e[0],i=e.slice(1).join(\" \"),a=t.hashPerLine[r],s=t.commits.get(a)||{hash:a,author:{},committer:{},previous:{}};switch(n){case\"summary\":s.summary=i;break;case\"author\":s.author.name=i;break;case\"author-mail\":s.author.email=vT(i);break;case\"author-time\":s.author.epochSeconds=parseInt(i);break;case\"author-tz\":s.author.tz=i;break;case\"committer\":s.committer.name=i;break;case\"committer-mail\":s.committer.email=vT(i);break;case\"committer-time\":s.committer.epochSeconds=parseInt(i);break;case\"committer-tz\":s.committer.tz=i;break;case\"previous\":s.previous.commitHash=i;break;case\"filename\":s.previous.filename=i;break}t.commits.set(a,s)}function Fj(e){if(e.summary===void 0)throw Error(`Summary not provided for commit: ${e.hash}`);Wg(e.author)&&(e.author=void 0),Wg(e.committer)&&(e.committer=void 0),Wg(e.previous)&&(e.previous=void 0),e.isZeroCommit=!!e.hash.match(/^0*$/)}function Wg(e){return!e||Object.keys(e).length===0}function gT(e){return e.length>0&&e[0].trim()===e[0]}function vT(e){let t=e.startsWith(\"<\")?e.substring(1):e;return t.endsWith(\">\")?t.substring(0,t.length-1):t}g();var eC=require(\"@codemirror/state\");g();var IT=require(\"@codemirror/state\"),Xf=require(\"obsidian\");g();var Yg=class{constructor(){this.eventsPerFilepath=new Map;this.startRemoveStalesSubscribersInterval()}ifFilepathDefinedTransformSubscribers(t,r){if(t)return this.ensureInitialized(t),r(this.eventsPerFilepath.get(t))}forEachSubscriber(t){this.eventsPerFilepath.forEach(r=>r.forEach(t))}ensureInitialized(t){this.eventsPerFilepath.get(t)||this.eventsPerFilepath.set(t,new Set)}startRemoveStalesSubscribersInterval(){this.removeStalesSubscribersTimer=window.setInterval(()=>this==null?void 0:this.forEachSubscriber(t=>t==null?void 0:t.removeIfStale()),6e4)}clear(){window.clearInterval(this.removeStalesSubscribersTimer),this.eventsPerFilepath.clear()}},Ws=new Yg;g();var Wf=require(\"@codemirror/state\"),CT=ze(Xg());g();var V=require(\"obsidian\");g();g();function nn(){}nn.prototype={diff:function(t,r){var n,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=i.callback;typeof i==\"function\"&&(a=i,i={});var s=this;function o(E){return E=s.postProcess(E,i),a?(setTimeout(function(){a(E)},0),!0):E}t=this.castInput(t,i),r=this.castInput(r,i),t=this.removeEmpty(this.tokenize(t,i)),r=this.removeEmpty(this.tokenize(r,i));var c=r.length,l=t.length,u=1,f=c+l;i.maxEditLength!=null&&(f=Math.min(f,i.maxEditLength));var d=(n=i.timeout)!==null&&n!==void 0?n:1/0,h=Date.now()+d,p=[{oldPos:-1,lastComponent:void 0}],m=this.extractCommon(p[0],r,t,0,i);if(p[0].oldPos+1>=l&&m+1>=c)return o(bT(s,p[0].lastComponent,r,t,s.useLongestToken));var v=-1/0,y=1/0;function b(){for(var E=Math.max(v,-u);E<=Math.min(y,u);E+=2){var _=void 0,k=p[E-1],w=p[E+1];k&&(p[E-1]=void 0);var A=!1;if(w){var S=w.oldPos-E;A=w&&0<=S&&S<c}var T=k&&k.oldPos+1<l;if(!A&&!T){p[E]=void 0;continue}if(!T||A&&k.oldPos<w.oldPos?_=s.addToPath(w,!0,!1,0,i):_=s.addToPath(k,!1,!0,1,i),m=s.extractCommon(_,r,t,E,i),_.oldPos+1>=l&&m+1>=c)return o(bT(s,_.lastComponent,r,t,s.useLongestToken));p[E]=_,_.oldPos+1>=l&&(y=Math.min(y,E-1)),m+1>=c&&(v=Math.max(v,E+1))}u++}if(a)(function E(){setTimeout(function(){if(u>f||Date.now()>h)return a();b()||E()},0)})();else for(;u<=f&&Date.now()<=h;){var x=b();if(x)return x}},addToPath:function(t,r,n,i,a){var s=t.lastComponent;return s&&!a.oneChangePerToken&&s.added===r&&s.removed===n?{oldPos:t.oldPos+i,lastComponent:{count:s.count+1,added:r,removed:n,previousComponent:s.previousComponent}}:{oldPos:t.oldPos+i,lastComponent:{count:1,added:r,removed:n,previousComponent:s}}},extractCommon:function(t,r,n,i,a){for(var s=r.length,o=n.length,c=t.oldPos,l=c-i,u=0;l+1<s&&c+1<o&&this.equals(n[c+1],r[l+1],a);)l++,c++,u++,a.oneChangePerToken&&(t.lastComponent={count:1,previousComponent:t.lastComponent,added:!1,removed:!1});return u&&!a.oneChangePerToken&&(t.lastComponent={count:u,previousComponent:t.lastComponent,added:!1,removed:!1}),t.oldPos=c,l},equals:function(t,r,n){return n.comparator?n.comparator(t,r):t===r||n.ignoreCase&&t.toLowerCase()===r.toLowerCase()},removeEmpty:function(t){for(var r=[],n=0;n<t.length;n++)t[n]&&r.push(t[n]);return r},castInput:function(t){return t},tokenize:function(t){return Array.from(t)},join:function(t){return t.join(\"\")},postProcess:function(t){return t}};function bT(e,t,r,n,i){for(var a=[],s;t;)a.push(t),s=t.previousComponent,delete t.previousComponent,t=s;a.reverse();for(var o=0,c=a.length,l=0,u=0;o<c;o++){var f=a[o];if(f.removed)f.value=e.join(n.slice(u,u+f.count)),u+=f.count;else{if(!f.added&&i){var d=r.slice(l,l+f.count);d=d.map(function(h,p){var m=n[u+p];return m.length>h.length?m:h}),f.value=e.join(d)}else f.value=e.join(r.slice(l,l+f.count));l+=f.count,f.added||(u+=f.count)}}return a}var JW=new nn;function _T(e,t){var r;for(r=0;r<e.length&&r<t.length;r++)if(e[r]!=t[r])return e.slice(0,r);return e.slice(0,r)}function xT(e,t){var r;if(!e||!t||e[e.length-1]!=t[t.length-1])return\"\";for(r=0;r<e.length&&r<t.length;r++)if(e[e.length-(r+1)]!=t[t.length-(r+1)])return e.slice(-r);return e.slice(-r)}function Kg(e,t,r){if(e.slice(0,t.length)!=t)throw Error(\"string \".concat(JSON.stringify(e),\" doesn't start with prefix \").concat(JSON.stringify(t),\"; this is a bug\"));return r+e.slice(t.length)}function Jg(e,t,r){if(!t)return e+r;if(e.slice(-t.length)!=t)throw Error(\"string \".concat(JSON.stringify(e),\" doesn't end with suffix \").concat(JSON.stringify(t),\"; this is a bug\"));return e.slice(0,-t.length)+r}function Wl(e,t){return Kg(e,t,\"\")}function Df(e,t){return Jg(e,t,\"\")}function ST(e,t){return t.slice(0,$j(e,t))}function $j(e,t){var r=0;e.length>t.length&&(r=e.length-t.length);var n=t.length;e.length<t.length&&(n=e.length);var i=Array(n),a=0;i[0]=0;for(var s=1;s<n;s++){for(t[s]==t[a]?i[s]=i[a]:i[s]=a;a>0&&t[s]!=t[a];)a=i[a];t[s]==t[a]&&a++}a=0;for(var o=r;o<e.length;o++){for(;a>0&&e[o]!=t[a];)a=i[a];e[o]==t[a]&&a++}return a}var Nf=\"a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}\",Lj=new RegExp(\"[\".concat(Nf,\"]+|\\\\s+|[^\").concat(Nf,\"]\"),\"ug\"),Bf=new nn;Bf.equals=function(e,t,r){return r.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e.trim()===t.trim()};Bf.tokenize=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r;if(t.intlSegmenter){if(t.intlSegmenter.resolvedOptions().granularity!=\"word\")throw new Error('The segmenter passed must have a granularity of \"word\"');r=Array.from(t.intlSegmenter.segment(e),function(a){return a.segment})}else r=e.match(Lj)||[];var n=[],i=null;return r.forEach(function(a){/\\s/.test(a)?i==null?n.push(a):n.push(n.pop()+a):/\\s/.test(i)?n[n.length-1]==i?n.push(n.pop()+a):n.push(i+a):n.push(a),i=a}),n};Bf.join=function(e){return e.map(function(t,r){return r==0?t:t.replace(/^\\s+/,\"\")}).join(\"\")};Bf.postProcess=function(e,t){if(!e||t.oneChangePerToken)return e;var r=null,n=null,i=null;return e.forEach(function(a){a.added?n=a:a.removed?i=a:((n||i)&&ET(r,i,n,a),r=a,n=null,i=null)}),(n||i)&&ET(r,i,n,null),e};function ET(e,t,r,n){if(t&&r){var i=t.value.match(/^\\s*/)[0],a=t.value.match(/\\s*$/)[0],s=r.value.match(/^\\s*/)[0],o=r.value.match(/\\s*$/)[0];if(e){var c=_T(i,s);e.value=Jg(e.value,s,c),t.value=Wl(t.value,c),r.value=Wl(r.value,c)}if(n){var l=xT(a,o);n.value=Kg(n.value,o,l),t.value=Df(t.value,l),r.value=Df(r.value,l)}}else if(r)e&&(r.value=r.value.replace(/^\\s*/,\"\")),n&&(n.value=n.value.replace(/^\\s*/,\"\"));else if(e&&n){var u=n.value.match(/^\\s*/)[0],f=t.value.match(/^\\s*/)[0],d=t.value.match(/\\s*$/)[0],h=_T(u,f);t.value=Wl(t.value,h);var p=xT(Wl(u,h),d);t.value=Df(t.value,p),n.value=Kg(n.value,u,p),e.value=Jg(e.value,u,u.slice(0,u.length-p.length))}else if(n){var m=n.value.match(/^\\s*/)[0],v=t.value.match(/\\s*$/)[0],y=ST(v,m);t.value=Df(t.value,y)}else if(e){var b=e.value.match(/\\s*$/)[0],x=t.value.match(/^\\s*/)[0],E=ST(b,x);t.value=Wl(t.value,E)}}var Dj=new nn;Dj.tokenize=function(e){var t=new RegExp(\"(\\\\r?\\\\n)|[\".concat(Nf,\"]+|[^\\\\S\\\\n\\\\r]+|[^\").concat(Nf,\"]\"),\"ug\");return e.match(t)||[]};var Hf=new nn;Hf.tokenize=function(e,t){t.stripTrailingCr&&(e=e.replace(/\\r\\n/g,`\n`));var r=[],n=e.split(/(\\n|\\r\\n)/);n[n.length-1]||n.pop();for(var i=0;i<n.length;i++){var a=n[i];i%2&&!t.newlineIsToken?r[r.length-1]+=a:r.push(a)}return r};Hf.equals=function(e,t,r){return r.ignoreWhitespace?((!r.newlineIsToken||!e.includes(`\n`))&&(e=e.trim()),(!r.newlineIsToken||!t.includes(`\n`))&&(t=t.trim())):r.ignoreNewlineAtEof&&!r.newlineIsToken&&(e.endsWith(`\n`)&&(e=e.slice(0,-1)),t.endsWith(`\n`)&&(t=t.slice(0,-1))),nn.prototype.equals.call(this,e,t,r)};function AT(e,t,r){return Hf.diff(e,t,r)}var Nj=new nn;Nj.tokenize=function(e){return e.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var jj=new nn;jj.tokenize=function(e){return e.split(/([{}:;,]|\\s+)/)};function kT(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function jf(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?kT(Object(r),!0).forEach(function(n){Uj(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):kT(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function Bj(e,t){if(typeof e!=\"object\"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||\"default\");if(typeof n!=\"object\")return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(t===\"string\"?String:Number)(e)}function Hj(e){var t=Bj(e,\"string\");return typeof t==\"symbol\"?t:t+\"\"}function Qg(e){\"@babel/helpers - typeof\";return Qg=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(t){return typeof t}:function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},Qg(e)}function Uj(e,t,r){return t=Hj(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Zg(e){return Gj(e)||zj(e)||Vj(e)||Wj()}function Gj(e){if(Array.isArray(e))return e0(e)}function zj(e){if(typeof Symbol!=\"undefined\"&&e[Symbol.iterator]!=null||e[\"@@iterator\"]!=null)return Array.from(e)}function Vj(e,t){if(e){if(typeof e==\"string\")return e0(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r===\"Object\"&&e.constructor&&(r=e.constructor.name),r===\"Map\"||r===\"Set\")return Array.from(e);if(r===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e0(e,t)}}function e0(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Wj(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ql=new nn;ql.useLongestToken=!0;ql.tokenize=Hf.tokenize;ql.castInput=function(e,t){var r=t.undefinedReplacement,n=t.stringifyReplacer,i=n===void 0?function(a,s){return typeof s==\"undefined\"?r:s}:n;return typeof e==\"string\"?e:JSON.stringify(t0(e,null,null,i),i,\"  \")};ql.equals=function(e,t,r){return nn.prototype.equals.call(ql,e.replace(/,([\\r\\n])/g,\"$1\"),t.replace(/,([\\r\\n])/g,\"$1\"),r)};function t0(e,t,r,n,i){t=t||[],r=r||[],n&&(e=n(i,e));var a;for(a=0;a<t.length;a+=1)if(t[a]===e)return r[a];var s;if(Object.prototype.toString.call(e)===\"[object Array]\"){for(t.push(e),s=new Array(e.length),r.push(s),a=0;a<e.length;a+=1)s[a]=t0(e[a],t,r,n,i);return t.pop(),r.pop(),s}if(e&&e.toJSON&&(e=e.toJSON()),Qg(e)===\"object\"&&e!==null){t.push(e),s={},r.push(s);var o=[],c;for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&o.push(c);for(o.sort(),a=0;a<o.length;a+=1)c=o[a],s[c]=t0(e[c],t,r,n,c);t.pop(),r.pop()}else s=e;return s}var r0=new nn;r0.tokenize=function(e){return e.slice()};r0.join=r0.removeEmpty=function(e){return e};function TT(e,t,r,n,i,a,s){if(s||(s={}),typeof s==\"function\"&&(s={callback:s}),typeof s.context==\"undefined\"&&(s.context=4),s.newlineIsToken)throw new Error(\"newlineIsToken may not be used with patch-generation functions, only with diffing functions\");if(s.callback){var o=s,c=o.callback;AT(r,n,jf(jf({},s),{},{callback:function(f){var d=l(f);c(d)}}))}else return l(AT(r,n,s));function l(u){if(!u)return;u.push({value:\"\",lines:[]});function f(A){return A.map(function(S){return\" \"+S})}for(var d=[],h=0,p=0,m=[],v=1,y=1,b=function(){var S=u[x],T=S.lines||Yj(S.value);if(S.lines=T,S.added||S.removed){var P;if(!h){var O=u[x-1];h=v,p=y,O&&(m=s.context>0?f(O.lines.slice(-s.context)):[],h-=m.length,p-=m.length)}(P=m).push.apply(P,Zg(T.map(function(ee){return(S.added?\"+\":\"-\")+ee}))),S.added?y+=T.length:v+=T.length}else{if(h)if(T.length<=s.context*2&&x<u.length-2){var j;(j=m).push.apply(j,Zg(f(T)))}else{var D,Q=Math.min(T.length,s.context);(D=m).push.apply(D,Zg(f(T.slice(0,Q))));var de={oldStart:h,oldLines:v-h+Q,newStart:p,newLines:y-p+Q,lines:m};d.push(de),h=0,p=0,m=[]}v+=T.length,y+=T.length}},x=0;x<u.length;x++)b();for(var E=0,_=d;E<_.length;E++)for(var k=_[E],w=0;w<k.lines.length;w++)k.lines[w].endsWith(`\n`)?k.lines[w]=k.lines[w].slice(0,-1):(k.lines.splice(w+1,0,\"\\\\ No newline at end of file\"),w++);return{oldFileName:e,newFileName:t,oldHeader:i,newHeader:a,hunks:d}}}function n0(e){if(Array.isArray(e))return e.map(n0).join(`\n`);var t=[];e.oldFileName==e.newFileName&&t.push(\"Index: \"+e.oldFileName),t.push(\"===================================================================\"),t.push(\"--- \"+e.oldFileName+(typeof e.oldHeader==\"undefined\"?\"\":\"\t\"+e.oldHeader)),t.push(\"+++ \"+e.newFileName+(typeof e.newHeader==\"undefined\"?\"\":\"\t\"+e.newHeader));for(var r=0;r<e.hunks.length;r++){var n=e.hunks[r];n.oldLines===0&&(n.oldStart-=1),n.newLines===0&&(n.newStart-=1),t.push(\"@@ -\"+n.oldStart+\",\"+n.oldLines+\" +\"+n.newStart+\",\"+n.newLines+\" @@\"),t.push.apply(t,n.lines)}return t.join(`\n`)+`\n`}function qj(e,t,r,n,i,a,s){var o;if(typeof s==\"function\"&&(s={callback:s}),(o=s)!==null&&o!==void 0&&o.callback){var l=s,u=l.callback;TT(e,t,r,n,i,a,jf(jf({},s),{},{callback:function(d){d?u(n0(d)):u()}}))}else{var c=TT(e,t,r,n,i,a,s);return c?n0(c):void 0}}function Uf(e,t,r,n,i,a){return qj(e,e,t,r,n,i,a)}function Yj(e){var t=e.endsWith(`\n`),r=e.split(`\n`).map(function(n){return n+`\n`});return t?r.pop():r.push(r.pop().slice(0,-1)),r}var _a=require(\"obsidian\");g();var Fi=require(\"obsidian\"),Gf=class{constructor(t,r){this.plugin=r;this.promises={};this.adapter=t.adapter,this.vault=t,this.lastBasePath=this.plugin.settings.basePath,this.promises.readFile=this.readFile.bind(this),this.promises.writeFile=this.writeFile.bind(this),this.promises.readdir=this.readdir.bind(this),this.promises.mkdir=this.mkdir.bind(this),this.promises.rmdir=this.rmdir.bind(this),this.promises.stat=this.stat.bind(this),this.promises.unlink=this.unlink.bind(this),this.promises.lstat=this.lstat.bind(this),this.promises.readlink=this.readlink.bind(this),this.promises.symlink=this.symlink.bind(this)}async readFile(t,r){var n;if(this.maybeLog(\"Read: \"+t+JSON.stringify(r)),r==\"utf8\"||r.encoding==\"utf8\"){let i=this.vault.getAbstractFileByPath(t);return i instanceof Fi.TFile?(this.maybeLog(\"Reuse\"),this.vault.read(i)):this.adapter.read(t)}else{if(t.endsWith(this.gitDir+\"/index\"))return this.plugin.settings.basePath!=this.lastBasePath?(this.clearIndex(),this.lastBasePath=this.plugin.settings.basePath,this.adapter.readBinary(t)):(n=this.index)!=null?n:this.adapter.readBinary(t);let i=this.vault.getAbstractFileByPath(t);return i instanceof Fi.TFile?(this.maybeLog(\"Reuse\"),this.vault.readBinary(i)):this.adapter.readBinary(t)}}async writeFile(t,r){if(this.maybeLog(\"Write: \"+t),typeof r==\"string\"){let n=this.vault.getAbstractFileByPath(t);return n instanceof Fi.TFile?this.vault.modify(n,r):this.adapter.write(t,r)}else if(t.endsWith(this.gitDir+\"/index\"))this.index=r,this.indexmtime=Date.now();else{let n=this.vault.getAbstractFileByPath(t);return n instanceof Fi.TFile?this.vault.modifyBinary(n,r):this.adapter.writeBinary(t,r)}}async readdir(t){t===\".\"&&(t=\"/\");let r=await this.adapter.list(t),n=[...r.files,...r.folders],i;return t!==\"/\"?i=n.map(a=>(0,Fi.normalizePath)(a.substring(t.length))):i=n,i}async mkdir(t){return this.adapter.mkdir(t)}async rmdir(t,r){var n,i;return this.adapter.rmdir(t,(i=(n=r==null?void 0:r.options)==null?void 0:n.recursive)!=null?i:!1)}async stat(t){if(t.endsWith(this.gitDir+\"/index\")){if(this.index!==void 0&&this.indexctime!=null&&this.indexmtime!=null)return{isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1,size:this.index.length,type:\"file\",ctimeMs:this.indexctime,mtimeMs:this.indexmtime};{let n=await this.adapter.stat(t);if(n==null)throw{code:\"ENOENT\"};return this.indexctime=n.ctime,this.indexmtime=n.mtime,{ctimeMs:n.ctime,mtimeMs:n.mtime,size:n.size,type:\"file\",isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1}}}t===\".\"&&(t=\"/\");let r=this.vault.getAbstractFileByPath(t);if(this.maybeLog(\"Stat: \"+t),r instanceof Fi.TFile)return this.maybeLog(\"Reuse stat\"),{ctimeMs:r.stat.ctime,mtimeMs:r.stat.mtime,size:r.stat.size,type:\"file\",isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1};{let n=await this.adapter.stat(t);if(n)return{ctimeMs:n.ctime,mtimeMs:n.mtime,size:n.size,type:n.type===\"folder\"?\"directory\":n.type,isFile:()=>n.type===\"file\",isDirectory:()=>n.type===\"folder\",isSymbolicLink:()=>!1};throw{code:\"ENOENT\"}}}async unlink(t){return this.adapter.remove(t)}async lstat(t){return this.stat(t)}async readlink(t){throw new Error(`readlink of (${t}) is not implemented.`)}async symlink(t){throw new Error(`symlink of (${t}) is not implemented.`)}async saveAndClear(){this.index!==void 0&&await this.adapter.writeBinary(this.plugin.gitManager.getRelativeVaultPath(this.gitDir+\"/index\"),this.index,{ctime:this.indexctime,mtime:this.indexmtime}),this.clearIndex()}clearIndex(){this.index=void 0,this.indexctime=void 0,this.indexmtime=void 0}get gitDir(){return this.plugin.settings.gitDir||\".git\"}maybeLog(t){}};var an=class extends Vs{constructor(r){super(r);this.FILE=0;this.HEAD=1;this.WORKDIR=2;this.STAGE=3;this.status_mapping={\"000\":\"  \",\"003\":\"AD\",\"020\":\"??\",\"022\":\"A \",\"023\":\"AM\",100:\"D \",101:\" D\",103:\"MD\",110:\"DA\",111:\"  \",113:\"MM\",120:\"DA\",121:\" M\",122:\"M \",123:\"MM\"};this.noticeLength=999999;this.fs=new Gf(this.app.vault,this.plugin)}getRepo(){return{fs:this.fs,dir:this.plugin.settings.basePath,gitdir:this.plugin.settings.gitDir||void 0,onAuth:()=>{var r,n;return{username:(r=this.plugin.localStorage.getUsername())!=null?r:void 0,password:(n=this.plugin.localStorage.getPassword())!=null?n:void 0}},onAuthFailure:async()=>{new _a.Notice(\"验证失败。请尝试使用不同的凭据\");let r=await new Fe(this.plugin,{placeholder:\"指定您的用户名\"}).openAndGetResult();if(r){let n=await new Fe(this.plugin,{placeholder:\"指定您的密码/个人访问令牌\"}).openAndGetResult();if(n)return this.plugin.localStorage.setUsername(r),this.plugin.localStorage.setPassword(n),{username:r,password:n}}return{cancel:!0}},http:{async request({url:r,method:n,headers:i,body:a}){let s;a&&(s=(await Jj(a)).buffer);let o=await(0,_a.requestUrl)({url:r,method:n,headers:i,body:s,throw:!1});return{url:r,method:n,headers:o.headers,body:[new Uint8Array(o.arrayBuffer)],statusCode:o.status,statusMessage:o.status.toString()}}}}}async wrapFS(r){try{let n=await r;return await this.fs.saveAndClear(),n}catch(n){throw await this.fs.saveAndClear(),n}}async status(){let r,n=window.setTimeout(()=>{r=new _a.Notice(\"这需要较长的时间:获取状态\",this.noticeLength)},2e4);try{this.plugin.setPluginState({gitAction:1});let i=(await this.wrapFS(ie.statusMatrix({...this.getRepo()}))).map(c=>this.getFileStatusResult(c)),a=i.filter(c=>c.workingDir!==\" \"),s=i.filter(c=>c.index!==\" \"&&c.index!==\"U\"),o=[];return window.clearTimeout(n),r==null||r.hide(),{all:i,changed:a,staged:s,conflicted:o}}catch(i){throw window.clearTimeout(n),r==null||r.hide(),this.plugin.displayError(i),i}}async commitAll({message:r,status:n,unstagedFiles:i}){try{return await this.checkAuthorInfo(),await this.stageAll({status:n,unstagedFiles:i}),this.commit({message:r})}catch(a){throw this.plugin.displayError(a),a}}async commit({message:r}){try{await this.checkAuthorInfo(),this.plugin.setPluginState({gitAction:4});let n=await this.formatCommitMessage(r),i=this.plugin.localStorage.getConflict(),a;if(i){let s=await this.branchInfo();a=[s.current,s.tracking]}await this.wrapFS(ie.commit({...this.getRepo(),message:n,parent:a})),this.plugin.localStorage.setConflict(!1);return}catch(n){throw this.plugin.displayError(n),n}}async stage(r,n){let i=this.getRelativeRepoPath(r,n),a;n?a=r:a=this.getRelativeVaultPath(r);try{this.plugin.setPluginState({gitAction:3}),await this.app.vault.adapter.exists(a)?await this.wrapFS(ie.add({...this.getRepo(),filepath:i})):await this.wrapFS(ie.remove({...this.getRepo(),filepath:i}))}catch(s){throw this.plugin.displayError(s),s}}async stageAll({dir:r,status:n,unstagedFiles:i}){try{if(n)await Promise.all(n.changed.map(a=>a.workingDir!==\"D\"?this.wrapFS(ie.add({...this.getRepo(),filepath:a.path})):ie.remove({...this.getRepo(),filepath:a.path})));else{let a=i!=null?i:await this.getUnstagedFiles(r!=null?r:\".\");await Promise.all(a.map(({path:s,deleted:o})=>o?ie.remove({...this.getRepo(),filepath:s}):this.wrapFS(ie.add({...this.getRepo(),filepath:s}))))}}catch(a){throw this.plugin.displayError(a),a}}async unstage(r,n){try{this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.wrapFS(ie.resetIndex({...this.getRepo(),filepath:r}))}catch(i){throw this.plugin.displayError(i),i}}async unstageAll({dir:r,status:n}){try{let i;n?i=n.staged.map(a=>a.path):i=(await this.getStagedFiles(r!=null?r:\".\")).map(({path:s})=>s),await this.wrapFS(Promise.all(i.map(a=>ie.resetIndex({...this.getRepo(),filepath:a}))))}catch(i){throw this.plugin.displayError(i),i}}async discard(r){try{this.plugin.setPluginState({gitAction:3}),await this.wrapFS(ie.checkout({...this.getRepo(),filepaths:[r],force:!0}))}catch(n){throw this.plugin.displayError(n),n}}async discardAll({dir:r,status:n}){let i=[];n?r!=null?i=n.changed.filter(a=>a.path.startsWith(r)).map(a=>a.path):i=n.changed.map(a=>a.path):i=(await this.getUnstagedFiles(r)).map(({path:a})=>a);try{await this.wrapFS(ie.checkout({...this.getRepo(),filepaths:i,force:!0}))}catch(a){throw this.plugin.displayError(a),a}}getProgressText(r,n){let i=`${r} progress:`;return n.phase&&(i=`${i} ${n.phase}:`),n.loaded&&(i=`${i} ${n.loaded}`,n.total&&(i=`${i} of ${n.total}`)),i}resolveRef(r){return this.wrapFS(ie.resolveRef({...this.getRepo(),ref:r}))}async pull(){let r=this.showNotice(\"初始化拉取\");try{this.plugin.setPluginState({gitAction:2});let n=await this.resolveRef(\"HEAD\");await this.fetch();let i=await this.branchInfo();await this.checkAuthorInfo(),(await this.wrapFS(ie.merge({...this.getRepo(),ours:i.current,theirs:i.tracking,abortOnConflict:!1}))).alreadyMerged||await this.wrapFS(ie.checkout({...this.getRepo(),ref:i.current,onProgress:c=>{r!==void 0&&(r.noticeEl.innerText=this.getProgressText(\"Checkout\",c))},remote:i.remote})),r==null||r.hide();let s=await this.resolveRef(\"HEAD\"),o=await this.getFileChangesCount(n,s);return this.showNotice(\"完成拉取\",!1),o.map(c=>({path:c.path,workingDir:\"P\",index:\"P\",vaultPath:this.getRelativeVaultPath(c.path)}))}catch(n){throw r==null||r.hide(),n instanceof gl.MergeConflictError&&await this.plugin.handleConflict(n.data.filepaths.map(i=>this.getRelativeVaultPath(i))),this.plugin.displayError(n),n}}async push(){if(!await this.canPush())return 0;let r=this.showNotice(\"初始化推送\");try{this.plugin.setPluginState({gitAction:1});let n=await this.branchInfo(),i=n.tracking,a=n.current,s=(await this.getFileChangesCount(a,i)).length;return this.plugin.setPluginState({gitAction:5}),await this.wrapFS(ie.push({...this.getRepo(),onProgress:o=>{r!==void 0&&(r.noticeEl.innerText=this.getProgressText(\"Pushing\",o))}})),r==null||r.hide(),s}catch(n){throw r==null||r.hide(),this.plugin.displayError(n),n}}async getUnpushedCommits(){let r=await this.branchInfo(),n=r.tracking,i=r.current;if(n==null||i==null)return 0;let a=await this.resolveRef(i),s=await this.resolveRef(n);return(await this.getFileChangesCount(a,s)).length}async canPush(){let r=await this.branchInfo(),n=r.tracking,i=r.current,a=await this.resolveRef(i),s=await this.resolveRef(n);return a!=s}async checkRequirements(){return await this.plugin.app.vault.adapter.exists(`${this.getRepo().dir}/.git/HEAD`)?\"valid\":\"missing-repo\"}async branchInfo(){var r,n;try{let i=await ie.currentBranch(this.getRepo())||\"\",a=await ie.listBranches(this.getRepo()),s=(r=await this.getConfig(`branch.${i}.remote`))!=null?r:\"origin\",o=(n=await this.getConfig(`branch.${i}.merge`))==null?void 0:n.split(\"refs/heads\")[1],c=o?s+o:void 0;return{current:i,tracking:c,branches:a,remote:s}}catch(i){throw this.plugin.displayError(i),i}}async getCurrentRemote(){var i;let r=await ie.currentBranch(this.getRepo())||\"\";return(i=await this.getConfig(`branch.${r}.remote`))!=null?i:\"origin\"}async checkout(r,n){try{return this.wrapFS(ie.checkout({...this.getRepo(),ref:r,force:!!n,remote:n}))}catch(i){throw this.plugin.displayError(i),i}}async createBranch(r){try{await this.wrapFS(ie.branch({...this.getRepo(),ref:r,checkout:!0}))}catch(n){throw this.plugin.displayError(n),n}}async deleteBranch(r){try{await this.wrapFS(ie.deleteBranch({...this.getRepo(),ref:r}))}catch(n){throw this.plugin.displayError(n),n}}branchIsMerged(r){return Promise.resolve(!0)}async init(){try{await this.wrapFS(ie.init(this.getRepo()))}catch(r){throw this.plugin.displayError(r),r}}async clone(r,n,i){let a=this.showNotice(\"初始化克隆\");try{await this.wrapFS(ie.clone({...this.getRepo(),dir:n,url:r,depth:i,onProgress:s=>{a!==void 0&&(a.noticeEl.innerText=this.getProgressText(\"Cloning\",s))}})),a==null||a.hide()}catch(s){throw a==null||a.hide(),this.plugin.displayError(s),s}}async setConfig(r,n){try{return this.wrapFS(ie.setConfig({...this.getRepo(),path:r,value:n}))}catch(i){throw this.plugin.displayError(i),i}}async getConfig(r){try{return this.wrapFS(ie.getConfig({...this.getRepo(),path:r}))}catch(n){throw this.plugin.displayError(n),n}}async fetch(r){let n=this.showNotice(\"初始化获取\");try{let i={...this.getRepo(),onProgress:a=>{n!==void 0&&(n.noticeEl.innerText=this.getProgressText(\"Fetching\",a))},remote:r!=null?r:await this.getCurrentRemote()};await this.wrapFS(ie.fetch(i)),n==null||n.hide()}catch(i){throw this.plugin.displayError(i),n==null||n.hide(),i}}async setRemote(r,n){try{await this.wrapFS(ie.addRemote({...this.getRepo(),remote:r,url:n,force:!0}))}catch(i){throw this.plugin.displayError(i),i}}async getRemoteBranches(r){let n=[];return n.push(...await this.wrapFS(ie.listBranches({...this.getRepo(),remote:r}))),n.remove(\"HEAD\"),n=n.map(i=>`${r}/${i}`),n}async getRemotes(){return(await this.wrapFS(ie.listRemotes({...this.getRepo()}))).map(r=>r.remote)}async removeRemote(r){await this.wrapFS(ie.deleteRemote({...this.getRepo(),remote:r}))}async getRemoteUrl(r){var n;return(n=(await this.wrapFS(ie.listRemotes({...this.getRepo()}))).filter(i=>i.remote==r)[0])==null?void 0:n.url}async log(r,n=!0,i,a){let s=await this.wrapFS(ie.log({...this.getRepo(),depth:i,ref:a}));return Promise.all(s.map(async o=>{let c=o.commit.message.split(`\n\n`);return{message:c[0],author:{name:o.commit.author.name,email:o.commit.author.email},body:c.slice(1).join(`\n\n`),date:new Date(o.commit.committer.timestamp).toDateString(),diff:{changed:0,files:(await this.getFileChangesCount(o.commit.parent.first(),o.oid)).map(l=>({path:l.path,status:l.type,vaultPath:this.getRelativeVaultPath(l.path),hash:o.oid}))},hash:o.oid,refs:[]}}))}updateBasePath(r){return this.getRepo().dir=r,Promise.resolve()}async updateUpstreamBranch(r){let[n,i]=Ii(r),a=await this.branchInfo();await this.wrapFS(ie.push({...this.getRepo(),remote:n,remoteRef:i})),await this.setConfig(`branch.${a.current}.merge`,`refs/heads/${i}`)}updateGitPath(r){return Promise.resolve()}async getFileChangesCount(r,n){return this.walkDifference({walkers:[ie.TREE({ref:r}),ie.TREE({ref:n})]})}async walkDifference({walkers:r,dir:n}){return await this.wrapFS(ie.walk({...this.getRepo(),trees:r,map:async function(a,[s,o]){if(!Ug(a,n))return null;if(await(s==null?void 0:s.type())===\"tree\"||await(o==null?void 0:o.type())===\"tree\")return;let c=await(s==null?void 0:s.oid()),l=await(o==null?void 0:o.oid()),u=\"equal\";if(c!==l&&(u=\"M\"),c===void 0&&(u=\"A\"),l===void 0&&(u=\"D\"),c===void 0&&l===void 0&&(console.log(\"奇怪的事情发生了:\"),console.log(s),console.log(o)),u!==\"equal\")return{path:a,type:u}}}))}async getStagedFiles(r=\".\"){return(await this.walkDifference({walkers:[ie.TREE({ref:\"HEAD\"}),ie.STAGE()],dir:r})).map(i=>({vaultPath:this.getRelativeVaultPath(i.path),path:i.path}))}async getUnstagedFiles(r=\".\"){let n,i=window.setTimeout(()=>{n=new _a.Notice(\"这需要较长的时间:获取状态\",this.noticeLength)},2e4);try{let a=this.getRepo(),s=await this.wrapFS(ie.walk({...a,trees:[ie.WORKDIR(),ie.STAGE()],map:async function(o,[c,l]){if(!l&&c&&await ie.isIgnored({...a,filepath:o})||!Ug(o,r))return null;let[u,f]=await Promise.all([c&&c.type(),l&&l.type()]),d=[u,f].includes(\"blob\");if((u===\"tree\"||u===\"special\")&&!d)return;if(f===\"commit\")return null;if((f===\"tree\"||f===\"special\")&&!d)return;let h=f===\"blob\"?await l.oid():void 0,p;return u===\"blob\"&&f!==\"blob\"?p=\"42\":u===\"blob\"&&(p=await c.oid()),p?p!==h?{path:o,deleted:!1}:null:{path:o,deleted:!0}}}));return window.clearTimeout(i),n==null||n.hide(),s}catch(a){throw window.clearTimeout(i),n==null||n.hide(),this.plugin.displayError(a),a}}async getDiffString(r,n=!1,i){let a=this.getRelativeVaultPath(r),s=async(l,[u])=>{if(r==l){let f=await u.oid();return(await ie.readBlob({...this.getRepo(),oid:f})).blob}};if(i){let l=await wl({...this.getRepo(),filepath:r,oid:i}).then(h=>new TextDecoder().decode(h.blob)).catch(h=>{if(!(h instanceof ie.Errors.NotFoundError))throw h}),u=await ie.readCommit({...this.getRepo(),oid:i}),f=await wl({...this.getRepo(),filepath:r,oid:u.commit.parent.first()}).then(h=>new TextDecoder().decode(h.blob)).catch(h=>{if(!(h instanceof ie.Errors.NotFoundError))throw h});return Uf(a,f!=null?f:\"\",l!=null?l:\"\")}let o=(await ie.walk({...this.getRepo(),trees:[ie.STAGE()],map:s})).first(),c=new TextDecoder().decode(o);if(n){let l=await this.resolveRef(\"HEAD\").then(f=>wl({...this.getRepo(),filepath:r,oid:f})).then(f=>new TextDecoder().decode(f.blob)).catch(f=>{if(!(f instanceof ie.Errors.NotFoundError))throw f});return Uf(a,l!=null?l:\"\",c)}else{let l;return await this.app.vault.adapter.exists(a)?l=await this.app.vault.adapter.read(a):l=\"\",Uf(a,c,l)}}async getLastCommitTime(){let r=this.getRepo(),n=await this.resolveRef(\"HEAD\"),a=(await ie.readCommit({...r,oid:n})).commit.committer.timestamp;return new Date(a*1e3)}getFileStatusResult(r){let n=this.status_mapping[`${r[this.HEAD]}${r[this.WORKDIR]}${r[this.STAGE]}`];return{index:n[0]==\"?\"?\"U\":n[0],workingDir:n[1]==\"?\"?\"U\":n[1],path:r[this.FILE],vaultPath:this.getRelativeVaultPath(r[this.FILE])}}async checkAuthorInfo(){let r=await this.getConfig(\"user.name\"),n=await this.getConfig(\"user.email\");if(!r||!n)throw Error(\"Git author name and email are not set. Please set both fields in the settings.\")}showNotice(r,n=!0){if(!this.plugin.settings.disablePopups)return new _a.Notice(r,n?this.noticeLength:void 0)}};function Xj(e){let t=[e];return{next(){return Promise.resolve({done:t.length===0,value:t.pop()})},return(){return t=[],{}},[Symbol.asyncIterator](){return this}}}function Zj(e){return e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]?e[Symbol.iterator]():e.next?e:Xj(e)}async function Kj(e,t){let r=Zj(e);for(;;){let{value:n,done:i}=await r.next();if(n&&await t(n),i)break}r.return&&r.return()}async function Jj(e){let t=0,r=[];await Kj(e,a=>{r.push(a),t+=a.byteLength});let n=new Uint8Array(t),i=0;for(let a of r)n.set(a,i),i+=a.byteLength;return n}var Qj=\"https://momentjs.com/docs/#/parsing/string-format/\",eB=\"https://publish.obsidian.md/git-doc/Line+Authoring\",zf=class extends V.PluginSettingTab{constructor(r,n){super(r,n);this.plugin=n;this.lineAuthorColorSettings=new Map}get settings(){return this.plugin.settings}display(){let{containerEl:r}=this,n=this.plugin,i;n.settings.differentIntervalCommitAndPush?i=\" 提交 \":i=\" 提交并同步 \";let a=n.gitReady;r.empty(),a||(r.createEl(\"p\",{text:\"Git还没有准备好。当所有设置都正确时,您可以配置提交同步等。\"}),r.createEl(\"br\"));let s;if(a){new V.Setting(r).setName(\"自动\").setHeading(),new V.Setting(r).setName(\"用于自动提交和同步的分割计时器\").setDesc(\"允许使用一个间隔进行提交,另一个间隔进行同步。\").addToggle(u=>u.setValue(n.settings.differentIntervalCommitAndPush).onChange(async f=>{n.settings.differentIntervalCommitAndPush=f,await n.saveSettings(),n.automaticsManager.reload(\"commit\",\"push\"),this.display()})),new V.Setting(r).setName(`自动${i}间隔(分钟)`).setDesc(`${n.settings.differentIntervalCommitAndPush?\"Commit\":\"Commit and sync\"} changes every X minutes. Set to 0 (default) to disable. (See below setting for further configuration!)`).addText(u=>{u.inputEl.type=\"number\",u.setValue(String(n.settings.autoSaveInterval)),u.setPlaceholder(String(ar.autoSaveInterval)),u.onChange(async f=>{n.settings.autoSaveInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload(\"commit\")})}),s=new V.Setting(r).setName(`在停止文件编辑后自动 ${i} `).setDesc(`Requires the ${i} interval not to be 0.\n                        If turned on, do auto ${i} every ${pT(n.settings.autoSaveInterval)} after stopping file edits.\n                        This also prevents auto ${i} while editing a file. If turned off, it's independent from the last file edit.`).addToggle(u=>u.setValue(n.settings.autoBackupAfterFileChange).onChange(async f=>{n.settings.autoBackupAfterFileChange=f,this.display(),await n.saveSettings(),n.automaticsManager.reload(\"commit\")})),this.mayDisableSetting(s,n.settings.setLastSaveToLastCommit),s=new V.Setting(r).setName(`在最新提交后自动 ${i} `).setDesc(`如果启用,将最后一次自动 ${i} 时间戳设置为最新的提交时间戳。这减少了在进行手动提交时自动 ${i} 的频率。`).addToggle(u=>u.setValue(n.settings.setLastSaveToLastCommit).onChange(async f=>{n.settings.setLastSaveToLastCommit=f,await n.saveSettings(),n.automaticsManager.reload(\"commit\"),this.display()})),this.mayDisableSetting(s,n.settings.autoBackupAfterFileChange),s=new V.Setting(r).setName(\"自动推送间隔(分钟)\").setDesc(\"每X分钟推送提交。设置为0(默认)以禁用。\").addText(u=>{u.inputEl.type=\"number\",u.setValue(String(n.settings.autoPushInterval)),u.setPlaceholder(String(ar.autoPushInterval)),u.onChange(async f=>{n.settings.autoPushInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload(\"push\")})}),this.mayDisableSetting(s,!n.settings.differentIntervalCommitAndPush),new V.Setting(r).setName(\"自动拉取间隔(分钟)\").setDesc(\"每 X 分钟拉取更改。设置为 0(默认)以禁用。\").addText(u=>{u.inputEl.type=\"number\",u.setValue(String(n.settings.autoPullInterval)),u.setPlaceholder(String(ar.autoPullInterval)),u.onChange(async f=>{n.settings.autoPullInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload(\"pull\")})}),new V.Setting(r).setName(`在自动 ${i} 中指定自定义提交消息`).setDesc(\"您将收到一个弹出窗口以指定您的消息。\").addToggle(u=>u.setValue(n.settings.customMessageOnAutoBackup).onChange(async f=>{n.settings.customMessageOnAutoBackup=f,await n.saveSettings(),this.display()})),s=new V.Setting(r).setName(`自动 ${i} 的提交信息`).setDesc(\"可用占位符:{{date}}(见下文)、{{hostname}}(见下文)、{{numFiles}}(提交中更改的文件数量)和{{files}}(提交信息中的更改文件)。\").addTextArea(u=>u.setPlaceholder(\"保险库备份:{{date}}\").setValue(n.settings.autoCommitMessage).onChange(async f=>{n.settings.autoCommitMessage=f,await n.saveSettings()})),this.mayDisableSetting(s,n.settings.customMessageOnAutoBackup),new V.Setting(r).setName(\"提交信息\").setHeading(),new V.Setting(r).setName(\"手动提交时的提交信息\").setDesc(\"可用占位符:{{date}}(见下文)、{{hostname}}(见下文)、{{numFiles}}(提交中更改的文件数量)和{{files}}(提交信息中的更改文件)。\").addTextArea(u=>u.setPlaceholder(\"保险库备份:{{date}}\").setValue(n.settings.commitMessage?n.settings.commitMessage:\"\").onChange(async f=>{n.settings.commitMessage=f,await n.saveSettings()}));let l=new V.Setting(r).setName(\"{{date}} 占位符格式\").addMomentFormat(u=>u.setDefaultFormat(n.settings.commitDateFormat).setValue(n.settings.commitDateFormat).onChange(async f=>{n.settings.commitDateFormat=f,await n.saveSettings()}));l.descEl.innerHTML=`\n            Specify custom date format. E.g. \"${_m}. See <a href=\"https://momentjs.com\">Moment.js</a> for more formats.`,new V.Setting(r).setName(\"{{hostname}} 占位符替换\").setDesc(\"为每个设备指定自定义主机名。\").addText(u=>{var f;return u.setValue((f=n.localStorage.getHostname())!=null?f:\"\").onChange(d=>{n.localStorage.setHostname(d)})}),new V.Setting(r).setName(\"预览提交信息\").addButton(u=>u.setButtonText(\"预览\").onClick(async()=>{let f=await n.gitManager.formatCommitMessage(n.settings.commitMessage);new V.Notice(`${f}`)})),new V.Setting(r).setName(\"在提交内容中列出受提交影响的文件名\").addToggle(u=>u.setValue(n.settings.listChangedFilesInMessageBody).onChange(async f=>{n.settings.listChangedFilesInMessageBody=f,await n.saveSettings()})),new V.Setting(r).setName(\"拉取\").setHeading(),n.gitManager instanceof Te&&new V.Setting(r).setName(\"合并策略\").setDesc(\"决定如何将远程分支中的提交集成到本地分支中。\").addDropdown(u=>{let f={merge:\"合并\",rebase:\"变基\",reset:\"其他同步服务 (仅更新 HEAD,不触及工作目录)\"};u.addOptions(f),u.setValue(n.settings.syncMethod),u.onChange(async d=>{n.settings.syncMethod=d,await n.saveSettings()})}),new V.Setting(r).setName(\"开机时拉取\").setDesc(\"自动在 Obsidian 启动时拉取提交。\").addToggle(u=>u.setValue(n.settings.autoPullOnBoot).onChange(async f=>{n.settings.autoPullOnBoot=f,await n.saveSettings()})),new V.Setting(r).setName(\"提交并同步\").setDesc(\"使用默认设置的 提交和同步 意味着暂存所有内容 -> 提交 -> 拉取 -> 推送。理想情况下,这是一个你定期执行的单一操作,用于保持本地和远程仓库的同步。\").setHeading(),s=new V.Setting(r).setName(\"提交并同步时推送到远程仓库\").setDesc(`Most of the time you want to push after committing. Turning this off turns a commit-and-sync action into commit ${n.settings.pullBeforePush?\"and pull \":\"\"}only. It will still be called commit-and-sync.`).addToggle(u=>u.setValue(!n.settings.disablePush).onChange(async f=>{n.settings.disablePush=!f,this.display(),await n.saveSettings()})),new V.Setting(r).setName(\"提交并同步时从远程仓库拉取\").setDesc(`On commit-and-sync, pull commits as well. Turning this off turns a commit-and-sync action into commit ${n.settings.disablePush?\"\":\"and push \"}only.`).addToggle(u=>u.setValue(n.settings.pullBeforePush).onChange(async f=>{n.settings.pullBeforePush=f,this.display(),await n.saveSettings()})),n.gitManager instanceof Te&&(new V.Setting(r).setName(\"线路作者信息\").setHeading(),this.addLineAuthorInfoSettings())}new V.Setting(r).setName(\"历史视图\").setHeading(),new V.Setting(r).setName(\"显示作者\").setDesc(\"在历史视图中显示提交的作者。\").addDropdown(l=>{let u={hide:\"隐藏\",full:\"完整\",initials:\"首字母\"};l.addOptions(u),l.setValue(n.settings.authorInHistoryView),l.onChange(async f=>{n.settings.authorInHistoryView=f,await n.saveSettings(),await n.refresh()})}),new V.Setting(r).setName(\"显示日期\").setDesc(\"在历史视图中显示提交的日期。使用 {{date}} 占位符格式来显示日期。\").addToggle(l=>l.setValue(n.settings.dateInHistoryView).onChange(async u=>{n.settings.dateInHistoryView=u,await n.saveSettings(),await n.refresh()})),new V.Setting(r).setName(\"源控制视图\").setHeading(),new V.Setting(r).setName(\"自动刷新文件更改的源控制视图\").setDesc(\"在较慢的机器上,这可能会导致延迟。如果是这样,请禁用此选项。\").addToggle(l=>l.setValue(n.settings.refreshSourceControl).onChange(async u=>{n.settings.refreshSourceControl=u,await n.saveSettings()})),new V.Setting(r).setName(\"源控制视图刷新间隔\").setDesc(\"在文件更改后等待的毫秒数,然后刷新源控制视图。\").addText(l=>{l.inputEl.type=\"number\",l.setValue(String(n.settings.refreshSourceControlTimer)),l.setPlaceholder(String(ar.refreshSourceControlTimer)),l.onChange(async u=>{n.settings.refreshSourceControlTimer=Math.max(Number(u),500),await n.saveSettings(),n.setRefreshDebouncer()})}),new V.Setting(r).setName(\"杂项\").setHeading(),n.gitManager instanceof Te&&new V.Setting(r).setName(\"Diff view style\").setDesc('Set the style for the diff view. Note that the actual diff in \"Split\" mode is not generated by Git, but the editor itself instead so it may differ from the diff generated by Git. One advantage of this is that you can edit the text in that view.').addDropdown(l=>{let u={split:\"Split\",git_unified:\"Unified\"};l.addOptions(u),l.setValue(n.settings.diffStyle),l.onChange(async f=>{n.settings.diffStyle=f,await n.saveSettings()})}),new V.Setting(r).setName(\"禁用通知\").setDesc(\"禁用 Git 操作的通知以减少干扰(请参阅状态栏以获取更新)。即使您启用此设置,错误仍会作为通知显示。\").addToggle(l=>l.setValue(n.settings.disablePopups).onChange(async u=>{n.settings.disablePopups=u,this.display(),await n.saveSettings()})),n.settings.disablePopups||new V.Setting(r).setName(\"隐藏无更改的通知\").setDesc(\"当没有需要提交或推送的更改时,不显示通知。\").addToggle(l=>l.setValue(n.settings.disablePopupsForNoChanges).onChange(async u=>{n.settings.disablePopupsForNoChanges=u,await n.saveSettings()})),new V.Setting(r).setName(\"显示状态栏\").setDesc(\"Obsidian必须重启以使更改生效。\").addToggle(l=>l.setValue(n.settings.showStatusBar).onChange(async u=>{n.settings.showStatusBar=u,await n.saveSettings()})),new V.Setting(r).setName(\"显示文件菜单中的暂存/取消暂存按钮\").addToggle(l=>l.setValue(n.settings.showFileMenu).onChange(async u=>{n.settings.showFileMenu=u,await n.saveSettings()})),new V.Setting(r).setName(\"显示分支状态栏\").setDesc(\"Obsidian必须重启以使更改生效。\").addToggle(l=>l.setValue(n.settings.showBranchStatusBar).onChange(async u=>{n.settings.showBranchStatusBar=u,await n.saveSettings()})),new V.Setting(r).setName(\"显示状态栏中修改文件的数量\").addToggle(l=>l.setValue(n.settings.changedFilesInStatusBar).onChange(async u=>{n.settings.changedFilesInStatusBar=u,await n.saveSettings()})),n.gitManager instanceof an?new V.Setting(r).setName(\"身份验证/提交作者\").setHeading():new V.Setting(r).setName(\"提交作者\").setHeading(),n.gitManager instanceof an&&new V.Setting(r).setName(\"在你的 Git 服务器上的用户名。例如:你在 GitHub 上的用户名\").addText(l=>{var u;l.setValue((u=n.localStorage.getUsername())!=null?u:\"\"),l.onChange(f=>{n.localStorage.setUsername(f)})}),n.gitManager instanceof an&&new V.Setting(r).setName(\"密码/个人访问令牌\").setDesc(\"输入您的密码。您将无法再次看到它。\").addText(l=>{l.inputEl.autocapitalize=\"off\",l.inputEl.autocomplete=\"off\",l.inputEl.spellcheck=!1,l.onChange(u=>{n.localStorage.setPassword(u)})}),n.gitReady&&new V.Setting(r).setName(\"提交的作者名称\").addText(async l=>{var u;l.setValue((u=await n.gitManager.getConfig(\"user.name\"))!=null?u:\"\"),l.onChange(async f=>{await n.gitManager.setConfig(\"user.name\",f==\"\"?void 0:f)})}),n.gitReady&&new V.Setting(r).setName(\"提交作者的电子邮件\").addText(async l=>{var u;l.setValue((u=await n.gitManager.getConfig(\"user.email\"))!=null?u:\"\"),l.onChange(async f=>{await n.gitManager.setConfig(\"user.email\",f==\"\"?void 0:f)})}),new V.Setting(r).setName(\"高级\").setDesc(\"这些设置通常无需更改,但在特殊配置中可能需要。\").setHeading(),n.gitManager instanceof Te&&(new V.Setting(r).setName(\"更新子模块\").setDesc('\"提交和同步\"以及\"拉取\"处理子模块。缺失的功能:冲突文件、拉取/推送/提交文件的数量。每个子模块需要设置跟踪分支。').addToggle(l=>l.setValue(n.settings.updateSubmodules).onChange(async u=>{n.settings.updateSubmodules=u,await n.saveSettings()})),n.settings.updateSubmodules&&new V.Setting(r).setName(\"子模块递归检出/切换\").setDesc(\"每当根仓库发生检出时,递归检出子模块(如果分支存在)。\").addToggle(l=>l.setValue(n.settings.submoduleRecurseCheckout).onChange(async u=>{n.settings.submoduleRecurseCheckout=u,await n.saveSettings()}))),n.gitManager instanceof Te&&new V.Setting(r).setName(\"自定义 Git 二进制文件路径\").addText(l=>{var u;l.setValue((u=n.localStorage.getGitPath())!=null?u:\"\"),l.setPlaceholder(\"git\"),l.onChange(f=>{n.localStorage.setGitPath(f),n.gitManager.updateGitPath(f||\"git\").catch(d=>n.displayError(d))})}),n.gitManager instanceof Te&&new V.Setting(r).setName(\"额外的环境变量\").setDesc(\"使用每一行作为新环境变量,格式为 KEY=VALUE 。\").addTextArea(l=>{l.setPlaceholder(\"GIT_DIR=/path/to/git/目录\"),l.setValue(n.localStorage.getEnvVars().join(`\n`)),l.onChange(u=>{n.localStorage.setEnvVars(u.split(`\n`))})}),n.gitManager instanceof Te&&new V.Setting(r).setName(\"其他 PATH 环境变量路径\").setDesc(\"每行使用一个路径\").addTextArea(l=>{l.setValue(n.localStorage.getPATHPaths().join(`\n`)),l.onChange(u=>{n.localStorage.setPATHPaths(u.split(`\n`))})}),n.gitManager instanceof Te&&new V.Setting(r).setName(\"重新加载新的环境变量\").setDesc(\"移除之前添加的环境变量直到 Obsidian 重启才生效。\").addButton(l=>{l.setButtonText(\"重新加载\"),l.setCta(),l.onClick(async()=>{await n.gitManager.setGitInstance()})}),new V.Setting(r).setName(\"自定义基础路径(Git 仓库路径)\").setDesc(`\n            设置 Git 二进制文件应从哪个存储库执行的相对路径。主要用于设置 Git 仓库的路径,只有当 Git 仓库位于分库根目录之下时才需要。在 Windows 下使用\"\\\\\"代替\"/\"。\n            `).addText(l=>{l.setValue(n.settings.basePath),l.setPlaceholder(\"目录/带 Git 仓库的目录\"),l.onChange(async u=>{n.settings.basePath=u,await n.saveSettings(),n.gitManager.updateBasePath(u||\"\").catch(f=>n.displayError(f))})}),new V.Setting(r).setName(\"自定义 Git 目录路径(取代 .git)\").setDesc('需要重启 Obsidian 才能生效。在 Windows 上使用\"\\\\\"而不是\"/\"。').addText(l=>{l.setValue(n.settings.gitDir),l.setPlaceholder(\".git\"),l.onChange(async u=>{n.settings.gitDir=u,await n.saveSettings()})}),new V.Setting(r).setName(\"在此设备上禁用\").setDesc(\"禁用此设备上的插件。此设置不会同步。\").addToggle(l=>l.setValue(n.localStorage.getPluginDisabled()).onChange(u=>{n.localStorage.setPluginDisabled(u),u?n.unloadPlugin():n.init({fromReload:!0}).catch(f=>n.displayError(f)),new V.Notice(\"Obsidian 必须重新启动以使更改生效。\")})),new V.Setting(r).setName(\"支持\").setHeading(),new V.Setting(r).setName(\"捐赠\").setDesc(\"如果您喜欢这个插件,请考虑捐赠以支持持续开发。\").addButton(l=>{l.buttonEl.outerHTML=\"<a href='https://ko-fi.com/F1F195IQ5' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi3.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>\"});let o=r.createDiv();o.setAttr(\"align\",\"center\"),o.setAttr(\"style\",\"margin: var(--size-4-2)\");let c=o.createEl(\"button\");if(c.setText(\"复制调试信息\"),c.onclick=async()=>{await window.navigator.clipboard.writeText(JSON.stringify({settings:this.plugin.settings,pluginVersion:this.plugin.manifest.version},null,4)),new V.Notice(\"调试信息已复制到剪贴板。可能包含敏感信息！\")},V.Platform.isDesktopApp){let l=r.createDiv();l.setAttr(\"align\",\"center\"),l.setText(`调试和日志记录:\n使用以下命令打开控制台,即可查看本插件和其他所有插件的日志`);let u=r.createDiv();u.setAttr(\"align\",\"center\"),u.addClass(\"obsidian-git-shortcuts\"),V.Platform.isMacOS===!0?u.createEl(\"kbd\",{text:\"CMD (\\u2318) + OPTION (\\u2325) + I\"}):u.createEl(\"kbd\",{text:\"CTRL + SHIFT + I\"})}}mayDisableSetting(r,n){n&&(r.setDisabled(n),r.setClass(\"obsidian-git-disabled\"))}configureLineAuthorShowStatus(r){this.settings.lineAuthor.show=r,this.plugin.saveSettings(),r?this.plugin.lineAuthoringFeature.activateFeature():this.plugin.lineAuthoringFeature.deactivateFeature()}async lineAuthorSettingHandler(r,n){this.settings.lineAuthor[r]=n,await this.plugin.saveSettings(),this.plugin.lineAuthoringFeature.refreshLineAuthorViews()}beforeSaveSettings(){let r=this.settings.lineAuthor;r.authorDisplay!==\"hide\"&&(r.lastShownAuthorDisplay=r.authorDisplay),r.dateTimeFormatOptions!==\"hide\"&&(r.lastShownDateTimeFormatOptions=r.dateTimeFormatOptions)}addLineAuthorInfoSettings(){let r=new V.Setting(this.containerEl).setName(\"显示每行旁边的提交作者信息\");if(this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform()||r.setDesc(\"目前仅在桌面版可用。\").setDisabled(!0),r.descEl.innerHTML=`\n            <a href=\"${eB}\">Feature guide and quick examples</a></br>\n            The commit hash, author name and authoring date can all be individually toggled.</br>Hide everything, to only show the age-colored sidebar.`,r.addToggle(n=>n.setValue(this.settings.lineAuthor.show).onChange(i=>{this.configureLineAuthorShowStatus(i),this.display()})),this.settings.lineAuthor.show){let n=new V.Setting(this.containerEl).setName(\"跟踪移动并跨文件和提交进行复制\").setDesc(\"\").addDropdown(a=>{a.addOptions({inactive:\"不跟踪 (默认)\",\"same-commit\":\"仅在当前提交中跟踪\",\"all-commits\":\"在所有提交中跟踪 (可能较慢)\"}),a.setValue(this.settings.lineAuthor.followMovement),a.onChange(s=>this.lineAuthorSettingHandler(\"followMovement\",s))});if(n.descEl.innerHTML=`\n                By default (deactivated), each line only shows the newest commit where it was changed.\n                <br/>\n                With <i>same commit</i>, cut-copy-paste-ing of text is followed within the same commit and the original commit of authoring will be shown.\n                <br/>\n                With <i>all commits</i>, cut-copy-paste-ing text inbetween multiple commits will be detected.\n                <br/>\n                It uses <a href=\"https://git-scm.com/docs/git-blame\">git-blame</a> and\n                for matches (at least ${zu} characters) within the same (or all) commit(s), <em>the originating</em> commit's information is shown.`,new V.Setting(this.containerEl).setName(\"显示提交哈希值\").addToggle(a=>{a.setValue(this.settings.lineAuthor.showCommitHash),a.onChange(s=>this.lineAuthorSettingHandler(\"showCommitHash\",s))}),new V.Setting(this.containerEl).setName(\"显示作者姓名\").setDesc(\"作者的显示方式(如果有)\").addDropdown(a=>{let s={hide:\"隐藏\",initials:\"首字母 (默认)\",\"first name\":\"名\",\"last name\":\"姓\",full:\"全名\"};a.addOptions(s),a.setValue(this.settings.lineAuthor.authorDisplay),a.onChange(async o=>this.lineAuthorSettingHandler(\"authorDisplay\",o))}),new V.Setting(this.containerEl).setName(\"显示创建日期\").setDesc(\"如果以及如何显示该行的创作日期和时间\").addDropdown(a=>{let s={hide:\"隐藏\",date:\"日期 (默认)\",datetime:\"日期和时间\",\"natural language\":\"自然语言\",custom:\"自定义\"};a.addOptions(s),a.setValue(this.settings.lineAuthor.dateTimeFormatOptions),a.onChange(async o=>{await this.lineAuthorSettingHandler(\"dateTimeFormatOptions\",o),this.display()})}),this.settings.lineAuthor.dateTimeFormatOptions===\"custom\"){let a=new V.Setting(this.containerEl);a.setName(\"自定义作者日期格式\").addText(s=>{s.setValue(this.settings.lineAuthor.dateTimeFormatCustomString),s.setPlaceholder(\"YYYY-MM-DD HH:mm\"),s.onChange(async o=>{await this.lineAuthorSettingHandler(\"dateTimeFormatCustomString\",o),a.descEl.innerHTML=this.previewCustomDateTimeDescriptionHtml(o)})}),a.descEl.innerHTML=this.previewCustomDateTimeDescriptionHtml(this.settings.lineAuthor.dateTimeFormatCustomString)}new V.Setting(this.containerEl).setName(\"创建日期显示时区:\").addDropdown(a=>{let s={\"viewer-local\":\"我的本地 (默认)\",\"author-local\":\"作者的本地\",utc0000:\"UTC+0000/Z\"};a.addOptions(s),a.setValue(this.settings.lineAuthor.dateTimeTimezone),a.onChange(async o=>this.lineAuthorSettingHandler(\"dateTimeTimezone\",o))}).descEl.innerHTML=`\n                    显示创作日期的时区。\n                    可以是您的本地时区(默认),\n                    提交时作者的时区,或者\n                    <a href=\"https://en.wikipedia.org/wiki/UTC%C2%B100:00\">UTC\\xB100:00</a>.\n            `;let i=new V.Setting(this.containerEl).setName(\"着色最旧时间\");i.descEl.innerHTML=this.previewOldestAgeDescriptionHtml(this.settings.lineAuthor.coloringMaxAge)[0],i.addText(a=>{a.setPlaceholder(\"1y\"),a.setValue(this.settings.lineAuthor.coloringMaxAge),a.onChange(async s=>{let[o,c]=this.previewOldestAgeDescriptionHtml(s);i.descEl.innerHTML=o,c&&(await this.lineAuthorSettingHandler(\"coloringMaxAge\",s),this.refreshColorSettingsName(\"oldest\"))})}),this.createColorSetting(\"newest\"),this.createColorSetting(\"oldest\"),new V.Setting(this.containerEl).setName(\"文本颜色\").addText(a=>{a.setValue(this.settings.lineAuthor.textColorCss),a.onChange(async s=>{await this.lineAuthorSettingHandler(\"textColorCss\",s)})}).descEl.innerHTML=`\n                    垂直线文本的 CSS 颜色.<br/>\n                    \n                    强烈推荐使用\n                    <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties\">\n                    CSS 变量</a>\n                    由主题定义\n                    (e.g. <pre style=\"display:inline\">var(--text-muted)</pre> 或\n                    <pre style=\"display:inline\">var(--text-on-accent)</pre>,\n                    因为它们会自动适应主题变化.<br/>\n\n                    参见: <a href=\"https://github.com/obsidian-community/obsidian-theme-template/blob/main/obsidian.css\">\n                    Obsidian 可用的 CSS 变量列表\n                    <a/>\n                `,new V.Setting(this.containerEl).setName(\"忽略更改中的空格和换行符\").addToggle(a=>{a.setValue(this.settings.lineAuthor.ignoreWhitespace),a.onChange(s=>this.lineAuthorSettingHandler(\"ignoreWhitespace\",s))}).descEl.innerHTML=`\n                    空格和换行符默认被解释为\n                    文档的一部分并且在更改中被识别(因此不会被忽略)。\n                    这使得当添加新行时,最后一行仍然显示为“已更改”,\n                    即使之前的最后一行文本相同。\n                    <br>\n                    如果您不关心纯空白的更改\n                    (例如列表嵌套/引用缩进的变化),\n                    那么启用此功能将提供更有意义的更改检测。\n                `}}createColorSetting(r){let n=new V.Setting(this.containerEl).setName(\"\").addText(i=>{let a=i0(r,this.settings.lineAuthor),s=i0(r,ar.lineAuthor);i.setPlaceholder(Gg(s)),i.setValue(Gg(a)),i.onChange(async o=>{let c=lT(o);if(c!==void 0){let l=r===\"newest\"?\"colorNew\":\"colorOld\";await this.lineAuthorSettingHandler(l,c)}this.refreshColorSettingsDesc(r,c)})});this.lineAuthorColorSettings.set(r,n),this.refreshColorSettingsName(r),this.refreshColorSettingsDesc(r,i0(r,this.settings.lineAuthor))}refreshColorSettingsName(r){let n=this.lineAuthorColorSettings.get(r);if(n){let i=r===\"oldest\"?`最旧 (${this.settings.lineAuthor.coloringMaxAge} 或更旧)`:\"最新\";n.nameEl.innerText=`${i} 提交的颜色`}}refreshColorSettingsDesc(r,n){let i=this.lineAuthorColorSettings.get(r);i&&(i.descEl.innerHTML=this.colorSettingPreviewDescHtml(r,this.settings.lineAuthor,n!==void 0))}colorSettingPreviewDescHtml(r,n,i){let a=i?a0(r,n):\"rgba(127,127,127,0.3)\",s=V.moment.unix(V.moment.now()/1e3).format(\"YYYY-MM-DD\"),o=i?`abcdef 作者姓名 ${s}`:\"invalid color\";return`支持 'rgb(r,g,b)', 'hsl(h,s,l)', hex (#) 和\n            颜色命名 (例如: 'black', 'purple'). 颜色预览: ${`<div\n            class=\"line-author-settings-preview\"\n            style=\"background-color: ${a}; width: 30ch;\"\n            >${o}</div>`}`}previewCustomDateTimeDescriptionHtml(r){let n=(0,V.moment)().format(r);return`<a href=\"${Qj}\">Format string</a> to display the authoring date.</br>Currently: ${n}`}previewOldestAgeDescriptionHtml(r){let n=Vf(r);return[`The oldest age in the line author coloring. Everything older will have the same color.\n            </br>Smallest valid age is \"1d\". Currently: ${n!==void 0?`${n.asDays()} days`:\"invalid!\"}`,n]}};function i0(e,t){return e===\"oldest\"?t.colorOld:t.colorNew}function Vf(e){let t=V.moment.duration(\"P\"+e.toUpperCase());return t.isValid()&&t.asDays()&&t.asDays()>=1?t:void 0}function PT(e,t,r){if(!(e===void 0||t===void 0||r===void 0))return`head${e}-obj${t}-path${r}`}var RT=Wf.Annotation.define();function MT(e,t,r){return r.update({annotations:RT.of({key:e,la:t,lineOffsetsFromUnsavedChanges:new Map})})}function tB(e){return e.annotation(RT)}var qs=Wf.StateField.define({create:e=>{},update:(e,t)=>{var r;return(r=tB(t))!=null?r:rB(t,e)},compare:(e,t)=>(e==null?void 0:e.key)===(t==null?void 0:t.key)});function qf(e){var a;let t=CT.sha256.create();if(!e)return t;let{la:r,key:n,lineOffsetsFromUnsavedChanges:i}=e;t.update(r===\"untracked\"?\"t\":\"f\"),t.update(n);for(let[s,o]of(a=i.entries())!=null?a:[])t.update([s,o]);return t}var Dr={get:void 0,save:void 0};function OT(e,t){Dr.get=e,Dr.save=t}function Yf(e){var t,r;return(r=(t=Vf(e.coloringMaxAge))==null?void 0:t.asDays())!=null?r:Vf(ar.lineAuthor.coloringMaxAge).asDays()}function rB(e,t){if(t)return e.changes.empty||e.changes.iterChanges((r,n,i,a)=>{var p;let s=e.startState.doc,{newDoc:o}=e,c=s.lineAt(r).number,l=s.lineAt(n).number,u=o.lineAt(i).number,f=o.lineAt(a).number,d=l-c+1,h=f-u+1;for(let m=u;m<=f;m++){let v=(p=t.lineOffsetsFromUnsavedChanges.get(m))!=null?p:0,y=f===m,b=h-d;y&&(v+=b),t.lineOffsetsFromUnsavedChanges.set(m,v)}}),t}var s0=class{constructor(t){this.state=t;this.subscribeMe()}notifyLineAuthoring(t,r){if(this.view===void 0){console.warn(`Git: View is not defined for editor cache key. Unforeseen situation. id: ${t}`);return}let n=this.view.state,i=MT(t,r,n);this.view.dispatch(i)}updateToNewState(t){let r=this.lastSeenPath&&this.filepath!=this.lastSeenPath;return this.state=t,r&&(this.unsubscribeMe(this.lastSeenPath),this.subscribeMe()),this}removeIfStale(){this.view.destroyed&&this.unsubscribeMe(this.lastSeenPath)}subscribeMe(){this.filepath!==void 0&&(Ws.ifFilepathDefinedTransformSubscribers(this.filepath,t=>t.add(this)),this.lastSeenPath=this.filepath)}unsubscribeMe(t){Ws.ifFilepathDefinedTransformSubscribers(t,r=>r.delete(this))}get filepath(){var t,r;return(r=(t=this.state.field(Xf.editorInfoField))==null?void 0:t.file)==null?void 0:r.path}get view(){return this.state.field(Xf.editorEditorField)}},FT=IT.StateField.define({create:e=>new s0(e),update:(e,t)=>e.updateToNewState(t.state),compare:(e,t)=>e===t});g();function $T(){Ys=void 0,o0=[],Zf=0,Jf.clear(),Qf.clear(),Xs.clear()}var Ys,Kf=()=>Ys;function LT(e,t){var i;let r=t.length;if(r<((i=Ys==null?void 0:Ys.length)!=null?i:0))return;Ys={gutter:e,length:r,text:t};let n=Dr.get();r!==n.gutterSpacingFallbackLength&&(n.gutterSpacingFallbackLength=r,Dr.save(n))}var o0=[],nB=15,Zf=0;function DT(e){o0[Zf]=e,Zf=(Zf+1)%nB}function NT(){return uT(o0)}var Jf=new Map,Qf=new Map,Xs=new Set;g();var KT=require(\"@codemirror/state\"),JT=require(\"@codemirror/view\");g();var f0=require(\"@codemirror/view\"),qT=ze(Xg()),rd=require(\"obsidian\");g();g();var ed={x:-10,y:-10};function jT(){ed.x===-10&&window.addEventListener(\"mousedown\",e=>{ed.x=e.clientX,ed.y=e.clientY})}function BT(){for(let e of Xs)if(iB(e,ed))return e}function iB(e,t){let{x:r,y:n,width:i,height:a}=e.getBoundingClientRect();return r<=t.x&&t.x<=r+i&&n<=t.y&&t.y<=n+a}g();var Yl={};var HT=\"data-commit\";function UT(e,t,r){if(t.hasFocus())return;let n=BT();if(!n)return;let i=sB(n);i&&(!i.isZeroCommit&&!i.isWaitingGutter&&aB(i,e),l0(\"showCommitHash\",e),l0(\"authorDisplay\",e),l0(\"dateTimeFormatOptions\",e))}function aB(e,t){t.addItem(r=>r.setTitle(\"复制提交哈希\").setIcon(\"copy\").setSection(\"obs-git-line-author-copy\").onClick(n=>navigator.clipboard.writeText(e.hash)))}function l0(e,t){var c,l;let r,n,i=Yl.plugin.settings.lineAuthor,a=i[e],s=typeof a==\"boolean\"?a:a!==\"hide\",o=ar.lineAuthor[e];if(e===\"showCommitHash\")r=\"Show commit hash\",n=a;else if(e===\"authorDisplay\"){let u=(c=i.lastShownAuthorDisplay)!=null?c:o;r=\"Show author \"+(s?a:u),n=s?\"hide\":u}else if(e===\"dateTimeFormatOptions\"){let u=(l=i.lastShownDateTimeFormatOptions)!=null?l:o;r=\"Show \"+(s?a:u),r+=r.contains(\"date\")?\"\":\" date\",n=s?\"hide\":u}else Oi(e);t.addItem(u=>u.setTitle(r).setSection(\"obs-git-line-author-configure\").setChecked(s).onClick(f=>{var d,h;return(h=(d=Yl.plugin)==null?void 0:d.settingsTab)==null?void 0:h.lineAuthorSettingHandler(e,n)}))}function GT(e,t,r){r.setAttr(HT,JSON.stringify({hash:e.hash,isZeroCommit:e.isZeroCommit,isWaitingGutter:t}))}function sB(e){let t=e.getAttr(HT);return t?JSON.parse(t):void 0}g();function a0(e,t){return e===\"oldest\"?td(0,!1,t).color:td(void 0,!0,t).color}function td(e,t,r){let n=Yf(r),i=Date.now()/1e3,a=e!=null?e:0,o=(t?0:i-a)/60/60/24,c=Math.pow(Math.clamp(o/n,0,1),1/2.3),l=oB(),u=r.colorNew,f=r.colorOld,d=l?.4:1,h=c0(u.r,f.r,c)*d,p=c0(u.g,f.g,c)*d,m=c0(u.b,f.b,c)*d;return{color:`rgba(${h},${p},${m},${l?.75:.25})`,daysSinceCommit:o}}function c0(e,t,r){return e+(t-e)*r}function oB(){var e;return((e=window.app)==null?void 0:e.getTheme())===\"obsidian\"}function zT(e){document.body.style.setProperty(\"--obs-git-gutter-text\",e.textColorCss)}g();function VT(e,t,r){let n;for(let i=t;i<=r;i++){let a=e.hashPerLine[i],s=e.commits.get(a);(!n||s.isZeroCommit||lB(s,n))&&(n=s)}return n}function lB(e,t){var i,a,s,o;let r=(a=(i=e.author)==null?void 0:i.epochSeconds)!=null?a:0,n=(o=(s=t.author)==null?void 0:s.epochSeconds)!=null?o:0;return r>n}var WT=\"-\",cB=\"+\",uB=3,fB=\"*\",dB=/\\S/g,hB=\"%\",Zs=class e extends f0.GutterMarker{constructor(r){super();this.text=r}eq(r){return r instanceof e&&this.text===r.text}toDOM(){return document.createTextNode(this.text)}destroy(r){document.body.contains(r)||r.remove()}},u0=class extends f0.GutterMarker{constructor(r,n,i,a,s,o){super();this.lineAuthoring=r;this.startLine=n;this.endLine=i;this.key=a;this.settings=s;this.options=o;this.point=!1;this.elementClass=\"obs-git-blame-gutter\"}eq(r){return this.key===(r==null?void 0:r.key)&&this.startLine===(r==null?void 0:r.startLine)&&this.endLine===(r==null?void 0:r.endLine)&&(this==null?void 0:this.options)===(r==null?void 0:r.options)}toDOM(){var r;return this.precomputedDomProvider=(r=this.precomputedDomProvider)!=null?r:this.computeDom(),this.precomputedDomProvider()}destroy(r){document.body.contains(r)||(r.remove(),Xs.delete(r))}computeDom(){let r=VT(this.lineAuthoring,this.startLine,this.endLine),n=r.isZeroCommit?\"\":this.renderNonZeroCommit(r);return!r.isZeroCommit&&this.options!==\"waiting-for-result\"?LT(this,n):n=this.adaptTextForFakeCommit(r,n,this.options),this.createHtmlNode(r,n,this.options===\"waiting-for-result\")}createHtmlNode(r,n,i){var l;let a=window.createDiv();a.innerText=n;let{color:s,daysSinceCommit:o}=td((l=r==null?void 0:r.author)==null?void 0:l.epochSeconds,r==null?void 0:r.isZeroCommit,this.settings);a.style.backgroundColor=s,GT(r,i,a);function c(){let u=a.cloneNode(!0);return Xs.add(u),i||DT(o),u}return c}renderNonZeroCommit(r){let n=this.settings.showCommitHash?this.renderHash(r):\"\",i=this.settings.authorDisplay===\"hide\"?\"\":`${this.renderAuthorName(r,this.settings.authorDisplay)}`,a=this.settings.dateTimeFormatOptions===\"hide\"?\"\":`${this.renderAuthoringDate(r,this.settings.dateTimeFormatOptions,this.settings.dateTimeFormatCustomString,this.settings.dateTimeTimezone)}`;return[n,i,a].filter(o=>o.length>=1).join(\" \")}renderHash(r){return r.hash.substring(0,6)}renderAuthorName(r,n){var o,c,l,u;let i=(c=(o=r==null?void 0:r.author)==null?void 0:o.name)!=null?c:\"\",a=i.split(\" \").filter(f=>f.length>=1),s;switch(n){case\"initials\":s=a.map(f=>f[0].toUpperCase()).join(\"\");break;case\"first name\":s=(l=a.first())!=null?l:WT;break;case\"last name\":s=(u=a.last())!=null?u:WT;break;case\"full\":s=i;break;default:return Oi(n)}return fT(r==null?void 0:r.author,r==null?void 0:r.committer)||(s=s+fB),s}renderAuthoringDate(r,n,i,a){var l;let s=\"?\";if(((l=r==null?void 0:r.author)==null?void 0:l.epochSeconds)===void 0)return s;let o;switch(n){case\"date\":o=Gu;break;case\"datetime\":o=bm;break;case\"custom\":o=i;break;case\"natural language\":o=u=>{let f=u.diff((0,rd.moment)());return rd.moment.duration(f).humanize(!0)};break;default:return Oi(n)}let c=rd.moment.unix(r.author.epochSeconds);switch(a){case\"viewer-local\":break;case\"author-local\":c=c.utcOffset(r.author.tz),typeof o==\"string\"&&(o+=\" Z\");break;case\"utc0000\":c=c.utc(),typeof o==\"string\"&&(o+=\"[Z]\");break;default:return Oi(a)}return typeof o==\"string\"?c.format(o):o(c)}adaptTextForFakeCommit(r,n,i){var c,l,u,f;let a=(l=(c=Kf())==null?void 0:c.text)!=null?l:n,s=i!==\"waiting-for-result\"&&r.isZeroCommit?cB:hB;n=a.replace(dB,s);let o=(f=(u=Dr.get())==null?void 0:u.gutterSpacingFallbackLength)!=null?f:n.length;if(n=dT(n,o,s),i!==\"waiting-for-result\"&&r.isZeroCommit){let d=Math.min(o,uB);n=hT(n,o-d)}return n}};function xa(e,t,r,n,i,a){let s=qT.sha256.create();s.update(Object.values(i).join(\",\")),s.update(`s${t}-e${r}-k${n}-o${a}`);let o=s.hex(),c=Jf.get(o);if(c)return c;let l=new u0(e,t,r,n,i,a);return Jf.set(o,l),l}g();var YT=require(\"obsidian\");function d0(){var t,r;let e=(r=(t=Dr.get())==null?void 0:t.gutterSpacingFallbackLength)!=null?r:ar.lineAuthor.gutterSpacingFallbackLength;return new Zs(Array(e).fill(\"-\").join(\"\"))}function h0(e){let{lineAuthoring:t,ageForInitialRender:r}=pB(e);return xa(t,1,1,\"initialGutter\"+r,e,\"waiting-for-result\")}function pB(e){var a;let t=(a=NT())!=null?a:Yf(e)*.25,r=(0,YT.moment)().add(-t,\"days\"),n={name:\"\",epochSeconds:cT(r),tz:\"+0000\"},i={hash:\"waiting-for-result\",author:n,committer:n,isZeroCommit:!1};return{lineAuthoring:{hashPerLine:[void 0,\"waiting-for-result\"],commits:new Map([[\"waiting-for-result\",i]])},ageForInitialRender:t}}g();function XT(e,t){return xa({hashPerLine:[void 0,\"000000\"],commits:new Map([[\"000000\",wT]])},1,1,e,t)}var p0=new Zs(\"\"),QT=(0,JT.gutter)({class:\"line-author-gutter-container\",markers(e){let t=e.state.field(qs,!1);return mB(e,t)},lineMarkerChange(e){let t=qf(e.state.field(qs));return qf(e.startState.field(qs))!==t},renderEmptyElements:!0,initialSpacer:e=>(ZT(e),d0()),updateSpacer:(e,t)=>{var r,n;return ZT(t.view),(n=(r=Kf())==null?void 0:r.gutter)!=null?n:d0()}});function mB(e,t){let r=qf(t),n=e.state.doc,i=new Map;for(let u=1;u<=n.lines;u++){let f=n.line(u).from,d=e.lineBlockAt(f).to;i.set(u,[f,d]),r.update([f,d,0])}let a=Dr.get();r.update(\"s\"+Object.values(Dr).join(\",\"));let s=r.hex(),o=Qf.get(s);if(o)return o;let{result:c,allowCache:l}=gB(n,i,a,t);return l&&Qf.set(s,c),c}function gB(e,t,r,n){let i=!0,a=e.lines,s=[];function o(f,d,h){return s.push(h.range(f,d))}let c=vB(a,n),l=e.length===0,u=e.iterLines(a,a+1).next().value===\"\";for(let f=1;f<=a;f++){let[d,h]=t.get(f),p=e.lineAt(h).number;if(l){o(d,h,p0);continue}if(f===a&&u){o(d,h,p0);continue}if(n===void 0){o(d,h,h0(r)),i=!1;continue}let{key:m,la:v}=n;if(v===\"untracked\"){o(d,h,XT(v,r));continue}let y=v.hashPerLine.length-1,b=c[f],x=c[p];if(x&&x>y&&o(d,h,p0),b!==void 0&&zg(1,b,y)&&x!==void 0&&zg(1,x,y)){o(d,h,xa(v,b,x,m,r));continue}if(y<1){o(d,h,h0(r)),i=!1;continue}let E=Math.clamp(b!=null?b:f,1,y),_=Math.clamp(x!=null?x:p,1,y);o(d,h,xa(v,E,_,m+\"computing\",r,\"waiting-for-result\"))}return{result:KT.RangeSet.of(s,!0),allowCache:i}}function vB(e,t){if(!(t!=null&&t.lineOffsetsFromUnsavedChanges))return Array.from(new Array(e+1),i=>i);let r=[void 0],n=0;for(let i=1;i<=e;i++){let a=t.lineOffsetsFromUnsavedChanges.get(i);n+=a!=null?a:0,r[i]=a===void 0?i-n:void 0}return r}function ZT(e){e.dom.querySelectorAll(\".cm-gutters\").forEach(r=>{r!=null&&r.style&&(r.style.marginLeft||(r.style.marginLeft=\"unset\"))})}var nd=class{constructor(t){this.plugin=t;this.lineAuthorings=new Map}async trackChanged(t){return this.trackChangedHelper(t).catch(r=>(console.warn(\"Git: Error in trackChanged.\"+r),Promise.reject(r)))}async trackChangedHelper(t){if(t){if(t.path===void 0){console.warn(\"Git: Attempted to track change of undefined filepath. Unforeseen situation.\");return}return this.computeLineAuthorInfo(t.path)}}destroy(){this.lineAuthorings.clear(),Ws.clear(),$T()}async computeLineAuthorInfo(t){let r=this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform().gitManager,n=await r.submoduleAwareHeadRevisonInContainingDirectory(t),i=await r.hashObject(t),a=PT(n,i,t);if(a!==void 0){if(!this.lineAuthorings.has(a)){let s=await r.blame(t,this.plugin.settings.lineAuthor.followMovement,this.plugin.settings.lineAuthor.ignoreWhitespace);this.lineAuthorings.set(a,s)}this.notifyComputationResultToSubscribers(t,a)}}notifyComputationResultToSubscribers(t,r){Ws.ifFilepathDefinedTransformSubscribers(t,n=>n.forEach(i=>i.notifyLineAuthoring(r,this.lineAuthorings.get(r))))}},tC=eC.Prec.high([FT,qs,QT]);var id=class{constructor(t){this.plg=t;this.codeMirrorExtensions=[];this.handleWorkspaceLeaf=t=>{if(!this.lineAuthorInfoProvider){console.warn(\"Git: undefined lineAuthorInfoProvider. Unexpected situation.\");return}let r=t==null?void 0:t.view;!(r instanceof Sa.MarkdownView)||r.file==null||(r==null?void 0:r.allowNoFile)===!0||this.lineAuthorInfoProvider.trackChanged(r.file).catch(console.error)}}onLoadPlugin(){this.plg.registerEditorExtension(this.codeMirrorExtensions),OT(()=>this.plg.settings.lineAuthor,t=>{this.plg.settings.lineAuthor=t,this.plg.saveSettings()})}conditionallyActivateBySettings(){this.plg.settings.lineAuthor.show&&this.activateFeature()}activateFeature(){try{if(!this.isAvailableOnCurrentPlatform().available)return;zT(this.plg.settings.lineAuthor),this.lineAuthorInfoProvider=new nd(this.plg),this.createEventHandlers(),this.activateCodeMirrorExtensions(),console.log(this.plg.manifest.name+\": 启用行作者功能。\")}catch(t){console.warn(\"Git: Error while loading line authoring feature.\",t),this.deactivateFeature()}}deactivateFeature(){var t;this.destroyEventHandlers(),this.deactivateCodeMirrorExtensions(),(t=this.lineAuthorInfoProvider)==null||t.destroy(),this.lineAuthorInfoProvider=void 0,console.log(this.plg.manifest.name+\": 禁用行作者功能。\")}isAvailableOnCurrentPlatform(){return{available:this.plg.useSimpleGit&&Sa.Platform.isDesktopApp,gitManager:this.plg.gitManager instanceof Te?this.plg.gitManager:void 0}}refreshLineAuthorViews(){this.plg.settings.lineAuthor.show&&(this.deactivateFeature(),this.activateFeature())}activateCodeMirrorExtensions(){this.codeMirrorExtensions.push(tC),this.plg.app.workspace.updateOptions(),this.plg.app.workspace.iterateAllLeaves(this.handleWorkspaceLeaf)}deactivateCodeMirrorExtensions(){for(let t of this.codeMirrorExtensions)this.codeMirrorExtensions.remove(t);this.plg.app.workspace.updateOptions()}createEventHandlers(){this.gutterContextMenuEvent=this.createGutterContextMenuHandler(),this.fileOpenEvent=this.createFileOpenEvent(),this.workspaceLeafChangeEvent=this.createWorkspaceLeafChangeEvent(),this.fileModificationEvent=this.createVaultFileModificationHandler(),this.refreshOnCssChangeEvent=this.createCssRefreshHandler(),this.fileRenameEvent=this.createFileRenameEvent(),jT(),this.plg.registerEvent(this.gutterContextMenuEvent),this.plg.registerEvent(this.refreshOnCssChangeEvent),this.plg.registerEvent(this.fileOpenEvent),this.plg.registerEvent(this.workspaceLeafChangeEvent),this.plg.registerEvent(this.fileModificationEvent),this.plg.registerEvent(this.fileRenameEvent)}destroyEventHandlers(){this.plg.app.workspace.offref(this.refreshOnCssChangeEvent),this.plg.app.workspace.offref(this.fileOpenEvent),this.plg.app.workspace.offref(this.workspaceLeafChangeEvent),this.plg.app.workspace.offref(this.refreshOnCssChangeEvent),this.plg.app.vault.offref(this.fileRenameEvent),this.plg.app.workspace.offref(this.gutterContextMenuEvent)}createFileOpenEvent(){return this.plg.app.workspace.on(\"file-open\",t=>{var r;return void((r=this.lineAuthorInfoProvider)==null?void 0:r.trackChanged(t).catch(console.error))})}createWorkspaceLeafChangeEvent(){return this.plg.app.workspace.on(\"active-leaf-change\",this.handleWorkspaceLeaf)}createFileRenameEvent(){return this.plg.app.vault.on(\"rename\",(t,r)=>{var n;return t instanceof Sa.TFile&&((n=this.lineAuthorInfoProvider)==null?void 0:n.trackChanged(t))})}createVaultFileModificationHandler(){return this.plg.app.vault.on(\"modify\",t=>{var r;return t instanceof Sa.TFile&&((r=this.lineAuthorInfoProvider)==null?void 0:r.trackChanged(t))})}createCssRefreshHandler(){return this.plg.app.workspace.on(\"css-change\",()=>this.refreshLineAuthorViews())}createGutterContextMenuHandler(){return this.plg.app.workspace.on(\"editor-menu\",UT)}};g();var ad=class{constructor(t){this.plugin=t;this.tasks=[]}addTask(t,r){this.tasks.push({task:t,onFinished:r!=null?r:()=>{}}),this.tasks.length===1&&this.handleTask()}handleTask(){if(this.tasks.length>0){let t=this.tasks[0];t.task().then(r=>{t.onFinished(r),this.tasks.shift(),this.handleTask()},r=>{this.plugin.displayError(r),t.onFinished(void 0),this.tasks.shift(),this.handleTask()})}}clear(){this.tasks=[]}};g();var Nr=require(\"obsidian\");var sd=class{constructor(t,r){this.statusBarEl=t;this.plugin=r;this.messages=[];this.base=\"obsidian-git-statusbar-\";this.statusBarEl.setAttribute(\"data-tooltip-position\",\"top\"),r.registerEvent(r.app.workspace.on(\"obsidian-git:refreshed\",()=>{this.refreshCommitTimestamp().catch(console.error)}))}displayMessage(t,r){this.messages.push({message:`Git: ${t.slice(0,100)}`,timeout:r}),this.display()}display(){this.messages.length>0&&!this.currentMessage?(this.currentMessage=this.messages.shift(),this.statusBarEl.addClass(this.base+\"message\"),this.statusBarEl.ariaLabel=\"\",this.statusBarEl.setText(this.currentMessage.message),this.lastMessageTimestamp=Date.now()):this.currentMessage?Date.now()-this.lastMessageTimestamp>=this.currentMessage.timeout&&(this.currentMessage=null,this.lastMessageTimestamp=null):this.displayState()}displayState(){switch((this.statusBarEl.getText().length>3||!this.statusBarEl.hasChildNodes())&&(this.statusBarEl.empty(),this.conflictEl=this.statusBarEl.createDiv(),this.conflictEl.setAttribute(\"data-tooltip-position\",\"top\"),this.conflictEl.style.float=\"left\",this.iconEl=this.statusBarEl.createDiv(),this.iconEl.style.float=\"left\",this.textEl=this.statusBarEl.createDiv(),this.textEl.style.float=\"right\",this.textEl.style.marginLeft=\"5px\"),this.plugin.localStorage.getConflict()?((0,Nr.setIcon)(this.conflictEl,\"alert-circle\"),this.conflictEl.ariaLabel=\"您有合并冲突。请解决冲突后再提交。\",this.conflictEl.style.marginRight=\"5px\",this.conflictEl.addClass(this.base+\"conflict\")):(this.conflictEl.empty(),this.conflictEl.style.marginRight=\"\"),this.plugin.state.gitAction){case 0:this.displayFromNow();break;case 1:this.statusBarEl.ariaLabel=\"正在检查仓库状态...\",(0,Nr.setIcon)(this.iconEl,\"refresh-cw\"),this.statusBarEl.addClass(this.base+\"status\");break;case 3:this.statusBarEl.ariaLabel=\"正在添加文件...\",(0,Nr.setIcon)(this.iconEl,\"archive\"),this.statusBarEl.addClass(this.base+\"add\");break;case 4:this.statusBarEl.ariaLabel=\"正在提交更改...\",(0,Nr.setIcon)(this.iconEl,\"git-commit\"),this.statusBarEl.addClass(this.base+\"commit\");break;case 5:this.statusBarEl.ariaLabel=\"正在推送更改...\",(0,Nr.setIcon)(this.iconEl,\"upload\"),this.statusBarEl.addClass(this.base+\"push\");break;case 2:this.statusBarEl.ariaLabel=\"正在拉取更改...\",(0,Nr.setIcon)(this.iconEl,\"download\"),this.statusBarEl.addClass(this.base+\"pull\");break;default:this.statusBarEl.ariaLabel=\"初始化失败！\",(0,Nr.setIcon)(this.iconEl,\"alert-triangle\"),this.statusBarEl.addClass(this.base+\"failed-init\");break}}displayFromNow(){var n;let t=this.lastCommitTimestamp,r=this.plugin.state.offlineMode;if(t){let i=(0,Nr.moment)(t).fromNow();this.statusBarEl.ariaLabel=`${r?\"Offline: \":\"\"}Last Commit: ${i}`,(n=this.unPushedCommits)!=null&&n&&(this.statusBarEl.ariaLabel+=`\n(${this.unPushedCommits} unpushed commits)`)}else this.statusBarEl.ariaLabel=r?\"Git is offline\":\"Git is ready\";r?(0,Nr.setIcon)(this.iconEl,\"globe\"):(0,Nr.setIcon)(this.iconEl,\"check\"),this.plugin.settings.changedFilesInStatusBar&&this.plugin.cachedStatus&&this.textEl.setText(this.plugin.cachedStatus.changed.length.toString()),this.statusBarEl.addClass(this.base+\"idle\")}async refreshCommitTimestamp(){this.lastCommitTimestamp=await this.plugin.gitManager.getLastCommitTime(),this.unPushedCommits=await this.plugin.gitManager.getUnpushedCommits()}remove(){this.statusBarEl.remove()}};g();var ld=require(\"obsidian\"),od=class extends ld.SuggestModal{constructor(r){super(r.app);this.plugin=r;this.resolve=null;this.setPlaceholder(\"输入您的消息并可选择添加日期的版本。\")}openAndGetResult(){return new Promise(r=>{this.resolve=r,this.open()})}onClose(){new Promise(r=>setTimeout(r,10)).then(()=>{this.resolve&&this.resolve(void 0)})}getSuggestions(r){let n=(0,ld.moment)().format(this.plugin.settings.commitDateFormat);return r==\"\"&&(r=\"...\"),[r,`${n}: ${r}`,`${r}: ${n}`]}renderSuggestion(r,n){n.innerText=r}onChooseSuggestion(r,n){this.resolve&&this.resolve(r)}};g();var rC=require(\"obsidian\"),Xl=class{constructor(t){this.plugin=t}saveLastAuto(t,r){r===\"backup\"?this.plugin.localStorage.setLastAutoBackup(t.toString()):r===\"pull\"?this.plugin.localStorage.setLastAutoPull(t.toString()):r===\"push\"&&this.plugin.localStorage.setLastAutoPush(t.toString())}loadLastAuto(){var t,r,n;return{backup:new Date((t=this.plugin.localStorage.getLastAutoBackup())!=null?t:\"\"),pull:new Date((r=this.plugin.localStorage.getLastAutoPull())!=null?r:\"\"),push:new Date((n=this.plugin.localStorage.getLastAutoPush())!=null?n:\"\")}}async init(){await this.setUpAutoCommitAndSync();let t=this.loadLastAuto();if(this.plugin.settings.differentIntervalCommitAndPush&&this.plugin.settings.autoPushInterval>0){let r=this.diff(this.plugin.settings.autoPushInterval,t.push);this.startAutoPush(r)}if(this.plugin.settings.autoPullInterval>0){let r=this.diff(this.plugin.settings.autoPullInterval,t.pull);this.startAutoPull(r)}}unload(){this.clearAutoPull(),this.clearAutoPush(),this.clearAutoCommitAndSync()}reload(...t){t.contains(\"commit\")&&(this.clearAutoCommitAndSync(),this.plugin.settings.autoSaveInterval>0&&this.startAutoCommitAndSync(this.plugin.settings.autoSaveInterval)),t.contains(\"push\")&&(this.clearAutoPush(),this.plugin.settings.differentIntervalCommitAndPush&&this.plugin.settings.autoPushInterval>0&&this.startAutoPush(this.plugin.settings.autoPushInterval)),t.contains(\"pull\")&&(this.clearAutoPull(),this.plugin.settings.autoPullInterval>0&&this.startAutoPull(this.plugin.settings.autoPullInterval))}async setUpAutoCommitAndSync(){if(this.plugin.settings.setLastSaveToLastCommit){this.clearAutoCommitAndSync();let t=await this.plugin.gitManager.getLastCommitTime();t&&this.saveLastAuto(t,\"backup\")}if(!this.timeoutIDCommitAndSync&&!this.plugin.autoCommitDebouncer){let t=this.loadLastAuto();if(this.plugin.settings.autoSaveInterval>0){let r=this.diff(this.plugin.settings.autoSaveInterval,t.backup);this.startAutoCommitAndSync(r)}}}startAutoCommitAndSync(t){let r=(t!=null?t:this.plugin.settings.autoSaveInterval)*6e4;this.plugin.settings.autoBackupAfterFileChange?t===0?this.doAutoCommitAndSync():this.plugin.autoCommitDebouncer=(0,rC.debounce)(()=>this.doAutoCommitAndSync(),r,!0):(r>2147483647&&(r=2147483647),this.timeoutIDCommitAndSync=window.setTimeout(()=>this.doAutoCommitAndSync(),r))}doAutoCommitAndSync(){this.plugin.promiseQueue.addTask(async()=>{if(this.plugin.settings.setLastSaveToLastCommit){let t=await this.plugin.gitManager.getLastCommitTime();if(t){this.saveLastAuto(t,\"backup\");let r=this.diff(this.plugin.settings.autoSaveInterval,t);if(r>0)return this.startAutoCommitAndSync(r),!1}}return this.plugin.settings.differentIntervalCommitAndPush?await this.plugin.commit({fromAuto:!0}):await this.plugin.commitAndSync(!0),!0},t=>{t!==!1&&(this.saveLastAuto(new Date,\"backup\"),this.startAutoCommitAndSync())})}startAutoPull(t){let r=(t!=null?t:this.plugin.settings.autoPullInterval)*6e4;r>2147483647&&(r=2147483647),this.timeoutIDPull=window.setTimeout(()=>this.doAutoPull(),r)}doAutoPull(){this.plugin.promiseQueue.addTask(()=>this.plugin.pullChangesFromRemote(),()=>{this.saveLastAuto(new Date,\"pull\"),this.startAutoPull()})}startAutoPush(t){let r=(t!=null?t:this.plugin.settings.autoPushInterval)*6e4;r>2147483647&&(r=2147483647),this.timeoutIDPush=window.setTimeout(()=>this.doAutoPush(),r)}doAutoPush(){this.plugin.promiseQueue.addTask(()=>this.plugin.push(),()=>{this.saveLastAuto(new Date,\"push\"),this.startAutoPush()})}clearAutoCommitAndSync(){var r;let t=!1;return this.timeoutIDCommitAndSync&&(window.clearTimeout(this.timeoutIDCommitAndSync),this.timeoutIDCommitAndSync=void 0,t=!0),this.plugin.autoCommitDebouncer&&((r=this.plugin.autoCommitDebouncer)==null||r.cancel(),this.plugin.autoCommitDebouncer=void 0,t=!0),t}clearAutoPull(){return this.timeoutIDPull?(window.clearTimeout(this.timeoutIDPull),this.timeoutIDPull=void 0,!0):!1}clearAutoPush(){return this.timeoutIDPush?(window.clearTimeout(this.timeoutIDPush),this.timeoutIDPush=void 0,!0):!1}diff(t,r){let i=t-Math.round((new Date().getTime()-r.getTime())/1e3/60);return Math.max(0,i)}};g();var Kl=require(\"obsidian\");g();var Zl=require(\"obsidian\");async function nC(e,t,r){let n=await aC(t,r);if(n.result===\"failure\"){new Zl.Notice(n.reason);return}let{isGitHub:i,branch:a,repo:s,user:o,filePath:c}=n;if(i){let l=e.getCursor(\"from\").line+1,u=e.getCursor(\"to\").line+1;l===u?window.open(`https://github.com/${o}/${s}/blob/${a}/${c}?plain=1#L${l}`):window.open(`https://github.com/${o}/${s}/blob/${a}/${c}?plain=1#L${l}-L${u}`)}else new Zl.Notice(\"您似乎没有使用 GitHub\")}async function iC(e,t){let r=await aC(e,t);if(r.result===\"failure\"){new Zl.Notice(r.reason);return}let{isGitHub:n,branch:i,repo:a,user:s,filePath:o}=r;n?window.open(`https://github.com/${s}/${a}/commits/${i}/${o}`):new Zl.Notice(\"您似乎没有使用 GitHub\")}async function aC(e,t){let r=await t.branchInfo(),n=r.tracking,i=r.current,a,s=t.getRelativeRepoPath(e.path);if(t instanceof Te){let c=await t.getSubmoduleOfFile(t.getRelativeRepoPath(e.path));if(c){s=c.relativeFilepath;let l=await t.git.cwd({path:c.submodule,root:!1}).status();if(n=l.tracking||void 0,i=l.current||void 0,n){let u=n.substring(0,n.indexOf(\"/\")),f=await t.git.cwd({path:c.submodule,root:!1}).getConfig(`remote.${u}.url`,\"local\");if(f.value!=null)a=f.value;else return{result:\"failure\",reason:\"无法获取子模块的远程 URL\"}}}}if(n==null)return{result:\"failure\",reason:\"远程分支未配置\"};if(i==null)return{result:\"failure\",reason:\"无法获取当前分支名称\"};if(a==null){let c=n.substring(0,n.indexOf(\"/\"));if(a=await t.getConfig(`remote.${c}.url`),a==null)return{result:\"failure\",reason:\"无法获取远程 URL\"}}let o=a.match(/(?:^https:\\/\\/github\\.com\\/(.+)\\/(.+?)(?:\\.git)?$)|(?:^[a-zA-Z]+@github\\.com:(.+)\\/(.+?)(?:\\.git)?$)/);if(o==null)return{result:\"failure\",reason:\"无法解析远程 URL\"};{let[c,l,u,f,d]=o;return{result:\"success\",isGitHub:!!c,repo:u||d,user:l||f,branch:i,filePath:s}}}g();var sC=require(\"obsidian\"),cd=class extends sC.FuzzySuggestModal{constructor(t,r){super(t.app),this.plugin=t,this.changedFiles=r,this.setPlaceholder(\"不支持的文件将由默认应用程序打开！\")}getItems(){return this.changedFiles}getItemText(t){if(t.index==\"U\"&&t.workingDir==\"U\")return`Untracked | ${t.vaultPath}`;let r=\"\",n=\"\";return t.workingDir!=\" \"&&(r=`Working Dir: ${t.workingDir} `),t.index!=\" \"&&(n=`Index: ${t.index}`),`${r}${n} | ${t.vaultPath}`}onChooseItem(t,r){this.plugin.app.metadataCache.getFirstLinkpathDest(t.vaultPath,\"\")==null?this.app.openWithDefaultApp(t.vaultPath):this.plugin.app.workspace.openLinkText(t.vaultPath,\"/\")}};g();var oC=require(\"obsidian\"),ud=class extends oC.Modal{constructor(r,n){super(r);this.content=n;this.resolve=null}openAndGetReslt(){return new Promise(r=>{this.resolve=r,this.open()})}onOpen(){let{contentEl:r,titleEl:n}=this;n.setText(\"编辑 .gitignore\");let i=r.createDiv(),a=i.createEl(\"textarea\",{text:this.content,cls:[\"obsidian-git-textarea\"],attr:{rows:10,cols:30,wrap:\"off\"}});i.createEl(\"button\",{cls:[\"mod-cta\",\"obsidian-git-center-button\"],text:\"保存\"}).addEventListener(\"click\",()=>{this.resolve(a.value),this.close()})}onClose(){let{contentEl:r}=this;r.empty(),this.resolve&&this.resolve(void 0)}};function lC(e){let t=e.app;e.addCommand({id:\"edit-gitignore\",name:\"编辑 .gitignore\",callback:async()=>{let r=e.gitManager.getRelativeVaultPath(\".gitignore\");await t.vault.adapter.exists(r)||await t.vault.adapter.write(r,\"\");let n=await t.vault.adapter.read(r),a=await new ud(t,n).openAndGetReslt();a!==void 0&&(await t.vault.adapter.write(r,a),await e.refresh())}}),e.addCommand({id:\"open-git-view\",name:\"打开源代码管理视图\",callback:async()=>{var i;let r=t.workspace.getLeavesOfType(St.type),n;r.length===0?(n=(i=t.workspace.getRightLeaf(!1))!=null?i:t.workspace.getLeaf(),await n.setViewState({type:St.type})):n=r.first(),await t.workspace.revealLeaf(n),t.workspace.trigger(\"obsidian-git:refresh\")}}),e.addCommand({id:\"open-history-view\",name:\"打开历史记录视图\",callback:async()=>{var i;let r=t.workspace.getLeavesOfType($r.type),n;r.length===0?(n=(i=t.workspace.getRightLeaf(!1))!=null?i:t.workspace.getLeaf(),await n.setViewState({type:$r.type})):n=r.first(),await t.workspace.revealLeaf(n),t.workspace.trigger(\"obsidian-git:refresh\")}}),e.addCommand({id:\"open-diff-view\",name:\"打开差异视图\",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;{let i=e.gitManager.getRelativeRepoPath(n.path,!0);e.tools.openDiff({aFile:i,aRef:\"\"})}}}),e.addCommand({id:\"view-file-on-github\",name:\"在 GitHub 上打开文件\",editorCallback:(r,{file:n})=>{if(n)return nC(r,n,e.gitManager)}}),e.addCommand({id:\"view-history-on-github\",name:\"在 GitHub 上查看文件历史\",editorCallback:(r,{file:n})=>{if(n)return iC(n,e.gitManager)}}),e.addCommand({id:\"pull\",name:\"拉取\",callback:()=>e.promiseQueue.addTask(()=>e.pullChangesFromRemote())}),e.addCommand({id:\"fetch\",name:\"获取\",callback:()=>e.promiseQueue.addTask(()=>e.fetch())}),e.addCommand({id:\"switch-to-remote-branch\",name:\"切换到远程分支\",callback:()=>e.promiseQueue.addTask(()=>e.switchRemoteBranch())}),e.addCommand({id:\"add-to-gitignore\",name:\"Add file to .gitignore\",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.addFileToGitignore(n.path).catch(i=>e.displayError(i))}}),e.addCommand({id:\"push\",name:\"提交并同步\",callback:()=>e.promiseQueue.addTask(()=>e.commitAndSync(!1))}),e.addCommand({id:\"backup-and-close\",name:\"提交并同步，然后关闭 Obsidian\",callback:()=>e.promiseQueue.addTask(async()=>{await e.commitAndSync(!1),window.close()})}),e.addCommand({id:\"commit-push-specified-message\",name:\"提交并同步，使用特定消息\",callback:()=>e.promiseQueue.addTask(()=>e.commitAndSync(!1,!0))}),e.addCommand({id:\"commit\",name:\"提交所有更改\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1}))}),e.addCommand({id:\"commit-specified-message\",name:\"使用特定消息提交所有更改\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0}))}),e.addCommand({id:\"commit-staged\",name:\"提交暂存文件\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!1,onlyStaged:!0}))}),Kl.Platform.isDesktopApp&&e.addCommand({id:\"commit-amend-staged-specified-message\",name:\"修改暂存文件\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:!0,amend:!0}))}),e.addCommand({id:\"commit-staged-specified-message\",name:\"使用特定消息提交暂存文件\",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:!0}))}),e.addCommand({id:\"push2\",name:\"推送\",callback:()=>e.promiseQueue.addTask(()=>e.push())}),e.addCommand({id:\"stage-current-file\",name:\"暂存当前文件\",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.promiseQueue.addTask(()=>e.stageFile(n))}}),e.addCommand({id:\"unstage-current-file\",name:\"取消暂存当前文件\",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.promiseQueue.addTask(()=>e.unstageFile(n))}}),e.addCommand({id:\"edit-remotes\",name:\"编辑远程仓库\",callback:()=>e.editRemotes().catch(r=>e.displayError(r))}),e.addCommand({id:\"remove-remote\",name:\"移除远程仓库\",callback:()=>e.removeRemote().catch(r=>e.displayError(r))}),e.addCommand({id:\"set-upstream-branch\",name:\"设置上游分支\",callback:()=>e.setUpstreamBranch().catch(r=>e.displayError(r))}),e.addCommand({id:\"delete-repo\",name:\"警告：删除仓库\",callback:async()=>{await t.vault.adapter.exists(`${e.settings.basePath}/.git`)?await new Fe(e,{options:[\"NO\",\"YES\"],placeholder:\"您确定要删除该仓库(.git目录)吗？此插件操作无法撤销。\",onlySelection:!0}).openAndGetResult()===\"YES\"&&(await t.vault.adapter.rmdir(`${e.settings.basePath}/.git`,!0),new Kl.Notice(\"成功删除了仓库。正在重新加载插件...\"),e.unloadPlugin(),await e.init({fromReload:!0})):new Kl.Notice(\"未找到仓库\")}}),e.addCommand({id:\"init-repo\",name:\"初始化新仓库\",callback:()=>e.createNewRepo().catch(r=>e.displayError(r))}),e.addCommand({id:\"clone-repo\",name:\"克隆现有的远程仓库\",callback:()=>e.cloneNewRepo().catch(r=>e.displayError(r))}),e.addCommand({id:\"list-changed-files\",name:\"列出已更改的文件\",callback:async()=>{if(await e.isAllInitialized())try{let r=await e.updateCachedStatus();if(r.changed.length+r.staged.length>500){e.displayError(\"更改过多,无法显示\");return}new cd(e,r.all).open()}catch(r){e.displayError(r)}}}),e.addCommand({id:\"switch-branch\",name:\"切换分支\",callback:()=>{e.switchBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:\"create-branch\",name:\"创建新分支\",callback:()=>{e.createBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:\"delete-branch\",name:\"删除分支\",callback:()=>{e.deleteBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:\"discard-all\",name:\"警告：放弃所有更改\",callback:async()=>{if(!await e.isAllInitialized())return!1;await new Fe(e,{options:[\"NO\",\"YES\"],placeholder:\"您想放弃所有跟踪文件的更改吗？此插件操作无法撤销。\",onlySelection:!0}).openAndGetResult()===\"YES\"&&e.promiseQueue.addTask(()=>e.discardAll())}}),e.addCommand({id:\"raw-command\",name:\"Raw command\",checkCallback:r=>{let n=e.gitManager;if(r)return n instanceof Te;e.tools.runRawCommand().catch(i=>e.displayError(i))}}),e.addCommand({id:\"toggle-line-author-info\",name:\"切换行作者信息\",callback:()=>{var r;return(r=e.settingsTab)==null?void 0:r.configureLineAuthorShowStatus(!e.settings.lineAuthor.show)}})}g();var fd=class{constructor(t){this.plugin=t;this.prefix=this.plugin.manifest.id+\":\",this.app=t.app}migrate(){let t=[\"password\",\"hostname\",\"conflict\",\"lastAutoPull\",\"lastAutoBackup\",\"lastAutoPush\",\"gitPath\",\"pluginDisabled\"];for(let r of t){let n=localStorage.getItem(this.prefix+r);this.app.loadLocalStorage(this.prefix+r)==null&&n!=null&&n!=null&&(this.app.saveLocalStorage(this.prefix+r,n),localStorage.removeItem(this.prefix+r))}}getPassword(){return this.app.loadLocalStorage(this.prefix+\"password\")}setPassword(t){return this.app.saveLocalStorage(this.prefix+\"password\",t)}getUsername(){return this.app.loadLocalStorage(this.prefix+\"username\")}setUsername(t){return this.app.saveLocalStorage(this.prefix+\"username\",t)}getHostname(){return this.app.loadLocalStorage(this.prefix+\"hostname\")}setHostname(t){return this.app.saveLocalStorage(this.prefix+\"hostname\",t)}getConflict(){return this.app.loadLocalStorage(this.prefix+\"conflict\")==\"true\"}setConflict(t){return this.app.saveLocalStorage(this.prefix+\"conflict\",`${t}`)}getLastAutoPull(){return this.app.loadLocalStorage(this.prefix+\"lastAutoPull\")}setLastAutoPull(t){return this.app.saveLocalStorage(this.prefix+\"lastAutoPull\",t)}getLastAutoBackup(){return this.app.loadLocalStorage(this.prefix+\"lastAutoBackup\")}setLastAutoBackup(t){return this.app.saveLocalStorage(this.prefix+\"lastAutoBackup\",t)}getLastAutoPush(){return this.app.loadLocalStorage(this.prefix+\"lastAutoPush\")}setLastAutoPush(t){return this.app.saveLocalStorage(this.prefix+\"lastAutoPush\",t)}getGitPath(){return this.app.loadLocalStorage(this.prefix+\"gitPath\")}setGitPath(t){return this.app.saveLocalStorage(this.prefix+\"gitPath\",t)}getPATHPaths(){var t,r;return(r=(t=this.app.loadLocalStorage(this.prefix+\"PATHPaths\"))==null?void 0:t.split(\":\"))!=null?r:[]}setPATHPaths(t){return this.app.saveLocalStorage(this.prefix+\"PATHPaths\",t.join(\":\"))}getEnvVars(){var t;return JSON.parse((t=this.app.loadLocalStorage(this.prefix+\"envVars\"))!=null?t:\"[]\")}setEnvVars(t){return this.app.saveLocalStorage(this.prefix+\"envVars\",JSON.stringify(t))}getPluginDisabled(){return this.app.loadLocalStorage(this.prefix+\"pluginDisabled\")==\"true\"}setPluginDisabled(t){return this.app.saveLocalStorage(this.prefix+\"pluginDisabled\",`${t}`)}};g();g();g();g();var He;(function(e){e.INSERT=\"insert\",e.DELETE=\"delete\",e.CONTEXT=\"context\"})(He||(He={}));var cC={LINE_BY_LINE:\"line-by-line\",SIDE_BY_SIDE:\"side-by-side\"},uC={LINES:\"lines\",WORDS:\"words\",NONE:\"none\"},fC={WORD:\"word\",CHAR:\"char\"},Ea;(function(e){e.AUTO=\"auto\",e.DARK=\"dark\",e.LIGHT=\"light\"})(Ea||(Ea={}));g();var yB=[\"-\",\"[\",\"]\",\"/\",\"{\",\"}\",\"(\",\")\",\"*\",\"+\",\"?\",\".\",\"\\\\\",\"^\",\"$\",\"|\"],wB=RegExp(\"[\"+yB.join(\"\\\\\")+\"]\",\"g\");function dC(e){return e.replace(wB,\"\\\\$&\")}function m0(e){return e&&e.replace(/\\\\/g,\"/\")}function hC(e){let t,r,n,i=0;for(t=0,n=e.length;t<n;t++)r=e.charCodeAt(t),i=(i<<5)-i+r,i|=0;return i}function pC(e,t){let r=e.split(\".\");return r.length>1?r[r.length-1]:t}function mC(e,t){return t.reduce((r,n)=>r||e.startsWith(n),!1)}var gC=[\"a/\",\"b/\",\"i/\",\"w/\",\"c/\",\"o/\"];function $i(e,t,r){let n=r!==void 0?[...gC,r]:gC,i=t?new RegExp(`^${dC(t)} \"?(.+?)\"?$`):new RegExp('^\"?(.+?)\"?$'),[,a=\"\"]=i.exec(e)||[],s=n.find(c=>a.indexOf(c)===0);return(s?a.slice(s.length):a).replace(/\\s+\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)? [+-]\\d{4}.*$/,\"\")}function bB(e,t){return $i(e,\"---\",t)}function _B(e,t){return $i(e,\"+++\",t)}function vC(e,t={}){let r=[],n=null,i=null,a=null,s=null,o=null,c=null,l=null,u=\"--- \",f=\"+++ \",d=\"@@\",h=/^old mode (\\d{6})/,p=/^new mode (\\d{6})/,m=/^deleted file mode (\\d{6})/,v=/^new file mode (\\d{6})/,y=/^copy from \"?(.+)\"?/,b=/^copy to \"?(.+)\"?/,x=/^rename from \"?(.+)\"?/,E=/^rename to \"?(.+)\"?/,_=/^similarity index (\\d+)%/,k=/^dissimilarity index (\\d+)%/,w=/^index ([\\da-z]+)\\.\\.([\\da-z]+)\\s*(\\d{6})?/,A=/^Binary files (.*) and (.*) differ/,S=/^GIT binary patch/,T=/^index ([\\da-z]+),([\\da-z]+)\\.\\.([\\da-z]+)/,P=/^mode (\\d{6}),(\\d{6})\\.\\.(\\d{6})/,O=/^new file mode (\\d{6})/,j=/^deleted file mode (\\d{6}),(\\d{6})/,D=e.replace(/\\\\ No newline at end of file/g,\"\").replace(/\\r\\n?/g,`\n`).split(`\n`);function Q(){i!==null&&n!==null&&(n.blocks.push(i),i=null)}function de(){n!==null&&(!n.oldName&&c!==null&&(n.oldName=c),!n.newName&&l!==null&&(n.newName=l),n.newName&&(r.push(n),n=null)),c=null,l=null}function ee(){Q(),de(),n={blocks:[],deletedLines:0,addedLines:0}}function J(F){Q();let G;n!==null&&((G=/^@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@.*/.exec(F))?(n.isCombined=!1,a=parseInt(G[1],10),o=parseInt(G[2],10)):(G=/^@@@ -(\\d+)(?:,\\d+)? -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@@.*/.exec(F))?(n.isCombined=!0,a=parseInt(G[1],10),s=parseInt(G[2],10),o=parseInt(G[3],10)):(F.startsWith(d)&&console.error(\"解析行失败,从 0 开始！\"),a=0,o=0,n.isCombined=!1)),i={lines:[],oldStartLine:a,oldStartLine2:s,newStartLine:o,header:F}}function Pe(F){if(n===null||i===null||a===null||o===null)return;let G={content:F},N=n.isCombined?[\"+ \",\" +\",\"++\"]:[\"+\"],Me=n.isCombined?[\"- \",\" -\",\"--\"]:[\"-\"];mC(F,N)?(n.addedLines++,G.type=He.INSERT,G.oldNumber=void 0,G.newNumber=o++):mC(F,Me)?(n.deletedLines++,G.type=He.DELETE,G.oldNumber=a++,G.newNumber=void 0):(G.type=He.CONTEXT,G.oldNumber=a++,G.newNumber=o++),i.lines.push(G)}function me(F,G){let N=G;for(;N<D.length-3;){if(F.startsWith(\"diff\"))return!1;if(D[N].startsWith(u)&&D[N+1].startsWith(f)&&D[N+2].startsWith(d))return!0;N++}return!1}return D.forEach((F,G)=>{if(!F||F.startsWith(\"*\"))return;let N,Me=D[G-1],Dt=D[G+1],_t=D[G+2];if(F.startsWith(\"diff --git\")||F.startsWith(\"diff --combined\")){if(ee(),(N=/^diff --git \"?([a-ciow]\\/.+)\"? \"?([a-ciow]\\/.+)\"?/.exec(F))&&(c=$i(N[1],void 0,t.dstPrefix),l=$i(N[2],void 0,t.srcPrefix)),n===null)throw new Error(\"Where is my file !!!\");n.isGitDiff=!0;return}if(F.startsWith(\"Binary files\")&&!(n!=null&&n.isGitDiff)){if(ee(),(N=/^Binary files \"?([a-ciow]\\/.+)\"? and \"?([a-ciow]\\/.+)\"? differ/.exec(F))&&(c=$i(N[1],void 0,t.dstPrefix),l=$i(N[2],void 0,t.srcPrefix)),n===null)throw new Error(\"Where is my file !!!\");n.isBinary=!0;return}if((!n||!n.isGitDiff&&n&&F.startsWith(u)&&Dt.startsWith(f)&&_t.startsWith(d))&&ee(),n!=null&&n.isTooBig)return;if(n&&(typeof t.diffMaxChanges==\"number\"&&n.addedLines+n.deletedLines>t.diffMaxChanges||typeof t.diffMaxLineLength==\"number\"&&F.length>t.diffMaxLineLength)){n.isTooBig=!0,n.addedLines=0,n.deletedLines=0,n.blocks=[],i=null;let st=typeof t.diffTooBigMessage==\"function\"?t.diffTooBigMessage(r.length):\"Diff too big to be displayed\";J(st);return}if(F.startsWith(u)&&Dt.startsWith(f)||F.startsWith(f)&&Me.startsWith(u)){if(n&&!n.oldName&&F.startsWith(\"--- \")&&(N=bB(F,t.srcPrefix))){n.oldName=N,n.language=pC(n.oldName,n.language);return}if(n&&!n.newName&&F.startsWith(\"+++ \")&&(N=_B(F,t.dstPrefix))){n.newName=N,n.language=pC(n.newName,n.language);return}}if(n&&(F.startsWith(d)||n.isGitDiff&&n.oldName&&n.newName&&!i)){J(F);return}if(i&&(F.startsWith(\"+\")||F.startsWith(\"-\")||F.startsWith(\" \"))){Pe(F);return}let Ee=!me(F,G);if(n===null)throw new Error(\"Where is my file !!!\");(N=h.exec(F))?n.oldMode=N[1]:(N=p.exec(F))?n.newMode=N[1]:(N=m.exec(F))?(n.deletedFileMode=N[1],n.isDeleted=!0):(N=v.exec(F))?(n.newFileMode=N[1],n.isNew=!0):(N=y.exec(F))?(Ee&&(n.oldName=N[1]),n.isCopy=!0):(N=b.exec(F))?(Ee&&(n.newName=N[1]),n.isCopy=!0):(N=x.exec(F))?(Ee&&(n.oldName=N[1]),n.isRename=!0):(N=E.exec(F))?(Ee&&(n.newName=N[1]),n.isRename=!0):(N=A.exec(F))?(n.isBinary=!0,n.oldName=$i(N[1],void 0,t.srcPrefix),n.newName=$i(N[2],void 0,t.dstPrefix),J(\"Binary file\")):S.test(F)?(n.isBinary=!0,J(F)):(N=_.exec(F))?n.unchangedPercentage=parseInt(N[1],10):(N=k.exec(F))?n.changedPercentage=parseInt(N[1],10):(N=w.exec(F))?(n.checksumBefore=N[1],n.checksumAfter=N[2],N[3]&&(n.mode=N[3])):(N=T.exec(F))?(n.checksumBefore=[N[2],N[3]],n.checksumAfter=N[1]):(N=P.exec(F))?(n.oldMode=[N[2],N[3]],n.newMode=N[1]):(N=O.exec(F))?(n.newFileMode=N[1],n.isNew=!0):(N=j.exec(F))&&(n.deletedFileMode=N[1],n.isDeleted=!0)}),Q(),de(),r}g();g();g();function Kn(){}Kn.prototype={diff:function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=n.callback;typeof n==\"function\"&&(i=n,n={}),this.options=n;var a=this;function s(m){return i?(setTimeout(function(){i(void 0,m)},0),!0):m}t=this.castInput(t),r=this.castInput(r),t=this.removeEmpty(this.tokenize(t)),r=this.removeEmpty(this.tokenize(r));var o=r.length,c=t.length,l=1,u=o+c;n.maxEditLength&&(u=Math.min(u,n.maxEditLength));var f=[{newPos:-1,components:[]}],d=this.extractCommon(f[0],r,t,0);if(f[0].newPos+1>=o&&d+1>=c)return s([{value:this.join(r),count:r.length}]);function h(){for(var m=-1*l;m<=l;m+=2){var v=void 0,y=f[m-1],b=f[m+1],x=(b?b.newPos:0)-m;y&&(f[m-1]=void 0);var E=y&&y.newPos+1<o,_=b&&0<=x&&x<c;if(!E&&!_){f[m]=void 0;continue}if(!E||_&&y.newPos<b.newPos?(v=EB(b),a.pushComponent(v.components,void 0,!0)):(v=y,v.newPos++,a.pushComponent(v.components,!0,void 0)),x=a.extractCommon(v,r,t,m),v.newPos+1>=o&&x+1>=c)return s(SB(a,v.components,r,t,a.useLongestToken));f[m]=v}l++}if(i)(function m(){setTimeout(function(){if(l>u)return i();h()||m()},0)})();else for(;l<=u;){var p=h();if(p)return p}},pushComponent:function(t,r,n){var i=t[t.length-1];i&&i.added===r&&i.removed===n?t[t.length-1]={count:i.count+1,added:r,removed:n}:t.push({count:1,added:r,removed:n})},extractCommon:function(t,r,n,i){for(var a=r.length,s=n.length,o=t.newPos,c=o-i,l=0;o+1<a&&c+1<s&&this.equals(r[o+1],n[c+1]);)o++,c++,l++;return l&&t.components.push({count:l}),t.newPos=o,c},equals:function(t,r){return this.options.comparator?this.options.comparator(t,r):t===r||this.options.ignoreCase&&t.toLowerCase()===r.toLowerCase()},removeEmpty:function(t){for(var r=[],n=0;n<t.length;n++)t[n]&&r.push(t[n]);return r},castInput:function(t){return t},tokenize:function(t){return t.split(\"\")},join:function(t){return t.join(\"\")}};function SB(e,t,r,n,i){for(var a=0,s=t.length,o=0,c=0;a<s;a++){var l=t[a];if(l.removed){if(l.value=e.join(n.slice(c,c+l.count)),c+=l.count,a&&t[a-1].added){var f=t[a-1];t[a-1]=t[a],t[a]=f}}else{if(!l.added&&i){var u=r.slice(o,o+l.count);u=u.map(function(h,p){var m=n[c+p];return m.length>h.length?m:h}),l.value=e.join(u)}else l.value=e.join(r.slice(o,o+l.count));o+=l.count,l.added||(c+=l.count)}}var d=t[s-1];return s>1&&typeof d.value==\"string\"&&(d.added||d.removed)&&e.equals(\"\",d.value)&&(t[s-2].value+=d.value,t.pop()),t}function EB(e){return{newPos:e.newPos,components:e.components.slice(0)}}var AB=new Kn;function bC(e,t,r){return AB.diff(e,t,r)}var yC=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,wC=/\\S/,y0=new Kn;y0.equals=function(e,t){return this.options.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e===t||this.options.ignoreWhitespace&&!wC.test(e)&&!wC.test(t)};y0.tokenize=function(e){for(var t=e.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),r=0;r<t.length-1;r++)!t[r+1]&&t[r+2]&&yC.test(t[r])&&yC.test(t[r+2])&&(t[r]+=t[r+2],t.splice(r+1,2),r--);return t};function _C(e,t,r){return y0.diff(e,t,r)}var xC=new Kn;xC.tokenize=function(e){var t=[],r=e.split(/(\\n|\\r\\n)/);r[r.length-1]||r.pop();for(var n=0;n<r.length;n++){var i=r[n];n%2&&!this.options.newlineIsToken?t[t.length-1]+=i:(this.options.ignoreWhitespace&&(i=i.trim()),t.push(i))}return t};var kB=new Kn;kB.tokenize=function(e){return e.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var TB=new Kn;TB.tokenize=function(e){return e.split(/([{}:;,]|\\s+)/)};function dd(e){\"@babel/helpers - typeof\";return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?dd=function(t){return typeof t}:dd=function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},dd(e)}var CB=Object.prototype.toString,Jl=new Kn;Jl.useLongestToken=!0;Jl.tokenize=xC.tokenize;Jl.castInput=function(e){var t=this.options,r=t.undefinedReplacement,n=t.stringifyReplacer,i=n===void 0?function(a,s){return typeof s==\"undefined\"?r:s}:n;return typeof e==\"string\"?e:JSON.stringify(g0(e,null,null,i),i,\"  \")};Jl.equals=function(e,t){return Kn.prototype.equals.call(Jl,e.replace(/,([\\r\\n])/g,\"$1\"),t.replace(/,([\\r\\n])/g,\"$1\"))};function g0(e,t,r,n,i){t=t||[],r=r||[],n&&(e=n(i,e));var a;for(a=0;a<t.length;a+=1)if(t[a]===e)return r[a];var s;if(CB.call(e)===\"[object Array]\"){for(t.push(e),s=new Array(e.length),r.push(s),a=0;a<e.length;a+=1)s[a]=g0(e[a],t,r,n,i);return t.pop(),r.pop(),s}if(e&&e.toJSON&&(e=e.toJSON()),dd(e)===\"object\"&&e!==null){t.push(e),s={},r.push(s);var o=[],c;for(c in e)e.hasOwnProperty(c)&&o.push(c);for(o.sort(),a=0;a<o.length;a+=1)c=o[a],s[c]=g0(e[c],t,r,n,c);t.pop(),r.pop()}else s=e;return s}var v0=new Kn;v0.tokenize=function(e){return e.slice()};v0.join=v0.removeEmpty=function(e){return e};g();function RB(e,t){if(e.length===0)return t.length;if(t.length===0)return e.length;let r=[],n;for(n=0;n<=t.length;n++)r[n]=[n];let i;for(i=0;i<=e.length;i++)r[0][i]=i;for(n=1;n<=t.length;n++)for(i=1;i<=e.length;i++)t.charAt(n-1)===e.charAt(i-1)?r[n][i]=r[n-1][i-1]:r[n][i]=Math.min(r[n-1][i-1]+1,Math.min(r[n][i-1]+1,r[n-1][i]+1));return r[t.length][e.length]}function Ks(e){return(t,r)=>{let n=e(t).trim(),i=e(r).trim();return RB(n,i)/(n.length+i.length)}}function Js(e){function t(n,i,a=new Map){let s=1/0,o;for(let c=0;c<n.length;++c)for(let l=0;l<i.length;++l){let u=JSON.stringify([n[c],i[l]]),f;a.has(u)&&(f=a.get(u))||(f=e(n[c],i[l]),a.set(u,f)),f<s&&(s=f,o={indexA:c,indexB:l,score:s})}return o}function r(n,i,a=0,s=new Map){let o=t(n,i,s);if(!o||n.length+i.length<3)return[[n,i]];let c=n.slice(0,o.indexA),l=i.slice(0,o.indexB),u=[n[o.indexA]],f=[i[o.indexB]],d=o.indexA+1,h=o.indexB+1,p=n.slice(d),m=i.slice(h),v=r(c,l,a+1,s),y=r(u,f,a+1,s),b=r(p,m,a+1,s),x=y;return(o.indexA>0||o.indexB>0)&&(x=v.concat(x)),(n.length>d||i.length>h)&&(x=x.concat(b)),x}return r}var Et={INSERTS:\"d2h-ins\",DELETES:\"d2h-del\",CONTEXT:\"d2h-cntx\",INFO:\"d2h-info\",INSERT_CHANGES:\"d2h-ins d2h-change\",DELETE_CHANGES:\"d2h-del d2h-change\"},Aa={matching:uC.NONE,matchWordsThreshold:.25,maxLineLengthHighlight:1e4,diffStyle:fC.WORD,colorScheme:Ea.LIGHT},Cn=\"/\",SC=Ks(e=>e.value),MB=Js(SC);function b0(e){return e.indexOf(\"dev/null\")!==-1}function OB(e){return e.replace(/(<ins[^>]*>((.|\\n)*?)<\\/ins>)/g,\"\")}function IB(e){return e.replace(/(<del[^>]*>((.|\\n)*?)<\\/del>)/g,\"\")}function Qs(e){switch(e){case He.CONTEXT:return Et.CONTEXT;case He.INSERT:return Et.INSERTS;case He.DELETE:return Et.DELETES}}function eo(e){switch(e){case Ea.DARK:return\"d2h-dark-color-scheme\";case Ea.AUTO:return\"d2h-auto-color-scheme\";case Ea.LIGHT:default:return\"d2h-light-color-scheme\"}}function FB(e){return e?2:1}function Li(e){return e.slice(0).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\").replace(/\\//g,\"&#x2F;\")}function jr(e,t,r=!0){let n=FB(t);return{prefix:e.substring(0,n),content:r?Li(e.substring(n)):e.substring(n)}}function ka(e){let t=m0(e.oldName),r=m0(e.newName);if(t!==r&&!b0(t)&&!b0(r)){let n=[],i=[],a=t.split(Cn),s=r.split(Cn),o=a.length,c=s.length,l=0,u=o-1,f=c-1;for(;l<u&&l<f&&a[l]===s[l];)n.push(s[l]),l+=1;for(;u>l&&f>l&&a[u]===s[f];)i.unshift(s[f]),u-=1,f-=1;let d=n.join(Cn),h=i.join(Cn),p=a.slice(l,u+1).join(Cn),m=s.slice(l,f+1).join(Cn);return d.length&&h.length?d+Cn+\"{\"+p+\" \\u2192 \"+m+\"}\"+Cn+h:d.length?d+Cn+\"{\"+p+\" \\u2192 \"+m+\"}\":h.length?\"{\"+p+\" \\u2192 \"+m+\"}\"+Cn+h:t+\" \\u2192 \"+r}else return b0(r)?t:r}function to(e){return`d2h-${hC(ka(e)).toString().slice(-6)}`}function ro(e){let t=\"file-changed\";return e.isRename||e.isCopy?t=\"file-renamed\":e.isNew?t=\"file-added\":e.isDeleted?t=\"file-deleted\":e.newName!==e.oldName&&(t=\"file-renamed\"),t}function hd(e,t,r,n={}){let{matching:i,maxLineLengthHighlight:a,matchWordsThreshold:s,diffStyle:o}=Object.assign(Object.assign({},Aa),n),c=jr(e,r,!1),l=jr(t,r,!1);if(c.content.length>a||l.content.length>a)return{oldLine:{prefix:c.prefix,content:Li(c.content)},newLine:{prefix:l.prefix,content:Li(l.content)}};let u=o===\"char\"?bC(c.content,l.content):_C(c.content,l.content),f=[];if(o===\"word\"&&i===\"words\"){let h=u.filter(v=>v.removed),p=u.filter(v=>v.added);MB(p,h).forEach(v=>{v[0].length===1&&v[1].length===1&&SC(v[0][0],v[1][0])<s&&(f.push(v[0][0]),f.push(v[1][0]))})}let d=u.reduce((h,p)=>{let m=p.added?\"ins\":p.removed?\"del\":null,v=f.indexOf(p)>-1?' class=\"d2h-change\"':\"\",y=Li(p.value);return m!==null?`${h}<${m}${v}>${y}</${m}>`:`${h}${y}`},\"\");return{oldLine:{prefix:c.prefix,content:OB(d)},newLine:{prefix:l.prefix,content:IB(d)}}}var EC=\"file-summary\",$B=\"icon\",LB={colorScheme:Aa.colorScheme},pd=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},LB),r)}render(t){let r=t.map(n=>this.hoganUtils.render(EC,\"line\",{fileHtmlId:to(n),oldName:n.oldName,newName:n.newName,fileName:ka(n),deletedLines:\"-\"+n.deletedLines,addedLines:\"+\"+n.addedLines},{fileIcon:this.hoganUtils.template($B,ro(n))})).join(`\n`);return this.hoganUtils.render(EC,\"wrapper\",{colorScheme:eo(this.config.colorScheme),filesNumber:t.length,files:r})}};g();var x0=Object.assign(Object.assign({},Aa),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),Ql=\"generic\",AC=\"line-by-line\",DB=\"icon\",NB=\"tag\",ec=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},x0),r)}render(t){let r=t.map(n=>{let i;return n.blocks.length?i=this.generateFileHtml(n):i=this.generateEmptyDiff(),this.makeFileDiffHtml(n,i)}).join(`\n`);return this.hoganUtils.render(Ql,\"wrapper\",{colorScheme:eo(this.config.colorScheme),content:r})}makeFileDiffHtml(t,r){if(this.config.renderNothingWhenEmpty&&Array.isArray(t.blocks)&&t.blocks.length===0)return\"\";let n=this.hoganUtils.template(AC,\"file-diff\"),i=this.hoganUtils.template(Ql,\"file-path\"),a=this.hoganUtils.template(DB,\"file\"),s=this.hoganUtils.template(NB,ro(t));return n.render({file:t,fileHtmlId:to(t),diffs:r,filePath:i.render({fileDiffName:ka(t)},{fileIcon:a,fileTag:s})})}generateEmptyDiff(){return this.hoganUtils.render(Ql,\"empty-diff\",{contentClass:\"d2h-code-line\",CSSLineClass:Et})}generateFileHtml(t){let r=Js(Ks(n=>jr(n.content,t.isCombined).content));return t.blocks.map(n=>{let i=this.hoganUtils.render(Ql,\"block-header\",{CSSLineClass:Et,blockHeader:t.isTooBig?n.header:Li(n.header),lineClass:\"d2h-code-linenumber\",contentClass:\"d2h-code-line\"});return this.applyLineGroupping(n).forEach(([a,s,o])=>{if(s.length&&o.length&&!a.length)this.applyRematchMatching(s,o,r).map(([c,l])=>{let{left:u,right:f}=this.processChangedLines(t,t.isCombined,c,l);i+=u,i+=f});else if(a.length)a.forEach(c=>{let{prefix:l,content:u}=jr(c.content,t.isCombined);i+=this.generateSingleLineHtml(t,{type:Et.CONTEXT,prefix:l,content:u,oldNumber:c.oldNumber,newNumber:c.newNumber})});else if(s.length||o.length){let{left:c,right:l}=this.processChangedLines(t,t.isCombined,s,o);i+=c,i+=l}else console.error(\"未知状态在处理行组时达到\",a,s,o)}),i}).join(`\n`)}applyLineGroupping(t){let r=[],n=[],i=[];for(let a=0;a<t.lines.length;a++){let s=t.lines[a];(s.type!==He.INSERT&&i.length||s.type===He.CONTEXT&&n.length>0)&&(r.push([[],n,i]),n=[],i=[]),s.type===He.CONTEXT?r.push([[s],[],[]]):s.type===He.INSERT&&n.length===0?r.push([[],[],[s]]):s.type===He.INSERT&&n.length>0?i.push(s):s.type===He.DELETE&&n.push(s)}return(n.length||i.length)&&(r.push([[],n,i]),n=[],i=[]),r}applyRematchMatching(t,r,n){let i=t.length*r.length,a=Math.max.apply(null,[0].concat(t.concat(r).map(o=>o.content.length)));return i<this.config.matchingMaxComparisons&&a<this.config.maxLineSizeInBlockForComparison&&(this.config.matching===\"lines\"||this.config.matching===\"words\")?n(t,r):[[t,r]]}processChangedLines(t,r,n,i){let a={right:\"\",left:\"\"},s=Math.max(n.length,i.length);for(let o=0;o<s;o++){let c=n[o],l=i[o],u=c!==void 0&&l!==void 0?hd(c.content,l.content,r,this.config):void 0,f=c!==void 0&&c.oldNumber!==void 0?Object.assign(Object.assign({},u!==void 0?{prefix:u.oldLine.prefix,content:u.oldLine.content,type:Et.DELETE_CHANGES}:Object.assign(Object.assign({},jr(c.content,r)),{type:Qs(c.type)})),{oldNumber:c.oldNumber,newNumber:c.newNumber}):void 0,d=l!==void 0&&l.newNumber!==void 0?Object.assign(Object.assign({},u!==void 0?{prefix:u.newLine.prefix,content:u.newLine.content,type:Et.INSERT_CHANGES}:Object.assign(Object.assign({},jr(l.content,r)),{type:Qs(l.type)})),{oldNumber:l.oldNumber,newNumber:l.newNumber}):void 0,{left:h,right:p}=this.generateLineHtml(t,f,d);a.left+=h,a.right+=p}return a}generateLineHtml(t,r,n){return{left:this.generateSingleLineHtml(t,r),right:this.generateSingleLineHtml(t,n)}}generateSingleLineHtml(t,r){if(r===void 0)return\"\";let n=this.hoganUtils.render(AC,\"numbers\",{oldNumber:r.oldNumber||\"\",newNumber:r.newNumber||\"\"});return this.hoganUtils.render(Ql,\"line\",{type:r.type,lineClass:\"d2h-code-linenumber\",contentClass:\"d2h-code-line\",prefix:r.prefix===\" \"?\"&nbsp;\":r.prefix,content:r.content,lineNumber:n,line:r,file:t})}};g();var S0=Object.assign(Object.assign({},Aa),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),tc=\"generic\",jB=\"side-by-side\",BB=\"icon\",HB=\"tag\",rc=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},S0),r)}render(t){let r=t.map(n=>{let i;return n.blocks.length?i=this.generateFileHtml(n):i=this.generateEmptyDiff(),this.makeFileDiffHtml(n,i)}).join(`\n`);return this.hoganUtils.render(tc,\"wrapper\",{colorScheme:eo(this.config.colorScheme),content:r})}makeFileDiffHtml(t,r){if(this.config.renderNothingWhenEmpty&&Array.isArray(t.blocks)&&t.blocks.length===0)return\"\";let n=this.hoganUtils.template(jB,\"file-diff\"),i=this.hoganUtils.template(tc,\"file-path\"),a=this.hoganUtils.template(BB,\"file\"),s=this.hoganUtils.template(HB,ro(t));return n.render({file:t,fileHtmlId:to(t),diffs:r,filePath:i.render({fileDiffName:ka(t)},{fileIcon:a,fileTag:s})})}generateEmptyDiff(){return{right:\"\",left:this.hoganUtils.render(tc,\"empty-diff\",{contentClass:\"d2h-code-side-line\",CSSLineClass:Et})}}generateFileHtml(t){let r=Js(Ks(n=>jr(n.content,t.isCombined).content));return t.blocks.map(n=>{let i={left:this.makeHeaderHtml(n.header,t),right:this.makeHeaderHtml(\"\")};return this.applyLineGroupping(n).forEach(([a,s,o])=>{if(s.length&&o.length&&!a.length)this.applyRematchMatching(s,o,r).map(([c,l])=>{let{left:u,right:f}=this.processChangedLines(t.isCombined,c,l);i.left+=u,i.right+=f});else if(a.length)a.forEach(c=>{let{prefix:l,content:u}=jr(c.content,t.isCombined),{left:f,right:d}=this.generateLineHtml({type:Et.CONTEXT,prefix:l,content:u,number:c.oldNumber},{type:Et.CONTEXT,prefix:l,content:u,number:c.newNumber});i.left+=f,i.right+=d});else if(s.length||o.length){let{left:c,right:l}=this.processChangedLines(t.isCombined,s,o);i.left+=c,i.right+=l}else console.error(\"未知状态在处理行组时达到\",a,s,o)}),i}).reduce((n,i)=>({left:n.left+i.left,right:n.right+i.right}),{left:\"\",right:\"\"})}applyLineGroupping(t){let r=[],n=[],i=[];for(let a=0;a<t.lines.length;a++){let s=t.lines[a];(s.type!==He.INSERT&&i.length||s.type===He.CONTEXT&&n.length>0)&&(r.push([[],n,i]),n=[],i=[]),s.type===He.CONTEXT?r.push([[s],[],[]]):s.type===He.INSERT&&n.length===0?r.push([[],[],[s]]):s.type===He.INSERT&&n.length>0?i.push(s):s.type===He.DELETE&&n.push(s)}return(n.length||i.length)&&(r.push([[],n,i]),n=[],i=[]),r}applyRematchMatching(t,r,n){let i=t.length*r.length,a=Math.max.apply(null,[0].concat(t.concat(r).map(o=>o.content.length)));return i<this.config.matchingMaxComparisons&&a<this.config.maxLineSizeInBlockForComparison&&(this.config.matching===\"lines\"||this.config.matching===\"words\")?n(t,r):[[t,r]]}makeHeaderHtml(t,r){return this.hoganUtils.render(tc,\"block-header\",{CSSLineClass:Et,blockHeader:r!=null&&r.isTooBig?t:Li(t),lineClass:\"d2h-code-side-linenumber\",contentClass:\"d2h-code-side-line\"})}processChangedLines(t,r,n){let i={right:\"\",left:\"\"},a=Math.max(r.length,n.length);for(let s=0;s<a;s++){let o=r[s],c=n[s],l=o!==void 0&&c!==void 0?hd(o.content,c.content,t,this.config):void 0,u=o!==void 0&&o.oldNumber!==void 0?Object.assign(Object.assign({},l!==void 0?{prefix:l.oldLine.prefix,content:l.oldLine.content,type:Et.DELETE_CHANGES}:Object.assign(Object.assign({},jr(o.content,t)),{type:Qs(o.type)})),{number:o.oldNumber}):void 0,f=c!==void 0&&c.newNumber!==void 0?Object.assign(Object.assign({},l!==void 0?{prefix:l.newLine.prefix,content:l.newLine.content,type:Et.INSERT_CHANGES}:Object.assign(Object.assign({},jr(c.content,t)),{type:Qs(c.type)})),{number:c.newNumber}):void 0,{left:d,right:h}=this.generateLineHtml(u,f);i.left+=d,i.right+=h}return i}generateLineHtml(t,r){return{left:this.generateSingleHtml(t),right:this.generateSingleHtml(r)}}generateSingleHtml(t){let r=\"d2h-code-side-linenumber\",n=\"d2h-code-side-line\";return this.hoganUtils.render(tc,\"line\",{type:(t==null?void 0:t.type)||`${Et.CONTEXT} d2h-emptyplaceholder`,lineClass:t!==void 0?r:`${r} d2h-code-side-emptyplaceholder`,contentClass:t!==void 0?n:`${n} d2h-code-side-emptyplaceholder`,prefix:(t==null?void 0:t.prefix)===\" \"?\"&nbsp;\":t==null?void 0:t.prefix,content:t==null?void 0:t.content,lineNumber:t==null?void 0:t.number})}};g();var T0=ze(k0());g();var lt=ze(k0()),nt={};nt[\"file-summary-line\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<li class=\"d2h-file-list-line\">'),n.b(`\n`+r),n.b('    <span class=\"d2h-file-name-wrapper\">'),n.b(`\n`+r),n.b(n.rp(\"<fileIcon0\",e,t,\"      \")),n.b('      <a href=\"#'),n.b(n.v(n.f(\"fileHtmlId\",e,t,0))),n.b('\" class=\"d2h-file-name\">'),n.b(n.v(n.f(\"fileName\",e,t,0))),n.b(\"</a>\"),n.b(`\n`+r),n.b('      <span class=\"d2h-file-stats\">'),n.b(`\n`+r),n.b('          <span class=\"d2h-lines-added\">'),n.b(n.v(n.f(\"addedLines\",e,t,0))),n.b(\"</span>\"),n.b(`\n`+r),n.b('          <span class=\"d2h-lines-deleted\">'),n.b(n.v(n.f(\"deletedLines\",e,t,0))),n.b(\"</span>\"),n.b(`\n`+r),n.b(\"      </span>\"),n.b(`\n`+r),n.b(\"    </span>\"),n.b(`\n`+r),n.b(\"</li>\"),n.fl()},partials:{\"<fileIcon0\":{name:\"文件图标\",partials:{},subs:{}}},subs:{}});nt[\"file-summary-wrapper\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div class=\"d2h-file-list-wrapper '),n.b(n.v(n.f(\"colorScheme\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('    <div class=\"d2h-file-list-header\">'),n.b(`\n`+r),n.b('        <span class=\"d2h-file-list-title\">Files changed ('),n.b(n.v(n.f(\"filesNumber\",e,t,0))),n.b(\")</span>\"),n.b(`\n`+r),n.b('        <a class=\"d2h-file-switch d2h-hide\">hide</a>'),n.b(`\n`+r),n.b('        <a class=\"d2h-file-switch d2h-show\">show</a>'),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b('    <ol class=\"d2h-file-list\">'),n.b(`\n`+r),n.b(\"    \"),n.b(n.t(n.f(\"files\",e,t,0))),n.b(`\n`+r),n.b(\"    </ol>\"),n.b(`\n`+r),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"generic-block-header\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b(\"<tr>\"),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.f(\"lineClass\",e,t,0))),n.b(\" \"),n.b(n.v(n.d(\"CSSLineClass.INFO\",e,t,0))),n.b('\"></td>'),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.d(\"CSSLineClass.INFO\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('        <div class=\"'),n.b(n.v(n.f(\"contentClass\",e,t,0))),n.b('\">'),n.s(n.f(\"blockHeader\",e,t,1),e,t,0,156,173,\"{{ }}\")&&(n.rs(e,t,function(i,a,s){s.b(s.t(s.f(\"blockHeader\",i,a,0)))}),e.pop()),n.s(n.f(\"blockHeader\",e,t,1),e,t,1,0,0,\"\")||n.b(\"&nbsp;\"),n.b(\"</div>\"),n.b(`\n`+r),n.b(\"    </td>\"),n.b(`\n`+r),n.b(\"</tr>\"),n.fl()},partials:{},subs:{}});nt[\"generic-empty-diff\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b(\"<tr>\"),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.d(\"CSSLineClass.INFO\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('        <div class=\"'),n.b(n.v(n.f(\"contentClass\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b(\"            文件没有更改\"),n.b(`\n`+r),n.b(\"        </div>\"),n.b(`\n`+r),n.b(\"    </td>\"),n.b(`\n`+r),n.b(\"</tr>\"),n.fl()},partials:{},subs:{}});nt[\"generic-file-path\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-file-name-wrapper\">'),n.b(`\n`+r),n.b(n.rp(\"<fileIcon0\",e,t,\"    \")),n.b('    <span class=\"d2h-file-name\">'),n.b(n.v(n.f(\"fileDiffName\",e,t,0))),n.b(\"</span>\"),n.b(`\n`+r),n.b(n.rp(\"<fileTag1\",e,t,\"    \")),n.b(\"</span>\"),n.b(`\n`+r),n.b('<label class=\"d2h-file-collapse\">'),n.b(`\n`+r),n.b('    <input class=\"d2h-file-collapse-input\" type=\"checkbox\" name=\"viewed\" value=\"viewed\">'),n.b(`\n`+r),n.b(\"    Viewed\"),n.b(`\n`+r),n.b(\"</label>\"),n.fl()},partials:{\"<fileIcon0\":{name:\"文件图标\",partials:{},subs:{}},\"<fileTag1\":{name:\"文件标签\",partials:{},subs:{}}},subs:{}});nt[\"generic-line\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b(\"<tr>\"),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.f(\"lineClass\",e,t,0))),n.b(\" \"),n.b(n.v(n.f(\"type\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b(\"      \"),n.b(n.t(n.f(\"lineNumber\",e,t,0))),n.b(`\n`+r),n.b(\"    </td>\"),n.b(`\n`+r),n.b('    <td class=\"'),n.b(n.v(n.f(\"type\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('        <div class=\"'),n.b(n.v(n.f(\"contentClass\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.s(n.f(\"prefix\",e,t,1),e,t,0,162,238,\"{{ }}\")&&(n.rs(e,t,function(i,a,s){s.b('            <span class=\"d2h-code-line-prefix\">'),s.b(s.t(s.f(\"prefix\",i,a,0))),s.b(\"</span>\"),s.b(`\n`+r)}),e.pop()),n.s(n.f(\"prefix\",e,t,1),e,t,1,0,0,\"\")||(n.b('            <span class=\"d2h-code-line-prefix\">&nbsp;</span>'),n.b(`\n`+r)),n.s(n.f(\"content\",e,t,1),e,t,0,371,445,\"{{ }}\")&&(n.rs(e,t,function(i,a,s){s.b('            <span class=\"d2h-code-line-ctn\">'),s.b(s.t(s.f(\"content\",i,a,0))),s.b(\"</span>\"),s.b(`\n`+r)}),e.pop()),n.s(n.f(\"content\",e,t,1),e,t,1,0,0,\"\")||(n.b('            <span class=\"d2h-code-line-ctn\"><br></span>'),n.b(`\n`+r)),n.b(\"        </div>\"),n.b(`\n`+r),n.b(\"    </td>\"),n.b(`\n`+r),n.b(\"</tr>\"),n.fl()},partials:{},subs:{}});nt[\"generic-wrapper\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div class=\"d2h-wrapper '),n.b(n.v(n.f(\"colorScheme\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b(\"    \"),n.b(n.t(n.f(\"content\",e,t,0))),n.b(`\n`+r),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file-added\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon d2h-added\" height=\"16\" title=\"added\" version=\"1.1\" viewBox=\"0 0 14 16\"'),n.b(`\n`+r),n.b('     width=\"14\">'),n.b(`\n`+r),n.b('    <path d=\"M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file-changed\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon d2h-changed\" height=\"16\" title=\"modified\" version=\"1.1\"'),n.b(`\n`+r),n.b('     viewBox=\"0 0 14 16\" width=\"14\">'),n.b(`\n`+r),n.b('    <path d=\"M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file-deleted\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon d2h-deleted\" height=\"16\" title=\"removed\" version=\"1.1\"'),n.b(`\n`+r),n.b('     viewBox=\"0 0 14 16\" width=\"14\">'),n.b(`\n`+r),n.b('    <path d=\"M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM11 9H3V7h8v2z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file-renamed\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon d2h-moved\" height=\"16\" title=\"renamed\" version=\"1.1\"'),n.b(`\n`+r),n.b('     viewBox=\"0 0 14 16\" width=\"14\">'),n.b(`\n`+r),n.b('    <path d=\"M6 9H3V7h3V4l5 4-5 4V9z m8-7v12c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h12c0.55 0 1 0.45 1 1z m-1 0H1v12h12V2z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"icon-file\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<svg aria-hidden=\"true\" class=\"d2h-icon\" height=\"16\" version=\"1.1\" viewBox=\"0 0 12 16\" width=\"12\">'),n.b(`\n`+r),n.b('    <path d=\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\"></path>'),n.b(`\n`+r),n.b(\"</svg>\"),n.fl()},partials:{},subs:{}});nt[\"line-by-line-file-diff\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div id=\"'),n.b(n.v(n.f(\"fileHtmlId\",e,t,0))),n.b('\" class=\"d2h-file-wrapper\" data-lang=\"'),n.b(n.v(n.d(\"file.language\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('    <div class=\"d2h-file-header\">'),n.b(`\n`+r),n.b(\"    \"),n.b(n.t(n.f(\"filePath\",e,t,0))),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b('    <div class=\"d2h-file-diff\">'),n.b(`\n`+r),n.b('        <div class=\"d2h-code-wrapper\">'),n.b(`\n`+r),n.b('            <table class=\"d2h-diff-table\">'),n.b(`\n`+r),n.b('                <tbody class=\"d2h-diff-tbody\">'),n.b(`\n`+r),n.b(\"                \"),n.b(n.t(n.f(\"diffs\",e,t,0))),n.b(`\n`+r),n.b(\"                </tbody>\"),n.b(`\n`+r),n.b(\"            </table>\"),n.b(`\n`+r),n.b(\"        </div>\"),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"line-by-line-numbers\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div class=\"line-num1\">'),n.b(n.v(n.f(\"oldNumber\",e,t,0))),n.b(\"</div>\"),n.b(`\n`+r),n.b('<div class=\"line-num2\">'),n.b(n.v(n.f(\"newNumber\",e,t,0))),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"side-by-side-file-diff\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<div id=\"'),n.b(n.v(n.f(\"fileHtmlId\",e,t,0))),n.b('\" class=\"d2h-file-wrapper\" data-lang=\"'),n.b(n.v(n.d(\"file.language\",e,t,0))),n.b('\">'),n.b(`\n`+r),n.b('    <div class=\"d2h-file-header\">'),n.b(`\n`+r),n.b(\"      \"),n.b(n.t(n.f(\"filePath\",e,t,0))),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b('    <div class=\"d2h-files-diff\">'),n.b(`\n`+r),n.b('        <div class=\"d2h-file-side-diff\">'),n.b(`\n`+r),n.b('            <div class=\"d2h-code-wrapper\">'),n.b(`\n`+r),n.b('                <table class=\"d2h-diff-table\">'),n.b(`\n`+r),n.b('                    <tbody class=\"d2h-diff-tbody\">'),n.b(`\n`+r),n.b(\"                    \"),n.b(n.t(n.d(\"diffs.left\",e,t,0))),n.b(`\n`+r),n.b(\"                    </tbody>\"),n.b(`\n`+r),n.b(\"                </table>\"),n.b(`\n`+r),n.b(\"            </div>\"),n.b(`\n`+r),n.b(\"        </div>\"),n.b(`\n`+r),n.b('        <div class=\"d2h-file-side-diff\">'),n.b(`\n`+r),n.b('            <div class=\"d2h-code-wrapper\">'),n.b(`\n`+r),n.b('                <table class=\"d2h-diff-table\">'),n.b(`\n`+r),n.b('                    <tbody class=\"d2h-diff-tbody\">'),n.b(`\n`+r),n.b(\"                    \"),n.b(n.t(n.d(\"diffs.right\",e,t,0))),n.b(`\n`+r),n.b(\"                    </tbody>\"),n.b(`\n`+r),n.b(\"                </table>\"),n.b(`\n`+r),n.b(\"            </div>\"),n.b(`\n`+r),n.b(\"        </div>\"),n.b(`\n`+r),n.b(\"    </div>\"),n.b(`\n`+r),n.b(\"</div>\"),n.fl()},partials:{},subs:{}});nt[\"tag-file-added\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-tag d2h-added d2h-added-tag\">ADDED</span>'),n.fl()},partials:{},subs:{}});nt[\"tag-file-changed\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-tag d2h-changed d2h-changed-tag\">CHANGED</span>'),n.fl()},partials:{},subs:{}});nt[\"tag-file-deleted\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-tag d2h-deleted d2h-deleted-tag\">DELETED</span>'),n.fl()},partials:{},subs:{}});nt[\"tag-file-renamed\"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||\"\"),n.b('<span class=\"d2h-tag d2h-moved d2h-moved-tag\">RENAMED</span>'),n.fl()},partials:{},subs:{}});var nc=class{constructor({compiledTemplates:t={},rawTemplates:r={}}){let n=Object.entries(r).reduce((i,[a,s])=>{let o=T0.compile(s,{asString:!1});return Object.assign(Object.assign({},i),{[a]:o})},{});this.preCompiledTemplates=Object.assign(Object.assign(Object.assign({},nt),t),n)}static compile(t){return T0.compile(t,{asString:!1})}render(t,r,n,i,a){let s=this.templateKey(t,r);try{return this.preCompiledTemplates[s].render(n,i,a)}catch(o){throw new Error(`Could not find template to render '${s}'`)}}template(t,r){return this.preCompiledTemplates[this.templateKey(t,r)]}templateKey(t,r){return`${t}-${r}`}};var GB=Object.assign(Object.assign(Object.assign({},x0),S0),{outputFormat:cC.LINE_BY_LINE,drawFileList:!0});function PC(e,t={}){let r=Object.assign(Object.assign({},GB),t),n=typeof e==\"string\"?vC(e,r):e,i=new nc(r),{colorScheme:a}=r,s={colorScheme:a},o=r.drawFileList?new pd(i,s).render(n):\"\",c=r.outputFormat===\"side-by-side\"?new rc(i,r).render(n):new ec(i,r).render(n);return o+c}var gd=require(\"obsidian\");var Ta=class extends gd.ItemView{constructor(r,n){super(r);this.plugin=n;this.gettingDiff=!1;this.parser=new DOMParser,this.navigation=!0,this.gitRefreshRef=this.app.workspace.on(\"obsidian-git:status-changed\",()=>{this.refresh().catch(console.error)})}getViewType(){return ki.type}getDisplayText(){var r;if(((r=this.state)==null?void 0:r.bFile)!=null){let n=this.state.bFile.split(\"/\").last();return n!=null&&n.endsWith(\".md\")&&(n=n.slice(0,-3)),`Diff: ${n}`}return ki.name}getIcon(){return ki.icon}async setState(r,n){this.state=r,gd.Platform.isMobile&&(this.leaf.view.titleEl.textContent=this.getDisplayText()),await this.refresh()}getState(){return this.state}onClose(){return this.app.workspace.offref(this.gitRefreshRef),this.app.workspace.offref(this.gitViewRefreshRef),super.onClose()}async onOpen(){return await this.refresh(),super.onOpen()}async refresh(){var r;if((r=this.state)!=null&&r.bFile&&!this.gettingDiff&&this.plugin.gitManager){this.gettingDiff=!0;try{let n=await this.plugin.gitManager.getDiffString(this.state.bFile,this.state.aRef==\"HEAD\",this.state.bRef);this.contentEl.empty();let i=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);if(!n){if(this.plugin.gitManager instanceof Te&&await this.plugin.gitManager.isTracked(this.state.bFile))n=[`--- ${this.state.aFile}`,`+++ ${this.state.bFile}`,\"\"].join(`\n`);else if(await this.app.vault.adapter.exists(i)){let a=await this.app.vault.adapter.read(i);n=[...`--- /dev/null\n+++ ${this.state.bFile}\n@@ -0,0 +1,${a.split(`\n`).length} @@`.split(`\n`),...a.split(`\n`).map(o=>`+${o}`)].join(`\n`)}}if(n){let a=this.parser.parseFromString(PC(n),\"text/html\").querySelector(\".d2h-file-diff\");this.contentEl.append(a)}else{let a=this.contentEl.createDiv({cls:\"obsidian-git-center\"});a.createSpan({text:\"\\u26A0\\uFE0F\",attr:{style:\"font-size: 2em\"}}),a.createEl(\"br\"),a.createSpan({text:\"文件未找到:\"+this.state.bFile})}}finally{this.gettingDiff=!1}}}};g();var W3=require(\"obsidian\");g();g();g();var RC=\"5\";typeof window!=\"undefined\"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(RC);g();g();var no=\"[\",Ca=\"[!\",Pa=\"]\",Di={};var ct=Symbol(),qt=Symbol(\"filename\"),MC=Symbol(\"hmr\");g();g();var zB=[\"allowfullscreen\",\"async\",\"autofocus\",\"autoplay\",\"checked\",\"controls\",\"default\",\"disabled\",\"formnovalidate\",\"hidden\",\"indeterminate\",\"ismap\",\"loop\",\"multiple\",\"muted\",\"nomodule\",\"novalidate\",\"open\",\"playsinline\",\"readonly\",\"required\",\"reversed\",\"seamless\",\"selected\",\"webkitdirectory\"];var oZ=[...zB,\"formNoValidate\",\"isMap\",\"noModule\",\"playsInline\",\"readOnly\",\"value\",\"inert\",\"volume\",\"defaultValue\",\"defaultChecked\",\"srcObject\"];var VB=[\"touchstart\",\"touchmove\"];function OC(e){return VB.includes(e)}g();g();g();var vd=!0;g();var z=!1;g();var sn=Array.isArray,ic=Array.from,C0=Object.keys,Mt=Object.defineProperty,Br=Object.getOwnPropertyDescriptor,P0=Object.getOwnPropertyDescriptors,R0=Object.prototype,IC=Array.prototype,Ra=Object.getPrototypeOf;function M0(e){return typeof e==\"function\"}var _r=()=>{};function yd(e){for(var t=0;t<e.length;t++)e[t]()}g();g();var xr=Symbol(\"$state\"),Ma=Symbol(\"$state metadata\"),wd=Symbol(\"legacy props\"),FC=Symbol(\"\");g();g();function bd(e){return e===this.v}function O0(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e==\"object\"||typeof e==\"function\"}function io(e){return!O0(e,this.v)}g();function I0(){if(z){let e=new Error(\"bind_invalid_checkbox_value\\nUsing `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/bind_invalid_checkbox_value\")}function $C(){if(z){let e=new Error(`derived_references_self\nA derived value cannot reference itself recursively\nhttps://svelte.dev/e/derived_references_self`);throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/derived_references_self\")}function LC(e){if(z){let t=new Error(`effect_in_teardown\n\\`${e}\\` cannot be used inside an effect cleanup function\nhttps://svelte.dev/e/effect_in_teardown`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/effect_in_teardown\")}function DC(){if(z){let e=new Error(\"effect_in_unowned_derived\\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/effect_in_unowned_derived\")}function NC(e){if(z){let t=new Error(`effect_orphan\n\\`${e}\\` can only be used inside an effect (e.g. during component initialisation)\nhttps://svelte.dev/e/effect_orphan`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/effect_orphan\")}function jC(){if(z){let e=new Error(`effect_update_depth_exceeded\nMaximum update depth exceeded. This can happen when a reactive block or effect repeatedly sets a new value. Svelte limits the number of nested updates to prevent infinite loops\nhttps://svelte.dev/e/effect_update_depth_exceeded`);throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/effect_update_depth_exceeded\")}function BC(){if(z){let e=new Error(`hydration_failed\nFailed to hydrate the application\nhttps://svelte.dev/e/hydration_failed`);throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/hydration_failed\")}function HC(e){if(z){let t=new Error(`props_invalid_value\nCannot do \\`bind:${e}={undefined}\\` when \\`${e}\\` has a fallback value\nhttps://svelte.dev/e/props_invalid_value`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/props_invalid_value\")}function UC(e){if(z){let t=new Error(`rune_outside_svelte\nThe \\`${e}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\nhttps://svelte.dev/e/rune_outside_svelte`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/rune_outside_svelte\")}function GC(){if(z){let e=new Error(\"state_descriptors_fixed\\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\\nhttps://svelte.dev/e/state_descriptors_fixed\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/state_descriptors_fixed\")}function zC(){if(z){let e=new Error(\"state_prototype_fixed\\nCannot set prototype of `$state` object\\nhttps://svelte.dev/e/state_prototype_fixed\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/state_prototype_fixed\")}function VC(){if(z){let e=new Error(\"state_unsafe_local_read\\nReading state that was created inside the same derived is forbidden. Consider using `untrack` to read locally created state\\nhttps://svelte.dev/e/state_unsafe_local_read\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/state_unsafe_local_read\")}function WC(){if(z){let e=new Error(\"state_unsafe_mutation\\nUpdating state inside a derived or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\\nhttps://svelte.dev/e/state_unsafe_mutation\");throw e.name=\"Svelte error\",e}else throw new Error(\"https://svelte.dev/e/state_unsafe_mutation\")}g();var Jn=!1,Qn=!1;g();g();g();var ac=null;function ei(e){let t=Error(),r=t.stack;if(r){let n=r.split(`\n`),i=[`\n`];for(let a=0;a<n.length;a++){let s=n[a];if(s!==\"Error\"){if(s.includes(\"validate_each_keys\"))return null;s.includes(\"svelte/src/internal\")||i.push(s)}}if(i.length===1)return null;Mt(t,\"stack\",{value:i.join(`\n`)}),Mt(t,\"name\",{value:`${e}Error`})}return t}var Oa=new Set;function L0(e){Oa=e}function ut(e,t){var r={f:0,v:e,reactions:null,equals:bd,version:0};return z&&Qn&&(r.created=t!=null?t:ei(\"CreatedAt\"),r.debug=null),r}function ft(e){return qB(ut(e))}function Ni(e,t=!1){var n,i;let r=ut(e);return t||(r.equals=io),Jn&&he!==null&&he.l!==null&&((i=(n=he.l).s)!=null?i:n.s=[]).push(r),r}function qB(e){return fe!==null&&fe.f&2&&(on===null?XC([e]):on.push(e)),e}function re(e,t){return fe!==null&&ji()&&fe.f&18&&(on===null||!on.includes(e))&&WC(),so(e,t)}function so(e,t){if(!e.equals(t)&&(e.v=t,e.version=_d(),z&&Qn&&(e.updated=ei(\"UpdatedAt\")),YC(e,2048),ji()&&te!==null&&te.f&1024&&!(te.f&32)&&(At!==null&&At.includes(e)?(Xt(te,2048),oo(te)):ti===null?ZC([e]):ti.push(e)),z&&Oa.size>0)){let n=Array.from(Oa);var r=ri;ao(!0);try{for(let i of n)i.f&1024&&Xt(i,4096),Bi(i)&&Fa(i)}finally{ao(r)}Oa.clear()}return t}function YC(e,t){var r=e.reactions;if(r!==null)for(var n=ji(),i=r.length,a=0;a<i;a++){var s=r[a],o=s.f;if(!(o&2048)&&!(!n&&s===te)){if(z&&o&262144){Oa.add(s);continue}Xt(s,t),o&1280&&(o&2?YC(s,4096):oo(s))}}}g();g();g();var oc=\"font-weight: bold\",lc=\"font-weight: normal\";function KC(e,t,r){z?console.warn(`%c[svelte] hydration_attribute_changed\n%cThe \\`${e}\\` attribute on \\`${t}\\` changed its value between server and client renders. The client value, \\`${r}\\`, will be ignored in favour of the server value\nhttps://svelte.dev/e/hydration_attribute_changed`,oc,lc):console.warn(\"https://svelte.dev/e/hydration_attribute_changed\")}function lo(e){z?console.warn(`%c[svelte] hydration_mismatch\n%c${e?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${e}`:\"Hydration failed because the initial UI does not match what was rendered on the server\"}\nhttps://svelte.dev/e/hydration_mismatch`,oc,lc):console.warn(\"https://svelte.dev/e/hydration_mismatch\")}function JC(){z?console.warn(`%c[svelte] lifecycle_double_unmount\n%cTried to unmount a component that was not mounted\nhttps://svelte.dev/e/lifecycle_double_unmount`,oc,lc):console.warn(\"https://svelte.dev/e/lifecycle_double_unmount\")}function D0(e,t){z?console.warn(`%c[svelte] ownership_invalid_mutation\n%c${e?`${e} mutated a value owned by ${t}. This is strongly discouraged. Consider passing values to child components with \\`bind:\\`, or use a callback instead`:\"Mutating a value outside the component that created it is strongly discouraged. Consider passing values to child components with `bind:`, or use a callback instead\"}\nhttps://svelte.dev/e/ownership_invalid_mutation`,oc,lc):console.warn(\"https://svelte.dev/e/ownership_invalid_mutation\")}function xd(e){z?console.warn(`%c[svelte] state_proxy_equality_mismatch\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${e}\\` will produce unexpected results\nhttps://svelte.dev/e/state_proxy_equality_mismatch`,oc,lc):console.warn(\"https://svelte.dev/e/state_proxy_equality_mismatch\")}var ae=!1;function or(e){ae=e}var ue;function Qe(e){if(e===null)throw lo(),Di;return ue=e}function Ot(){return Qe(It(ue))}function B(e){if(ae){if(It(ue)!==null)throw lo(),Di;ue=e}}function co(e=1){if(ae){for(var t=e,r=ue;t--;)r=It(r);ue=r}}function uo(){for(var e=0,t=ue;;){if(t.nodeType===8){var r=t.data;if(r===Pa){if(e===0)return t;e-=1}else(r===no||r===Ca)&&(e+=1)}var n=It(t);t.remove(),t=n}}g();g();g();var YB={},XB=/at (?:.+ \\()?(.+):(\\d+):(\\d+)\\)?$/,ZB=/@(.+):(\\d+):(\\d+)$/;function KB(){var r;let e=new Error().stack;if(!e)return null;let t=[];for(let n of e.split(`\n`)){let i=(r=XB.exec(n))!=null?r:ZB.exec(n);i&&t.push({file:i[1],line:+i[2],column:+i[3]})}return t}function QC(){var t;let e=(t=KB())==null?void 0:t.slice(4);if(!e)return null;for(let r=0;r<e.length;r++){let n=e[r],i=YB[n.file];if(!i){if(r===0)return null;continue}for(let a of i){if(a.end==null)return null;if(a.start.line<n.line&&a.end.line>n.line)return a.component}}return null}var JB=Symbol(\"ADD_OWNER\");function N0(e,t){if(t.owners!==null)for(;e;){if(e.owners===null){t.owners=null;break}for(let r of e.owners)t.owners.add(r);e=e.parent}}function e3(e,t){return e.owners===null?!0:e.owners.has(t)||e.parent!==null&&e3(e.parent,t)}function t3(e){var t,r;return(r=(t=e==null?void 0:e.owners)==null?void 0:t.values().next().value)!=null?r:t3(e.parent)}var QB=!1;function r3(e){if(QB)return;let t=QC();if(t&&!e3(e,t)){let r=t3(e);r[qt]!==t[qt]?D0(t[qt],r[qt]):D0()}}function be(e,t=null,r){var l,u;var n=null;if(z&&Qn&&(n=ei(\"CreatedAt\")),typeof e!=\"object\"||e===null||xr in e)return e;let i=Ra(e);if(i!==R0&&i!==IC)return e;var a=new Map,s=sn(e),o=ut(0);s&&a.set(\"length\",ut(e.length,n));var c;if(z)if(c={parent:t,owners:null},r){let f=(u=(l=r.v)==null?void 0:l[Ma])==null?void 0:u.owners;c.owners=f?new Set(f):null}else c.owners=t===null?he!==null?new Set([he.function]):null:new Set;return new Proxy(e,{defineProperty(f,d,h){(!(\"value\"in h)||h.configurable===!1||h.enumerable===!1||h.writable===!1)&&GC();var p=a.get(d);return p===void 0?(p=ut(h.value,n),a.set(d,p)):re(p,be(h.value,c)),!0},deleteProperty(f,d){var h=a.get(d);if(h===void 0)d in f&&a.set(d,ut(ct,n));else{if(s&&typeof d==\"string\"){var p=a.get(\"length\"),m=Number(d);Number.isInteger(m)&&m<p.v&&re(p,m)}re(h,ct),n3(o)}return!0},get(f,d,h){var b;if(z&&d===Ma)return c;if(d===xr)return e;var p=a.get(d),m=d in f;if(p===void 0&&(!m||(b=Br(f,d))!=null&&b.writable)&&(p=ut(be(m?f[d]:ct,c),n),a.set(d,p)),p!==void 0){var v=R(p);if(z){var y=v==null?void 0:v[Ma];y&&(y==null?void 0:y.parent)!==c&&N0(c,y)}return v===ct?void 0:v}return Reflect.get(f,d,h)},getOwnPropertyDescriptor(f,d){var h=Reflect.getOwnPropertyDescriptor(f,d);if(h&&\"value\"in h){var p=a.get(d);p&&(h.value=R(p))}else if(h===void 0){var m=a.get(d),v=m==null?void 0:m.v;if(m!==void 0&&v!==ct)return{enumerable:!0,configurable:!0,value:v,writable:!0}}return h},has(f,d){var v;if(z&&d===Ma||d===xr)return!0;var h=a.get(d),p=h!==void 0&&h.v!==ct||Reflect.has(f,d);if(h!==void 0||te!==null&&(!p||(v=Br(f,d))!=null&&v.writable)){h===void 0&&(h=ut(p?be(f[d],c):ct,n),a.set(d,h));var m=R(h);if(m===ct)return!1}return p},set(f,d,h,p){var w;var m=a.get(d),v=d in f;if(s&&d===\"length\")for(var y=h;y<m.v;y+=1){var b=a.get(y+\"\");b!==void 0?re(b,ct):y in f&&(b=ut(ct,n),a.set(y+\"\",b))}if(m===void 0?(!v||(w=Br(f,d))!=null&&w.writable)&&(m=ut(void 0,n),re(m,be(h,c)),a.set(d,m)):(v=m.v!==ct,re(m,be(h,c))),z){var x=h==null?void 0:h[Ma];x&&(x==null?void 0:x.parent)!==c&&N0(c,x),r3(c)}var E=Reflect.getOwnPropertyDescriptor(f,d);if(E!=null&&E.set&&E.set.call(p,h),!v){if(s&&typeof d==\"string\"){var _=a.get(\"length\"),k=Number(d);Number.isInteger(k)&&k>=_.v&&re(_,k+1)}n3(o)}return!0},ownKeys(f){R(o);var d=Reflect.ownKeys(f).filter(m=>{var v=a.get(m);return v===void 0||v.v!==ct});for(var[h,p]of a)p.v!==ct&&!(h in f)&&d.push(h);return d},setPrototypeOf(){zC()}})}function n3(e,t=1){re(e,e.v+t)}function Ed(e){return e!==null&&typeof e==\"object\"&&xr in e?e[xr]:e}function i3(){let e=Array.prototype,t=Array.__svelte_cleanup;t&&t();let{indexOf:r,lastIndexOf:n,includes:i}=e;e.indexOf=function(a,s){let o=r.call(this,a,s);if(o===-1){for(let c=s!=null?s:0;c<this.length;c+=1)if(Ed(this[c])===a){xd(\"array.indexOf(...)\");break}}return o},e.lastIndexOf=function(a,s){let o=n.call(this,a,s!=null?s:this.length-1);if(o===-1){for(let c=0;c<=(s!=null?s:this.length-1);c+=1)if(Ed(this[c])===a){xd(\"array.lastIndexOf(...)\");break}}return o},e.includes=function(a,s){let o=i.call(this,a,s);if(!o){for(let c=0;c<this.length;c+=1)if(Ed(this[c])===a){xd(\"array.includes(...)\");break}}return o},Array.__svelte_cleanup=()=>{e.indexOf=r,e.lastIndexOf=n,e.includes=i}}var j0,a3,s3,o3;function Ad(){if(j0===void 0){j0=window,a3=document;var e=Element.prototype,t=Node.prototype;s3=Br(t,\"firstChild\").get,o3=Br(t,\"nextSibling\").get,e.__click=void 0,e.__className=\"\",e.__attributes=null,e.__styles=null,e.__e=void 0,Text.prototype.__t=void 0,z&&(e.__svelte_meta=null,i3())}}function Vr(e=\"\"){return document.createTextNode(e)}function kt(e){return s3.call(e)}function It(e){return o3.call(e)}function H(e,t){if(!ae)return kt(e);var r=kt(ue);if(r===null)r=ue.appendChild(Vr());else if(t&&r.nodeType!==3){var n=Vr();return r==null||r.before(n),Qe(n),n}return Qe(r),r}function cr(e,t){var i,a;if(!ae){var r=kt(e);return r instanceof Comment&&r.data===\"\"?It(r):r}if(t&&((i=ue)==null?void 0:i.nodeType)!==3){var n=Vr();return(a=ue)==null||a.before(n),Qe(n),n}return ue}function Z(e,t=1,r=!1){let n=ae?ue:e;for(var i;t--;)i=n,n=It(n);if(!ae)return n;var a=n==null?void 0:n.nodeType;if(r&&a!==3){var s=Vr();return n===null?i==null||i.after(s):n.before(s),Qe(s),s}return Qe(n),n}function fo(e){e.textContent=\"\"}g();function Ye(e){var i;var t=2050;te===null?t|=256:te.f|=1048576;var r=fe!==null&&fe.f&2?fe:null;let n={children:null,ctx:he,deps:null,equals:bd,f:t,fn:e,reactions:null,v:null,version:0,parent:r!=null?r:te};return z&&Qn&&(n.created=ei(\"CreatedAt\")),r!==null&&((i=r.children)!=null?i:r.children=[]).push(n),n}function G0(e){let t=Ye(e);return t.equals=io,t}function H0(e){var t=e.children;if(t!==null){e.children=null;for(var r=0;r<t.length;r+=1){var n=t[r];n.f&2?cc(n):Ft(n)}}}var B0=[];function e7(e){for(var t=e.parent;t!==null;){if(!(t.f&2))return t;t=t.parent}return null}function z0(e){var t,r=te;if(it(e7(e)),z){let n=Oa;L0(new Set);try{B0.includes(e)&&$C(),B0.push(e),H0(e),t=kd(e)}finally{it(r),L0(n),B0.pop()}}else try{H0(e),t=kd(e)}finally{it(r)}return t}function V0(e){var t=z0(e),r=(ni||e.f&256)&&e.deps!==null?4096:1024;Xt(e,r),e.equals(t)||(e.v=t,e.version=_d())}function cc(e){H0(e),$a(e,0),Xt(e,16384),e.v=e.children=e.deps=e.ctx=e.reactions=null}function c3(e){te===null&&fe===null&&NC(e),fe!==null&&fe.f&256&&DC(),Cd&&LC(e)}function t7(e,t){var r=t.last;r===null?t.last=t.first=e:(r.next=e,e.prev=r,t.last=e)}function La(e,t,r,n=!0){var u;var i=(e&64)!==0,a=te;if(z)for(;a!==null&&a.f&262144;)a=a.parent;var s={ctx:he,deps:null,deriveds:null,nodes_start:null,nodes_end:null,f:e|2048,first:null,fn:t,last:null,next:null,parent:i?null:a,prev:null,teardown:null,transitions:null,version:0};if(z&&(s.component_function=zr),r){var o=ri;try{ao(!0),Fa(s),s.f|=32768}catch(f){throw Ft(s),f}finally{ao(o)}}else t!==null&&oo(s);var c=r&&s.deps===null&&s.first===null&&s.nodes_start===null&&s.teardown===null&&(s.f&1048576)===0;if(!c&&!i&&n&&(a!==null&&t7(s,a),fe!==null&&fe.f&2)){var l=fe;((u=l.children)!=null?u:l.children=[]).push(s)}return s}function qr(e){let t=La(8,null,!1);return Xt(t,1024),t.teardown=e,t}function $t(e){var i;c3(\"$effect\");var t=te!==null&&(te.f&32)!==0&&he!==null&&!he.m;if(z&&Mt(e,\"name\",{value:\"$effect\"}),t){var r=he;((i=r.e)!=null?i:r.e=[]).push({fn:e,effect:te,reaction:fe})}else{var n=Sr(e);return n}}function X0(e){let t=La(64,e,!0);return()=>{Ft(t)}}function u3(e){let t=La(64,e,!0);return(r={})=>new Promise(n=>{r.outro?cn(t,()=>{Ft(t),n(void 0)}):(Ft(t),n(void 0))})}function Sr(e){return La(4,e,!1)}function lr(e){return La(8,e,!0)}function xe(e){return z&&Mt(e,\"name\",{value:\"{expression}\"}),ur(e)}function ur(e,t=0){return La(24|t,e,!0)}function Lt(e,t=!0){return La(40,e,!0,t)}function Z0(e){var t=e.teardown;if(t!==null){let r=Cd,n=fe;W0(!0),Tt(null);try{t.call(null)}finally{W0(r),Tt(n)}}}function K0(e){var t=e.deriveds;if(t!==null){e.deriveds=null;for(var r=0;r<t.length;r+=1)cc(t[r])}}function J0(e,t=!1){var r=e.first;for(e.first=e.last=null;r!==null;){var n=r.next;Ft(r,t),r=n}}function f3(e){for(var t=e.first;t!==null;){var r=t.next;t.f&32||Ft(t),t=r}}function Ft(e,t=!0){var r=!1;if((t||e.f&524288)&&e.nodes_start!==null){for(var n=e.nodes_start,i=e.nodes_end;n!==null;){var a=n===i?null:It(n);n.remove(),n=a}r=!0}J0(e,t&&!r),K0(e),$a(e,0),Xt(e,16384);var s=e.transitions;if(s!==null)for(let c of s)c.stop();Z0(e);var o=e.parent;o!==null&&o.first!==null&&Q0(e),z&&(e.component_function=null),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes_start=e.nodes_end=null}function Q0(e){var t=e.parent,r=e.prev,n=e.next;r!==null&&(r.next=n),n!==null&&(n.prev=r),t!==null&&(t.first===e&&(t.first=n),t.last===e&&(t.last=r))}function cn(e,t){var r=[];Td(e,r,!0),ev(r,()=>{Ft(e),t&&t()})}function ev(e,t){var r=e.length;if(r>0){var n=()=>--r||t();for(var i of e)i.out(n)}else t()}function Td(e,t,r){if(!(e.f&8192)){if(e.f^=8192,e.transitions!==null)for(let s of e.transitions)(s.is_global||r)&&t.push(s);for(var n=e.first;n!==null;){var i=n.next,a=(n.f&65536)!==0||(n.f&32)!==0;Td(n,t,a?r:!1),n=i}}}function Gi(e){d3(e,!0)}function d3(e,t){if(e.f&8192){Bi(e)&&Fa(e),e.f^=8192;for(var r=e.first;r!==null;){var n=r.next,i=(r.f&65536)!==0||(r.f&32)!==0;d3(r,i?t:!1),r=n}if(e.transitions!==null)for(let a of e.transitions)(a.is_global||t)&&a.in()}}g();var Pd=!1,p3=!1,tv=[],h3=[];function m3(){Pd=!1;let e=tv.slice();tv=[],yd(e)}function r7(){p3=!1;let e=h3.slice();h3=[],yd(e)}function fr(e){Pd||(Pd=!0,queueMicrotask(m3)),tv.push(e)}function g3(){Pd&&m3(),p3&&r7()}g();function uc(e){if(z){let t=new Error(`lifecycle_outside_component\n\\`${e}(...)\\` can only be used during component initialisation\nhttps://svelte.dev/e/lifecycle_outside_component`);throw t.name=\"Svelte error\",t}else throw new Error(\"https://svelte.dev/e/lifecycle_outside_component\")}var x3=0,a7=1,v3=new WeakSet,Rd=!1,Md=x3,fc=!1,po=null,ri=!1,Cd=!1;function ao(e){ri=e}function W0(e){Cd=e}var Da=[],mo=0,dc=[],fe=null;function Tt(e){fe=e}var te=null;function it(e){te=e}var on=null;function XC(e){on=e}var At=null,Er=0,ti=null;function ZC(e){ti=e}var S3=1,ni=!1,sc=null;var he=null;var zr=null;function _d(){return++S3}function ji(){return!Jn||he!==null&&he.l===null}function Bi(e){var s,o,c,l;var t=e.f;if(t&2048)return!0;if(t&4096){var r=e.deps,n=(t&256)!==0;if(r!==null){var i;if(t&512){for(i=0;i<r.length;i++)((o=(s=r[i]).reactions)!=null?o:s.reactions=[]).push(e);e.f^=512}for(i=0;i<r.length;i++){var a=r[i];if(Bi(a)&&V0(a),n&&te!==null&&!ni&&!((c=a==null?void 0:a.reactions)!=null&&c.includes(e))&&((l=a.reactions)!=null?l:a.reactions=[]).push(e),a.version>e.version)return!0}}(!n||te!==null&&!ni)&&Xt(e,1024)}return!1}function y3(e,t){for(var r=t;r!==null;){if(r.f&128)try{r.fn(e);return}catch(n){r.f^=128}r=r.parent}throw Rd=!1,e}function w3(e){return(e.f&16384)===0&&(e.parent===null||(e.parent.f&128)===0)}function go(e,t,r,n){var u,f;if(Rd){if(r===null&&(Rd=!1),w3(t))throw e;return}if(r!==null&&(Rd=!0),!z||n===null||!(e instanceof Error)||v3.has(e)){y3(e,t);return}v3.add(e);let i=[],a=(u=t.fn)==null?void 0:u.name;a&&i.push(a);let s=n;for(;s!==null;){if(z){var o=(f=s.function)==null?void 0:f[qt];if(o){let d=o.split(\"/\").pop();i.push(d)}}s=s.p}let c=/Firefox/.test(navigator.userAgent)?\"  \":\"\t\";Mt(e,\"message\",{value:e.message+`\n${i.map(d=>`\n${c}in ${d}`).join(\"\")}\n`}),Mt(e,\"component_stack\",{value:i});let l=e.stack;if(l){let d=l.split(`\n`),h=[];for(let p=0;p<d.length;p++){let m=d[p];m.includes(\"svelte/src/internal\")||h.push(m)}Mt(e,\"stack\",{value:h.join(`\n`)})}if(y3(e,t),w3(t))throw e}function kd(e){var d,h;var t=At,r=Er,n=ti,i=fe,a=ni,s=on,o=he,c=e.f;At=null,Er=0,ti=null,fe=c&96?null:e,ni=!ri&&(c&256)!==0,on=null,he=e.ctx;try{var l=(0,e.fn)(),u=e.deps;if(At!==null){var f;if($a(e,Er),u!==null&&Er>0)for(u.length=Er+At.length,f=0;f<At.length;f++)u[Er+f]=At[f];else e.deps=u=At;if(!ni)for(f=Er;f<u.length;f++)((h=(d=u[f]).reactions)!=null?h:d.reactions=[]).push(e)}else u!==null&&Er<u.length&&($a(e,Er),u.length=Er);return l}finally{At=t,Er=r,ti=n,fe=i,ni=a,on=s,he=o}}function s7(e,t){let r=t.reactions;if(r!==null){var n=r.indexOf(e);if(n!==-1){var i=r.length-1;i===0?r=t.reactions=null:(r[n]=r[i],r.pop())}}r===null&&t.f&2&&(At===null||!At.includes(t))&&(Xt(t,4096),t.f&768||(t.f^=512),$a(t,0))}function $a(e,t){var r=e.deps;if(r!==null)for(var n=t;n<r.length;n++)s7(e,r[n])}function Fa(e){var t=e.f;if(!(t&16384)){Xt(e,1024);var r=te,n=he;if(te=e,z){var i=zr;zr=e.component_function}try{t&16?f3(e):J0(e),K0(e),Z0(e);var a=kd(e);e.teardown=typeof a==\"function\"?a:null,e.version=S3,z&&dc.push(e)}catch(s){go(s,e,r,n||e.ctx)}finally{te=r,z&&(zr=i)}}}function b3(){console.error(\"Last ten effects were: \",dc.slice(-10).map(e=>e.fn)),dc=[]}function E3(){if(mo>1e3){mo=0;try{jC()}catch(e){if(z&&Mt(e,\"stack\",{value:\"\"}),po!==null)if(z)try{go(e,po,null,null)}catch(t){throw b3(),t}else go(e,po,null,null);else throw z&&b3(),e}}mo++}function A3(e){var t=e.length;if(t!==0){E3();var r=ri;ri=!0;try{for(var n=0;n<t;n++){var i=e[n];i.f&1024||(i.f^=1024);var a=[];k3(i,a),o7(a)}}finally{ri=r}}}function o7(e){var t=e.length;if(t!==0)for(var r=0;r<t;r++){var n=e[r];if(!(n.f&24576))try{Bi(n)&&(Fa(n),n.deps===null&&n.first===null&&n.nodes_start===null&&(n.teardown===null?Q0(n):n.fn=null))}catch(i){go(i,n,null,n.ctx)}}}function l7(){if(fc=!1,mo>1001)return;let e=Da;Da=[],A3(e),fc||(mo=0,po=null,z&&(dc=[]))}function oo(e){Md===x3&&(fc||(fc=!0,queueMicrotask(l7))),po=e;for(var t=e;t.parent!==null;){t=t.parent;var r=t.f;if(r&96){if(!(r&1024))return;t.f^=1024}}Da.push(t)}function k3(e,t){var r=e.first,n=[];e:for(;r!==null;){var i=r.f,a=(i&32)!==0,s=a&&(i&1024)!==0,o=r.next;if(!s&&!(i&8192))if(i&8){if(a)r.f^=1024;else try{Bi(r)&&Fa(r)}catch(f){go(f,r,null,r.ctx)}var c=r.first;if(c!==null){r=c;continue}}else i&4&&n.push(r);if(o===null){let f=r.parent;for(;f!==null;){if(e===f)break e;var l=f.next;if(l!==null){r=l;continue e}f=f.parent}}r=o}for(var u=0;u<n.length;u++)c=n[u],t.push(c),k3(c,t)}function vo(e){var t=Md,r=Da;try{E3();let i=[];Md=a7,Da=i,fc=!1,A3(r);var n=e==null?void 0:e();return g3(),(Da.length>0||i.length>0)&&vo(),mo=0,po=null,z&&(dc=[]),n}finally{Md=t,Da=r}}function R(e){var f,d;var t=e.f,r=(t&2)!==0;if(r&&t&16384){var n=z0(e);return cc(e),n}if(sc!==null&&sc.add(e),fe!==null){on!==null&&on.includes(e)&&VC();var i=fe.deps;At===null&&i!==null&&i[Er]===e?Er++:At===null?At=[e]:At.push(e),ti!==null&&te!==null&&te.f&1024&&!(te.f&32)&&ti.includes(e)&&(Xt(te,2048),oo(te))}else if(r&&e.deps===null)for(var a=e,s=a.parent,o=a;s!==null;)if(s.f&2){var c=s;o=c,s=c.parent}else{var l=s;(f=l.deriveds)!=null&&f.includes(o)||((d=l.deriveds)!=null?d:l.deriveds=[]).push(o);break}if(r&&(a=e,Bi(a)&&V0(a)),z&&Qn&&ac!==null&&fe!==null&&ac.reaction===fe){if(e.debug)e.debug();else if(e.created){var u=ac.entries.get(e);u===void 0&&(u={read:[]},ac.entries.set(e,u)),u.read.push(ei(\"TracedAt\"))}}return e.v}function Ue(e){let t=fe;try{return fe=null,e()}finally{fe=t}}var c7=-7169;function Xt(e,t){e.f=e.f&c7|t}function Xe(e,t=!1,r){he={p:he,c:null,e:null,m:!1,s:e,x:null,l:null},Jn&&!t&&(he.l={s:null,u:null,r1:[],r2:ut(!1)}),z&&(he.function=r,zr=r)}function Ze(e){var s,o;let t=he;if(t!==null){e!==void 0&&(t.x=e);let c=t.e;if(c!==null){var r=te,n=fe;t.e=null;try{for(var i=0;i<c.length;i++){var a=c[i];it(a.effect),Tt(a.reaction),Sr(a.fn)}}finally{it(r),Tt(n)}}he=t.p,z&&(zr=(o=(s=t.p)==null?void 0:s.function)!=null?o:null),t.m=!0}return e||{}}if(z){let e=function(t){if(!(t in globalThis)){let r;Object.defineProperty(globalThis,t,{configurable:!0,get:()=>{if(r!==void 0)return r;UC(t)},set:n=>{r=n}})}};e(\"$state\"),e(\"$effect\"),e(\"$derived\"),e(\"$inspect\"),e(\"$props\"),e(\"$bindable\")}g();var T3=new Map;function C3(e,t){var r=T3.get(e);r||(r=new Set,T3.set(e,r)),r.add(t)}g();g();g();g();g();g();function rv(e){ae&&kt(e)!==null&&fo(e)}var P3=!1;function nv(){P3||(P3=!0,document.addEventListener(\"reset\",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(let r of e.target.elements)(t=r.__on_r)==null||t.call(r)})},{capture:!0}))}function Fd(e){var t=fe,r=te;Tt(null),it(null);try{return e()}finally{Tt(t),it(r)}}function iv(e,t,r,n=r){e.addEventListener(t,()=>Fd(r));let i=e.__on_r;i?e.__on_r=()=>{i(),n(!0)}:e.__on_r=()=>n(!0),nv()}var av=new Set,$d=new Set;function R3(e,t,r,n){function i(a){if(n.capture||yo.call(t,a),!a.cancelBubble)return Fd(()=>r.call(this,a))}return e.startsWith(\"pointer\")||e.startsWith(\"touch\")||e===\"wheel\"?fr(()=>{t.addEventListener(e,i,n)}):t.addEventListener(e,i,n),i}function Ar(e,t,r,n,i){var a={capture:n,passive:i},s=R3(e,t,r,a);(t===document.body||t===window||t===document)&&qr(()=>{t.removeEventListener(e,s,a)})}function dt(e){for(var t=0;t<e.length;t++)av.add(e[t]);for(var r of $d)r(e)}function yo(e){var b;var t=this,r=t.ownerDocument,n=e.type,i=((b=e.composedPath)==null?void 0:b.call(e))||[],a=i[0]||e.target,s=0,o=e.__root;if(o){var c=i.indexOf(o);if(c!==-1&&(t===document||t===window)){e.__root=t;return}var l=i.indexOf(t);if(l===-1)return;c<=l&&(s=c)}if(a=i[s]||e.target,a!==t){Mt(e,\"currentTarget\",{configurable:!0,get(){return a||r}});var u=fe,f=te;Tt(null),it(null);try{for(var d,h=[];a!==null;){var p=a.assignedSlot||a.parentNode||a.host||null;try{var m=a[\"__\"+n];if(m!==void 0&&!a.disabled)if(sn(m)){var[v,...y]=m;v.apply(a,[e,...y])}else m.call(a,e)}catch(x){d?h.push(x):d=x}if(e.cancelBubble||p===t||p===null)break;a=p}if(d){for(let x of h)queueMicrotask(()=>{throw x});throw d}}finally{e.__root=t,delete e.currentTarget,Tt(u),it(f)}}}g();var f7;function M3(){f7=void 0}g();g();function Ld(e){var t=document.createElement(\"template\");return t.innerHTML=e,t.content}function Mn(e,t){var r=te;r.nodes_start===null&&(r.nodes_start=e,r.nodes_end=t)}function se(e,t){var r=(t&1)!==0,n=(t&2)!==0,i,a=!e.startsWith(\"<!>\");return()=>{if(ae)return Mn(ue,null),ue;i===void 0&&(i=Ld(a?e:\"<!>\"+e),r||(i=kt(i)));var s=n?document.importNode(i,!0):i.cloneNode(!0);if(r){var o=kt(s),c=s.lastChild;Mn(o,c)}else Mn(s,s);return s}}function ii(){if(ae)return Mn(ue,null),ue;var e=document.createDocumentFragment(),t=document.createComment(\"\"),r=Vr();return e.append(t,r),Mn(t,r),e}function ne(e,t){if(ae){te.nodes_end=ue,Ot();return}e!==null&&e.before(t)}var Dd=!0;function Oe(e,t){var n;var r=t==null?\"\":typeof t==\"object\"?t+\"\":t;r!==((n=e.__t)!=null?n:e.__t=e.nodeValue)&&(e.__t=r,e.nodeValue=r==null?\"\":r+\"\")}function zi(e,t){return O3(e,t)}function ov(e,t){var s;Ad(),t.intro=(s=t.intro)!=null?s:!1;let r=t.target,n=ae,i=ue;try{for(var a=kt(r);a&&(a.nodeType!==8||a.data!==no);)a=It(a);if(!a)throw Di;or(!0),Qe(a),Ot();let o=O3(e,{...t,anchor:a});if(ue===null||ue.nodeType!==8||ue.data!==Pa)throw lo(),Di;return or(!1),o}catch(o){if(o===Di)return t.recover===!1&&BC(),Ad(),fo(r),or(!1),zi(e,t);throw o}finally{or(n),Qe(i),M3()}}var wo=new Map;function O3(e,{target:t,anchor:r,props:n={},events:i,context:a,intro:s=!0}){Ad();var o=new Set,c=f=>{for(var d=0;d<f.length;d++){var h=f[d];if(!o.has(h)){o.add(h);var p=OC(h);t.addEventListener(h,yo,{passive:p});var m=wo.get(h);m===void 0?(document.addEventListener(h,yo,{passive:p}),wo.set(h,1)):wo.set(h,m+1)}}};c(ic(av)),$d.add(c);var l=void 0,u=u3(()=>{var f=r!=null?r:t.appendChild(Vr());return Lt(()=>{if(a){Xe({});var d=he;d.c=a}i&&(n.$$events=i),ae&&Mn(f,null),Dd=s,l=e(f,n)||{},Dd=!0,ae&&(te.nodes_end=ue),a&&Ze()}),()=>{var p;for(var d of o){t.removeEventListener(d,yo);var h=wo.get(d);--h===0?(document.removeEventListener(d,yo),wo.delete(d)):wo.set(d,h)}$d.delete(c),f!==r&&((p=f.parentNode)==null||p.removeChild(f))}});return sv.set(l,u),l}var sv=new WeakMap;function ai(e,t){let r=sv.get(e);return r?(sv.delete(e),r(t)):(z&&JC(),Promise.resolve())}g();g();g();g();function ge(e,t,r=!1){ae&&Ot();var n=e,i=null,a=null,s=ct,o=r?65536:0,c=!1;let l=(f,d=!0)=>{c=!0,u(d,f)},u=(f,d)=>{if(s===(s=f))return;let h=!1;if(ae){let p=n.data===Ca;!!s===p&&(n=uo(),Qe(n),or(!1),h=!0)}s?(i?Gi(i):d&&(i=Lt(()=>d(n))),a&&cn(a,()=>{a=null})):(a?Gi(a):d&&(a=Lt(()=>d(n))),i&&cn(i,()=>{i=null})),h&&or(!0)};ur(()=>{c=!1,t(l),c||u(null,null)},o),ae&&(n=ue)}g();g();g();var hc=null;function kr(e,t){return t}function w7(e,t,r,n){for(var i=[],a=t.length,s=0;s<a;s++)Td(t[s].e,i,!0);var o=a>0&&i.length===0&&r!==null;if(o){var c=r.parentNode;fo(c),c.append(r),n.clear(),Vi(e,t[0].prev,t[a-1].next)}ev(i,()=>{for(var l=0;l<a;l++){var u=t[l];o||(n.delete(u.k),Vi(e,u.prev,u.next)),Ft(u.e,!o)}})}function Tr(e,t,r,n,i,a=null){var s=e,o={flags:t,items:new Map,first:null},c=(t&4)!==0;if(c){var l=e;s=ae?Qe(kt(l)):l.appendChild(Vr())}ae&&Ot();var u=null,f=!1;ur(()=>{var d=r(),h=sn(d)?d:d==null?[]:ic(d),p=h.length;if(f&&p===0)return;f=p===0;let m=!1;if(ae){var v=s.data===Ca;v!==(p===0)&&(s=uo(),Qe(s),or(!1),m=!0)}if(ae){for(var y=null,b,x=0;x<p;x++){if(ue.nodeType===8&&ue.data===Pa){s=ue,m=!0,or(!1);break}var E=h[x],_=n(E,x);b=$3(ue,o,y,null,E,_,x,i,t,r),o.items.set(_,b),y=b}p>0&&Qe(uo())}if(!ae){var k=fe;b7(h,o,s,i,t,(k.f&8192)!==0,n,r)}a!==null&&(p===0?u?Gi(u):u=Lt(()=>a(s)):u!==null&&cn(u,()=>{u=null})),m&&or(!0),r()}),ae&&(s=ue)}function b7(e,t,r,n,i,a,s,o){var Q,de,ee,J;var c=(i&8)!==0,l=(i&3)!==0,u=e.length,f=t.items,d=t.first,h=d,p,m=null,v,y=[],b=[],x,E,_,k;if(c)for(k=0;k<u;k+=1)x=e[k],E=s(x,k),_=f.get(E),_!==void 0&&((Q=_.a)==null||Q.measure(),(v!=null?v:v=new Set).add(_));for(k=0;k<u;k+=1){if(x=e[k],E=s(x,k),_=f.get(E),_===void 0){var w=h?h.e.nodes_start:r;m=$3(w,t,m,m===null?t.first:m.next,x,E,k,n,i,o),f.set(E,m),y=[],b=[],h=m.next;continue}if(l&&_7(_,x,k,i),_.e.f&8192&&(Gi(_.e),c&&((de=_.a)==null||de.unfix(),(v!=null?v:v=new Set).delete(_))),_!==h){if(p!==void 0&&p.has(_)){if(y.length<b.length){var A=b[0],S;m=A.prev;var T=y[0],P=y[y.length-1];for(S=0;S<y.length;S+=1)I3(y[S],A,r);for(S=0;S<b.length;S+=1)p.delete(b[S]);Vi(t,T.prev,P.next),Vi(t,m,T),Vi(t,P,A),h=A,m=P,k-=1,y=[],b=[]}else p.delete(_),I3(_,h,r),Vi(t,_.prev,_.next),Vi(t,_,m===null?t.first:m.next),Vi(t,m,_),m=_;continue}for(y=[],b=[];h!==null&&h.k!==E;)(a||!(h.e.f&8192))&&(p!=null?p:p=new Set).add(h),b.push(h),h=h.next;if(h===null)continue;_=h}y.push(_),m=_,h=_.next}if(h!==null||p!==void 0){for(var O=p===void 0?[]:ic(p);h!==null;)(a||!(h.e.f&8192))&&O.push(h),h=h.next;var j=O.length;if(j>0){var D=i&4&&u===0?r:null;if(c){for(k=0;k<j;k+=1)(ee=O[k].a)==null||ee.measure();for(k=0;k<j;k+=1)(J=O[k].a)==null||J.fix()}w7(t,O,D,f)}}c&&fr(()=>{var Pe;if(v!==void 0)for(_ of v)(Pe=_.a)==null||Pe.apply()}),te.first=t.first&&t.first.e,te.last=m&&m.e}function _7(e,t,r,n){n&1&&so(e.v,t),n&2?so(e.i,r):e.i=r}function $3(e,t,r,n,i,a,s,o,c,l){var u=hc,f=(c&1)!==0,d=(c&16)===0,h=f?d?Ni(i):ut(i):i,p=c&2?ut(s):s;z&&f&&(h.debug=()=>{var v=typeof p==\"number\"?s:p.v;l()[v]});var m={i:p,v:h,k:a,a:null,e:null,prev:r,next:n};hc=m;try{return m.e=Lt(()=>o(e,h,p),ae),m.e.prev=r&&r.e,m.e.next=n&&n.e,r===null?t.first=m:(r.next=m,r.e.next=m.e),n!==null&&(n.prev=m,n.e.prev=m.e),m}finally{hc=u}}function I3(e,t,r){for(var n=e.next?e.next.e.nodes_start:r,i=t?t.e.nodes_start:r,a=e.e.nodes_start;a!==n;){var s=It(a);i.before(a),a=s}}function Vi(e,t,r){t===null?e.first=r:(t.next=r,t.e.next=r&&r.e),r!==null&&(r.prev=t,r.e.prev=t&&t.e)}g();g();g();g();g();g();function gt(e,t){fr(()=>{var i;var r=e.getRootNode(),n=r.host?r:(i=r.head)!=null?i:r.ownerDocument.head;if(!n.querySelector(\"#\"+t.hash)){let a=document.createElement(\"style\");a.id=t.hash,a.textContent=t.code,n.appendChild(a),z&&C3(t.hash,a)}})}g();g();g();g();g();function pe(e,t,r,n){var a;var i=(a=e.__attributes)!=null?a:e.__attributes={};if(ae&&(i[t]=e.getAttribute(t),t===\"src\"||t===\"srcset\"||t===\"href\"&&e.nodeName===\"LINK\")){n||k7(e,t,r!=null?r:\"\");return}i[t]!==(i[t]=r)&&(t===\"style\"&&\"__styles\"in e&&(e.__styles={}),t===\"loading\"&&(e[FC]=r),r==null?e.removeAttribute(t):typeof r!=\"string\"&&A7(e).includes(t)?e[t]=r:e.setAttribute(t,r))}var D3=new Map;function A7(e){var t=D3.get(e.nodeName);if(t)return t;D3.set(e.nodeName,t=[]);for(var r,n=e,i=Element.prototype;i!==n;){r=P0(n);for(var a in r)r[a].set&&t.push(a);n=Ra(n)}return t}function k7(e,t,r){var n;z&&(t===\"srcset\"&&T7(e,r)||uv((n=e.getAttribute(t))!=null?n:\"\",r)||KC(t,e.outerHTML.replace(e.innerHTML,e.innerHTML&&\"...\"),String(r)))}function uv(e,t){return e===t?!0:new URL(e,document.baseURI).href===new URL(t,document.baseURI).href}function N3(e){return e.split(\",\").map(t=>t.trim().split(\" \").filter(Boolean))}function T7(e,t){var r=N3(e.srcset),n=N3(t);return n.length===r.length&&n.every(([i,a],s)=>a===r[s][1]&&(uv(r[s][0],i)||uv(i,r[s][0])))}g();function at(e,t,r){if(r){if(e.classList.contains(t))return;e.classList.add(t)}else{if(!e.classList.contains(t))return;e.classList.remove(t)}}g();g();g();g();var C7=vd?()=>performance.now():()=>Date.now(),un={tick:e=>(vd?requestAnimationFrame:_r)(e),now:()=>C7(),tasks:new Set};function j3(){let e=un.now();un.tasks.forEach(t=>{t.c(e)||(un.tasks.delete(t),t.f())}),un.tasks.size!==0&&un.tick(j3)}function B3(e){let t;return un.tasks.size===0&&un.tick(j3),{promise:new Promise(r=>{un.tasks.add(t={c:e,f:r})}),abort(){un.tasks.delete(t)}}}function Nd(e,t){e.dispatchEvent(new CustomEvent(t))}function O7(e){if(e===\"float\")return\"cssFloat\";if(e===\"offset\")return\"cssOffset\";if(e.startsWith(\"--\"))return e;let t=e.split(\"-\");return t.length===1?t[0]:t[0]+t.slice(1).map(r=>r[0].toUpperCase()+r.slice(1)).join(\"\")}function H3(e){let t={},r=e.split(\";\");for(let n of r){let[i,a]=n.split(\":\");if(!i||a===void 0)break;let s=O7(i.trim());t[s]=a.trim()}return t}var I7=e=>e;function fn(e,t,r,n){var b;var i=(e&1)!==0,a=(e&2)!==0,s=i&&a,o=(e&4)!==0,c=s?\"both\":i?\"in\":\"out\",l,u=t.inert,f,d;function h(){var _;var x=fe,E=te;Tt(null),it(null);try{return l!=null?l:l=r()(t,(_=n==null?void 0:n())!=null?_:{},{direction:c})}finally{Tt(x),it(E)}}var p={is_global:o,in(){var x;if(t.inert=u,!i){d==null||d.abort(),(x=d==null?void 0:d.reset)==null||x.call(d);return}a||f==null||f.abort(),Nd(t,\"introstart\"),f=fv(t,h(),d,1,()=>{Nd(t,\"introend\"),f==null||f.abort(),f=l=void 0})},out(x){if(!a){x==null||x(),l=void 0;return}t.inert=!0,Nd(t,\"outrostart\"),d=fv(t,h(),f,0,()=>{Nd(t,\"outroend\"),x==null||x()})},stop:()=>{f==null||f.abort(),d==null||d.abort()}},m=te;if(((b=m.transitions)!=null?b:m.transitions=[]).push(p),i&&Dd){var v=o;if(!v){for(var y=m.parent;y&&y.f&65536;)for(;(y=y.parent)&&!(y.f&16););v=!y||(y.f&32768)!==0}v&&Sr(()=>{Ue(()=>p.in())})}}function fv(e,t,r,n,i){var a=n===1;if(M0(t)){var s,o=!1;return fr(()=>{if(!o){var v=t({direction:a?\"in\":\"out\"});s=fv(e,v,r,n,i)}}),{abort:()=>{o=!0,s==null||s.abort()},deactivate:()=>s.deactivate(),reset:()=>s.reset(),t:()=>s.t()}}if(r==null||r.deactivate(),!(t!=null&&t.duration))return i(),{abort:_r,deactivate:_r,reset:_r,t:()=>n};let{delay:c=0,css:l,tick:u,easing:f=I7}=t;var d=[];if(a&&r===void 0&&(u&&u(0,1),l)){var h=H3(l(0,1));d.push(h,h)}var p=()=>1-n,m=e.animate(d,{duration:c});return m.onfinish=()=>{var A;var v=(A=r==null?void 0:r.t())!=null?A:1-n;r==null||r.abort();var y=n-v,b=t.duration*Math.abs(y),x=[];if(b>0){if(l)for(var E=Math.ceil(b/16.666666666666668),_=0;_<=E;_+=1){var k=v+y*f(_/E),w=l(k,1-k);x.push(H3(w))}p=()=>{var S=m.currentTime;return v+y*f(S/b)},u&&B3(()=>{if(m.playState!==\"running\")return!1;var S=p();return u(S,1-S),!0})}m=e.animate(x,{duration:b,fill:\"forwards\"}),m.onfinish=()=>{p=()=>n,u==null||u(n,1-n),i()}},{abort:()=>{m&&(m.cancel(),m.effect=null,m.onfinish=_r)},deactivate:()=>{i=_r},reset:()=>{n===0&&(u==null||u(1,0))},t:()=>p()}}g();g();function pv(e,t,r=t){var n=ji();iv(e,\"input\",i=>{z&&e.type===\"checkbox\"&&I0();var a=i?e.defaultValue:e.value;if(a=dv(e)?hv(a):a,r(a),n&&a!==(a=t())){var s=e.selectionStart,o=e.selectionEnd;e.value=a!=null?a:\"\",o!==null&&(e.selectionStart=s,e.selectionEnd=Math.min(o,e.value.length))}}),(ae&&e.defaultValue!==e.value||Ue(t)==null&&e.value)&&r(dv(e)?hv(e.value):e.value),lr(()=>{z&&e.type===\"checkbox\"&&I0();var i=t();dv(e)&&i===hv(e.value)||e.type===\"date\"&&!i&&!e.value||i!==e.value&&(e.value=i!=null?i:\"\")})}function dv(e){var t=e.type;return t===\"number\"||t===\"range\"}function hv(e){return e===\"\"?null:+e}g();g();g();g();g();g();function U3(e,t){return e===t||(e==null?void 0:e[xr])===t}function Ge(e={},t,r,n){return Sr(()=>{var i,a;return lr(()=>{i=a,a=(n==null?void 0:n())||[],Ue(()=>{e!==r(...a)&&(t(e,...a),i&&U3(r(...i),e)&&t(null,...i))})}),()=>{fr(()=>{a&&U3(r(...a),e)&&t(null,...a)})}}),e}g();g();g();g();g();g();g();g();g();function mv(e){he===null&&uc(\"onMount\"),Jn&&he.l!==null?B7(he).m.push(e):$t(()=>{let t=Ue(e);if(typeof t==\"function\")return t})}function G3(e){he===null&&uc(\"onDestroy\"),mv(()=>()=>Ue(e))}function B7(e){var r;var t=e.l;return(r=t.u)!=null?r:t.u={a:[],b:[],m:[]}}var Bd=!1;function gv(e){var t=Bd;try{return Bd=!1,[e(),Bd]}finally{Bd=t}}function z3(e){for(var t=te,r=te;t!==null&&!(t.f&96);)t=t.parent;try{return it(t),e()}finally{it(r)}}function si(e,t,r,n){var w,A;var i=(r&1)!==0,a=!Jn||(r&2)!==0,s=(r&8)!==0,o=(r&16)!==0,c=!1,l;s?[l,c]=gv(()=>e[t]):l=e[t];var u=xr in e||wd in e,f=(A=(w=Br(e,t))==null?void 0:w.set)!=null?A:u&&s&&t in e?S=>e[t]=S:void 0,d=n,h=!0,p=!1,m=()=>(p=!0,h&&(h=!1,o?d=Ue(n):d=n),d);l===void 0&&n!==void 0&&(f&&a&&HC(t),l=m(),f&&f(l));var v;if(a)v=()=>{var S=e[t];return S===void 0?m():(h=!0,p=!1,S)};else{var y=z3(()=>(i?Ye:G0)(()=>e[t]));y.f|=131072,v=()=>{var S=R(y);return S!==void 0&&(d=void 0),S===void 0?d:S}}if(!(r&4))return v;if(f){var b=e.$$legacy;return function(S,T){return arguments.length>0?((!a||!T||b||c)&&f(T?v():S),S):v()}}var x=!1,E=!1,_=Ni(l),k=z3(()=>Ye(()=>{var S=v(),T=R(_);return x?(x=!1,E=!0,T):(E=!1,_.v=S)}));return i||(k.equals=io),function(S,T){if(sc!==null&&(x=E,v(),R(_)),arguments.length>0){let P=T?R(k):a&&s?be(S):S;return k.equals(P)||(x=!0,re(_,P),p&&d!==void 0&&(d=P),Ue(()=>R(k))),S}return R(k)}}g();g();g();g();function V3(e){return new vv(e)}var oi,Yr,vv=class{constructor(t){Pc(this,oi);Pc(this,Yr);var a,s;var r=new Map,n=(o,c)=>{var l=Ni(c);return r.set(o,l),l};let i=new Proxy({...t.props||{},$$events:{}},{get(o,c){var l;return R((l=r.get(c))!=null?l:n(c,Reflect.get(o,c)))},has(o,c){var l;return c===wd?!0:(R((l=r.get(c))!=null?l:n(c,Reflect.get(o,c))),Reflect.has(o,c))},set(o,c,l){var u;return re((u=r.get(c))!=null?u:n(c,l),l),Reflect.set(o,c,l)}});Rc(this,Yr,(t.hydrate?ov:zi)(t.component,{target:t.target,anchor:t.anchor,props:i,context:t.context,intro:(a=t.intro)!=null?a:!1,recover:t.recover})),(!((s=t==null?void 0:t.props)!=null&&s.$$host)||t.sync===!1)&&vo(),Rc(this,oi,i.$$events);for(let o of Object.keys(Bt(this,Yr)))o===\"$set\"||o===\"$destroy\"||o===\"$on\"||Mt(this,o,{get(){return Bt(this,Yr)[o]},set(c){Bt(this,Yr)[o]=c},enumerable:!0});Bt(this,Yr).$set=o=>{Object.assign(i,o)},Bt(this,Yr).$destroy=()=>{ai(Bt(this,Yr))}}$set(t){Bt(this,Yr).$set(t)}$on(t,r){Bt(this,oi)[t]=Bt(this,oi)[t]||[];let n=(...i)=>r.call(this,...i);return Bt(this,oi)[t].push(n),()=>{Bt(this,oi)[t]=Bt(this,oi)[t].filter(i=>i!==n)}}$destroy(){Bt(this,Yr).$destroy()}};oi=new WeakMap,Yr=new WeakMap;var Q7;typeof HTMLElement==\"function\"&&(Q7=class extends HTMLElement{constructor(t,r,n){super();Cr(this,\"$$ctor\");Cr(this,\"$$s\");Cr(this,\"$$c\");Cr(this,\"$$cn\",!1);Cr(this,\"$$d\",{});Cr(this,\"$$r\",!1);Cr(this,\"$$p_d\",{});Cr(this,\"$$l\",{});Cr(this,\"$$l_u\",new Map);Cr(this,\"$$me\");this.$$ctor=t,this.$$s=r,n&&this.attachShadow({mode:\"open\"})}addEventListener(t,r,n){if(this.$$l[t]=this.$$l[t]||[],this.$$l[t].push(r),this.$$c){let i=this.$$c.$on(t,r);this.$$l_u.set(r,i)}super.addEventListener(t,r,n)}removeEventListener(t,r,n){if(super.removeEventListener(t,r,n),this.$$c){let i=this.$$l_u.get(r);i&&(i(),this.$$l_u.delete(r))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(i){return a=>{let s=document.createElement(\"slot\");i!==\"default\"&&(s.name=i),ne(a,s)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;let r={},n=e9(this);for(let i of this.$$s)i in n&&(i===\"default\"&&!this.$$d.children?(this.$$d.children=t(i),r.default=!0):r[i]=t(i));for(let i of this.attributes){let a=this.$$g_p(i.name);a in this.$$d||(this.$$d[a]=yv(a,i.value,this.$$p_d,\"toProp\"))}for(let i in this.$$p_d)!(i in this.$$d)&&this[i]!==void 0&&(this.$$d[i]=this[i],delete this[i]);this.$$c=V3({component:this.$$ctor,target:this.shadowRoot||this,props:{...this.$$d,$$slots:r,$$host:this}}),this.$$me=X0(()=>{lr(()=>{var i;this.$$r=!0;for(let a of C0(this.$$c)){if(!((i=this.$$p_d[a])!=null&&i.reflect))continue;this.$$d[a]=this.$$c[a];let s=yv(a,this.$$d[a],this.$$p_d,\"toAttribute\");s==null?this.removeAttribute(this.$$p_d[a].attribute||a):this.setAttribute(this.$$p_d[a].attribute||a,s)}this.$$r=!1})});for(let i in this.$$l)for(let a of this.$$l[i]){let s=this.$$c.$on(i,a);this.$$l_u.set(a,s)}this.$$l={}}}attributeChangedCallback(t,r,n){var i;this.$$r||(t=this.$$g_p(t),this.$$d[t]=yv(t,n,this.$$p_d,\"toProp\"),(i=this.$$c)==null||i.$set({[t]:this.$$d[t]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(t){return C0(this.$$p_d).find(r=>this.$$p_d[r].attribute===t||!this.$$p_d[r].attribute&&r.toLowerCase()===t)||t}});function yv(e,t,r,n){var a;let i=(a=r[e])==null?void 0:a.type;if(t=i===\"Boolean\"&&typeof t!=\"boolean\"?t!=null:t,!n||!r[e])return t;if(n===\"toAttribute\")switch(i){case\"Object\":case\"Array\":return t==null?null:JSON.stringify(t);case\"Boolean\":return t?\"\":null;case\"Number\":return t==null?null:t;default:return t}else switch(i){case\"Object\":case\"Array\":return t&&JSON.parse(t);case\"Boolean\":return t;case\"Number\":return t!=null?+t:t;default:return t}}function e9(e){let t={};return e.childNodes.forEach(r=>{t[r.slot||\"default\"]=!0}),t}g();g();g();function bo(e,t,r,n){function i(a){return a instanceof r?a:new r(function(s){s(a)})}return new(r||(r=Promise))(function(a,s){function o(u){try{l(n.next(u))}catch(f){s(f)}}function c(u){try{l(n.throw(u))}catch(f){s(f)}}function l(u){u.done?a(u.value):i(u.value).then(o,c)}l((n=n.apply(e,t||[])).next())})}var _v=require(\"obsidian\");g();var wv=require(\"obsidian\");g();function r9(e){let t=e-1;return t*t*t+1}function In(e,{delay:t=0,duration:r=400,easing:n=r9,axis:i=\"y\"}={}){let a=getComputedStyle(e),s=+a.opacity,o=i===\"y\"?\"height\":\"width\",c=parseFloat(a[o]),l=i===\"y\"?[\"top\",\"bottom\"]:[\"left\",\"right\"],u=l.map(y=>`${y[0].toUpperCase()}${y.slice(1)}`),f=parseFloat(a[`padding${u[0]}`]),d=parseFloat(a[`padding${u[1]}`]),h=parseFloat(a[`margin${u[0]}`]),p=parseFloat(a[`margin${u[1]}`]),m=parseFloat(a[`border${u[0]}Width`]),v=parseFloat(a[`border${u[1]}Width`]);return{delay:t,duration:r,easing:n,css:y=>`overflow: hidden;opacity: ${Math.min(y*20,1)*s};${o}: ${y*c}px;padding-${l[0]}: ${y*f}px;padding-${l[1]}: ${y*d}px;margin-${l[0]}: ${y*h}px;margin-${l[1]}: ${y*p}px;border-${l[0]}-width: ${y*m}px;border-${l[1]}-width: ${y*v}px;`}}g();var pc=require(\"obsidian\");var n9=se('<div data-icon=\"go-to-file\" aria-label=\"Open File\" class=\"clickable-icon\"></div>'),i9=se('<main class=\"tree-item nav-file svelte-1wbh8tp\"><div class=\"tree-item-self is-clickable nav-file-title svelte-1wbh8tp\"><div class=\"tree-item-inner nav-file-title-content\"> </div> <div class=\"git-tools\"><div class=\"buttons\"><!></div> <span class=\"type\"> </span></div></div></main>'),a9={hash:\"svelte-1wbh8tp\",code:\"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}\"};function mc(e,t){Xe(t,!0),gt(e,a9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");$t(()=>{for(let y of r)y&&(0,pc.setIcon)(y,y.getAttr(\"data-icon\"))});function i(y){y.stopPropagation(),zs(t.diff.path)?a(y):s(y)}function a(y){var b;y.stopPropagation();let x=t.view.app.vault.getAbstractFileByPath(t.diff.vaultPath);x instanceof pc.TFile&&((b=rn(t.view.app,y))===null||b===void 0||b.openFile(x).catch(E=>t.view.plugin.displayError(E)))}function s(y){var b;t.view.plugin.tools.openDiff({event:y,aFile:(b=t.diff.fromPath)!==null&&b!==void 0?b:t.diff.path,aRef:`${t.diff.hash}^`,bFile:t.diff.path,bRef:t.diff.hash})}var o=i9();o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.diff.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=y=>{var b=n9();b.__click=a,Ge(b,x=>r[0]=x,()=>r==null?void 0:r[0]),Ar(\"auxclick\",b,a),ne(y,b)};ge(h,y=>{t.view.app.vault.getAbstractFileByPath(t.diff.vaultPath)instanceof pc.TFile&&y(p)})}B(d);var m=Z(d,2),v=H(m,!0);B(m),B(f),B(c),B(o),xe(()=>{pe(c,\"data-path\",t.diff.vaultPath),pe(c,\"data-tooltip-position\",R(n)),pe(c,\"aria-label\",t.diff.vaultPath),pe(m,\"data-type\",t.diff.status),Oe(v,t.diff.status)}),Ar(\"auxclick\",o,y=>{y.stopPropagation(),y.button==2?kn(t.view.app,y,t.diff.vaultPath,t.view.leaf,\"git-history\"):i(y)}),ne(e,o),Ze()}dt([\"click\"]);g();var s9=se(\"<div><!></div>\"),o9=(e,t,r)=>t(R(r)),l9=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),c9=se('<div class=\"tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title\"><div data-icon=\"folder\" style=\"padding-right: 5px; display: flex; \"></div> <div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content svelte-1lnl15d\"> </div></div> <!></div>'),u9=se('<main class=\"svelte-1lnl15d\"></main>'),f9={hash:\"svelte-1lnl15d\",code:\"main.svelte-1lnl15d .nav-folder-title-content:where(.svelte-1lnl15d) {display:flex;align-items:center;}\"};function gc(e,t){Xe(t,!0),gt(e,f9);let r=si(t,\"topLevel\",3,!1),n=be({}),i=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");function a(o){n[o.title]=!n[o.title]}var s=u9();Tr(s,21,()=>t.hierarchy.children,kr,(o,c)=>{var l=ii(),u=cr(l);{var f=h=>{var p=s9(),m=H(p);mc(m,{get diff(){return R(c).data},get view(){return t.view}}),B(p),ne(h,p)},d=h=>{var p=c9(),m=H(p);m.__click=[o9,a,c];var v=Z(H(m),2),y=Z(v,2),b=H(y,!0);B(y),B(m);var x=Z(m,2);{var E=_=>{var k=l9(),w=H(k);gc(w,{get hierarchy(){return R(c)},get plugin(){return t.plugin},get view(){return t.view}}),B(k),fn(3,k,()=>In,()=>({duration:150})),ne(_,k)};ge(x,_=>{n[R(c).title]||_(E)})}B(p),xe(()=>{at(p,\"is-collapsed\",n[R(c).title]),pe(m,\"data-tooltip-position\",R(i)),pe(m,\"aria-label\",R(c).vaultPath),at(v,\"is-collapsed\",n[R(c).title]),Oe(b,R(c).title)}),ne(h,p)};ge(u,h=>{R(c).data?h(f):h(d,!1)})}ne(o,l)}),B(s),xe(()=>at(s,\"topLevel\",r())),ne(e,s),Ze()}dt([\"click\"]);var d9=(e,t)=>re(t,!R(t)),h9=se('<div class=\"git-ref\"> </div>'),p9=se('<div class=\"git-author\"> </div>'),m9=se('<div class=\"git-date\"> </div>'),g9=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),v9=se('<main><div class=\"tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title\"><div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div><!> <!> <!> <div class=\"tree-item-inner nav-folder-title-content\"> </div></div></div> <!></div></main>'),y9={hash:\"svelte-45h\",code:\"\"};function bv(e,t){Xe(t,!0),gt(e,y9);let r=Ye(()=>({title:\"\",path:\"\",vaultPath:\"\",children:t.plugin.gitManager.getTreeStructure(t.log.diff.files)})),n=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\"),i=ft(!0);function a(_){let k=_.author.name;if(t.plugin.settings.authorInHistoryView==\"full\")return k;if(t.plugin.settings.authorInHistoryView==\"initials\")return k.split(\" \").filter(A=>A.length>0).map(A=>A[0].toUpperCase()).join(\"\")}var s=v9(),o=H(s),c=H(o);xe(()=>{var _;return pe(c,\"aria-label\",`${t.log.refs.length>0?t.log.refs.join(\", \")+`\n`:\"\"}${(_=t.log.author)==null?void 0:_.name}\n${(0,wv.moment)(t.log.date).format(t.plugin.settings.commitDateFormat)}\n${t.log.message}`)}),c.__click=[d9,i];var l=H(c),u=Z(l,2),f=H(u);{var d=_=>{var k=h9(),w=H(k,!0);xe(()=>Oe(w,t.log.refs.join(\", \"))),B(k),ne(_,k)};ge(f,_=>{t.log.refs.length>0&&_(d)})}var h=Z(f,2);{var p=_=>{var k=p9(),w=H(k,!0);xe(()=>Oe(w,a(t.log))),B(k),ne(_,k)};ge(h,_=>{var k;t.plugin.settings.authorInHistoryView!=\"hide\"&&((k=t.log.author)!=null&&k.name)&&_(p)})}var m=Z(h,2);{var v=_=>{var k=m9(),w=H(k,!0);xe(()=>Oe(w,(0,wv.moment)(t.log.date).format(t.plugin.settings.commitDateFormat))),B(k),ne(_,k)};ge(m,_=>{t.plugin.settings.dateInHistoryView&&_(v)})}var y=Z(m,2),b=H(y,!0);B(y),B(u),B(c);var x=Z(c,2);{var E=_=>{var k=g9(),w=H(k);{var A=T=>{gc(T,{get hierarchy(){return R(r)},get plugin(){return t.plugin},get view(){return t.view},topLevel:!0})},S=T=>{var P=ii(),O=cr(P);Tr(O,17,()=>t.log.diff.files,kr,(j,D)=>{mc(j,{get view(){return t.view},get diff(){return R(D)}})}),ne(T,P)};ge(w,T=>{t.showTree?T(A):T(S,!1)})}B(k),fn(3,k,()=>In,()=>({duration:150})),ne(_,k)};ge(x,_=>{R(i)||_(E)})}B(o),B(s),xe(()=>{at(o,\"is-collapsed\",R(i)),pe(c,\"data-tooltip-position\",R(n)),at(l,\"is-collapsed\",R(i)),Oe(b,t.log.message)}),ne(e,s),Ze()}dt([\"click\"]);function w9(e,t){t().catch(console.error)}var b9=(e,t,r,n)=>{re(t,!R(t)),(0,_v.setIcon)(r[0],R(t)?\"list\":\"folder\"),n(n().settings.treeStructure=R(t),!0),n().saveSettings()},_9=se('<div class=\"tree-item nav-folder mod-root\"></div>'),x9=se('<main><div class=\"nav-header\"><div class=\"nav-buttons-container\"><div id=\"layoutChange\" class=\"clickable-icon nav-action-button\" aria-label=\"Change Layout\"></div> <div id=\"refresh\" class=\"clickable-icon nav-action-button\" data-icon=\"refresh-cw\" aria-label=\"Refresh\" style=\"margin: 1px;\"></div></div></div> <div class=\"nav-files-container\" style=\"position: relative;\"><!></div> <div id=\"sentinel\"></div> <div style=\"margin-bottom:40px\"></div></main>'),S9={hash:\"svelte-45h\",code:\"\"};function xv(e,t){Xe(t,!0),gt(e,S9);let r=si(t,\"plugin\",15),n=ft(!1),i=be([]),a=ft(void 0),s=ft(be(r().settings.treeStructure)),o,c;$t(()=>{c&&c.empty()}),o=t.view.app.workspace.on(\"obsidian-git:head-change\",()=>void l().catch(console.error)),$t(()=>{i.forEach(x=>(0,_v.setIcon)(x,x.getAttr(\"data-icon\")))}),G3(()=>{t.view.app.workspace.offref(o)}),mv(()=>{let x=new IntersectionObserver(_=>{_[0].isIntersecting&&!R(n)&&u().catch(console.error)}),E=document.querySelector(\"#sentinel\");return E&&x.observe(E),()=>{x.disconnect()}}),l().catch(console.error);function l(){return bo(this,void 0,void 0,function*(){var x;if(!r().gitReady){re(a,void 0);return}re(n,!0);let E=r().gitManager instanceof Te,_;((x=R(a)===null||R(a)===void 0?void 0:R(a).length)!==null&&x!==void 0?x:0)==0?_=E?50:10:_=R(a).length,re(a,be(yield r().gitManager.log(void 0,!1,_))),re(n,!1)})}function u(){return bo(this,void 0,void 0,function*(){var x;if(!r().gitReady||R(a)===void 0)return;re(n,!0);let _=r().gitManager instanceof Te?50:10,k=yield r().gitManager.log(void 0,!1,_,(x=R(a).last())===null||x===void 0?void 0:x.hash);R(a).push(...k.slice(1)),re(n,!1)})}var f=x9(),d=H(f),h=H(d),p=H(h);p.__click=[b9,s,i,r],Ge(p,x=>i[0]=x,()=>i==null?void 0:i[0]);var m=Z(p,2);m.__click=[w9,l],Ge(m,x=>i[1]=x,()=>i==null?void 0:i[1]),B(h),B(d);var v=Z(d,2),y=H(v);{var b=x=>{var E=_9();Tr(E,21,()=>R(a),kr,(_,k)=>{bv(_,{get view(){return t.view},get showTree(){return R(s)},get log(){return R(k)},get plugin(){return r()}})}),B(E),ne(x,E)};ge(y,x=>{R(a)&&x(b)})}B(v),co(4),B(f),xe(()=>{pe(p,\"data-icon\",R(s)?\"list\":\"folder\"),at(m,\"loading\",R(n))}),ne(e,f),Ze()}dt([\"click\"]);var vc=class extends W3.ItemView{constructor(t,r){super(t),this.plugin=r,this.hoverPopover=null}getViewType(){return $r.type}getDisplayText(){return $r.name}getIcon(){return $r.icon}onClose(){return this._view&&ai(this._view),super.onClose()}reload(){this._view&&ai(this._view),this._view=zi(xv,{target:this.contentEl,props:{plugin:this.plugin,view:this}})}onOpen(){return this.reload(),super.onOpen()}};g();var q3=require(\"obsidian\"),Hd=class extends q3.FuzzySuggestModal{constructor(r,n){super(r.app);this.branches=n;this.setPlaceholder(\"选择要检出的分支\")}getItems(){return this.branches}getItemText(r){return r}onChooseItem(r,n){this.resolve(r)}openAndGetReslt(){return new Promise(r=>{this.resolve=r,this.open()})}onClose(){new Promise(r=>setTimeout(r,10)).then(()=>{this.resolve&&this.resolve(void 0)})}};g();var Q3=require(\"obsidian\");g();var Ec=require(\"obsidian\");g();var Y3=require(\"obsidian\"),Wi=class extends Y3.Modal{constructor(r,n,i){super(r);this.deletion=n;this.filename=i;this.resolve=null}myOpen(){return this.open(),new Promise(r=>{this.resolve=r})}onOpen(){let{contentEl:r,titleEl:n}=this;n.setText(`${this.deletion?\"删除\":\"放弃\"} 这个文件？`),r.createEl(\"p\").setText(`你真的想 ${this.deletion?\"删除\":\"放弃更改\"} \"${this.filename}\" 吗？`);let i=r.createDiv({cls:\"modal-button-container\"}),a=i.createEl(\"button\",{cls:\"mod-warning\",text:this.deletion?\"Delete\":\"Discard\"});a.addEventListener(\"click\",()=>{this.resolve&&this.resolve(!0),this.close()}),a.addEventListener(\"keypress\",()=>{this.resolve&&this.resolve(!0),this.close()});let s=i.createEl(\"button\",{text:\"取消\"});s.addEventListener(\"click\",()=>(this.resolve&&this.resolve(!1),this.close())),s.addEventListener(\"keypress\",()=>(this.resolve&&this.resolve(!1),this.close()))}onClose(){let{contentEl:r}=this;r.empty()}};g();var wc=require(\"obsidian\");g();g();var E9=ze(X3()),qi=require(\"obsidian\");function Na(e,t,r){let n=e.target;app.workspace.trigger(\"hover-link\",{event:e,source:t.getViewType(),hoverParent:t,targetEl:n,linktext:r})}function A9(e,t){t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}function k9(e,t){e.stopPropagation(),t.manager.stage(t.change.path,!1).catch(r=>t.view.plugin.displayError(r)).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})}function T9(e,t){e.stopPropagation();let r=t.change.workingDir==\"U\";new Wi(t.view.app,r,t.change.vaultPath).myOpen().then(n=>{if(n===!0)return r?t.view.app.vault.adapter.remove(t.change.vaultPath).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")}):t.manager.discard(t.change.path).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})},n=>t.view.plugin.displayError(n))}var C9=se('<div data-icon=\"go-to-file\" aria-label=\"Open File\" class=\"clickable-icon\"></div>'),P9=se('<main class=\"tree-item nav-file svelte-1wbh8tp\"><div class=\"tree-item-self is-clickable nav-file-title svelte-1wbh8tp\"><div class=\"tree-item-inner nav-file-title-content\"> </div> <div class=\"git-tools\"><div class=\"buttons\"><!> <div data-icon=\"undo\" aria-label=\"Discard\" class=\"clickable-icon\"></div> <div data-icon=\"plus\" aria-label=\"Stage\" class=\"clickable-icon\"></div></div> <div class=\"type\"> </div></div></div></main>'),R9={hash:\"svelte-1wbh8tp\",code:\"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}\"};function bc(e,t){Xe(t,!0),gt(e,R9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");$t(()=>{for(let x of r)x&&(0,wc.setIcon)(x,x.getAttr(\"data-icon\"))});function i(x){x.stopPropagation(),zs(t.change.path)?a(x):s(x)}function a(x){var E;x.stopPropagation();let _=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);_ instanceof wc.TFile&&((E=rn(t.view.app,x))===null||E===void 0||E.openFile(_).catch(k=>t.view.plugin.displayError(k)))}function s(x){x.stopPropagation(),t.view.plugin.tools.openDiff({aFile:t.change.path,aRef:\"\",event:x})}var o=P9();o.__mouseover=[A9,t],o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.change.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=x=>{var E=C9();E.__click=a,Ge(E,_=>r[0]=_,()=>r==null?void 0:r[0]),Ar(\"auxclick\",E,a),ne(x,E)};ge(h,x=>{t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)instanceof wc.TFile&&x(p)})}var m=Z(h,2);m.__click=[T9,t],Ge(m,x=>r[1]=x,()=>r==null?void 0:r[1]);var v=Z(m,2);v.__click=[k9,t],Ge(v,x=>r[2]=x,()=>r==null?void 0:r[2]),B(d);var y=Z(d,2),b=H(y,!0);B(y),B(f),B(c),B(o),xe(()=>{pe(c,\"data-path\",t.change.vaultPath),pe(c,\"data-tooltip-position\",R(n)),pe(c,\"aria-label\",t.change.vaultPath),pe(y,\"data-type\",t.change.workingDir),Oe(b,t.change.workingDir)}),Ar(\"auxclick\",o,x=>{x.stopPropagation(),x.button==2?kn(t.view.app,x,t.change.vaultPath,t.view.leaf,\"git-source-control\"):i(x)}),ne(e,o),Ze()}dt([\"mouseover\",\"click\"]);g();var Z3=require(\"obsidian\");function M9(e,t){t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}var O9=se('<main class=\"tree-item nav-file svelte-1wbh8tp\"><div class=\"tree-item-self is-clickable nav-file-title svelte-1wbh8tp\"><div class=\"tree-item-inner nav-file-title-content\"> </div> <div class=\"git-tools\"><span class=\"type\"> </span></div></div></main>'),I9={hash:\"svelte-1wbh8tp\",code:\"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}\"};function _c(e,t){Xe(t,!0),gt(e,I9);let r=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");function n(f){var d;f.stopPropagation();let h=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);h instanceof Z3.TFile&&((d=rn(t.view.app,f))===null||d===void 0||d.openFile(h).catch(p=>t.view.plugin.displayError(p)))}var i=O9();i.__mouseover=[M9,t],i.__click=n;var a=H(i),s=H(a),o=H(s,!0);xe(()=>Oe(o,Tn(t.change.vaultPath))),B(s);var c=Z(s,2),l=H(c),u=H(l,!0);B(l),B(c),B(a),B(i),xe(()=>{pe(a,\"data-path\",t.change.vaultPath),pe(a,\"data-tooltip-position\",R(r)),pe(a,\"aria-label\",t.change.vaultPath),pe(l,\"data-type\",t.change.workingDir),Oe(u,t.change.workingDir)}),Ar(\"auxclick\",i,f=>{f.stopPropagation(),f.button==2?kn(t.view.app,f,t.change.vaultPath,t.view.leaf,\"git-source-control\"):n(f)}),ne(e,i),Ze()}dt([\"mouseover\",\"click\"]);g();var xc=require(\"obsidian\");function F9(e,t){t.view.app.vault.getFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}function $9(e,t){e.stopPropagation(),t.manager.unstage(t.change.path,!1).catch(r=>t.view.plugin.displayError(r)).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})}var L9=se('<div data-icon=\"go-to-file\" aria-label=\"Open File\" class=\"clickable-icon\"></div>'),D9=se('<main class=\"tree-item nav-file svelte-1wbh8tp\"><div class=\"tree-item-self is-clickable nav-file-title svelte-1wbh8tp\"><div class=\"tree-item-inner nav-file-title-content\"> </div> <div class=\"git-tools\"><div class=\"buttons\"><!> <div data-icon=\"minus\" aria-label=\"Unstage\" class=\"clickable-icon\"></div></div> <div class=\"type\"> </div></div></div></main>'),N9={hash:\"svelte-1wbh8tp\",code:\"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}\"};function Sc(e,t){Xe(t,!0),gt(e,N9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");$t(()=>{for(let b of r)b&&(0,xc.setIcon)(b,b.getAttr(\"data-icon\"))});function i(b){b.stopPropagation(),zs(t.change.path)?a(b):s(b)}function a(b){var x;b.stopPropagation();let E=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);E instanceof xc.TFile&&((x=rn(t.view.app,b))===null||x===void 0||x.openFile(E).catch(_=>t.view.plugin.displayError(_)))}function s(b){b.stopPropagation(),t.view.plugin.tools.openDiff({aFile:t.change.path,aRef:\"HEAD\",bRef:\"\",event:b})}var o=D9();o.__mouseover=[F9,t],o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.change.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=b=>{var x=L9();x.__click=a,Ge(x,E=>r[0]=E,()=>r==null?void 0:r[0]),ne(b,x)};ge(h,b=>{t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)instanceof xc.TFile&&b(p)})}var m=Z(h,2);m.__click=[$9,t],Ge(m,b=>r[1]=b,()=>r==null?void 0:r[1]),B(d);var v=Z(d,2),y=H(v,!0);B(v),B(f),B(c),B(o),xe(()=>{pe(c,\"data-path\",t.change.vaultPath),pe(c,\"data-tooltip-position\",R(n)),pe(c,\"aria-label\",t.change.vaultPath),pe(v,\"data-type\",t.change.index),Oe(y,t.change.index)}),Ar(\"auxclick\",o,b=>{b.stopPropagation(),b.button==2?kn(t.view.app,b,t.change.vaultPath,t.view.leaf,\"git-source-control\"):i(b)}),ne(e,o),Ze()}dt([\"mouseover\",\"click\"]);g();g();var j9=se('<div class=\"tree-item nav-file\"><div class=\"tree-item-self nav-file-title\"><div class=\"tree-item-inner nav-file-title-content\"> </div></div></div>'),B9=se(\"<main><!></main>\");function ja(e,t){Xe(t,!0);var r=B9(),n=H(r);{var i=a=>{var s=j9(),o=H(s),c=H(o),l=H(c,!0);B(c),B(o),B(s),xe(()=>{pe(o,\"aria-label\",\"And \"+(t.files.length-500)+\" more files\"),Oe(l,\"And \"+(t.files.length-500)+\" more files\")}),ne(a,s)};ge(n,a=>{t.files.length>500&&a(i)})}B(r),ne(e,r),Ze()}var U9=se(\"<div><!></div>\"),G9=(e,t,r)=>t(R(r)),z9=(e,t,r)=>t(e,R(r).path),V9=se('<div data-icon=\"minus\" aria-label=\"Unstage\" class=\"clickable-icon\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-minus\"><line x1=\"4\" y1=\"9\" x2=\"14\" y2=\"9\"></line></svg></div>'),W9=(e,t,r)=>t(e,R(r)),q9=(e,t,r)=>t(e,R(r).path),Y9=se('<div data-icon=\"undo\" aria-label=\"Discard\" class=\"clickable-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-undo\"><path d=\"M3 7v6h6\"></path><path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\"></path></svg></div> <div data-icon=\"plus\" aria-label=\"Stage\" class=\"clickable-icon\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-plus\"><line x1=\"9\" y1=\"4\" x2=\"9\" y2=\"14\"></line><line x1=\"4\" y1=\"9\" x2=\"14\" y2=\"9\"></line></svg></div>',1),X9=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),Z9=se('<div class=\"tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title svelte-hup5mn\"><div data-icon=\"folder\" style=\"padding-right: 5px; display: flex; \"></div> <div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content\"> </div> <div class=\"git-tools\"><div class=\"buttons\"><!> <div style=\"width:11px\"></div></div></div></div> <!></div>'),K9=se('<main class=\"svelte-hup5mn\"><!> <!></main>'),J9={hash:\"svelte-hup5mn\",code:\"main.svelte-hup5mn .nav-folder-title:where(.svelte-hup5mn) {align-items:center;}\"};function Ba(e,t){Xe(t,!0),gt(e,J9);var r,n;let i=si(t,\"topLevel\",3,!1),a=be({});for(let p of t.hierarchy.children)a[p.title]=((n=(r=p.children)===null||r===void 0?void 0:r.length)!==null&&n!==void 0?n:0)>100;let s=Ye(()=>t.view.leaf.getRoot().side==\"left\"?\"right\":\"left\");function o(p,m){p.stopPropagation(),t.plugin.gitManager.stageAll({dir:m}).catch(v=>t.plugin.displayError(v)).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})}function c(p,m){p.stopPropagation(),t.plugin.gitManager.unstageAll({dir:m}).catch(v=>t.plugin.displayError(v)).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})}function l(p,m){p.stopPropagation(),new Wi(t.view.app,!1,m.vaultPath).myOpen().then(v=>{if(v===!0)return t.plugin.gitManager.discardAll({dir:m.path,status:t.plugin.cachedStatus}).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")})},v=>t.plugin.displayError(v))}function u(p){a[p.title]=!a[p.title]}var f=K9(),d=H(f);Tr(d,17,()=>zl(t.hierarchy.children,500),kr,(p,m)=>{var v=ii(),y=cr(v);{var b=E=>{var _=U9(),k=H(_);{var w=S=>{Sc(S,{get change(){return R(m).data},get manager(){return t.plugin.gitManager},get view(){return t.view}})},A=S=>{var T=ii(),P=cr(T);{var O=D=>{bc(D,{get change(){return R(m).data},get manager(){return t.plugin.gitManager},get view(){return t.view}})},j=D=>{var Q=ii(),de=cr(Q);{var ee=J=>{_c(J,{get change(){return R(m).data},get view(){return t.view}})};ge(de,J=>{t.fileType==2&&J(ee)},!0)}ne(D,Q)};ge(P,D=>{t.fileType==1?D(O):D(j,!1)},!0)}ne(S,T)};ge(k,S=>{t.fileType==0?S(w):S(A,!1)})}B(_),ne(E,_)},x=E=>{var _=Z9();_.__click=[G9,u,m];var k=H(_),w=Z(H(k),2),A=Z(w,2),S=H(A,!0);B(A);var T=Z(A,2),P=H(T),O=H(P);{var j=ee=>{var J=V9();J.__click=[z9,c,m],ne(ee,J)},D=ee=>{var J=Y9(),Pe=cr(J);Pe.__click=[W9,l,m];var me=Z(Pe,2);me.__click=[q9,o,m],ne(ee,J)};ge(O,ee=>{t.fileType==0?ee(j):ee(D,!1)})}co(2),B(P),B(T),B(k);var Q=Z(k,2);{var de=ee=>{var J=X9(),Pe=H(J);Ba(Pe,{get hierarchy(){return R(m)},get plugin(){return t.plugin},get view(){return t.view},get fileType(){return t.fileType}}),B(J),fn(3,J,()=>In,()=>({duration:150})),ne(ee,J)};ge(Q,ee=>{a[R(m).title]||ee(de)})}B(_),xe(()=>{at(_,\"is-collapsed\",a[R(m).title]),pe(k,\"data-tooltip-position\",R(s)),pe(k,\"aria-label\",R(m).vaultPath),at(w,\"is-collapsed\",a[R(m).title]),Oe(S,R(m).title)}),Ar(\"auxclick\",_,ee=>kn(t.view.app,ee,R(m).vaultPath,t.view.leaf,\"git-source-control\")),ne(E,_)};ge(y,E=>{R(m).data?E(b):E(x,!1)})}ne(p,v)});var h=Z(d,2);ja(h,{get files(){return t.hierarchy.children}}),B(f),xe(()=>at(f,\"topLevel\",i())),ne(e,f),Ze()}dt([\"click\"]);function Q9(e,t,r,n,i,a){return bo(this,void 0,void 0,function*(){if(re(t,!0),R(r)){if(yield n().tools.hasTooBigFiles(R(r).staged))return n().setPluginState({gitAction:0}),!1;n().promiseQueue.addTask(()=>n().gitManager.commit({message:R(i)}).then(()=>re(i,be(n().settings.commitMessage))).finally(a))}})}function eH(e,t,r,n,i,a){re(t,!0),R(r)&&n().promiseQueue.addTask(()=>n().commitAndSync(!1,!1,R(i)).then(()=>{re(i,be(n().settings.commitMessage))}).finally(a))}function K3(e,t,r,n,i){re(t,!0),r().promiseQueue.addTask(()=>r().gitManager.stageAll({status:R(n)}).finally(i))}function J3(e,t,r,n,i){re(t,!0),r().promiseQueue.addTask(()=>r().gitManager.unstageAll({status:R(n)}).finally(i))}function tH(e,t,r,n){re(t,!0),r().promiseQueue.addTask(()=>r().push().finally(n))}function rH(e,t,r,n){re(t,!0),r().promiseQueue.addTask(()=>r().pullChangesFromRemote().finally(n))}function nH(e,t,r){e.stopPropagation(),new Wi(t.view.app,!1,r().gitManager.getRelativeVaultPath(\"/\")).myOpen().then(n=>{n===!0&&r().promiseQueue.addTask(()=>r().gitManager.discardAll({status:r().cachedStatus}).finally(()=>{t.view.app.workspace.trigger(\"obsidian-git:refresh\")}))},console.error)}var iH=(e,t,r,n)=>{re(t,!R(t)),(0,Ec.setIcon)(r[6],R(t)?\"list\":\"folder\"),n().settings.treeStructure=R(t),n().saveSettings()},aH=(e,t)=>re(t,\"\"),sH=se('<div class=\"git-commit-msg-clear-button svelte-11adhly\"></div>'),oH=(e,t)=>re(t,!R(t)),lH=se(\"<!> <!>\",1),cH=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),uH=(e,t)=>re(t,!R(t)),fH=se(\"<!> <!>\",1),dH=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),hH=(e,t)=>re(t,!R(t)),pH=se(\"<!> <!>\",1),mH=se('<div class=\"tree-item-children nav-folder-children\"><!></div>'),gH=se('<div class=\"pulled nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title svelte-11adhly\"><div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content\">Recently Pulled Files</div> <span class=\"tree-item-flair\"> </span></div> <!></div>'),vH=se('<div class=\"tree-item nav-folder mod-root\"><div class=\"staged tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title svelte-11adhly\"><div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content\">Staged Changes</div> <div class=\"git-tools svelte-11adhly\"><div class=\"buttons\"><div data-icon=\"minus\" aria-label=\"Unstage\" class=\"clickable-icon\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-minus\"><line x1=\"4\" y1=\"9\" x2=\"14\" y2=\"9\"></line></svg></div></div> <div class=\"files-count svelte-11adhly\"> </div></div></div> <!></div> <div class=\"changes tree-item nav-folder\"><div class=\"tree-item-self is-clickable nav-folder-title svelte-11adhly\"><div class=\"tree-item-icon nav-folder-collapse-indicator collapse-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon right-triangle\"><path d=\"M3 8L12 17L21 8\"></path></svg></div> <div class=\"tree-item-inner nav-folder-title-content\">Changes</div> <div class=\"git-tools svelte-11adhly\"><div class=\"buttons\"><div data-icon=\"undo\" aria-label=\"Discard\" class=\"clickable-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-undo\"><path d=\"M3 7v6h6\"></path><path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\"></path></svg></div> <div data-icon=\"plus\" aria-label=\"Stage\" class=\"clickable-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svg-icon lucide-plus\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line></svg></div></div> <div class=\"files-count svelte-11adhly\"> </div></div></div> <!></div> <!></div>'),yH=se('<main class=\"svelte-11adhly\"><div class=\"nav-header\"><div class=\"nav-buttons-container\"><div id=\"backup-btn\" data-icon=\"arrow-up-circle\" class=\"clickable-icon nav-action-button\" aria-label=\"Commit-and-sync\"></div> <div id=\"commit-btn\" data-icon=\"check\" class=\"clickable-icon nav-action-button\" aria-label=\"Commit\"></div> <div id=\"stage-all\" class=\"clickable-icon nav-action-button\" data-icon=\"plus-circle\" aria-label=\"Stage all\"></div> <div id=\"unstage-all\" class=\"clickable-icon nav-action-button\" data-icon=\"minus-circle\" aria-label=\"Unstage all\"></div> <div id=\"push\" class=\"clickable-icon nav-action-button\" data-icon=\"upload\" aria-label=\"Push\"></div> <div id=\"pull\" class=\"clickable-icon nav-action-button\" data-icon=\"download\" aria-label=\"Pull\"></div> <div id=\"layoutChange\" class=\"clickable-icon nav-action-button\" aria-label=\"Change Layout\"></div> <div id=\"refresh\" class=\"clickable-icon nav-action-button\" data-icon=\"refresh-cw\" aria-label=\"Refresh\" style=\"margin: 1px;\"></div></div></div> <div class=\"git-commit-msg svelte-11adhly\"><textarea class=\"commit-msg-input svelte-11adhly\" spellcheck=\"true\" placeholder=\"Commit Message\"></textarea> <!></div> <div class=\"nav-files-container\" style=\"position: relative;\"><!></div></main>'),wH={hash:\"svelte-11adhly\",code:`.commit-msg-input.svelte-11adhly {width:100%;overflow:hidden;resize:none;padding:7px 5px;background-color:var(--background-modifier-form-field);}.git-commit-msg.svelte-11adhly {position:relative;padding:0;width:calc(100% - var(--size-4-8));margin:4px auto;}main.svelte-11adhly .git-tools:where(.svelte-11adhly) .files-count:where(.svelte-11adhly) {padding-left:var(--size-2-1);width:11px;display:flex;align-items:center;justify-content:center;}.nav-folder-title.svelte-11adhly {align-items:center;}.git-commit-msg-clear-button.svelte-11adhly {position:absolute;background:transparent;border-radius:50%;color:var(--search-clear-button-color);cursor:var(--cursor);top:-4px;right:2px;bottom:0px;line-height:0;height:var(--input-height);width:28px;margin:auto;padding:0 0;text-align:center;display:flex;justify-content:center;align-items:center;transition:color 0.15s ease-in-out;}.git-commit-msg-clear-button.svelte-11adhly:after {content:\"\";height:var(--search-clear-button-size);width:var(--search-clear-button-size);display:block;background-color:currentColor;mask-image:url(\"data:image/svg+xml,<svg viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6 12C9.31371 12 12 9.31371 12 6C12 2.68629 9.31371 0 6 0C2.68629 0 0 2.68629 0 6C0 9.31371 2.68629 12 6 12ZM3.8705 3.09766L6.00003 5.22718L8.12955 3.09766L8.9024 3.8705L6.77287 6.00003L8.9024 8.12955L8.12955 8.9024L6.00003 6.77287L3.8705 8.9024L3.09766 8.12955L5.22718 6.00003L3.09766 3.8705L3.8705 3.09766Z' fill='currentColor'/></svg>\");mask-repeat:no-repeat;-webkit-mask-image:url(\"data:image/svg+xml,<svg viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6 12C9.31371 12 12 9.31371 12 6C12 2.68629 9.31371 0 6 0C2.68629 0 0 2.68629 0 6C0 9.31371 2.68629 12 6 12ZM3.8705 3.09766L6.00003 5.22718L8.12955 3.09766L8.9024 3.8705L6.77287 6.00003L8.9024 8.12955L8.12955 8.9024L6.00003 6.77287L3.8705 8.9024L3.09766 8.12955L5.22718 6.00003L3.09766 3.8705L3.8705 3.09766Z' fill='currentColor'/></svg>\");-webkit-mask-repeat:no-repeat;}`};function Ev(e,t){Xe(t,!0),gt(e,wH);let r=si(t,\"plugin\",7),n=ft(!1),i=ft(void 0),a=ft(be([])),s=ft(be(r().settings.commitMessage)),o=be([]),c=ft(void 0),l=ft(void 0),u=ft(void 0),f=ft(!0),d=ft(!0),h=ft(!0),p=ft(0),m=ft(be(r().settings.treeStructure));t.view.registerEvent(t.view.app.workspace.on(\"obsidian-git:loading-status\",()=>re(n,!0))),t.view.registerEvent(t.view.app.workspace.on(\"obsidian-git:status-changed\",()=>void v().catch(console.error))),t.view.plugin.cachedStatus==null?t.view.plugin.refresh().catch(console.error):v().catch(console.error),$t(()=>{o.forEach(F=>(0,Ec.setIcon)(F,F.getAttr(\"data-icon\")))}),$t(()=>{o.forEach(F=>{var G,N;!F||F.id!=\"push\"||(Ec.Platform.isMobile?(F.removeClass(\"button-border\"),R(p)>0&&F.addClass(\"button-border\")):((G=F.firstElementChild)===null||G===void 0||G.removeAttribute(\"color\"),R(p)>0&&((N=F.firstElementChild)===null||N===void 0||N.setAttr(\"color\",\"var(--text-accent)\"))))})});function v(){return bo(this,void 0,void 0,function*(){if(!r().gitReady){re(i,void 0);return}if(re(p,be(yield r().gitManager.getUnpushedCommits())),re(i,be(r().cachedStatus)),re(n,!1),r().lastPulledFiles&&r().lastPulledFiles!=R(a)&&(re(a,be(r().lastPulledFiles)),re(u,be({title:\"\",path:\"\",vaultPath:\"\",children:r().gitManager.getTreeStructure(R(a))}))),R(i)){let F=(G,N)=>G.vaultPath.split(\"/\").last().localeCompare(Tn(N.vaultPath));R(i).changed.sort(F),R(i).staged.sort(F),re(c,be({title:\"\",path:\"\",vaultPath:\"\",children:r().gitManager.getTreeStructure(R(i).changed)})),re(l,be({title:\"\",path:\"\",vaultPath:\"\",children:r().gitManager.getTreeStructure(R(i).staged)}))}else re(c,void 0),re(l,void 0)})}function y(){t.view.app.workspace.trigger(\"obsidian-git:refresh\")}let b=Ye(()=>(R(s).match(/\\n/g)||[]).length+1||1);var x=yH(),E=H(x),_=H(E),k=H(_);k.__click=[eH,n,i,r,s,y],Ge(k,F=>o[0]=F,()=>o==null?void 0:o[0]);var w=Z(k,2);w.__click=[Q9,n,i,r,s,y],Ge(w,F=>o[1]=F,()=>o==null?void 0:o[1]);var A=Z(w,2);A.__click=[K3,n,r,i,y],Ge(A,F=>o[2]=F,()=>o==null?void 0:o[2]);var S=Z(A,2);S.__click=[J3,n,r,i,y],Ge(S,F=>o[3]=F,()=>o==null?void 0:o[3]);var T=Z(S,2);T.__click=[tH,n,r,y],Ge(T,F=>o[4]=F,()=>o==null?void 0:o[4]);var P=Z(T,2);P.__click=[rH,n,r,y],Ge(P,F=>o[5]=F,()=>o==null?void 0:o[5]);var O=Z(P,2);O.__click=[iH,m,o,r],Ge(O,F=>o[6]=F,()=>o==null?void 0:o[6]);var j=Z(O,2);j.__click=y,Ge(j,F=>o[7]=F,()=>o==null?void 0:o[7]),B(_),B(E);var D=Z(E,2),Q=H(D);rv(Q);var de=Z(Q,2);{var ee=F=>{var G=sH();G.__click=[aH,s],pe(G,\"aria-label\",\"Clear\"),ne(F,G)};ge(de,F=>{R(s)&&F(ee)})}B(D);var J=Z(D,2),Pe=H(J);{var me=F=>{var G=vH(),N=H(G),Me=H(N);Me.__click=[oH,d];var Dt=H(Me),_t=Z(Dt,4),Ee=H(_t),st=H(Ee);st.__click=[J3,n,r,i,y],Ge(st,Nt=>o[8]=Nt,()=>o==null?void 0:o[8]),B(Ee);var ot=Z(Ee,2),Ct=H(ot,!0);B(ot),B(_t),B(Me);var $e=Z(Me,2);{var U=Nt=>{var Zt=cH(),li=H(Zt);{var Va=jt=>{Ba(jt,{get hierarchy(){return R(l)},get plugin(){return r()},get view(){return t.view},get fileType(){return 0},topLevel:!0})},Po=jt=>{var Yi=lH(),$n=cr(Yi);Tr($n,17,()=>zl(R(i).staged,500),kr,(Ro,Mo)=>{Sc(Ro,{get change(){return R(Mo)},get view(){return t.view},get manager(){return r().gitManager}})});var ci=Z($n,2);ja(ci,{get files(){return R(i).staged}}),ne(jt,Yi)};ge(li,jt=>{R(m)?jt(Va):jt(Po,!1)})}B(Zt),fn(3,Zt,()=>In,()=>({duration:150})),ne(Nt,Zt)};ge($e,Nt=>{R(d)&&Nt(U)})}B(N);var Le=Z(N,2),L=H(Le);L.__click=[uH,f];var Y=H(L),ye=Z(Y,4),De=H(ye),vt=H(De);vt.__click=[nH,t,r];var za=Z(vt,2);za.__click=[K3,n,r,i,y],Ge(za,Nt=>o[9]=Nt,()=>o==null?void 0:o[9]),B(De);var Lv=Z(De,2),IP=H(Lv,!0);B(Lv),B(ye),B(L);var FP=Z(L,2);{var $P=Nt=>{var Zt=dH(),li=H(Zt);{var Va=jt=>{Ba(jt,{get hierarchy(){return R(c)},get plugin(){return r()},get view(){return t.view},get fileType(){return 1},topLevel:!0})},Po=jt=>{var Yi=fH(),$n=cr(Yi);Tr($n,17,()=>zl(R(i).changed,500),kr,(Ro,Mo)=>{bc(Ro,{get change(){return R(Mo)},get view(){return t.view},get manager(){return r().gitManager}})});var ci=Z($n,2);ja(ci,{get files(){return R(i).changed}}),ne(jt,Yi)};ge(li,jt=>{R(m)?jt(Va):jt(Po,!1)})}B(Zt),fn(3,Zt,()=>In,()=>({duration:150})),ne(Nt,Zt)};ge(FP,Nt=>{R(f)&&Nt($P)})}B(Le);var LP=Z(Le,2);{var DP=Nt=>{var Zt=gH(),li=H(Zt);li.__click=[hH,h];var Va=Z(H(li),4),Po=H(Va,!0);B(Va),B(li);var jt=Z(li,2);{var Yi=$n=>{var ci=mH(),Ro=H(ci);{var Mo=Wa=>{Ba(Wa,{get hierarchy(){return R(u)},get plugin(){return r()},get view(){return t.view},get fileType(){return 2},topLevel:!0})},NP=Wa=>{var Dv=pH(),Nv=cr(Dv);Tr(Nv,17,()=>R(a),kr,(BP,HP)=>{_c(BP,{get change(){return R(HP)},get view(){return t.view}})});var jP=Z(Nv,2);ja(jP,{get files(){return R(a)}}),ne(Wa,Dv)};ge(Ro,Wa=>{R(m)?Wa(Mo):Wa(NP,!1)})}B(ci),fn(3,ci,()=>In,()=>({duration:150})),ne($n,ci)};ge(jt,$n=>{R(h)&&$n(Yi)})}B(Zt),xe(()=>{at(Zt,\"is-collapsed\",!R(h)),Oe(Po,R(a).length)}),ne(Nt,Zt)};ge(LP,Nt=>{R(a).length>0&&R(u)&&Nt(DP)})}B(G),xe(()=>{at(N,\"is-collapsed\",!R(d)),at(Dt,\"is-collapsed\",!R(d)),Oe(Ct,R(i).staged.length),at(Le,\"is-collapsed\",!R(f)),at(Y,\"is-collapsed\",!R(f)),Oe(IP,R(i).changed.length)}),ne(F,G)};ge(Pe,F=>{R(i)&&R(l)&&R(c)&&F(me)})}B(J),B(x),xe(()=>{pe(x,\"data-type\",St.type),pe(O,\"data-icon\",R(m)?\"list\":\"folder\"),at(j,\"loading\",R(n)),pe(Q,\"rows\",R(b))}),pv(Q,()=>R(s),F=>re(s,F)),ne(e,x),Ze()}dt([\"click\"]);var Ac=class extends Q3.ItemView{constructor(t,r){super(t),this.plugin=r,this.hoverPopover=null}getViewType(){return St.type}getDisplayText(){return St.name}getIcon(){return St.icon}onClose(){return this._view&&ai(this._view),super.onClose()}reload(){this._view&&ai(this._view),this._view=zi(Ev,{target:this.contentEl,props:{plugin:this.plugin,view:this}})}onOpen(){return this.reload(),super.onOpen()}};g();var Ud=class{constructor(t,r){this.statusBarEl=t;this.plugin=r;this.statusBarEl.addClass(\"mod-clickable\"),this.statusBarEl.onClickEvent(n=>{this.plugin.switchBranch().catch(i=>r.displayError(i))})}async display(){if(this.plugin.gitReady){let t=await this.plugin.gitManager.branchInfo();t.current!=null?this.statusBarEl.setText(t.current):this.statusBarEl.empty()}else this.statusBarEl.empty()}remove(){this.statusBarEl.remove()}};g();var _o=require(\"obsidian\");var kc=class{constructor(t){this.plugin=t}async hasTooBigFiles(t){let r=await this.plugin.gitManager.branchInfo(),n=r.tracking?Ii(r.tracking)[0]:null;if(!n)return!1;let i=await this.plugin.gitManager.getRemoteUrl(n);if(i!=null&&i.includes(\"github.com\")){let a=[],s=this.plugin.gitManager;for(let o of t){let c=this.plugin.app.vault.getAbstractFileByPath(o.vaultPath),l=!1;if(c instanceof _o.TFile)c.stat.size>=1e8&&(l=!0);else{let u=await this.plugin.app.vault.adapter.stat(o.vaultPath);u&&u.size>=1e8&&(l=!0)}if(l){let u=!1;s instanceof Te&&(u=await s.isFileTrackedByLFS(o.path)),u||a.push(o)}}if(a.length>0)return this.plugin.displayError(`Aborted commit, because the following files are too big:\n- ${a.map(o=>o.vaultPath).join(`\n- `)}\nPlease remove them or add to .gitignore.`),!0}return!1}async writeAndOpenFile(t){t!==void 0&&await this.plugin.app.vault.adapter.write(Ms,t);let r=!1;this.plugin.app.workspace.iterateAllLeaves(n=>{n.getDisplayText()!=\"\"&&Ms.startsWith(n.getDisplayText())&&(r=!0)}),r||await this.plugin.app.workspace.openLinkText(Ms,\"/\",!0)}openDiff({aFile:t,bFile:r,aRef:n,bRef:i,event:a}){var c,l;let s=this.plugin.settings.diffStyle;_o.Platform.isMobileApp&&(s=\"git_unified\");let o={aFile:t,bFile:r!=null?r:t,aRef:n,bRef:i};s==\"split\"?(c=rn(this.plugin.app,a))==null||c.setViewState({type:Ai.type,active:!0,state:o}):s==\"git_unified\"&&((l=rn(this.plugin.app,a))==null||l.setViewState({type:ki.type,active:!0,state:o}))}async runRawCommand(){let t=this.plugin.gitManager;if(!(t instanceof Te))return;let n=await new Fe(this.plugin,{placeholder:\"push origin master\",allowEmpty:!1}).openAndGetResult();n!==void 0&&this.plugin.promiseQueue.addTask(async()=>{let i=new _o.Notice(`Running '${n}'...`,999999);try{let a=await t.rawCommand(n);a?(i.setMessage(a),window.setTimeout(()=>i.hide(),5e3)):i.hide()}catch(a){throw i.hide(),a}})}};g();var To=require(\"obsidian\");var Xr=require(\"@codemirror/view\"),ko=require(\"@codemirror/state\");g();var Re=require(\"@codemirror/view\"),Se=require(\"@codemirror/state\");g();var Av=\"\\u037C\",eP=typeof Symbol==\"undefined\"?\"__\"+Av:Symbol.for(Av),kv=typeof Symbol==\"undefined\"?\"__styleSet\"+Math.floor(Math.random()*1e8):Symbol(\"styleSet\"),tP=typeof globalThis!=\"undefined\"?globalThis:typeof window!=\"undefined\"?window:{},Gd=class{constructor(t,r){this.rules=[];let{finish:n}=r||{};function i(s){return/^@/.test(s)?[s]:s.split(/,\\s*/)}function a(s,o,c,l){let u=[],f=/^@(\\w+)\\b/.exec(s[0]),d=f&&f[1]==\"keyframes\";if(f&&o==null)return c.push(s[0]+\";\");for(let h in o){let p=o[h];if(/&/.test(h))a(h.split(/,\\s*/).map(m=>s.map(v=>m.replace(/&/,v))).reduce((m,v)=>m.concat(v)),p,c);else if(p&&typeof p==\"object\"){if(!f)throw new RangeError(\"The value of a property (\"+h+\") should be a primitive value.\");a(i(h),p,u,d)}else p!=null&&u.push(h.replace(/_.*/,\"\").replace(/[A-Z]/g,m=>\"-\"+m.toLowerCase())+\": \"+p+\";\")}(u.length||d)&&c.push((n&&!f&&!l?s.map(n):s).join(\", \")+\" {\"+u.join(\" \")+\"}\")}for(let s in t)a(i(s),t[s],this.rules)}getRules(){return this.rules.join(`\n`)}static newName(){let t=tP[eP]||1;return tP[eP]=t+1,Av+t.toString(36)}static mount(t,r,n){let i=t[kv],a=n&&n.nonce;i?a&&i.setNonce(a):i=new Tv(t,a),i.mount(Array.isArray(r)?r:[r],t)}},rP=new Map,Tv=class{constructor(t,r){let n=t.ownerDocument||t,i=n.defaultView;if(!t.head&&t.adoptedStyleSheets&&i.CSSStyleSheet){let a=rP.get(n);if(a)return t[kv]=a;this.sheet=new i.CSSStyleSheet,rP.set(n,this)}else this.styleTag=n.createElement(\"style\"),r&&this.styleTag.setAttribute(\"nonce\",r);this.modules=[],t[kv]=this}mount(t,r){let n=this.sheet,i=0,a=0;for(let s=0;s<t.length;s++){let o=t[s],c=this.modules.indexOf(o);if(c<a&&c>-1&&(this.modules.splice(c,1),a--,c=-1),c==-1){if(this.modules.splice(a++,0,o),n)for(let l=0;l<o.rules.length;l++)n.insertRule(o.rules[l],i++)}else{for(;a<c;)i+=this.modules[a++].rules.length;i+=o.rules.length,a++}}if(n)r.adoptedStyleSheets.indexOf(this.sheet)<0&&(r.adoptedStyleSheets=[this.sheet,...r.adoptedStyleSheets]);else{let s=\"\";for(let c=0;c<this.modules.length;c++)s+=this.modules[c].getRules()+`\n`;this.styleTag.textContent=s;let o=r.head||r;this.styleTag.parentNode!=o&&o.insertBefore(this.styleTag,o.firstChild)}}setNonce(t){this.styleTag&&this.styleTag.getAttribute(\"nonce\")!=t&&this.styleTag.setAttribute(\"nonce\",t)}};var bP=require(\"@codemirror/language\"),bH=require(\"@lezer/highlight\"),ht=class e{constructor(t,r,n,i){this.fromA=t,this.toA=r,this.fromB=n,this.toB=i}offset(t,r=t){return new e(this.fromA+t,this.toA+t,this.fromB+r,this.toB+r)}};function Ua(e,t,r,n,i,a){if(e==n)return[];let s=Fv(e,t,r,n,i,a),o=$v(e,t+s,r,n,i+s,a);t+=s,r-=o,i+=s,a-=o;let c=r-t,l=a-i;if(!c||!l)return[new ht(t,r,i,a)];if(c>l){let f=e.slice(t,r).indexOf(n.slice(i,a));if(f>-1)return[new ht(t,t+f,i,i),new ht(t+f+l,r,a,a)]}else if(l>c){let f=n.slice(i,a).indexOf(e.slice(t,r));if(f>-1)return[new ht(t,t,i,i+f),new ht(r,r,i+f+c,a)]}if(c==1||l==1)return[new ht(t,r,i,a)];let u=xP(e,t,r,n,i,a);if(u){let[f,d,h]=u;return Ua(e,t,f,n,i,d).concat(Ua(e,f+h,r,n,d+h,a))}return _H(e,t,r,n,i,a)}var Tc=1e9;function _H(e,t,r,n,i,a){let s=r-t,o=a-i;if(Tc<1e9&&Math.min(s,o)>Tc*16)return Math.min(s,o)>Tc*64?[new ht(t,r,i,a)]:nP(e,t,r,n,i,a);let c=Math.ceil((s+o)/2);Cv.reset(c),Pv.reset(c);let l=(h,p)=>e.charCodeAt(t+h)==n.charCodeAt(i+p),u=(h,p)=>e.charCodeAt(r-h-1)==n.charCodeAt(a-p-1),f=(s-o)%2!=0?Pv:null,d=f?null:Cv;for(let h=0;h<c;h++){if(h>Tc)return nP(e,t,r,n,i,a);let p=Cv.advance(h,s,o,c,f,!1,l)||Pv.advance(h,s,o,c,d,!0,u);if(p)return xH(e,t,r,t+p[0],n,i,a,i+p[1])}return[new ht(t,r,i,a)]}var Yd=class{constructor(){this.vec=[]}reset(t){this.len=t<<1;for(let r=0;r<this.len;r++)this.vec[r]=-1;this.vec[t+1]=0,this.start=this.end=0}advance(t,r,n,i,a,s,o){for(let c=-t+this.start;c<=t-this.end;c+=2){let l=i+c,u=c==-t||c!=t&&this.vec[l-1]<this.vec[l+1]?this.vec[l+1]:this.vec[l-1]+1,f=u-c;for(;u<r&&f<n&&o(u,f);)u++,f++;if(this.vec[l]=u,u>r)this.end+=2;else if(f>n)this.start+=2;else if(a){let d=i+(r-n)-c;if(d>=0&&d<this.len&&a.vec[d]!=-1)if(s){let h=a.vec[d];if(h>=r-u)return[h,i+h-d]}else{let h=r-a.vec[d];if(u>=h)return[u,f]}}}return null}},Cv=new Yd,Pv=new Yd;function xH(e,t,r,n,i,a,s,o){let c=!1;return!Eo(e,n)&&++n==r&&(c=!0),!Eo(i,o)&&++o==s&&(c=!0),c?[new ht(t,r,a,s)]:Ua(e,t,n,i,a,o).concat(Ua(e,n,r,i,o,s))}function _P(e,t){let r=1,n=Math.min(e,t);for(;r<n;)r=r<<1;return r}function Fv(e,t,r,n,i,a){if(t==r||t==a||e.charCodeAt(t)!=n.charCodeAt(i))return 0;let s=_P(r-t,a-i);for(let o=t,c=i;;){let l=o+s,u=c+s;if(l>r||u>a||e.slice(o,l)!=n.slice(c,u)){if(s==1)return o-t-(Eo(e,o)?0:1);s=s>>1}else{if(l==r||u==a)return l-t;o=l,c=u}}}function $v(e,t,r,n,i,a){if(t==r||i==a||e.charCodeAt(r-1)!=n.charCodeAt(a-1))return 0;let s=_P(r-t,a-i);for(let o=r,c=a;;){let l=o-s,u=c-s;if(l<t||u<i||e.slice(l,o)!=n.slice(u,c)){if(s==1)return r-o-(Eo(e,o)?0:1);s=s>>1}else{if(l==t||u==i)return r-l;o=l,c=u}}}function Rv(e,t,r,n,i,a,s,o){let c=n.slice(i,a),l=null;for(;;){if(l||s<o)return l;for(let u=t+s;;){Eo(e,u)||u++;let f=u+s;if(Eo(e,f)||(f+=f==u+1?1:-1),f>=r)break;let d=e.slice(u,f),h=-1;for(;(h=c.indexOf(d,h+1))!=-1;){let p=Fv(e,f,r,n,i+h+d.length,a),m=$v(e,t,u,n,i,i+h),v=d.length+p+m;(!l||l[2]<v)&&(l=[u-m,i+h-m,v])}u=f}if(o<0)return l;s=s>>1}}function xP(e,t,r,n,i,a){let s=r-t,o=a-i;if(s<o){let c=xP(n,i,a,e,t,r);return c&&[c[1],c[0],c[2]]}return s<4||o*2<s?null:Rv(e,t,r,n,i,a,Math.floor(s/4),-1)}function nP(e,t,r,n,i,a){let s=r-t,o=a-i,c;if(s<o){let d=Rv(n,i,a,e,t,r,Math.floor(s/6),50);c=d&&[d[1],d[0],d[2]]}else c=Rv(e,t,r,n,i,a,Math.floor(o/6),50);if(!c)return[new ht(t,r,i,a)];let[l,u,f]=c;return Ua(e,t,l,n,i,u).concat(Ua(e,l+f,r,n,u+f,a))}function SP(e,t){for(let r=1;r<e.length;r++){let n=e[r-1],i=e[r];n.toA>i.fromA-t&&n.toB>i.fromB-t&&(e[r-1]=new ht(n.fromA,i.toA,n.fromB,i.toB),e.splice(r--,1))}}function SH(e,t,r){for(;;){SP(r,1);let n=!1;for(let i=0;i<r.length;i++){let a=r[i],s,o;(s=Fv(e,a.fromA,a.toA,t,a.fromB,a.toB))&&(a=r[i]=new ht(a.fromA+s,a.toA,a.fromB+s,a.toB)),(o=$v(e,a.fromA,a.toA,t,a.fromB,a.toB))&&(a=r[i]=new ht(a.fromA,a.toA-o,a.fromB,a.toB-o));let c=a.toA-a.fromA,l=a.toB-a.fromB;if(c&&l)continue;let u=a.fromA-(i?r[i-1].toA:0),f=(i<r.length-1?r[i+1].fromA:e.length)-a.toA;if(!u||!f)continue;let d=c?e.slice(a.fromA,a.toA):t.slice(a.fromB,a.toB);u<=d.length&&e.slice(a.fromA-u,a.fromA)==d.slice(d.length-u)?(r[i]=new ht(a.fromA-u,a.toA-u,a.fromB-u,a.toB-u),n=!0):f<=d.length&&e.slice(a.toA,a.toA+f)==d.slice(0,f)&&(r[i]=new ht(a.fromA+f,a.toA+f,a.fromB+f,a.toB+f),n=!0)}if(!n)break}return r}function EH(e,t,r){for(let n=0,i=0;i<e.length;i++){let a=e[i],s=a.toA-a.fromA,o=a.toB-a.fromB;if(s&&o||s>3||o>3){let c=i==e.length-1?t.length:e[i+1].fromA,l=a.fromA-n,u=c-a.toA,f=aP(t,a.fromA,Math.min(l,5)),d=iP(t,a.toA,Math.min(u,5)),h=a.fromA-f,p=d-a.toA;if(!s||!o){let m=Math.max(s,o),[v,y,b]=s?[t,a.fromA,a.toA]:[r,a.fromB,a.toB];h&&p&&(m>h&&t.slice(f,a.fromA)==v.slice(b-h,b)?(a=e[i]=new ht(f,f+s,a.fromB-h,a.toB-h),f=a.fromA,d=iP(t,a.toA,Math.min(c-a.toA,5))):m>p&&t.slice(a.toA,d)==v.slice(y,y+p)&&(a=e[i]=new ht(d-s,d,a.fromB+p,a.toB+p),d=a.toA,f=aP(t,a.fromA,Math.min(a.fromA-n,5))),h=a.fromA-f,p=d-a.toA)}if(h||p)a=e[i]=new ht(a.fromA-h,a.toA+p,a.fromB-h,a.toB+p);else if(s){if(!o){let m=oP(t,a.fromA,a.toA),v,y=m<0?-1:sP(t,a.toA,a.fromA);m>-1&&(v=m-a.fromA)<=u&&t.slice(a.fromA,m)==t.slice(a.toA,a.toA+v)?a=e[i]=a.offset(v):y>-1&&(v=a.toA-y)<=l&&t.slice(a.fromA-v,a.fromA)==t.slice(y,a.toA)&&(a=e[i]=a.offset(-v))}}else{let m=oP(r,a.fromB,a.toB),v,y=m<0?-1:sP(r,a.toB,a.fromB);m>-1&&(v=m-a.fromB)<=u&&r.slice(a.fromB,m)==r.slice(a.toB,a.toB+v)?a=e[i]=a.offset(v):y>-1&&(v=a.toB-y)<=l&&r.slice(a.fromB-v,a.fromB)==r.slice(y,a.toB)&&(a=e[i]=a.offset(-v))}n=a.toA}}return SP(e,3),e}var Ha;try{Ha=new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}]\",\"u\")}catch(e){}function EP(e){return e>48&&e<58||e>64&&e<91||e>96&&e<123}function AP(e,t){if(t==e.length)return 0;let r=e.charCodeAt(t);return r<192?EP(r)?1:0:Ha?!TP(r)||t==e.length-1?Ha.test(String.fromCharCode(r))?1:0:Ha.test(e.slice(t,t+2))?2:0:0}function kP(e,t){if(!t)return 0;let r=e.charCodeAt(t-1);return r<192?EP(r)?1:0:Ha?!CP(r)||t==1?Ha.test(String.fromCharCode(r))?1:0:Ha.test(e.slice(t-2,t))?2:0:0}function iP(e,t,r){if(t==e.length||!kP(e,t))return t;for(let n=t,i=t+r;;){let a=AP(e,n);if(!a)return n;if(n+=a,n>i)return t}}function aP(e,t,r){if(!t||!AP(e,t))return t;for(let n=t,i=t-r;;){let a=kP(e,n);if(!a)return n;if(n-=a,n<i)return t}}function sP(e,t,r){for(;t!=r;t--)if(e.charCodeAt(t-1)==10)return t;return-1}function oP(e,t,r){for(;t!=r;t++)if(e.charCodeAt(t)==10)return t;return-1}var TP=e=>e>=55296&&e<=56319,CP=e=>e>=56320&&e<=57343;function Eo(e,t){return!t||t==e.length||!TP(e.charCodeAt(t-1))||!CP(e.charCodeAt(t))}function AH(e,t,r){var n;return Tc=((n=r==null?void 0:r.scanLimit)!==null&&n!==void 0?n:1e9)>>1,SH(e,t,Ua(e,0,e.length,t,0,t.length))}function PP(e,t,r){return EH(AH(e,t,r),e,t)}var Fn=Se.Facet.define({combine:e=>e[0]}),Mv=Se.StateEffect.define(),Ao=Se.StateField.define({create(e){return null},update(e,t){for(let r of t.effects)r.is(Mv)&&(e=r.value);return e}});var So=class e{constructor(t,r,n,i,a){this.changes=t,this.fromA=r,this.toA=n,this.fromB=i,this.toB=a}offset(t,r){return t||r?new e(this.changes,this.fromA+t,this.toA+t,this.fromB+r,this.toB+r):this}get endA(){return Math.max(this.fromA,this.toA-1)}get endB(){return Math.max(this.fromB,this.toB-1)}static build(t,r,n){return RP(PP(t.toString(),r.toString(),n),t,r,0,0)}static updateA(t,r,n,i,a){return dP(fP(t,i,!0,n.length),t,r,n,a)}static updateB(t,r,n,i,a){return dP(fP(t,i,!1,r.length),t,r,n,a)}};function lP(e,t,r,n){let i=r.lineAt(e),a=n.lineAt(t);return i.to==e&&a.to==t&&e<r.length&&t<n.length?[e+1,t+1]:[i.from,a.from]}function cP(e,t,r,n){let i=r.lineAt(e),a=n.lineAt(t);return i.from==e&&a.from==t?[e,t]:[i.to+1,a.to+1]}function RP(e,t,r,n,i){let a=[];for(let s=0;s<e.length;s++){let o=e[s],[c,l]=lP(o.fromA+n,o.fromB+i,t,r),[u,f]=cP(o.toA+n,o.toB+i,t,r),d=[o.offset(-c+n,-l+i)];for(;s<e.length-1;){let h=e[s+1],[p,m]=lP(h.fromA+n,h.fromB+i,t,r);if(p>u+1&&m>f+1)break;d.push(h.offset(-c+n,-l+i)),[u,f]=cP(h.toA+n,h.toB+i,t,r),s++}a.push(new So(d,c,Math.max(c,u),l,Math.max(l,f)))}return a}var zd=1e3;function uP(e,t,r,n){let i=0,a=e.length;for(;;){if(i==a){let u=0,f=0;i&&({toA:u,toB:f}=e[i-1]);let d=t-(r?u:f);return[u+d,f+d]}let s=i+a>>1,o=e[s],[c,l]=r?[o.fromA,o.toA]:[o.fromB,o.toB];if(c>t)a=s;else if(l<=t)i=s+1;else return n?[o.fromA,o.fromB]:[o.toA,o.toB]}}function fP(e,t,r,n){let i=[];return t.iterChangedRanges((a,s,o,c)=>{let l=0,u=r?t.length:n,f=0,d=r?n:t.length;a>zd&&([l,f]=uP(e,a-zd,r,!0)),s<t.length-zd&&([u,d]=uP(e,s+zd,r,!1));let h=c-o-(s-a),p,[m,v]=r?[h,0]:[0,h];i.length&&(p=i[i.length-1]).toA>=l?i[i.length-1]={fromA:p.fromA,fromB:p.fromB,toA:u,toB:d,diffA:p.diffA+m,diffB:p.diffB+v}:i.push({fromA:l,toA:u,fromB:f,toB:d,diffA:m,diffB:v})}),i}function dP(e,t,r,n,i){if(!e.length)return t;let a=[];for(let s=0,o=0,c=0,l=0;;s++){let u=s==e.length?null:e[s],f=u?u.fromA+o:r.length,d=u?u.fromB+c:n.length;for(;l<t.length;){let v=t[l];if(v.toA+o>f||v.toB+c>d)break;a.push(v.offset(o,c)),l++}if(!u)break;let h=u.toA+o+u.diffA,p=u.toB+c+u.diffB,m=PP(r.sliceString(f,h),n.sliceString(d,p),i);for(let v of RP(m,r,n,f,d))a.push(v);for(o+=u.diffA,c+=u.diffB;l<t.length;){let v=t[l];if(v.fromA+o>h&&v.fromB+c>p)break;l++}}return a}var kH={scanLimit:500},MP=Re.ViewPlugin.fromClass(class{constructor(e){({deco:this.deco,gutter:this.gutter}=mP(e))}update(e){(e.docChanged||e.viewportChanged||TH(e.startState,e.state)||CH(e.startState,e.state))&&({deco:this.deco,gutter:this.gutter}=mP(e.view))}},{decorations:e=>e.deco}),Vd=Se.Prec.low((0,Re.gutter)({class:\"cm-changeGutter\",markers:e=>{var t;return((t=e.plugin(MP))===null||t===void 0?void 0:t.gutter)||Se.RangeSet.empty}}));function TH(e,t){return e.field(Ao,!1)!=t.field(Ao,!1)}function CH(e,t){return e.facet(Fn)!=t.facet(Fn)}var hP=Re.Decoration.line({class:\"cm-changedLine\"}),PH=Re.Decoration.mark({class:\"cm-changedText\"}),RH=Re.Decoration.mark({tagName:\"ins\",class:\"cm-insertedLine\"}),MH=Re.Decoration.mark({tagName:\"del\",class:\"cm-deletedLine\"}),pP=new class extends Re.GutterMarker{constructor(){super(...arguments),this.elementClass=\"cm-changedLineGutter\"}};function OH(e,t,r,n,i,a){let s=r?e.fromA:e.fromB,o=r?e.toA:e.toB,c=0;if(s!=o){i.add(s,s,hP),i.add(s,o,r?MH:RH),a&&a.add(s,s,pP);for(let l=t.iterRange(s,o-1),u=s;!l.next().done;){if(l.lineBreak){u++,i.add(u,u,hP),a&&a.add(u,u,pP);continue}let f=u+l.value.length;if(n)for(;c<e.changes.length;){let d=e.changes[c],h=s+(r?d.fromA:d.fromB),p=s+(r?d.toA:d.toB),m=Math.max(u,h),v=Math.min(f,p);if(m<v&&i.add(m,v,PH),p<f)c++;else break}u=f}}}function mP(e){let t=e.state.field(Ao),{side:r,highlightChanges:n,markGutter:i}=e.state.facet(Fn),a=r==\"a\",s=new Se.RangeSetBuilder,o=i?new Se.RangeSetBuilder:null,{from:c,to:l}=e.viewport;for(let u of t){if((a?u.fromA:u.fromB)>=l)break;(a?u.toA:u.toB)>c&&OH(u,e.state.doc,a,n,s,o)}return{deco:s.finish(),gutter:o&&o.finish()}}var xo=class extends Re.WidgetType{constructor(t){super(),this.height=t}eq(t){return this.height==t.height}toDOM(){let t=document.createElement(\"div\");return t.className=\"cm-mergeSpacer\",t.style.height=this.height+\"px\",t}updateDOM(t){return t.style.height=this.height+\"px\",!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}},Xd=Se.StateEffect.define({map:(e,t)=>e.map(t)}),Cc=Se.StateField.define({create:()=>Re.Decoration.none,update:(e,t)=>{for(let r of t.effects)if(r.is(Xd))return r.value;return e.map(t.changes)},provide:e=>Re.EditorView.decorations.from(e)}),Wd=.01;function gP(e,t){if(e.size!=t.size)return!1;let r=e.iter(),n=t.iter();for(;r.value;){if(r.from!=n.from||Math.abs(r.value.spec.widget.height-n.value.spec.widget.height)>1)return!1;r.next(),n.next()}return!0}function IH(e,t,r){let n=new Se.RangeSetBuilder,i=new Se.RangeSetBuilder,a=e.state.field(Cc).iter(),s=t.state.field(Cc).iter(),o=0,c=0,l=0,u=0,f=e.viewport,d=t.viewport;for(let v=0;;v++){let y=v<r.length?r[v]:null,b=y?y.fromA:e.state.doc.length,x=y?y.fromB:t.state.doc.length;if(o<b){let E=e.lineBlockAt(o).top+l,_=t.lineBlockAt(c).top+u,k=E-_;k<-Wd?(l-=k,n.add(o,o,Re.Decoration.widget({widget:new xo(-k),block:!0,side:-1}))):k>Wd&&(u+=k,i.add(c,c,Re.Decoration.widget({widget:new xo(k),block:!0,side:-1})))}if(b>o+1e3&&o<f.from&&b>f.from&&c<d.from&&x>d.from){let E=Math.min(f.from-o,d.from-c);o+=E,c+=E,v--}else if(y)o=y.toA,c=y.toB;else break;for(;a.value&&a.from<o;)l-=a.value.spec.widget.height,a.next();for(;s.value&&s.from<c;)u-=s.value.spec.widget.height,s.next()}for(;a.value;)l-=a.value.spec.widget.height,a.next();for(;s.value;)u-=s.value.spec.widget.height,s.next();let h=e.contentHeight+l-(t.contentHeight+u);h<Wd?n.add(e.state.doc.length,e.state.doc.length,Re.Decoration.widget({widget:new xo(-h),block:!0,side:1})):h>Wd&&i.add(t.state.doc.length,t.state.doc.length,Re.Decoration.widget({widget:new xo(h),block:!0,side:1}));let p=n.finish(),m=i.finish();gP(p,e.state.field(Cc))||e.dispatch({effects:Xd.of(p)}),gP(m,t.state.field(Cc))||t.dispatch({effects:Xd.of(m)})}var Ov=Se.StateEffect.define({map:(e,t)=>t.mapPos(e)}),Iv=class extends Re.WidgetType{constructor(t){super(),this.lines=t}eq(t){return this.lines==t.lines}toDOM(t){let r=document.createElement(\"div\");return r.className=\"cm-collapsedLines\",r.textContent=t.state.phrase(\"$ unchanged lines\",this.lines),r.addEventListener(\"click\",n=>{let i=t.posAtDOM(n.target);t.dispatch({effects:Ov.of(i)});let{side:a,sibling:s}=t.state.facet(Fn);s&&s().dispatch({effects:Ov.of(FH(i,t.state.field(Ao),a==\"a\"))})}),r}ignoreEvent(t){return t instanceof MouseEvent}get estimatedHeight(){return 27}};function FH(e,t,r){let n=0,i=0;for(let a=0;;a++){let s=a<t.length?t[a]:null;if(!s||(r?s.fromA:s.fromB)>=e)return i+(e-n);[n,i]=r?[s.toA,s.toB]:[s.toB,s.toA]}}var $H=Se.StateField.define({create(e){return Re.Decoration.none},update(e,t){e=e.map(t.changes);for(let r of t.effects)r.is(Ov)&&(e=e.update({filter:n=>n!=r.value}));return e},provide:e=>Re.EditorView.decorations.from(e)});function vP({margin:e=3,minSize:t=4}){return $H.init(r=>LH(r,e,t))}function LH(e,t,r){let n=new Se.RangeSetBuilder,i=e.facet(Fn).side==\"a\",a=e.field(Ao),s=1;for(let o=0;;o++){let c=o<a.length?a[o]:null,l=o?s+t:1,u=c?e.doc.lineAt(i?c.fromA:c.fromB).number-1-t:e.doc.lines,f=u-l+1;if(f>=r&&n.add(e.doc.line(l).from,e.doc.line(u).to,Re.Decoration.replace({widget:new Iv(f),block:!0})),!c)break;s=e.doc.lineAt(Math.min(e.doc.length,i?c.toA:c.toB)).number}return n.finish()}var DH=Re.EditorView.styleModule.of(new Gd({\".cm-mergeView\":{overflowY:\"auto\"},\".cm-mergeViewEditors\":{display:\"flex\",alignItems:\"stretch\"},\".cm-mergeViewEditor\":{flexGrow:1,flexBasis:0,overflow:\"hidden\"},\".cm-merge-revert\":{width:\"1.6em\",flexGrow:0,flexShrink:0,position:\"relative\"},\".cm-merge-revert button\":{position:\"absolute\",display:\"block\",width:\"100%\",boxSizing:\"border-box\",textAlign:\"center\",background:\"none\",border:\"none\",font:\"inherit\",cursor:\"pointer\"}})),NH=Re.EditorView.baseTheme({\".cm-mergeView & .cm-scroller, .cm-mergeView &\":{height:\"auto !important\",overflowY:\"visible !important\"},\"&.cm-merge-a .cm-changedLine, .cm-deletedChunk\":{backgroundColor:\"rgba(160, 128, 100, .08)\"},\"&.cm-merge-b .cm-changedLine\":{backgroundColor:\"rgba(100, 160, 128, .08)\"},\"&light.cm-merge-a .cm-changedText, &light .cm-deletedChunk .cm-deletedText\":{background:\"linear-gradient(#ee443366, #ee443366) bottom/100% 2px no-repeat\"},\"&dark.cm-merge-a .cm-changedText, &dark .cm-deletedChunk .cm-deletedText\":{background:\"linear-gradient(#ffaa9966, #ffaa9966) bottom/100% 2px no-repeat\"},\"&light.cm-merge-b .cm-changedText\":{background:\"linear-gradient(#22bb2266, #22bb2266) bottom/100% 2px no-repeat\"},\"&dark.cm-merge-b .cm-changedText\":{background:\"linear-gradient(#88ff8866, #88ff8866) bottom/100% 2px no-repeat\"},\".cm-insertedLine, .cm-deletedLine\":{textDecoration:\"none\"},\".cm-deletedChunk\":{paddingLeft:\"6px\",\"& .cm-chunkButtons\":{position:\"absolute\",insetInlineEnd:\"5px\"},\"& button\":{border:\"none\",cursor:\"pointer\",color:\"white\",margin:\"0 2px\",borderRadius:\"3px\",\"&[name=accept]\":{background:\"#2a2\"},\"&[name=reject]\":{background:\"#d43\"}}},\".cm-collapsedLines\":{padding:\"5px 5px 5px 10px\",cursor:\"pointer\",\"&:before\":{content:'\"\\u299A\"',marginInlineEnd:\"7px\"},\"&:after\":{content:'\"\\u299A\"',marginInlineStart:\"7px\"}},\"&light .cm-collapsedLines\":{color:\"#444\",background:\"linear-gradient(to bottom, transparent 0, #f3f3f3 30%, #f3f3f3 70%, transparent 100%)\"},\"&dark .cm-collapsedLines\":{color:\"#ddd\",background:\"linear-gradient(to bottom, transparent 0, #222 30%, #222 70%, transparent 100%)\"},\".cm-changeGutter\":{width:\"3px\",paddingLeft:\"1px\"},\"&light.cm-merge-a .cm-changedLineGutter, &light .cm-deletedLineGutter\":{background:\"#e43\"},\"&dark.cm-merge-a .cm-changedLineGutter, &dark .cm-deletedLineGutter\":{background:\"#fa9\"},\"&light.cm-merge-b .cm-changedLineGutter\":{background:\"#2b2\"},\"&dark.cm-merge-b .cm-changedLineGutter\":{background:\"#8f8\"}}),yP=new Se.Compartment,qd=new Se.Compartment,Zd=class{constructor(t){this.revertDOM=null,this.revertToA=!1,this.revertToLeft=!1,this.measuring=-1,this.diffConf=t.diffConfig||kH;let r=[Se.Prec.low(MP),NH,DH,Cc,Re.EditorView.updateListener.of(f=>{this.measuring<0&&(f.heightChanged||f.viewportChanged)&&!f.transactions.some(d=>d.effects.some(h=>h.is(Xd)))&&this.measure()})],n=[Fn.of({side:\"a\",sibling:()=>this.b,highlightChanges:t.highlightChanges!==!1,markGutter:t.gutter!==!1})];t.gutter!==!1&&n.push(Vd);let i=Se.EditorState.create({doc:t.a.doc,selection:t.a.selection,extensions:[t.a.extensions||[],Re.EditorView.editorAttributes.of({class:\"cm-merge-a\"}),qd.of(n),r]}),a=[Fn.of({side:\"b\",sibling:()=>this.a,highlightChanges:t.highlightChanges!==!1,markGutter:t.gutter!==!1})];t.gutter!==!1&&a.push(Vd);let s=Se.EditorState.create({doc:t.b.doc,selection:t.b.selection,extensions:[t.b.extensions||[],Re.EditorView.editorAttributes.of({class:\"cm-merge-b\"}),qd.of(a),r]});this.chunks=So.build(i.doc,s.doc,this.diffConf);let o=[Ao.init(()=>this.chunks),yP.of(t.collapseUnchanged?vP(t.collapseUnchanged):[])];i=i.update({effects:Se.StateEffect.appendConfig.of(o)}).state,s=s.update({effects:Se.StateEffect.appendConfig.of(o)}).state,this.dom=document.createElement(\"div\"),this.dom.className=\"cm-mergeView\",this.editorDOM=this.dom.appendChild(document.createElement(\"div\")),this.editorDOM.className=\"cm-mergeViewEditors\";let c=t.orientation||\"a-b\",l=document.createElement(\"div\");l.className=\"cm-mergeViewEditor\";let u=document.createElement(\"div\");u.className=\"cm-mergeViewEditor\",this.editorDOM.appendChild(c==\"a-b\"?l:u),this.editorDOM.appendChild(c==\"a-b\"?u:l),this.a=new Re.EditorView({state:i,parent:l,root:t.root,dispatchTransactions:f=>this.dispatch(f,this.a)}),this.b=new Re.EditorView({state:s,parent:u,root:t.root,dispatchTransactions:f=>this.dispatch(f,this.b)}),this.setupRevertControls(!!t.revertControls,t.revertControls==\"b-to-a\",t.renderRevertControl),t.parent&&t.parent.appendChild(this.dom),this.scheduleMeasure()}dispatch(t,r){if(t.some(n=>n.docChanged)){let n=t[t.length-1],i=t.reduce((s,o)=>s.compose(o.changes),Se.ChangeSet.empty(t[0].startState.doc.length));this.chunks=r==this.a?So.updateA(this.chunks,n.newDoc,this.b.state.doc,i,this.diffConf):So.updateB(this.chunks,this.a.state.doc,n.newDoc,i,this.diffConf),r.update([...t,n.state.update({effects:Mv.of(this.chunks)})]);let a=r==this.a?this.b:this.a;a.update([a.state.update({effects:Mv.of(this.chunks)})]),this.scheduleMeasure()}else r.update(t)}reconfigure(t){if(\"diffConfig\"in t&&(this.diffConf=t.diffConfig),\"orientation\"in t){let a=t.orientation!=\"b-a\";if(a!=(this.editorDOM.firstChild==this.a.dom.parentNode)){let s=this.a.dom.parentNode,o=this.b.dom.parentNode;s.remove(),o.remove(),this.editorDOM.insertBefore(a?s:o,this.editorDOM.firstChild),this.editorDOM.appendChild(a?o:s),this.revertToLeft=!this.revertToLeft,this.revertDOM&&(this.revertDOM.textContent=\"\")}}if(\"revertControls\"in t||\"renderRevertControl\"in t){let a=!!this.revertDOM,s=this.revertToA,o=this.renderRevert;\"revertControls\"in t&&(a=!!t.revertControls,s=t.revertControls==\"b-to-a\"),\"renderRevertControl\"in t&&(o=t.renderRevertControl),this.setupRevertControls(a,s,o)}let r=\"highlightChanges\"in t,n=\"gutter\"in t,i=\"collapseUnchanged\"in t;if(r||n||i){let a=[],s=[];if(r||n){let o=this.a.state.facet(Fn),c=n?t.gutter!==!1:o.markGutter,l=r?t.highlightChanges!==!1:o.highlightChanges;a.push(qd.reconfigure([Fn.of({side:\"a\",sibling:()=>this.b,highlightChanges:l,markGutter:c}),c?Vd:[]])),s.push(qd.reconfigure([Fn.of({side:\"b\",sibling:()=>this.a,highlightChanges:l,markGutter:c}),c?Vd:[]]))}if(i){let o=yP.reconfigure(t.collapseUnchanged?vP(t.collapseUnchanged):[]);a.push(o),s.push(o)}this.a.dispatch({effects:a}),this.b.dispatch({effects:s})}this.scheduleMeasure()}setupRevertControls(t,r,n){this.revertToA=r,this.revertToLeft=this.revertToA==(this.editorDOM.firstChild==this.a.dom.parentNode),this.renderRevert=n,!t&&this.revertDOM?(this.revertDOM.remove(),this.revertDOM=null):t&&!this.revertDOM?(this.revertDOM=this.editorDOM.insertBefore(document.createElement(\"div\"),this.editorDOM.firstChild.nextSibling),this.revertDOM.addEventListener(\"mousedown\",i=>this.revertClicked(i)),this.revertDOM.className=\"cm-merge-revert\"):this.revertDOM&&(this.revertDOM.textContent=\"\")}scheduleMeasure(){if(this.measuring<0){let t=this.dom.ownerDocument.defaultView||window;this.measuring=t.requestAnimationFrame(()=>{this.measuring=-1,this.measure()})}}measure(){IH(this.a,this.b,this.chunks),this.revertDOM&&this.updateRevertButtons()}updateRevertButtons(){let t=this.revertDOM,r=t.firstChild,n=this.a.viewport,i=this.b.viewport;for(let a=0;a<this.chunks.length;a++){let s=this.chunks[a];if(s.fromA>n.to||s.fromB>i.to)break;if(s.fromA<n.from||s.fromB<i.from)continue;let o=this.a.lineBlockAt(s.fromA).top+\"px\";for(;r&&+r.dataset.chunk<a;)r=wP(r);r&&r.dataset.chunk==String(a)?(r.style.top!=o&&(r.style.top=o),r=r.nextSibling):t.insertBefore(this.renderRevertButton(o,a),r)}for(;r;)r=wP(r)}renderRevertButton(t,r){let n;if(this.renderRevert)n=this.renderRevert();else{n=document.createElement(\"button\");let i=this.a.state.phrase(\"Revert this chunk\");n.setAttribute(\"aria-label\",i),n.setAttribute(\"title\",i),n.textContent=this.revertToLeft?\"\\u21DC\":\"\\u21DD\"}return n.style.top=t,n.setAttribute(\"data-chunk\",String(r)),n}revertClicked(t){let r=t.target,n;for(;r&&r.parentNode!=this.revertDOM;)r=r.parentNode;if(r&&(n=this.chunks[r.dataset.chunk])){let[i,a,s,o,c,l]=this.revertToA?[this.b,this.a,n.fromB,n.toB,n.fromA,n.toA]:[this.a,this.b,n.fromA,n.toA,n.fromB,n.toB],u=i.state.sliceDoc(s,Math.max(s,o-1));s!=o&&l<=a.state.doc.length&&(u+=i.state.lineBreak),a.dispatch({changes:{from:c,to:Math.min(a.state.doc.length,l),insert:u},userEvent:\"revert\"}),t.preventDefault()}}destroy(){this.a.destroy(),this.b.destroy(),this.measuring>-1&&(this.dom.ownerDocument.defaultView||window).cancelAnimationFrame(this.measuring),this.dom.remove()}};function wP(e){let t=e.nextSibling;return e.remove(),t}var Co=require(\"@codemirror/commands\"),Kd=require(\"@codemirror/search\");var Ga=class extends To.ItemView{constructor(r,n){super(r);this.plugin=n;this.refreshing=!1;this.ignoreNextModification=!1;this.navigation=!0,this.registerEvent(this.app.workspace.on(\"obsidian-git:status-changed\",()=>{this.mergeView?this.updateRefEditors().catch(console.error):this.createMergeView().catch(console.error)})),this.intervalRef=window.setInterval(()=>{this.mergeView&&this.updateRefEditors().catch(console.error)},30*1e3),this.registerEvent(this.app.vault.on(\"modify\",i=>{this.state.bRef==null&&i.path===this.state.bFile&&(this.ignoreNextModification?this.ignoreNextModification=!1:this.updateModifiableEditor().catch(console.error))})),this.registerEvent(this.app.vault.on(\"delete\",i=>{this.state.bRef==null&&i.path===this.state.bFile&&this.createMergeView().catch(console.error)})),this.registerEvent(this.app.vault.on(\"create\",i=>{this.state.bRef==null&&i.path===this.state.bFile&&this.createMergeView().catch(console.error)})),this.registerEvent(this.app.vault.on(\"rename\",(i,a)=>{this.state.bRef==null&&(i.path===this.state.bFile||a===this.state.bFile)&&this.createMergeView().catch(console.error)})),this.fileSaveDebouncer=(0,To.debounce)(i=>{let a=this.state.bFile;a&&(this.ignoreNextModification=!0,this.plugin.app.vault.adapter.write(a,i).catch(s=>this.plugin.displayError(s)))},1e3,!1)}getViewType(){return Ai.type}getDisplayText(){var r;if(((r=this.state)==null?void 0:r.bFile)!=null){let n=this.state.bFile.split(\"/\").last();return n!=null&&n.endsWith(\".md\")&&(n=n.slice(0,-3)),`Diff: ${n}`}return Ai.name}getIcon(){return Ai.icon}async setState(r,n){this.state=r,To.Platform.isMobile&&(this.leaf.view.titleEl.textContent=this.getDisplayText()),await super.setState(r,n),await this.createMergeView()}getState(){return this.state}onClose(){return window.clearInterval(this.intervalRef),super.onClose()}async onOpen(){return await this.createMergeView(),super.onOpen()}async gitShow(r,n){try{return await this.plugin.gitManager.show(r,n,!1)}catch(i){if(i instanceof wr&&(i.message.includes(\"does not exist\")||i.message.includes(\"unknown revision or path\")||i.message.includes(\"exists on disk, but not in\")||i.message.includes(\"fatal: bad object\")))return i.message.includes(\"fatal: bad object\")&&this.plugin.displayError(i.message),\"\";throw i}}async bShouldBeEditable(){if(this.state.bRef!=null)return!1;let r=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);return await this.app.vault.adapter.exists(r)}async updateModifiableEditor(){if(!this.mergeView||this.refreshing)return;let r=this.mergeView.b;this.refreshing=!0;let n=await this.app.vault.adapter.read(this.state.bFile);if(n!=r.state.doc.toString()){let i=r.state.update({changes:{from:0,to:r.state.doc.length,insert:n},annotations:[ko.Transaction.remote.of(!0)]});r.dispatch(i)}this.refreshing=!1}async updateRefEditors(){if(!this.mergeView||this.refreshing)return;let r=this.mergeView.a,n=this.mergeView.b;this.refreshing=!0;let i=await this.gitShow(this.state.aRef,this.state.aFile),a;if(this.state.bRef!=null&&(a=await this.gitShow(this.state.bRef,this.state.bFile)),i!=r.state.doc.toString()){let s=r.state.update({changes:{from:0,to:r.state.doc.length,insert:i}});r.dispatch(s)}if(a!=null&&a!=n.state.doc.toString()){let s=n.state.update({changes:{from:0,to:n.state.doc.length,insert:a}});n.dispatch(s)}this.refreshing=!1}async createMergeView(){var r,n,i;if((r=this.state)!=null&&r.aFile&&((n=this.state)!=null&&n.bFile)&&!this.refreshing&&this.plugin.gitManager){this.refreshing=!0,(i=this.mergeView)==null||i.destroy();let a=this.containerEl.children[1];a.empty(),this.contentEl.addClass(\"git-split-diff-view\"),this.bIsEditable=await this.bShouldBeEditable();let s=await this.gitShow(this.state.aRef,this.state.aFile),o;if(this.state.bRef!=null)o=await this.gitShow(this.state.bRef,this.state.bFile);else{let p=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);await this.app.vault.adapter.exists(p)?o=await this.app.vault.adapter.read(p):o=\"\"}let c=[(0,Xr.lineNumbers)(),(0,Kd.highlightSelectionMatches)(),(0,Xr.drawSelection)(),Xr.keymap.of([...Co.standardKeymap,Co.indentWithTab]),(0,Co.history)(),(0,Kd.search)(),Xr.EditorView.lineWrapping],l=this,u=Xr.ViewPlugin.define(p=>({update(m){if(m.docChanged&&!m.transactions.some(v=>v.annotation(ko.Transaction.remote))){let v=p.state.doc.toString();l.fileSaveDebouncer(v)}}})),f={doc:s,extensions:[...c,Xr.EditorView.editable.of(!1),ko.EditorState.readOnly.of(!0)]},d=[...c];this.bIsEditable?d.push(u):d.push(Xr.EditorView.editable.of(!1),ko.EditorState.readOnly.of(!0));let h={doc:o,extensions:d};a.addClasses([\"cm-s-obsidian\",\"mod-cm6\",\"markdown-source-view\",\"cm-content\"]),this.mergeView=new Zd({b:h,a:f,diffConfig:{scanLimit:this.bIsEditable?1e3:1e4},parent:a}),this.refreshing=!1}}};var Jd=class extends Ce.Plugin{constructor(){super(...arguments);this.automaticsManager=new Xl(this);this.tools=new kc(this);this.localStorage=new fd(this);this.state={gitAction:0,offlineMode:!1};this.gitReady=!1;this.promiseQueue=new ad(this);this.intervalsToClear=[];this.lineAuthoringFeature=new id(this)}setPluginState(r){var n;this.state=Object.assign(this.state,r),(n=this.statusBar)==null||n.display()}async updateCachedStatus(){var r,n;return this.app.workspace.trigger(\"obsidian-git:loading-status\"),this.cachedStatus=await this.gitManager.status(),this.cachedStatus.conflicted.length>0?(this.localStorage.setConflict(!0),await((r=this.branchBar)==null?void 0:r.display())):(this.localStorage.setConflict(!1),await((n=this.branchBar)==null?void 0:n.display())),this.app.workspace.trigger(\"obsidian-git:status-changed\",this.cachedStatus),this.cachedStatus}async refresh(){if(!this.gitReady)return;let r=this.app.workspace.getLeavesOfType(St.type),n=this.app.workspace.getLeavesOfType($r.type);(this.settings.changedFilesInStatusBar||r.some(i=>{var a;return!((a=i.isDeferred)!=null&&a)})||n.some(i=>{var a;return!((a=i.isDeferred)!=null&&a)}))&&await this.updateCachedStatus().catch(i=>this.displayError(i)),this.app.workspace.trigger(\"obsidian-git:refreshed\")}refreshUpdatedHead(){this.lineAuthoringFeature.refreshLineAuthorViews()}async onload(){console.log(\"加载 \"+this.manifest.name+\" 插件:v\"+this.manifest.version),Yl.plugin=this,this.localStorage.migrate(),await this.loadSettings(),await this.migrateSettings(),this.settingsTab=new zf(this.app,this),this.addSettingTab(this.settingsTab),this.localStorage.getPluginDisabled()||(this.registerStuff(),this.app.workspace.onLayoutReady(()=>this.init({fromReload:!1}).catch(r=>this.displayError(r))))}onExternalSettingsChange(){this.reloadSettings().catch(r=>this.displayError(r))}async reloadSettings(){let r=JSON.stringify(this.settings);await this.loadSettings();let n=JSON.stringify(this.settings);r!==n&&(this.log(\"重新加载设置\"),this.unloadPlugin(),await this.init({fromReload:!0}),this.app.workspace.getLeavesOfType(St.type).forEach(i=>{var a;if(!((a=i.isDeferred)!=null&&a))return i.view.reload()}),this.app.workspace.getLeavesOfType($r.type).forEach(i=>{var a;if(!((a=i.isDeferred)!=null&&a))return i.view.reload()}))}registerStuff(){this.registerEvent(this.app.workspace.on(\"obsidian-git:refresh\",()=>{this.refresh().catch(r=>this.displayError(r))})),this.registerEvent(this.app.workspace.on(\"obsidian-git:head-change\",()=>{this.refreshUpdatedHead()})),this.registerEvent(this.app.workspace.on(\"file-menu\",(r,n,i)=>{this.handleFileMenu(r,n,i,\"file-manu\")})),this.registerEvent(this.app.workspace.on(\"obsidian-git:menu\",(r,n,i)=>{this.handleFileMenu(r,n,i,\"obsidian-git:menu\")})),this.registerEvent(this.app.workspace.on(\"active-leaf-change\",r=>{this.onActiveLeafChange(r)})),this.registerEvent(this.app.vault.on(\"modify\",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on(\"delete\",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on(\"create\",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on(\"rename\",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerView(St.type,r=>new Ac(r,this)),this.registerView($r.type,r=>new vc(r,this)),this.registerView(ki.type,r=>new Ta(r,this)),this.registerView(Ai.type,r=>new Ga(r,this)),this.addRibbonIcon(\"git-pull-request\",\"打开Git源代码管理\",async()=>{var i;let r=this.app.workspace.getLeavesOfType(St.type),n;r.length===0?(n=(i=this.app.workspace.getRightLeaf(!1))!=null?i:this.app.workspace.getLeaf(),await n.setViewState({type:St.type})):n=r.first(),await this.app.workspace.revealLeaf(n)}),this.registerHoverLinkSource(St.type,{display:\"Git View\",defaultMod:!0}),this.lineAuthoringFeature.onLoadPlugin(),this.setRefreshDebouncer(),lC(this)}setRefreshDebouncer(){var r;(r=this.debRefresh)==null||r.cancel(),this.debRefresh=(0,Ce.debounce)(()=>{this.settings.refreshSourceControl&&this.refresh().catch(console.error)},this.settings.refreshSourceControlTimer,!0)}async addFileToGitignore(r){return await this.app.vault.adapter.append(this.gitManager.getRelativeVaultPath(\".gitignore\"),`\n`+this.gitManager.getRelativeRepoPath(r,!0)),this.refresh()}handleFileMenu(r,n,i,a){if(!this.gitReady||!this.settings.showFileMenu||!n)return;let s;if(typeof n==\"string\"?s=n:s=n.path,i==\"file-explorer-context-menu\"&&(r.addItem(o=>{o.setTitle(\"Git: 暂存\").setIcon(\"plus-circle\").setSection(\"action\").onClick(c=>{this.promiseQueue.addTask(async()=>{n instanceof Ce.TFile?await this.gitManager.stage(n.path,!0):await this.gitManager.stageAll({dir:this.gitManager.getRelativeRepoPath(s,!0)}),this.displayMessage(`Staged ${s}`)})})}),r.addItem(o=>{o.setTitle(\"Git: 撤销暂存\").setIcon(\"minus-circle\").setSection(\"action\").onClick(c=>{this.promiseQueue.addTask(async()=>{n instanceof Ce.TFile?await this.gitManager.unstage(n.path,!0):await this.gitManager.unstageAll({dir:this.gitManager.getRelativeRepoPath(s,!0)}),this.displayMessage(`Unstaged ${s}`)})})}),r.addItem(o=>{o.setTitle(\"Git: 添加到 .gitignore\").setIcon(\"file-x\").setSection(\"action\").onClick(c=>{this.addFileToGitignore(s).catch(l=>this.displayError(l))})})),i==\"git-source-control\"){r.addItem(c=>{c.setTitle(\"Git: 添加到 .gitignore\").setIcon(\"file-x\").setSection(\"action\").onClick(l=>{this.addFileToGitignore(s).catch(u=>this.displayError(u))})});let o=this.app.vault.adapter;a===\"obsidian-git:menu\"&&o instanceof Ce.FileSystemAdapter&&(r.addItem(c=>{c.setTitle(\"Open in default app\").setIcon(\"arrow-up-right\").setSection(\"action\").onClick(l=>{this.app.openWithDefaultApp(s)})}),r.addItem(c=>{c.setTitle(\"Show in system explorer\").setIcon(\"arrow-up-right\").setSection(\"action\").onClick(l=>{window.electron.shell.showItemInFolder(OP.join(o.getBasePath(),s))})}))}}async migrateSettings(){this.settings.mergeOnPull!=null&&(this.settings.syncMethod=this.settings.mergeOnPull?\"merge\":\"rebase\",this.settings.mergeOnPull=void 0,await this.saveSettings()),this.settings.autoCommitMessage===void 0&&(this.settings.autoCommitMessage=this.settings.commitMessage,await this.saveSettings()),this.settings.gitPath!=null&&(this.localStorage.setGitPath(this.settings.gitPath),this.settings.gitPath=void 0,await this.saveSettings()),this.settings.username!=null&&(this.localStorage.setPassword(this.settings.username),this.settings.username=void 0,await this.saveSettings())}unloadPlugin(){var r,n;this.gitReady=!1,this.lineAuthoringFeature.deactivateFeature(),this.automaticsManager.unload(),(r=this.branchBar)==null||r.remove(),(n=this.statusBar)==null||n.remove(),this.gitManager.unload(),this.promiseQueue.clear();for(let i of this.intervalsToClear)window.clearInterval(i);this.intervalsToClear=[],this.debRefresh.cancel()}onunload(){this.unloadPlugin(),console.log(\"卸载 \"+this.manifest.name+\" 插件\")}async loadSettings(){let r=await this.loadData();r==null&&(r={showedMobileNotice:!0}),this.settings=Ex(ar,r)}async saveSettings(){var r;(r=this.settingsTab)==null||r.beforeSaveSettings(),await this.saveData(this.settings)}get useSimpleGit(){return Ce.Platform.isDesktopApp}async init({fromReload:r=!1}){var n;if(this.settings.showStatusBar){let i=this.addStatusBarItem();this.statusBar=new sd(i,this),this.intervalsToClear.push(window.setInterval(()=>{var a;return(a=this.statusBar)==null?void 0:a.display()},1e3))}try{this.useSimpleGit?(this.gitManager=new Te(this),await this.gitManager.setGitInstance()):this.gitManager=new an(this);let i=await this.gitManager.checkRequirements();switch(i){case\"missing-git\":this.displayError(`无法运行git命令。尝试运行: '${this.localStorage.getGitPath()||\"git\"}' .`);break;case\"missing-repo\":new Ce.Notice(\"无法找到有效的 Git 仓库。请通过给定的命令创建一个,或克隆一个现有的仓库。\",1e4);break;case\"valid\":if(this.gitReady=!0,this.setPluginState({gitAction:0}),Ce.Platform.isDesktop&&this.settings.showBranchStatusBar){let a=this.addStatusBarItem();this.branchBar=new Ud(a,this),this.intervalsToClear.push(window.setInterval(()=>{var s;return void((s=this.branchBar)==null?void 0:s.display().catch(console.error))},6e4))}await((n=this.branchBar)==null?void 0:n.display()),this.lineAuthoringFeature.conditionallyActivateBySettings(),this.app.workspace.trigger(\"obsidian-git:refresh\"),this.app.workspace.trigger(\"obsidian-git:head-change\"),!r&&this.settings.autoPullOnBoot&&this.promiseQueue.addTask(()=>this.pullChangesFromRemote()),await this.automaticsManager.init();break;default:this.log(\"发生了奇怪的事情。“checkRequirements”结果是 \"+i)}}catch(i){this.displayError(i),console.error(i)}}async createNewRepo(){try{await this.gitManager.init(),new Ce.Notice(\"初始化新仓库\"),await this.init({fromReload:!0})}catch(r){this.displayError(r)}}async cloneNewRepo(){let n=await new Fe(this,{placeholder:\"输入远程URL\"}).openAndGetResult();if(n){let i=\"Vault Root\",a=await new Fe(this,{options:this.gitManager instanceof an?[i]:[],placeholder:\"输入克隆目录。目录必须为空或不存在。\",allowEmpty:this.gitManager instanceof an}).openAndGetResult();if(a==null)return;if(a===i&&(a=\".\"),a=(0,Ce.normalizePath)(a),a===\"/\"&&(a=\".\"),a===\".\"){let f=await new Fe(this,{options:[\"NO\",\"YES\"],placeholder:`Does your remote repo contain a ${this.app.vault.configDir} directory at the root?`,onlySelection:!0}).openAndGetResult();if(f===void 0){new Ce.Notice(\"已终止克隆 clone\");return}else if(f===\"YES\"){let d=\"DELETE ALL YOUR LOCAL CONFIG AND PLUGINS\";if(await new Fe(this,{options:[\"Abort clone\",d],placeholder:`To avoid conflicts, the local ${this.app.vault.configDir} directory needs to be deleted.`,onlySelection:!0}).openAndGetResult()===d)await this.app.vault.adapter.rmdir(this.app.vault.configDir,!0);else{new Ce.Notice(\"已终止克隆 clone\");return}}}let s=await new Fe(this,{placeholder:\"指定克隆的深度。留空则为完整克隆。\",allowEmpty:!0}).openAndGetResult(),o;if(s!==\"\"&&(o=parseInt(s),isNaN(o))){new Ce.Notice(\"无效的深度。中止克隆。\");return}new Ce.Notice(`将新的仓库克隆到 \"${a}\"`);let c=this.settings.basePath,l=a&&a!==\".\";l&&(this.settings.basePath=a);try{await this.gitManager.clone(Vg(n),a,o),new Ce.Notice(\"克隆了新的仓库。\"),new Ce.Notice(\"请重启 Obsidian\"),l&&await this.saveSettings()}catch(u){this.displayError(u),this.settings.basePath=c,await this.saveSettings()}}}async isAllInitialized(){return this.gitReady||await this.init({fromReload:!0}),this.gitReady}async pullChangesFromRemote(){if(!await this.isAllInitialized())return;let r=await this.pull();if(r!==!1){if(r||this.displayMessage(\"Pull: Everything is up-to-date\"),this.gitManager instanceof Te){let n=await this.updateCachedStatus();n.conflicted.length>0&&(this.displayError(`You have conflicts in ${n.conflicted.length} ${n.conflicted.length==1?\"file\":\"files\"}`),await this.handleConflict(n.conflicted))}this.app.workspace.trigger(\"obsidian-git:refresh\"),this.setPluginState({gitAction:0})}}async commitAndSync(r,n=!1,i){!await this.isAllInitialized()||(this.settings.syncMethod==\"reset\"&&this.settings.pullBeforePush&&await this.pull(),!await this.commit({fromAuto:r,requestCustomMessage:n,commitMessage:i}))||(this.settings.syncMethod!=\"reset\"&&this.settings.pullBeforePush&&await this.pull(),this.settings.disablePush||(await this.remotesAreSet()&&await this.gitManager.canPush()?await this.push():this.displayMessage(\"没有提交可以推送\")),this.setPluginState({gitAction:0}))}async commit({fromAuto:r,requestCustomMessage:n=!1,onlyStaged:i=!1,commitMessage:a,amend:s=!1}){if(!await this.isAllInitialized())return!1;try{let o=this.localStorage.getConflict(),c,l,u;if(this.gitManager instanceof Te){if(await this.mayDeleteConflictFile(),l=await this.updateCachedStatus(),l.conflicted.length==0&&(o=!1),r&&l.conflicted.length>0)return this.displayError(`Did not commit, because you have conflicts in ${l.conflicted.length} ${l.conflicted.length==1?\"file\":\"files\"}. Please resolve them and commit per command.`),await this.handleConflict(l.conflicted),!1;c=[...l.changed,...l.staged]}else{if(r&&o)return this.displayError(\"未提交,因为您有冲突。请解决冲突后通过命令提交。\"),!1;if(o)await this.mayDeleteConflictFile(),l=await this.updateCachedStatus(),c=[...l.changed,...l.staged];else{let f=this.gitManager;i?c=await f.getStagedFiles():(u=await f.getUnstagedFiles(),c=u.map(({path:d})=>({vaultPath:this.gitManager.getRelativeVaultPath(d),path:d})))}}if(await this.tools.hasTooBigFiles(c))return this.setPluginState({gitAction:0}),!1;if(c.length!==0||o){let f=a!=null?a:a=r?this.settings.autoCommitMessage:this.settings.commitMessage;if(r&&this.settings.customMessageOnAutoBackup||n){!this.settings.disablePopups&&r&&new Ce.Notice(\"自动备份:请输入自定义提交信息。留空以中止\");let p=await new od(this).openAndGetResult();if(p!=null&&p!=\"\"&&p!=\"...\")f=p;else return this.setPluginState({gitAction:0}),!1}let d;i?d=await this.gitManager.commit({message:f,amend:s}):d=await this.gitManager.commitAll({message:f,status:l,unstagedFiles:u,amend:s}),this.gitManager instanceof Te&&await this.updateCachedStatus();let h=!1;d===void 0&&(h=!0,d=c.length),this.displayMessage(`Committed${h?\" approx.\":\"\"} ${d} ${d==1?\"file\":\"files\"}`)}else this.displayMessage(\"没有更改可以提交\");return this.app.workspace.trigger(\"obsidian-git:refresh\"),!0}catch(o){return this.displayError(o),!1}}async push(){if(!await this.isAllInitialized()||!await this.remotesAreSet())return!1;let r=this.localStorage.getConflict();try{this.gitManager instanceof Te&&await this.mayDeleteConflictFile();let n;if(this.gitManager instanceof Te&&(n=await this.updateCachedStatus()).conflicted.length>0)return this.displayError(`Cannot push. You have conflicts in ${n.conflicted.length} ${n.conflicted.length==1?\"file\":\"files\"}`),await this.handleConflict(n.conflicted),!1;if(this.gitManager instanceof an&&r)return this.displayError(\"无法推送。您有冲突\"),!1;this.log(\"推送中....\");let i=await this.gitManager.push();return i!==void 0&&(i>0?this.displayMessage(`已推送 ${i} ${i==1?\"个文件\":\"个文件\"} 到远程`) :this.displayMessage(\"没有提交可以推送\")),this.setPluginState({offlineMode:!1}),this.app.workspace.trigger(\"obsidian-git:refresh\"),!0}catch(n){return n instanceof Is?this.handleNoNetworkError(n):this.displayError(n),!1}}async pull(){if(!await this.remotesAreSet())return!1;try{this.log(\"拉取中....\");let r=await this.gitManager.pull()||[];return this.setPluginState({offlineMode:!1}),r.length>0&&(this.displayMessage(`Pulled ${r.length} ${r.length==1?\"file\":\"files\"} from remote`),this.lastPulledFiles=r),r.length}catch(r){return this.displayError(r),!1}}async fetch(){if(await this.remotesAreSet())try{await this.gitManager.fetch(),this.displayMessage(\"已从远程获取\"),this.setPluginState({offlineMode:!1}),this.app.workspace.trigger(\"obsidian-git:refresh\")}catch(r){this.displayError(r)}}async mayDeleteConflictFile(){let r=this.app.vault.getAbstractFileByPath(Ms);r&&(this.app.workspace.iterateAllLeaves(n=>{var i;n.view instanceof Ce.MarkdownView&&((i=n.view.file)==null?void 0:i.path)==r.path&&n.detach()}),await this.app.vault.delete(r))}async stageFile(r){return await this.isAllInitialized()?(await this.gitManager.stage(r.path,!0),this.displayMessage(`已暂存 ${r.path}`),this.app.workspace.trigger(\"obsidian-git:refresh\"),this.setPluginState({gitAction:0}),!0):!1}async unstageFile(r){return await this.isAllInitialized()?(await this.gitManager.unstage(r.path,!0),this.displayMessage(`未暂存 ${r.path}`),this.app.workspace.trigger(\"obsidian-git:refresh\"),this.setPluginState({gitAction:0}),!0):!1}async switchBranch(){var i;if(!await this.isAllInitialized())return;let r=await this.gitManager.branchInfo(),n=await new Hd(this,r.branches).openAndGetReslt();if(n!=null)return await this.gitManager.checkout(n),this.displayMessage(`已切换到 ${n}`),this.app.workspace.trigger(\"obsidian-git:refresh\"),await((i=this.branchBar)==null?void 0:i.display()),n}async switchRemoteBranch(){var a;if(!await this.isAllInitialized())return;let r=await this.selectRemoteBranch()||\"\",[n,i]=Ii(r);if(i!=null&&n!=null)return await this.gitManager.checkout(i,n),this.displayMessage(`已切换到 ${r}`),await((a=this.branchBar)==null?void 0:a.display()),r}async createBranch(){var n;if(!await this.isAllInitialized())return;let r=await new Fe(this,{placeholder:\"创建新分支\"}).openAndGetResult();if(r!=null)return await this.gitManager.createBranch(r),this.displayMessage(`Created new branch ${r}`),await((n=this.branchBar)==null?void 0:n.display()),r}async deleteBranch(){var i;if(!await this.isAllInitialized())return;let r=await this.gitManager.branchInfo();r.current&&r.branches.remove(r.current);let n=await new Fe(this,{options:r.branches,placeholder:\"删除分支\",onlySelection:!0}).openAndGetResult();if(n!=null){let a=!1;if(!await this.gitManager.branchIsMerged(n)){let o=await new Fe(this,{options:[\"YES\",\"NO\"],placeholder:\"此分支尚未合并到HEAD中。强制删除？\",onlySelection:!0}).openAndGetResult();if(o!==\"YES\")return;a=o===\"YES\"}return await this.gitManager.deleteBranch(n,a),this.displayMessage(`Deleted branch ${n}`),await((i=this.branchBar)==null?void 0:i.display()),n}}async remotesAreSet(){return this.settings.updateSubmodules||(await this.gitManager.branchInfo()).tracking?!0:(new Ce.Notice(\"没有设置上游分支。请选择一个。\"),await this.setUpstreamBranch())}async setUpstreamBranch(){let r=await this.selectRemoteBranch();return r==null?(this.displayError(\"操作已中止。未设置上游分支！\",1e4),this.setPluginState({gitAction:0}),!1):(await this.gitManager.updateUpstreamBranch(r),this.displayMessage(`Set upstream branch to ${r}`),this.setPluginState({gitAction:0}),!0)}async discardAll(){await this.gitManager.discardAll({status:this.cachedStatus}),new Ce.Notice(\"所有本地更改已被丢弃。新文件保持不变。\"),this.app.workspace.trigger(\"obsidian-git:refresh\")}async handleConflict(r){this.localStorage.setConflict(!0);let n;r!==void 0&&(n=[\"# Conflicts\",\"Please resolve them and commit them using the commands `Git: Commit all changes` followed by `Git: Push`\",\"(This file will automatically be deleted before commit)\",\"[[#Additional Instructions]] available below file list\",\"\",...r.map(i=>{let a=this.app.vault.getAbstractFileByPath(i);return a instanceof Ce.TFile?`- [[${this.app.metadataCache.fileToLinktext(a,\"/\")}]]`:`- Not a file: ${i}`}),`\n# Additional Instructions\nI strongly recommend to use \"Source mode\" for viewing the conflicted files. For simple conflicts, in each file listed above replace every occurrence of the following text blocks with the desired text.\n\n\\`\\`\\`diff\n<<<<<<< HEAD\n    File changes in local repository\n=======\n    File changes in remote repository\n>>>>>>> origin/main\n\\`\\`\\``]),await this.tools.writeAndOpenFile(n==null?void 0:n.join(`\n`))}async editRemotes(){if(!await this.isAllInitialized())return;let r=await this.gitManager.getRemotes(),i=await new Fe(this,{options:r,placeholder:\"通过输入名称并选择来选择或创建新的远程\"}).openAndGetResult();if(i){let a=await this.gitManager.getRemoteUrl(i),o=await new Fe(this,{initialValue:a}).openAndGetResult();if(o)return await this.gitManager.setRemote(i,Vg(o)),i}}async selectRemoteBranch(){let r=await this.gitManager.getRemotes(),n;r.length===0&&(n=await this.editRemotes(),n==null&&(r=await this.gitManager.getRemotes()));let i=new Fe(this,{options:r,placeholder:\"通过输入名称并选择来选择或创建新的远程\"}),a=n!=null?n:await i.openAndGetResult();if(a){this.displayMessage(\"正在获取远程分支\"),await this.gitManager.fetch(a);let s=await this.gitManager.getRemoteBranches(a);return await new Fe(this,{options:s,placeholder:\"通过输入名称并选择来选择或创建新的远程分支\"}).openAndGetResult()}}async removeRemote(){if(!await this.isAllInitialized())return;let r=await this.gitManager.getRemotes(),i=await new Fe(this,{options:r,placeholder:\"选择一个远程\"}).openAndGetResult();i&&await this.gitManager.removeRemote(i)}onActiveLeafChange(r){var s,o;let n=r==null?void 0:r.view;if(!(n!=null&&n.getState().file)&&!(n instanceof Ta||n instanceof Ga))return;let i=this.app.workspace.getLeavesOfType(St.type).first(),a=this.app.workspace.getLeavesOfType($r.type).first();if((s=i==null?void 0:i.view.containerEl.querySelector(\"div.nav-file-title.is-active\"))==null||s.removeClass(\"is-active\"),(o=a==null?void 0:a.view.containerEl.querySelector(\"div.nav-file-title.is-active\"))==null||o.removeClass(\"is-active\"),(r==null?void 0:r.view)instanceof Ta||(r==null?void 0:r.view)instanceof Ga){let c=r.view.state.bFile;this.lastDiffViewState=r.view.getState();let l;i&&r.view.state.aRef==\"HEAD\"?l=i.view.containerEl.querySelector(`div.staged div.nav-file-title[data-path='${c}']`):i&&r.view.state.aRef==\"\"?l=i.view.containerEl.querySelector(`div.changes div.nav-file-title[data-path='${c}']`):a&&(l=a.view.containerEl.querySelector(`div.nav-file-title[data-path='${c}']`)),l==null||l.addClass(\"is-active\")}else this.lastDiffViewState=void 0}handleNoNetworkError(r){this.state.offlineMode?this.log(\"遇到网络错误,但已在离线模式\"):this.displayError(\"Git:进入离线模式。未来的网络错误将不再显示。\",2e3),this.setPluginState({gitAction:0,offlineMode:!0})}displayMessage(r,n=4*1e3){var i;(i=this.statusBar)==null||i.displayMessage(r.toLowerCase(),n),this.settings.disablePopups||(!this.settings.disablePopupsForNoChanges||!r.startsWith(\"No changes\"))&&new Ce.Notice(r,5*1e3),this.log(r)}displayError(r,n=10*1e3){var a;if(r instanceof gl.UserCanceledError){new Ce.Notice(\"中止\");return}let i;r instanceof Error?i=r:i=new Error(String(r)),this.setPluginState({gitAction:0}),new Ce.Notice(i.message,n),console.error(`${this.manifest.id}:`,i.stack),(a=this.statusBar)==null||a.displayMessage(i.message.toLowerCase(),n)}log(...r){console.log(`${this.manifest.id}:`,...r)}};\n/*! Bundled license information:\n\nieee754/index.js:\n  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)\n\nbuffer/index.js:\n  (*!\n   * The buffer module from node.js, for the browser.\n   *\n   * @author   Feross Aboukhadijeh <https://feross.org>\n   * @license  MIT\n   *)\n\nsafe-buffer/index.js:\n  (*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)\n\ncrc-32/crc32.js:\n  (*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com *)\n\njs-sha256/src/sha256.js:\n  (**\n   * [js-sha256]{@link https://github.com/emn178/js-sha256}\n   *\n   * @version 0.9.0\n   * @author Chen, Yi-Cyuan [emn178@gmail.com]\n   * @copyright Chen, Yi-Cyuan 2014-2017\n   * @license MIT\n   *)\n\nfeather-icons/dist/feather.js:\n  (*!\n    Copyright (c) 2016 Jed Watson.\n    Licensed under the MIT License (MIT), see\n    http://jedwatson.github.io/classnames\n  *)\n*/\n\n/* nosourcemap */"
  },
  {
    "path": ".obsidian/plugins/obsidian-git/manifest.json",
    "content": "{\n    \"author\": \"Vinzent\",\n    \"authorUrl\": \"https://github.com/Vinzent03\",\n    \"id\": \"obsidian-git\",\n    \"name\": \"Git\",\n    \"description\": \"集成 Git 版本控制,具有自动备份和其他高级功能。\",\n    \"isDesktopOnly\": false,\n    \"fundingUrl\": \"https://ko-fi.com/vinzent\",\n    \"version\": \"2.32.1\"\n}\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-git/obsidian_askpass.sh",
    "content": "#!/bin/sh\n\nPROMPT=\"$1\"\nTEMP_FILE=\"$OBSIDIAN_GIT_CREDENTIALS_INPUT\"\n\ncleanup() {\n    rm -f \"$TEMP_FILE\" \"$TEMP_FILE.response\"\n}\ntrap cleanup EXIT\n\necho \"$PROMPT\" > \"$TEMP_FILE\"\n\nwhile [ ! -e \"$TEMP_FILE.response\" ]; do\n    if [ ! -e \"$TEMP_FILE\" ]; then\n        echo \"Trigger file got removed: Abort\" >&2\n        exit 1\n    fi\n    sleep 0.1\ndone\n\nRESPONSE=$(cat \"$TEMP_FILE.response\")\n\necho \"$RESPONSE\"\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-git/styles.css",
    "content": "@keyframes loading {\n    0% {\n        transform: rotate(0deg);\n    }\n\n    100% {\n        transform: rotate(360deg);\n    }\n}\n\n.workspace-leaf-content[data-type=\"git-view\"] .button-border {\n    border: 2px solid var(--interactive-accent);\n    border-radius: var(--radius-s);\n}\n\n.workspace-leaf-content[data-type=\"git-view\"] .view-content {\n    padding: 0;\n}\n\n.workspace-leaf-content[data-type=\"git-history-view\"] .view-content {\n    padding: 0;\n}\n\n.loading > svg {\n    animation: 2s linear infinite loading;\n    transform-origin: 50% 50%;\n    display: inline-block;\n}\n\n.obsidian-git-center {\n    margin: auto;\n    text-align: center;\n    width: 50%;\n}\n\n.obsidian-git-textarea {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n}\n\n.obsidian-git-disabled {\n    opacity: 0.5;\n}\n\n.obsidian-git-center-button {\n    display: block;\n    margin: 20px auto;\n}\n\n.tooltip.mod-left {\n    overflow-wrap: break-word;\n}\n\n.tooltip.mod-right {\n    overflow-wrap: break-word;\n}\n.git-tools {\n    display: flex;\n    margin-left: auto;\n}\n.git-tools .type {\n    padding-left: var(--size-2-1);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 11px;\n}\n\n.git-tools .type[data-type=\"M\"] {\n    color: orange;\n}\n.git-tools .type[data-type=\"D\"] {\n    color: red;\n}\n.git-tools .buttons {\n    display: flex;\n}\n.git-tools .buttons > * {\n    padding: 0 0;\n    height: auto;\n}\n\n.is-active .git-tools .buttons > * {\n    color: var(--nav-item-color-active);\n}\n\n.git-author {\n    color: var(--text-accent);\n}\n\n.git-date {\n    color: var(--text-accent);\n}\n\n.git-ref {\n    color: var(--text-accent);\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-d-none {\n    display: none;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-wrapper {\n    text-align: left;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-header {\n    background-color: var(--background-primary);\n    border-bottom: 1px solid var(--interactive-accent);\n    font-family: var(--font-monospace);\n    height: 35px;\n    padding: 5px 10px;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-header,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-stats {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-stats {\n    font-size: 14px;\n    margin-left: auto;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-lines-added {\n    border: 1px solid #b4e2b4;\n    border-radius: 5px 0 0 5px;\n    color: #399839;\n    padding: 2px;\n    text-align: right;\n    vertical-align: middle;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-lines-deleted {\n    border: 1px solid #e9aeae;\n    border-radius: 0 5px 5px 0;\n    color: #c33;\n    margin-left: 1px;\n    padding: 2px;\n    text-align: left;\n    vertical-align: middle;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-name-wrapper {\n    -webkit-box-align: center;\n    -ms-flex-align: center;\n    align-items: center;\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    font-size: 15px;\n    width: 100%;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-name {\n    overflow-x: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-wrapper {\n    border: 1px solid var(--background-modifier-border);\n    border-radius: 3px;\n    margin-bottom: 1em;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-collapse {\n    -webkit-box-pack: end;\n    -ms-flex-pack: end;\n    -webkit-box-align: center;\n    -ms-flex-align: center;\n    align-items: center;\n    border: 1px solid var(--background-modifier-border);\n    border-radius: 3px;\n    cursor: pointer;\n    display: none;\n    font-size: 12px;\n    justify-content: flex-end;\n    padding: 4px 8px;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-collapse.d2h-selected {\n    background-color: #c8e1ff;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-collapse-input {\n    margin: 0 4px 0 0;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-diff-table {\n    border-collapse: collapse;\n    font-family: Menlo, Consolas, monospace;\n    font-size: 13px;\n    width: 100%;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-files-diff {\n    width: 100%;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-diff {\n    overflow-y: hidden;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-side-diff {\n    display: inline-block;\n    margin-bottom: -8px;\n    margin-right: -4px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    width: 50%;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line {\n    padding: 0 8em;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-line {\n    display: inline-block;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    white-space: nowrap;\n    width: 100%;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-line {\n    padding: 0 4.5em;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line-ctn {\n    word-wrap: normal;\n    background: none;\n    display: inline-block;\n    padding: 0;\n    -webkit-user-select: text;\n    -moz-user-select: text;\n    -ms-user-select: text;\n    user-select: text;\n    vertical-align: middle;\n    white-space: pre;\n    width: 100%;\n}\n\n.theme-light .workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line del,\n.theme-light\n    .workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-code-side-line\n    del {\n    background-color: #ffb6ba;\n}\n\n.theme-dark .workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line del,\n.theme-dark\n    .workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-code-side-line\n    del {\n    background-color: #8d232881;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line del,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line ins,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-line del,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-line ins {\n    border-radius: 0.2em;\n    display: inline-block;\n    margin-top: -1px;\n    text-decoration: none;\n    vertical-align: middle;\n}\n\n.theme-light .workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line ins,\n.theme-light\n    .workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-code-side-line\n    ins {\n    background-color: #97f295;\n    text-align: left;\n}\n\n.theme-dark .workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line ins,\n.theme-dark\n    .workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-code-side-line\n    ins {\n    background-color: #1d921996;\n    text-align: left;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line-prefix {\n    word-wrap: normal;\n    background: none;\n    display: inline;\n    padding: 0;\n    white-space: pre;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .line-num1 {\n    float: left;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .line-num1,\n.workspace-leaf-content[data-type=\"diff-view\"] .line-num2 {\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    overflow: hidden;\n    padding: 0 0.5em;\n    text-overflow: ellipsis;\n    width: 3.5em;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .line-num2 {\n    float: right;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-linenumber {\n    background-color: var(--background-primary);\n    border: solid var(--background-modifier-border);\n    border-width: 0 1px;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    color: var(--text-muted);\n    cursor: pointer;\n    display: inline-block;\n    position: absolute;\n    text-align: right;\n    width: 7.5em;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-linenumber:after {\n    content: \"\\200b\";\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-linenumber {\n    background-color: var(--background-primary);\n    border: solid var(--background-modifier-border);\n    border-width: 0 1px;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    color: var(--text-muted);\n    cursor: pointer;\n    display: inline-block;\n    overflow: hidden;\n    padding: 0 0.5em;\n    position: absolute;\n    text-align: right;\n    text-overflow: ellipsis;\n    width: 4em;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-diff-tbody tr {\n    position: relative;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-linenumber:after {\n    content: \"\\200b\";\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-emptyplaceholder,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-emptyplaceholder {\n    background-color: var(--background-primary);\n    border-color: var(--background-modifier-border);\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-line-prefix,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-linenumber,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-linenumber,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-emptyplaceholder {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-linenumber,\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-code-side-linenumber {\n    direction: rtl;\n}\n\n.theme-light .workspace-leaf-content[data-type=\"diff-view\"] .d2h-del {\n    background-color: #fee8e9;\n    border-color: #e9aeae;\n}\n\n.theme-light .workspace-leaf-content[data-type=\"diff-view\"] .d2h-ins {\n    background-color: #dfd;\n    border-color: #b4e2b4;\n}\n\n.theme-dark .workspace-leaf-content[data-type=\"diff-view\"] .d2h-del {\n    background-color: #521b1d83;\n    border-color: #691d1d73;\n}\n\n.theme-dark .workspace-leaf-content[data-type=\"diff-view\"] .d2h-ins {\n    background-color: rgba(30, 71, 30, 0.5);\n    border-color: #13501381;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-info {\n    background-color: var(--background-primary);\n    border-color: var(--background-modifier-border);\n    color: var(--text-normal);\n}\n\n.theme-light\n    .workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-file-diff\n    .d2h-del.d2h-change {\n    background-color: #fdf2d0;\n}\n\n.theme-dark\n    .workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-file-diff\n    .d2h-del.d2h-change {\n    background-color: #55492480;\n}\n\n.theme-light\n    .workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-file-diff\n    .d2h-ins.d2h-change {\n    background-color: #ded;\n}\n\n.theme-dark\n    .workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-file-diff\n    .d2h-ins.d2h-change {\n    background-color: rgba(37, 78, 37, 0.418);\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-list-wrapper {\n    margin-bottom: 10px;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-list-wrapper a {\n    color: #3572b0;\n    text-decoration: none;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"]\n    .d2h-file-list-wrapper\n    a:visited {\n    color: #3572b0;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-list-header {\n    text-align: left;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-list-title {\n    font-weight: 700;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-list-line {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    text-align: left;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-list {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-list > li {\n    border-bottom: 1px solid var(--background-modifier-border);\n    margin: 0;\n    padding: 5px 10px;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-list > li:last-child {\n    border-bottom: none;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-file-switch {\n    cursor: pointer;\n    display: none;\n    font-size: 10px;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-icon {\n    fill: currentColor;\n    margin-right: 10px;\n    vertical-align: middle;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-deleted {\n    color: #c33;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-added {\n    color: #399839;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-changed {\n    color: #d0b44c;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-moved {\n    color: #3572b0;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-tag {\n    background-color: var(--background-primary);\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    font-size: 10px;\n    margin-left: 5px;\n    padding: 0 2px;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-deleted-tag {\n    border: 2px solid #c33;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-added-tag {\n    border: 1px solid #399839;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-changed-tag {\n    border: 1px solid #d0b44c;\n}\n\n.workspace-leaf-content[data-type=\"diff-view\"] .d2h-moved-tag {\n    border: 1px solid #3572b0;\n}\n\n/* ====================== Line Authoring Information ====================== */\n\n.cm-gutterElement.obs-git-blame-gutter {\n    /* Add background color to spacing inbetween and around the gutter for better aesthetics */\n    border-width: 0px 2px 0.2px 2px;\n    border-style: solid;\n    border-color: var(--background-secondary);\n    background-color: var(--background-secondary);\n}\n\n.cm-gutterElement.obs-git-blame-gutter > div,\n.line-author-settings-preview {\n    /* delegate text color to settings */\n    color: var(--obs-git-gutter-text);\n    font-family: monospace;\n    height: 100%; /* ensure, that age-based background color occupies entire parent */\n    text-align: right;\n    padding: 0px 6px 0px 6px;\n    white-space: pre; /* Keep spaces and do not collapse them. */\n}\n\n@media (max-width: 800px) {\n    /* hide git blame gutter not to superpose text */\n    .cm-gutterElement.obs-git-blame-gutter {\n        display: none;\n    }\n}\n\n.git-unified-diff-view,\n.git-split-diff-view .cm-deletedLine .cm-changedText {\n    background-color: #ee443330;\n}\n\n.git-unified-diff-view,\n.git-split-diff-view .cm-insertedLine .cm-changedText {\n    background-color: #22bb2230;\n}\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-style-settings/data.json",
    "content": "{\n  \"blue-topaz-theme@@bt-status-on\": false,\n  \"blue-topaz-theme@@layout-style-options\": \"layout-style-options-default\",\n  \"blue-topaz-theme@@retain-header-color\": false,\n  \"blue-topaz-theme@@color-scheme-options\": \"color-scheme-options-simplicity-topaz\",\n  \"blue-topaz-theme@@left-ribbon-style\": \"default-left-ribbon-style\",\n  \"blue-topaz-theme@@search-bar-style-option\": \"default-search-bar\",\n  \"Blue-Topaz-Codebox-Highlight@@code-theme-selection\": \"code-theme-bt-default\",\n  \"blue-topaz-theme@@scrollbar-style-option\": \"default-scrollbar\",\n  \"blue-topaz-theme@@toggle-divider-lines\": false,\n  \"blue-topaz-theme@@toggle-header-bottom-line\": false,\n  \"blue-topaz-theme@@fancy-hr\": \"default-hr\",\n  \"blue-topaz-theme@@blockquote-style-change-options\": \"blockquote-style-default\",\n  \"blue-topaz-theme@@disable-auto-hide-header\": false,\n  \"blue-topaz-theme@@bt-colorful-titlebar\": false\n}"
  },
  {
    "path": ".obsidian/plugins/obsidian-style-settings/main.js",
    "content": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source, please visit the github repository of this plugin\n*/\n\nvar al=Object.create;var Kt=Object.defineProperty;var sl=Object.getOwnPropertyDescriptor;var ol=Object.getOwnPropertyNames;var ll=Object.getPrototypeOf,cl=Object.prototype.hasOwnProperty;var Zr=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),ul=(e,n)=>{for(var t in n)Kt(e,t,{get:n[t],enumerable:!0})},Zn=(e,n,t,a)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let i of ol(n))!cl.call(e,i)&&i!==t&&Kt(e,i,{get:()=>n[i],enumerable:!(a=sl(n,i))||a.enumerable});return e};var Xt=(e,n,t)=>(t=e!=null?al(ll(e)):{},Zn(n||!e||!e.__esModule?Kt(t,\"default\",{value:e,enumerable:!0}):t,e)),fl=e=>Zn(Kt({},\"__esModule\",{value:!0}),e);var Jn=Zr((Jr,en)=>{(function(e,n){typeof Jr==\"object\"&&typeof en!=\"undefined\"?en.exports=n():typeof define==\"function\"&&define.amd?define(n):e.chroma=n()})(Jr,function(){\"use strict\";for(var e=function(r,s,o){return s===void 0&&(s=0),o===void 0&&(o=1),r<s?s:r>o?o:r},n=function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var s=0;s<=3;s++)s<3?((r[s]<0||r[s]>255)&&(r._clipped=!0),r[s]=e(r[s],0,255)):s===3&&(r[s]=e(r[s],0,1));return r},t={},a=0,i=[\"Boolean\",\"Number\",\"String\",\"Function\",\"Array\",\"Date\",\"RegExp\",\"Undefined\",\"Null\"];a<i.length;a+=1){var l=i[a];t[\"[object \"+l+\"]\"]=l.toLowerCase()}var c=function(r){return t[Object.prototype.toString.call(r)]||\"object\"},f=function(r,s){return s===void 0&&(s=null),r.length>=3?Array.prototype.slice.call(r):c(r[0])==\"object\"&&s?s.split(\"\").filter(function(o){return r[0][o]!==void 0}).map(function(o){return r[0][o]}):r[0]},p=function(r){if(r.length<2)return null;var s=r.length-1;return c(r[s])==\"string\"?r[s].toLowerCase():null},w=Math.PI,S={clip_rgb:n,limit:e,type:c,unpack:f,last:p,PI:w,TWOPI:w*2,PITHIRD:w/3,DEG2RAD:w/180,RAD2DEG:180/w},E={format:{},autodetect:[]},B=S.last,Y=S.clip_rgb,K=S.type,Q=function(){for(var s=[],o=arguments.length;o--;)s[o]=arguments[o];var g=this;if(K(s[0])===\"object\"&&s[0].constructor&&s[0].constructor===this.constructor)return s[0];var b=B(s),y=!1;if(!b){y=!0,E.sorted||(E.autodetect=E.autodetect.sort(function(R,O){return O.p-R.p}),E.sorted=!0);for(var d=0,A=E.autodetect;d<A.length;d+=1){var k=A[d];if(b=k.test.apply(k,s),b)break}}if(E.format[b]){var N=E.format[b].apply(null,y?s:s.slice(0,-1));g._rgb=Y(N)}else throw new Error(\"unknown format: \"+s);g._rgb.length===3&&g._rgb.push(1)};Q.prototype.toString=function(){return K(this.hex)==\"function\"?this.hex():\"[\"+this._rgb.join(\",\")+\"]\"};var L=Q,re=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(re.Color,[null].concat(r)))};re.Color=L,re.version=\"2.1.2\";var F=re,oe=S.unpack,ke=Math.max,Ye=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=oe(r,\"rgb\"),g=o[0],b=o[1],y=o[2];g=g/255,b=b/255,y=y/255;var d=1-ke(g,ke(b,y)),A=d<1?1/(1-d):0,k=(1-g-d)*A,N=(1-b-d)*A,R=(1-y-d)*A;return[k,N,R,d]},qe=Ye,Te=S.unpack,xe=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];r=Te(r,\"cmyk\");var o=r[0],g=r[1],b=r[2],y=r[3],d=r.length>4?r[4]:1;return y===1?[0,0,0,d]:[o>=1?0:255*(1-o)*(1-y),g>=1?0:255*(1-g)*(1-y),b>=1?0:255*(1-b)*(1-y),d]},Pe=xe,Qe=S.unpack,ie=S.type;L.prototype.cmyk=function(){return qe(this._rgb)},F.cmyk=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"cmyk\"])))},E.format.cmyk=Pe,E.autodetect.push({p:2,test:function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];if(r=Qe(r,\"cmyk\"),ie(r)===\"array\"&&r.length===4)return\"cmyk\"}});var Tt=S.unpack,Ve=S.last,V=function(r){return Math.round(r*100)/100},M=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=Tt(r,\"hsla\"),g=Ve(r)||\"lsa\";return o[0]=V(o[0]||0),o[1]=V(o[1]*100)+\"%\",o[2]=V(o[2]*100)+\"%\",g===\"hsla\"||o.length>3&&o[3]<1?(o[3]=o.length>3?o[3]:1,g=\"hsla\"):o.length=3,g+\"(\"+o.join(\",\")+\")\"},_=M,u=S.unpack,h=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];r=u(r,\"rgba\");var o=r[0],g=r[1],b=r[2];o/=255,g/=255,b/=255;var y=Math.min(o,g,b),d=Math.max(o,g,b),A=(d+y)/2,k,N;return d===y?(k=0,N=Number.NaN):k=A<.5?(d-y)/(d+y):(d-y)/(2-d-y),o==d?N=(g-b)/(d-y):g==d?N=2+(b-o)/(d-y):b==d&&(N=4+(o-g)/(d-y)),N*=60,N<0&&(N+=360),r.length>3&&r[3]!==void 0?[N,k,A,r[3]]:[N,k,A]},m=h,C=S.unpack,v=S.last,x=Math.round,T=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=C(r,\"rgba\"),g=v(r)||\"rgb\";return g.substr(0,3)==\"hsl\"?_(m(o),g):(o[0]=x(o[0]),o[1]=x(o[1]),o[2]=x(o[2]),(g===\"rgba\"||o.length>3&&o[3]<1)&&(o[3]=o.length>3?o[3]:1,g=\"rgba\"),g+\"(\"+o.slice(0,g===\"rgb\"?3:4).join(\",\")+\")\")},I=T,D=S.unpack,P=Math.round,G=function(){for(var r,s=[],o=arguments.length;o--;)s[o]=arguments[o];s=D(s,\"hsl\");var g=s[0],b=s[1],y=s[2],d,A,k;if(b===0)d=A=k=y*255;else{var N=[0,0,0],R=[0,0,0],O=y<.5?y*(1+b):y+b-y*b,j=2*y-O,H=g/360;N[0]=H+1/3,N[1]=H,N[2]=H-1/3;for(var X=0;X<3;X++)N[X]<0&&(N[X]+=1),N[X]>1&&(N[X]-=1),6*N[X]<1?R[X]=j+(O-j)*6*N[X]:2*N[X]<1?R[X]=O:3*N[X]<2?R[X]=j+(O-j)*(2/3-N[X])*6:R[X]=j;r=[P(R[0]*255),P(R[1]*255),P(R[2]*255)],d=r[0],A=r[1],k=r[2]}return s.length>3?[d,A,k,s[3]]:[d,A,k,1]},q=G,U=/^rgb\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*\\)$/,fe=/^rgba\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/,le=/^rgb\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/,Oe=/^rgba\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/,ye=/^hsl\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/,Se=/^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/,ae=Math.round,Re=function(r){r=r.toLowerCase().trim();var s;if(E.format.named)try{return E.format.named(r)}catch(X){}if(s=r.match(U)){for(var o=s.slice(1,4),g=0;g<3;g++)o[g]=+o[g];return o[3]=1,o}if(s=r.match(fe)){for(var b=s.slice(1,5),y=0;y<4;y++)b[y]=+b[y];return b}if(s=r.match(le)){for(var d=s.slice(1,4),A=0;A<3;A++)d[A]=ae(d[A]*2.55);return d[3]=1,d}if(s=r.match(Oe)){for(var k=s.slice(1,5),N=0;N<3;N++)k[N]=ae(k[N]*2.55);return k[3]=+k[3],k}if(s=r.match(ye)){var R=s.slice(1,4);R[1]*=.01,R[2]*=.01;var O=q(R);return O[3]=1,O}if(s=r.match(Se)){var j=s.slice(1,4);j[1]*=.01,j[2]*=.01;var H=q(j);return H[3]=+s[4],H}};Re.test=function(r){return U.test(r)||fe.test(r)||le.test(r)||Oe.test(r)||ye.test(r)||Se.test(r)};var _e=Re,Ke=S.type;L.prototype.css=function(r){return I(this._rgb,r)},F.css=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"css\"])))},E.format.css=_e,E.autodetect.push({p:5,test:function(r){for(var s=[],o=arguments.length-1;o-- >0;)s[o]=arguments[o+1];if(!s.length&&Ke(r)===\"string\"&&_e.test(r))return\"css\"}});var Le=S.unpack;E.format.gl=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=Le(r,\"rgba\");return o[0]*=255,o[1]*=255,o[2]*=255,o},F.gl=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"gl\"])))},L.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var et=S.unpack,gt=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=et(r,\"rgb\"),g=o[0],b=o[1],y=o[2],d=Math.min(g,b,y),A=Math.max(g,b,y),k=A-d,N=k*100/255,R=d/(255-k)*100,O;return k===0?O=Number.NaN:(g===A&&(O=(b-y)/k),b===A&&(O=2+(y-g)/k),y===A&&(O=4+(g-b)/k),O*=60,O<0&&(O+=360)),[O,N,R]},tt=gt,Ar=S.unpack,kr=Math.floor,Tr=function(){for(var r,s,o,g,b,y,d=[],A=arguments.length;A--;)d[A]=arguments[A];d=Ar(d,\"hcg\");var k=d[0],N=d[1],R=d[2],O,j,H;R=R*255;var X=N*255;if(N===0)O=j=H=R;else{k===360&&(k=0),k>360&&(k-=360),k<0&&(k+=360),k/=60;var ee=kr(k),Z=k-ee,se=R*(1-N),ge=se+X*(1-Z),Me=se+X*Z,Ie=se+X;switch(ee){case 0:r=[Ie,Me,se],O=r[0],j=r[1],H=r[2];break;case 1:s=[ge,Ie,se],O=s[0],j=s[1],H=s[2];break;case 2:o=[se,Ie,Me],O=o[0],j=o[1],H=o[2];break;case 3:g=[se,ge,Ie],O=g[0],j=g[1],H=g[2];break;case 4:b=[Me,se,Ie],O=b[0],j=b[1],H=b[2];break;case 5:y=[Ie,se,ge],O=y[0],j=y[1],H=y[2];break}}return[O,j,H,d.length>3?d[3]:1]},Lr=Tr,Mr=S.unpack,Ir=S.type;L.prototype.hcg=function(){return tt(this._rgb)},F.hcg=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"hcg\"])))},E.format.hcg=Lr,E.autodetect.push({p:1,test:function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];if(r=Mr(r,\"hcg\"),Ir(r)===\"array\"&&r.length===3)return\"hcg\"}});var jt=S.unpack,Lt=S.last,Gt=Math.round,ja=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=jt(r,\"rgba\"),g=o[0],b=o[1],y=o[2],d=o[3],A=Lt(r)||\"auto\";d===void 0&&(d=1),A===\"auto\"&&(A=d<1?\"rgba\":\"rgb\"),g=Gt(g),b=Gt(b),y=Gt(y);var k=g<<16|b<<8|y,N=\"000000\"+k.toString(16);N=N.substr(N.length-6);var R=\"0\"+Gt(d*255).toString(16);switch(R=R.substr(R.length-2),A.toLowerCase()){case\"rgba\":return\"#\"+N+R;case\"argb\":return\"#\"+R+N;default:return\"#\"+N}},An=ja,Ga=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Ya=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,Ua=function(r){if(r.match(Ga)){(r.length===4||r.length===7)&&(r=r.substr(1)),r.length===3&&(r=r.split(\"\"),r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var s=parseInt(r,16),o=s>>16,g=s>>8&255,b=s&255;return[o,g,b,1]}if(r.match(Ya)){(r.length===5||r.length===9)&&(r=r.substr(1)),r.length===4&&(r=r.split(\"\"),r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var y=parseInt(r,16),d=y>>24&255,A=y>>16&255,k=y>>8&255,N=Math.round((y&255)/255*100)/100;return[d,A,k,N]}throw new Error(\"unknown hex color: \"+r)},kn=Ua,Wa=S.type;L.prototype.hex=function(r){return An(this._rgb,r)},F.hex=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"hex\"])))},E.format.hex=kn,E.autodetect.push({p:4,test:function(r){for(var s=[],o=arguments.length-1;o-- >0;)s[o]=arguments[o+1];if(!s.length&&Wa(r)===\"string\"&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return\"hex\"}});var qa=S.unpack,Tn=S.TWOPI,za=Math.min,Ka=Math.sqrt,Xa=Math.acos,Qa=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=qa(r,\"rgb\"),g=o[0],b=o[1],y=o[2];g/=255,b/=255,y/=255;var d,A=za(g,b,y),k=(g+b+y)/3,N=k>0?1-A/k:0;return N===0?d=NaN:(d=(g-b+(g-y))/2,d/=Ka((g-b)*(g-b)+(g-y)*(b-y)),d=Xa(d),y>b&&(d=Tn-d),d/=Tn),[d*360,N,k]},Za=Qa,Ja=S.unpack,Fr=S.limit,pt=S.TWOPI,Nr=S.PITHIRD,ht=Math.cos,es=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];r=Ja(r,\"hsi\");var o=r[0],g=r[1],b=r[2],y,d,A;return isNaN(o)&&(o=0),isNaN(g)&&(g=0),o>360&&(o-=360),o<0&&(o+=360),o/=360,o<1/3?(A=(1-g)/3,y=(1+g*ht(pt*o)/ht(Nr-pt*o))/3,d=1-(A+y)):o<2/3?(o-=1/3,y=(1-g)/3,d=(1+g*ht(pt*o)/ht(Nr-pt*o))/3,A=1-(y+d)):(o-=2/3,d=(1-g)/3,A=(1+g*ht(pt*o)/ht(Nr-pt*o))/3,y=1-(d+A)),y=Fr(b*y*3),d=Fr(b*d*3),A=Fr(b*A*3),[y*255,d*255,A*255,r.length>3?r[3]:1]},ts=es,rs=S.unpack,ns=S.type;L.prototype.hsi=function(){return Za(this._rgb)},F.hsi=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"hsi\"])))},E.format.hsi=ts,E.autodetect.push({p:2,test:function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];if(r=rs(r,\"hsi\"),ns(r)===\"array\"&&r.length===3)return\"hsi\"}});var is=S.unpack,as=S.type;L.prototype.hsl=function(){return m(this._rgb)},F.hsl=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"hsl\"])))},E.format.hsl=q,E.autodetect.push({p:2,test:function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];if(r=is(r,\"hsl\"),as(r)===\"array\"&&r.length===3)return\"hsl\"}});var ss=S.unpack,os=Math.min,ls=Math.max,cs=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];r=ss(r,\"rgb\");var o=r[0],g=r[1],b=r[2],y=os(o,g,b),d=ls(o,g,b),A=d-y,k,N,R;return R=d/255,d===0?(k=Number.NaN,N=0):(N=A/d,o===d&&(k=(g-b)/A),g===d&&(k=2+(b-o)/A),b===d&&(k=4+(o-g)/A),k*=60,k<0&&(k+=360)),[k,N,R]},us=cs,fs=S.unpack,gs=Math.floor,ps=function(){for(var r,s,o,g,b,y,d=[],A=arguments.length;A--;)d[A]=arguments[A];d=fs(d,\"hsv\");var k=d[0],N=d[1],R=d[2],O,j,H;if(R*=255,N===0)O=j=H=R;else{k===360&&(k=0),k>360&&(k-=360),k<0&&(k+=360),k/=60;var X=gs(k),ee=k-X,Z=R*(1-N),se=R*(1-N*ee),ge=R*(1-N*(1-ee));switch(X){case 0:r=[R,ge,Z],O=r[0],j=r[1],H=r[2];break;case 1:s=[se,R,Z],O=s[0],j=s[1],H=s[2];break;case 2:o=[Z,R,ge],O=o[0],j=o[1],H=o[2];break;case 3:g=[Z,se,R],O=g[0],j=g[1],H=g[2];break;case 4:b=[ge,Z,R],O=b[0],j=b[1],H=b[2];break;case 5:y=[R,Z,se],O=y[0],j=y[1],H=y[2];break}}return[O,j,H,d.length>3?d[3]:1]},hs=ps,ds=S.unpack,vs=S.type;L.prototype.hsv=function(){return us(this._rgb)},F.hsv=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"hsv\"])))},E.format.hsv=hs,E.autodetect.push({p:2,test:function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];if(r=ds(r,\"hsv\"),vs(r)===\"array\"&&r.length===3)return\"hsv\"}});var Be={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ms=S.unpack,Ln=Math.pow,bs=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=ms(r,\"rgb\"),g=o[0],b=o[1],y=o[2],d=ys(g,b,y),A=d[0],k=d[1],N=d[2],R=116*k-16;return[R<0?0:R,500*(A-k),200*(k-N)]},Or=function(r){return(r/=255)<=.04045?r/12.92:Ln((r+.055)/1.055,2.4)},Dr=function(r){return r>Be.t3?Ln(r,1/3):r/Be.t2+Be.t0},ys=function(r,s,o){r=Or(r),s=Or(s),o=Or(o);var g=Dr((.4124564*r+.3575761*s+.1804375*o)/Be.Xn),b=Dr((.2126729*r+.7151522*s+.072175*o)/Be.Yn),y=Dr((.0193339*r+.119192*s+.9503041*o)/Be.Zn);return[g,b,y]},Mn=bs,Ss=S.unpack,Cs=Math.pow,xs=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];r=Ss(r,\"lab\");var o=r[0],g=r[1],b=r[2],y,d,A,k,N,R;return d=(o+16)/116,y=isNaN(g)?d:d+g/500,A=isNaN(b)?d:d-b/200,d=Be.Yn*$r(d),y=Be.Xn*$r(y),A=Be.Zn*$r(A),k=Rr(3.2404542*y-1.5371385*d-.4985314*A),N=Rr(-.969266*y+1.8760108*d+.041556*A),R=Rr(.0556434*y-.2040259*d+1.0572252*A),[k,N,R,r.length>3?r[3]:1]},Rr=function(r){return 255*(r<=.00304?12.92*r:1.055*Cs(r,1/2.4)-.055)},$r=function(r){return r>Be.t1?r*r*r:Be.t2*(r-Be.t0)},In=xs,ws=S.unpack,Es=S.type;L.prototype.lab=function(){return Mn(this._rgb)},F.lab=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"lab\"])))},E.format.lab=In,E.autodetect.push({p:2,test:function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];if(r=ws(r,\"lab\"),Es(r)===\"array\"&&r.length===3)return\"lab\"}});var _s=S.unpack,As=S.RAD2DEG,ks=Math.sqrt,Ts=Math.atan2,Ls=Math.round,Ms=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=_s(r,\"lab\"),g=o[0],b=o[1],y=o[2],d=ks(b*b+y*y),A=(Ts(y,b)*As+360)%360;return Ls(d*1e4)===0&&(A=Number.NaN),[g,d,A]},Is=Ms,Fs=S.unpack,Ns=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=Fs(r,\"rgb\"),g=o[0],b=o[1],y=o[2],d=Mn(g,b,y),A=d[0],k=d[1],N=d[2];return Is(A,k,N)},Fn=Ns,Os=S.unpack,Ds=S.DEG2RAD,Rs=Math.sin,$s=Math.cos,Ps=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=Os(r,\"lch\"),g=o[0],b=o[1],y=o[2];return isNaN(y)&&(y=0),y=y*Ds,[g,$s(y)*b,Rs(y)*b]},Vs=Ps,Bs=S.unpack,Hs=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];r=Bs(r,\"lch\");var o=r[0],g=r[1],b=r[2],y=Vs(o,g,b),d=y[0],A=y[1],k=y[2],N=In(d,A,k),R=N[0],O=N[1],j=N[2];return[R,O,j,r.length>3?r[3]:1]},Nn=Hs,js=S.unpack,Gs=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=js(r,\"hcl\").reverse();return Nn.apply(void 0,o)},Ys=Gs,Us=S.unpack,Ws=S.type;L.prototype.lch=function(){return Fn(this._rgb)},L.prototype.hcl=function(){return Fn(this._rgb).reverse()},F.lch=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"lch\"])))},F.hcl=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"hcl\"])))},E.format.lch=Nn,E.format.hcl=Ys,[\"lch\",\"hcl\"].forEach(function(r){return E.autodetect.push({p:2,test:function(){for(var s=[],o=arguments.length;o--;)s[o]=arguments[o];if(s=Us(s,r),Ws(s)===\"array\"&&s.length===3)return r}})});var qs={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflower:\"#6495ed\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",laserlemon:\"#ffff54\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrod:\"#fafad2\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgreen:\"#90ee90\",lightgrey:\"#d3d3d3\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",maroon2:\"#7f0000\",maroon3:\"#b03060\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370db\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#db7093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",purple2:\"#7f007f\",purple3:\"#a020f0\",rebeccapurple:\"#663399\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\"},dt=qs,zs=S.type;L.prototype.name=function(){for(var r=An(this._rgb,\"rgb\"),s=0,o=Object.keys(dt);s<o.length;s+=1){var g=o[s];if(dt[g]===r)return g.toLowerCase()}return r},E.format.named=function(r){if(r=r.toLowerCase(),dt[r])return kn(dt[r]);throw new Error(\"unknown color name: \"+r)},E.autodetect.push({p:5,test:function(r){for(var s=[],o=arguments.length-1;o-- >0;)s[o]=arguments[o+1];if(!s.length&&zs(r)===\"string\"&&dt[r.toLowerCase()])return\"named\"}});var Ks=S.unpack,Xs=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=Ks(r,\"rgb\"),g=o[0],b=o[1],y=o[2];return(g<<16)+(b<<8)+y},Qs=Xs,Zs=S.type,Js=function(r){if(Zs(r)==\"number\"&&r>=0&&r<=16777215){var s=r>>16,o=r>>8&255,g=r&255;return[s,o,g,1]}throw new Error(\"unknown num color: \"+r)},eo=Js,to=S.type;L.prototype.num=function(){return Qs(this._rgb)},F.num=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"num\"])))},E.format.num=eo,E.autodetect.push({p:5,test:function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];if(r.length===1&&to(r[0])===\"number\"&&r[0]>=0&&r[0]<=16777215)return\"num\"}});var On=S.unpack,Dn=S.type,Rn=Math.round;L.prototype.rgb=function(r){return r===void 0&&(r=!0),r===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Rn)},L.prototype.rgba=function(r){return r===void 0&&(r=!0),this._rgb.slice(0,4).map(function(s,o){return o<3?r===!1?s:Rn(s):s})},F.rgb=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"rgb\"])))},E.format.rgb=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];var o=On(r,\"rgba\");return o[3]===void 0&&(o[3]=1),o},E.autodetect.push({p:3,test:function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];if(r=On(r,\"rgba\"),Dn(r)===\"array\"&&(r.length===3||r.length===4&&Dn(r[3])==\"number\"&&r[3]>=0&&r[3]<=1))return\"rgb\"}});var Yt=Math.log,ro=function(r){var s=r/100,o,g,b;return s<66?(o=255,g=-155.25485562709179-.44596950469579133*(g=s-2)+104.49216199393888*Yt(g),b=s<20?0:-254.76935184120902+.8274096064007395*(b=s-10)+115.67994401066147*Yt(b)):(o=351.97690566805693+.114206453784165*(o=s-55)-40.25366309332127*Yt(o),g=325.4494125711974+.07943456536662342*(g=s-50)-28.0852963507957*Yt(g),b=255),[o,g,b,1]},$n=ro,no=S.unpack,io=Math.round,ao=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];for(var o=no(r,\"rgb\"),g=o[0],b=o[2],y=1e3,d=4e4,A=.4,k;d-y>A;){k=(d+y)*.5;var N=$n(k);N[2]/N[0]>=b/g?d=k:y=k}return io(k)},so=ao;L.prototype.temp=L.prototype.kelvin=L.prototype.temperature=function(){return so(this._rgb)},F.temp=F.kelvin=F.temperature=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];return new(Function.prototype.bind.apply(L,[null].concat(r,[\"temp\"])))},E.format.temp=E.format.kelvin=E.format.temperature=$n;var oo=S.type;L.prototype.alpha=function(r,s){return s===void 0&&(s=!1),r!==void 0&&oo(r)===\"number\"?s?(this._rgb[3]=r,this):new L([this._rgb[0],this._rgb[1],this._rgb[2],r],\"rgb\"):this._rgb[3]},L.prototype.clipped=function(){return this._rgb._clipped||!1},L.prototype.darken=function(r){r===void 0&&(r=1);var s=this,o=s.lab();return o[0]-=Be.Kn*r,new L(o,\"lab\").alpha(s.alpha(),!0)},L.prototype.brighten=function(r){return r===void 0&&(r=1),this.darken(-r)},L.prototype.darker=L.prototype.darken,L.prototype.brighter=L.prototype.brighten,L.prototype.get=function(r){var s=r.split(\".\"),o=s[0],g=s[1],b=this[o]();if(g){var y=o.indexOf(g);if(y>-1)return b[y];throw new Error(\"unknown channel \"+g+\" in mode \"+o)}else return b};var lo=S.type,co=Math.pow,uo=1e-7,fo=20;L.prototype.luminance=function(r){if(r!==void 0&&lo(r)===\"number\"){if(r===0)return new L([0,0,0,this._rgb[3]],\"rgb\");if(r===1)return new L([255,255,255,this._rgb[3]],\"rgb\");var s=this.luminance(),o=\"rgb\",g=fo,b=function(d,A){var k=d.interpolate(A,.5,o),N=k.luminance();return Math.abs(r-N)<uo||!g--?k:N>r?b(d,k):b(k,A)},y=(s>r?b(new L([0,0,0]),this):b(this,new L([255,255,255]))).rgb();return new L(y.concat([this._rgb[3]]))}return go.apply(void 0,this._rgb.slice(0,3))};var go=function(r,s,o){return r=Pr(r),s=Pr(s),o=Pr(o),.2126*r+.7152*s+.0722*o},Pr=function(r){return r/=255,r<=.03928?r/12.92:co((r+.055)/1.055,2.4)},He={},Pn=S.type,Vn=function(r,s,o){o===void 0&&(o=.5);for(var g=[],b=arguments.length-3;b-- >0;)g[b]=arguments[b+3];var y=g[0]||\"lrgb\";if(!He[y]&&!g.length&&(y=Object.keys(He)[0]),!He[y])throw new Error(\"interpolation mode \"+y+\" is not defined\");return Pn(r)!==\"object\"&&(r=new L(r)),Pn(s)!==\"object\"&&(s=new L(s)),He[y](r,s,o).alpha(r.alpha()+o*(s.alpha()-r.alpha()))};L.prototype.mix=L.prototype.interpolate=function(r,s){s===void 0&&(s=.5);for(var o=[],g=arguments.length-2;g-- >0;)o[g]=arguments[g+2];return Vn.apply(void 0,[this,r,s].concat(o))},L.prototype.premultiply=function(r){r===void 0&&(r=!1);var s=this._rgb,o=s[3];return r?(this._rgb=[s[0]*o,s[1]*o,s[2]*o,o],this):new L([s[0]*o,s[1]*o,s[2]*o,o],\"rgb\")},L.prototype.saturate=function(r){r===void 0&&(r=1);var s=this,o=s.lch();return o[1]+=Be.Kn*r,o[1]<0&&(o[1]=0),new L(o,\"lch\").alpha(s.alpha(),!0)},L.prototype.desaturate=function(r){return r===void 0&&(r=1),this.saturate(-r)};var Bn=S.type;L.prototype.set=function(r,s,o){o===void 0&&(o=!1);var g=r.split(\".\"),b=g[0],y=g[1],d=this[b]();if(y){var A=b.indexOf(y);if(A>-1){if(Bn(s)==\"string\")switch(s.charAt(0)){case\"+\":d[A]+=+s;break;case\"-\":d[A]+=+s;break;case\"*\":d[A]*=+s.substr(1);break;case\"/\":d[A]/=+s.substr(1);break;default:d[A]=+s}else if(Bn(s)===\"number\")d[A]=s;else throw new Error(\"unsupported value for Color.set\");var k=new L(d,b);return o?(this._rgb=k._rgb,this):k}throw new Error(\"unknown channel \"+y+\" in mode \"+b)}else return d};var po=function(r,s,o){var g=r._rgb,b=s._rgb;return new L(g[0]+o*(b[0]-g[0]),g[1]+o*(b[1]-g[1]),g[2]+o*(b[2]-g[2]),\"rgb\")};He.rgb=po;var Vr=Math.sqrt,vt=Math.pow,ho=function(r,s,o){var g=r._rgb,b=g[0],y=g[1],d=g[2],A=s._rgb,k=A[0],N=A[1],R=A[2];return new L(Vr(vt(b,2)*(1-o)+vt(k,2)*o),Vr(vt(y,2)*(1-o)+vt(N,2)*o),Vr(vt(d,2)*(1-o)+vt(R,2)*o),\"rgb\")};He.lrgb=ho;var vo=function(r,s,o){var g=r.lab(),b=s.lab();return new L(g[0]+o*(b[0]-g[0]),g[1]+o*(b[1]-g[1]),g[2]+o*(b[2]-g[2]),\"lab\")};He.lab=vo;var Mt=function(r,s,o,g){var b,y,d,A;g===\"hsl\"?(d=r.hsl(),A=s.hsl()):g===\"hsv\"?(d=r.hsv(),A=s.hsv()):g===\"hcg\"?(d=r.hcg(),A=s.hcg()):g===\"hsi\"?(d=r.hsi(),A=s.hsi()):(g===\"lch\"||g===\"hcl\")&&(g=\"hcl\",d=r.hcl(),A=s.hcl());var k,N,R,O,j,H;g.substr(0,1)===\"h\"&&(b=d,k=b[0],R=b[1],j=b[2],y=A,N=y[0],O=y[1],H=y[2]);var X,ee,Z,se;return!isNaN(k)&&!isNaN(N)?(N>k&&N-k>180?se=N-(k+360):N<k&&k-N>180?se=N+360-k:se=N-k,ee=k+o*se):isNaN(k)?isNaN(N)?ee=Number.NaN:(ee=N,(j==1||j==0)&&g!=\"hsv\"&&(X=O)):(ee=k,(H==1||H==0)&&g!=\"hsv\"&&(X=R)),X===void 0&&(X=R+o*(O-R)),Z=j+o*(H-j),new L([ee,X,Z],g)},Hn=function(r,s,o){return Mt(r,s,o,\"lch\")};He.lch=Hn,He.hcl=Hn;var mo=function(r,s,o){var g=r.num(),b=s.num();return new L(g+o*(b-g),\"num\")};He.num=mo;var bo=function(r,s,o){return Mt(r,s,o,\"hcg\")};He.hcg=bo;var yo=function(r,s,o){return Mt(r,s,o,\"hsi\")};He.hsi=yo;var So=function(r,s,o){return Mt(r,s,o,\"hsl\")};He.hsl=So;var Co=function(r,s,o){return Mt(r,s,o,\"hsv\")};He.hsv=Co;var xo=S.clip_rgb,Br=Math.pow,Hr=Math.sqrt,jr=Math.PI,jn=Math.cos,Gn=Math.sin,wo=Math.atan2,Eo=function(r,s,o){s===void 0&&(s=\"lrgb\"),o===void 0&&(o=null);var g=r.length;o||(o=Array.from(new Array(g)).map(function(){return 1}));var b=g/o.reduce(function(ee,Z){return ee+Z});if(o.forEach(function(ee,Z){o[Z]*=b}),r=r.map(function(ee){return new L(ee)}),s===\"lrgb\")return _o(r,o);for(var y=r.shift(),d=y.get(s),A=[],k=0,N=0,R=0;R<d.length;R++)if(d[R]=(d[R]||0)*o[0],A.push(isNaN(d[R])?0:o[0]),s.charAt(R)===\"h\"&&!isNaN(d[R])){var O=d[R]/180*jr;k+=jn(O)*o[0],N+=Gn(O)*o[0]}var j=y.alpha()*o[0];r.forEach(function(ee,Z){var se=ee.get(s);j+=ee.alpha()*o[Z+1];for(var ge=0;ge<d.length;ge++)if(!isNaN(se[ge]))if(A[ge]+=o[Z+1],s.charAt(ge)===\"h\"){var Me=se[ge]/180*jr;k+=jn(Me)*o[Z+1],N+=Gn(Me)*o[Z+1]}else d[ge]+=se[ge]*o[Z+1]});for(var H=0;H<d.length;H++)if(s.charAt(H)===\"h\"){for(var X=wo(N/A[H],k/A[H])/jr*180;X<0;)X+=360;for(;X>=360;)X-=360;d[H]=X}else d[H]=d[H]/A[H];return j/=g,new L(d,s).alpha(j>.99999?1:j,!0)},_o=function(r,s){for(var o=r.length,g=[0,0,0,0],b=0;b<r.length;b++){var y=r[b],d=s[b]/o,A=y._rgb;g[0]+=Br(A[0],2)*d,g[1]+=Br(A[1],2)*d,g[2]+=Br(A[2],2)*d,g[3]+=A[3]*d}return g[0]=Hr(g[0]),g[1]=Hr(g[1]),g[2]=Hr(g[2]),g[3]>.9999999&&(g[3]=1),new L(xo(g))},mt=S.type,Ao=Math.pow,Ut=function(r){var s=\"rgb\",o=F(\"#ccc\"),g=0,b=[0,1],y=[],d=[0,0],A=!1,k=[],N=!1,R=0,O=1,j=!1,H={},X=!0,ee=1,Z=function($){if($=$||[\"#fff\",\"#000\"],$&&mt($)===\"string\"&&F.brewer&&F.brewer[$.toLowerCase()]&&($=F.brewer[$.toLowerCase()]),mt($)===\"array\"){$.length===1&&($=[$[0],$[0]]),$=$.slice(0);for(var z=0;z<$.length;z++)$[z]=F($[z]);y.length=0;for(var te=0;te<$.length;te++)y.push(te/($.length-1))}return Ue(),k=$},se=function($){if(A!=null){for(var z=A.length-1,te=0;te<z&&$>=A[te];)te++;return te-1}return 0},ge=function($){return $},Me=function($){return $},Ie=function($,z){var te,J;if(z==null&&(z=!1),isNaN($)||$===null)return o;if(z)J=$;else if(A&&A.length>2){var je=se($);J=je/(A.length-2)}else O!==R?J=($-R)/(O-R):J=1;J=Me(J),z||(J=ge(J)),ee!==1&&(J=Ao(J,ee)),J=d[0]+J*(1-d[0]-d[1]),J=Math.min(1,Math.max(0,J));var be=Math.floor(J*1e4);if(X&&H[be])te=H[be];else{if(mt(k)===\"array\")for(var ce=0;ce<y.length;ce++){var ue=y[ce];if(J<=ue){te=k[ce];break}if(J>=ue&&ce===y.length-1){te=k[ce];break}if(J>ue&&J<y[ce+1]){J=(J-ue)/(y[ce+1]-ue),te=F.interpolate(k[ce],k[ce+1],J,s);break}}else mt(k)===\"function\"&&(te=k(J));X&&(H[be]=te)}return te},Ue=function(){return H={}};Z(r);var ne=function($){var z=F(Ie($));return N&&z[N]?z[N]():z};return ne.classes=function($){if($!=null){if(mt($)===\"array\")A=$,b=[$[0],$[$.length-1]];else{var z=F.analyze(b);$===0?A=[z.min,z.max]:A=F.limits(z,\"e\",$)}return ne}return A},ne.domain=function($){if(!arguments.length)return b;R=$[0],O=$[$.length-1],y=[];var z=k.length;if($.length===z&&R!==O)for(var te=0,J=Array.from($);te<J.length;te+=1){var je=J[te];y.push((je-R)/(O-R))}else{for(var be=0;be<z;be++)y.push(be/(z-1));if($.length>2){var ce=$.map(function(we,pe){return pe/($.length-1)}),ue=$.map(function(we){return(we-R)/(O-R)});ue.every(function(we,pe){return ce[pe]===we})||(Me=function(we){if(we<=0||we>=1)return we;for(var pe=0;we>=ue[pe+1];)pe++;var it=(we-ue[pe])/(ue[pe+1]-ue[pe]),bt=ce[pe]+it*(ce[pe+1]-ce[pe]);return bt})}}return b=[R,O],ne},ne.mode=function($){return arguments.length?(s=$,Ue(),ne):s},ne.range=function($,z){return Z($,z),ne},ne.out=function($){return N=$,ne},ne.spread=function($){return arguments.length?(g=$,ne):g},ne.correctLightness=function($){return $==null&&($=!0),j=$,Ue(),j?ge=function(z){for(var te=Ie(0,!0).lab()[0],J=Ie(1,!0).lab()[0],je=te>J,be=Ie(z,!0).lab()[0],ce=te+(J-te)*z,ue=be-ce,we=0,pe=1,it=20;Math.abs(ue)>.01&&it-- >0;)(function(){return je&&(ue*=-1),ue<0?(we=z,z+=(pe-z)*.5):(pe=z,z+=(we-z)*.5),be=Ie(z,!0).lab()[0],ue=be-ce})();return z}:ge=function(z){return z},ne},ne.padding=function($){return $!=null?(mt($)===\"number\"&&($=[$,$]),d=$,ne):d},ne.colors=function($,z){arguments.length<2&&(z=\"hex\");var te=[];if(arguments.length===0)te=k.slice(0);else if($===1)te=[ne(.5)];else if($>1){var J=b[0],je=b[1]-J;te=ko(0,$,!1).map(function(pe){return ne(J+pe/($-1)*je)})}else{r=[];var be=[];if(A&&A.length>2)for(var ce=1,ue=A.length,we=1<=ue;we?ce<ue:ce>ue;we?ce++:ce--)be.push((A[ce-1]+A[ce])*.5);else be=b;te=be.map(function(pe){return ne(pe)})}return F[z]&&(te=te.map(function(pe){return pe[z]()})),te},ne.cache=function($){return $!=null?(X=$,ne):X},ne.gamma=function($){return $!=null?(ee=$,ne):ee},ne.nodata=function($){return $!=null?(o=F($),ne):o},ne};function ko(r,s,o){for(var g=[],b=r<s,y=o?b?s+1:s-1:s,d=r;b?d<y:d>y;b?d++:d--)g.push(d);return g}var Gr=function(r){var s,o,g,b,y,d,A;if(r=r.map(function(O){return new L(O)}),r.length===2)s=r.map(function(O){return O.lab()}),y=s[0],d=s[1],b=function(O){var j=[0,1,2].map(function(H){return y[H]+O*(d[H]-y[H])});return new L(j,\"lab\")};else if(r.length===3)o=r.map(function(O){return O.lab()}),y=o[0],d=o[1],A=o[2],b=function(O){var j=[0,1,2].map(function(H){return(1-O)*(1-O)*y[H]+2*(1-O)*O*d[H]+O*O*A[H]});return new L(j,\"lab\")};else if(r.length===4){var k;g=r.map(function(O){return O.lab()}),y=g[0],d=g[1],A=g[2],k=g[3],b=function(O){var j=[0,1,2].map(function(H){return(1-O)*(1-O)*(1-O)*y[H]+3*(1-O)*(1-O)*O*d[H]+3*(1-O)*O*O*A[H]+O*O*O*k[H]});return new L(j,\"lab\")}}else if(r.length===5){var N=Gr(r.slice(0,3)),R=Gr(r.slice(2,5));b=function(O){return O<.5?N(O*2):R((O-.5)*2)}}return b},To=function(r){var s=Gr(r);return s.scale=function(){return Ut(s)},s},ze=function(r,s,o){if(!ze[o])throw new Error(\"unknown blend mode \"+o);return ze[o](r,s)},rt=function(r){return function(s,o){var g=F(o).rgb(),b=F(s).rgb();return F.rgb(r(g,b))}},nt=function(r){return function(s,o){var g=[];return g[0]=r(s[0],o[0]),g[1]=r(s[1],o[1]),g[2]=r(s[2],o[2]),g}},Lo=function(r){return r},Mo=function(r,s){return r*s/255},Io=function(r,s){return r>s?s:r},Fo=function(r,s){return r>s?r:s},No=function(r,s){return 255*(1-(1-r/255)*(1-s/255))},Oo=function(r,s){return s<128?2*r*s/255:255*(1-2*(1-r/255)*(1-s/255))},Do=function(r,s){return 255*(1-(1-s/255)/(r/255))},Ro=function(r,s){return r===255?255:(r=255*(s/255)/(1-r/255),r>255?255:r)};ze.normal=rt(nt(Lo)),ze.multiply=rt(nt(Mo)),ze.screen=rt(nt(No)),ze.overlay=rt(nt(Oo)),ze.darken=rt(nt(Io)),ze.lighten=rt(nt(Fo)),ze.dodge=rt(nt(Ro)),ze.burn=rt(nt(Do));for(var $o=ze,Yr=S.type,Po=S.clip_rgb,Vo=S.TWOPI,Bo=Math.pow,Ho=Math.sin,jo=Math.cos,Go=function(r,s,o,g,b){r===void 0&&(r=300),s===void 0&&(s=-1.5),o===void 0&&(o=1),g===void 0&&(g=1),b===void 0&&(b=[0,1]);var y=0,d;Yr(b)===\"array\"?d=b[1]-b[0]:(d=0,b=[b,b]);var A=function(k){var N=Vo*((r+120)/360+s*k),R=Bo(b[0]+d*k,g),O=y!==0?o[0]+k*y:o,j=O*R*(1-R)/2,H=jo(N),X=Ho(N),ee=R+j*(-.14861*H+1.78277*X),Z=R+j*(-.29227*H-.90649*X),se=R+j*(1.97294*H);return F(Po([ee*255,Z*255,se*255,1]))};return A.start=function(k){return k==null?r:(r=k,A)},A.rotations=function(k){return k==null?s:(s=k,A)},A.gamma=function(k){return k==null?g:(g=k,A)},A.hue=function(k){return k==null?o:(o=k,Yr(o)===\"array\"?(y=o[1]-o[0],y===0&&(o=o[1])):y=0,A)},A.lightness=function(k){return k==null?b:(Yr(k)===\"array\"?(b=k,d=k[1]-k[0]):(b=[k,k],d=0),A)},A.scale=function(){return F.scale(A)},A.hue(o),A},Yo=\"0123456789abcdef\",Uo=Math.floor,Wo=Math.random,qo=function(){for(var r=\"#\",s=0;s<6;s++)r+=Yo.charAt(Uo(Wo()*16));return new L(r,\"hex\")},Yn=Math.log,zo=Math.pow,Ko=Math.floor,Xo=Math.abs,Un=function(r,s){s===void 0&&(s=null);var o={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return c(r)===\"object\"&&(r=Object.values(r)),r.forEach(function(g){s&&c(g)===\"object\"&&(g=g[s]),g!=null&&!isNaN(g)&&(o.values.push(g),o.sum+=g,g<o.min&&(o.min=g),g>o.max&&(o.max=g),o.count+=1)}),o.domain=[o.min,o.max],o.limits=function(g,b){return Wn(o,g,b)},o},Wn=function(r,s,o){s===void 0&&(s=\"equal\"),o===void 0&&(o=7),c(r)==\"array\"&&(r=Un(r));var g=r.min,b=r.max,y=r.values.sort(function(Xr,Qr){return Xr-Qr});if(o===1)return[g,b];var d=[];if(s.substr(0,1)===\"c\"&&(d.push(g),d.push(b)),s.substr(0,1)===\"e\"){d.push(g);for(var A=1;A<o;A++)d.push(g+A/o*(b-g));d.push(b)}else if(s.substr(0,1)===\"l\"){if(g<=0)throw new Error(\"Logarithmic scales are only possible for values > 0\");var k=Math.LOG10E*Yn(g),N=Math.LOG10E*Yn(b);d.push(g);for(var R=1;R<o;R++)d.push(zo(10,k+R/o*(N-k)));d.push(b)}else if(s.substr(0,1)===\"q\"){d.push(g);for(var O=1;O<o;O++){var j=(y.length-1)*O/o,H=Ko(j);if(H===j)d.push(y[H]);else{var X=j-H;d.push(y[H]*(1-X)+y[H+1]*X)}}d.push(b)}else if(s.substr(0,1)===\"k\"){var ee,Z=y.length,se=new Array(Z),ge=new Array(o),Me=!0,Ie=0,Ue=null;Ue=[],Ue.push(g);for(var ne=1;ne<o;ne++)Ue.push(g+ne/o*(b-g));for(Ue.push(b);Me;){for(var $=0;$<o;$++)ge[$]=0;for(var z=0;z<Z;z++)for(var te=y[z],J=Number.MAX_VALUE,je=void 0,be=0;be<o;be++){var ce=Xo(Ue[be]-te);ce<J&&(J=ce,je=be),ge[je]++,se[z]=je}for(var ue=new Array(o),we=0;we<o;we++)ue[we]=null;for(var pe=0;pe<Z;pe++)ee=se[pe],ue[ee]===null?ue[ee]=y[pe]:ue[ee]+=y[pe];for(var it=0;it<o;it++)ue[it]*=1/ge[it];Me=!1;for(var bt=0;bt<o;bt++)if(ue[bt]!==Ue[bt]){Me=!0;break}Ue=ue,Ie++,Ie>200&&(Me=!1)}for(var It={},qr=0;qr<o;qr++)It[qr]=[];for(var zt=0;zt<Z;zt++)ee=se[zt],It[ee].push(y[zt]);for(var lt=[],Ft=0;Ft<o;Ft++)lt.push(It[Ft][0]),lt.push(It[Ft][It[Ft].length-1]);lt=lt.sort(function(Xr,Qr){return Xr-Qr}),d.push(lt[0]);for(var zr=1;zr<lt.length;zr+=2){var Kr=lt[zr];!isNaN(Kr)&&d.indexOf(Kr)===-1&&d.push(Kr)}}return d},qn={analyze:Un,limits:Wn},Qo=function(r,s){r=new L(r),s=new L(s);var o=r.luminance(),g=s.luminance();return o>g?(o+.05)/(g+.05):(g+.05)/(o+.05)},Wt=Math.sqrt,Zo=Math.atan2,zn=Math.abs,Kn=Math.cos,Ur=Math.PI,Jo=function(r,s,o,g){o===void 0&&(o=1),g===void 0&&(g=1),r=new L(r),s=new L(s);for(var b=Array.from(r.lab()),y=b[0],d=b[1],A=b[2],k=Array.from(s.lab()),N=k[0],R=k[1],O=k[2],j=Wt(d*d+A*A),H=Wt(R*R+O*O),X=y<16?.511:.040975*y/(1+.01765*y),ee=.0638*j/(1+.0131*j)+.638,Z=j<1e-6?0:Zo(A,d)*180/Ur;Z<0;)Z+=360;for(;Z>=360;)Z-=360;var se=Z>=164&&Z<=345?.56+zn(.2*Kn(Ur*(Z+168)/180)):.36+zn(.4*Kn(Ur*(Z+35)/180)),ge=j*j*j*j,Me=Wt(ge/(ge+1900)),Ie=ee*(Me*se+1-Me),Ue=y-N,ne=j-H,$=d-R,z=A-O,te=$*$+z*z-ne*ne,J=Ue/(o*X),je=ne/(g*ee),be=Ie;return Wt(J*J+je*je+te/(be*be))},el=function(r,s,o){o===void 0&&(o=\"lab\"),r=new L(r),s=new L(s);var g=r.get(o),b=s.get(o),y=0;for(var d in g){var A=(g[d]||0)-(b[d]||0);y+=A*A}return Math.sqrt(y)},tl=function(){for(var r=[],s=arguments.length;s--;)r[s]=arguments[s];try{return new(Function.prototype.bind.apply(L,[null].concat(r))),!0}catch(o){return!1}},rl={cool:function(){return Ut([F.hsl(180,1,.9),F.hsl(250,.7,.4)])},hot:function(){return Ut([\"#000\",\"#f00\",\"#ff0\",\"#fff\"],[0,.25,.75,1]).mode(\"rgb\")}},qt={OrRd:[\"#fff7ec\",\"#fee8c8\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#b30000\",\"#7f0000\"],PuBu:[\"#fff7fb\",\"#ece7f2\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#3690c0\",\"#0570b0\",\"#045a8d\",\"#023858\"],BuPu:[\"#f7fcfd\",\"#e0ecf4\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#810f7c\",\"#4d004b\"],Oranges:[\"#fff5eb\",\"#fee6ce\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#a63603\",\"#7f2704\"],BuGn:[\"#f7fcfd\",\"#e5f5f9\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#006d2c\",\"#00441b\"],YlOrBr:[\"#ffffe5\",\"#fff7bc\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#ec7014\",\"#cc4c02\",\"#993404\",\"#662506\"],YlGn:[\"#ffffe5\",\"#f7fcb9\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#006837\",\"#004529\"],Reds:[\"#fff5f0\",\"#fee0d2\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#a50f15\",\"#67000d\"],RdPu:[\"#fff7f3\",\"#fde0dd\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#dd3497\",\"#ae017e\",\"#7a0177\",\"#49006a\"],Greens:[\"#f7fcf5\",\"#e5f5e0\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#006d2c\",\"#00441b\"],YlGnBu:[\"#ffffd9\",\"#edf8b1\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#1d91c0\",\"#225ea8\",\"#253494\",\"#081d58\"],Purples:[\"#fcfbfd\",\"#efedf5\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#54278f\",\"#3f007d\"],GnBu:[\"#f7fcf0\",\"#e0f3db\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#0868ac\",\"#084081\"],Greys:[\"#ffffff\",\"#f0f0f0\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\",\"#000000\"],YlOrRd:[\"#ffffcc\",\"#ffeda0\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#fc4e2a\",\"#e31a1c\",\"#bd0026\",\"#800026\"],PuRd:[\"#f7f4f9\",\"#e7e1ef\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#e7298a\",\"#ce1256\",\"#980043\",\"#67001f\"],Blues:[\"#f7fbff\",\"#deebf7\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#08519c\",\"#08306b\"],PuBuGn:[\"#fff7fb\",\"#ece2f0\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016c59\",\"#014636\"],Viridis:[\"#440154\",\"#482777\",\"#3f4a8a\",\"#31678e\",\"#26838f\",\"#1f9d8a\",\"#6cce5a\",\"#b6de2b\",\"#fee825\"],Spectral:[\"#9e0142\",\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\",\"#5e4fa2\"],RdYlGn:[\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\",\"#006837\"],RdBu:[\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#f7f7f7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\",\"#053061\"],PiYG:[\"#8e0152\",\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#f7f7f7\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\",\"#276419\"],PRGn:[\"#40004b\",\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#f7f7f7\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\",\"#00441b\"],RdYlBu:[\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#ffffbf\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\",\"#313695\"],BrBG:[\"#543005\",\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#f5f5f5\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\",\"#003c30\"],RdGy:[\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#ffffff\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\",\"#1a1a1a\"],PuOr:[\"#7f3b08\",\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#f7f7f7\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\",\"#2d004b\"],Set2:[\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\",\"#e5c494\",\"#b3b3b3\"],Accent:[\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\",\"#bf5b17\",\"#666666\"],Set1:[\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\",\"#f781bf\",\"#999999\"],Set3:[\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\",\"#bc80bd\",\"#ccebc5\",\"#ffed6f\"],Dark2:[\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\",\"#a6761d\",\"#666666\"],Paired:[\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\",\"#6a3d9a\",\"#ffff99\",\"#b15928\"],Pastel2:[\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\",\"#f1e2cc\",\"#cccccc\"],Pastel1:[\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\",\"#fddaec\",\"#f2f2f2\"]},Wr=0,Xn=Object.keys(qt);Wr<Xn.length;Wr+=1){var Qn=Xn[Wr];qt[Qn.toLowerCase()]=qt[Qn]}var nl=qt;F.average=Eo,F.bezier=To,F.blend=$o,F.cubehelix=Go,F.mix=F.interpolate=Vn,F.random=qo,F.scale=Ut,F.analyze=qn.analyze,F.contrast=Qo,F.deltaE=Jo,F.distance=el,F.limits=qn.limits,F.valid=tl,F.scales=rl,F.colors=dt,F.brewer=nl;var il=F;return il})});var Ai=Zr((_i,er)=>{((e,n)=>{typeof define==\"function\"&&define.amd?define([],n):typeof er==\"object\"&&er.exports?er.exports=n():e.fuzzysort=n()})(_i,e=>{\"use strict\";var n=(V,M)=>{if(V==\"farzher\")return{target:\"farzher was here (^-^*)/\",score:0,_indexes:[0]};if(!V||!M)return ie;var _=w(V);Te(M)||(M=p(M));var u=_.bitflags;return(u&M._bitflags)!==u?ie:E(_,M)},t=(V,M,_)=>{if(V==\"farzher\")return[{target:\"farzher was here (^-^*)/\",score:0,_indexes:[0],obj:M?M[0]:ie}];if(!V)return _&&_.all?S(V,M,_):Qe;var u=w(V),h=u.bitflags,m=u.containsSpace,C=_&&_.threshold||Pe,v=_&&_.limit||xe,x=0,T=0,I=M.length;if(_&&_.key)for(var D=_.key,P=0;P<I;++P){var G=M[P],q=qe(G,D);if(q&&(Te(q)||(q=p(q)),(h&q._bitflags)===h)){var U=E(u,q);U!==ie&&(U.score<C||(U={target:U.target,_targetLower:\"\",_targetLowerCodes:ie,_nextBeginningIndexes:ie,_bitflags:0,score:U.score,_indexes:U._indexes,obj:G},x<v?(Ve.add(U),++x):(++T,U.score>Ve.peek().score&&Ve.replaceTop(U))))}}else if(_&&_.keys)for(var fe=_.scoreFn||Ye,le=_.keys,Oe=le.length,P=0;P<I;++P){for(var G=M[P],ye=new Array(Oe),Se=0;Se<Oe;++Se){var D=le[Se],q=qe(G,D);if(!q){ye[Se]=ie;continue}Te(q)||(q=p(q)),(h&q._bitflags)!==h?ye[Se]=ie:ye[Se]=E(u,q)}ye.obj=G;var ae=fe(ye);ae!==ie&&(ae<C||(ye.score=ae,x<v?(Ve.add(ye),++x):(++T,ae>Ve.peek().score&&Ve.replaceTop(ye))))}else for(var P=0;P<I;++P){var q=M[P];if(q&&(Te(q)||(q=p(q)),(h&q._bitflags)===h)){var U=E(u,q);U!==ie&&(U.score<C||(x<v?(Ve.add(U),++x):(++T,U.score>Ve.peek().score&&Ve.replaceTop(U))))}}if(x===0)return Qe;for(var Re=new Array(x),P=x-1;P>=0;--P)Re[P]=Ve.poll();return Re.total=x+T,Re},a=(V,M,_)=>{if(typeof M==\"function\")return i(V,M);if(V===ie)return ie;M===void 0&&(M=\"<b>\"),_===void 0&&(_=\"</b>\");var u=\"\",h=0,m=!1,C=V.target,v=C.length,x=V._indexes;x=x.slice(0,x.len).sort((D,P)=>D-P);for(var T=0;T<v;++T){var I=C[T];if(x[h]===T){if(++h,m||(m=!0,u+=M),h===x.length){u+=I+_+C.substr(T+1);break}}else m&&(m=!1,u+=_);u+=I}return u},i=(T,M)=>{if(T===ie)return ie;var _=T.target,u=_.length,h=T._indexes;h=h.slice(0,h.len).sort((P,G)=>P-G);for(var m=\"\",C=0,v=0,x=!1,T=[],I=0;I<u;++I){var D=_[I];if(h[v]===I){if(++v,x||(x=!0,T.push(m),m=\"\"),v===h.length){m+=D,T.push(M(m,C++)),m=\"\",T.push(_.substr(I+1));break}}else x&&(x=!1,T.push(M(m,C++)),m=\"\");m+=D}return T},l=V=>V._indexes.slice(0,V._indexes.len).sort((M,_)=>M-_),c=V=>{typeof V!=\"string\"&&(V=\"\");var M=Y(V);return{target:V,_targetLower:M._lower,_targetLowerCodes:M.lowerCodes,_nextBeginningIndexes:ie,_bitflags:M.bitflags,score:ie,_indexes:[0],obj:ie}},f=V=>{typeof V!=\"string\"&&(V=\"\"),V=V.trim();var M=Y(V),_=[];if(M.containsSpace){var u=V.split(/\\s+/);u=[...new Set(u)];for(var h=0;h<u.length;h++)if(u[h]!==\"\"){var m=Y(u[h]);_.push({lowerCodes:m.lowerCodes,_lower:u[h].toLowerCase(),containsSpace:!1})}}return{lowerCodes:M.lowerCodes,bitflags:M.bitflags,containsSpace:M.containsSpace,_lower:M._lower,spaceSearches:_}},p=V=>{if(V.length>999)return c(V);var M=re.get(V);return M!==void 0||(M=c(V),re.set(V,M)),M},w=V=>{if(V.length>999)return f(V);var M=F.get(V);return M!==void 0||(M=f(V),F.set(V,M)),M},S=(V,M,_)=>{var u=[];u.total=M.length;var h=_&&_.limit||xe;if(_&&_.key)for(var m=0;m<M.length;m++){var C=M[m],v=qe(C,_.key);if(v){Te(v)||(v=p(v)),v.score=Pe,v._indexes.len=0;var x=v;if(x={target:x.target,_targetLower:\"\",_targetLowerCodes:ie,_nextBeginningIndexes:ie,_bitflags:0,score:v.score,_indexes:ie,obj:C},u.push(x),u.length>=h)return u}}else if(_&&_.keys)for(var m=0;m<M.length;m++){for(var C=M[m],T=new Array(_.keys.length),I=_.keys.length-1;I>=0;--I){var v=qe(C,_.keys[I]);if(!v){T[I]=ie;continue}Te(v)||(v=p(v)),v.score=Pe,v._indexes.len=0,T[I]=v}if(T.obj=C,T.score=Pe,u.push(T),u.length>=h)return u}else for(var m=0;m<M.length;m++){var v=M[m];if(v&&(Te(v)||(v=p(v)),v.score=Pe,v._indexes.len=0,u.push(v),u.length>=h))return u}return u},E=(V,M,_=!1)=>{if(_===!1&&V.containsSpace)return B(V,M);for(var u=V._lower,h=V.lowerCodes,m=h[0],C=M._targetLowerCodes,v=h.length,x=C.length,P=0,T=0,I=0;;){var D=m===C[T];if(D){if(oe[I++]=T,++P,P===v)break;m=h[P]}if(++T,T>=x)return ie}var P=0,G=!1,q=0,U=M._nextBeginningIndexes;U===ie&&(U=M._nextBeginningIndexes=Q(M.target));var fe=T=oe[0]===0?0:U[oe[0]-1],le=0;if(T!==x)for(;;)if(T>=x){if(P<=0||(++le,le>200))break;--P;var Oe=ke[--q];T=U[Oe]}else{var D=h[P]===C[T];if(D){if(ke[q++]=T,++P,P===v){G=!0;break}++T}else T=U[T]}var ye=M._targetLower.indexOf(u,oe[0]),Se=~ye;if(Se&&!G)for(var ae=0;ae<I;++ae)oe[ae]=ye+ae;var Re=!1;Se&&(Re=M._nextBeginningIndexes[ye-1]===ye);{if(G)var _e=ke,Ke=q;else var _e=oe,Ke=I;for(var Le=0,et=0,ae=1;ae<v;++ae)_e[ae]-_e[ae-1]!==1&&(Le-=_e[ae],++et);var gt=_e[v-1]-_e[0]-(v-1);if(Le-=(12+gt)*et,_e[0]!==0&&(Le-=_e[0]*_e[0]*.2),!G)Le*=1e3;else{for(var tt=1,ae=U[0];ae<x;ae=U[ae])++tt;tt>24&&(Le*=(tt-24)*10)}Se&&(Le/=1+v*v*1),Re&&(Le/=1+v*v*1),Le-=x-v,M.score=Le;for(var ae=0;ae<Ke;++ae)M._indexes[ae]=_e[ae];return M._indexes.len=Ke,M}},B=(V,M)=>{for(var _=new Set,u=0,h=ie,m=0,C=V.spaceSearches,I=0;I<C.length;++I){var v=C[I];if(h=E(v,M),h===ie)return ie;u+=h.score,h._indexes[0]<m&&(u-=m-h._indexes[0]),m=h._indexes[0];for(var x=0;x<h._indexes.len;++x)_.add(h._indexes[x])}var T=E(V,M,!0);if(T!==ie&&T.score>u)return T;h.score=u;var I=0;for(let D of _)h._indexes[I++]=D;return h._indexes.len=I,h},Y=V=>{for(var M=V.length,_=V.toLowerCase(),u=[],h=0,m=!1,C=0;C<M;++C){var v=u[C]=_.charCodeAt(C);if(v===32){m=!0;continue}var x=v>=97&&v<=122?v-97:v>=48&&v<=57?26:v<=127?30:31;h|=1<<x}return{lowerCodes:u,bitflags:h,containsSpace:m,_lower:_}},K=V=>{for(var M=V.length,_=[],u=0,h=!1,m=!1,C=0;C<M;++C){var v=V.charCodeAt(C),x=v>=65&&v<=90,T=x||v>=97&&v<=122||v>=48&&v<=57,I=x&&!h||!m||!T;h=x,m=T,I&&(_[u++]=C)}return _},Q=V=>{for(var M=V.length,_=K(V),u=[],h=_[0],m=0,C=0;C<M;++C)h>C?u[C]=h:(h=_[++m],u[C]=h===void 0?M:h);return u},L=()=>{re.clear(),F.clear(),oe=[],ke=[]},re=new Map,F=new Map,oe=[],ke=[],Ye=V=>{for(var M=Pe,_=V.length,u=0;u<_;++u){var h=V[u];if(h!==ie){var m=h.score;m>M&&(M=m)}}return M===Pe?ie:M},qe=(V,M)=>{var _=V[M];if(_!==void 0)return _;var u=M;Array.isArray(M)||(u=M.split(\".\"));for(var h=u.length,m=-1;V&&++m<h;)V=V[u[m]];return V},Te=V=>typeof V==\"object\",xe=1/0,Pe=-xe,Qe=[];Qe.total=0;var ie=null,Tt=V=>{var M=[],_=0,u={},h=m=>{for(var C=0,v=M[C],x=1;x<_;){var T=x+1;C=x,T<_&&M[T].score<M[x].score&&(C=T),M[C-1>>1]=M[C],x=1+(C<<1)}for(var I=C-1>>1;C>0&&v.score<M[I].score;I=(C=I)-1>>1)M[C]=M[I];M[C]=v};return u.add=m=>{var C=_;M[_++]=m;for(var v=C-1>>1;C>0&&m.score<M[v].score;v=(C=v)-1>>1)M[C]=M[v];M[C]=m},u.poll=m=>{if(_!==0){var C=M[0];return M[0]=M[--_],h(),C}},u.peek=m=>{if(_!==0)return M[0]},u.replaceTop=m=>{M[0]=m,h()},u},Ve=Tt();return{single:n,go:t,highlight:a,prepare:c,indexes:l,cleanup:L}})});var cn=Zr((ar,ln)=>{(function(e,n){typeof ar==\"object\"&&typeof ln==\"object\"?ln.exports=n():typeof define==\"function\"&&define.amd?define([],n):typeof ar==\"object\"?ar.Pickr=n():e.Pickr=n()})(self,function(){return(()=>{\"use strict\";var e={d:(_,u)=>{for(var h in u)e.o(u,h)&&!e.o(_,h)&&Object.defineProperty(_,h,{enumerable:!0,get:u[h]})},o:(_,u)=>Object.prototype.hasOwnProperty.call(_,u),r:_=>{typeof Symbol!=\"undefined\"&&Symbol.toStringTag&&Object.defineProperty(_,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(_,\"__esModule\",{value:!0})}},n={};e.d(n,{default:()=>M});var t={};function a(_,u,h,m){let C=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};u instanceof HTMLCollection||u instanceof NodeList?u=Array.from(u):Array.isArray(u)||(u=[u]),Array.isArray(h)||(h=[h]);for(let v of u)for(let x of h)v[_](x,m,{capture:!1,...C});return Array.prototype.slice.call(arguments,1)}e.r(t),e.d(t,{adjustableInputNumbers:()=>S,createElementFromString:()=>c,createFromTemplate:()=>f,eventPath:()=>p,off:()=>l,on:()=>i,resolveElement:()=>w});let i=a.bind(null,\"addEventListener\"),l=a.bind(null,\"removeEventListener\");function c(_){let u=document.createElement(\"div\");return u.innerHTML=_.trim(),u.firstElementChild}function f(_){let u=(m,C)=>{let v=m.getAttribute(C);return m.removeAttribute(C),v},h=function(m){let C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},v=u(m,\":obj\"),x=u(m,\":ref\"),T=v?C[v]={}:C;x&&(C[x]=m);for(let I of Array.from(m.children)){let D=u(I,\":arr\"),P=h(I,D?{}:T);D&&(T[D]||(T[D]=[])).push(Object.keys(P).length?P:I)}return C};return h(c(_))}function p(_){let u=_.path||_.composedPath&&_.composedPath();if(u)return u;let h=_.target.parentElement;for(u=[_.target,h];h=h.parentElement;)u.push(h);return u.push(document,window),u}function w(_){return _ instanceof Element?_:typeof _==\"string\"?_.split(/>>/g).reduce((u,h,m,C)=>(u=u.querySelector(h),m<C.length-1?u.shadowRoot:u),document):null}function S(_){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:m=>m;function h(m){let C=[.001,.01,.1][Number(m.shiftKey||2*m.ctrlKey)]*(m.deltaY<0?1:-1),v=0,x=_.selectionStart;_.value=_.value.replace(/[\\d.]+/g,(T,I)=>I<=x&&I+T.length>=x?(x=I,u(Number(T),C,v)):(v++,T)),_.focus(),_.setSelectionRange(x,x),m.preventDefault(),_.dispatchEvent(new Event(\"input\"))}i(_,\"focus\",()=>i(window,\"wheel\",h,{passive:!1})),i(_,\"blur\",()=>l(window,\"wheel\",h))}let{min:E,max:B,floor:Y,round:K}=Math;function Q(_,u,h){u/=100,h/=100;let m=Y(_=_/360*6),C=_-m,v=h*(1-u),x=h*(1-C*u),T=h*(1-(1-C)*u),I=m%6;return[255*[h,x,v,v,T,h][I],255*[T,h,h,x,v,v][I],255*[v,v,T,h,h,x][I]]}function L(_,u,h){return Q(_,u,h).map(m=>K(m).toString(16).padStart(2,\"0\"))}function re(_,u,h){let m=Q(_,u,h),C=m[0]/255,v=m[1]/255,x=m[2]/255,T=E(1-C,1-v,1-x);return[100*(T===1?0:(1-C-T)/(1-T)),100*(T===1?0:(1-v-T)/(1-T)),100*(T===1?0:(1-x-T)/(1-T)),100*T]}function F(_,u,h){let m=(2-(u/=100))*(h/=100)/2;return m!==0&&(u=m===1?0:m<.5?u*h/(2*m):u*h/(2-2*m)),[_,100*u,100*m]}function oe(_,u,h){let m=E(_/=255,u/=255,h/=255),C=B(_,u,h),v=C-m,x,T;if(v===0)x=T=0;else{T=v/C;let I=((C-_)/6+v/2)/v,D=((C-u)/6+v/2)/v,P=((C-h)/6+v/2)/v;_===C?x=P-D:u===C?x=1/3+I-P:h===C&&(x=2/3+D-I),x<0?x+=1:x>1&&(x-=1)}return[360*x,100*T,100*C]}function ke(_,u,h,m){return u/=100,h/=100,[...oe(255*(1-E(1,(_/=100)*(1-(m/=100))+m)),255*(1-E(1,u*(1-m)+m)),255*(1-E(1,h*(1-m)+m)))]}function Ye(_,u,h){u/=100;let m=2*(u*=(h/=100)<.5?h:1-h)/(h+u)*100,C=100*(h+u);return[_,isNaN(m)?0:m,C]}function qe(_){return oe(..._.match(/.{2}/g).map(u=>parseInt(u,16)))}function Te(_){_=_.match(/^[a-zA-Z]+$/)?function(C){if(C.toLowerCase()===\"black\")return\"#000\";let v=document.createElement(\"canvas\").getContext(\"2d\");return v.fillStyle=C,v.fillStyle===\"#000\"?null:v.fillStyle}(_):_;let u={cmyk:/^cmyk[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)/i,rgba:/^((rgba)|rgb)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hsla:/^((hsla)|hsl)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hsva:/^((hsva)|hsv)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hexa:/^#?(([\\dA-Fa-f]{3,4})|([\\dA-Fa-f]{6})|([\\dA-Fa-f]{8}))$/i},h=C=>C.map(v=>/^(|\\d+)\\.\\d+|\\d+$/.test(v)?Number(v):void 0),m;e:for(let C in u){if(!(m=u[C].exec(_)))continue;let v=x=>!!m[2]==(typeof x==\"number\");switch(C){case\"cmyk\":{let[,x,T,I,D]=h(m);if(x>100||T>100||I>100||D>100)break e;return{values:ke(x,T,I,D),type:C}}case\"rgba\":{let[,,,x,T,I,D]=h(m);if(x>255||T>255||I>255||D<0||D>1||!v(D))break e;return{values:[...oe(x,T,I),D],a:D,type:C}}case\"hexa\":{let[,x]=m;x.length!==4&&x.length!==3||(x=x.split(\"\").map(D=>D+D).join(\"\"));let T=x.substring(0,6),I=x.substring(6);return I=I?parseInt(I,16)/255:void 0,{values:[...qe(T),I],a:I,type:C}}case\"hsla\":{let[,,,x,T,I,D]=h(m);if(x>360||T>100||I>100||D<0||D>1||!v(D))break e;return{values:[...Ye(x,T,I),D],a:D,type:C}}case\"hsva\":{let[,,,x,T,I,D]=h(m);if(x>360||T>100||I>100||D<0||D>1||!v(D))break e;return{values:[x,T,I,D],a:D,type:C}}}}return{values:null,type:null}}function xe(){let _=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,m=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,C=(x,T)=>function(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:-1;return T(~I?x.map(D=>Number(D.toFixed(I))):x)},v={h:_,s:u,v:h,a:m,toHSVA(){let x=[v.h,v.s,v.v,v.a];return x.toString=C(x,T=>`hsva(${T[0]}, ${T[1]}%, ${T[2]}%, ${v.a})`),x},toHSLA(){let x=[...F(v.h,v.s,v.v),v.a];return x.toString=C(x,T=>`hsla(${T[0]}, ${T[1]}%, ${T[2]}%, ${v.a})`),x},toRGBA(){let x=[...Q(v.h,v.s,v.v),v.a];return x.toString=C(x,T=>`rgba(${T[0]}, ${T[1]}, ${T[2]}, ${v.a})`),x},toCMYK(){let x=re(v.h,v.s,v.v);return x.toString=C(x,T=>`cmyk(${T[0]}%, ${T[1]}%, ${T[2]}%, ${T[3]}%)`),x},toHEXA(){let x=L(v.h,v.s,v.v),T=v.a>=1?\"\":Number((255*v.a).toFixed(0)).toString(16).toUpperCase().padStart(2,\"0\");return T&&x.push(T),x.toString=()=>`#${x.join(\"\").toUpperCase()}`,x},clone:()=>xe(v.h,v.s,v.v,v.a)};return v}let Pe=_=>Math.max(Math.min(_,1),0);function Qe(_){let u={options:Object.assign({lock:null,onchange:()=>0,onstop:()=>0},_),_keyboard(v){let{options:x}=u,{type:T,key:I}=v;if(document.activeElement===x.wrapper){let{lock:D}=u.options,P=I===\"ArrowUp\",G=I===\"ArrowRight\",q=I===\"ArrowDown\",U=I===\"ArrowLeft\";if(T===\"keydown\"&&(P||G||q||U)){let fe=0,le=0;D===\"v\"?fe=P||G?1:-1:D===\"h\"?fe=P||G?-1:1:(le=P?-1:q?1:0,fe=U?-1:G?1:0),u.update(Pe(u.cache.x+.01*fe),Pe(u.cache.y+.01*le)),v.preventDefault()}else I.startsWith(\"Arrow\")&&(u.options.onstop(),v.preventDefault())}},_tapstart(v){i(document,[\"mouseup\",\"touchend\",\"touchcancel\"],u._tapstop),i(document,[\"mousemove\",\"touchmove\"],u._tapmove),v.cancelable&&v.preventDefault(),u._tapmove(v)},_tapmove(v){let{options:x,cache:T}=u,{lock:I,element:D,wrapper:P}=x,G=P.getBoundingClientRect(),q=0,U=0;if(v){let Oe=v&&v.touches&&v.touches[0];q=v?(Oe||v).clientX:0,U=v?(Oe||v).clientY:0,q<G.left?q=G.left:q>G.left+G.width&&(q=G.left+G.width),U<G.top?U=G.top:U>G.top+G.height&&(U=G.top+G.height),q-=G.left,U-=G.top}else T&&(q=T.x*G.width,U=T.y*G.height);I!==\"h\"&&(D.style.left=`calc(${q/G.width*100}% - ${D.offsetWidth/2}px)`),I!==\"v\"&&(D.style.top=`calc(${U/G.height*100}% - ${D.offsetHeight/2}px)`),u.cache={x:q/G.width,y:U/G.height};let fe=Pe(q/G.width),le=Pe(U/G.height);switch(I){case\"v\":return x.onchange(fe);case\"h\":return x.onchange(le);default:return x.onchange(fe,le)}},_tapstop(){u.options.onstop(),l(document,[\"mouseup\",\"touchend\",\"touchcancel\"],u._tapstop),l(document,[\"mousemove\",\"touchmove\"],u._tapmove)},trigger(){u._tapmove()},update(){let v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,{left:T,top:I,width:D,height:P}=u.options.wrapper.getBoundingClientRect();u.options.lock===\"h\"&&(x=v),u._tapmove({clientX:T+D*v,clientY:I+P*x})},destroy(){let{options:v,_tapstart:x,_keyboard:T}=u;l(document,[\"keydown\",\"keyup\"],T),l([v.wrapper,v.element],\"mousedown\",x),l([v.wrapper,v.element],\"touchstart\",x,{passive:!1})}},{options:h,_tapstart:m,_keyboard:C}=u;return i([h.wrapper,h.element],\"mousedown\",m),i([h.wrapper,h.element],\"touchstart\",m,{passive:!1}),i(document,[\"keydown\",\"keyup\"],C),u}function ie(){let _=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};_=Object.assign({onchange:()=>0,className:\"\",elements:[]},_);let u=i(_.elements,\"click\",h=>{_.elements.forEach(m=>m.classList[h.target===m?\"add\":\"remove\"](_.className)),_.onchange(h),h.stopPropagation()});return{destroy:()=>l(...u)}}let Tt={variantFlipOrder:{start:\"sme\",middle:\"mse\",end:\"ems\"},positionFlipOrder:{top:\"tbrl\",right:\"rltb\",bottom:\"btrl\",left:\"lrbt\"},position:\"bottom\",margin:8},Ve=(_,u,h)=>{let{container:m,margin:C,position:v,variantFlipOrder:x,positionFlipOrder:T}={container:document.documentElement.getBoundingClientRect(),...Tt,...h},{left:I,top:D}=u.style;u.style.left=\"0\",u.style.top=\"0\";let P=_.getBoundingClientRect(),G=u.getBoundingClientRect(),q={t:P.top-G.height-C,b:P.bottom+C,r:P.right+C,l:P.left-G.width-C},U={vs:P.left,vm:P.left+P.width/2+-G.width/2,ve:P.left+P.width-G.width,hs:P.top,hm:P.bottom-P.height/2-G.height/2,he:P.bottom-G.height},[fe,le=\"middle\"]=v.split(\"-\"),Oe=T[fe],ye=x[le],{top:Se,left:ae,bottom:Re,right:_e}=m;for(let Ke of Oe){let Le=Ke===\"t\"||Ke===\"b\",et=q[Ke],[gt,tt]=Le?[\"top\",\"left\"]:[\"left\",\"top\"],[Ar,kr]=Le?[G.height,G.width]:[G.width,G.height],[Tr,Lr]=Le?[Re,_e]:[_e,Re],[Mr,Ir]=Le?[Se,ae]:[ae,Se];if(!(et<Mr||et+Ar>Tr))for(let jt of ye){let Lt=U[(Le?\"v\":\"h\")+jt];if(!(Lt<Ir||Lt+kr>Lr))return u.style[tt]=Lt-G[tt]+\"px\",u.style[gt]=et-G[gt]+\"px\",Ke+jt}}return u.style.left=I,u.style.top=D,null};function V(_,u,h){return u in _?Object.defineProperty(_,u,{value:h,enumerable:!0,configurable:!0,writable:!0}):_[u]=h,_}class M{constructor(u){V(this,\"_initializingActive\",!0),V(this,\"_recalc\",!0),V(this,\"_nanopop\",null),V(this,\"_root\",null),V(this,\"_color\",xe()),V(this,\"_lastColor\",xe()),V(this,\"_swatchColors\",[]),V(this,\"_setupAnimationFrame\",null),V(this,\"_eventListener\",{init:[],save:[],hide:[],show:[],clear:[],change:[],changestop:[],cancel:[],swatchselect:[]}),this.options=u=Object.assign({...M.DEFAULT_OPTIONS},u);let{swatches:h,components:m,theme:C,sliders:v,lockOpacity:x,padding:T}=u;[\"nano\",\"monolith\"].includes(C)&&!v&&(u.sliders=\"h\"),m.interaction||(m.interaction={});let{preview:I,opacity:D,hue:P,palette:G}=m;m.opacity=!x&&D,m.palette=G||I||D||P,this._preBuild(),this._buildComponents(),this._bindEvents(),this._finalBuild(),h&&h.length&&h.forEach(le=>this.addSwatch(le));let{button:q,app:U}=this._root;this._nanopop=((le,Oe,ye)=>{let Se=typeof le!=\"object\"||le instanceof HTMLElement?{reference:le,popper:Oe,...ye}:le;return{update(){let ae=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Se,{reference:Re,popper:_e}=Object.assign(Se,ae);if(!_e||!Re)throw new Error(\"Popper- or reference-element missing.\");return Ve(Re,_e,Se)}}})(q,U,{margin:T}),q.setAttribute(\"role\",\"button\"),q.setAttribute(\"aria-label\",this._t(\"btn:toggle\"));let fe=this;this._setupAnimationFrame=requestAnimationFrame(function le(){if(!U.offsetWidth)return fe._setupAnimationFrame=requestAnimationFrame(le);fe.setColor(u.default),fe._rePositioningPicker(),u.defaultRepresentation&&(fe._representation=u.defaultRepresentation,fe.setColorRepresentation(fe._representation)),u.showAlways&&fe.show(),fe._initializingActive=!1,fe._emit(\"init\")})}_preBuild(){let{options:u}=this;for(let h of[\"el\",\"container\"])u[h]=w(u[h]);this._root=(h=>{let{components:m,useAsButton:C,inline:v,appClass:x,theme:T,lockOpacity:I}=h.options,D=U=>U?\"\":'style=\"display:none\" hidden',P=U=>h._t(U),G=f(`\n      <div :ref=\"root\" class=\"pickr\">\n\n        ${C?\"\":'<button type=\"button\" :ref=\"button\" class=\"pcr-button\"></button>'}\n\n        <div :ref=\"app\" class=\"pcr-app ${x||\"\"}\" data-theme=\"${T}\" ${v?'style=\"position: unset\"':\"\"} aria-label=\"${P(\"ui:dialog\")}\" role=\"window\">\n          <div class=\"pcr-selection\" ${D(m.palette)}>\n            <div :obj=\"preview\" class=\"pcr-color-preview\" ${D(m.preview)}>\n              <button type=\"button\" :ref=\"lastColor\" class=\"pcr-last-color\" aria-label=\"${P(\"btn:last-color\")}\"></button>\n              <div :ref=\"currentColor\" class=\"pcr-current-color\"></div>\n            </div>\n\n            <div :obj=\"palette\" class=\"pcr-color-palette\">\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"palette\" class=\"pcr-palette\" tabindex=\"0\" aria-label=\"${P(\"aria:palette\")}\" role=\"listbox\"></div>\n            </div>\n\n            <div :obj=\"hue\" class=\"pcr-color-chooser\" ${D(m.hue)}>\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"slider\" class=\"pcr-hue pcr-slider\" tabindex=\"0\" aria-label=\"${P(\"aria:hue\")}\" role=\"slider\"></div>\n            </div>\n\n            <div :obj=\"opacity\" class=\"pcr-color-opacity\" ${D(m.opacity)}>\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"slider\" class=\"pcr-opacity pcr-slider\" tabindex=\"0\" aria-label=\"${P(\"aria:opacity\")}\" role=\"slider\"></div>\n            </div>\n          </div>\n\n          <div class=\"pcr-swatches ${m.palette?\"\":\"pcr-last\"}\" :ref=\"swatches\"></div>\n\n          <div :obj=\"interaction\" class=\"pcr-interaction\" ${D(Object.keys(m.interaction).length)}>\n            <input :ref=\"result\" class=\"pcr-result\" type=\"text\" spellcheck=\"false\" ${D(m.interaction.input)} aria-label=\"${P(\"aria:input\")}\">\n\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HEXA\" value=\"${I?\"HEX\":\"HEXA\"}\" type=\"button\" ${D(m.interaction.hex)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"RGBA\" value=\"${I?\"RGB\":\"RGBA\"}\" type=\"button\" ${D(m.interaction.rgba)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSLA\" value=\"${I?\"HSL\":\"HSLA\"}\" type=\"button\" ${D(m.interaction.hsla)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSVA\" value=\"${I?\"HSV\":\"HSVA\"}\" type=\"button\" ${D(m.interaction.hsva)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"CMYK\" value=\"CMYK\" type=\"button\" ${D(m.interaction.cmyk)}>\n\n            <input :ref=\"save\" class=\"pcr-save\" value=\"${P(\"btn:save\")}\" type=\"button\" ${D(m.interaction.save)} aria-label=\"${P(\"aria:btn:save\")}\">\n            <input :ref=\"cancel\" class=\"pcr-cancel\" value=\"${P(\"btn:cancel\")}\" type=\"button\" ${D(m.interaction.cancel)} aria-label=\"${P(\"aria:btn:cancel\")}\">\n            <input :ref=\"clear\" class=\"pcr-clear\" value=\"${P(\"btn:clear\")}\" type=\"button\" ${D(m.interaction.clear)} aria-label=\"${P(\"aria:btn:clear\")}\">\n          </div>\n        </div>\n      </div>\n    `),q=G.interaction;return q.options.find(U=>!U.hidden&&!U.classList.add(\"active\")),q.type=()=>q.options.find(U=>U.classList.contains(\"active\")),G})(this),u.useAsButton&&(this._root.button=u.el),u.container.appendChild(this._root.root)}_finalBuild(){let u=this.options,h=this._root;if(u.container.removeChild(h.root),u.inline){let m=u.el.parentElement;u.el.nextSibling?m.insertBefore(h.app,u.el.nextSibling):m.appendChild(h.app)}else u.container.appendChild(h.app);u.useAsButton?u.inline&&u.el.remove():u.el.parentNode.replaceChild(h.root,u.el),u.disabled&&this.disable(),u.comparison||(h.button.style.transition=\"none\",u.useAsButton||(h.preview.lastColor.style.transition=\"none\")),this.hide()}_buildComponents(){let u=this,h=this.options.components,m=(u.options.sliders||\"v\").repeat(2),[C,v]=m.match(/^[vh]+$/g)?m:[],x=()=>this._color||(this._color=this._lastColor.clone()),T={palette:Qe({element:u._root.palette.picker,wrapper:u._root.palette.palette,onstop:()=>u._emit(\"changestop\",\"slider\",u),onchange(I,D){if(!h.palette)return;let P=x(),{_root:G,options:q}=u,{lastColor:U,currentColor:fe}=G.preview;u._recalc&&(P.s=100*I,P.v=100-100*D,P.v<0&&(P.v=0),u._updateOutput(\"slider\"));let le=P.toRGBA().toString(0);this.element.style.background=le,this.wrapper.style.background=`\n                        linear-gradient(to top, rgba(0, 0, 0, ${P.a}), transparent),\n                        linear-gradient(to left, hsla(${P.h}, 100%, 50%, ${P.a}), rgba(255, 255, 255, ${P.a}))\n                    `,q.comparison?q.useAsButton||u._lastColor||U.style.setProperty(\"--pcr-color\",le):(G.button.style.setProperty(\"--pcr-color\",le),G.button.classList.remove(\"clear\"));let Oe=P.toHEXA().toString();for(let{el:ye,color:Se}of u._swatchColors)ye.classList[Oe===Se.toHEXA().toString()?\"add\":\"remove\"](\"pcr-active\");fe.style.setProperty(\"--pcr-color\",le)}}),hue:Qe({lock:v===\"v\"?\"h\":\"v\",element:u._root.hue.picker,wrapper:u._root.hue.slider,onstop:()=>u._emit(\"changestop\",\"slider\",u),onchange(I){if(!h.hue||!h.palette)return;let D=x();u._recalc&&(D.h=360*I),this.element.style.backgroundColor=`hsl(${D.h}, 100%, 50%)`,T.palette.trigger()}}),opacity:Qe({lock:C===\"v\"?\"h\":\"v\",element:u._root.opacity.picker,wrapper:u._root.opacity.slider,onstop:()=>u._emit(\"changestop\",\"slider\",u),onchange(I){if(!h.opacity||!h.palette)return;let D=x();u._recalc&&(D.a=Math.round(100*I)/100),this.element.style.background=`rgba(0, 0, 0, ${D.a})`,T.palette.trigger()}}),selectable:ie({elements:u._root.interaction.options,className:\"active\",onchange(I){u._representation=I.target.getAttribute(\"data-type\").toUpperCase(),u._recalc&&u._updateOutput(\"swatch\")}})};this._components=T}_bindEvents(){let{_root:u,options:h}=this,m=[i(u.interaction.clear,\"click\",()=>this._clearColor()),i([u.interaction.cancel,u.preview.lastColor],\"click\",()=>{this.setHSVA(...(this._lastColor||this._color).toHSVA(),!0),this._emit(\"cancel\")}),i(u.interaction.save,\"click\",()=>{!this.applyColor()&&!h.showAlways&&this.hide()}),i(u.interaction.result,[\"keyup\",\"input\"],C=>{this.setColor(C.target.value,!0)&&!this._initializingActive&&(this._emit(\"change\",this._color,\"input\",this),this._emit(\"changestop\",\"input\",this)),C.stopImmediatePropagation()}),i(u.interaction.result,[\"focus\",\"blur\"],C=>{this._recalc=C.type===\"blur\",this._recalc&&this._updateOutput(null)}),i([u.palette.palette,u.palette.picker,u.hue.slider,u.hue.picker,u.opacity.slider,u.opacity.picker],[\"mousedown\",\"touchstart\"],()=>this._recalc=!0,{passive:!0})];if(!h.showAlways){let C=h.closeWithKey;m.push(i(u.button,\"click\",()=>this.isOpen()?this.hide():this.show()),i(document,\"keyup\",v=>this.isOpen()&&(v.key===C||v.code===C)&&this.hide()),i(document,[\"touchstart\",\"mousedown\"],v=>{this.isOpen()&&!p(v).some(x=>x===u.app||x===u.button)&&this.hide()},{capture:!0}))}if(h.adjustableNumbers){let C={rgba:[255,255,255,1],hsva:[360,100,100,1],hsla:[360,100,100,1],cmyk:[100,100,100,100]};S(u.interaction.result,(v,x,T)=>{let I=C[this.getColorRepresentation().toLowerCase()];if(I){let D=I[T],P=v+(D>=100?1e3*x:x);return P<=0?0:Number((P<D?P:D).toPrecision(3))}return v})}if(h.autoReposition&&!h.inline){let C=null,v=this;m.push(i(window,[\"scroll\",\"resize\"],()=>{v.isOpen()&&(h.closeOnScroll&&v.hide(),C===null?(C=setTimeout(()=>C=null,100),requestAnimationFrame(function x(){v._rePositioningPicker(),C!==null&&requestAnimationFrame(x)})):(clearTimeout(C),C=setTimeout(()=>C=null,100)))},{capture:!0}))}this._eventBindings=m}_rePositioningPicker(){let{options:u}=this;if(!u.inline&&!this._nanopop.update({container:document.body.getBoundingClientRect(),position:u.position})){let h=this._root.app,m=h.getBoundingClientRect();h.style.top=(window.innerHeight-m.height)/2+\"px\",h.style.left=(window.innerWidth-m.width)/2+\"px\"}}_updateOutput(u){let{_root:h,_color:m,options:C}=this;if(h.interaction.type()){let v=`to${h.interaction.type().getAttribute(\"data-type\")}`;h.interaction.result.value=typeof m[v]==\"function\"?m[v]().toString(C.outputPrecision):\"\"}!this._initializingActive&&this._recalc&&this._emit(\"change\",m,u,this)}_clearColor(){let u=arguments.length>0&&arguments[0]!==void 0&&arguments[0],{_root:h,options:m}=this;m.useAsButton||h.button.style.setProperty(\"--pcr-color\",\"rgba(0, 0, 0, 0.15)\"),h.button.classList.add(\"clear\"),m.showAlways||this.hide(),this._lastColor=null,this._initializingActive||u||(this._emit(\"save\",null),this._emit(\"clear\"))}_parseLocalColor(u){let{values:h,type:m,a:C}=Te(u),{lockOpacity:v}=this.options,x=C!==void 0&&C!==1;return h&&h.length===3&&(h[3]=void 0),{values:!h||v&&x?null:h,type:m}}_t(u){return this.options.i18n[u]||M.I18N_DEFAULTS[u]}_emit(u){for(var h=arguments.length,m=new Array(h>1?h-1:0),C=1;C<h;C++)m[C-1]=arguments[C];this._eventListener[u].forEach(v=>v(...m,this))}on(u,h){return this._eventListener[u].push(h),this}off(u,h){let m=this._eventListener[u]||[],C=m.indexOf(h);return~C&&m.splice(C,1),this}addSwatch(u){let{values:h}=this._parseLocalColor(u);if(h){let{_swatchColors:m,_root:C}=this,v=xe(...h),x=c(`<button type=\"button\" style=\"--pcr-color: ${v.toRGBA().toString(0)}\" aria-label=\"${this._t(\"btn:swatch\")}\"/>`);return C.swatches.appendChild(x),m.push({el:x,color:v}),this._eventBindings.push(i(x,\"click\",()=>{this.setHSVA(...v.toHSVA(),!0),this._emit(\"swatchselect\",v),this._emit(\"change\",v,\"swatch\",this)})),!0}return!1}removeSwatch(u){let h=this._swatchColors[u];if(h){let{el:m}=h;return this._root.swatches.removeChild(m),this._swatchColors.splice(u,1),!0}return!1}applyColor(){let u=arguments.length>0&&arguments[0]!==void 0&&arguments[0],{preview:h,button:m}=this._root,C=this._color.toRGBA().toString(0);return h.lastColor.style.setProperty(\"--pcr-color\",C),this.options.useAsButton||m.style.setProperty(\"--pcr-color\",C),m.classList.remove(\"clear\"),this._lastColor=this._color.clone(),this._initializingActive||u||this._emit(\"save\",this._color),this}destroy(){cancelAnimationFrame(this._setupAnimationFrame),this._eventBindings.forEach(u=>l(...u)),Object.keys(this._components).forEach(u=>this._components[u].destroy())}destroyAndRemove(){this.destroy();let{root:u,app:h}=this._root;u.parentElement&&u.parentElement.removeChild(u),h.parentElement.removeChild(h),Object.keys(this).forEach(m=>this[m]=null)}hide(){return!!this.isOpen()&&(this._root.app.classList.remove(\"visible\"),this._emit(\"hide\"),!0)}show(){return!this.options.disabled&&!this.isOpen()&&(this._root.app.classList.add(\"visible\"),this._rePositioningPicker(),this._emit(\"show\",this._color),this)}isOpen(){return this._root.app.classList.contains(\"visible\")}setHSVA(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:360,h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,v=arguments.length>4&&arguments[4]!==void 0&&arguments[4],x=this._recalc;if(this._recalc=!1,u<0||u>360||h<0||h>100||m<0||m>100||C<0||C>1)return!1;this._color=xe(u,h,m,C);let{hue:T,opacity:I,palette:D}=this._components;return T.update(u/360),I.update(C),D.update(h/100,1-m/100),v||this.applyColor(),x&&this._updateOutput(),this._recalc=x,!0}setColor(u){let h=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(u===null)return this._clearColor(h),!0;let{values:m,type:C}=this._parseLocalColor(u);if(m){let v=C.toUpperCase(),{options:x}=this._root.interaction,T=x.find(I=>I.getAttribute(\"data-type\")===v);if(T&&!T.hidden)for(let I of x)I.classList[I===T?\"add\":\"remove\"](\"active\");return!!this.setHSVA(...m,h)&&this.setColorRepresentation(v)}return!1}setColorRepresentation(u){return u=u.toUpperCase(),!!this._root.interaction.options.find(h=>h.getAttribute(\"data-type\").startsWith(u)&&!h.click())}getColorRepresentation(){return this._representation}getColor(){return this._color}getSelectedColor(){return this._lastColor}getRoot(){return this._root}disable(){return this.hide(),this.options.disabled=!0,this._root.button.classList.add(\"disabled\"),this}enable(){return this.options.disabled=!1,this._root.button.classList.remove(\"disabled\"),this}}return V(M,\"utils\",t),V(M,\"version\",\"1.8.4\"),V(M,\"I18N_DEFAULTS\",{\"ui:dialog\":\"color picker dialog\",\"btn:toggle\":\"toggle color picker dialog\",\"btn:swatch\":\"color swatch\",\"btn:last-color\":\"use previous color\",\"btn:save\":\"Save\",\"btn:cancel\":\"Cancel\",\"btn:clear\":\"Clear\",\"aria:btn:save\":\"save and close\",\"aria:btn:cancel\":\"cancel and close\",\"aria:btn:clear\":\"clear and close\",\"aria:input\":\"color input field\",\"aria:palette\":\"color selection area\",\"aria:hue\":\"hue selection slider\",\"aria:opacity\":\"selection slider\"}),V(M,\"DEFAULT_OPTIONS\",{appClass:null,theme:\"classic\",useAsButton:!1,padding:8,disabled:!1,comparison:!0,closeOnScroll:!1,outputPrecision:0,lockOpacity:!1,autoReposition:!0,container:\"body\",components:{interaction:{}},i18n:{},swatches:null,inline:!1,sliders:null,default:\"#42445a\",defaultRepresentation:null,position:\"bottom-middle\",adjustableNumbers:!0,showAlways:!1,closeWithKey:\"Escape\"}),V(M,\"create\",_=>new M(_)),n=n.default})()})});var Bu={};ul(Bu,{default:()=>_r});module.exports=fl(Bu);var yt=require(\"obsidian\"),Qt=class extends yt.Modal{constructor(t,a,i,l){super(t);this.plugin=a,this.config=l,this.section=i}onOpen(){let{contentEl:t,modalEl:a}=this;a.addClass(\"modal-style-settings\"),new yt.Setting(t).setName(`Export settings for: ${this.section}`).then(i=>{let l=JSON.stringify(this.config,null,2);i.controlEl.createEl(\"a\",{cls:\"style-settings-copy\",text:\"Copy to clipboard\",href:\"#\"},c=>{new yt.TextAreaComponent(t).setValue(l).then(f=>{c.addEventListener(\"click\",p=>{p.preventDefault(),f.inputEl.select(),f.inputEl.setSelectionRange(0,99999),document.execCommand(\"copy\"),c.addClass(\"success\"),setTimeout(()=>{c.parentNode&&c.removeClass(\"success\")},2e3)})})}),i.controlEl.createEl(\"a\",{cls:\"style-settings-download\",text:\"Download\",attr:{download:\"style-settings.json\",href:`data:application/json;charset=utf-8,${encodeURIComponent(l)}`}})})}onClose(){let{contentEl:t}=this;t.empty()}};var Ze=require(\"obsidian\"),Zt=class extends Ze.Modal{constructor(t,a){super(t);this.plugin=a}onOpen(){let{contentEl:t,modalEl:a}=this;a.addClass(\"modal-style-settings\"),new Ze.Setting(t).setName(\"Import style setting\").setDesc(\"Import an entire or partial configuration. Warning: this may override existing settings\"),new Ze.Setting(t).then(i=>{let l=createSpan({cls:\"style-settings-import-error\",text:\"Error importing config\"});i.nameEl.appendChild(l);let c=async f=>{if(f)try{let p=JSON.parse(f);await this.plugin.settingsManager.setSettings(p),this.plugin.settingsTab.display(),this.close()}catch(p){l.addClass(\"active\"),l.setText(`Error importing style settings: ${p}`)}else l.addClass(\"active\"),l.setText(\"Error importing style settings: config is empty\")};i.controlEl.createEl(\"input\",{cls:\"style-settings-import-input\",attr:{id:\"style-settings-import-input\",name:\"style-settings-import-input\",type:\"file\",accept:\".json\"}},f=>{f.addEventListener(\"change\",p=>{if(!p.target)return;let w=new FileReader;w.onload=async E=>{var B;(B=E.target)!=null&&B.result&&await c(E.target.result.toString().trim())};let S=p.target;S.files&&w.readAsText(S.files[0])})}),i.controlEl.createEl(\"label\",{cls:\"style-settings-import-label\",text:\"Import from file\",attr:{for:\"style-settings-import-input\"}}),new Ze.TextAreaComponent(t).setPlaceholder(\"Paste config here...\").then(f=>{new Ze.ButtonComponent(t).setButtonText(\"Save\").onClick(async()=>{await c(f.getValue().trim())})})})}onClose(){let{contentEl:t}=this;t.empty()}};var he={HEADING:\"heading\",INFO_TEXT:\"info-text\",CLASS_TOGGLE:\"class-toggle\",CLASS_SELECT:\"class-select\",VARIABLE_TEXT:\"variable-text\",VARIABLE_NUMBER:\"variable-number\",VARIABLE_NUMBER_SLIDER:\"variable-number-slider\",VARIABLE_SELECT:\"variable-select\",VARIABLE_COLOR:\"variable-color\",VARIABLE_THEMED_COLOR:\"variable-themed-color\",COLOR_GRADIENT:\"color-gradient\"};var rn=Xt(Jn());function St(e,n,t,a,i=[]){let l=(0,rn.default)(t),c=i.reduce((f,p)=>(f.push(...St(p.id,p.format,t,a)),f),[]);switch(n){case\"hex\":return[{key:e,value:t},...c];case\"hsl\":return[{key:e,value:l.css(\"hsl\")},...c];case\"hsl-values\":{let f=l.hsl(),p=a?`,${l.alpha()}`:\"\",w=isNaN(f[0])?0:f[0];return[{key:e,value:`${w},${f[1]*100}%,${f[2]*100}%${p}`},...c]}case\"hsl-split\":{let f=l.hsl(),p=isNaN(f[0])?0:f[0],w=[{key:`${e}-h`,value:p.toString()},{key:`${e}-s`,value:(f[1]*100).toString()+\"%\"},{key:`${e}-l`,value:(f[2]*100).toString()+\"%\"},...c];return a&&w.push({key:`${e}-a`,value:l.alpha().toString()}),w}case\"hsl-split-decimal\":{let f=l.hsl(),p=isNaN(f[0])?0:f[0],w=[{key:`${e}-h`,value:p.toString()},{key:`${e}-s`,value:f[1].toString()},{key:`${e}-l`,value:f[2].toString()},...c];return a&&w.push({key:`${e}-a`,value:l.alpha().toString()}),w}case\"rgb\":return[{key:e,value:l.css()},...c];case\"rgb-values\":{let f=l.rgb(),p=a?`,${l.alpha()}`:\"\";return[{key:e,value:`${f[0]},${f[1]},${f[2]}${p}`},...c]}case\"rgb-split\":{let f=l.rgb(),p=[{key:`${e}-r`,value:f[0].toString()},{key:`${e}-g`,value:f[1].toString()},{key:`${e}-b`,value:f[2].toString()},...c];return a&&p.push({key:`${e}-a`,value:l.alpha().toString()}),p}}}function tn(e,n,t,a,i,l,c){let f=rn.default.scale([t.trim(),a.trim()]).domain([0,100]);for(let p=0;p<=100;p++)if(p%l===0){let w=f(p);e.push(...St(`${n}-${p.toString().padStart(c,\"0\")}`,i,w.css(),w.alpha()!==1))}}function gl(e,n,t,a){let i=[],l=[],c=[],f={},p={},w={},S=new Set;for(let E in e){let[B,Y,K]=E.split(\"@@\");if(!n[B])continue;let L=n[B][Y];if(!L)continue;let re=e[E];switch(L.type){case he.VARIABLE_NUMBER:case he.VARIABLE_NUMBER_SLIDER:{let F=L.format,oe=re!==void 0?re:L.default;i.push({key:L.id,value:`${oe}${F||\"\"}`});continue}case he.VARIABLE_TEXT:case he.VARIABLE_SELECT:{let F=L,oe=re!==void 0?re.toString():F.default.toString();F.quotes&&(oe!=='\"\"'?oe=`'${oe}'`:oe=\"\"),i.push({key:L.id,value:oe});continue}case he.VARIABLE_COLOR:{S.has(B)||S.add(B);let F=L,oe=re!==void 0?re.toString():F.default;oe&&(i.push(...St(L.id,F.format,oe,F.opacity,F[\"alt-format\"])),St(L.id,\"rgb\",oe,F.opacity).forEach(ke=>{f[ke.key]=ke.value}));continue}case he.VARIABLE_THEMED_COLOR:{S.has(B)||S.add(B);let F=L,ke=re!==void 0?re.toString():F[K===\"light\"?\"default-light\":\"default-dark\"];(K===\"light\"?l:c).push(...St(L.id,F.format,ke,F.opacity,F[\"alt-format\"])),St(L.id,\"rgb\",ke,F.opacity).forEach(Ye=>{K===\"light\"?p[Ye.key]=Ye.value:w[Ye.key]=Ye.value});continue}}}return S.forEach(E=>{let B=t[E];B&&B.forEach(Y=>{var ke,Ye,qe;let{from:K,to:Q,format:L,step:re,id:F,pad:oe=0}=Y;if(p[K]){let Te=p[K],xe=p[Q]||((ke=a.plugin.getCSSVar(Q).light)==null?void 0:ke.trim());xe&&tn(l,F,Te,xe,L,re,oe)}if(w[K]){let Te=w[K],xe=w[Q]||((Ye=a.plugin.getCSSVar(Q).dark)==null?void 0:Ye.trim());xe&&tn(c,F,Te,xe,L,re,oe)}if(f[K]){let Te=f[K],xe=f[Q]||((qe=a.plugin.getCSSVar(Q).current)==null?void 0:qe.trim());xe&&tn(i,F,Te,xe,L,re,oe)}})}),[i,l,c]}var Jt=class{constructor(n){this.config={};this.gradients={};this.plugin=n,this.settings={},this.styleTag=document.createElement(\"style\"),this.styleTag.id=\"css-settings-manager\",document.getElementsByTagName(\"head\")[0].appendChild(this.styleTag)}cleanup(){this.styleTag.remove(),this.removeClasses()}async save(){await this.plugin.saveData(this.settings),this.setCSSVariables()}async load(){this.settings=Object.assign({},await this.plugin.loadData())}initClasses(){Object.keys(this.config).forEach(n=>{let t=this.config[n];Object.keys(t).forEach(a=>{let i=t[a];if(i.type===he.CLASS_TOGGLE){let l=i,c=this.getSetting(n,a);(c===!0||c===void 0&&l.default===!0)&&document.body.classList.add(i.id)}else if(i.type===he.CLASS_SELECT){let l=i,c=this.getSetting(n,a);c===void 0&&l.default?c=l.default:c===void 0&&(c=\"none\"),c!==\"none\"&&document.body.classList.add(c)}})})}removeClasses(){Object.keys(this.config).forEach(n=>{let t=this.config[n];Object.keys(t).forEach(a=>{let i=t[a];i.type===he.CLASS_TOGGLE?document.body.classList.remove(i.id):i.type===he.CLASS_SELECT&&i.options.forEach(c=>{typeof c==\"string\"?document.body.classList.remove(c):document.body.classList.remove(c.value)})})})}setCSSVariables(){let[n,t,a]=gl(this.settings,this.config,this.gradients,this);this.styleTag.innerText=`\n\t\t\tbody.css-settings-manager {\n\t\t\t\t${n.reduce((i,l)=>i+`--${l.key}: ${l.value}; `,\"\")}\n\t\t\t}\n\n\t\t\tbody.theme-light.css-settings-manager {\n\t\t\t\t${t.reduce((i,l)=>i+`--${l.key}: ${l.value}; `,\"\")}\n\t\t\t}\n\n\t\t\tbody.theme-dark.css-settings-manager {\n\t\t\t\t${a.reduce((i,l)=>i+`--${l.key}: ${l.value}; `,\"\")}\n\t\t\t}\n\t\t\t`.trim().replace(/[\\r\\n\\s]+/g,\" \"),this.plugin.app.workspace.trigger(\"css-change\",{source:\"style-settings\"})}setConfig(n){this.config={},this.gradients={},n.forEach(a=>{this.config[a.id]={},a.settings.forEach(i=>{this.config[a.id][i.id]=i,i.type===he.COLOR_GRADIENT&&(this.gradients[a.id]||(this.gradients[a.id]=[]),this.gradients[a.id].push(i))})});let t=!1;for(let a in this.settings){let[i,l]=a.split(\"@@\");this.config[i]&&!this.config[i][l]&&(delete this.settings[a],t=!0)}t?this.save():this.setCSSVariables()}getSetting(n,t){return this.settings[`${n}@@${t}`]}getSettings(n,t){return t.reduce((a,i)=>{let l=`${n}@@${i}`,c=[\"dark\",\"light\"];return this.settings[l]&&(a[l]=this.settings[l]),c.forEach(f=>{let p=`${l}@@${f}`;this.settings[p]&&(a[p]=this.settings[p])}),a},{})}setSetting(n,t,a){this.settings[`${n}@@${t}`]=a,this.save(),this.removeClasses(),this.initClasses()}setSettings(n){return Object.keys(n).forEach(t=>{this.settings[t]=n[t]}),this.removeClasses(),this.initClasses(),this.save()}clearSetting(n,t){delete this.settings[`${n}@@${t}`],this.save(),this.removeClasses(),this.initClasses()}clearSection(n){Object.keys(this.settings).forEach(t=>{let[a]=t.split(\"@@\");a===n&&delete this.settings[t]}),this.save(),this.removeClasses(),this.initClasses()}export(n,t){new Qt(this.plugin.app,this.plugin,n,t).open()}import(){new Zt(this.plugin.app,this.plugin).open()}};var ei={};var ti={};var ri={};var ni={\"Default:\":\"Standard:\",\"Error:\":\"Fehler:\",\"missing default light value, or value is not in a valid color format\":\"Fehlender heller standard Wert oder Wert ist in keinem validen Farb-Format\",\"missing default dark value, or value is not in a valid color format\":\"Fehlender dunkler standard Wert oder Wert ist in keinem validen Farb-Format\",\"missing default value, or value is not in a valid color format\":\"Fehlender standard Wert oder Wert ist in keinem validen Farb-Format\",\"missing default value\":\"Fehlender standard Wert\"};var nn={\"Default:\":\"Default:\",\"Error:\":\"Error:\",\"missing default light value, or value is not in a valid color format\":\"missing default light value, or value is not in a valid color format\",\"missing default dark value, or value is not in a valid color format\":\"missing default dark value, or value is not in a valid color format\",\"missing default value, or value is not in a valid color format\":\"missing default value, or value is not in a valid color format\",\"missing default value\":\"missing default value\"};var ii={};var ai={};var si={};var oi={};var li={};var ci={};var ui={};var fi={\"Default:\":\"Standaard:\",\"Error:\":\"Error:\",\"missing default light value, or value is not in a valid color format\":\"Geen standaard waarde voor het lichte thema, of de waarde is niet in het goede formaat\",\"missing default dark value, or value is not in a valid color format\":\"Geen standaard waarde voor het donkere thema, of de waarde is niet in het goede formaat\",\"missing default value, or value is not in a valid color format\":\"Geen standaard waarde, of de waarde is niet in het goede formaat\",\"missing default value\":\"Geen standaard waarde\"};var gi={};var pi={};var hi={};var di={};var vi={};var mi={};var bi={};var yi={};var Si={};var Ci={\"Default:\":\"\\u9ED8\\u8BA4\\uFF1A\",\"Error:\":\"\\u9519\\u8BEF\\uFF1A\",\"missing default light value, or value is not in a valid color format\":\"\\u7F3A\\u5C11\\u9ED8\\u8BA4\\u7684\\u6D45\\u8272\\u6A21\\u5F0F\\u8272\\u503C\\uFF0C\\u6216\\u8BE5\\u8272\\u503C\\u6CA1\\u6709\\u91C7\\u7528\\u4E00\\u4E2A\\u6709\\u6548\\u7684\\u989C\\u8272\\u683C\\u5F0F\",\"missing default dark value, or value is not in a valid color format\":\"\\u7F3A\\u5C11\\u9ED8\\u8BA4\\u7684\\u6DF1\\u8272\\u6A21\\u5F0F\\u8272\\u503C\\uFF0C\\u6216\\u8BE5\\u8272\\u503C\\u6CA1\\u6709\\u91C7\\u7528\\u4E00\\u4E2A\\u6709\\u6548\\u7684\\u989C\\u8272\\u683C\\u5F0F\",\"missing default value, or value is not in a valid color format\":\"\\u7F3A\\u5C11\\u9ED8\\u8BA4\\u8272\\u503C\\uFF0C\\u6216\\u8BE5\\u8272\\u503C\\u6CA1\\u6709\\u91C7\\u7528\\u4E00\\u4E2A\\u6709\\u6548\\u7684\\u989C\\u8272\\u683C\\u5F0F\",\"missing default value\":\"\\u7F3A\\u5C11\\u9ED8\\u8BA4\\u8272\\u503C\"};var xi={};var ct=window.localStorage.getItem(\"language\"),pl={ar:ei,cz:ti,da:ri,de:ni,en:nn,es:ii,fr:ai,hi:si,id:oi,it:li,ja:ci,ko:ui,nl:fi,no:gi,pl:pi,\"pt-BR\":di,pt:hi,ro:vi,ru:mi,sq:bi,tr:yi,uk:Si,\"zh-TW\":xi,zh:Ci},an=pl[ct||\"en\"];function de(e){return an||console.error(\"Error: Style Settings locale not found\",ct),an&&an[e]||nn[e]}var sn=/\\/\\*!?\\s*@settings[\\r\\n]+?([\\s\\S]+?)\\*\\//g,wi=/^name:\\s*(.+)$/m;function ve(e){return ct&&e[`title.${ct}`]||e.title}function me(e){return ct&&e[`description.${ct}`]||e.description}function Ct(e){return/^(#|rgb|hsl)/.test(e)}function Nt(e){let{el:n,isView:t,containerEl:a,swatches:i,opacity:l,defaultColor:c}=e;return{el:n,container:t?document.body:a,theme:\"nano\",swatches:i,lockOpacity:!l,default:c,position:\"left-middle\",components:{preview:!0,hue:!0,opacity:!!l,interaction:{hex:!0,rgba:!0,hsla:!0,input:!0,cancel:!0,save:!0}}}}function Ot(e){e.hide()}function Ei(e){return e===\"\"?'\"\"':e.replace(/[;<>]/g,\"\")}function We(e,n,t){let a=createFragment();if(e&&a.appendChild(document.createTextNode(e)),n){let i=createEl(\"small\");i.appendChild(createEl(\"strong\",{text:`${de(\"Default:\")} `})),i.appendChild(document.createTextNode(t||n));let l=createEl(\"div\");l.appendChild(i),a.appendChild(l)}return a}var on=Xt(Ai()),ki=require(\"obsidian\"),Ce=class extends ki.Component{constructor(t,a,i,l,c,f){super();this.childEl=null;this.parent=t,this.sectionId=a,this.sectionName=i,this.setting=l,this.settingsManager=c,this.isView=f}get containerEl(){return this.parent instanceof HTMLElement?this.parent:this.parent.childEl}onload(){this.render()}onunload(){this.destroy()}match(t){var l,c,f,p;if(!t)return Number.NEGATIVE_INFINITY;let a=ve(this.setting),i=me(this.setting)||\"\";return Math.max((c=(l=on.default.single(t,a))==null?void 0:l.score)!=null?c:Number.NEGATIVE_INFINITY,(p=(f=on.default.single(t,i))==null?void 0:f.score)!=null?p:Number.NEGATIVE_INFINITY)}decisiveMatch(t){return this.match(t)>-1e5}};var Fe=\"Restore default\";var Ti=require(\"obsidian\"),tr=class extends Ce{render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);if(typeof this.setting.default!=\"string\")return console.error(`${de(\"Error:\")} ${t} ${de(\"missing default value\")}`);let i=this.getPreviousValue(),l=this.getDefaultOptionLabel();this.settingEl=new Ti.Setting(this.containerEl),this.settingEl.setName(t),this.settingEl.setDesc(We(a,this.setting.default,l)),this.settingEl.addDropdown(c=>{this.setting.allowEmpty&&c.addOption(\"none\",\"\");for(let f of this.setting.options)typeof f==\"string\"?c.addOption(f,f):c.addOption(f.value,f.label);c.setValue(i),c.onChange(f=>{this.settingsManager.setSetting(this.sectionId,this.setting.id,f),i=f}),this.dropdownComponent=c}),this.settingEl.addExtraButton(c=>{c.setIcon(\"reset\"),c.onClick(()=>{this.dropdownComponent.setValue(this.setting.default||\"none\"),this.settingsManager.clearSetting(this.sectionId,this.setting.id)}),c.setTooltip(Fe)}),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t;(t=this.settingEl)==null||t.settingEl.remove()}getDefaultOption(){if(this.setting.default)return this.setting.options.find(t=>typeof t==\"string\"?t===this.setting.default:t.value===this.setting.default)}getDefaultOptionLabel(){let t=this.getDefaultOption();if(t)return typeof t==\"string\"?t:t.label}getPreviousValue(){let t=this.settingsManager.getSetting(this.sectionId,this.setting.id);return t===void 0?this.setting.default?this.setting.default:\"none\":t}};var Li=require(\"obsidian\"),rr=class extends Ce{render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);this.settingEl=new Li.Setting(this.containerEl),this.settingEl.setName(t),this.settingEl.setDesc(a!=null?a:\"\"),this.settingEl.addToggle(i=>{let l=this.settingsManager.getSetting(this.sectionId,this.setting.id);i.setValue(l!==void 0?!!l:!!this.setting.default),i.onChange(c=>{this.settingsManager.setSetting(this.sectionId,this.setting.id,c)}),this.toggleComponent=i}),this.settingEl.addExtraButton(i=>{i.setIcon(\"reset\"),i.onClick(()=>{let l=!!this.setting.default;this.toggleComponent.setValue(l),this.settingsManager.clearSetting(this.sectionId,this.setting.id)}),i.setTooltip(Fe)}),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t;(t=this.settingEl)==null||t.settingEl.remove()}};var ir=require(\"obsidian\"),nr=class extends Ce{render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);this.settingEl=new ir.Setting(this.containerEl),this.settingEl.setClass(\"style-settings-info-text\"),t&&this.settingEl.setName(t),a&&(this.setting.markdown?(ir.MarkdownRenderer.renderMarkdown(a,this.settingEl.descEl,\"\",this),this.settingEl.descEl.addClass(\"style-settings-markdown\")):this.settingEl.setDesc(a)),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t;(t=this.settingEl)==null||t.settingEl.remove()}};var Mi=Xt(cn()),Ii=require(\"obsidian\"),sr=class extends Ce{render(){var p;if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);if((typeof this.setting.default!=\"string\"||!Ct(this.setting.default))&&(this.setting.default=(p=this.settingsManager.plugin.getCSSVar(this.setting.id).current)==null?void 0:p.trim()),typeof this.setting.default!=\"string\"||!Ct(this.setting.default))return console.error(`${de(\"Error:\")} ${t} ${de(\"missing default value, or value is not in a valid color format\")}`);let i=this.settingsManager.getSetting(this.sectionId,this.setting.id),l=[];this.setting.default&&l.push(this.setting.default),i!==void 0&&l.push(i),this.settingEl=new Ii.Setting(this.containerEl),this.settingEl.setName(t),this.settingEl.setDesc(We(a,this.setting.default));let c=i!==void 0?i:this.setting.default;this.containerEl.style.setProperty(\"--pcr-color\",c);let f=this.pickr=Mi.default.create(Nt({isView:this.isView,el:this.settingEl.controlEl.createDiv({cls:\"picker\"}),containerEl:this.containerEl,swatches:l,opacity:this.setting.opacity,defaultColor:c}));f.on(\"save\",(w,S)=>{w&&(this.settingsManager.setSetting(this.sectionId,this.setting.id,w.toHEXA().toString()),S.hide(),S.addSwatch(w.toHEXA().toString()))}),f.on(\"show\",()=>{let{result:w}=f.getRoot().interaction;activeWindow.requestAnimationFrame(()=>{activeWindow.requestAnimationFrame(()=>w.select())})}),f.on(\"cancel\",Ot),this.settingEl.addExtraButton(w=>{w.setIcon(\"reset\"),w.onClick(()=>{f.setColor(this.setting.default||null),this.settingsManager.clearSetting(this.sectionId,this.setting.id)}),w.setTooltip(Fe)}),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t,a;(t=this.pickr)==null||t.destroyAndRemove(),this.pickr=null,(a=this.settingEl)==null||a.settingEl.remove()}};var lr=require(\"obsidian\"),or=class extends Ce{render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);if(typeof this.setting.default!=\"number\")return console.error(`${de(\"Error:\")} ${t} ${de(\"missing default value\")}`);this.settingEl=new lr.Setting(this.containerEl),this.settingEl.setName(t),this.settingEl.setDesc(We(a,this.setting.default.toString(10))),this.settingEl.addText(i=>{let l=this.settingsManager.getSetting(this.sectionId,this.setting.id),c=(0,lr.debounce)(f=>{let p=/\\./.test(f);this.settingsManager.setSetting(this.sectionId,this.setting.id,p?parseFloat(f):parseInt(f,10))},250,!0);i.setValue(l!==void 0?l.toString():this.setting.default.toString()),i.onChange(c),this.textComponent=i}),this.settingEl.addExtraButton(i=>{i.setIcon(\"reset\"),i.onClick(()=>{this.textComponent.setValue(this.setting.default.toString()),this.settingsManager.clearSetting(this.sectionId,this.setting.id)}),i.setTooltip(Fe)}),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t;(t=this.settingEl)==null||t.settingEl.remove()}};var ur=require(\"obsidian\"),cr=class extends Ce{render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);if(typeof this.setting.default!=\"number\")return console.error(`${de(\"Error:\")} ${t} ${de(\"missing default value\")}`);this.settingEl=new ur.Setting(this.containerEl),this.settingEl.setName(t),this.settingEl.setDesc(We(a,this.setting.default.toString(10))),this.settingEl.addSlider(i=>{let l=this.settingsManager.getSetting(this.sectionId,this.setting.id),c=(0,ur.debounce)(f=>{this.settingsManager.setSetting(this.sectionId,this.setting.id,f)},250,!0);i.setDynamicTooltip(),i.setLimits(this.setting.min,this.setting.max,this.setting.step),i.setValue(l!==void 0?l:this.setting.default),i.onChange(c),this.sliderComponent=i}),this.settingEl.addExtraButton(i=>{i.setIcon(\"reset\"),i.onClick(()=>{this.sliderComponent.setValue(this.setting.default),this.settingsManager.clearSetting(this.sectionId,this.setting.id)}),i.setTooltip(Fe)}),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t;(t=this.settingEl)==null||t.settingEl.remove()}};var Fi=require(\"obsidian\"),fr=class extends Ce{render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);if(typeof this.setting.default!=\"string\")return console.error(`${de(\"Error:\")} ${t} ${de(\"missing default value\")}`);let i=this.getDefaultOptionLabel();this.settingEl=new Fi.Setting(this.containerEl),this.settingEl.setName(t),this.settingEl.setDesc(We(a,this.setting.default,i)),this.settingEl.addDropdown(l=>{let c=this.settingsManager.getSetting(this.sectionId,this.setting.id);for(let f of this.setting.options)typeof f==\"string\"?l.addOption(f,f):l.addOption(f.value,f.label);l.setValue(c!==void 0?c:this.setting.default),l.onChange(f=>{this.settingsManager.setSetting(this.sectionId,this.setting.id,f)}),this.dropdownComponent=l}),this.settingEl.addExtraButton(l=>{l.setIcon(\"reset\"),l.onClick(()=>{this.dropdownComponent.setValue(this.setting.default),this.settingsManager.clearSetting(this.sectionId,this.setting.id)}),l.setTooltip(Fe)}),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t;(t=this.settingEl)==null||t.settingEl.remove()}getDefaultOption(){if(this.setting.default)return this.setting.options.find(t=>typeof t==\"string\"?t===this.setting.default:t.value===this.setting.default)}getDefaultOptionLabel(){let t=this.getDefaultOption();if(t)return typeof t==\"string\"?t:t.label}};var pr=require(\"obsidian\"),gr=class extends Ce{render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);if(typeof this.setting.default!=\"string\")return console.error(`${de(\"Error:\")} ${t} ${de(\"missing default value\")}`);this.settingEl=new pr.Setting(this.containerEl),this.settingEl.setName(t),this.settingEl.setDesc(We(a,this.setting.default)),this.settingEl.addText(i=>{let l=this.settingsManager.getSetting(this.sectionId,this.setting.id),c=(0,pr.debounce)(f=>{this.settingsManager.setSetting(this.sectionId,this.setting.id,Ei(f))},250,!0);this.setting.quotes&&l==='\"\"'&&(l=\"\"),i.setValue(l?l.toString():this.setting.default),i.onChange(c),this.textComponent=i}),this.settingEl.addExtraButton(i=>{i.setIcon(\"reset\"),i.onClick(()=>{this.textComponent.setValue(this.setting.default),this.settingsManager.clearSetting(this.sectionId,this.setting.id)}),i.setTooltip(Fe)}),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t;(t=this.settingEl)==null||t.settingEl.remove()}};var un=Xt(cn()),Dt=require(\"obsidian\"),hr=class extends Ce{render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);if(typeof this.setting[\"default-light\"]!=\"string\"||!Ct(this.setting[\"default-light\"]))return console.error(`${de(\"Error:\")} ${t} ${de(\"missing default light value, or value is not in a valid color format\")}`);if(typeof this.setting[\"default-dark\"]!=\"string\"||!Ct(this.setting[\"default-dark\"]))return console.error(`${de(\"Error:\")} ${t} ${de(\"missing default dark value, or value is not in a valid color format\")}`);let i=`${this.setting.id}@@light`,l=`${this.setting.id}@@dark`,c=this.settingsManager.getSetting(this.sectionId,i),f=this.settingsManager.getSetting(this.sectionId,l),p=[],w=[];this.setting[\"default-light\"]&&p.push(this.setting[\"default-light\"]),c!==void 0&&p.push(c),this.setting[\"default-dark\"]&&w.push(this.setting[\"default-dark\"]),f!==void 0&&w.push(f),this.settingEl=new Dt.Setting(this.containerEl),this.settingEl.setName(t),this.settingEl.descEl.createSpan({},E=>{a&&E.appendChild(document.createTextNode(a))}),this.settingEl.descEl.createDiv({},E=>{E.createEl(\"small\",{},B=>{B.appendChild(createEl(\"strong\",{text:\"Default (light): \"})),B.appendChild(document.createTextNode(this.setting[\"default-light\"]))}),E.createEl(\"br\"),E.createEl(\"small\",{},B=>{B.appendChild(createEl(\"strong\",{text:\"Default (dark): \"})),B.appendChild(document.createTextNode(this.setting[\"default-dark\"]))})});let S=this.settingEl.controlEl.createDiv({cls:\"themed-color-wrapper\"});this.createColorPickerLight(S,this.containerEl,p,c||\"\",i),this.createColorPickerDark(S,this.containerEl,w,f||\"\",l),this.settingEl.settingEl.dataset.id=this.setting.id}destroy(){var t,a,i;(t=this.pickrLight)==null||t.destroyAndRemove(),(a=this.pickrDark)==null||a.destroyAndRemove(),this.pickrLight=null,this.pickrDark=null,(i=this.settingEl)==null||i.settingEl.remove()}createColorPickerLight(t,a,i,l,c){let f=t.createDiv({cls:\"theme-light\"}),p=l!==void 0?l:this.setting[\"default-light\"];f.style.setProperty(\"--pcr-color\",p);let w=this.pickrLight=un.default.create(Nt({isView:this.isView,el:f.createDiv({cls:\"picker\"}),containerEl:a,swatches:i,opacity:this.setting.opacity,defaultColor:p}));w.on(\"show\",()=>{let{result:E}=w.getRoot().interaction;activeWindow.requestAnimationFrame(()=>activeWindow.requestAnimationFrame(()=>E.select()))}),w.on(\"save\",(E,B)=>this.onSave(c,E,B)),w.on(\"cancel\",Ot);let S=new Dt.ButtonComponent(f.createDiv({cls:\"pickr-reset\"}));S.setIcon(\"reset\"),S.onClick(()=>{w.setColor(this.setting[\"default-light\"]),this.settingsManager.clearSetting(this.sectionId,c)}),S.setTooltip(Fe)}createColorPickerDark(t,a,i,l,c){let f=t.createDiv({cls:\"theme-dark\"}),p=l!==void 0?l:this.setting[\"default-dark\"];f.style.setProperty(\"--pcr-color\",p);let w=this.pickrDark=un.default.create(Nt({isView:this.isView,el:f.createDiv({cls:\"picker\"}),containerEl:a,swatches:i,opacity:this.setting.opacity,defaultColor:p}));w.on(\"show\",()=>{let{result:E}=w.getRoot().interaction;activeWindow.requestAnimationFrame(()=>activeWindow.requestAnimationFrame(()=>E.select()))}),w.on(\"save\",(E,B)=>this.onSave(c,E,B)),w.on(\"cancel\",Ot);let S=new Dt.ButtonComponent(f.createDiv({cls:\"pickr-reset\"}));S.setIcon(\"reset\"),S.onClick(()=>{w.setColor(this.setting[\"default-dark\"]),this.settingsManager.clearSetting(this.sectionId,c)}),S.setTooltip(Fe)}onSave(t,a,i){a&&(this.settingsManager.setSetting(this.sectionId,t,a.toHEXA().toString()),i.hide(),i.addSwatch(a.toHEXA().toString()))}};var vr=require(\"obsidian\");function hl(e,n,t,a,i,l){return a.type===he.HEADING?new dr(e,n,t,a,i,l):a.type===he.INFO_TEXT?new nr(e,n,t,a,i,l):a.type===he.CLASS_TOGGLE?new rr(e,n,t,a,i,l):a.type===he.CLASS_SELECT?new tr(e,n,t,a,i,l):a.type===he.VARIABLE_TEXT?new gr(e,n,t,a,i,l):a.type===he.VARIABLE_NUMBER?new or(e,n,t,a,i,l):a.type===he.VARIABLE_NUMBER_SLIDER?new cr(e,n,t,a,i,l):a.type===he.VARIABLE_SELECT?new fr(e,n,t,a,i,l):a.type===he.VARIABLE_COLOR?new sr(e,n,t,a,i,l):a.type===he.VARIABLE_THEMED_COLOR?new hr(e,n,t,a,i,l):void 0}function Ni(e){let{containerEl:n,isView:t,sectionId:a,settings:i,settingsManager:l,sectionName:c}=e,f=new dr(n,a,c,i[0],l,t),p=f;for(let w of i.splice(1))if(w.type===\"heading\"){let S=w;if(S.level<p.setting.level){for(;S.level<p.setting.level;)p=p.parent;p.setting.id===f.setting.id?p=p.addSettingChild(S):p=p.parent.addSettingChild(S)}else S.level===p.setting.level?p=p.parent.addSettingChild(S):p=p.addSettingChild(S)}else p.addSettingChild(w);return f}var dr=class extends Ce{constructor(){super(...arguments);this.children=[];this.filteredChildren=[];this.filterMode=!1;this.filterResultCount=0}render(){if(!this.containerEl)return;let t=ve(this.setting),a=me(this.setting);this.settingEl=new vr.Setting(this.containerEl),this.settingEl.setHeading(),this.settingEl.setClass(\"style-settings-heading\"),this.settingEl.setName(t),this.settingEl.setDesc(a!=null?a:\"\"),this.settingEl.settingEl.dataset.level=this.setting.level.toString(),this.settingEl.settingEl.dataset.id=this.setting.id;let i=createSpan({cls:\"style-settings-collapse-indicator\"});(0,vr.setIcon)(i,\"right-triangle\"),this.settingEl.nameEl.prepend(i),this.resultsEl=this.settingEl.nameEl.createSpan({cls:\"style-settings-filter-result-count\",text:this.filterMode?`${this.filterResultCount} Results`:void 0}),this.settingEl.settingEl.addEventListener(\"click\",()=>{this.toggleVisible()}),this.addResetButton(),this.addExportButton(),this.childEl=this.containerEl.createDiv({cls:\"style-settings-container\"}),this.setCollapsed(!!this.setting.collapsed)}destroy(){var t,a;this.removeChildren(),(t=this.settingEl)==null||t.settingEl.remove(),(a=this.childEl)==null||a.remove()}filter(t){var a;this.filteredChildren=[],this.filterResultCount=0;for(let i of this.children)if(i.setting.type===he.HEADING){let l=i.filter(t);l>0&&(this.filterResultCount+=l,this.filteredChildren.push(i))}else i.decisiveMatch(t)&&(this.filteredChildren.push(i),this.filterResultCount+=1);return this.filterMode=!0,this.filterResultCount?this.setCollapsed(!1):this.setCollapsed(!0),this.renderChildren(),(a=this.resultsEl)==null||a.setText(`${this.filterResultCount} Results`),this.filterResultCount}clearFilter(){var t;this.filteredChildren=[];for(let a of this.children)a.setting.type===he.HEADING&&a.clearFilter();this.filterMode=!1,this.setCollapsed(!0),this.renderChildren(),(t=this.resultsEl)==null||t.empty()}renderChildren(){if(this.removeChildren(),this.filterMode)for(let t of this.filteredChildren)this.addChild(t);else for(let t of this.children)this.addChild(t)}removeChildren(){for(let t of this.children)this.removeChild(t)}toggleVisible(){this.setCollapsed(!this.setting.collapsed)}setCollapsed(t){var a;this.setting.collapsed=t,(a=this.settingEl)==null||a.settingEl.toggleClass(\"is-collapsed\",t),t?this.removeChildren():this.renderChildren()}addResetButton(){let{resetFn:t}=this.setting;t&&this.settingEl.addExtraButton(a=>{a.setIcon(\"reset\").setTooltip(\"Reset all settings to default\").onClick(t)})}addExportButton(){this.settingEl.addExtraButton(t=>{t.setIcon(\"install\"),t.setTooltip(\"Export settings\"),t.extraSettingsEl.onClickEvent(a=>{a.stopPropagation();let i=ve(this.setting);i=this.sectionName===i?i:`${this.sectionName} > ${i}`,this.settingsManager.export(i,this.settingsManager.getSettings(this.sectionId,this.getAllChildrenIds()))})})}addSettingChild(t){let a=hl(this,this.sectionId,this.sectionName,t,this.settingsManager,this.isView);if(a)return this.children.push(a),a}getAllChildrenIds(){let t=[];for(let a of this.children)t.push(a.setting.id),a.setting.type===\"heading\"&&t.push(...a.getAllChildrenIds());return t}};var wt=require(\"obsidian\"),xt=class extends wt.Component{constructor(t,a,i,l){super();this.settingsComponentTrees=[];this.filterString=\"\";this.settings=[];this.errorList=[];this.app=t,this.plugin=a,this.containerEl=i,this.isView=!!l}onload(){this.display()}onunload(){this.settingsComponentTrees=[]}display(){this.generate(this.settings)}removeChildren(){for(let t of this.settingsComponentTrees)this.removeChild(t)}cleanup(){var t;this.removeChildren(),(t=this.settingsContainerEl)==null||t.empty()}setSettings(t,a){this.settings=t,this.errorList=a,this.containerEl.parentNode&&this.generate(t)}displayErrors(){let{containerEl:t,errorList:a}=this;a.forEach(i=>{t.createDiv({cls:\"style-settings-error\"},l=>{l.createDiv({cls:\"style-settings-error-name\",text:`Error: ${i.name}`}),l.createDiv({cls:\"style-settings-error-desc\",text:i.error})})})}displayEmpty(){let{containerEl:t}=this;t.createDiv({cls:\"style-settings-empty\"},a=>{a.createDiv({cls:\"style-settings-empty-name\",text:\"No style settings found\"}),a.createDiv({cls:\"style-settings-empty-desc\"}).appendChild(createFragment(i=>{i.appendText(\"Style settings configured by theme and plugin authors will show up here. You can also create your own configuration by creating a CSS snippet in your vault. \"),i.createEl(\"a\",{text:\"Click here for details and examples.\",href:\"https://github.com/mgmeyers/obsidian-style-settings#obsidian-style-settings-plugin\"})}))})}generate(t){var l;let{containerEl:a,plugin:i}=this;if(a.empty(),this.cleanup(),this.displayErrors(),t.length===0)return this.displayEmpty();new wt.Setting(a).then(c=>{c.controlEl.createEl(\"a\",{cls:\"style-settings-import\",text:\"Import\",href:\"#\"},f=>{f.addEventListener(\"click\",p=>{p.preventDefault(),this.plugin.settingsManager.import()})}),c.controlEl.createEl(\"a\",{cls:\"style-settings-export\",text:\"Export\",href:\"#\"},f=>{f.addEventListener(\"click\",p=>{p.preventDefault(),this.plugin.settingsManager.export(\"All settings\",this.plugin.settingsManager.settings)})}),c.addSearch(f=>{f.setValue(this.filterString),f.onChange((0,wt.debounce)(p=>{this.filterString=p,p?this.filter():this.clearFilter()},250,!0)),f.setPlaceholder(\"Search Style Settings...\"),c.controlEl.lastChild&&c.nameEl.appendChild(c.controlEl.lastChild)})}),this.settingsContainerEl=a.createDiv(),this.settingsComponentTrees=[];for(let c of t){let f=[{id:c.id,type:\"heading\",title:c.name,level:0,collapsed:(l=c.collapsed)!=null?l:!0,resetFn:()=>{i.settingsManager.clearSection(c.id),this.rerender()}},...c.settings];try{let p=Ni({containerEl:this.settingsContainerEl,isView:this.isView,sectionId:c.id,sectionName:c.name,settings:f,settingsManager:i.settingsManager});this.addChild(p),this.settingsComponentTrees.push(p)}catch(p){console.error(\"Style Settings | Failed to render section\",p)}}}filter(){for(let t of this.settingsComponentTrees)t.filter(this.filterString)}clearFilter(){for(let t of this.settingsComponentTrees)t.clearFilter()}rerender(){this.cleanup(),this.display()}};var Oi=require(\"obsidian\"),mr=class extends Oi.PluginSettingTab{constructor(t,a){super(t,a);this.plugin=a}rerender(){var t;(t=this.settingsMarkup)==null||t.rerender()}setSettings(t,a){this.settings=t,this.errorList=a,this.settingsMarkup&&this.settingsMarkup.setSettings(t,a)}display(){this.settingsMarkup=this.plugin.addChild(new xt(this.app,this.plugin,this.containerEl)),this.settings&&this.settingsMarkup.setSettings(this.settings,this.errorList)}hide(){this.settingsMarkup&&this.plugin.removeChild(this.settingsMarkup),this.settingsMarkup=null}};var Di=require(\"obsidian\"),at=\"style-settings\",br=class extends Di.ItemView{constructor(t,a){super(a);this.plugin=t}rerender(){var t;(t=this.settingsMarkup)==null||t.rerender()}setSettings(t,a){this.settings=t,this.errorList=a,this.settingsMarkup&&this.settingsMarkup.setSettings(t,a)}onload(){this.settingsMarkup=this.addChild(new xt(this.plugin.app,this.plugin,this.contentEl,!0)),this.settings&&this.settingsMarkup.setSettings(this.settings,this.errorList)}onunload(){this.settingsMarkup=null}getViewType(){return at}getIcon(){return\"gear\"}getDisplayText(){return\"Style Settings\"}};var dl=/^(?:( )+|\\t+)/,Rt=\"space\",$i=\"tab\";function Ri(e,n){let t=new Map,a=0,i,l;for(let c of e.split(/\\n/g)){if(!c)continue;let f,p,w,S,E=c.match(dl);if(E===null)a=0,i=\"\";else{if(f=E[0].length,p=E[1]?Rt:$i,n&&p===Rt&&f===1)continue;p!==i&&(a=0),i=p,w=0;let B=f-a;if(a=f,B===0)w++;else{let Y=B>0?B:-B;l=vl(p,Y)}S=t.get(l),S=S===void 0?[1,0]:[++S[0],S[1]+w],t.set(l,S)}}return t}function vl(e,n){return(e===Rt?\"s\":\"t\")+String(n)}function ml(e){let t=e[0]===\"s\"?Rt:$i,a=Number(e.slice(1));return{type:t,amount:a}}function bl(e){let n,t=0,a=0;for(let[i,[l,c]]of e)(l>t||l===t&&c>a)&&(t=l,a=c,n=i);return n}function yl(e,n){return(e===Rt?\" \":\"\t\").repeat(n)}function fn(e){if(typeof e!=\"string\")throw new TypeError(\"Expected a string\");let n=Ri(e,!0);n.size===0&&(n=Ri(e,!1));let t=bl(n),a,i=0,l=\"\";return t!==void 0&&({type:a,amount:i}=ml(t),l=yl(a,i)),{amount:i,type:a,indent:l}}function Ji(e){return typeof e==\"undefined\"||e===null}function Sl(e){return typeof e==\"object\"&&e!==null}function Cl(e){return Array.isArray(e)?e:Ji(e)?[]:[e]}function xl(e,n){var t,a,i,l;if(n)for(l=Object.keys(n),t=0,a=l.length;t<a;t+=1)i=l[t],e[i]=n[i];return e}function wl(e,n){var t=\"\",a;for(a=0;a<n;a+=1)t+=e;return t}function El(e){return e===0&&Number.NEGATIVE_INFINITY===1/e}var _l=Ji,Al=Sl,kl=Cl,Tl=wl,Ll=El,Ml=xl,Ae={isNothing:_l,isObject:Al,toArray:kl,repeat:Tl,isNegativeZero:Ll,extend:Ml};function ea(e,n){var t=\"\",a=e.reason||\"(unknown reason)\";return e.mark?(e.mark.name&&(t+='in \"'+e.mark.name+'\" '),t+=\"(\"+(e.mark.line+1)+\":\"+(e.mark.column+1)+\")\",!n&&e.mark.snippet&&(t+=`\n\n`+e.mark.snippet),a+\" \"+t):a}function Pt(e,n){Error.call(this),this.name=\"YAMLException\",this.reason=e,this.mark=n,this.message=ea(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Pt.prototype=Object.create(Error.prototype);Pt.prototype.constructor=Pt;Pt.prototype.toString=function(n){return this.name+\": \"+ea(this,n)};var $e=Pt;function gn(e,n,t,a,i){var l=\"\",c=\"\",f=Math.floor(i/2)-1;return a-n>f&&(l=\" ... \",n=a-f+l.length),t-a>f&&(c=\" ...\",t=a+f-c.length),{str:l+e.slice(n,t).replace(/\\t/g,\"\\u2192\")+c,pos:a-n+l.length}}function pn(e,n){return Ae.repeat(\" \",n-e.length)+e}function Il(e,n){if(n=Object.create(n||null),!e.buffer)return null;n.maxLength||(n.maxLength=79),typeof n.indent!=\"number\"&&(n.indent=1),typeof n.linesBefore!=\"number\"&&(n.linesBefore=3),typeof n.linesAfter!=\"number\"&&(n.linesAfter=2);for(var t=/\\r?\\n|\\r|\\0/g,a=[0],i=[],l,c=-1;l=t.exec(e.buffer);)i.push(l.index),a.push(l.index+l[0].length),e.position<=l.index&&c<0&&(c=a.length-2);c<0&&(c=a.length-1);var f=\"\",p,w,S=Math.min(e.line+n.linesAfter,i.length).toString().length,E=n.maxLength-(n.indent+S+3);for(p=1;p<=n.linesBefore&&!(c-p<0);p++)w=gn(e.buffer,a[c-p],i[c-p],e.position-(a[c]-a[c-p]),E),f=Ae.repeat(\" \",n.indent)+pn((e.line-p+1).toString(),S)+\" | \"+w.str+`\n`+f;for(w=gn(e.buffer,a[c],i[c],e.position,E),f+=Ae.repeat(\" \",n.indent)+pn((e.line+1).toString(),S)+\" | \"+w.str+`\n`,f+=Ae.repeat(\"-\",n.indent+S+3+w.pos)+`^\n`,p=1;p<=n.linesAfter&&!(c+p>=i.length);p++)w=gn(e.buffer,a[c+p],i[c+p],e.position-(a[c]-a[c+p]),E),f+=Ae.repeat(\" \",n.indent)+pn((e.line+p+1).toString(),S)+\" | \"+w.str+`\n`;return f.replace(/\\n$/,\"\")}var Fl=Il,Nl=[\"kind\",\"multi\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"representName\",\"defaultStyle\",\"styleAliases\"],Ol=[\"scalar\",\"sequence\",\"mapping\"];function Dl(e){var n={};return e!==null&&Object.keys(e).forEach(function(t){e[t].forEach(function(a){n[String(a)]=t})}),n}function Rl(e,n){if(n=n||{},Object.keys(n).forEach(function(t){if(Nl.indexOf(t)===-1)throw new $e('Unknown option \"'+t+'\" is met in definition of \"'+e+'\" YAML type.')}),this.options=n,this.tag=e,this.kind=n.kind||null,this.resolve=n.resolve||function(){return!0},this.construct=n.construct||function(t){return t},this.instanceOf=n.instanceOf||null,this.predicate=n.predicate||null,this.represent=n.represent||null,this.representName=n.representName||null,this.defaultStyle=n.defaultStyle||null,this.multi=n.multi||!1,this.styleAliases=Dl(n.styleAliases||null),Ol.indexOf(this.kind)===-1)throw new $e('Unknown kind \"'+this.kind+'\" is specified for \"'+e+'\" YAML type.')}var Ne=Rl;function Pi(e,n){var t=[];return e[n].forEach(function(a){var i=t.length;t.forEach(function(l,c){l.tag===a.tag&&l.kind===a.kind&&l.multi===a.multi&&(i=c)}),t[i]=a}),t}function $l(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},n,t;function a(i){i.multi?(e.multi[i.kind].push(i),e.multi.fallback.push(i)):e[i.kind][i.tag]=e.fallback[i.tag]=i}for(n=0,t=arguments.length;n<t;n+=1)arguments[n].forEach(a);return e}function dn(e){return this.extend(e)}dn.prototype.extend=function(n){var t=[],a=[];if(n instanceof Ne)a.push(n);else if(Array.isArray(n))a=a.concat(n);else if(n&&(Array.isArray(n.implicit)||Array.isArray(n.explicit)))n.implicit&&(t=t.concat(n.implicit)),n.explicit&&(a=a.concat(n.explicit));else throw new $e(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");t.forEach(function(l){if(!(l instanceof Ne))throw new $e(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");if(l.loadKind&&l.loadKind!==\"scalar\")throw new $e(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");if(l.multi)throw new $e(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\")}),a.forEach(function(l){if(!(l instanceof Ne))throw new $e(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\")});var i=Object.create(dn.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(a),i.compiledImplicit=Pi(i,\"implicit\"),i.compiledExplicit=Pi(i,\"explicit\"),i.compiledTypeMap=$l(i.compiledImplicit,i.compiledExplicit),i};var ta=dn,ra=new Ne(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(e){return e!==null?e:\"\"}}),na=new Ne(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(e){return e!==null?e:[]}}),ia=new Ne(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(e){return e!==null?e:{}}}),aa=new ta({explicit:[ra,na,ia]});function Pl(e){if(e===null)return!0;var n=e.length;return n===1&&e===\"~\"||n===4&&(e===\"null\"||e===\"Null\"||e===\"NULL\")}function Vl(){return null}function Bl(e){return e===null}var sa=new Ne(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:Pl,construct:Vl,predicate:Bl,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"},empty:function(){return\"\"}},defaultStyle:\"lowercase\"});function Hl(e){if(e===null)return!1;var n=e.length;return n===4&&(e===\"true\"||e===\"True\"||e===\"TRUE\")||n===5&&(e===\"false\"||e===\"False\"||e===\"FALSE\")}function jl(e){return e===\"true\"||e===\"True\"||e===\"TRUE\"}function Gl(e){return Object.prototype.toString.call(e)===\"[object Boolean]\"}var oa=new Ne(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:Hl,construct:jl,predicate:Gl,represent:{lowercase:function(e){return e?\"true\":\"false\"},uppercase:function(e){return e?\"TRUE\":\"FALSE\"},camelcase:function(e){return e?\"True\":\"False\"}},defaultStyle:\"lowercase\"});function Yl(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function Ul(e){return 48<=e&&e<=55}function Wl(e){return 48<=e&&e<=57}function ql(e){if(e===null)return!1;var n=e.length,t=0,a=!1,i;if(!n)return!1;if(i=e[t],(i===\"-\"||i===\"+\")&&(i=e[++t]),i===\"0\"){if(t+1===n)return!0;if(i=e[++t],i===\"b\"){for(t++;t<n;t++)if(i=e[t],i!==\"_\"){if(i!==\"0\"&&i!==\"1\")return!1;a=!0}return a&&i!==\"_\"}if(i===\"x\"){for(t++;t<n;t++)if(i=e[t],i!==\"_\"){if(!Yl(e.charCodeAt(t)))return!1;a=!0}return a&&i!==\"_\"}if(i===\"o\"){for(t++;t<n;t++)if(i=e[t],i!==\"_\"){if(!Ul(e.charCodeAt(t)))return!1;a=!0}return a&&i!==\"_\"}}if(i===\"_\")return!1;for(;t<n;t++)if(i=e[t],i!==\"_\"){if(!Wl(e.charCodeAt(t)))return!1;a=!0}return!(!a||i===\"_\")}function zl(e){var n=e,t=1,a;if(n.indexOf(\"_\")!==-1&&(n=n.replace(/_/g,\"\")),a=n[0],(a===\"-\"||a===\"+\")&&(a===\"-\"&&(t=-1),n=n.slice(1),a=n[0]),n===\"0\")return 0;if(a===\"0\"){if(n[1]===\"b\")return t*parseInt(n.slice(2),2);if(n[1]===\"x\")return t*parseInt(n.slice(2),16);if(n[1]===\"o\")return t*parseInt(n.slice(2),8)}return t*parseInt(n,10)}function Kl(e){return Object.prototype.toString.call(e)===\"[object Number]\"&&e%1===0&&!Ae.isNegativeZero(e)}var la=new Ne(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ql,construct:zl,predicate:Kl,represent:{binary:function(e){return e>=0?\"0b\"+e.toString(2):\"-0b\"+e.toString(2).slice(1)},octal:function(e){return e>=0?\"0o\"+e.toString(8):\"-0o\"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?\"0x\"+e.toString(16).toUpperCase():\"-0x\"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}}),Xl=new RegExp(\"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function Ql(e){return!(e===null||!Xl.test(e)||e[e.length-1]===\"_\")}function Zl(e){var n,t;return n=e.replace(/_/g,\"\").toLowerCase(),t=n[0]===\"-\"?-1:1,\"+-\".indexOf(n[0])>=0&&(n=n.slice(1)),n===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:n===\".nan\"?NaN:t*parseFloat(n,10)}var Jl=/^[-+]?[0-9]+e/;function ec(e,n){var t;if(isNaN(e))switch(n){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===e)switch(n){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===e)switch(n){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(Ae.isNegativeZero(e))return\"-0.0\";return t=e.toString(10),Jl.test(t)?t.replace(\"e\",\".e\"):t}function tc(e){return Object.prototype.toString.call(e)===\"[object Number]\"&&(e%1!==0||Ae.isNegativeZero(e))}var ca=new Ne(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:Ql,construct:Zl,predicate:tc,represent:ec,defaultStyle:\"lowercase\"}),ua=aa.extend({implicit:[sa,oa,la,ca]}),fa=ua,ga=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),pa=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function rc(e){return e===null?!1:ga.exec(e)!==null||pa.exec(e)!==null}function nc(e){var n,t,a,i,l,c,f,p=0,w=null,S,E,B;if(n=ga.exec(e),n===null&&(n=pa.exec(e)),n===null)throw new Error(\"Date resolve error\");if(t=+n[1],a=+n[2]-1,i=+n[3],!n[4])return new Date(Date.UTC(t,a,i));if(l=+n[4],c=+n[5],f=+n[6],n[7]){for(p=n[7].slice(0,3);p.length<3;)p+=\"0\";p=+p}return n[9]&&(S=+n[10],E=+(n[11]||0),w=(S*60+E)*6e4,n[9]===\"-\"&&(w=-w)),B=new Date(Date.UTC(t,a,i,l,c,f,p)),w&&B.setTime(B.getTime()-w),B}function ic(e){return e.toISOString()}var ha=new Ne(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:rc,construct:nc,instanceOf:Date,represent:ic});function ac(e){return e===\"<<\"||e===null}var da=new Ne(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:ac}),Sn=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function sc(e){if(e===null)return!1;var n,t,a=0,i=e.length,l=Sn;for(t=0;t<i;t++)if(n=l.indexOf(e.charAt(t)),!(n>64)){if(n<0)return!1;a+=6}return a%8===0}function oc(e){var n,t,a=e.replace(/[\\r\\n=]/g,\"\"),i=a.length,l=Sn,c=0,f=[];for(n=0;n<i;n++)n%4===0&&n&&(f.push(c>>16&255),f.push(c>>8&255),f.push(c&255)),c=c<<6|l.indexOf(a.charAt(n));return t=i%4*6,t===0?(f.push(c>>16&255),f.push(c>>8&255),f.push(c&255)):t===18?(f.push(c>>10&255),f.push(c>>2&255)):t===12&&f.push(c>>4&255),new Uint8Array(f)}function lc(e){var n=\"\",t=0,a,i,l=e.length,c=Sn;for(a=0;a<l;a++)a%3===0&&a&&(n+=c[t>>18&63],n+=c[t>>12&63],n+=c[t>>6&63],n+=c[t&63]),t=(t<<8)+e[a];return i=l%3,i===0?(n+=c[t>>18&63],n+=c[t>>12&63],n+=c[t>>6&63],n+=c[t&63]):i===2?(n+=c[t>>10&63],n+=c[t>>4&63],n+=c[t<<2&63],n+=c[64]):i===1&&(n+=c[t>>2&63],n+=c[t<<4&63],n+=c[64],n+=c[64]),n}function cc(e){return Object.prototype.toString.call(e)===\"[object Uint8Array]\"}var va=new Ne(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:sc,construct:oc,predicate:cc,represent:lc}),uc=Object.prototype.hasOwnProperty,fc=Object.prototype.toString;function gc(e){if(e===null)return!0;var n=[],t,a,i,l,c,f=e;for(t=0,a=f.length;t<a;t+=1){if(i=f[t],c=!1,fc.call(i)!==\"[object Object]\")return!1;for(l in i)if(uc.call(i,l))if(!c)c=!0;else return!1;if(!c)return!1;if(n.indexOf(l)===-1)n.push(l);else return!1}return!0}function pc(e){return e!==null?e:[]}var ma=new Ne(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:gc,construct:pc}),hc=Object.prototype.toString;function dc(e){if(e===null)return!0;var n,t,a,i,l,c=e;for(l=new Array(c.length),n=0,t=c.length;n<t;n+=1){if(a=c[n],hc.call(a)!==\"[object Object]\"||(i=Object.keys(a),i.length!==1))return!1;l[n]=[i[0],a[i[0]]]}return!0}function vc(e){if(e===null)return[];var n,t,a,i,l,c=e;for(l=new Array(c.length),n=0,t=c.length;n<t;n+=1)a=c[n],i=Object.keys(a),l[n]=[i[0],a[i[0]]];return l}var ba=new Ne(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:dc,construct:vc}),mc=Object.prototype.hasOwnProperty;function bc(e){if(e===null)return!0;var n,t=e;for(n in t)if(mc.call(t,n)&&t[n]!==null)return!1;return!0}function yc(e){return e!==null?e:{}}var ya=new Ne(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:bc,construct:yc}),Cn=fa.extend({implicit:[ha,da],explicit:[va,ma,ba,ya]}),ot=Object.prototype.hasOwnProperty,yr=1,Sa=2,Ca=3,Sr=4,hn=1,Sc=2,Vi=3,Cc=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,xc=/[\\x85\\u2028\\u2029]/,wc=/[,\\[\\]\\{\\}]/,xa=/^(?:!|!!|![a-z\\-]+!)$/i,wa=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function Bi(e){return Object.prototype.toString.call(e)}function Xe(e){return e===10||e===13}function ft(e){return e===9||e===32}function Ge(e){return e===9||e===32||e===10||e===13}function _t(e){return e===44||e===91||e===93||e===123||e===125}function Ec(e){var n;return 48<=e&&e<=57?e-48:(n=e|32,97<=n&&n<=102?n-97+10:-1)}function _c(e){return e===120?2:e===117?4:e===85?8:0}function Ac(e){return 48<=e&&e<=57?e-48:-1}function Hi(e){return e===48?\"\\0\":e===97?\"\\x07\":e===98?\"\\b\":e===116||e===9?\"\t\":e===110?`\n`:e===118?\"\\v\":e===102?\"\\f\":e===114?\"\\r\":e===101?\"\\x1B\":e===32?\" \":e===34?'\"':e===47?\"/\":e===92?\"\\\\\":e===78?\"\\x85\":e===95?\"\\xA0\":e===76?\"\\u2028\":e===80?\"\\u2029\":\"\"}function kc(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}var Ea=new Array(256),_a=new Array(256);for(ut=0;ut<256;ut++)Ea[ut]=Hi(ut)?1:0,_a[ut]=Hi(ut);var ut;function Tc(e,n){this.input=e,this.filename=n.filename||null,this.schema=n.schema||Cn,this.onWarning=n.onWarning||null,this.legacy=n.legacy||!1,this.json=n.json||!1,this.listener=n.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Aa(e,n){var t={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return t.snippet=Fl(t),new $e(n,t)}function W(e,n){throw Aa(e,n)}function Cr(e,n){e.onWarning&&e.onWarning.call(null,Aa(e,n))}var ji={YAML:function(n,t,a){var i,l,c;n.version!==null&&W(n,\"duplication of %YAML directive\"),a.length!==1&&W(n,\"YAML directive accepts exactly one argument\"),i=/^([0-9]+)\\.([0-9]+)$/.exec(a[0]),i===null&&W(n,\"ill-formed argument of the YAML directive\"),l=parseInt(i[1],10),c=parseInt(i[2],10),l!==1&&W(n,\"unacceptable YAML version of the document\"),n.version=a[0],n.checkLineBreaks=c<2,c!==1&&c!==2&&Cr(n,\"unsupported YAML version of the document\")},TAG:function(n,t,a){var i,l;a.length!==2&&W(n,\"TAG directive accepts exactly two arguments\"),i=a[0],l=a[1],xa.test(i)||W(n,\"ill-formed tag handle (first argument) of the TAG directive\"),ot.call(n.tagMap,i)&&W(n,'there is a previously declared suffix for \"'+i+'\" tag handle'),wa.test(l)||W(n,\"ill-formed tag prefix (second argument) of the TAG directive\");try{l=decodeURIComponent(l)}catch(c){W(n,\"tag prefix is malformed: \"+l)}n.tagMap[i]=l}};function st(e,n,t,a){var i,l,c,f;if(n<t){if(f=e.input.slice(n,t),a)for(i=0,l=f.length;i<l;i+=1)c=f.charCodeAt(i),c===9||32<=c&&c<=1114111||W(e,\"expected valid JSON character\");else Cc.test(f)&&W(e,\"the stream contains non-printable characters\");e.result+=f}}function Gi(e,n,t,a){var i,l,c,f;for(Ae.isObject(t)||W(e,\"cannot merge mappings; the provided source object is unacceptable\"),i=Object.keys(t),c=0,f=i.length;c<f;c+=1)l=i[c],ot.call(n,l)||(n[l]=t[l],a[l]=!0)}function At(e,n,t,a,i,l,c,f,p){var w,S;if(Array.isArray(i))for(i=Array.prototype.slice.call(i),w=0,S=i.length;w<S;w+=1)Array.isArray(i[w])&&W(e,\"nested arrays are not supported inside keys\"),typeof i==\"object\"&&Bi(i[w])===\"[object Object]\"&&(i[w]=\"[object Object]\");if(typeof i==\"object\"&&Bi(i)===\"[object Object]\"&&(i=\"[object Object]\"),i=String(i),n===null&&(n={}),a===\"tag:yaml.org,2002:merge\")if(Array.isArray(l))for(w=0,S=l.length;w<S;w+=1)Gi(e,n,l[w],t);else Gi(e,n,l,t);else!e.json&&!ot.call(t,i)&&ot.call(n,i)&&(e.line=c||e.line,e.lineStart=f||e.lineStart,e.position=p||e.position,W(e,\"duplicated mapping key\")),i===\"__proto__\"?Object.defineProperty(n,i,{configurable:!0,enumerable:!0,writable:!0,value:l}):n[i]=l,delete t[i];return n}function xn(e){var n;n=e.input.charCodeAt(e.position),n===10?e.position++:n===13?(e.position++,e.input.charCodeAt(e.position)===10&&e.position++):W(e,\"a line break is expected\"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function Ee(e,n,t){for(var a=0,i=e.input.charCodeAt(e.position);i!==0;){for(;ft(i);)i===9&&e.firstTabInLine===-1&&(e.firstTabInLine=e.position),i=e.input.charCodeAt(++e.position);if(n&&i===35)do i=e.input.charCodeAt(++e.position);while(i!==10&&i!==13&&i!==0);if(Xe(i))for(xn(e),i=e.input.charCodeAt(e.position),a++,e.lineIndent=0;i===32;)e.lineIndent++,i=e.input.charCodeAt(++e.position);else break}return t!==-1&&a!==0&&e.lineIndent<t&&Cr(e,\"deficient indentation\"),a}function Er(e){var n=e.position,t;return t=e.input.charCodeAt(n),!!((t===45||t===46)&&t===e.input.charCodeAt(n+1)&&t===e.input.charCodeAt(n+2)&&(n+=3,t=e.input.charCodeAt(n),t===0||Ge(t)))}function wn(e,n){n===1?e.result+=\" \":n>1&&(e.result+=Ae.repeat(`\n`,n-1))}function Lc(e,n,t){var a,i,l,c,f,p,w,S,E=e.kind,B=e.result,Y;if(Y=e.input.charCodeAt(e.position),Ge(Y)||_t(Y)||Y===35||Y===38||Y===42||Y===33||Y===124||Y===62||Y===39||Y===34||Y===37||Y===64||Y===96||(Y===63||Y===45)&&(i=e.input.charCodeAt(e.position+1),Ge(i)||t&&_t(i)))return!1;for(e.kind=\"scalar\",e.result=\"\",l=c=e.position,f=!1;Y!==0;){if(Y===58){if(i=e.input.charCodeAt(e.position+1),Ge(i)||t&&_t(i))break}else if(Y===35){if(a=e.input.charCodeAt(e.position-1),Ge(a))break}else{if(e.position===e.lineStart&&Er(e)||t&&_t(Y))break;if(Xe(Y))if(p=e.line,w=e.lineStart,S=e.lineIndent,Ee(e,!1,-1),e.lineIndent>=n){f=!0,Y=e.input.charCodeAt(e.position);continue}else{e.position=c,e.line=p,e.lineStart=w,e.lineIndent=S;break}}f&&(st(e,l,c,!1),wn(e,e.line-p),l=c=e.position,f=!1),ft(Y)||(c=e.position+1),Y=e.input.charCodeAt(++e.position)}return st(e,l,c,!1),e.result?!0:(e.kind=E,e.result=B,!1)}function Mc(e,n){var t,a,i;if(t=e.input.charCodeAt(e.position),t!==39)return!1;for(e.kind=\"scalar\",e.result=\"\",e.position++,a=i=e.position;(t=e.input.charCodeAt(e.position))!==0;)if(t===39)if(st(e,a,e.position,!0),t=e.input.charCodeAt(++e.position),t===39)a=e.position,e.position++,i=e.position;else return!0;else Xe(t)?(st(e,a,i,!0),wn(e,Ee(e,!1,n)),a=i=e.position):e.position===e.lineStart&&Er(e)?W(e,\"unexpected end of the document within a single quoted scalar\"):(e.position++,i=e.position);W(e,\"unexpected end of the stream within a single quoted scalar\")}function Ic(e,n){var t,a,i,l,c,f;if(f=e.input.charCodeAt(e.position),f!==34)return!1;for(e.kind=\"scalar\",e.result=\"\",e.position++,t=a=e.position;(f=e.input.charCodeAt(e.position))!==0;){if(f===34)return st(e,t,e.position,!0),e.position++,!0;if(f===92){if(st(e,t,e.position,!0),f=e.input.charCodeAt(++e.position),Xe(f))Ee(e,!1,n);else if(f<256&&Ea[f])e.result+=_a[f],e.position++;else if((c=_c(f))>0){for(i=c,l=0;i>0;i--)f=e.input.charCodeAt(++e.position),(c=Ec(f))>=0?l=(l<<4)+c:W(e,\"expected hexadecimal character\");e.result+=kc(l),e.position++}else W(e,\"unknown escape sequence\");t=a=e.position}else Xe(f)?(st(e,t,a,!0),wn(e,Ee(e,!1,n)),t=a=e.position):e.position===e.lineStart&&Er(e)?W(e,\"unexpected end of the document within a double quoted scalar\"):(e.position++,a=e.position)}W(e,\"unexpected end of the stream within a double quoted scalar\")}function Fc(e,n){var t=!0,a,i,l,c=e.tag,f,p=e.anchor,w,S,E,B,Y,K=Object.create(null),Q,L,re,F;if(F=e.input.charCodeAt(e.position),F===91)S=93,Y=!1,f=[];else if(F===123)S=125,Y=!0,f={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=f),F=e.input.charCodeAt(++e.position);F!==0;){if(Ee(e,!0,n),F=e.input.charCodeAt(e.position),F===S)return e.position++,e.tag=c,e.anchor=p,e.kind=Y?\"mapping\":\"sequence\",e.result=f,!0;t?F===44&&W(e,\"expected the node content, but found ','\"):W(e,\"missed comma between flow collection entries\"),L=Q=re=null,E=B=!1,F===63&&(w=e.input.charCodeAt(e.position+1),Ge(w)&&(E=B=!0,e.position++,Ee(e,!0,n))),a=e.line,i=e.lineStart,l=e.position,kt(e,n,yr,!1,!0),L=e.tag,Q=e.result,Ee(e,!0,n),F=e.input.charCodeAt(e.position),(B||e.line===a)&&F===58&&(E=!0,F=e.input.charCodeAt(++e.position),Ee(e,!0,n),kt(e,n,yr,!1,!0),re=e.result),Y?At(e,f,K,L,Q,re,a,i,l):E?f.push(At(e,null,K,L,Q,re,a,i,l)):f.push(Q),Ee(e,!0,n),F=e.input.charCodeAt(e.position),F===44?(t=!0,F=e.input.charCodeAt(++e.position)):t=!1}W(e,\"unexpected end of the stream within a flow collection\")}function Nc(e,n){var t,a,i=hn,l=!1,c=!1,f=n,p=0,w=!1,S,E;if(E=e.input.charCodeAt(e.position),E===124)a=!1;else if(E===62)a=!0;else return!1;for(e.kind=\"scalar\",e.result=\"\";E!==0;)if(E=e.input.charCodeAt(++e.position),E===43||E===45)hn===i?i=E===43?Vi:Sc:W(e,\"repeat of a chomping mode identifier\");else if((S=Ac(E))>=0)S===0?W(e,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):c?W(e,\"repeat of an indentation width identifier\"):(f=n+S-1,c=!0);else break;if(ft(E)){do E=e.input.charCodeAt(++e.position);while(ft(E));if(E===35)do E=e.input.charCodeAt(++e.position);while(!Xe(E)&&E!==0)}for(;E!==0;){for(xn(e),e.lineIndent=0,E=e.input.charCodeAt(e.position);(!c||e.lineIndent<f)&&E===32;)e.lineIndent++,E=e.input.charCodeAt(++e.position);if(!c&&e.lineIndent>f&&(f=e.lineIndent),Xe(E)){p++;continue}if(e.lineIndent<f){i===Vi?e.result+=Ae.repeat(`\n`,l?1+p:p):i===hn&&l&&(e.result+=`\n`);break}for(a?ft(E)?(w=!0,e.result+=Ae.repeat(`\n`,l?1+p:p)):w?(w=!1,e.result+=Ae.repeat(`\n`,p+1)):p===0?l&&(e.result+=\" \"):e.result+=Ae.repeat(`\n`,p):e.result+=Ae.repeat(`\n`,l?1+p:p),l=!0,c=!0,p=0,t=e.position;!Xe(E)&&E!==0;)E=e.input.charCodeAt(++e.position);st(e,t,e.position,!1)}return!0}function Yi(e,n){var t,a=e.tag,i=e.anchor,l=[],c,f=!1,p;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=l),p=e.input.charCodeAt(e.position);p!==0&&(e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,W(e,\"tab characters must not be used in indentation\")),!(p!==45||(c=e.input.charCodeAt(e.position+1),!Ge(c))));){if(f=!0,e.position++,Ee(e,!0,-1)&&e.lineIndent<=n){l.push(null),p=e.input.charCodeAt(e.position);continue}if(t=e.line,kt(e,n,Ca,!1,!0),l.push(e.result),Ee(e,!0,-1),p=e.input.charCodeAt(e.position),(e.line===t||e.lineIndent>n)&&p!==0)W(e,\"bad indentation of a sequence entry\");else if(e.lineIndent<n)break}return f?(e.tag=a,e.anchor=i,e.kind=\"sequence\",e.result=l,!0):!1}function Oc(e,n,t){var a,i,l,c,f,p,w=e.tag,S=e.anchor,E={},B=Object.create(null),Y=null,K=null,Q=null,L=!1,re=!1,F;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=E),F=e.input.charCodeAt(e.position);F!==0;){if(!L&&e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,W(e,\"tab characters must not be used in indentation\")),a=e.input.charCodeAt(e.position+1),l=e.line,(F===63||F===58)&&Ge(a))F===63?(L&&(At(e,E,B,Y,K,null,c,f,p),Y=K=Q=null),re=!0,L=!0,i=!0):L?(L=!1,i=!0):W(e,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),e.position+=1,F=a;else{if(c=e.line,f=e.lineStart,p=e.position,!kt(e,t,Sa,!1,!0))break;if(e.line===l){for(F=e.input.charCodeAt(e.position);ft(F);)F=e.input.charCodeAt(++e.position);if(F===58)F=e.input.charCodeAt(++e.position),Ge(F)||W(e,\"a whitespace character is expected after the key-value separator within a block mapping\"),L&&(At(e,E,B,Y,K,null,c,f,p),Y=K=Q=null),re=!0,L=!1,i=!1,Y=e.tag,K=e.result;else if(re)W(e,\"can not read an implicit mapping pair; a colon is missed\");else return e.tag=w,e.anchor=S,!0}else if(re)W(e,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return e.tag=w,e.anchor=S,!0}if((e.line===l||e.lineIndent>n)&&(L&&(c=e.line,f=e.lineStart,p=e.position),kt(e,n,Sr,!0,i)&&(L?K=e.result:Q=e.result),L||(At(e,E,B,Y,K,Q,c,f,p),Y=K=Q=null),Ee(e,!0,-1),F=e.input.charCodeAt(e.position)),(e.line===l||e.lineIndent>n)&&F!==0)W(e,\"bad indentation of a mapping entry\");else if(e.lineIndent<n)break}return L&&At(e,E,B,Y,K,null,c,f,p),re&&(e.tag=w,e.anchor=S,e.kind=\"mapping\",e.result=E),re}function Dc(e){var n,t=!1,a=!1,i,l,c;if(c=e.input.charCodeAt(e.position),c!==33)return!1;if(e.tag!==null&&W(e,\"duplication of a tag property\"),c=e.input.charCodeAt(++e.position),c===60?(t=!0,c=e.input.charCodeAt(++e.position)):c===33?(a=!0,i=\"!!\",c=e.input.charCodeAt(++e.position)):i=\"!\",n=e.position,t){do c=e.input.charCodeAt(++e.position);while(c!==0&&c!==62);e.position<e.length?(l=e.input.slice(n,e.position),c=e.input.charCodeAt(++e.position)):W(e,\"unexpected end of the stream within a verbatim tag\")}else{for(;c!==0&&!Ge(c);)c===33&&(a?W(e,\"tag suffix cannot contain exclamation marks\"):(i=e.input.slice(n-1,e.position+1),xa.test(i)||W(e,\"named tag handle cannot contain such characters\"),a=!0,n=e.position+1)),c=e.input.charCodeAt(++e.position);l=e.input.slice(n,e.position),wc.test(l)&&W(e,\"tag suffix cannot contain flow indicator characters\")}l&&!wa.test(l)&&W(e,\"tag name cannot contain such characters: \"+l);try{l=decodeURIComponent(l)}catch(f){W(e,\"tag name is malformed: \"+l)}return t?e.tag=l:ot.call(e.tagMap,i)?e.tag=e.tagMap[i]+l:i===\"!\"?e.tag=\"!\"+l:i===\"!!\"?e.tag=\"tag:yaml.org,2002:\"+l:W(e,'undeclared tag handle \"'+i+'\"'),!0}function Rc(e){var n,t;if(t=e.input.charCodeAt(e.position),t!==38)return!1;for(e.anchor!==null&&W(e,\"duplication of an anchor property\"),t=e.input.charCodeAt(++e.position),n=e.position;t!==0&&!Ge(t)&&!_t(t);)t=e.input.charCodeAt(++e.position);return e.position===n&&W(e,\"name of an anchor node must contain at least one character\"),e.anchor=e.input.slice(n,e.position),!0}function $c(e){var n,t,a;if(a=e.input.charCodeAt(e.position),a!==42)return!1;for(a=e.input.charCodeAt(++e.position),n=e.position;a!==0&&!Ge(a)&&!_t(a);)a=e.input.charCodeAt(++e.position);return e.position===n&&W(e,\"name of an alias node must contain at least one character\"),t=e.input.slice(n,e.position),ot.call(e.anchorMap,t)||W(e,'unidentified alias \"'+t+'\"'),e.result=e.anchorMap[t],Ee(e,!0,-1),!0}function kt(e,n,t,a,i){var l,c,f,p=1,w=!1,S=!1,E,B,Y,K,Q,L;if(e.listener!==null&&e.listener(\"open\",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,l=c=f=Sr===t||Ca===t,a&&Ee(e,!0,-1)&&(w=!0,e.lineIndent>n?p=1:e.lineIndent===n?p=0:e.lineIndent<n&&(p=-1)),p===1)for(;Dc(e)||Rc(e);)Ee(e,!0,-1)?(w=!0,f=l,e.lineIndent>n?p=1:e.lineIndent===n?p=0:e.lineIndent<n&&(p=-1)):f=!1;if(f&&(f=w||i),(p===1||Sr===t)&&(yr===t||Sa===t?Q=n:Q=n+1,L=e.position-e.lineStart,p===1?f&&(Yi(e,L)||Oc(e,L,Q))||Fc(e,Q)?S=!0:(c&&Nc(e,Q)||Mc(e,Q)||Ic(e,Q)?S=!0:$c(e)?(S=!0,(e.tag!==null||e.anchor!==null)&&W(e,\"alias node should not have any properties\")):Lc(e,Q,yr===t)&&(S=!0,e.tag===null&&(e.tag=\"?\")),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):p===0&&(S=f&&Yi(e,L))),e.tag===null)e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);else if(e.tag===\"?\"){for(e.result!==null&&e.kind!==\"scalar\"&&W(e,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+e.kind+'\"'),E=0,B=e.implicitTypes.length;E<B;E+=1)if(K=e.implicitTypes[E],K.resolve(e.result)){e.result=K.construct(e.result),e.tag=K.tag,e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);break}}else if(e.tag!==\"!\"){if(ot.call(e.typeMap[e.kind||\"fallback\"],e.tag))K=e.typeMap[e.kind||\"fallback\"][e.tag];else for(K=null,Y=e.typeMap.multi[e.kind||\"fallback\"],E=0,B=Y.length;E<B;E+=1)if(e.tag.slice(0,Y[E].tag.length)===Y[E].tag){K=Y[E];break}K||W(e,\"unknown tag !<\"+e.tag+\">\"),e.result!==null&&K.kind!==e.kind&&W(e,\"unacceptable node kind for !<\"+e.tag+'> tag; it should be \"'+K.kind+'\", not \"'+e.kind+'\"'),K.resolve(e.result,e.tag)?(e.result=K.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):W(e,\"cannot resolve a node with !<\"+e.tag+\"> explicit tag\")}return e.listener!==null&&e.listener(\"close\",e),e.tag!==null||e.anchor!==null||S}function Pc(e){var n=e.position,t,a,i,l=!1,c;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(c=e.input.charCodeAt(e.position))!==0&&(Ee(e,!0,-1),c=e.input.charCodeAt(e.position),!(e.lineIndent>0||c!==37));){for(l=!0,c=e.input.charCodeAt(++e.position),t=e.position;c!==0&&!Ge(c);)c=e.input.charCodeAt(++e.position);for(a=e.input.slice(t,e.position),i=[],a.length<1&&W(e,\"directive name must not be less than one character in length\");c!==0;){for(;ft(c);)c=e.input.charCodeAt(++e.position);if(c===35){do c=e.input.charCodeAt(++e.position);while(c!==0&&!Xe(c));break}if(Xe(c))break;for(t=e.position;c!==0&&!Ge(c);)c=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}c!==0&&xn(e),ot.call(ji,a)?ji[a](e,a,i):Cr(e,'unknown document directive \"'+a+'\"')}if(Ee(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,Ee(e,!0,-1)):l&&W(e,\"directives end mark is expected\"),kt(e,e.lineIndent-1,Sr,!1,!0),Ee(e,!0,-1),e.checkLineBreaks&&xc.test(e.input.slice(n,e.position))&&Cr(e,\"non-ASCII line breaks are interpreted as content\"),e.documents.push(e.result),e.position===e.lineStart&&Er(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,Ee(e,!0,-1));return}if(e.position<e.length-1)W(e,\"end of the stream or a document separator is expected\");else return}function ka(e,n){e=String(e),n=n||{},e.length!==0&&(e.charCodeAt(e.length-1)!==10&&e.charCodeAt(e.length-1)!==13&&(e+=`\n`),e.charCodeAt(0)===65279&&(e=e.slice(1)));var t=new Tc(e,n),a=e.indexOf(\"\\0\");for(a!==-1&&(t.position=a,W(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)Pc(t);return t.documents}function Vc(e,n,t){n!==null&&typeof n==\"object\"&&typeof t==\"undefined\"&&(t=n,n=null);var a=ka(e,t);if(typeof n!=\"function\")return a;for(var i=0,l=a.length;i<l;i+=1)n(a[i])}function Bc(e,n){var t=ka(e,n);if(t.length!==0){if(t.length===1)return t[0];throw new $e(\"expected a single document in the stream, but found more\")}}var Hc=Vc,jc=Bc,Ta={loadAll:Hc,load:jc},La=Object.prototype.toString,Ma=Object.prototype.hasOwnProperty,En=65279,Gc=9,Vt=10,Yc=13,Uc=32,Wc=33,qc=34,vn=35,zc=37,Kc=38,Xc=39,Qc=42,Ia=44,Zc=45,xr=58,Jc=61,eu=62,tu=63,ru=64,Fa=91,Na=93,nu=96,Oa=123,iu=124,Da=125,De={};De[0]=\"\\\\0\";De[7]=\"\\\\a\";De[8]=\"\\\\b\";De[9]=\"\\\\t\";De[10]=\"\\\\n\";De[11]=\"\\\\v\";De[12]=\"\\\\f\";De[13]=\"\\\\r\";De[27]=\"\\\\e\";De[34]='\\\\\"';De[92]=\"\\\\\\\\\";De[133]=\"\\\\N\";De[160]=\"\\\\_\";De[8232]=\"\\\\L\";De[8233]=\"\\\\P\";var au=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"],su=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;function ou(e,n){var t,a,i,l,c,f,p;if(n===null)return{};for(t={},a=Object.keys(n),i=0,l=a.length;i<l;i+=1)c=a[i],f=String(n[c]),c.slice(0,2)===\"!!\"&&(c=\"tag:yaml.org,2002:\"+c.slice(2)),p=e.compiledTypeMap.fallback[c],p&&Ma.call(p.styleAliases,f)&&(f=p.styleAliases[f]),t[c]=f;return t}function lu(e){var n,t,a;if(n=e.toString(16).toUpperCase(),e<=255)t=\"x\",a=2;else if(e<=65535)t=\"u\",a=4;else if(e<=4294967295)t=\"U\",a=8;else throw new $e(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+Ae.repeat(\"0\",a-n.length)+n}var cu=1,Bt=2;function uu(e){this.schema=e.schema||Cn,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=Ae.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=ou(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.condenseFlow=e.condenseFlow||!1,this.quotingType=e.quotingType==='\"'?Bt:cu,this.forceQuotes=e.forceQuotes||!1,this.replacer=typeof e.replacer==\"function\"?e.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function Ui(e,n){for(var t=Ae.repeat(\" \",n),a=0,i=-1,l=\"\",c,f=e.length;a<f;)i=e.indexOf(`\n`,a),i===-1?(c=e.slice(a),a=f):(c=e.slice(a,i+1),a=i+1),c.length&&c!==`\n`&&(l+=t),l+=c;return l}function mn(e,n){return`\n`+Ae.repeat(\" \",e.indent*n)}function fu(e,n){var t,a,i;for(t=0,a=e.implicitTypes.length;t<a;t+=1)if(i=e.implicitTypes[t],i.resolve(n))return!0;return!1}function wr(e){return e===Uc||e===Gc}function Ht(e){return 32<=e&&e<=126||161<=e&&e<=55295&&e!==8232&&e!==8233||57344<=e&&e<=65533&&e!==En||65536<=e&&e<=1114111}function Wi(e){return Ht(e)&&e!==En&&e!==Yc&&e!==Vt}function qi(e,n,t){var a=Wi(e),i=a&&!wr(e);return(t?a:a&&e!==Ia&&e!==Fa&&e!==Na&&e!==Oa&&e!==Da)&&e!==vn&&!(n===xr&&!i)||Wi(n)&&!wr(n)&&e===vn||n===xr&&i}function gu(e){return Ht(e)&&e!==En&&!wr(e)&&e!==Zc&&e!==tu&&e!==xr&&e!==Ia&&e!==Fa&&e!==Na&&e!==Oa&&e!==Da&&e!==vn&&e!==Kc&&e!==Qc&&e!==Wc&&e!==iu&&e!==Jc&&e!==eu&&e!==Xc&&e!==qc&&e!==zc&&e!==ru&&e!==nu}function pu(e){return!wr(e)&&e!==xr}function $t(e,n){var t=e.charCodeAt(n),a;return t>=55296&&t<=56319&&n+1<e.length&&(a=e.charCodeAt(n+1),a>=56320&&a<=57343)?(t-55296)*1024+a-56320+65536:t}function Ra(e){var n=/^\\n* /;return n.test(e)}var $a=1,bn=2,Pa=3,Va=4,Et=5;function hu(e,n,t,a,i,l,c,f){var p,w=0,S=null,E=!1,B=!1,Y=a!==-1,K=-1,Q=gu($t(e,0))&&pu($t(e,e.length-1));if(n||c)for(p=0;p<e.length;w>=65536?p+=2:p++){if(w=$t(e,p),!Ht(w))return Et;Q=Q&&qi(w,S,f),S=w}else{for(p=0;p<e.length;w>=65536?p+=2:p++){if(w=$t(e,p),w===Vt)E=!0,Y&&(B=B||p-K-1>a&&e[K+1]!==\" \",K=p);else if(!Ht(w))return Et;Q=Q&&qi(w,S,f),S=w}B=B||Y&&p-K-1>a&&e[K+1]!==\" \"}return!E&&!B?Q&&!c&&!i(e)?$a:l===Bt?Et:bn:t>9&&Ra(e)?Et:c?l===Bt?Et:bn:B?Va:Pa}function du(e,n,t,a,i){e.dump=function(){if(n.length===0)return e.quotingType===Bt?'\"\"':\"''\";if(!e.noCompatMode&&(au.indexOf(n)!==-1||su.test(n)))return e.quotingType===Bt?'\"'+n+'\"':\"'\"+n+\"'\";var l=e.indent*Math.max(1,t),c=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-l),f=a||e.flowLevel>-1&&t>=e.flowLevel;function p(w){return fu(e,w)}switch(hu(n,f,e.indent,c,p,e.quotingType,e.forceQuotes&&!a,i)){case $a:return n;case bn:return\"'\"+n.replace(/'/g,\"''\")+\"'\";case Pa:return\"|\"+zi(n,e.indent)+Ki(Ui(n,l));case Va:return\">\"+zi(n,e.indent)+Ki(Ui(vu(n,c),l));case Et:return'\"'+mu(n)+'\"';default:throw new $e(\"impossible error: invalid scalar style\")}}()}function zi(e,n){var t=Ra(e)?String(n):\"\",a=e[e.length-1]===`\n`,i=a&&(e[e.length-2]===`\n`||e===`\n`),l=i?\"+\":a?\"\":\"-\";return t+l+`\n`}function Ki(e){return e[e.length-1]===`\n`?e.slice(0,-1):e}function vu(e,n){for(var t=/(\\n+)([^\\n]*)/g,a=function(){var w=e.indexOf(`\n`);return w=w!==-1?w:e.length,t.lastIndex=w,Xi(e.slice(0,w),n)}(),i=e[0]===`\n`||e[0]===\" \",l,c;c=t.exec(e);){var f=c[1],p=c[2];l=p[0]===\" \",a+=f+(!i&&!l&&p!==\"\"?`\n`:\"\")+Xi(p,n),i=l}return a}function Xi(e,n){if(e===\"\"||e[0]===\" \")return e;for(var t=/ [^ ]/g,a,i=0,l,c=0,f=0,p=\"\";a=t.exec(e);)f=a.index,f-i>n&&(l=c>i?c:f,p+=`\n`+e.slice(i,l),i=l+1),c=f;return p+=`\n`,e.length-i>n&&c>i?p+=e.slice(i,c)+`\n`+e.slice(c+1):p+=e.slice(i),p.slice(1)}function mu(e){for(var n=\"\",t=0,a,i=0;i<e.length;t>=65536?i+=2:i++)t=$t(e,i),a=De[t],!a&&Ht(t)?(n+=e[i],t>=65536&&(n+=e[i+1])):n+=a||lu(t);return n}function bu(e,n,t){var a=\"\",i=e.tag,l,c,f;for(l=0,c=t.length;l<c;l+=1)f=t[l],e.replacer&&(f=e.replacer.call(t,String(l),f)),(Je(e,n,f,!1,!1)||typeof f==\"undefined\"&&Je(e,n,null,!1,!1))&&(a!==\"\"&&(a+=\",\"+(e.condenseFlow?\"\":\" \")),a+=e.dump);e.tag=i,e.dump=\"[\"+a+\"]\"}function Qi(e,n,t,a){var i=\"\",l=e.tag,c,f,p;for(c=0,f=t.length;c<f;c+=1)p=t[c],e.replacer&&(p=e.replacer.call(t,String(c),p)),(Je(e,n+1,p,!0,!0,!1,!0)||typeof p==\"undefined\"&&Je(e,n+1,null,!0,!0,!1,!0))&&((!a||i!==\"\")&&(i+=mn(e,n)),e.dump&&Vt===e.dump.charCodeAt(0)?i+=\"-\":i+=\"- \",i+=e.dump);e.tag=l,e.dump=i||\"[]\"}function yu(e,n,t){var a=\"\",i=e.tag,l=Object.keys(t),c,f,p,w,S;for(c=0,f=l.length;c<f;c+=1)S=\"\",a!==\"\"&&(S+=\", \"),e.condenseFlow&&(S+='\"'),p=l[c],w=t[p],e.replacer&&(w=e.replacer.call(t,p,w)),Je(e,n,p,!1,!1)&&(e.dump.length>1024&&(S+=\"? \"),S+=e.dump+(e.condenseFlow?'\"':\"\")+\":\"+(e.condenseFlow?\"\":\" \"),Je(e,n,w,!1,!1)&&(S+=e.dump,a+=S));e.tag=i,e.dump=\"{\"+a+\"}\"}function Su(e,n,t,a){var i=\"\",l=e.tag,c=Object.keys(t),f,p,w,S,E,B;if(e.sortKeys===!0)c.sort();else if(typeof e.sortKeys==\"function\")c.sort(e.sortKeys);else if(e.sortKeys)throw new $e(\"sortKeys must be a boolean or a function\");for(f=0,p=c.length;f<p;f+=1)B=\"\",(!a||i!==\"\")&&(B+=mn(e,n)),w=c[f],S=t[w],e.replacer&&(S=e.replacer.call(t,w,S)),Je(e,n+1,w,!0,!0,!0)&&(E=e.tag!==null&&e.tag!==\"?\"||e.dump&&e.dump.length>1024,E&&(e.dump&&Vt===e.dump.charCodeAt(0)?B+=\"?\":B+=\"? \"),B+=e.dump,E&&(B+=mn(e,n)),Je(e,n+1,S,!0,E)&&(e.dump&&Vt===e.dump.charCodeAt(0)?B+=\":\":B+=\": \",B+=e.dump,i+=B));e.tag=l,e.dump=i||\"{}\"}function Zi(e,n,t){var a,i,l,c,f,p;for(i=t?e.explicitTypes:e.implicitTypes,l=0,c=i.length;l<c;l+=1)if(f=i[l],(f.instanceOf||f.predicate)&&(!f.instanceOf||typeof n==\"object\"&&n instanceof f.instanceOf)&&(!f.predicate||f.predicate(n))){if(t?f.multi&&f.representName?e.tag=f.representName(n):e.tag=f.tag:e.tag=\"?\",f.represent){if(p=e.styleMap[f.tag]||f.defaultStyle,La.call(f.represent)===\"[object Function]\")a=f.represent(n,p);else if(Ma.call(f.represent,p))a=f.represent[p](n,p);else throw new $e(\"!<\"+f.tag+'> tag resolver accepts not \"'+p+'\" style');e.dump=a}return!0}return!1}function Je(e,n,t,a,i,l,c){e.tag=null,e.dump=t,Zi(e,t,!1)||Zi(e,t,!0);var f=La.call(e.dump),p=a,w;a&&(a=e.flowLevel<0||e.flowLevel>n);var S=f===\"[object Object]\"||f===\"[object Array]\",E,B;if(S&&(E=e.duplicates.indexOf(t),B=E!==-1),(e.tag!==null&&e.tag!==\"?\"||B||e.indent!==2&&n>0)&&(i=!1),B&&e.usedDuplicates[E])e.dump=\"*ref_\"+E;else{if(S&&B&&!e.usedDuplicates[E]&&(e.usedDuplicates[E]=!0),f===\"[object Object]\")a&&Object.keys(e.dump).length!==0?(Su(e,n,e.dump,i),B&&(e.dump=\"&ref_\"+E+e.dump)):(yu(e,n,e.dump),B&&(e.dump=\"&ref_\"+E+\" \"+e.dump));else if(f===\"[object Array]\")a&&e.dump.length!==0?(e.noArrayIndent&&!c&&n>0?Qi(e,n-1,e.dump,i):Qi(e,n,e.dump,i),B&&(e.dump=\"&ref_\"+E+e.dump)):(bu(e,n,e.dump),B&&(e.dump=\"&ref_\"+E+\" \"+e.dump));else if(f===\"[object String]\")e.tag!==\"?\"&&du(e,e.dump,n,l,p);else{if(f===\"[object Undefined]\")return!1;if(e.skipInvalid)return!1;throw new $e(\"unacceptable kind of an object to dump \"+f)}e.tag!==null&&e.tag!==\"?\"&&(w=encodeURI(e.tag[0]===\"!\"?e.tag.slice(1):e.tag).replace(/!/g,\"%21\"),e.tag[0]===\"!\"?w=\"!\"+w:w.slice(0,18)===\"tag:yaml.org,2002:\"?w=\"!!\"+w.slice(18):w=\"!<\"+w+\">\",e.dump=w+\" \"+e.dump)}return!0}function Cu(e,n){var t=[],a=[],i,l;for(yn(e,t,a),i=0,l=a.length;i<l;i+=1)n.duplicates.push(t[a[i]]);n.usedDuplicates=new Array(l)}function yn(e,n,t){var a,i,l;if(e!==null&&typeof e==\"object\")if(i=n.indexOf(e),i!==-1)t.indexOf(i)===-1&&t.push(i);else if(n.push(e),Array.isArray(e))for(i=0,l=e.length;i<l;i+=1)yn(e[i],n,t);else for(a=Object.keys(e),i=0,l=a.length;i<l;i+=1)yn(e[a[i]],n,t)}function xu(e,n){n=n||{};var t=new uu(n);t.noRefs||Cu(e,t);var a=e;return t.replacer&&(a=t.replacer.call({\"\":a},\"\",a)),Je(t,0,a,!0,!0)?t.dump+`\n`:\"\"}var wu=xu,Eu={dump:wu};function _n(e,n){return function(){throw new Error(\"Function yaml.\"+e+\" is removed in js-yaml 4. Use yaml.\"+n+\" instead, which is now safe by default.\")}}var _u=Ne,Au=ta,ku=aa,Tu=ua,Lu=fa,Mu=Cn,Iu=Ta.load,Fu=Ta.loadAll,Nu=Eu.dump,Ou=$e,Du={binary:va,float:ca,map:ia,null:sa,pairs:ba,set:ya,timestamp:ha,bool:oa,int:la,merge:da,omap:ma,seq:na,str:ra},Ru=_n(\"safeLoad\",\"load\"),$u=_n(\"safeLoadAll\",\"loadAll\"),Pu=_n(\"safeDump\",\"dump\"),Vu={Type:_u,Schema:Au,FAILSAFE_SCHEMA:ku,JSON_SCHEMA:Tu,CORE_SCHEMA:Lu,DEFAULT_SCHEMA:Mu,load:Iu,loadAll:Fu,dump:Nu,YAMLException:Ou,types:Du,safeLoad:Ru,safeLoadAll:$u,safeDump:Pu},Ba=Vu;var Ha=require(\"obsidian\"),_r=class extends Ha.Plugin{constructor(){super(...arguments);this.settingsList=[];this.errorList=[];this.commandList=[];this.debounceTimer=0}async onload(){this.settingsManager=new Jt(this),await this.settingsManager.load(),this.settingsTab=new mr(this.app,this),this.addSettingTab(this.settingsTab),this.registerView(at,t=>new br(this,t)),this.addCommand({id:\"show-style-settings-leaf\",name:\"Show style settings view\",callback:()=>{this.activateView()}}),this.registerEvent(this.app.workspace.on(\"css-change\",t=>{(t==null?void 0:t.source)!==\"style-settings\"&&this.parseCSS()})),this.registerEvent(this.app.workspace.on(\"parse-style-settings\",()=>{this.parseCSS()})),this.lightEl=document.body.createDiv(\"theme-light style-settings-ref\"),this.darkEl=document.body.createDiv(\"theme-dark style-settings-ref\"),document.body.classList.add(\"css-settings-manager\"),this.parseCSS(),this.app.workspace.onLayoutReady(()=>{this.settingsList&&this.app.workspace.getLeavesOfType(at).forEach(t=>{t.view.setSettings(this.settingsList,this.errorList)})})}getCSSVar(t){let a=getComputedStyle(this.lightEl).getPropertyValue(`--${t}`),i=getComputedStyle(this.darkEl).getPropertyValue(`--${t}`),l=getComputedStyle(document.body).getPropertyValue(`--${t}`);return{light:a,dark:i,current:l}}parseCSS(){clearTimeout(this.debounceTimer),this.debounceTimer=activeWindow.setTimeout(()=>{this.settingsList=[],this.errorList=[];for(let a of this.commandList)this.app.commands.removeCommand(a.id);this.commandList=[],this.settingsManager.removeClasses();let t=document.styleSheets;for(let a=0,i=t.length;a<i;a++){let l=t.item(a);l&&this.parseCSSStyleSheet(l)}this.registerSettingsToSettingsSearch(),this.settingsTab.setSettings(this.settingsList,this.errorList),this.app.workspace.getLeavesOfType(at).forEach(a=>{a.view.setSettings(this.settingsList,this.errorList)}),this.settingsManager.setConfig(this.settingsList),this.settingsManager.initClasses(),this.registerSettingCommands()},100)}registerSettingsToSettingsSearch(){var a;let t=()=>{if(window.SettingsSearch){let i=window.SettingsSearch;i.removeTabResources(\"obsidian-style-settings\");for(let l of this.settingsList)i.addResources(...l.settings.map(c=>{var p,w;return{tab:\"obsidian-style-settings\",name:\"Style Settings\",text:(p=ve(c))!=null?p:\"\",desc:(w=me(c))!=null?w:\"\"}}))}};(a=this.app.plugins.plugins[\"settings-search\"])!=null&&a.loaded?t():this.app.workspace.on(\"settings-search-loaded\",()=>{t()})}unregisterSettingsFromSettingsSearch(){var t;(t=this.app.plugins.plugins[\"settings-search\"])!=null&&t.loaded&&window.SettingsSearch.removeTabResources(\"obsidian-style-settings\")}parseCSSStyleSheet(t){var l,c;let a=(c=(l=t==null?void 0:t.ownerNode)==null?void 0:l.textContent)==null?void 0:c.trim();if(!a)return;let i=sn.exec(a);if(i!=null&&i.length)do{let f=a.match(wi);if(!f)continue;let p=f[1];try{let w=i[1].trim(),S=this.parseCSSSettings(w,p);S&&typeof S==\"object\"&&S.name&&S.id&&S.settings&&S.settings.length&&this.settingsList.push(S)}catch(w){this.errorList.push({name:p,error:`${w}`})}}while((i=sn.exec(a))!==null)}parseCSSSettings(t,a){let i=fn(t),l=Ba.load(t.replace(/\\t/g,i.type===\"space\"?i.indent:\"    \"),{filename:a});if(l.settings)return l.settings=l.settings.filter(c=>c),l}registerSettingCommands(){for(let t of this.settingsList)for(let a of t.settings)a.type===he.CLASS_TOGGLE&&a.addCommand&&this.addClassToggleCommand(t,a)}addClassToggleCommand(t,a){this.commandList.push(this.addCommand({id:`style-settings-class-toggle-${t.id}-${a.id}`,name:`Toggle ${a.title}`,callback:()=>{let i=!this.settingsManager.getSetting(t.id,a.id);this.settingsManager.setSetting(t.id,a.id,i),this.settingsTab.rerender();for(let l of this.app.workspace.getLeavesOfType(at))l.view.rerender()}}))}onunload(){this.lightEl.remove(),this.darkEl.remove(),document.body.classList.remove(\"css-settings-manager\"),this.settingsManager.cleanup(),this.deactivateView(),this.unregisterSettingsFromSettingsSearch()}deactivateView(){this.app.workspace.detachLeavesOfType(at)}async activateView(){this.deactivateView();let t=this.app.workspace.getLeaf(\"tab\");await t.setViewState({type:at,active:!0}),t.view.setSettings(this.settingsList,this.errorList)}};\n/*! Bundled license information:\n\nchroma-js/chroma.js:\n  (**\n   * chroma.js - JavaScript library for color conversions\n   *\n   * Copyright (c) 2011-2019, Gregor Aisch\n   * All rights reserved.\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   * list of conditions and the following disclaimer.\n   *\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   * this list of conditions and the following disclaimer in the documentation\n   * and/or other materials provided with the distribution.\n   *\n   * 3. The name Gregor Aisch may not be used to endorse or promote products\n   * derived from this software without specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *\n   * -------------------------------------------------------\n   *\n   * chroma.js includes colors from colorbrewer2.org, which are released under\n   * the following license:\n   *\n   * Copyright (c) 2002 Cynthia Brewer, Mark Harrower,\n   * and The Pennsylvania State University.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing,\n   * software distributed under the License is distributed on an\n   * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\n   * either express or implied. See the License for the specific\n   * language governing permissions and limitations under the License.\n   *\n   * ------------------------------------------------------\n   *\n   * Named colors are taken from X11 Color Names.\n   * http://www.w3.org/TR/css3-color/#svg-color\n   *\n   * @preserve\n   *)\n\n@simonwep/pickr/dist/pickr.min.js:\n  (*! Pickr 1.8.4 MIT | https://github.com/Simonwep/pickr *)\n\njs-yaml/dist/js-yaml.mjs:\n  (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *)\n*/\n\n/* nosourcemap */"
  },
  {
    "path": ".obsidian/plugins/obsidian-style-settings/manifest.json",
    "content": "{\n\t\"id\": \"obsidian-style-settings\",\n\t\"name\": \"Style Settings\",\n\t\"version\": \"1.0.9\",\n\t\"minAppVersion\": \"0.11.5\",\n\t\"description\": \"Offers controls for adjusting theme, plugin, and snippet CSS variables.\",\n\t\"author\": \"mgmeyers\",\n\t\"authorUrl\": \"https://github.com/mgmeyers/obsidian-style-settings\",\n\t\"isDesktopOnly\": false\n}\n"
  },
  {
    "path": ".obsidian/plugins/obsidian-style-settings/styles.css",
    "content": ".style-settings-heading {\n    cursor: pointer;\n    margin-bottom: 18px;\n    padding-bottom: 6px;\n    border-bottom: 1px solid var(--background-modifier-border);\n}\n\n.style-settings-heading[data-level=\"0\"] {\n    margin-bottom: 26px;\n}\n\n.style-settings-container {\n    padding-bottom: 16px;\n}\n\n.style-settings-heading[data-level=\"0\"] + .style-settings-container {\n    padding-left: 34px;\n}\n\n.style-settings-heading.is-collapsed {\n    margin-bottom: 0;\n}\n\n.style-settings-heading.is-collapsed + .style-settings-container {\n    display: none;\n}\n\n.style-settings-collapse-indicator {\n    color: var(--text-faint);\n    display: inline-block;\n    margin-right: 8px;\n    position: relative;\n    top: -1px;\n}\n\n.style-settings-heading[data-level=\"0\"]\n+ .style-settings-container\n.style-settings-collapse-indicator {\n    margin-left: -17px;\n}\n\n.style-settings-collapse-indicator > svg {\n    height: 9px;\n    width: 9px;\n}\n\n.style-settings-heading.is-collapsed .style-settings-collapse-indicator > svg {\n    transform: rotate(-90deg);\n}\n\n.style-settings-filter-result-count {\n    color: var(--text-faint);\n    line-height: var(--line-height-tight);\n    margin-inline: var(--size-4-2);\n}\n\n.style-settings-error {\n    font-size: 14px;\n    border-radius: 6px;\n    background: rgba(var(--background-modifier-error-rgb), 0.2);\n    color: var(--text-error);\n    padding: 10px;\n    margin-bottom: 1rem;\n}\n\n.style-settings-error-name {\n    font-weight: bold;\n    margin-bottom: 5px;\n}\n\n.style-settings-error-desc {\n    white-space: pre;\n}\n\n.style-settings-empty {\n    font-size: 14px;\n    background: var(--background-secondary);\n    padding: 10px;\n}\n\n.style-settings-empty-name {\n    font-weight: bold;\n    margin-bottom: 5px;\n}\n\n.style-settings-import-input {\n    width: 0.1px;\n    height: 0.1px;\n    opacity: 0;\n    overflow: hidden;\n    position: absolute;\n    z-index: -1;\n}\n\n.style-settings-import-label {\n    cursor: pointer;\n    color: var(--text-accent);\n    text-decoration: underline;\n}\n\n.style-settings-import-label:hover {\n    color: var(--text-accent-hover);\n}\n\n.style-settings-export,\n.style-settings-import {\n    display: inline-block;\n    margin-right: 10px;\n}\n\n.style-settings-copy,\n.style-settings-download {\n    position: relative;\n    display: inline-block;\n    margin-left: 10px;\n}\n\n.style-settings-copy:before {\n    color: var(--interactive-success);\n    content: \"✓\";\n    position: absolute;\n    left: -18px;\n    font-weight: bold;\n    opacity: 0;\n    transition: 150ms opacity ease-in-out;\n}\n\n.style-settings-copy.success:before {\n    opacity: 1;\n}\n\n.modal-style-settings {\n    height: 70vh;\n    display: flex;\n    flex-direction: column;\n}\n\n.modal-style-settings .modal-content {\n    flex-grow: 1;\n    margin: 0;\n    display: flex;\n    flex-direction: column;\n}\n\n.modal-style-settings textarea {\n    display: block;\n    width: 100%;\n    height: 100%;\n    font-family: var(--font-monospace) !important;\n    font-size: 12px;\n    white-space: pre;\n    overflow-wrap: normal;\n    overflow-x: scroll;\n    margin-bottom: 5px;\n}\n\n.modal-style-settings .setting-item {\n    align-items: flex-start;\n}\n\n.modal-style-settings button {\n    margin: 10px 0 0;\n}\n\n.style-settings-import-error {\n    display: none;\n    color: var(--text-error);\n}\n\n.style-settings-import-error.active {\n    display: block;\n}\n\n.view-content .style-settings-container .setting-item:not(.setting-item-heading) {\n    flex-direction: column;\n    align-items: flex-start;\n}\n\n.view-content .style-settings-container .setting-item:not(.setting-item-heading) .setting-item-control {\n    padding-top: 0.5em;\n}\n\n.view-content .style-settings-container .setting-item:not(.setting-item-heading) .themed-color-wrapper {\n    display: flex;\n}\n\n.style-settings-ref {\n    position: absolute;\n    width: 0 !important;\n    height: 0 !important;\n    pointer-events: none;\n}\n\n.style-settings-info-text .style-settings-markdown :first-child {\n    margin-top: 0;\n}\n\n.style-settings-info-text .style-settings-markdown :last-child {\n    margin-bottom: 0;\n}.style-settings-container .pcr-app {\n    display: none;\n}\n\n.style-settings-container .pcr-app.visible {\n    display: flex;\n}\n\n.pcr-app .pcr-swatches > button {\n    padding: 0;\n}\n\n.pickr .pcr-button {\n    margin-right: 0;\n}\n\n.themed-color-wrapper > div {\n    background: var(--background-primary);\n    padding: 10px;\n    display: flex;\n    align-items: center;\n    border-radius: 4px;\n}\n\n.themed-color-wrapper > div + div {\n    margin-top: 6px;\n}\n\n.themed-color-wrapper button {\n    display: block;\n}\n\n.themed-color-wrapper .pickr-reset > button {\n    margin: 0 0 0 10px;\n    padding: 9px;\n    line-height: 1;\n}\n\n.themed-color-wrapper .pickr-reset > button > svg {\n    display: block;\n}\n/*! Pickr 1.8.4 MIT | https://github.com/Simonwep/pickr */\n.pickr{position:relative;overflow:visible;transform:translateY(0)}.pickr *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr .pcr-button{position:relative;height:2em;width:2em;padding:0.5em;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",Arial,sans-serif;border-radius:.15em;background:url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" stroke=\"%2342445A\" stroke-width=\"5px\" stroke-linecap=\"round\"><path d=\"M45,45L5,5\"></path><path d=\"M45,5L5,45\"></path></svg>') no-repeat center;background-size:0;transition:all 0.3s}.pickr .pcr-button::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pickr .pcr-button::before{z-index:initial}.pickr .pcr-button::after{position:absolute;content:'';top:0;left:0;height:100%;width:100%;transition:background 0.3s;background:var(--pcr-color);border-radius:.15em}.pickr .pcr-button.clear{background-size:70%}.pickr .pcr-button.clear::before{opacity:0}.pickr .pcr-button.clear:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-button.disabled{cursor:not-allowed}.pickr *,.pcr-app *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr input:focus,.pickr input.pcr-active,.pickr button:focus,.pickr button.pcr-active,.pcr-app input:focus,.pcr-app input.pcr-active,.pcr-app button:focus,.pcr-app button.pcr-active{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-palette,.pickr .pcr-slider,.pcr-app .pcr-palette,.pcr-app .pcr-slider{transition:box-shadow 0.3s}.pickr .pcr-palette:focus,.pickr .pcr-slider:focus,.pcr-app .pcr-palette:focus,.pcr-app .pcr-slider:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(0,0,0,0.25)}.pcr-app{position:fixed;display:flex;flex-direction:column;z-index:10000;border-radius:0.1em;background:#fff;opacity:0;visibility:hidden;transition:opacity 0.3s, visibility 0s 0.3s;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",Arial,sans-serif;box-shadow:0 0.15em 1.5em 0 rgba(0,0,0,0.1),0 0 1em 0 rgba(0,0,0,0.03);left:0;top:0}.pcr-app.visible{transition:opacity 0.3s;visibility:visible;opacity:1}.pcr-app .pcr-swatches{display:flex;flex-wrap:wrap;margin-top:0.75em}.pcr-app .pcr-swatches.pcr-last{margin:0}@supports (display: grid){.pcr-app .pcr-swatches{display:grid;align-items:center;grid-template-columns:repeat(auto-fit, 1.75em)}}.pcr-app .pcr-swatches>button{font-size:1em;position:relative;width:calc(1.75em - 5px);height:calc(1.75em - 5px);border-radius:0.15em;cursor:pointer;margin:2.5px;flex-shrink:0;justify-self:center;transition:all 0.15s;overflow:hidden;background:transparent;z-index:1}.pcr-app .pcr-swatches>button::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size:6px;border-radius:.15em;z-index:-1}.pcr-app .pcr-swatches>button::after{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background:var(--pcr-color);border:1px solid rgba(0,0,0,0.05);border-radius:0.15em;box-sizing:border-box}.pcr-app .pcr-swatches>button:hover{filter:brightness(1.05)}.pcr-app .pcr-swatches>button:not(.pcr-active){box-shadow:none}.pcr-app .pcr-interaction{display:flex;flex-wrap:wrap;align-items:center;margin:0 -0.2em 0 -0.2em}.pcr-app .pcr-interaction>*{margin:0 0.2em}.pcr-app .pcr-interaction input{letter-spacing:0.07em;font-size:0.75em;text-align:center;cursor:pointer;color:#75797e;background:#f1f3f4;border-radius:.15em;transition:all 0.15s;padding:0.45em 0.5em;margin-top:0.75em}.pcr-app .pcr-interaction input:hover{filter:brightness(0.975)}.pcr-app .pcr-interaction input:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(66,133,244,0.75)}.pcr-app .pcr-interaction .pcr-result{color:#75797e;text-align:left;flex:1 1 8em;min-width:8em;transition:all 0.2s;border-radius:.15em;background:#f1f3f4;cursor:text}.pcr-app .pcr-interaction .pcr-result::-moz-selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-result::selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-type.active{color:#fff;background:#4285f4}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff;width:auto}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff}.pcr-app .pcr-interaction .pcr-save:hover,.pcr-app .pcr-interaction .pcr-cancel:hover,.pcr-app .pcr-interaction .pcr-clear:hover{filter:brightness(0.925)}.pcr-app .pcr-interaction .pcr-save{background:#4285f4}.pcr-app .pcr-interaction .pcr-clear,.pcr-app .pcr-interaction .pcr-cancel{background:#f44250}.pcr-app .pcr-interaction .pcr-clear:focus,.pcr-app .pcr-interaction .pcr-cancel:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(244,66,80,0.75)}.pcr-app .pcr-selection .pcr-picker{position:absolute;height:18px;width:18px;border:2px solid #fff;border-radius:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pcr-app .pcr-selection .pcr-color-palette,.pcr-app .pcr-selection .pcr-color-chooser,.pcr-app .pcr-selection .pcr-color-opacity{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column;cursor:grab;cursor:-webkit-grab}.pcr-app .pcr-selection .pcr-color-palette:active,.pcr-app .pcr-selection .pcr-color-chooser:active,.pcr-app .pcr-selection .pcr-color-opacity:active{cursor:grabbing;cursor:-webkit-grabbing}.pcr-app[data-theme='nano']{width:14.25em;max-width:95vw}.pcr-app[data-theme='nano'] .pcr-swatches{margin-top:.6em;padding:0 .6em}.pcr-app[data-theme='nano'] .pcr-interaction{padding:0 .6em .6em .6em}.pcr-app[data-theme='nano'] .pcr-selection{display:grid;grid-gap:.6em;grid-template-columns:1fr 4fr;grid-template-rows:5fr auto auto;align-items:center;height:10.5em;width:100%;align-self:flex-start}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview{grid-area:2 / 1 / 4 / 1;height:100%;width:100%;display:flex;flex-direction:row;justify-content:center;margin-left:.6em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-last-color{display:none}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color{position:relative;background:var(--pcr-color);width:2em;height:2em;border-radius:50em;overflow:hidden}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette{grid-area:1 / 1 / 2 / 3;width:100%;height:100%;z-index:1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette{border-radius:.15em;width:100%;height:100%}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser{grid-area:2 / 2 / 2 / 2}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity{grid-area:3 / 2 / 3 / 2}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity{height:0.5em;margin:0 .6em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-picker,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-picker{top:50%;transform:translateY(-50%)}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider{flex-grow:1;border-radius:50em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider{background:linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red)}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider{background:linear-gradient(to right, transparent, black),url('data:image/svg+xml;utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path fill=\"white\" d=\"M1,0H2V1H1V0ZM0,1H1V2H0V1Z\"/><path fill=\"gray\" d=\"M0,0H1V1H0V0ZM1,1H2V2H1V1Z\"/></svg>');background-size:100%, 0.25em}\n\n"
  },
  {
    "path": ".obsidian/plugins/obsidian42-brat/data.json",
    "content": "{\n  \"pluginList\": [\n    \"0011000000110010/obsidian-i18n\"\n  ],\n  \"pluginSubListFrozenVersion\": [],\n  \"themesList\": [],\n  \"updateAtStartup\": true,\n  \"updateThemesAtStartup\": true,\n  \"enableAfterInstall\": true,\n  \"loggingEnabled\": false,\n  \"loggingPath\": \"BRAT-log\",\n  \"loggingVerboseEnabled\": false,\n  \"debuggingMode\": false,\n  \"notificationsEnabled\": true,\n  \"personalAccessToken\": \"\"\n}"
  },
  {
    "path": ".obsidian/plugins/obsidian42-brat/main.js",
    "content": "\"use strict\";var qt=Object.create;var Q=Object.defineProperty;var Jt=Object.getOwnPropertyDescriptor;var Wt=Object.getOwnPropertyNames;var Qt=Object.getPrototypeOf,Kt=Object.prototype.hasOwnProperty;var Gt=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports),Zt=(s,t)=>{for(var n in t)Q(s,n,{get:t[n],enumerable:!0})},pt=(s,t,n,e)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Wt(t))!Kt.call(s,i)&&i!==n&&Q(s,i,{get:()=>t[i],enumerable:!(e=Jt(t,i))||e.enumerable});return s};var Xt=(s,t,n)=>(n=s!=null?qt(Qt(s)):{},pt(t||!s||!s.__esModule?Q(n,\"default\",{value:s,enumerable:!0}):n,s)),te=s=>pt(Q({},\"__esModule\",{value:!0}),s);var Ht=Gt(u=>{\"use strict\";Object.defineProperty(u,\"__esModule\",{value:!0});var b=require(\"obsidian\"),rt=\"YYYY-MM-DD\",lt=\"gggg-[W]ww\",It=\"YYYY-MM\",Et=\"YYYY-[Q]Q\",Lt=\"YYYY\";function _(s){var n,e;let t=window.app.plugins.getPlugin(\"periodic-notes\");return t&&((e=(n=t.settings)==null?void 0:n[s])==null?void 0:e.enabled)}function H(){var s,t,n,e;try{let{internalPlugins:i,plugins:o}=window.app;if(_(\"daily\")){let{format:r,folder:p,template:T}=((t=(s=o.getPlugin(\"periodic-notes\"))==null?void 0:s.settings)==null?void 0:t.daily)||{};return{format:r||rt,folder:(p==null?void 0:p.trim())||\"\",template:(T==null?void 0:T.trim())||\"\"}}let{folder:a,format:l,template:g}=((e=(n=i.getPluginById(\"daily-notes\"))==null?void 0:n.instance)==null?void 0:e.options)||{};return{format:l||rt,folder:(a==null?void 0:a.trim())||\"\",template:(g==null?void 0:g.trim())||\"\"}}catch(i){console.info(\"No custom daily note settings found!\",i)}}function V(){var s,t,n,e,i,o,a;try{let l=window.app.plugins,g=(s=l.getPlugin(\"calendar\"))==null?void 0:s.options,r=(n=(t=l.getPlugin(\"periodic-notes\"))==null?void 0:t.settings)==null?void 0:n.weekly;if(_(\"weekly\"))return{format:r.format||lt,folder:((e=r.folder)==null?void 0:e.trim())||\"\",template:((i=r.template)==null?void 0:i.trim())||\"\"};let p=g||{};return{format:p.weeklyNoteFormat||lt,folder:((o=p.weeklyNoteFolder)==null?void 0:o.trim())||\"\",template:((a=p.weeklyNoteTemplate)==null?void 0:a.trim())||\"\"}}catch(l){console.info(\"No custom weekly note settings found!\",l)}}function Y(){var t,n,e,i;let s=window.app.plugins;try{let o=_(\"monthly\")&&((n=(t=s.getPlugin(\"periodic-notes\"))==null?void 0:t.settings)==null?void 0:n.monthly)||{};return{format:o.format||It,folder:((e=o.folder)==null?void 0:e.trim())||\"\",template:((i=o.template)==null?void 0:i.trim())||\"\"}}catch(o){console.info(\"No custom monthly note settings found!\",o)}}function j(){var t,n,e,i;let s=window.app.plugins;try{let o=_(\"quarterly\")&&((n=(t=s.getPlugin(\"periodic-notes\"))==null?void 0:t.settings)==null?void 0:n.quarterly)||{};return{format:o.format||Et,folder:((e=o.folder)==null?void 0:e.trim())||\"\",template:((i=o.template)==null?void 0:i.trim())||\"\"}}catch(o){console.info(\"No custom quarterly note settings found!\",o)}}function q(){var t,n,e,i;let s=window.app.plugins;try{let o=_(\"yearly\")&&((n=(t=s.getPlugin(\"periodic-notes\"))==null?void 0:t.settings)==null?void 0:n.yearly)||{};return{format:o.format||Lt,folder:((e=o.folder)==null?void 0:e.trim())||\"\",template:((i=o.template)==null?void 0:i.trim())||\"\"}}catch(o){console.info(\"No custom yearly note settings found!\",o)}}function Bt(...s){let t=[];for(let e=0,i=s.length;e<i;e++)t=t.concat(s[e].split(\"/\"));let n=[];for(let e=0,i=t.length;e<i;e++){let o=t[e];!o||o===\".\"||n.push(o)}return t[0]===\"\"&&n.unshift(\"\"),n.join(\"/\")}function ae(s){let t=s.substring(s.lastIndexOf(\"/\")+1);return t.lastIndexOf(\".\")!=-1&&(t=t.substring(0,t.lastIndexOf(\".\"))),t}async function re(s){let t=s.replace(/\\\\/g,\"/\").split(\"/\");if(t.pop(),t.length){let n=Bt(...t);window.app.vault.getAbstractFileByPath(n)||await window.app.vault.createFolder(n)}}async function J(s,t){t.endsWith(\".md\")||(t+=\".md\");let n=b.normalizePath(Bt(s,t));return await re(n),n}async function B(s){let{metadataCache:t,vault:n}=window.app,e=b.normalizePath(s);if(e===\"/\")return Promise.resolve([\"\",null]);try{let i=t.getFirstLinkpathDest(e,\"\"),o=await n.cachedRead(i),a=window.app.foldManager.load(i);return[o,a]}catch(i){return console.error(`Failed to read the daily note template '${e}'`,i),new b.Notice(\"Failed to read the daily note template\"),[\"\",null]}}function A(s,t=\"day\"){let n=s.clone().startOf(t).format();return`${t}-${n}`}function Dt(s){return s.replace(/\\[[^\\]]*\\]/g,\"\")}function le(s,t){if(t===\"week\"){let n=Dt(s);return/w{1,2}/i.test(n)&&(/M{1,4}/.test(n)||/D{1,4}/.test(n))}return!1}function D(s,t){return Mt(s.basename,t)}function ge(s,t){return Mt(ae(s),t)}function Mt(s,t){let e={day:H,week:V,month:Y,quarter:j,year:q}[t]().format.split(\"/\").pop(),i=window.moment(s,e,!0);if(!i.isValid())return null;if(le(e,t)&&t===\"week\"){let o=Dt(e);if(/w{1,2}/i.test(o))return window.moment(s,e.replace(/M{1,4}/g,\"\").replace(/D{1,4}/g,\"\"),!1)}return i}var gt=class extends Error{};async function $t(s){let t=window.app,{vault:n}=t,e=window.moment,{template:i,format:o,folder:a}=H(),[l,g]=await B(i),r=s.format(o),p=await J(a,r);try{let T=await n.create(p,l.replace(/{{\\s*date\\s*}}/gi,r).replace(/{{\\s*time\\s*}}/gi,e().format(\"HH:mm\")).replace(/{{\\s*title\\s*}}/gi,r).replace(/{{\\s*(date|time)\\s*(([+-]\\d+)([yqmwdhs]))?\\s*(:.+?)?}}/gi,(c,m,f,w,h,P)=>{let it=e(),st=s.clone().set({hour:it.get(\"hour\"),minute:it.get(\"minute\"),second:it.get(\"second\")});return f&&st.add(parseInt(w,10),h),P?st.format(P.substring(1).trim()):st.format(o)}).replace(/{{\\s*yesterday\\s*}}/gi,s.clone().subtract(1,\"day\").format(o)).replace(/{{\\s*tomorrow\\s*}}/gi,s.clone().add(1,\"d\").format(o)));return t.foldManager.save(T,g),T}catch(T){console.error(`Failed to create file: '${p}'`,T),new b.Notice(\"Unable to create new file.\")}}function ue(s,t){var n;return(n=t[A(s,\"day\")])!=null?n:null}function ce(){let{vault:s}=window.app,{folder:t}=H(),n=s.getAbstractFileByPath(b.normalizePath(t));if(!n)throw new gt(\"Failed to find daily notes folder\");let e={};return b.Vault.recurseChildren(n,i=>{if(i instanceof b.TFile){let o=D(i,\"day\");if(o){let a=A(o,\"day\");e[a]=i}}}),e}var ut=class extends Error{};function de(){let{moment:s}=window,t=s.localeData()._week.dow,n=[\"sunday\",\"monday\",\"tuesday\",\"wednesday\",\"thursday\",\"friday\",\"saturday\"];for(;t;)n.push(n.shift()),t--;return n}function me(s){return de().indexOf(s.toLowerCase())}async function xt(s){let{vault:t}=window.app,{template:n,format:e,folder:i}=V(),[o,a]=await B(n),l=s.format(e),g=await J(i,l);try{let r=await t.create(g,o.replace(/{{\\s*(date|time)\\s*(([+-]\\d+)([yqmwdhs]))?\\s*(:.+?)?}}/gi,(p,T,c,m,f,w)=>{let h=window.moment(),P=s.clone().set({hour:h.get(\"hour\"),minute:h.get(\"minute\"),second:h.get(\"second\")});return c&&P.add(parseInt(m,10),f),w?P.format(w.substring(1).trim()):P.format(e)}).replace(/{{\\s*title\\s*}}/gi,l).replace(/{{\\s*time\\s*}}/gi,window.moment().format(\"HH:mm\")).replace(/{{\\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\\s*:(.*?)}}/gi,(p,T,c)=>{let m=me(T);return s.weekday(m).format(c.trim())}));return window.app.foldManager.save(r,a),r}catch(r){console.error(`Failed to create file: '${g}'`,r),new b.Notice(\"Unable to create new file.\")}}function pe(s,t){var n;return(n=t[A(s,\"week\")])!=null?n:null}function fe(){let s={};if(!Ot())return s;let{vault:t}=window.app,{folder:n}=V(),e=t.getAbstractFileByPath(b.normalizePath(n));if(!e)throw new ut(\"Failed to find weekly notes folder\");return b.Vault.recurseChildren(e,i=>{if(i instanceof b.TFile){let o=D(i,\"week\");if(o){let a=A(o,\"week\");s[a]=i}}}),s}var ct=class extends Error{};async function Rt(s){let{vault:t}=window.app,{template:n,format:e,folder:i}=Y(),[o,a]=await B(n),l=s.format(e),g=await J(i,l);try{let r=await t.create(g,o.replace(/{{\\s*(date|time)\\s*(([+-]\\d+)([yqmwdhs]))?\\s*(:.+?)?}}/gi,(p,T,c,m,f,w)=>{let h=window.moment(),P=s.clone().set({hour:h.get(\"hour\"),minute:h.get(\"minute\"),second:h.get(\"second\")});return c&&P.add(parseInt(m,10),f),w?P.format(w.substring(1).trim()):P.format(e)}).replace(/{{\\s*date\\s*}}/gi,l).replace(/{{\\s*time\\s*}}/gi,window.moment().format(\"HH:mm\")).replace(/{{\\s*title\\s*}}/gi,l));return window.app.foldManager.save(r,a),r}catch(r){console.error(`Failed to create file: '${g}'`,r),new b.Notice(\"Unable to create new file.\")}}function he(s,t){var n;return(n=t[A(s,\"month\")])!=null?n:null}function be(){let s={};if(!Ut())return s;let{vault:t}=window.app,{folder:n}=Y(),e=t.getAbstractFileByPath(b.normalizePath(n));if(!e)throw new ct(\"Failed to find monthly notes folder\");return b.Vault.recurseChildren(e,i=>{if(i instanceof b.TFile){let o=D(i,\"month\");if(o){let a=A(o,\"month\");s[a]=i}}}),s}var dt=class extends Error{};async function we(s){let{vault:t}=window.app,{template:n,format:e,folder:i}=j(),[o,a]=await B(n),l=s.format(e),g=await J(i,l);try{let r=await t.create(g,o.replace(/{{\\s*(date|time)\\s*(([+-]\\d+)([yqmwdhs]))?\\s*(:.+?)?}}/gi,(p,T,c,m,f,w)=>{let h=window.moment(),P=s.clone().set({hour:h.get(\"hour\"),minute:h.get(\"minute\"),second:h.get(\"second\")});return c&&P.add(parseInt(m,10),f),w?P.format(w.substring(1).trim()):P.format(e)}).replace(/{{\\s*date\\s*}}/gi,l).replace(/{{\\s*time\\s*}}/gi,window.moment().format(\"HH:mm\")).replace(/{{\\s*title\\s*}}/gi,l));return window.app.foldManager.save(r,a),r}catch(r){console.error(`Failed to create file: '${g}'`,r),new b.Notice(\"Unable to create new file.\")}}function ye(s,t){var n;return(n=t[A(s,\"quarter\")])!=null?n:null}function Te(){let s={};if(!zt())return s;let{vault:t}=window.app,{folder:n}=j(),e=t.getAbstractFileByPath(b.normalizePath(n));if(!e)throw new dt(\"Failed to find quarterly notes folder\");return b.Vault.recurseChildren(e,i=>{if(i instanceof b.TFile){let o=D(i,\"quarter\");if(o){let a=A(o,\"quarter\");s[a]=i}}}),s}var mt=class extends Error{};async function Pe(s){let{vault:t}=window.app,{template:n,format:e,folder:i}=q(),[o,a]=await B(n),l=s.format(e),g=await J(i,l);try{let r=await t.create(g,o.replace(/{{\\s*(date|time)\\s*(([+-]\\d+)([yqmwdhs]))?\\s*(:.+?)?}}/gi,(p,T,c,m,f,w)=>{let h=window.moment(),P=s.clone().set({hour:h.get(\"hour\"),minute:h.get(\"minute\"),second:h.get(\"second\")});return c&&P.add(parseInt(m,10),f),w?P.format(w.substring(1).trim()):P.format(e)}).replace(/{{\\s*date\\s*}}/gi,l).replace(/{{\\s*time\\s*}}/gi,window.moment().format(\"HH:mm\")).replace(/{{\\s*title\\s*}}/gi,l));return window.app.foldManager.save(r,a),r}catch(r){console.error(`Failed to create file: '${g}'`,r),new b.Notice(\"Unable to create new file.\")}}function ve(s,t){var n;return(n=t[A(s,\"year\")])!=null?n:null}function Ce(){let s={};if(!_t())return s;let{vault:t}=window.app,{folder:n}=q(),e=t.getAbstractFileByPath(b.normalizePath(n));if(!e)throw new mt(\"Failed to find yearly notes folder\");return b.Vault.recurseChildren(e,i=>{if(i instanceof b.TFile){let o=D(i,\"year\");if(o){let a=A(o,\"year\");s[a]=i}}}),s}function Ae(){var e,i;let{app:s}=window,t=s.internalPlugins.plugins[\"daily-notes\"];if(t&&t.enabled)return!0;let n=s.plugins.getPlugin(\"periodic-notes\");return n&&((i=(e=n.settings)==null?void 0:e.daily)==null?void 0:i.enabled)}function Ot(){var n,e;let{app:s}=window;if(s.plugins.getPlugin(\"calendar\"))return!0;let t=s.plugins.getPlugin(\"periodic-notes\");return t&&((e=(n=t.settings)==null?void 0:n.weekly)==null?void 0:e.enabled)}function Ut(){var n,e;let{app:s}=window,t=s.plugins.getPlugin(\"periodic-notes\");return t&&((e=(n=t.settings)==null?void 0:n.monthly)==null?void 0:e.enabled)}function zt(){var n,e;let{app:s}=window,t=s.plugins.getPlugin(\"periodic-notes\");return t&&((e=(n=t.settings)==null?void 0:n.quarterly)==null?void 0:e.enabled)}function _t(){var n,e;let{app:s}=window,t=s.plugins.getPlugin(\"periodic-notes\");return t&&((e=(n=t.settings)==null?void 0:n.yearly)==null?void 0:e.enabled)}function Fe(s){let t={day:H,week:V,month:Y,quarter:j,year:q}[s];return t()}function Se(s,t){return{day:$t,month:Rt,week:xt}[s](t)}u.DEFAULT_DAILY_NOTE_FORMAT=rt;u.DEFAULT_MONTHLY_NOTE_FORMAT=It;u.DEFAULT_QUARTERLY_NOTE_FORMAT=Et;u.DEFAULT_WEEKLY_NOTE_FORMAT=lt;u.DEFAULT_YEARLY_NOTE_FORMAT=Lt;u.appHasDailyNotesPluginLoaded=Ae;u.appHasMonthlyNotesPluginLoaded=Ut;u.appHasQuarterlyNotesPluginLoaded=zt;u.appHasWeeklyNotesPluginLoaded=Ot;u.appHasYearlyNotesPluginLoaded=_t;u.createDailyNote=$t;u.createMonthlyNote=Rt;u.createPeriodicNote=Se;u.createQuarterlyNote=we;u.createWeeklyNote=xt;u.createYearlyNote=Pe;u.getAllDailyNotes=ce;u.getAllMonthlyNotes=be;u.getAllQuarterlyNotes=Te;u.getAllWeeklyNotes=fe;u.getAllYearlyNotes=Ce;u.getDailyNote=ue;u.getDailyNoteSettings=H;u.getDateFromFile=D;u.getDateFromPath=ge;u.getDateUID=A;u.getMonthlyNote=he;u.getMonthlyNoteSettings=Y;u.getPeriodicNoteSettings=Fe;u.getQuarterlyNote=ye;u.getQuarterlyNoteSettings=j;u.getTemplateInfo=B;u.getWeeklyNote=pe;u.getWeeklyNoteSettings=V;u.getYearlyNote=ve;u.getYearlyNoteSettings=q});var Ne={};Zt(Ne,{default:()=>nt});module.exports=te(Ne);var jt=require(\"obsidian\");var F=require(\"obsidian\");var v=require(\"obsidian\"),ee=\"https://raw.githubusercontent.com/\",ne=async(s,t=!0,n=\"\")=>{let e=`https://api.github.com/repos/${s}`;try{let i=await(0,v.request)({url:e,headers:n?{Authorization:`Token ${n}`}:{}});return(await JSON.parse(i)).private}catch(i){return t&&console.log(\"error in isPrivateRepo\",e,i),!1}},K=async(s,t,n,e=!0,i=\"\")=>{try{if(await ne(s,e,i)){let g=`https://api.github.com/repos/${s}/releases`,r=await(0,v.request)({url:g,headers:{Authorization:`Token ${i}`}}),T=(await JSON.parse(r)).find(f=>f.tag_name===t);if(!T)return null;let c=T.assets.find(f=>f.name===n);if(!c)return null;let m=await(0,v.request)({url:c.url,headers:{Authorization:`Token ${i}`,Accept:\"application/octet-stream\"}});return m===\"Not Found\"||m==='{\"error\":\"Not Found\"}'?null:m}let a=`https://github.com/${s}/releases/download/${t}/${n}`,l=await(0,v.request)({url:a,headers:i?{Authorization:`Token ${i}`}:{}});return l===\"Not Found\"||l==='{\"error\":\"Not Found\"}'?null:l}catch(o){return e&&console.log(\"error in grabReleaseFileFromRepository\",URL,o),null}},ft=async(s,t=!0,n=!0,e=\"\")=>{let i=ee+s+(t?\"/HEAD/manifest.json\":\"/HEAD/manifest-beta.json\");n&&console.log(\"grabManifestJsonFromRepository manifestJsonPath\",i);let o=async l=>{try{return await(0,v.request)({url:\"https://api.github.com/user\",method:\"GET\",headers:{Authorization:`token ${l}`,\"User-Agent\":\"request\",accept:\"application/vnd.github.v3+json\"}}),!0}catch(g){return n&&console.log(\"Token validation error:\",g),!1}},a=!1;e&&(a=await o(e),n&&console.log(\"Token valid:\",a));try{let l=await(0,v.request)({url:i,headers:a?{Authorization:`Token ${e}`}:{}});return n&&console.log(\"grabManifestJsonFromRepository response\",l),l===\"404: Not Found\"?null:await JSON.parse(l)}catch(l){return l!==\"Error: Request failed, status 404\"&&n&&console.log(`error in grabManifestJsonFromRepository for ${i}`,l),null}},ht=async(s=!0)=>{let t=\"https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugins.json\";try{let n=await(0,v.request)({url:t});return n===\"404: Not Found\"?null:await JSON.parse(n)}catch(n){return s&&console.log(\"error in grabCommmunityPluginList\",n),null}},bt=async(s=!0)=>{let t=\"https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-css-themes.json\";try{let n=await(0,v.request)({url:t});return n===\"404: Not Found\"?null:await JSON.parse(n)}catch(n){return s&&console.log(\"error in grabCommmunityThemesList\",n),null}},I=async(s,t=!1,n=!1)=>{let e=`https://raw.githubusercontent.com/${s}/HEAD/theme${t?\"-beta\":\"\"}.css`;try{let i=await(0,v.request)({url:e});return i===\"404: Not Found\"?null:i}catch(i){return n&&console.log(\"error in grabCommmunityThemeCssFile\",i),null}},wt=async(s,t=!0)=>{let n=`https://raw.githubusercontent.com/${s}/HEAD/manifest.json`;try{let e=await(0,v.request)({url:n});return e===\"404: Not Found\"?null:e}catch(e){return t&&console.log(\"error in grabCommmunityThemeManifestFile\",e),null}},ie=s=>{let t=0;for(let n=0;n<s.length;n++)t+=s.charCodeAt(n);return t},M=s=>ie(s).toString(),$=async(s,t,n)=>{let e=await I(s,t,n);return e?M(e):\"0\"},se=async(s,t,n=!0)=>{let e=`https://api.github.com/repos/${s}/commits?path=${t}&page=1&per_page=1`;try{let i=await(0,v.request)({url:e});return i===\"404: Not Found\"?null:JSON.parse(i)}catch(i){return n&&console.log(\"error in grabLastCommitInfoForAFile\",i),null}},yt=async(s,t)=>{var e;let n=await se(s,t);return n&&n.length>0&&((e=n[0].commit.committer)!=null&&e.date)?n[0].commit.committer.date:\"\"};var ot={pluginList:[],pluginSubListFrozenVersion:[],themesList:[],updateAtStartup:!0,updateThemesAtStartup:!0,enableAfterInstall:!0,loggingEnabled:!1,loggingPath:\"BRAT-log\",loggingVerboseEnabled:!1,debuggingMode:!1,notificationsEnabled:!0,personalAccessToken:\"\"};function Tt(s,t,n=\"\"){let e=!1;s.settings.pluginList.contains(t)||(s.settings.pluginList.unshift(t),e=!0),n!==\"\"&&s.settings.pluginSubListFrozenVersion.filter(i=>i.repo===t).length===0&&(s.settings.pluginSubListFrozenVersion.unshift({repo:t,version:n}),e=!0),e&&s.saveSettings()}function Pt(s,t){return s.settings.pluginList.contains(t)}function vt(s,t,n){let e={repo:t,lastUpdate:M(n)};s.settings.themesList.unshift(e),s.saveSettings()}function Ct(s,t){return!!s.settings.themesList.find(e=>e.repo===t)}function At(s,t,n){for(let e of s.settings.themesList)e.repo===t&&(e.lastUpdate=n,s.saveSettings())}var x=require(\"obsidian\");var G=require(\"obsidian\");function d(s,t,n=10,e){if(!s.settings.notificationsEnabled)return;let i=e?G.Platform.isDesktop?\"(click=dismiss, right-click=Info)\":\"(click=dismiss)\":\"\",o=new G.Notice(`BRAT\n${t}\n${i}`,n*1e3);e&&(o.noticeEl.oncontextmenu=()=>{e()})}var E=(s,t=!0)=>{let n=s.createEl(\"div\");n.style.float=\"right\",t?(n.style.padding=\"15px\",n.style.paddingLeft=\"15px\",n.style.paddingRight=\"15px\",n.style.marginLeft=\"15px\"):(n.style.padding=\"10px\",n.style.paddingLeft=\"15px\",n.style.paddingRight=\"15px\");let e=n.createDiv(\"coffee\");e.addClass(\"ex-twitter-span\"),e.style.paddingLeft=\"10px\";let i=e.createDiv();i.innerText=\"Learn more about my work at:\",e.appendChild(i);let o=e.createEl(\"a\",{href:\"https://tfthacker.com\"});return o.innerText=\"https://tfthacker.com\",n};var N=class extends x.Modal{constructor(t,n,e=!1,i=!1){super(t.app),this.plugin=t,this.betaPlugins=n,this.address=\"\",this.openSettingsTabAfterwards=e,this.useFrozenVersion=i,this.enableAfterInstall=t.settings.enableAfterInstall,this.version=\"\"}async submitForm(){if(this.address===\"\")return;let t=this.address.replace(\"https://github.com/\",\"\");if(t.endsWith(\".git\")&&(t=t.slice(0,-4)),Pt(this.plugin,t)){d(this.plugin,\"This plugin is already in the list for beta testing\",10);return}await this.betaPlugins.addPlugin(t,!1,!1,!1,this.version,!1,this.enableAfterInstall)&&this.close()}onOpen(){this.contentEl.createEl(\"h4\",{text:\"Github repository for beta plugin:\"}),this.contentEl.createEl(\"form\",{},t=>{t.addClass(\"brat-modal\"),new x.Setting(t).addText(i=>{i.setPlaceholder(\"Repository (example: https://github.com/GitubUserName/repository-name)\"),i.setValue(this.address),i.onChange(o=>{this.address=o.trim()}),i.inputEl.addEventListener(\"keydown\",o=>{o.key===\"Enter\"&&this.address!==\" \"&&(this.useFrozenVersion&&this.version!==\"\"||!this.useFrozenVersion)&&(o.preventDefault(),this.submitForm())}),i.inputEl.style.width=\"100%\"}),this.useFrozenVersion&&new x.Setting(t).addText(i=>{i.setPlaceholder(\"Specify the release version tag (example: 1.0.0)\"),i.onChange(o=>{this.version=o.trim()}),i.inputEl.style.width=\"100%\"}),t.createDiv(\"modal-button-container\",i=>{i.createEl(\"label\",{cls:\"mod-checkbox\"},o=>{let a=o.createEl(\"input\",{attr:{tabindex:-1},type:\"checkbox\"});a.checked=this.enableAfterInstall,a.addEventListener(\"click\",()=>{this.enableAfterInstall=a.checked}),o.appendText(\"Enable after installing the plugin\")}),i.createEl(\"button\",{attr:{type:\"button\"},text:\"Never mind\"}).addEventListener(\"click\",()=>{this.close()}),i.createEl(\"button\",{attr:{type:\"submit\"},cls:\"mod-cta\",text:\"Add Plugin\"})});let n=t.createDiv();n.style.borderTop=\"1px solid #ccc\",n.style.marginTop=\"30px\";let e=n.createSpan();e.innerHTML=\"BRAT by <a href='https://bit.ly/o42-twitter'>TFTHacker</a>\",e.style.fontStyle=\"italic\",n.appendChild(e),E(n,!1),window.setTimeout(()=>{let i=t.querySelectorAll(\".brat-modal .setting-item-info\");for(let o of Array.from(i))o.remove()},50),t.addEventListener(\"submit\",i=>{i.preventDefault(),this.address!==\"\"&&(this.useFrozenVersion&&this.version!==\"\"||!this.useFrozenVersion)&&this.submitForm()})})}onClose(){this.openSettingsTabAfterwards&&(this.plugin.app.setting.open(),this.plugin.app.setting.openTabById(this.plugin.APP_ID))}};var Ft=require(\"obsidian\");async function Z(){try{let s=await(0,Ft.requestUrl)(`https://obsidian.md/?${Math.random()}`);return s.status>=200&&s.status<300}catch(s){return!1}}var R=class{constructor(t){this.plugin=t}displayAddNewPluginModal(t=!1,n=!1){new N(this.plugin,this,t,n).open()}async validateRepository(t,n=!1,e=!1){let o=await ft(t,!n,this.plugin.settings.debuggingMode,this.plugin.settings.personalAccessToken);return o?\"id\"in o?\"version\"in o?o:(e&&d(this.plugin,`${t}\nThe version attribute for the release is missing from the manifest file`,15),null):(e&&d(this.plugin,`${t}\nThe plugin id attribute for the release is missing from the manifest file`,15),null):(e&&(d(this.plugin,`${t}\nThis does not seem to be an obsidian plugin, as there is no manifest.json file.`,15),console.error(\"BRAT: validateRepository\",t,n,e)),null)}async getAllReleaseFiles(t,n,e,i=\"\"){let o=i===\"\"?n.version:i,a=e||i!==\"\";return console.log({reallyGetManifestOrNot:a,version:o}),{mainJs:await K(t,o,\"main.js\",this.plugin.settings.debuggingMode,this.plugin.settings.personalAccessToken),manifest:a?await K(t,o,\"manifest.json\",this.plugin.settings.debuggingMode,this.plugin.settings.personalAccessToken):\"\",styles:await K(t,o,\"styles.css\",this.plugin.settings.debuggingMode,this.plugin.settings.personalAccessToken)}}async writeReleaseFilesToPluginFolder(t,n){var o,a;let e=`${(0,F.normalizePath)(`${this.plugin.app.vault.configDir}/plugins/${t}`)}/`,{adapter:i}=this.plugin.app.vault;await i.exists(e)||await i.mkdir(e),await i.write(`${e}main.js`,(o=n.mainJs)!=null?o:\"\"),await i.write(`${e}manifest.json`,(a=n.manifest)!=null?a:\"\"),n.styles&&await i.write(`${e}styles.css`,n.styles)}async addPlugin(t,n=!1,e=!1,i=!1,o=\"\",a=!1,l=this.plugin.settings.enableAfterInstall){this.plugin.settings.debuggingMode&&console.log(\"BRAT: addPlugin\",t,n,e,i,o,a,l);let g=10,r=await this.validateRepository(t,!0,!1),p=!!r;if(p||(r=await this.validateRepository(t,!1,!0)),r===null){let c=`${t}\nA manifest.json or manifest-beta.json file does not exist in the root directory of the repository. This plugin cannot be installed.`;return await this.plugin.log(c,!0),d(this.plugin,c,g),!1}if(!Object.hasOwn(r,\"version\")){let c=`${t}\nThe manifest${p?\"-beta\":\"\"}.json file in the root directory of the repository does not have a version number in the file. This plugin cannot be installed.`;return await this.plugin.log(c,!0),d(this.plugin,c,g),!1}if(!Object.hasOwn(r,\"minAppVersion\")&&!(0,F.requireApiVersion)(r.minAppVersion)){let c=`Plugin: ${t}\n\nThe manifest${p?\"-beta\":\"\"}.json for this plugin indicates that the Obsidian version of the app needs to be ${r.minAppVersion}, but this installation of Obsidian is ${F.apiVersion}. \n\nYou will need to update your Obsidian to use this plugin or contact the plugin developer for more information.`;return await this.plugin.log(c,!0),d(this.plugin,c,30),!1}let T=async()=>{let c=await this.getAllReleaseFiles(t,r,p,o);if(console.log(\"rFiles\",c),(p||c.manifest===\"\")&&(c.manifest=JSON.stringify(r)),this.plugin.settings.debuggingMode&&console.log(\"BRAT: rFiles.manifest\",p,c),c.mainJs===null){let m=`${t}\nThe release is not complete and cannot be download. main.js is missing from the Release`;return await this.plugin.log(m,!0),d(this.plugin,m,g),null}return c};if(!n||a){let c=await T();if(c===null)return!1;if(await this.writeReleaseFilesToPluginFolder(r.id,c),a||Tt(this.plugin,t,o),l){let{plugins:m}=this.plugin.app,f=(0,F.normalizePath)(`${m.getPluginFolder()}/${r.id}`);await m.loadManifest(f),await m.enablePluginAndSave(r.id)}if(await this.plugin.app.plugins.loadManifests(),a)await this.reloadPlugin(r.id),await this.plugin.log(`${t} reinstalled`,!0),d(this.plugin,`${t}\nPlugin has been reinstalled and reloaded.`,g);else{let m=o===\"\"?\"\":` (version: ${o})`,f=`${t}${m}\nThe plugin has been registered with BRAT.`;l||(f+=\" You may still need to enable it the Community Plugin List.\"),await this.plugin.log(f,!0),d(this.plugin,f,g)}}else{let c=`${this.plugin.app.vault.configDir}/plugins/${r.id}/`,m=\"\";try{m=await this.plugin.app.vault.adapter.read(`${c}manifest.json`)}catch(w){if(w.errno===-4058||w.errno===-2)return await this.addPlugin(t,!1,p,!1,o),!0;console.log(\"BRAT - Local Manifest Load\",r.id,JSON.stringify(w,null,2))}if(o!==\"\"||this.plugin.settings.pluginSubListFrozenVersion.map(w=>w.repo).includes(t))return d(this.plugin,`The version of ${t} is frozen, not updating.`,3),!1;let f=await JSON.parse(m);if(f.version!==r.version){let w=await T();if(w===null)return!1;if(e){let h=`There is an update available for ${r.id} from version ${f.version} to ${r.version}. `;await this.plugin.log(`${h}[Release Info](https://github.com/${t}/releases/tag/${r.version})`,!0),d(this.plugin,h,30,()=>{r&&window.open(`https://github.com/${t}/releases/tag/${r.version}`)})}else{await this.writeReleaseFilesToPluginFolder(r.id,w),await this.plugin.app.plugins.loadManifests(),await this.reloadPlugin(r.id);let h=`${r.id}\nPlugin has been updated from version ${f.version} to ${r.version}. `;await this.plugin.log(`${h}[Release Info](https://github.com/${t}/releases/tag/${r.version})`,!0),d(this.plugin,h,30,()=>{r&&window.open(`https://github.com/${t}/releases/tag/${r.version}`)})}}else i&&d(this.plugin,`No update available for ${t}`,3)}return!0}async reloadPlugin(t){let{plugins:n}=this.plugin.app;try{await n.disablePlugin(t),await n.enablePlugin(t)}catch(e){this.plugin.settings.debuggingMode&&console.log(\"reload plugin\",e)}}async updatePlugin(t,n=!1,e=!1,i=!1){let o=await this.addPlugin(t,!0,n,e,\"\",i);return!o&&!n&&d(this.plugin,`${t}\nUpdate of plugin failed.`),o}async checkForPluginUpdatesAndInstallUpdates(t=!1,n=!1){if(!await Z()){console.log(\"BRAT: No internet detected.\");return}let e,i=\"Checking for plugin updates STARTED\";await this.plugin.log(i,!0),t&&this.plugin.settings.notificationsEnabled&&(e=new F.Notice(`BRAT\n${i}`,3e4));let o=new Set(this.plugin.settings.pluginSubListFrozenVersion.map(l=>l.repo));for(let l of this.plugin.settings.pluginList)o.has(l)||await this.updatePlugin(l,n);let a=\"Checking for plugin updates COMPLETED\";await this.plugin.log(a,!0),t&&(e&&e.hide(),d(this.plugin,a,10))}deletePlugin(t){let n=`Removed ${t} from BRAT plugin list`;this.plugin.log(n,!0),this.plugin.settings.pluginList=this.plugin.settings.pluginList.filter(e=>e!==t),this.plugin.settings.pluginSubListFrozenVersion=this.plugin.settings.pluginSubListFrozenVersion.filter(e=>e.repo!==t),this.plugin.saveSettings()}getEnabledDisabledPlugins(t){let n=this.plugin.app.plugins,e=Object.values(n.manifests),i=Object.values(n.plugins).map(o=>o.manifest);return t?e.filter(o=>i.find(a=>o.id===a.id)):e.filter(o=>!i.find(a=>o.id===a.id))}};var k=require(\"obsidian\");var O=async(s,t,n)=>{let e=await I(t,!0,s.settings.debuggingMode);if(e||(e=await I(t,!1,s.settings.debuggingMode)),!e)return d(s,\"There is no theme.css or theme-beta.css file in the root path of this repository, so there is no theme to install.\"),!1;let i=await wt(t,s.settings.debuggingMode);if(!i)return d(s,\"There is no manifest.json file in the root path of this repository, so theme cannot be installed.\"),!1;let o=await JSON.parse(i),a=(0,k.normalizePath)(oe(s)+o.name),{adapter:l}=s.app.vault;await l.exists(a)||await l.mkdir(a),await l.write((0,k.normalizePath)(`${a}/theme.css`),e),await l.write((0,k.normalizePath)(`${a}/manifest.json`),i),At(s,t,M(e));let g=\"\";return n?(vt(s,t,e),g=`${o.name} theme installed from ${t}. `,setTimeout(()=>{s.app.customCss.setTheme(o.name)},500)):g=`${o.name} theme updated from ${t}.`,s.log(`${g}[Theme Info](https://github.com/${t})`,!1),d(s,g,20,()=>{window.open(`https://github.com/${t}`)}),!0},L=async(s,t)=>{if(!await Z()){console.log(\"BRAT: No internet detected.\");return}let n,e=\"Checking for beta theme updates STARTED\";await s.log(e,!0),t&&s.settings.notificationsEnabled&&(n=new k.Notice(`BRAT\n${e}`,3e4));for(let o of s.settings.themesList){let a=await $(o.repo,!0,s.settings.debuggingMode);a===\"0\"&&(a=await $(o.repo,!1,s.settings.debuggingMode)),console.log(\"BRAT: lastUpdateOnline\",a),a!==o.lastUpdate&&await O(s,o.repo,!1)}let i=\"Checking for beta theme updates COMPLETED\";(async()=>await s.log(i,!0))(),t&&(s.settings.notificationsEnabled&&n&&n.hide(),d(s,i))},X=(s,t)=>{s.settings.themesList=s.settings.themesList.filter(e=>e.repo!==t),s.saveSettings();let n=`Removed ${t} from BRAT themes list and will no longer be updated. However, the theme files still exist in the vault. To remove them, go into Settings > Appearance and remove the theme.`;s.log(n,!0),d(s,n)},oe=s=>`${(0,k.normalizePath)(`${s.app.vault.configDir}/themes`)}/`;var tt=require(\"obsidian\");var S=class extends tt.Modal{constructor(t,n=!1){super(t.app),this.plugin=t,this.address=\"\",this.openSettingsTabAfterwards=n}async submitForm(){if(this.address===\"\")return;let t=this.address.replace(\"https://github.com/\",\"\");if(Ct(this.plugin,t)){d(this.plugin,\"This theme is already in the list for beta testing\",10);return}await O(this.plugin,t,!0)&&this.close()}onOpen(){this.contentEl.createEl(\"h4\",{text:\"Github repository for beta theme:\"}),this.contentEl.createEl(\"form\",{},t=>{t.addClass(\"brat-modal\"),new tt.Setting(t).addText(i=>{i.setPlaceholder(\"Repository (example: https://github.com/GitubUserName/repository-name\"),i.setValue(this.address),i.onChange(o=>{this.address=o.trim()}),i.inputEl.addEventListener(\"keydown\",o=>{o.key===\"Enter\"&&this.address!==\" \"&&(o.preventDefault(),this.submitForm())}),i.inputEl.style.width=\"100%\",window.setTimeout(()=>{let o=document.querySelector(\".setting-item-info\");o&&o.remove(),i.inputEl.focus()},10)}),t.createDiv(\"modal-button-container\",i=>{i.createEl(\"button\",{attr:{type:\"button\"},text:\"Never mind\"}).addEventListener(\"click\",()=>{this.close()}),i.createEl(\"button\",{attr:{type:\"submit\"},cls:\"mod-cta\",text:\"Add Theme\"})});let n=t.createDiv();n.style.borderTop=\"1px solid #ccc\",n.style.marginTop=\"30px\";let e=n.createSpan();e.innerHTML=\"BRAT by <a href='https://bit.ly/o42-twitter'>TFTHacker</a>\",e.style.fontStyle=\"italic\",n.appendChild(e),E(n,!1),window.setTimeout(()=>{let i=t.querySelectorAll(\".brat-modal .setting-item-info\");for(let o of Array.from(i))o.remove()},50),t.addEventListener(\"submit\",i=>{i.preventDefault(),this.address!==\"\"&&this.submitForm()})})}onClose(){this.openSettingsTabAfterwards&&(this.plugin.app.setting.openTab(),this.plugin.app.setting.openTabById(this.plugin.APP_ID))}};var St=require(\"obsidian\"),C=class extends St.FuzzySuggestModal{constructor(n){super(n.app);this.data=[];this.scope.register([\"Shift\"],\"Enter\",e=>{this.enterTrigger(e)}),this.scope.register([\"Ctrl\"],\"Enter\",e=>{this.enterTrigger(e)})}setSuggesterData(n){this.data=n}display(n){this.callbackFunction=n,this.open()}getItems(){return this.data}getItemText(n){return n.display}onChooseItem(){}renderSuggestion(n,e){e.createEl(\"div\",{text:n.item.display})}enterTrigger(n){var o;let e=(o=document.querySelector(\".suggestion-item.is-selected div\"))==null?void 0:o.textContent,i=this.data.find(a=>a.display===e);i&&(this.invokeCallback(i,n),this.close())}onChooseSuggestion(n,e){this.invokeCallback(n.item,e)}invokeCallback(n,e){typeof this.callbackFunction==\"function\"&&this.callbackFunction(n,e)}};var U=class{constructor(t){this.bratCommands=[{id:\"AddBetaPlugin\",icon:\"BratIcon\",name:\"Plugins: Add a beta plugin for testing\",showInRibbon:!0,callback:()=>{this.plugin.betaPlugins.displayAddNewPluginModal(!1,!1)}},{id:\"AddBetaPluginWithFrozenVersion\",icon:\"BratIcon\",name:\"Plugins: Add a beta plugin with frozen version based on a release tag\",showInRibbon:!0,callback:()=>{this.plugin.betaPlugins.displayAddNewPluginModal(!1,!0)}},{id:\"checkForUpdatesAndUpdate\",icon:\"BratIcon\",name:\"Plugins: Check for updates to all beta plugins and UPDATE\",showInRibbon:!0,callback:async()=>{await this.plugin.betaPlugins.checkForPluginUpdatesAndInstallUpdates(!0,!1)}},{id:\"checkForUpdatesAndDontUpdate\",icon:\"BratIcon\",name:\"Plugins: Only check for updates to beta plugins, but don't Update\",showInRibbon:!0,callback:async()=>{await this.plugin.betaPlugins.checkForPluginUpdatesAndInstallUpdates(!0,!0)}},{id:\"updateOnePlugin\",icon:\"BratIcon\",name:\"Plugins: Choose a single plugin version to update\",showInRibbon:!0,callback:()=>{let t=new Set(this.plugin.settings.pluginSubListFrozenVersion.map(i=>i.repo)),n=Object.values(this.plugin.settings.pluginList).filter(i=>!t.has(i)).map(i=>({display:i,info:i})),e=new C(this.plugin);e.setSuggesterData(n),e.display(i=>{let o=`Checking for updates for ${i.info}`;this.plugin.log(o,!0),d(this.plugin,`\n${o}`,3),this.plugin.betaPlugins.updatePlugin(i.info,!1,!0)})}},{id:\"reinstallOnePlugin\",icon:\"BratIcon\",name:\"Plugins: Choose a single plugin to reinstall\",showInRibbon:!0,callback:()=>{let t=new Set(this.plugin.settings.pluginSubListFrozenVersion.map(i=>i.repo)),n=Object.values(this.plugin.settings.pluginList).filter(i=>!t.has(i)).map(i=>({display:i,info:i})),e=new C(this.plugin);e.setSuggesterData(n),e.display(i=>{let o=`Reinstalling ${i.info}`;d(this.plugin,`\n${o}`,3),this.plugin.log(o,!0),this.plugin.betaPlugins.updatePlugin(i.info,!1,!1,!0)})}},{id:\"restartPlugin\",icon:\"BratIcon\",name:\"Plugins: Restart a plugin that is already installed\",showInRibbon:!0,callback:()=>{let t=Object.values(this.plugin.app.plugins.manifests).map(e=>({display:e.id,info:e.id})),n=new C(this.plugin);n.setSuggesterData(t),n.display(e=>{d(this.plugin,`${e.info}\nPlugin reloading .....`,5),this.plugin.betaPlugins.reloadPlugin(e.info)})}},{id:\"disablePlugin\",icon:\"BratIcon\",name:\"Plugins: Disable a plugin - toggle it off\",showInRibbon:!0,callback:()=>{let t=this.plugin.betaPlugins.getEnabledDisabledPlugins(!0).map(e=>({display:`${e.name} (${e.id})`,info:e.id})),n=new C(this.plugin);n.setSuggesterData(t),n.display(e=>{this.plugin.log(`${e.display} plugin disabled`,!1),this.plugin.settings.debuggingMode&&console.log(e.info),this.plugin.app.plugins.disablePluginAndSave(e.info)})}},{id:\"enablePlugin\",icon:\"BratIcon\",name:\"Plugins: Enable a plugin - toggle it on\",showInRibbon:!0,callback:()=>{let t=this.plugin.betaPlugins.getEnabledDisabledPlugins(!1).map(e=>({display:`${e.name} (${e.id})`,info:e.id})),n=new C(this.plugin);n.setSuggesterData(t),n.display(e=>{this.plugin.log(`${e.display} plugin enabled`,!1),this.plugin.app.plugins.enablePluginAndSave(e.info)})}},{id:\"openGitHubZRepository\",icon:\"BratIcon\",name:\"Plugins: Open the GitHub repository for a plugin\",showInRibbon:!0,callback:async()=>{let t=await ht(this.plugin.settings.debuggingMode);if(t){let n=Object.values(t).map(o=>({display:`Plugin: ${o.name}  (${o.repo})`,info:o.repo})),e=Object.values(this.plugin.settings.pluginList).map(o=>({display:`BRAT: ${o}`,info:o}));for(let o of n)e.push(o);let i=new C(this.plugin);i.setSuggesterData(e),i.display(o=>{o.info&&window.open(`https://github.com/${o.info}`)})}}},{id:\"openGitHubRepoTheme\",icon:\"BratIcon\",name:\"Themes: Open the GitHub repository for a theme (appearance)\",showInRibbon:!0,callback:async()=>{let t=await bt(this.plugin.settings.debuggingMode);if(t){let n=Object.values(t).map(i=>({display:`Theme: ${i.name}  (${i.repo})`,info:i.repo})),e=new C(this.plugin);e.setSuggesterData(n),e.display(i=>{i.info&&window.open(`https://github.com/${i.info}`)})}}},{id:\"opentPluginSettings\",icon:\"BratIcon\",name:\"Plugins: Open Plugin Settings Tab\",showInRibbon:!0,callback:()=>{let t=this.plugin.app.setting,n=Object.values(t.pluginTabs).map(o=>({display:`Plugin: ${o.name}`,info:o.id})),e=new C(this.plugin),i=Object.values(t.settingTabs).map(o=>({display:`Core: ${o.name}`,info:o.id}));for(let o of n)i.push(o);e.setSuggesterData(i),e.display(o=>{t.open(),t.openTabById(o.info)})}},{id:\"GrabBetaTheme\",icon:\"BratIcon\",name:\"Themes: Grab a beta theme for testing from a Github repository\",showInRibbon:!0,callback:()=>{new S(this.plugin).open()}},{id:\"updateBetaThemes\",icon:\"BratIcon\",name:\"Themes: Update beta themes\",showInRibbon:!0,callback:async()=>{await L(this.plugin,!0)}},{id:\"allCommands\",icon:\"BratIcon\",name:\"All Commands list\",showInRibbon:!1,callback:()=>{this.ribbonDisplayCommands()}}];this.plugin=t;for(let n of this.bratCommands)this.plugin.addCommand({id:n.id,name:n.name,icon:n.icon,callback:()=>{n.callback()}})}ribbonDisplayCommands(){let t=[];for(let a of this.bratCommands)a.showInRibbon&&t.push({display:a.name,info:a.callback});let n=new C(this.plugin),e=this.plugin.app.setting,i=Object.values(e.settingTabs).map(a=>({display:`Core: ${a.name}`,info:()=>{e.open(),e.openTabById(a.id)}})),o=Object.values(e.pluginTabs).map(a=>({display:`Plugin: ${a.name}`,info:()=>{e.open(),e.openTabById(a.id)}}));t.push({display:\"---- Core Plugin Settings ----\",info:()=>{this.ribbonDisplayCommands()}});for(let a of i)t.push(a);t.push({display:\"---- Plugin Settings ----\",info:()=>{this.ribbonDisplayCommands()}});for(let a of o)t.push(a);n.setSuggesterData(t),n.display(a=>{typeof a.info==\"function\"&&a.info()})}};var y=require(\"obsidian\");var at=(s,t)=>{let n=new DocumentFragment,e=document.createElement(\"a\");if(e.textContent=s,e.href=`https://github.com/${s}`,n.appendChild(e),t){let i=document.createTextNode(t);n.appendChild(i)}return n},et=class extends y.PluginSettingTab{constructor(t,n){super(t,n),this.plugin=n}display(){let{containerEl:t}=this;t.empty(),new y.Setting(t).setName(\"Auto-enable plugins after installation\").setDesc('If enabled beta plugins will be automatically enabled after installtion by default. Note: you can toggle this on and off for each plugin in the \"Add Plugin\" form.').addToggle(e=>{e.setValue(this.plugin.settings.enableAfterInstall),e.onChange(async i=>{this.plugin.settings.enableAfterInstall=i,await this.plugin.saveSettings()})}),new y.Setting(t).setName(\"Auto-update plugins at startup\").setDesc(\"If enabled all beta plugins will be checked for updates each time Obsidian starts. Note: this does not update frozen version plugins.\").addToggle(e=>{e.setValue(this.plugin.settings.updateAtStartup),e.onChange(async i=>{this.plugin.settings.updateAtStartup=i,await this.plugin.saveSettings()})}),new y.Setting(t).setName(\"Auto-update themes at startup\").setDesc(\"If enabled all beta themes will be checked for updates each time Obsidian starts.\").addToggle(e=>{e.setValue(this.plugin.settings.updateThemesAtStartup),e.onChange(async i=>{this.plugin.settings.updateThemesAtStartup=i,await this.plugin.saveSettings()})}),E(t,!0),t.createEl(\"hr\"),new y.Setting(t).setName(\"Beta plugin list\").setHeading(),t.createEl(\"div\",{text:'The following is a list of beta plugins added via the command palette \"Add a beta plugin for testing\" or \"Add a beta plugin with frozen version for testing\". A frozen version is a specific release of a plugin based on its release tag. '}),t.createEl(\"p\"),t.createEl(\"div\",{text:\"Click the x button next to a plugin to remove it from the list.\"}),t.createEl(\"p\"),t.createEl(\"span\").createEl(\"b\",{text:\"Note: \"}),t.createSpan({text:\"This does not delete the plugin, this should be done from the  Community Plugins tab in Settings.\"}),new y.Setting(t).addButton(e=>{e.setButtonText(\"Add Beta plugin\"),e.onClick(()=>{this.plugin.app.setting.close(),this.plugin.betaPlugins.displayAddNewPluginModal(!0,!1)})});let n=new Set(this.plugin.settings.pluginSubListFrozenVersion.map(e=>e.repo));for(let e of this.plugin.settings.pluginList)n.has(e)||new y.Setting(t).setName(at(e)).addButton(i=>{i.setIcon(\"cross\"),i.setTooltip(\"Delete this beta plugin\"),i.onClick(()=>{if(i.buttonEl.textContent===\"\")i.setButtonText(\"Click once more to confirm removal\");else{let{buttonEl:o}=i,{parentElement:a}=o;a!=null&&a.parentElement&&(a.parentElement.remove(),this.plugin.betaPlugins.deletePlugin(e))}})});new y.Setting(t).addButton(e=>{e.setButtonText(\"Add Beta plugin with frozen version\"),e.onClick(()=>{this.plugin.app.setting.close(),this.plugin.betaPlugins.displayAddNewPluginModal(!0,!0)})});for(let e of this.plugin.settings.pluginSubListFrozenVersion)new y.Setting(t).setName(at(e.repo,` (version ${e.version})`)).addButton(i=>{i.setIcon(\"cross\"),i.setTooltip(\"Delete this beta plugin\"),i.onClick(()=>{if(i.buttonEl.textContent===\"\")i.setButtonText(\"Click once more to confirm removal\");else{let{buttonEl:o}=i,{parentElement:a}=o;a!=null&&a.parentElement&&(a.parentElement.remove(),this.plugin.betaPlugins.deletePlugin(e.repo))}})});new y.Setting(t).setName(\"Beta themes list\").setHeading(),new y.Setting(t).addButton(e=>{e.setButtonText(\"Add Beta Theme\"),e.onClick(()=>{this.plugin.app.setting.close(),new S(this.plugin).open()})});for(let e of this.plugin.settings.themesList)new y.Setting(t).setName(at(e.repo)).addButton(i=>{i.setIcon(\"cross\"),i.setTooltip(\"Delete this beta theme\"),i.onClick(()=>{if(i.buttonEl.textContent===\"\")i.setButtonText(\"Click once more to confirm removal\");else{let{buttonEl:o}=i,{parentElement:a}=o;a!=null&&a.parentElement&&(a.parentElement.remove(),X(this.plugin,e.repo))}})});new y.Setting(t).setName(\"Monitoring\").setHeading(),new y.Setting(t).setName(\"Enable Notifications\").setDesc(\"BRAT will provide popup notifications for its various activities. Turn this off means  no notifications from BRAT.\").addToggle(e=>{e.setValue(this.plugin.settings.notificationsEnabled),e.onChange(async i=>{this.plugin.settings.notificationsEnabled=i,await this.plugin.saveSettings()})}),new y.Setting(t).setName(\"Enable Logging\").setDesc(\"Plugin updates will be logged to a file in the log file.\").addToggle(e=>{e.setValue(this.plugin.settings.loggingEnabled),e.onChange(async i=>{this.plugin.settings.loggingEnabled=i,await this.plugin.saveSettings()})}),new y.Setting(this.containerEl).setName(\"BRAT Log File Location\").setDesc(\"Logs will be saved to this file. Don't add .md to the file name.\").addSearch(e=>{e.setPlaceholder(\"Example: BRAT-log\").setValue(this.plugin.settings.loggingPath).onChange(async i=>{this.plugin.settings.loggingPath=i,await this.plugin.saveSettings()})}),new y.Setting(t).setName(\"Enable Verbose Logging\").setDesc(\"Get a lot  more information in  the log.\").addToggle(e=>{e.setValue(this.plugin.settings.loggingVerboseEnabled),e.onChange(async i=>{this.plugin.settings.loggingVerboseEnabled=i,await this.plugin.saveSettings()})}),new y.Setting(t).setName(\"Debugging Mode\").setDesc(\"Atomic Bomb level console logging. Can be used for troubleshoting and development.\").addToggle(e=>{e.setValue(this.plugin.settings.debuggingMode),e.onChange(async i=>{this.plugin.settings.debuggingMode=i,await this.plugin.saveSettings()})}),new y.Setting(t).setName(\"Personal Access Token\").setDesc(\"If you need to access private repositories, enter the personal access token here.\").addText(e=>{var i;e.setPlaceholder(\"Enter your personal access token\").setValue((i=this.plugin.settings.personalAccessToken)!=null?i:\"\").onChange(async o=>{this.plugin.settings.personalAccessToken=o,await this.plugin.saveSettings()})})}};var Nt=require(\"obsidian\");function kt(){(0,Nt.addIcon)(\"BratIcon\",'<path fill=\"currentColor\" stroke=\"currentColor\"  d=\"M 41.667969 41.667969 C 41.667969 39.367188 39.800781 37.5 37.5 37.5 C 35.199219 37.5 33.332031 39.367188 33.332031 41.667969 C 33.332031 43.96875 35.199219 45.832031 37.5 45.832031 C 39.800781 45.832031 41.667969 43.96875 41.667969 41.667969 Z M 60.417969 58.582031 C 59.460938 58.023438 58.320312 57.867188 57.25 58.148438 C 56.179688 58.429688 55.265625 59.125 54.707031 60.082031 C 53.746094 61.777344 51.949219 62.820312 50 62.820312 C 48.050781 62.820312 46.253906 61.777344 45.292969 60.082031 C 44.734375 59.125 43.820312 58.429688 42.75 58.148438 C 41.679688 57.867188 40.539062 58.023438 39.582031 58.582031 C 37.597656 59.726562 36.910156 62.257812 38.042969 64.25 C 40.5 68.53125 45.0625 71.171875 50 71.171875 C 54.9375 71.171875 59.5 68.53125 61.957031 64.25 C 63.089844 62.257812 62.402344 59.726562 60.417969 58.582031 Z M 62.5 37.5 C 60.199219 37.5 58.332031 39.367188 58.332031 41.667969 C 58.332031 43.96875 60.199219 45.832031 62.5 45.832031 C 64.800781 45.832031 66.667969 43.96875 66.667969 41.667969 C 66.667969 39.367188 64.800781 37.5 62.5 37.5 Z M 50 8.332031 C 26.988281 8.332031 8.332031 26.988281 8.332031 50 C 8.332031 73.011719 26.988281 91.667969 50 91.667969 C 73.011719 91.667969 91.667969 73.011719 91.667969 50 C 91.667969 26.988281 73.011719 8.332031 50 8.332031 Z M 50 83.332031 C 33.988281 83.402344 20.191406 72.078125 17.136719 56.363281 C 14.078125 40.644531 22.628906 24.976562 37.5 19.042969 C 37.457031 19.636719 37.457031 20.238281 37.5 20.832031 C 37.5 27.738281 43.097656 33.332031 50 33.332031 C 52.300781 33.332031 54.167969 31.46875 54.167969 29.167969 C 54.167969 26.867188 52.300781 25 50 25 C 47.699219 25 45.832031 23.132812 45.832031 20.832031 C 45.832031 18.53125 47.699219 16.667969 50 16.667969 C 68.410156 16.667969 83.332031 31.589844 83.332031 50 C 83.332031 68.410156 68.410156 83.332031 50 83.332031 Z M 50 83.332031 \" />')}var z=class{constructor(t){this.console=(t,...n)=>{console.log(`BRAT: ${t}`,...n)};this.themes={themeseCheckAndUpates:async t=>{await L(this.plugin,t)},themeInstallTheme:async t=>{let n=t.replace(\"https://github.com/\",\"\");await O(this.plugin,n,!0)},themesDelete:t=>{let n=t.replace(\"https://github.com/\",\"\");X(this.plugin,n)},grabCommmunityThemeCssFile:async(t,n=!1)=>await I(t,n,this.plugin.settings.debuggingMode),grabChecksumOfThemeCssFile:async(t,n=!1)=>await $(t,n,this.plugin.settings.debuggingMode),grabLastCommitDateForFile:async(t,n)=>await yt(t,n)};this.plugin=t}};var W=require(\"obsidian\"),Vt=Xt(Ht());async function Yt(s,t,n=!1){if(s.settings.debuggingMode&&console.log(`BRAT: ${t}`),s.settings.loggingEnabled){if(!s.settings.loggingVerboseEnabled&&n)return;let e=`${s.settings.loggingPath}.md`,i=`[[${(0,W.moment)().format((0,Vt.getDailyNoteSettings)().format).toString()}]] ${(0,W.moment)().format(\"HH:mm\")}`,o=window.require(\"os\"),a=W.Platform.isDesktop?o.hostname():\"MOBILE\",l=`${i} ${a} ${t.replace(`\n`,\" \")}\n`,g=s.app.vault.getAbstractFileByPath(e);g?await s.app.vault.append(g,l):g=await s.app.vault.create(e,l)}}var nt=class extends jt.Plugin{constructor(){super(...arguments);this.APP_NAME=\"BRAT\";this.APP_ID=\"obsidian42-brat\";this.settings=ot;this.betaPlugins=new R(this);this.commands=new U(this);this.bratApi=new z(this);this.obsidianProtocolHandler=n=>{if(!n.plugin&&!n.theme){d(this,\"Could not locate the repository from the URL.\",10);return}for(let e of[\"plugin\",\"theme\"])if(n[e]){let i=e===\"plugin\"?new N(this,this.betaPlugins):new S(this);i.address=n[e],i.open();return}}}onload(){console.log(`loading ${this.APP_NAME}`),kt(),this.addRibbonIcon(\"BratIcon\",\"BRAT\",()=>{this.commands.ribbonDisplayCommands()}),this.loadSettings().then(()=>{this.app.workspace.onLayoutReady(()=>{this.addSettingTab(new et(this.app,this)),this.registerObsidianProtocolHandler(\"brat\",this.obsidianProtocolHandler),this.settings.updateAtStartup&&setTimeout(()=>{this.betaPlugins.checkForPluginUpdatesAndInstallUpdates(!1)},6e4),this.settings.updateThemesAtStartup&&setTimeout(()=>{L(this,!1)},12e4),setTimeout(()=>{window.bratAPI=this.bratApi},500)})}).catch(n=>{console.error(\"Failed to load settings:\",n)})}async log(n,e=!1){await Yt(this,n,e)}onunload(){console.log(`unloading ${this.APP_NAME}`)}async loadSettings(){this.settings=Object.assign({},ot,await this.loadData())}async saveSettings(){await this.saveData(this.settings)}};\n\n/* nosourcemap */"
  },
  {
    "path": ".obsidian/plugins/obsidian42-brat/manifest.json",
    "content": "{\n\t\"id\": \"obsidian42-brat\",\n\t\"name\": \"BRAT\",\n\t\"version\": \"1.0.6\",\n\t\"minAppVersion\": \"1.7.2\",\n\t\"description\": \"Easily install a beta version of a plugin for testing.\",\n\t\"author\": \"TfTHacker\",\n\t\"authorUrl\": \"https://github.com/TfTHacker/obsidian42-brat\",\n\t\"helpUrl\": \"https://tfthacker.com/BRAT\",\n\t\"isDesktopOnly\": false,\n\t\"fundingUrl\": {\n\t\t\"Visit my site\": \"https://tfthacker.com\"\n\t}\n}"
  },
  {
    "path": ".obsidian/plugins/obsidian42-brat/styles.css",
    "content": ".brat-modal .modal-button-container {\n\tmargin-top: 5px !important;\n}\n"
  },
  {
    "path": ".obsidian/themes/Blue Topaz/manifest.json",
    "content": "{\n    \"name\": \"Blue Topaz\",\n    \"version\": \"2025041201\",\n    \"minAppVersion\": \"1.0.0\",\n    \"author\": \"WhyI & Pkmer\",\n    \"authorUrl\": \"https://github.com/whyt-byte\"\n}\n"
  },
  {
    "path": ".obsidian/themes/Blue Topaz/theme.css",
    "content": "/* \n\n\nIf you want to distribute the whole or parts of the above codes, please copy & paste the following sentences:\n\nPartial style(s) is(are) sourced or adapted from Blue Topaz (https://github.com/PKM-er/Blue-Topaz_Obsidian-css), and I would like to express my appreciation to WhyI (https://github.com/whyt-byte) and pkmer.cn (https://pkmer.cn).\n\n\n*/\n\n/*蓝色托帕石，适合Obsidian v1.5.0。uid [2024121101] flying fly flies制作。如果喜欢，可以在Github里给我星星 https://github.com/whyt-byte */\n/*Blue Topaz for Obsidian v1.5.0, uid [2024121101] created by flying fly flies. Feel free to use, share and modify. If you like the theme, please star me on GitHub https://github.com/whyt-byte */\n\n/*\nMIT License\n\nCopyright (c) 2020 whyt-byte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n\n/* 致谢 Credits：\nthanks pkmer.cn\nMany thanks to @Cuman\n@LillianWho @成雙酱 @嘴上云 @Klaas @Thinkbond @Rainbell129(AKA Lavi) @awyugan @GeoffreyOuO (WooYoo~~~) @锋华 @CZ-15/YZ-10 */\n\n/* @settings\nname: 🥑Blue Topaz Theme\nid: blue-topaz-theme\nsettings:\n  -\n    id: attension\n    title: Attention！Due to obsidian's policy of not being able to use online or local vault images, However, the option to customise the settings and fill in the url is currently supported.\n    title.zh: 注意！由于obsidian的政策，主题无法使用在线或本地库里的图片，相关内置图片选项已删除，需要显示背景图片请自行设置url。\n    type: heading\n    level: 1\n    collapsed: false\n  -\n    id: background-settings\n    title: 1. General settings\n    title.zh: 1. 整体性设置\n    type: heading\n    level: 1\n    collapsed: false\n  -\n    id: color-settings\n    title: 1.1 Color scheme\n    title.zh: 1.1 整体配色\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: color-scheme-options\n    title: Color palette (from Topaz Community)\n    title.zh: 整体配色选择 (由Topaz社区贡献)\n    type: class-select\n    allowEmpty: false\n    default: color-scheme-options-default\n    options:\n      -\n        label: Default\n        value: color-scheme-options-default\n      -\n        label: Avocado\n        value: color-scheme-options-avocado-topaz\n      -\n        label: Monochrome\n        value: color-scheme-options-monochrome-topaz\n      -\n        label: Pink\n        value: color-scheme-options-pink-topaz\n      -\n        label: Topaz-Nord\n        value: color-scheme-options-topaz-nord\n      -\n        label: =↓😺 Created by Topaz Community 🐵↓=\n        value:\n      -\n        label: Flamingo (@Mouth on Cloud & @Rainbell)\n        value: color-scheme-options-flamingo\n      -\n        label: Honey milk (@LillianWho)\n        value: color-scheme-options-honey-milk-topaz\n      -\n        label: 榛子巧克力 Hazelnut chocolate (@LillianWho)\n        value: color-scheme-options-chocolate-topaz\n      -\n        label: Lilac (@awyugan)\n        value: color-scheme-options-lilac\n      -\n        label: Autumn (@LillianWho)\n        value: color-scheme-options-autumn-topaz\n      -\n        label: 魔方 Rubik's Cube (@LillianWho)\n        value: color-scheme-options-lillimon-topaz\n      -\n        label: Simplicity (@Cuman)\n        value: color-scheme-options-simplicity-topaz\n  -\n    id: disable-auto-hide-header\n    title:  Disable auto hide header\n    title.zh: 禁用自动隐藏头部\n    type: class-toggle\n    default: false\n  -\n    id: color-magic\n    title: Color of Rubik's cube palette\n    title.zh: 魔方配色\n    description.zh: 当整体配色为【魔方】时生效\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: magic-main-color\n    title: Main color\n    title.zh: 主题色\n    description.zh: 主题色主要作用于标题，字体，列表等主色调，建议用对比度强，不易疲劳的色系。如果想单独调整个别类目请在2.1中继续细调。\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: magic-low-color\n    title: Low contrast color\n    title.zh: 浅色\n    description.zh: 浅色主要作用于各类触发背景底色，建议用不影响阅读的背景色系。\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: magic-deep-color\n    title: Deep color\n    title.zh: 深色\n    description.zh: 深色主要作用于主题强调色系，用在各种控件，提示等使用，建议用浅色相关的醒目色系。\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-settings\n    title: 1.2 Background images\n    title.zh: 1.2 背景设置\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: background-settings-workplace\n    title: 1.2.1 Workplace background image\n    title.zh: 1.2.1 工作页面背景\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: background-settings-workplace-background-image\n    title: Activate image background\n    title.zh: 开启背景\n    type: class-toggle\n    default: false\n    addCommand: true\n  -\n    id: bt-background-split-container\n    title: Side split container background color\n    title.zh: 侧边分栏背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-settings-workplace-theme-light\n    title: Light mode\n    type: class-select\n    allowEmpty: false\n    default: background-settings-workplace-theme-light-in-the-note\n    options:\n      -\n        label: Blue Mountain\n        value: background-settings-workplace-theme-light-blue-mountain\n      -\n        label: Note\n        value: background-settings-workplace-theme-light-in-the-note\n      -\n        label: Waves\n        value: background-settings-workplace-waves-light\n      -\n        label: Animating waves\n        value: background-settings-workplace-waves2-light\n      -\n        label: Custom\n        value: background-settings-workplace-theme-light-custom-option\n  -\n    id: background-settings-workplace-theme-light-custom\n    title: Custom theme light (url)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置在线图片。 \n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: background-settings-workplace-theme-dark\n    title: Dark mode\n    type: class-select\n    allowEmpty: false\n    default: background-settings-workplace-theme-dark-in-the-sky\n    options:\n      -\n        label: Night sky\n        value: background-settings-workplace-theme-dark-night-sky\n      -\n        label: Dark sky\n        value: background-settings-workplace-theme-dark-dark-sky\n      -\n        label: In the sky\n        value: background-settings-workplace-theme-dark-in-the-sky\n      -\n        label: Waves\n        value: background-settings-workplace-waves\n      -\n        label: Animating waves\n        value: background-settings-workplace-waves2\n      -\n        label: Custom\n        value: background-settings-workplace-theme-dark-custom-option\n  -\n    id: background-settings-workplace-theme-dark-custom\n    title: Custom theme dark (url)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置网络图片。\n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: blur-depth\n    title: Blur radius\n    title.zh: 模糊程度\n    description: To adjust the radius of blur\n    description.zh: 调整背景壁纸模糊程度\n    type: variable-number-slider\n    default: 10\n    format: px\n    min: 0\n    max: 30\n    step: 1\n  -\n    id: brightness-4-bg\n    title: Brightness of image\n    title.zh: 图片亮度\n    description: To adjust the brightness\n    description.zh: 调整背景壁纸亮度\n    type: variable-number-slider\n    default: 0.9\n    min: 0.3\n    max: 1.5\n    step: 0.1\n  -\n    id: saturate-4-bg\n    title: Saturation of image\n    title.zh: 图片饱和度\n    description: To adjust the saturation\n    description.zh: 调整背景壁纸饱和度\n    type: variable-number-slider\n    default: 1\n    min: 0\n    max: 2\n    step: 0.1\n  -\n    id: background-waves-color\n    title: Waves color\n    title.zh: 波浪背景颜色\n    description.zh: 当背景色选择为waves时起作用。\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#4A75DB8C'\n    default-dark: '#4A75DB8C'\n  -\n    id: background-settings-workplace-random\n    title: Random background\n    title.zh: 随机背景\n    description: Images will be refreshed when Obsidian launches; Internet required\n    description.zh: 图片在Obsidian打开时刷新；需要联网\n    type: class-toggle\n    default: false\n  -\n    id: background-settings-markdown-page\n    title: 1.2.2 Note page background image\n    title.zh: 1.2.2 笔记背景\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: background-image-settings-switch\n    title: Toggle note background image\n    title.zh: 开启笔记背景\n    type: class-toggle\n    default: false\n    addCommand: true\n  -\n    id: toggle-nonoverlapping-bg\n    title: Activate non-overlapping note background when toggling workplace background\n    title.zh: 笔记背景和工作页面背景不重叠\n    type: class-toggle\n    default: false\n  -\n    id: background-image-settings-markdown-page-options\n    title: Choose image set\n    title.zh: 选择背景\n    type: class-select\n    allowEmpty: false\n    default: background-image-settings-markdown-page-transparent\n    options:\n      -\n        label: Transparent\n        value: background-image-settings-markdown-page-transparent\n      -\n        label: Custom\n        value: background-image-settings-markdown-page-custom\n  -\n    id: bg-markdown-page-opacity-cp\n    title: Opacity\n    title.zh: 笔记背景透明度\n    type: variable-number-slider\n    default: 0.25\n    min: 0\n    max: 1\n    step: 0.05\n  -\n    id: custom-markdown-page-background-color\n    title: custom markdown page background color\n    title.zh: 自定义笔记背景颜色\n    description.zh: 当背景色选择为custom时起作用。\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#a39b8f'\n    default-dark: '#000414'\n  -\n    id: background-markdown-page-theme-light-custom\n    title: Custom image (Light mode)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置网络图片。\n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: background-markdown-page-theme-dark-custom\n    title: Custom image (Dark mode)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置网络图片。\n    type: variable-text\n    default: url(\"https://\")\n  -\n\n\n  -\n    id: background-notebook-liked-switch\n    title: Toggle notebook-liked background\n    title.zh: 开启笔记网格背景\n    type: class-toggle\n    default: false\n  -\n    id: notebook-liked-markdown-page-options\n    title: Notebook-liked background\n    title.zh: 类笔记背景\n    type: class-select\n    allowEmpty: false\n    default: notebook-liked-markdown-page-grid-notebook-1\n    options:\n      -\n        label: Grid notebook 1 (@CZ-15/YZ-10)\n        value: notebook-liked-markdown-page-grid-notebook-1\n      -\n        label: Grid notebook 2\n        value: notebook-liked-markdown-page-grid-notebook-2\n      -\n        label: Dotted notebook 1\n        value: notebook-liked-markdown-page-dotted-notebook-1\n      -\n        label: Dotted notebook 2\n        value: notebook-liked-markdown-page-dotted-notebook-2\n      -\n        label: Stripe notebook 1\n        value: notebook-liked-markdown-page-stripe-notebook-1\n      -\n        label: Stripe notebook 2\n        value: notebook-liked-markdown-page-stripe-notebook-2\n  -\n    id: toggle-fixed-pattern\n    title: Toggle fixed pattern\n    title.zh: 固定背景\n    type: class-toggle\n    default: false\n  -\n    id: notebook-liked-background-settings\n    title: 1.2.2.1 Notebook-liked background options\n    title.zh: 1.2.2.1 类笔记样式背景设置\n    type: heading\n    level: 4\n    collapsed: false\n  -\n    id: toggle-split-note-background\n    title: Toggle background of split pane\n    title.zh: 取消侧边栏类笔记背景\n    type: class-toggle\n    default: false\n  -\n    id: bg-color-notebook\n    title: Notebook background color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: grid-notebook-line-color-1\n    title: Grid notebook line color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: grid-notebook-line-color-2\n    title: Grid notebook line color for 'Grid 2'\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: dotted-notebook-dot-color\n    title: Dotted notebook dot color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: stripe-notebook-stripe-color\n    title: Stripe notebook stripe color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-settings-command-palette\n    title: 1.2.3 Images of command palette\n    title.zh: 1.2.3 命令面板背景\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: background-image-settings-command-palette-switch\n    title: Toggle images of command palette\n    title.zh: 开启命令面板背景\n    type: class-toggle\n    default: false\n  -\n    id: background-image-settings-command-palette-same-as-workplace\n    title: Same background as workplace's\n    title.zh: 与工作页面背景保持一致\n    type: class-toggle\n    default: false\n  -\n    id: background-image-settings-command-palette-custom\n    title: Custom background image\n    title.zh: 自定义图片\n    type: class-toggle\n    default: false\n  -\n    id: background-command-palette-theme-light-custom\n    title: Custom theme (light, url)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置网络图片。\n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: background-command-palette-theme-dark-custom\n    title: Custom theme (dark, url)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置网络图片。\n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: blur-depth-cp\n    title: Blur radius\n    title.zh: 模糊程度\n    description: To adjust the radius of blur\n    description.zh: 调整背景壁纸模糊程度\n    type: variable-number-slider\n    default: 10\n    format: px\n    min: 0\n    max: 30\n    step: 1\n  -\n    id: brightness-4-bg-cp\n    title: Brightness\n    title.zh: 图片亮度\n    description: To adjust the brightness\n    description.zh: 调整背景壁纸亮度\n    type: variable-number-slider\n    default: 0.9\n    min: 0.3\n    max: 1.5\n    step: 0.1\n  -\n    id: saturate-4-bg-cp\n    title: Saturation\n    title.zh: 图片饱和度\n    description: To adjust the saturation\n    description.zh: 调整背景壁纸饱和度\n    type: variable-number-slider\n    default: 1\n    min: 0\n    max: 2\n    step: 0.1\n  -\n    id: opacity-cp\n    title: Opacity\n    title.zh: 透明度\n    type: variable-number-slider\n    default: 0.25\n    min: 0\n    max: 1\n    step: 0.05\n  -\n    id: background-settings-markdown-page\n    title: 1.2.4 File explorer background\n    title.zh: 1.2.4 文件栏背景\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: toggle-bg-panel-page\n    title: Toggle background image\n    title.zh: 激活文件栏背景\n    type: class-toggle\n    default: false\n  -\n    id: bg-panel-page-opacity-cp\n    title: Opacity\n    title.zh: 透明度\n    type: variable-number-slider\n    default: 0.25\n    min: 0\n    max: 1\n    step: 0.05\n  -\n    id: bg-panel-page-option\n    title: Image picking (Light mode)\n    title.zh: 图片选择 (Light mode)\n    type: class-select\n    allowEmpty: false\n    default: panel-page-bg-theme-light-wall\n    options:\n      -\n        label: Wall\n        value: panel-page-bg-theme-light-wall\n      -\n        label: Custom\n        value: panel-page-bg-theme-light-custom\n  -\n    id: background-panel-page-theme-light-custom\n    title: Custom image (Light mode)\n    description: Customise the background image. Use the format in the Default below for an Online image.\n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置网络图片。\n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: bg-panel-page-option-dark\n    title: Image picking (Dark mode)\n    title.zh: 图片选择 (Dark mode)\n    type: class-select\n    allowEmpty: false\n    default: panel-page-bg-theme-dark-plant\n    options:\n      -\n        label: Plant\n        value: panel-page-bg-theme-dark-plant\n      -\n        label: Custom\n        value: panel-page-bg-theme-dark-custom\n  -\n    id: background-panel-page-theme-dark-custom\n    title: Custom image (Dark mode)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置网络图片。\n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: layout-settings\n    title: 1.3 Layout\n    title.zh: 1.3 界面布局样式\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: left-ribbon-style\n    title: Left ribbon styles\n    title.zh: 左工具栏样式选择\n    type: class-select\n    allowEmpty: false\n    default: default-left-ribbon-style\n    options:\n      -\n        label: Fixed\n        value: default-left-ribbon-style\n      -\n        label: Hide to left\n        value: hide-left-ribbon\n      -\n        label: Hide to the left retention drawer\n        value: hide-left-ribbon-retention-drawer\n      -\n        label: Bubble\n        value: bt-bubble-ribbon\n      -\n        label: Bubble, hide to left\n        value: bt-bubble-ribbon-hide-left\n  -\n    id: search-bar-style-option\n    title: Search bar style\n    title.zh: 文件内搜索栏位置\n    type: class-select\n    allowEmpty: false\n    default: default-search-bar\n    options:\n      -\n        label: Default\n        value: default-search-bar\n      -\n        label: Bottom\n        value: bt-search-bar-bottom\n  -\n    id: bt-status-on\n    title: Fullwidth status bar\n    title.zh: 开启全宽状态栏\n    type: class-toggle\n    default: false\n  -\n    id: scrollbar-style-option\n    title: Scrollbar style\n    title.zh: 滚动条样式\n    type: class-select\n    allowEmpty: false\n    default: default-scrollbar\n    options:\n      -\n        label: Default\n        value: default-scrollbar\n      -\n        label: Hovering (adapted from @subframe7536's css snippet)\n        value: hover-scrollbars\n      -\n        label: Remove Scrollbar\n        value: remove-scrollbars\n      -\n        label: Obsidian default\n        value: native-scrollbars\n  -\n    id: scrollbar-thumb-bg\n    title: Scrollbar thumb background\n    title.zh: 滚动条滑块颜色\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: scrollbar-active-thumb-bg\n    title: Scrollbar thumb background (Active)\n    title.zh: 滚动条滑块颜色 （选择时）\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: view-button-front\n    title: The view status button is placed in front of the header\n    title.zh: 视图切换按钮放置在文章标题前面\n    type: class-toggle\n    default: false\n  -\n    id: tab-title-bar-position\n    title: The tab title bar positioned to the left\n    title.zh: Tab 导航栏位置放置左侧\n    type: class-toggle\n    default: false\n  -\n    id: toggle-divider-lines\n    title: Toggle non-divided-line style\n    title.zh: 无分割线样式\n    type: class-toggle\n    default: false\n  -\n    id: toggle-header-bottom-line\n    title: Toggle non-divided-line header box\n    title.zh: 无分割线文件标题框\n    type: class-toggle\n    default: false\n  -\n    id: layout-style-options\n    title: Layout styles\n    title.zh: 界面布局样式选择\n    type: class-select\n    allowEmpty: false\n    default: layout-style-options-default\n    options:\n      -\n        label: Default\n        value: layout-style-options-default\n      -\n        label: Rectangle\n        value: layout-style-options-rectangle\n      -\n        label: Asymmetric Style of Split Panes\n        value: asymmetric-split-left\n      -\n        label: Bubble\n        value: bt-bubble-layout\n  -\n    id: bt-bubble-settings\n    title: 1.3.1 Bubble settings\n    title.zh: 1.3.1 Bubble设置\n    type: heading\n    level: 3\n    collapsed: false\n  -\n    id: bt-bubble-not-file-tree\n    title: Enable card format for file browser\n    type: class-toggle\n  -\n    id: bt-bubble-layout-hide-borders\n    title: Remove borders of bubbles\n    type: class-toggle\n    default: true\n  -\n    id: bt-bubble-buttons\n    title: Toggle bubble buttons\n    type: class-toggle\n  -\n    id: bt-bubble-layout-padding\n    title: Bubble padding\n    type: variable-text\n    default: 8px\n  -\n    id: bt-bubble-radius\n    title: Bubble radius\n    type: variable-text\n    default: 15px\n  -\n    id: background-settings\n    title: 2. Detail settings\n    title.zh: 2. 细节设置\n    type: heading\n    level: 1\n    collapsed: false\n  -\n    id: color-settings\n    title: 2.1 Color settings\n    title.zh: 2.1 颜色设置\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: text-normal\n    title: Main text color\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-color-settings\n    title: 2.1.1 Background colors\n    title.zh: 2.1.1 背景颜色设置\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: background-primary-bg-4-bt\n    title: Background primary\n    description: background-primary-bg-4-bt\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-primary-alt-bg-4-bt\n    title: Background primary (alt)\n    description: background-primary-alt-bg-4-bt\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-secondary-bg-4-bt\n    title: Background secondary\n    description: background-secondary-bg-4-bt\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-secondary-alt-bg-4-bt\n    title: Background secondary (alt)\n    description: background-secondary-alt-bg-4-bt\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-modifier-border\n    title: Background modifier border\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: accent-color-settings\n    title: 2.1.2 Theme colors\n    title.zh: 2.1.2 主题色设置\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: interactive-accent\n    title: Theme color\n    title.zh: 主题色\n    description: interactive-accent\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: other-color-settings\n    title: 2.1.3 Other colors\n    title.zh: 2.1.3 其他颜色\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: accent-strong\n    title: Bold type color\n    title.zh: 加粗颜色\n    description: --accent-strong\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: accent-em\n    title: Italic type color\n    title.zh: 斜体颜色\n    description: --accent-em\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: strong-em-color-1\n    title: Bold italic color 1\n    title.zh: 加粗斜体颜色 1\n    description: --strong-em-color-1\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: strong-em-color-2\n    title: Bold italic color 2\n    title.zh: 加粗斜体颜色 2\n    description: --strong-em-color-2\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: mjx-inline-math-color\n    title: Color of mathematical expressions (inline $x=0$)\n    title.zh: 数学表达式颜色(行内 $x=0$)\n    type: variable-themed-color\n    description: --mjx-inline-math-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: mjx-math-color\n    title: Color of mathematical expressions ($$x=0$$)\n    title.zh: 数学表达式颜色($$x=0$$)\n    description: --mjx-math-color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: background-leaf-resize-handle\n    title: Color of leaf resize handle\n    title.zh: 页面大小调整条颜色\n    description: --background-leaf-resize-handle\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: search-result-file-matched-bg\n    title: File search result highlight color\n    title.zh: 文件搜索结果高亮\n    description: --search-result-file-matched-bg\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: text-search-highlight-bg\n    title: Text search result highlight color\n    title.zh: 文本搜索结果高亮\n    description: --text-search-highlight-bg\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: text-selection\n    title: Text selection background\n    title.zh: 鼠标划选文字背景\n    description: --text-selection\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: remove-selectionbackground\n    title: Toggle selection background (Non-text part)\n    title.zh: 还原鼠标划选时非文字部分背景颜色\n    type: class-toggle\n    default: false\n  -\n    id: status-bar-bg\n    title: Status bar background\n    title.zh: 状态栏颜色\n    description: --status-bar-bg\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: status-bar-text-color\n    title: Status bar text color\n    title.zh: 状态栏文字颜色\n    description: --status-bar-text-color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: icon-color-focused\n    title: Focused icon color\n    title.zh: 激活按钮的图标颜色\n    description: --icon-color-focused\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: divider-color\n    title: Divider color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: tab-outline-color\n    title: Tab outline color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-view-color-settings\n    title: 2.1.4 Graph-view colors\n    title.zh: 2.1.4 图谱颜色\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: graph-canvas-bg\n    title: Graph-view canvas background\n    title.zh: 图谱背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-text-color\n    title: Graph-view text color\n    title.zh: 图谱文字颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-line\n    title: Graph-view line color\n    title.zh: 图谱线条颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-line-fill-highlight\n    title: Graph-view line highlight color (Hovering)\n    title.zh: 图谱线条激活颜色（鼠标悬浮）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-arrow\n    title: Graph-view arrow color\n    title.zh: 图谱箭头颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-circle-outline\n    title: Graph-view circle outline color\n    title.zh: 图谱圆点轮廓颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-circle\n    title: Graph-view normal circle color\n    title.zh: 图谱圆点颜色（默认）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-tag\n    title: Graph-view circle color (Tag)\n    title.zh: 图谱圆点颜色（标签）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-unresolved\n    title: Graph-view circle color (Unresolved)\n    title.zh: 图谱圆点颜色（未创建）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-attach\n    title: Graph-view circle color (Attachment)\n    title.zh: 图谱圆点颜色（附件）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-control-bg\n    title: Graph-view settings background color\n    title.zh: 图谱设置面板背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: graph-circle-fill-highlight\n    title: Graph-view circle highlight color (Hovering)\n    title.zh: 图谱圆点激活颜色（鼠标悬浮）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: font-settings\n    title: 2.2 Typography\n    title.zh: 2.2 排版\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: font-settings\n    title: 2.2.1 Font family\n    title.zh: 2.2.1 字体设置\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: font-family-change-to-default\n    title: Use Obsidian default font family\n    title.zh: 使用Obsidian默认字体\n    type: class-toggle\n    default: false\n  -\n    id: font-text-theme\n    title: Main font\n    title.zh: 主体字体\n    description: Fonts except from the code texts\n    description.zh: 除代码框外字体\n    type: variable-text\n    default: \"Bookerly,'Inter', 'Segoe UI','霞鹜文楷 GB', 'LXGW WenKai', 'Segoe UI Emoji',var(--font-interface)\"\n  -\n    id: font-family-folder-file-title\n    title: Folder & file title\n    title.zh: 文件栏字体\n    type: variable-text\n    default: \"Arlrdbd, 'Source Han Sans', 'Noto Sans CJK', 'Source Sans Pro', 'Segoe UI Emoji', sans-serif\"\n  -\n    id: font-monospace-theme\n    title: Codebox\n    title.zh: 代码框字体\n    type: variable-text\n    default: \"'JetBrains Mono', Consolas, Monaco, '等距更纱黑体 SC', 'Source Han Mono', 'Microsoft Yahei Mono', 'Segoe UI Emoji', 'Microsoft YaHei', 'Source Code Pro', monospace\"\n  -\n    id: font-family-inline-code\n    title: Inline code\n    title.zh: 行内代码字体\n    type: variable-text\n    default: var(--font-monospace-override), var(--font-monospace-theme)\n  -\n    id: font-family-tag\n    title: Tag\n    title.zh: 标签字体\n    type: variable-text\n    default: \"Bookerly, 'Microsoft YaHei', STzhongsong, STSong, 'Segoe UI Emoji', Serif\"\n  -\n    id: font-family-strong\n    title: Bold text\n    title.zh: 加粗文字字体\n    type: variable-text\n    default: \"Bookerly,'Inter', 'Segoe UI', 'LXGW WenKai Screen', 'LXGW WenKai Screen R', '霞鹜文楷 GB', 'LXGW WenKai', 'Segoe UI Emoji', var(--font-interface)\"\n  -\n    id: font-weight-strong\n    title: Bold text font weight\n    title.zh: 加粗文字样式\n    description: type 'light, normal, bold, bolder; or 100-900'\n    type: variable-text\n    default: bold\n  -\n    id: font-family-em\n    title: Italic text\n    title.zh: 斜体文字字体\n    type: variable-text\n    default: \"var(--font-text-theme)\"\n  -\n    id: font-style-em\n    title: Italic text style\n    title.zh: 斜体文字样式\n    description: typy normal or italic\n    type: variable-text\n    default: italic\n  -\n    id: font-family-vault\n    title: Vault name\n    title.zh: 库名字体\n    type: variable-text\n    default: \"'Lucida Handwriting', 'Segoe UI Emoji'\"\n  -\n    id: font-size-settings\n    title: 2.2.2 Font size\n    title.zh: 2.2.2 字体大小\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: font-size-vault-name\n    title: Vault name\n    title.zh: 库名称大小\n    type: variable-text\n    default: 0.95em\n  -\n    id: font-size-file-header-title\n    title: File Header (NOT for Sliding Pane plugin)\n    title.zh: 文件抬头标题 (非Sliding Pane plugin)\n    type: variable-text\n    default: 0.9375em\n  -\n    id: font-size-folder-and-file\n    title: Folder and file\n    title.zh: 左侧边栏文件字体大小\n    type: variable-text\n    default: 0.85em\n  -\n    id: font-size-outline\n    title: Outline font size\n    title.zh: 大纲字体大小\n    type: variable-text\n    default: 13px\n  -\n    id: font-size-code\n    title: Codeblock\n    title.zh: 代码框字体大小\n    type: variable-text\n    default: 1em\n  -\n    id: font-size-latex\n    title: Mathematical expressions\n    title.zh: 数学公式字体大小\n    type: variable-text\n    default: 1em\n  -\n    id: header-settings\n    title: 2.2.3 Headers\n    title.zh: 2.2.3 文内标题（H1-H6）\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: clutter-free-headings\n    title: Clutter free headings\n    title.zh: 编辑状态使用H1 H2 替代「#」(显示标题级别)\n    description: Adapted from https://github.com/deathau/obsidian-snippets/blob/main/clutter-free-headings.css\n    type: class-toggle\n    default: false\n  -\n    id: funny-header-anim\n    title: Funny header animation in live preview\n    title.zh: 编辑模式标题动画\n    description: Adapted from https://cdn.discordapp.com/attachments/702656734631821413/1007258862606352424/FunnyHeaderAnimLP.css @sailKite\n    type: class-toggle\n    default: false\n  -\n    id: remove-heading-indicator\n    title: Remove H1-H6 Indicators before headings when hovering\n    title.zh: 移除鼠标悬浮时标题前的H1-H6\n    type: class-toggle\n    default: false\n  -\n    id: retain-header-color\n    title: Retain header color\n    title.zh: 保留标题颜色\n    description: Retain original color of headers when using italic, bold or bold italic within headers\n    type: class-toggle\n    default: false\n  -\n    id: h1-settings\n    title: 2.2.3.1 Header 1\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: print-h1-color\n    title: Header 1 color\n    title.zh: 标题 1 颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'  \n  -\n    id: h1-size\n    title: Header 1 size\n    title.zh: 标题 1 字体大小\n    type: variable-text\n    default: 1.5625em\n  -\n    id: h1-font\n    title: Header 1 font family\n    title.zh: 标题 1 字体\n    description: eg：var(--font-text-override),\"Microsoft YaHei\"\n    description.zh: 填入var(--font-text-override)调用Ob字体设置，填入\"Microsoft YaHei\" 为指定具体字体名称\n    type: variable-text\n    default: \"\"\n  -\n    id: h1-toggle-underline\n    title: Toggle h1 underline\n    title.zh: 开启h1下划线\n    type: class-toggle\n    default: false\n  -\n    id: h1-underline-width\n    title: Header 1 underline width\n    title.zh: 下划线宽度\n    type: variable-text\n    default: 2px\n  -\n    id: h1-underline-style\n    title: Header 1 underline style\n    title.zh: 标题 1 下划线样式\n    description: solid, double, dotted, dashed, groove, ridge\n    type: variable-text\n    default: solid\n  -\n    id: h1-underline-color\n    title: Header 1 underline color\n    title.zh: 标题 1 下划线颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h1-toggle-short-underline\n    title: Toggle h1 underline (Shorter)\n    title.zh: 开启h1下划线 （短线）\n    type: class-toggle\n    default: false\n  -\n    id: header-1-background\n    title: Toggle h1 Background\n    title.zh: 开启h1背景颜色\n    type: class-toggle\n    default: false\n  -\n    id: h1-bg-color\n    title: h1 bg\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h1-weight\n    title: h1 font weight\n    type: variable-text\n    default: bold\n  -\n    id: h1-line-height\n    title: Header 1 line height\n    title.zh: 标题 1 行高\n    type: variable-number\n    default: 1.5\n  -\n    id: h1-text-align-settings\n    title: h1 Text-align\n    title.zh: h1 位置\n    type: class-select\n    allowEmpty: false\n    default: h1-text-align-start\n    options:\n      -\n        label: Default (Left/Start)\n        value: h1-text-align-start\n      -\n        label: Center\n        value: h1-text-align-center\n      -\n        label: Right/End\n        value: h1-text-align-end\n  -\n    id: h2-settings\n    title: 2.2.3.2 Header 2\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: print-h2-color\n    title: Header 2 color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h2-size\n    title: Header 2 size\n    title.zh: 标题 2 字体大小\n    type: variable-text\n    default: 1.4375em\n  -\n    id: h2-font\n    title: Header 2 font family\n    title.zh: 标题 2 字体\n    description: eg：var(--font-text-override),\"Microsoft YaHei\"\n    description.zh: 填入var(--font-text-override)调用Ob字体设置，填入\"Microsoft YaHei\" 为指定具体字体名称\n    type: variable-text\n    default: \"\"\n  -\n    id: h2-toggle-underline\n    title: toggle h2 underline\n    title.zh: 开启h2下划线\n    type: class-toggle\n    default: false\n  -\n    id: h2-underline-width\n    title: Header 2 underline width\n    title.zh: 下划线宽度\n    type: variable-text\n    default: 1px\n  -\n    id: h2-underline-style\n    title: Header 2 underline style\n    title.zh: 标题 2 下划线样式\n    description: solid, double, dotted, dashed, groove, ridge\n    type: variable-text\n    default: solid\n  -\n    id: h2-underline-color\n    title: Header 2 underline color\n    title.zh: 标题 2 下划线颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h2-toggle-short-underline\n    title: Toggle h2 underline (Shorter)\n    title.zh: 开启h2下划线 （短线）\n    type: class-toggle\n    default: false\n  -\n    id: header-2-background\n    title: Toggle h2 background\n    title.zh: 开启h2背景颜色\n    type: class-toggle\n    default: false\n  -\n    id: h2-bg-color\n    title: h2 background color\n    title.zh: 标题 2 背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h2-weight\n    title: h2 font weight\n    title.zh: 标题 2 字重\n    type: variable-text\n    default: bold\n  -\n    id: h2-line-height\n    title: Header 2 line height\n    title.zh: 标题 2 行高\n    type: variable-number\n    default: 1.5\n  -\n    id: h2-text-align-settings\n    title: h2 text-align\n    title.zh: h2 位置\n    type: class-select\n    allowEmpty: false\n    default: h2-text-align-start\n    options:\n      -\n        label: Default (Left/Start)\n        value: h2-text-align-start\n      -\n        label: Center\n        value: h2-text-align-center\n      -\n        label: Right/End\n        value: h2-text-align-end\n  -\n    id: h3-settings\n    title: 2.2.3.3 Header 3\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: print-h3-color\n    title: Header 3 color\n    title.zh: 标题 3 颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h3-size\n    title: Header 3 size\n    title.zh: 标题 3 字体大小\n    type: variable-text\n    default: 1.3125em\n  -\n    id: h3-font\n    title: Header 3 font family\n    title.zh: 标题 3 字体\n    type: variable-text\n    default: \"\"\n  -\n    id: h3-toggle-underline\n    title: toggle h3 underline\n    title.zh: 开启h3下划线\n    type: class-toggle\n    default: false\n  -\n    id: h3-underline-width\n    title: Header 6 underline width\n    title.zh: 下划线宽度\n    type: variable-text\n    default: 1px\n  -\n    id: h3-underline-style\n    title: Header 3 underline style\n    title.zh: 标题 3 下划线样式\n    description: solid, double, dotted, dashed, groove, ridge\n    type: variable-text\n    default: solid\n  -\n    id: h3-underline-color\n    title: Header 3 underline color\n    title.zh: 标题 3 下划线颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h3-toggle-short-underline\n    title: Toggle h3 underline (Shorter)\n    title.zh: 开启h3下划线 （短线）\n    type: class-toggle\n    default: false\n  -\n    id: header-3-background\n    title: Toggle h3 Background\n    title.zh: 开启h3背景颜色\n    type: class-toggle\n    default: false\n  -\n    id: h3-bg-color\n    title: h3 background color\n    title.zh: 标题 3 背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h3-weight\n    title: h3 font weight\n    title.zh: 标题 3 字重\n    type: variable-text\n    default: bold\n  -\n    id: h3-line-height\n    title: Header 3 line height\n    title.zh: 标题 3 行高\n    type: variable-number\n    default: 1.5\n  -\n    id: h3-text-align-settings\n    title: h3 text-align\n    title.zh: h3 位置\n    type: class-select\n    allowEmpty: false\n    default: h3-text-align-start\n    options:\n      -\n        label: Default (Left/Start)\n        value: h3-text-align-start\n      -\n        label: Center\n        value: h3-text-align-center\n      -\n        label: Right/End\n        value: h3-text-align-end\n  -\n    id: h4-settings\n    title: 2.2.3.4 Header 4\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: print-h4-color\n    title: Header 4 color\n    title.zh: 标题 4 颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h4-size\n    title: Header 4 size\n    title.zh: 标题 4 字体大小\n    type: variable-text\n    default: 1.1875em\n  -\n    id: h4-font\n    title: Header 4 font family\n    title.zh: 标题 4 字体\n    type: variable-text\n    default: \"\"\n  -\n    id: h4-toggle-underline\n    title: toggle h4 underline\n    title.zh: 开启H4下划线\n    type: class-toggle\n    default: false\n  -\n    id: h4-underline-width\n    title: Header 4 underline width\n    title.zh: 下划线宽度\n    type: variable-text\n    default: 1px\n  -\n    id: h4-underline-style\n    title: Header 4 underline style\n    title.zh: 标题 4 下划线样式\n    description: solid, double, dotted, dashed, groove, ridge\n    type: variable-text\n    default: solid\n  -\n    id: h4-underline-color\n    title: Header 4 underline color\n    title.zh: 标题 4 下划线颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h4-toggle-short-underline\n    title: Toggle h4 underline (Shorter)\n    title.zh: 开启h4下划线 （短线）\n    type: class-toggle\n    default: false\n  -\n    id: header-4-background\n    title: Toggle h4 Background\n    title.zh: 开启h4背景颜色\n    type: class-toggle\n    default: false\n  -\n    id: h4-bg-color\n    title: h4 background color\n    title.zh: 标题 4 背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h4-weight\n    title: h4 font weight\n    title.zh: 标题 4 字重\n    type: variable-text\n    default: bold\n  -\n    id: h4-line-height\n    title: Header 4 line height\n    title.zh: 标题 4 行高\n    type: variable-number\n    default: 1.5\n  -\n    id: h4-text-align-settings\n    title: h4 text-align\n    title.zh: h4 位置\n    type: class-select\n    allowEmpty: false\n    default: h4-text-align-start\n    options:\n      -\n        label: Default (Left/Start)\n        value: h4-text-align-start\n      -\n        label: Center\n        value: h4-text-align-center\n      -\n        label: Right/End\n        value: h4-text-align-end\n  -\n    id: h5-settings\n    title: 2.2.3.5 Header 5\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: print-h5-color\n    title: Header 5 color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h5-size\n    title: Header 5 size\n    title.zh: 标题 5 字体大小\n    type: variable-text\n    default: 1.0625em\n  -\n    id: h5-font\n    title: Header 5 font family\n    title.zh: 标题 5 字体\n    type: variable-text\n    default: \"\"\n  -\n    id: h5-toggle-underline\n    title: toggle h5 underline\n    title.zh: 开启H5下划线\n    type: class-toggle\n    default: false\n  -\n    id: h5-underline-width\n    title: Header 5 underline width\n    title.zh: 下划线宽度\n    type: variable-text\n    default: 1px\n  -\n    id: h5-underline-style\n    title: Header 5 underline style\n    title.zh: 标题 5 下划线样式\n    description: solid, double, dotted, dashed, groove, ridge\n    type: variable-text\n    default: solid\n  -\n    id: h5-underline-color\n    title: Header 5 underline color\n    title.zh: 标题 5 下划线颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h5-toggle-short-underline\n    title: Toggle h5 underline (Shorter)\n    title.zh: 开启H5下划线 （短线）\n    type: class-toggle\n    default: false\n  -\n    id: header-5-background\n    title: Toggle h5 Background\n    title.zh: 开启h5背景颜色\n    type: class-toggle\n    default: false\n  -\n    id: h5-bg-color\n    title: h5 background color\n    title.zh: 标题 5 背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h5-weight\n    title: h5 font weight\n    title.zh: 标题 5 字重\n    type: variable-text\n    default: bold\n  -\n    id: h5-text-align-settings\n    title: h5 text-align\n    title.zh: h5 位置\n    type: class-select\n    allowEmpty: false\n    default: h5-text-align-start\n    options:\n      -\n        label: Default (Left/Start)\n        value: h5-text-align-start\n      -\n        label: Center\n        value: h5-text-align-center\n      -\n        label: Right/End\n        value: h5-text-align-end\n  -\n    id: h6-settings\n    title: 2.2.3.6 Header 6\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: print-h6-color\n    title: Header 6 color\n    title.zh: 标题 6 颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h6-size\n    title: Header 6 size\n    title.zh: 标题 6 字体大小\n    type: variable-text\n    default: 1em\n  -\n    id: h6-font\n    title: Header 6 font family\n    title.zh: 标题 6 字体\n    type: variable-text\n    default: \"\"\n  -\n    id: h6-toggle-underline\n    title: Toggle h6 underline\n    title.zh: 开启h6下划线\n    type: class-toggle\n    default: false\n  -\n    id: h6-underline-width\n    title: Header 6 underline width\n    title.zh: 下划线宽度\n    type: variable-text\n    default: 1px\n  -\n    id: h6-underline-style\n    title: Header 6 underline style\n    title.zh: 标题 6 下划线样式\n    description: solid, double, dotted, dashed, groove, ridge\n    type: variable-text\n    default: solid\n  -\n    id: h6-underline-color\n    title: Header 6 underline color\n    title.zh: 标题 6 下划线颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h6-toggle-short-underline\n    title: Toggle h6 underline (Shorter)\n    title.zh: 开启h6下划线 （短线）\n    type: class-toggle\n    default: false\n  -\n    id: header-6-background\n    title: Toggle h6 background\n    title.zh: 开启h6背景颜色\n    type: class-toggle\n    default: false\n  -\n    id: h6-bg-color\n    title: h6 background color\n    title.zh: 标题 6 背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: h6-weight\n    title: h6 font weight\n    title.zh: 标题 6 字重\n    type: variable-text\n    default: bold\n  -\n    id: h6-text-align-settings\n    title: h6 text-align\n    title.zh: h6 位置\n    type: class-select\n    allowEmpty: false\n    default: h6-text-align-start\n    options:\n      -\n        label: Default (Left/Start)\n        value: h6-text-align-start\n      -\n        label: Center\n        value: h6-text-align-center\n      -\n        label: Right/End\n        value: h6-text-align-end\n  -\n    id: other-typography-settings\n    title: 2.2.4 Other typography settings\n    title.zh: 2.2.4 其他排版设置\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: file-line-width\n    title: Line width (in the mode of 'readable line length')\n    title.zh: 行宽（缩减栏宽模式下）\n    description: The maximum line width in rem units (1rem = Body font size)\n    type: variable-number\n    default: 45\n    format: rem\n  -\n    id: line-height-main\n    title: Line height\n    title.zh: 行间距\n    type: variable-number\n    default: 1.5\n  -\n    id: toggle-paragraph-spacing\n    title: Toggle paragraph spacing in reading mode\n    title.zh: 开启阅读模式段间距\n    description.zh: 开启后对多个<br>标记不再生效\n    type: class-toggle\n    default: false\n  -\n    id: paragraph-spacing\n    title: Paragraph spacing\n    title.zh: 段间距\n    type: variable-number-slider\n    default: 1\n    min: 0\n    max: 2\n    step: 0.1\n  -\n    id: letter-space-main\n    title: Letter spacing\n    title.zh: 字间距\n    type: variable-number-slider\n    default: 0\n    min: 0\n    max: 2\n    step: 0.1\n  -\n    id: text-indentation-two-em\n    title: Slight indentation of the first line\n    title.zh: 段落首行缩进\n    description.zh: 开启全局生效，单独生效只需要在,笔记yaml声明cssclass：indent。阅读模式缩进效果需要安装Contextual Typography插件\n    description: Enable global effect, local effect only need to declare \"cssclass：indent\" in the YAML area. Contextual Typography plugin needs to be installed in Reading mode.\n    type: class-toggle\n    default: false\n    addCommand: true\n  -\n    id: justify-align\n    title: Alignment of both ends\n    title.zh: 段落两端对齐\n    description.zh: 开启全局生效，单独生效只需要在,笔记yaml声明cssclass：text-justify。\n    description: Enable global effect, local effect only need to declare \"cssclass：text-justify\" in the YAML area. \n    type: class-toggle\n    default: false\n    addCommand: true\n  -\n    id: reduce-bottom-padding\n    title: Reduce padding bottom of pages\n    title.zh: 缩减笔记下方预留空白大小\n    type: class-toggle\n    default: false\n  -\n    id: bottom-padding-value\n    title: Adjust padding bottom of pages\n    title.zh: 调整笔记下方预留空白大小\n    type: variable-text\n    default: 0em\n  -\n    id: toggle-left-aligned-content\n    title: Toggle Left-aligned note content\n    title.zh: 开启笔记内容居左\n    description.zh: 开启后内容整体居左，而不是默认居中\n    description: Left-aligned content when turned on, instead of centered by default\n    type: class-toggle\n    default: false\n  -\n    id: other-typography-settings\n    title: 2.2.5 *.md file in split pane\n    title.zh: 2.2.5 侧面拆分面板中的md文件\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: font-size-split\n    title: Font size\n    title.zh: 字体大小\n    type: variable-text\n    default: 0.85em\n  -\n    id: line-height-split\n    title: Line height\n    title.zh: 行间距\n    type: variable-number\n    default: 1.3\n  -\n    id: default-split-style\n    title: Toggle default style\n    title.zh: 切换默认样式\n    type: class-toggle\n    default: false\n  -\n    id: inline-title-settings\n    title: 2.2.6 Inline title\n    title.zh: 2.2.6 页面内标题\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: inline-title-font\n    title: Inline title font\n    title.zh: 页面内文件名字体\n    type: variable-text\n    default: \"\"\n  -\n    id: inline-title-color\n    title: Inline title color\n    title.zh: 页面内标题颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: inline-title-size\n    title: Inline title size\n    title.zh: 页面内标题字体大小\n    type: variable-text\n    default: 1.5625em\n  -\n    id: inline-title-line-height\n    title: Inline title line height\n    title.zh: 页面内标题行间距\n    type: variable-number\n    default: 1.2\n  -\n    id: inline-title-weight\n    title: Inline title weight\n    title.zh: 页面内标题字重\n    type: variable-text\n    default: \"700\"\n  -\n    id: inline-title-toggle-underline\n    title: Toggle underline\n    title.zh: 开启页面内标题下划线\n    type: class-toggle\n    default: false\n  -\n    id: inline-title-underline-width\n    title: Inline title underline width\n    title.zh: 页面内标题下划线宽度\n    type: variable-text\n    default: 2px\n  -\n    id: inline-title-underline-style\n    title: Inline title underline style\n    title.zh: 页面内标题下划线样式\n    description: solid, double, dotted, dashed, groove, ridge\n    type: variable-text\n    default: solid\n  -\n    id: inline-title-underline-color\n    title: Inline title underline color\n    title.zh: 页面内标题下划线颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: inline-title-toggle-short-underline\n    title: Toggle underline (Shorter)\n    title.zh: 开启页面内标题下划线 （短线）\n    type: class-toggle\n    default: false\n  -\n    id: toggle-inline-title-background\n    title: Toggle inline title background\n    title.zh: 开启页面内标题背景颜色\n    type: class-toggle\n    default: false\n  -\n    id: inline-title-bg-color\n    title: Inline title background color\n    title.zh: 页面内标题背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: inline-title-bg-url\n    title: Inline title background image (url)\n    title.zh: 页面内标题背景图片 (url)\n    type: variable-text\n    default: \"url(https://)\"\n  -\n    id: inline-title-text-align-settings\n    title: Inline title text-align\n    title.zh: 页面内标题位置\n    type: class-select\n    allowEmpty: false\n    default: inline-title-text-align-start\n    options:\n      -\n        label: Default (Left/Start)\n        value: inline-title-text-align-start\n      -\n        label: Center\n        value: inline-title-text-align-center\n      -\n        label: Right/End\n        value: inline-title-text-align-end\n  -\n    id: style-change-options\n    title: 2.3 Element styles\n    title.zh: 2.3 其他元素样式\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: activeline-background\n    title: Active line background color\n    title.zh: 所在行高亮颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: muted-activeline-bg\n    title: Mute active line\n    title.zh: 取消所在行高亮\n    type: class-toggle\n    default: false\n  -\n    id: plain-file-title\n    title: Remove colorful background of active file title\n    title.zh: 取消激活文件标题的彩色背景\n    description: Make it austere\n    type: class-toggle\n    default: false\n  -\n    id: title-justify-start\n    title: Toggle title navigation bar position to left\n    title.zh: 标题导航栏左对齐\n    type: class-toggle\n    default: false\n  -\n    id: fancy-hr-folder\n    title: 2.3.1 Dividing line (Horizontal ruler, hr, ---)\n    title.zh: 2.3.1 分割线（hr，---）\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: fancy-hr\n    title: Fancy Dividing line (Horizontal ruler, hr, ---)\n    title.zh: 装饰性分割线（hr，---）\n    type: class-select\n    allowEmpty: false\n    default: default-hr\n    options:\n      -\n        label: Default\n        value: default-hr\n      -\n        label: with icons\n        value: fancy-hr-icon\n      -\n        label: without icons\n        value: fancy-hr-no-icon\n      -\n        label: with Numbers\n        value: fancy-hr-number\n  -\n    id: fancy-hr-folder-icon\n    title: 2.3.1.1 w/ icons\n    title.zh: 2.3.1.1 有图标的hr\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: hr-color-icon-1\n    title: Line color 1\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-icon-2\n    title: Line color 2\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-icon-3\n    title: Line color 3\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-icon-4\n    title: Line color 4\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: fancy-hr-icon\n    title: Centre icon\n    title.zh: 分割线中间图标\n    description: Do not remove the quotes\n    description.zh: 保留引号\n    type: variable-text\n    default: \"'😀'\"\n  -\n    id: fancy-hr-rotate\n    title: Degree of icon rotation\n    title.zh: 图标旋转角度\n    type: variable-number\n    default: 0\n    format: deg\n  -\n    id: fancy-hr-folder-no-icon\n    title: 2.3.1.2 w/o icons\n    title.zh: 2.3.1.2 没有图标的hr\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: hr-color-1\n    title: hr-color-1\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-2\n    title: hr-color-2\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-3\n    title: hr-color-3\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-4\n    title: hr-color-4\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: fancy-hr-folder-with-number\n    title: 2.3.1.3 w/ numbers\n    title.zh: 2.3.1.3 带数字的hr\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: hr-color-numbers-line-1\n    title: Line color 1\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-numbers-line-2\n    title: Line color 2\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-numbers-line-3\n    title: Line color 3\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-numbers-line-4\n    title: Line color 4\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-numbers-color\n    title: Number color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-color-numbers-bg-color\n    title: Number background color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hollow-number\n    title: Toggle hollow numbers\n    title.zh: 切换空心数字\n    type: class-toggle\n    default: false\n  -\n    id: hr-numbers-text-fill\n    title: Fill color\n    title.zh: 数字颜色\n    description: Color inside the numbers\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: hr-numbers-text-stroke\n    title: Stroke color\n    title.zh: 线条颜色\n    description: Color of lines drawn around numbers\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: list-style-change-options-folder\n    title: 2.3.2 List\n    title.zh: 2.3.2 列表\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: line-height-list\n    title: Line height of list（Read mode）\n    title.zh: 列表与正文行间距（阅读模式）\n    type: variable-number-slider\n    default: 2\n    min: 1\n    max: 2\n    step: 0.1\n  -\n    id: list-spacing-bt\n    title: List Spacing\n    title.zh: 列表项间距\n    type: variable-number-slider\n    default: 1\n    min: 0\n    max: 10\n    step: 0.2\n  -\n    id: list-indent\n    title: List indent\n    title.zh: 列表缩进间距\n    type: variable-number-slider\n    default: 2\n    format: em\n    min: 0\n    max: 6\n    step: 0.1\n  -\n    id: list-style-change-options-folder\n    title: 2.3.2.1 Unordered list\n    title.zh: 2.3.2.1 无序列表\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: colorful-unordered-list\n    title: Toggle colorful unordered list marker\n    title.zh: 启用彩色无序列表符号\n    type: class-toggle\n    default: false\n  -\n    id: unordered-list-style-options\n    title: Unordered list marker style\n    title.zh: 无序列表样式\n    type: class-select\n    allowEmpty: false\n    default: bt-default-unordered-list\n    options:\n      -\n        label: Blue Topaz Default\n        value: bt-default-unordered-list\n      -\n        label: Custom\n        value: custom-unordered-list\n      -\n        label: Obsidian default\n        value: default-list-marker\n  -\n    id: options-bt-default\n    title: 2.3.2.1.1 Options for 'Blue Topaz Default'\n    type: heading\n    level: 5\n    collapsed: true\n  -\n    id: list-ul-marker-size\n    title: Bullet size\n    title.zh: 符号大小\n    type: variable-text\n    default: 1em\n  -\n    id: list-ul-marker-color\n    title: Text color (1st level)\n    title.zh: 符号颜色（第一层）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: options-for-custom\n    title: 2.3.2.1.2 Options for 'Custom'\n    type: heading\n    level: 5\n    collapsed: true\n  -\n    id: list-ul-marker-1\n    title: List symbol (1st level)\n    title.zh: 符号（第一层）\n    type: variable-text\n    default: '\"\\2022\"'\n  -\n    id: list-ul-marker-size-1\n    title: Bullet size (1st level)\n    title.zh: 符号大小（第一层）\n    type: variable-text\n    default: 1em\n  -\n    id: list-ul-marker-color-1\n    title: Bullet color (1st level)\n    title.zh: 符号颜色（第一层）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: list-ul-marker-2\n    title: List symbol (2nd level)\n    title.zh: 符号（第二层）\n    type: variable-text\n    default: '\"\\25E6\"'\n  -\n    id: list-ul-marker-size-2\n    title: Bullet size (2nd level)\n    title.zh: 符号大小（第二层）\n    type: variable-text\n    default: 1em\n  -\n    id: list-ul-marker-color-2\n    title: Bullet color (2nd level)\n    title.zh: 符号颜色（第二层）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: list-ul-marker-3\n    title: List symbol (3rd level)\n    title.zh: 符号（第三层）\n    type: variable-text\n    default: '\"\\25AA\"'\n  -\n    id: list-ul-marker-size-3\n    title: Bullet size (3rd level)\n    title.zh: 符号大小（第三层）\n    type: variable-text\n    default: 1em\n  -\n    id: list-ul-marker-color-3\n    title: Bullet color (3rd level)\n    title.zh: 符号颜色（第三层）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: list-ul-marker-4\n    title: List symbol (4th level)\n    title.zh: 符号（第四层）\n    type: variable-text\n    default: '\"\\25E6\"'\n  -\n    id: list-ul-marker-size-4\n    title: Bullet size (4th level)\n    title.zh: 符号大小（第四层）\n    type: variable-text\n    default: 1em\n  -\n    id: list-ul-marker-color-4\n    title: Bullet color (4th level)\n    title.zh: 符号颜色（第四层）\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: list-style-change-options-folder\n    title: 2.3.2.2 Ordered list\n    title.zh: 2.3.2.2 有序列表\n    type: heading\n    level: 4\n    collapsed: false\n  -\n    id: colorful-ordered-list\n    title: Toggle colorful ordered list marker\n    title.zh: 启用彩色有序列表符号\n    type: class-toggle\n    default: false\n  -\n    id: ordered-list-style-options\n    title: Ordered List marker style\n    title.zh: 有序列表样式\n    type: class-select\n    allowEmpty: false\n    default: default-ol-list-marker\n    options:\n      -\n        label: Custom\n        value: custom-ordered-list\n      -\n        label: 1.1.1\n        value: ordered-list-style-1\n      -\n        label: Obsidian default\n        value: default-ol-list-marker\n  -\n    id: list-ol-number-color\n    title: Number color of ordered list\n    title.zh: 有序列表数字颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: list-ol-marker-1\n    title: List symbol (1st level)\n    title.zh: 有序列表第一层符号\n    description: 数字：decimal，小写字母：lower-latin，小写罗马数字：lower-roman\n    type: variable-text\n    default: decimal\n  -\n    id: list-ol-marker-2\n    title: List symbol (2nd level)\n    title.zh: 有序列表第二层符号\n    description: 数字：decimal，小写字母：lower-latin，小写罗马数字：lower-roman\n    type: variable-text\n    default: lower-latin\n  -\n    id: list-ol-marker-3\n    title: List symbol (3rd level)\n    title.zh: 有序列表第三层符号\n    description: 数字：decimal，小写字母：lower-latin，小写罗马数字：lower-roman\n    type: variable-text\n    default: lower-roman\n  -\n    id: list-ol-marker-4\n    title: List symbol (4th level)\n    title.zh: 有序列表第四层符号\n    description: 数字：decimal，小写字母：lower-latin，小写罗马数字：lower-roman\n    type: variable-text\n    default: decimal\n  -\n    id: list-style-change-options\n    title: List style in reading view\n    title.zh: 阅读视图列表样式\n    type: class-select\n    allowEmpty: false\n    default: list-no-border\n    options:\n      -\n        label: Bracket 1\n        value: list-bracket-style\n      -\n        label: Bracket 2 (1.1.1)\n        value: list-bracket-style-two\n      -\n        label: Bracket 3\n        value: list-bracket-style-three\n      -\n        label: Vertical line 1 (1.1.1)\n        value: list-vertical-line-one\n      -\n        label: Using Ob Settings\n        value: list-no-border\n  -\n    id: indentation-line-styles\n    title: 2.3.2.3 Indentation lines\n    title.zh: 2.3.2.3 层级线设置\n    type: heading\n    level: 4\n    collapsed: false\n  -\n    id: bt-connected-indent-hover\n    title: Toggle connected indent (Hovering)\n    title.zh: 启用Connected indent lines（鼠标悬浮）\n    description: Inspired from the CSS snippet by KillyMXI (https://gist.github.com/KillyMXI/cbef8edff6dd55d9e6ea4df66567e9b1)\n    type: class-toggle\n    default: true\n  -\n    id: bt-connected-indent-line-color\n    title: Connected indent line color (Hovering)\n    type: variable-themed-color\n    format: hex\n    opacity: true\n    default-light: '#FFA8A8'\n    default-dark: '#926a6a'\n  -\n    id: bt-colorful-connected-indent-hover\n    title: Toggle colorful indentation lines (Hovering)\n    title.zh: 启用彩色Connected indent lines（鼠标悬浮）\n    type: class-toggle\n    default: true\n  -\n    id: bt-indentation-width-hover\n    title: Width of indentation lines (Hovering)\n    title.zh: 层级线宽度 （Hovering）\n    type: variable-text\n    default: 3px\n  -\n    id: bt-list-indentation-margin-left-editing\n    title: Move to right by ?px (Editing)\n    title.zh: 向右移动 ?px (Editing)\n    type: variable-text\n    default: 1px\n  -\n    id: indentation-guide-color\n    title: Inactive line color (Editing)\n    type: variable-themed-color\n    format: rgb\n    opacity: true\n    default-light: 'rgba(0, 0, 0, 0.06)'\n    default-dark: 'rgba(255, 255, 255, 0.08)'\n  -\n    id: indentation-guide-color-active\n    title: Active line color (Editing)\n    type: variable-themed-color\n    format: rgb\n    opacity: true\n    default-light: 'rgba(0, 0, 0, 0.14)'\n    default-dark: 'rgba(255, 255, 255, 0.17)'\n  -\n    id: bt-colorful-indentation-lines-editing\n    title: Toggle colorful indentation lines (Editing)\n    title.zh: 启用彩色层级线 （编辑）\n    type: class-toggle\n    default: false\n  -\n    id: indentation-guide-width\n    title: Indent line width (Editing)\n    type: variable-number\n    default: 1\n    format: px\n  -\n    id: bt-list-indentation-margin-left-reading\n    title: Move to right by ?px (Reading)\n    title.zh: 向右移动 ?px (Reading)\n    type: variable-text\n    default: 1px\n  -\n    id: bt-colorful-indentation-lines\n    title: Toggle colorful indentation lines (Reading)\n    title.zh: 启用彩色层级线 （阅读）\n    type: class-toggle\n    default: false\n  -\n    id: bt-colorful-indentation-line-options\n    title: Line styles (Reading)\n    title.zh: 层级线样式 （阅读）\n    type: class-select\n    allowEmpty: false\n    default: default-indentation-line\n    options:\n      -\n        label: Default\n        value: default-indentation-line\n      -\n        label: Gradient\n        value: bt-indentation-line-gradient\n      -\n        label: Image\n        value: bt-indentation-line-image\n  -\n    id: bt-indentation-gradient-color-1\n    title: Indentation gradient color 1\n    type: variable-themed-color\n    format: hex\n    opacity: true\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: bt-indentation-gradient-color-2\n    title: Indentation gradient color 2\n    type: variable-themed-color\n    format: hex\n    opacity: true\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: bt-colorful-indentation-width\n    title: Width of colorful indentation lines (Reading)\n    title.zh: 彩色层级线宽度 （阅读）\n    type: variable-text\n    default: 1px\n  -\n    id: bt-indentation-line-image\n    title: Add an image as indentation lines (Reading)\n    title.zh: 层级线背景图片 （阅读）\n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: folder-style-change-options-folder\n    title: 2.3.3 Folder\n    title.zh: 2.3.3 文件夹\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: file-bg-shape-option\n    title: File background shape\n    title.zh: 文件背景形状\n    type: class-select\n    allowEmpty: false\n    default: file-shape-default\n    options:\n      -\n        label: Rectangle\n        value: file-shape-default\n      -\n        label: Rounded Rectangle\n        value: file-bg-rounded-rectangle\n      -\n        label: Pill\n        value: file-bg-pill\n  -\n    id: file-name-style-option\n    title: File name style\n    title.zh: 文件名样式\n    type: class-select\n    allowEmpty: false\n    default: file-name-non-wrapped\n    options:\n      -\n        label: Wrapped\n        value: file-name-wrapped\n      -\n        label: Non-wrapped\n        value: file-name-non-wrapped\n      -\n        label: File Name Scrolling When Hovering\n        value: file-name-animation\n  -\n    id: dark-background-file\n    title: Dark file background\n    title.zh: 当前文件背景变深\n    type: class-toggle\n    default: false\n  -\n    id: remove-file-icons\n    title: Remove file icons\n    title.zh: 移除文件前图标\n    description: To remove the icons before .md files\n    description.zh: 移除md文件前图标\n    type: class-toggle\n    default: false\n  -\n    id: text-folder-file-icon\n    title: Color of file icons\n    title.zh: 文件前图标颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: folder-icons\n    title: Activate Folder Icons\n    title.zh: 激活文件夹图标\n    type: class-toggle\n    default: true\n  -\n    id: remove-first-folder-icon\n    title: Remove the first-layer folder icons\n    title.zh: 去除第一层文件夹前图标\n    type: class-toggle\n    default: true\n  -\n    id: remove-arrow\n    title: Folder Icons w/o arrows (Collapse Indicator)\n    title.zh: 移除文件夹箭头图标（折叠图标）\n    type: class-toggle\n    default: true\n  -\n    id: folder-note-underline\n    title: Toggle Folder note underline\n    title.zh: 开启文件夹下划线\n    type: class-toggle\n    default: false\n  -\n    id: folder-note-dot\n    title: Toggle Folder note dot\n    title.zh: 文件夹后添加一个圆点\n    type: class-toggle\n    default: false\n  -\n    id: folder-style-change-options-colorful-folder\n    title: 2.3.3.1 Colorful folder\n    title.zh: 2.3.3.1 彩色文件夹\n    type: heading\n    level: 4\n    collapsed: false\n  -\n    id: bt-toggle-colorful-folder\n    title: Toggle colorful folders\n    title.zh: 启用彩色文件夹\n    type: class-toggle\n    default: true\n  -\n    id: folder-style-change-options-colorful\n    title: Select folder colorful mode\n    title.zh: 彩色化类型\n    type: class-select\n    allowEmpty: false\n    default: folder-style-change-options-colorful-border\n    options:\n      -\n        label: Default non-colorful\n        value: folder-style-change-options-colorful-default\n      -\n        label: folder colorful  with  \"0-9\" or  \"A-Z\"\n        value: folder-style-change-options-colorful\n      -\n        label: folder colorful by order\n        value: folder-style-change-options-colorful-order\n      -\n        label: folder title colorful\n        value: folder-style-change-options-colorful-title\n      -\n        label: Tab-liked\n        value: folder-style-change-options-colorful-tab-liked\n      -\n        label: Border\n        value: folder-style-change-options-colorful-border\n  -\n    id: folder-style-change-options-colorful-subfolder\n    title: Folder color palette\n    title.zh: 文件夹配色\n    type: class-select\n    allowEmpty: false\n    default: folder-colorful-six\n    options:\n      -\n        label: Style 1 (high transparency)\n        value: folder-colorful-one\n      -\n        label: Style 2 (low transparency)\n        value: folder-colorful-two\n      -\n        label: Style 3\n        value: folder-colorful-three\n      -\n        label: Style 4\n        value: folder-colorful-four\n      -\n        label: Style 5\n        value: folder-colorful-five\n      -\n        label: Style 6\n        value: folder-colorful-six\n      -\n        label: Custom\n        value: folder-colorful-custom\n  -\n    id: folder-colorful-custom-color\n    title: Custom color of folder\n    title.zh: 自定义文件夹配色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: blockquote-style-change-options-folder\n    title: 2.3.4 Blockquote\n    title.zh: 2.3.4 引用框\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: blockquote-style-change-options\n    title: Blockquote\n    title.zh: 引用框样式\n    type: class-select\n    allowEmpty: false\n    default: blockquote-style-default\n    options:\n      -\n        label: Default\n        value: blockquote-style-default\n      -\n        label: With quotation mark\n        value: blockquote-style-quotation-mark\n      -\n        label: Speech Bubble 1\n        value: blockquote-style-speech-bubble-one\n      -\n        label: Speech Bubble 2\n        value: blockquote-style-speech-bubble-two\n      -\n        label: Outline\n        value: blockquote-style-outline\n      -\n        label: Border left\n        value: blockquote-style-border-left\n  -\n    id: pdf-style\n    title: 2.3.5 Exported PDF style\n    title.zh: 2.3.5 PDF样式\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: export-pdf-style-folder\n    title: Exported PDF style\n    title.zh:  PDF导出样式\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: hr-for-pagination\n    title: Use hr (---) for paging\n    title.zh: 使用分隔符（---）分页\n    type: class-toggle\n    default: false\n  -\n    id: all-dark-pdf\n    title: All dark (Experimental, may or may not be desirable)\n    description: Export PDF with dark mode color scheme\n    description.zh: 导出黑暗配色的PDF\n    type: class-toggle\n    default: false\n  -\n    id: show-url-after-link\n    title: Print URL after links\n    title.zh: 显示地址超链接\n    type: class-toggle\n    default: false\n  -\n    id: print-strong-color\n    title: Strong color\n    title.zh: 粗体颜色\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: print-em-color\n    title: Italic type color\n    title.zh: 斜体颜色\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: pdf-view-style\n    title: PDF View\n    title.zh:  PDF 文件浏览样式\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: ob-pdf-style-selection-light\n    title: PDF styles (Light)\n    title.zh: PDF 样式 （明亮）\n    type: class-select\n    allowEmpty: false\n    default: pdf-style-default-light\n    options:\n      -\n        label: Default\n        value: pdf-style-default-light\n      -\n        label: Invert colors\n        value: pdf-style-invert-color-light\n      -\n        label: Green\n        value: pdf-style-green-bg-light\n      -\n        label: Warm\n        value: pdf-style-warm-bg-light\n      -\n        label: Custom\n        value: pdf-style-custom-bg\n  -\n    id: ob-pdf-style-selection-dark\n    title: PDF styles (Dark)\n    title.zh: PDF 样式 （黑暗）\n    type: class-select\n    allowEmpty: false\n    default: pdf-style-default-dark\n    options:\n      -\n        label: Default\n        value: pdf-style-default-dark\n      -\n        label: Invert colors\n        value: pdf-style-invert-color-dark\n      -\n        label: Green\n        value: pdf-style-green-bg-dark\n      -\n        label: Warm\n        value: pdf-style-warm-bg-dark\n      -\n        label: Custom\n        value: pdf-style-custom-bg\n  -\n    id: custom-bg-pdf-style\n    title: Custom PDF background\n    title.zh: 自定义PDF背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: embed-folder\n    title: 2.3.6 Embeds\n    title.zh: 2.3.6 嵌入样式\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: adjustable-embed-content-height\n    title: Fixed embedded content height\n    title.zh: 固定嵌入页面高度\n    type: class-toggle\n    default: false\n  -\n    id: embed-content-height\n    title: Height of embedded content\n    title.zh: 嵌入页面高度\n    description: Switch on the above button to activate\n    type: variable-number\n    default: 600\n    format: px\n  -\n    id: naked-embed\n    title: Transparent embedded background\n    title.zh: 嵌入背景透明\n    type: class-toggle\n    default: false\n  -\n    id: hide-embed-title\n    title: Hide embedded title\n    title.zh: 隐藏嵌入文档标题\n    type: class-toggle\n    default: false\n  -\n    id: hide-embed-banner\n    title: Hide embedded banner\n    title.zh: 隐藏嵌入文档banner\n    type: class-toggle\n    default: false\n  -\n    id: embed-hd\n    title: Hide embedded headers\n    title.zh: 隐藏嵌入文档中的H1 H2 H3标题\n    type: class-toggle\n    default: false\n  -\n    id: embed-hover\n    title: Floating effect of embedded note when hovering\n    title.zh: 嵌入笔记浮动效果\n    type: class-toggle\n    default: false\n  -\n    id: table-styles\n    title: 2.3.7 Table\n    title.zh: 2.3.7 表格\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: toggle-table-transition\n    title: Toggle table zooming effect\n    title.zh: 移除表格悬浮放大效果\n    type: class-toggle\n    default: false\n  -\n    id: table-format-options\n    title: Table format\n    title.zh: 表格格式\n    type: class-select\n    allowEmpty: false\n    default: default-table\n    options:\n      -\n        label: Defaut table\n        value: default-table\n      -\n        label: Wrapped table (break all)\n        value: wrapped-table\n      -\n        label: Non-wrapped table (limited cell width)\n        value: no-wrapped-table-cell\n      -\n        label: Non-wrapped table\n        value: no-wrapped-table\n  -\n    id: show-border-table\n    title: Show borders\n    title.zh: 显示表格框线\n    type: class-toggle\n    default: false\n  -\n    id: table-width\n    title: Table width \n    title.zh: md表格默认宽度\n    type: class-select\n    default: table-width-100\n    options:\n      -\n        label: 100%\n        value: table-width-100\n      -\n        label: auto\n        value: table-width-auto\n  -\n    id: full-width-table\n    title: Full-width table display\n    title.zh: md表格全宽显示\n    description: for Reading View, require Contextual Typography plugin\n    description.zh: 阅读模式下，实现效果需要安装Contextual Typography插件\n    type: class-toggle\n    default: false\n  -\n    id: table-style-options\n    title: Table Style\n    title.zh: 表格样式\n    type: class-select\n    allowEmpty: false\n    default: table-style-default\n    options:\n      -\n        label: Default\n        value: table-style-default\n      -\n        label: Style I\n        value: table-style-one\n      -\n        label: Style II\n        value: table-style-two\n      -\n        label: Style III\n        value: table-style-three\n  -\n    id: cloze-style\n    title: 2.3.8 Cloze style\n    title.zh: 2.3.8 挖空涂黑\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: remove-cloze-style\n    title: Cancel cloze Style\n    title.zh: 取消挖空涂黑功能\n    description: In this theme, you can use ==~~your words~~==, *==~~your words~~==* and *~~your words~~* to obtain a cloze-style, active this option to cancel it\n    description.zh: 当前主题下，使用以下格式可以对文本进行涂黑或挖空 ==~~your words~~==, *==~~your words~~==* 或 *~~your words~~*，激活该选项以取消\n    type: class-toggle\n    default: false\n  -\n    id: cloze-bg-color\n    title: Cloze background color\n    title.zh: 涂黑背景颜色\n    description: Cloze Style One, i.e. ==~~your words~~==, hovering to find \"your words\", should declare \"cssclass：cloze\" in the YAML area if you want to use them in the Live Preview mode\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: cloze-decoration\n    title: Underline decoration style\n    description: Can type 'solid', 'dotted', 'dashed', 'wavy' or 'double' for Cloze Style One, i.e. ==~~your words~~==, hovering to find \"your words\", should declare \"cssclass：cloze\" in the YAML area if you want to use them in the Live Preview mode\n    type: variable-text\n    default: none\n  -\n    id: cloze-decoration-color\n    title: Underline decoration color\n    description: For Cloze Style One, i.e. ==~~your words~~==, hovering to find \"your words\", should declare 'cssclass：cloze' in the YAML area if you want to use them in the Live Preview mode\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: cloze-decoration-2\n    title: Underline decoration style for Cloze style TWO\n    description: Can type 'solid', 'dotted', 'dashed', 'wavy', 'double' or 'none' for Cloze Style TWO, i.e. *==~~your words~~==*, pressing down the primary mouse button to find \"your words\", should declare 'cssclass：cloze' in the YAML area if you want to use them in the Live Preview mode\n    type: variable-text\n    default: dashed\n  -\n    id: cloze-decoration-color-2\n    title: Underline decoration color for Cloze style TWO\n    description: For Cloze Style TWO, i.e. *==~~your words~~==*, pressing down the primary mouse button to find \"your words\", should declare 'cssclass：cloze' in the YAML area if you want to use them in the Live Preview mode\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: cloze-decoration-3\n    title: Underline decoration style for Cloze style THREE (*~~your words~~*)\n    description: Can type 'solid', 'dotted', 'dashed', 'wavy', 'double' or 'none' for Cloze Style THREE, i.e. *~~your words~~*, pressing down the primary mouse button to find \"your words\", should declare 'cssclass：cloze' in the YAML area if you want to use them in the Live Preview mode\n    type: variable-text\n    default: dashed\n  -\n    id: cloze-decoration-color-3\n    title: Underline decoration color for Cloze style THREE\n    description: For Cloze Style THREE, i.e. *~~your words~~*, pressing down the primary mouse button to find \"your words\", should declare 'cssclass：cloze' in the YAML area if you want to use them in the Live Preview mode\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: link-style\n    title: 2.3.9 Links\n    title.zh: 2.3.9 链接\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: link-underline-internal\n    title: Toggle internal link underline\n    title.zh: 开启内部链接下划线（默认：无）\n    type: class-toggle\n    default: false\n  -\n    id: link-underline-external\n    title: Disable external link underline\n    title.zh: 关闭外部链接下划线（默认：有）\n    type: class-toggle\n    default: false\n  -\n    id: link-underline-unresolved\n    title: Disable unresolved link underline\n    title.zh: 关闭未创建链接下划线（默认：有）\n    type: class-toggle\n    default: false\n  -\n    id: colorful-link-animation\n    title: Toggle colorful link background (hovering)\n    title.zh: 开启彩色链接背景颜色 （鼠标悬浮时）\n    type: class-toggle\n    default: false\n  -\n    id: internal-link-color\n    title: Internal link color\n    title.zh: 内链颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: remove-external-link-icon\n    title: Toggle icon after external link\n    title.zh: 去除外部链接后面的图标\n    type: class-toggle\n    default: false\n  -\n    id: external-link-color\n    title: External link color\n    title.zh: 外链颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: default-unresolved-link\n    title: Toggle default unresolved link color\n    title.zh: 使用默认的未创建链接颜色\n    type: class-toggle\n    default: false\n  -\n    id: unresolved-link\n    title: Unresolved Link Color\n    title.zh: 未创建链接颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: link-click\n    title: Cancel click the link to trigger auto-jump\n    title.zh: 取消编辑模式下点击链接自动跳转\n    type: class-toggle\n    default: false\n    description: You can click on the link by holding down the ctrl key to jump\n    description.zh: 可以通过按住ctrl键点击链接跳转\n  -\n    id: cursor-style-folder\n    title: 2.3.10 Cursor\n    title.zh: 2.3.10 输入光标\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: cursor-color\n    title: Cursor color\n    title.zh: 光标颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: checkbox-style-folder\n    title: 2.3.11 Checkbox\n    title.zh: 2.3.11 勾选框\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: enable-alternative-checkboxes\n    title: Enable Alternative Checkboxes\n    title.zh: 启用扩展勾选框样式\n    description: Disable this if you are using your own implementation via a CSS Snippet.\n    description.zh: 如果启用第三方勾选框样式片段请禁用此选项\n    default: true\n    type: class-toggle\n  -\n    id: circular-checkbox\n    title: Circular checkbox\n    title.zh: 圆形勾选框\n    type: class-toggle\n    default: false\n  -\n    id: toggle-checked-decoration\n    title: Add strikethrough for checked items\n    title.zh: 添加完成任务时的删除线\n    type: class-toggle\n    default: false\n  -\n    id: checklist-done-color\n    title: Checked text color\n    title.zh: 完成任务的文字颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: checkbox-size\n    title: Checkbox Size\n    title.zh: 勾选框大小\n    type: variable-text\n    default: 1rem\n  -\n    id: unmute-checkbox-animation\n    title: Deactivate checkbox animation\n    title.zh: 取消勾选框摇摆动画\n    type: class-toggle\n    default: false\n  -\n    id: icons-style-folder\n    title: 2.3.12 Icons\n    title.zh: 2.3.12 图标\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: remove-custom-svg-icons\n    title: Toggle default icons\n    title.zh: 还原默认图标\n    type: class-toggle\n    default: false\n  -\n    id: default-icons\n    title: Toggle default collapse icons\n    title.zh: 还原折叠图标\n    type: class-toggle\n    default: false\n  -\n    id: enable-icon-anima\n    title: Enable clickable-icons' hovering animation\n    title.zh: 开启按钮图标的鼠标悬浮动画效果\n    description.zh: 是否开启图标背景动画以及图标悬浮动画效果\n    type: class-toggle\n    default: false\n  -\n    id: icons-style-folder\n    title: 2.3.13 Images\n    title.zh: 2.3.13 图片\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: image-zoom\n    title: Deactivate image zooming\n    title.zh: 取消点击图片放大效果\n    type: class-toggle\n    default: false\n  -\n    id: obsidian-default-image\n    title: Obsidian default image position\n    title.zh: Obsidian默认图片位置\n    type: class-toggle\n    default: false\n  -\n    id: image-max-width\n    title: Image max-width\n    title.zh: 图片最大宽度\n    type: variable-text\n    default: 100%\n  -\n    id: image-border\n    title: Image borders\n    title.zh: 图片添加边框\n    type: class-toggle\n    default: false\n  -\n    id: icons-style-folder-1\n    title: Intro to basic image position\n    title.zh: 基本图片位置简介\n    description: You can add 🔸|Left (can also use `left`, `LEFT` or `L` to replace the `Left` before), 🔸|Right (right/RIGHT/R) and 🔸|Inline (inline/INLINE/inl/INL/Inl) 🔸|Centre/Center (CENTRE/CENTER/centre/center/C) (the “centre” one is for the “Obsidian Default Image Position above only, because Topaz's default image position is in the centre) into a image format to adjust the image position, e.g. ![[*.jpg|L]], ![[*.png|Right|200]] and ![|inl](...*.jpg)\n    description.zh: 在图片格式里添加 🔸|Left (can also use `left`, `LEFT` or `L` to replace the `Left` before), 🔸|Right (right/RIGHT/R) and 🔸|Inline (inline/INLINE/inl/INL/Inl) 🔸|Centre/Center (CENTRE/CENTER/centre/center/C) (这个选项只在开启 “Obsidian默认图片位置” 后生效，因为Topaz默认图片位置就是居中) 来改变图片位置, e.g. ![[*.jpg|L]], ![[*.png|Right|200]] and ![|inl](...*.jpg)\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: icons-style-folder-2\n    title: Intro to image caption\n    title.zh: 图片标题介绍\n    description: You can add 🔸#Left|your captions (can also use `left`, `LEFT` or `L` to replace the `Left`), 🔸#Right (or right/RIGHT/R)|your captions, 🔸#center/centre (CENTRE/CENTER/Center/Centre/C) |your captions and 🔸#inl (Inline/INLINE/inline/INL/Inl) |your captions into a image format to adjust the image position with a image caption, e.g. ![[*.jpg#left|Figure 1]], ![[*.png#right|Figure 2|200]], ![[*.jpg#centre|Figure 3]] and ![[*.jpg#inl|Figure 4|100]]\n    description.zh: 在图片格式里添加 🔸#left (can also use `left`, `LEFT` or `L` to replace the `Left`) |your captions, 🔸#right (or right/RIGHT/R) |your captions, 🔸#center/centre (CENTRE/CENTER/Center/Centre/C) |your captions and 🔸#inl (Inline/INLINE/inline/INL/Inl) |your captions 来改变图片位置，并添加图片标题, e.g. ![[*.jpg#left|Figure 1]], ![[*.png#right|Figure 2|200]], ![[*.jpg#C|Figure 3]] and ![[*.jpg#inl|Figure 4|100]]\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: icons-style-folder-3\n    title: Intro to image grid\n    title.zh: 图片横排介绍\n    description: You can add 🔸|+grid into some images to grid these images in a line, e.g. ![[*.jpg|+grid]] Or type ❗cssclass：img-grid❗ in YAML to make images arrange in a grid in the preview mode. require Contextual Typography plugin\n    description.zh: 在图片格式里添加 🔸|+grid 使复数的图片排成一行, e.g. ![[*.jpg|+grid]] 。或者在YAML种输入 ❗cssclass：img-grid❗最好安装 Contextual Typography 插件实现更好的并排效果\n    type: heading\n    level: 4\n    collapsed: false\n  -\n    id: img-grid\n    title:  Enable global image grid\n    title.zh: 开启全局图片横排显示\n    description: Enable the Contextual Typography plugin to control side-by-side images via blank lines\n    description.zh:  开启后，不需要在笔记上方声明cssclass：img-grid，通过图片空行控制是否并排\n    type: class-toggle\n    default: false\n  -\n    id: loading-page-style-folder\n    title: 2.3.14 Loading page\n    title.zh: 2.3.14 加载页面\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: loading-page-style-option\n    title: Loading page style\n    type: class-select\n    allowEmpty: false\n    default: default-loading-page\n    options:\n      -\n        label: Default Loading Page\n        value: default-loading-page\n      -\n        label: Shapes\n        value: loading-page-style-default\n      -\n        label: Custom Text\n        value: loading-custom-text\n      -\n        label: Default Text w/ Icons Before and After\n        value: loading-add-icons\n      -\n        label: Cat (GIF)\n        value: loading-animation-cat\n      -\n        label: Adding Image or Animation (GIF)\n        value: loading-animation-custom\n      -\n        label: Animation with Position Changing\n        value: loading-shape-with-custom-gif\n      -\n        label: Jumping Mario\n        value: loading-page-style-mario\n\n  -\n    id: loading-custom-text-folder\n    title: 2.3.14.1 Custom text\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: loading-diy-text\n    title: Custom text\n    title.zh: 自定义文字\n    type: variable-text\n    default: \"'快乐摸鱼又一天，人生还剩多少天？'\"\n  -\n    id: font-loading-text\n    title: Font family of custom text\n    title.zh: 字体\n    type: variable-text\n    default: var(--font-monospace-theme)\n  -\n    id: font-size-loading-diy-text\n    title: Font size\n    type: variable-text\n    default: 3em\n  -\n    id: loading-diy-text-color\n    title: Text color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: loading-text-typing-style\n    title: Typing style\n    title.zh: 打字效果\n    type: class-toggle\n    default: true\n  -\n    id: loading-text-moving-style\n    title: Moving style\n    title.zh: 移动效果\n    type: class-toggle\n    default: false\n  -\n    id: loading-text-shinning-style\n    title: Shinning style\n    title.zh: 闪烁效果\n    type: class-toggle\n    default: false\n  -\n    id: loading-text-color-changing-style\n    title: Color-changing style\n    title.zh: 变色效果\n    type: class-toggle\n    default: false\n  -\n    id: loading-add-icons-folder\n    title: 2.3.14.2 Custom image/animation\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: loading-text-before\n    title: Adding things before\n    type: variable-text\n    default: \"'❀✿'\"\n  -\n    id: loading-text-after\n    title: Adding things after\n    type: variable-text\n    default: \"'✿❀'\"\n  -\n    id: font-size-loading-add\n    title: Font size\n    type: variable-text\n    default: 1.5em\n  -\n    id: loading-add-text-color\n    title: Text color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#D3959B'\n    default-dark: '#D3959B'\n  -\n    id: loading-add-text-color-alt\n    title: Text color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#BFE6BA'\n    default-dark: '#BFE6BA'\n  -\n    id: loading-animation-custom-folder\n    title: 2.3.14.3 Custom image/animation\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: loading-page-custom-gif-url\n    title: Custom loading page image/animation\n    type: variable-text\n    default: url(https://)\n  -\n    id: loading-page-custom-gif-caption\n    title: Image caption\n    type: variable-text\n    default: \" \"\n  -\n    id: loading-shape-with-custom-gif-folder\n    title: 2.3.14.4 Custom image/animation with position changing\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: loading-page-custom-gif-caption-alt\n    title: Image caption\n    type: variable-text\n    default: \" \"\n  -\n    id: loading-shape-with-custom-high-contrast-bg\n    title: High contrast background\n    title.zh: 高对比度背景\n    type: class-toggle\n    default: false\n  -\n    id: tag-color-settings\n    title: 2.3.15 Tags\n    title.zh: 2.3.15 标签 (#Tag)\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: tag-click\n    title: Cancel click the tag to trigger auto-jump\n    title.zh: 取消实时预览模式下点击标签自动跳转\n    type: class-toggle\n    default: false\n    description: You can jump by clicking on the # marks in the tags\n    description.zh: 可以通过点击标签中的#号跳转\n  -\n    id: head-tag-style\n    title: Label superscript in the header\n    title.zh: 标题中的标签上标样式\n    type: class-toggle\n    default: false\n    description.zh: 标题出现标签自动上标，也可以用<sup></sup> 或者<sub></sub>包裹实现不一样的样式。\n  -\n    id: tag-style-option\n    title: Tag Style\n    title.zh: 标签样式\n    type: class-select\n    allowEmpty: false\n    default: tag-default\n    options:\n      -\n        label: Rainbow tag\n        value: rainbow-tag\n      -\n        label: Rainbow tag alt (No influence on emojis)\n        value: rainbow-tag-no-filter\n      -\n        label: Outlined\n        value: tag-pill-outlined\n      -\n        label: Clear\n        value: tag-clear-style\n      -\n        label: Obsidian default\n        value: tag-default\n      -\n        label: Customised colorful tag\n        value: colorful-tag-bt\n  -\n    id: customised-colorful-tag\n    title: 2.3.15.1 Customised colorful tag\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: tag1\n    title: Tag-1\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: tag2\n    title: Tag-2\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: tag3\n    title: Tag-3\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: tag4\n    title: Tag-4\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: tag5\n    title: Tag-5\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: tag-text\n    title: Tag text\n    type: variable-themed-color\n    opacity: false\n    format: hex\n    default-light: '#f8f8f8'\n    default-dark: '#e4e4e4'\n  -\n    id: outlined-style\n    title: 2.3.15.2 Outlined\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: tag-border-width\n    title: Tag border width\n    title.zh: 标签边框宽度\n    type: variable-text\n    default: 1px\n  -\n    id: tag-color-settings\n    title: 2.3.16 Setting, Menu, Option panes\n    title.zh: 2.3.16 设置、菜单、选项面板\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: setting-etc-pane-style\n    title: Pane style\n    type: class-select\n    allowEmpty: false\n    default: setting-style-traditional\n    options:\n      -\n        label: Frosted Glass\n        value: setting-default-frosted-glass\n      -\n        label: Traditional\n        value: setting-style-traditional\n      -\n        label: Translucent (only for setting panel)\n        value: translucent-setting-panel\n  -\n    id: titlebar-settings\n    title: 2.3.17 Titlebar style\n    title.zh: 2.3.17 标题栏样式\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: bt-colorful-titlebar\n    title: Colorful titlebar\n    title.zh: 开启顶部多彩标题栏样式\n    type: class-toggle\n    default: false\n  -\n    id: background-titlebar-inner\n    title: Titlebar background color\n    title.zh: 标题栏背景颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: titlebar-close-button\n    title: Titlebar close button\n    title.zh: Ob标题栏关闭按钮\n    type: class-select\n    allowEmpty: false\n    default: default-titlebar\n    options:\n      -\n        label: Default\n        value: default-titlebar\n      -\n        label: Reversal\n        value: reversal-titlebar\n  -\n    id: hide-titlebar-text\n    title: Hide text in title bar\n    title.zh: 隐藏Obsidian标题栏中的文字\n    type: class-toggle\n    default: false\n  -\n    id: hide-titlebar-close-btn\n    title: Auto-hide title bar close button\n    title.zh: 自动隐藏关闭按钮\n    type: class-toggle\n    default: false\n  -\n    id: outline-settings\n    title: 2.3.18 Outline\n    title.zh: 2.3.18 侧边栏大纲\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: outline-style\n    title: Outline style\n    title.zh: 大纲样式\n    type: class-select\n    allowEmpty: false\n    default: default-outline-style\n    options:\n      -\n        label: Default\n        value: default-outline-style\n      -\n        label: Logseq\n        value: logseq-outline-style\n  -\n    id: nowrap-outline\n    title: Nowrap\n    title.zh: 不换行\n    type: class-toggle\n    default: false\n  -\n    id: prompt-settings\n    title: 2.3.19 Prompt (ctrl p)\n    title.zh: 2.3.19 提示框 (ctrl p)\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: prompt-options\n    title: Prompt styles\n    title.zh: 提示框唤出样式\n    type: variable-select\n    allowEmpty: false\n    default: default-prompt-style\n    options:\n      -\n        label: Default\n        value: default-prompt-style\n      -\n        label: Fancy prompt 1\n        value: fancy-prompt-1\n      -\n        label: Slide Up Large\n        value: slideUpLarge\n      -\n        label: Quick Scale Down\n        value: quickScaleDown\n      -\n        label: Blow Up Modal\n        value: blowUpModal\n      -\n        label: Road Runner In\n        value: roadRunnerIn\n      -\n        label: Road Runner Out\n        value: roadRunnerOut\n      -\n        label: Unfold In\n        value: unfoldIn\n      -\n        label: Pop-swirl\n        value: pop-swirl\n  -\n    id: stack-settings\n    title: 2.3.20 Stack tabs\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: stack-tabs-text-ori-options\n    title: Text orientation styles\n    title.zh: stack 模式汉字竖排\n    type: class-select\n    allowEmpty: false\n    default: stack-tab-text-ori-mixed\n    options:\n      -\n        label: Default\n        value: default-stack-text-ori-style\n      -\n        label: Mixed orientation\n        value: stack-tab-text-ori-mixed\n  -\n    id: stack-tabs-background-blur-depth\n    title: stack tabs background blur radius\n    title.zh: 堆叠模式下笔记背景模糊程度\n    description: To adjust the radius of blur\n    description.zh: 调整背景模糊程度\n    type: variable-number-slider\n    default: 40\n    format: px\n    min: 0\n    max: 200\n    step: 10\n  -\n    id: tabs-settings\n    title: 2.3.21 Tabs\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: tab-head-style\n    title: Tab style\n    type: class-select\n    allowEmpty: false\n    default: default-tab\n    options:\n      -\n        label: Default\n        value: default-tab\n      -\n        label: Underline\n        value: underline-tab-style\n      -\n        label: Safari-style\n        value: safari-tab-style\n      -\n        label: Transparent-style\n        value: transparent-tab-style\n  -\n    id: mermaid-styles\n    title: 2.3.21 Mermaid\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: resizable-mermaid\n    title: Resizable mermaid in reading mode\n    title.zh: 阅读模式可调整mermaid大小\n    type: class-toggle\n    default: false\n  -\n    id: canvas-styles\n    title: 2.3.23 Canvas\n    title.zh: 2.3.23 白板 Canvas\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: canvas-card-focus-mode\n    title: Canvas card focus mode (Unavailable)\n    title.zh: 开启Canvas聚焦模式 （不可用）\n    description: clicking on a card will highlight all cards and lines of the same color on the canvas When turned on\n    description.zh: 开启后 点击卡片会突出显示画布上所有相同颜色的卡片和线条\n    type: class-toggle\n    default: false\n    addCommand: true\n  -\n    id: zoom-multiplier\n    title: Canvas card size for \"Zoom to selection\"\n    title.zh: “聚焦”时卡片大小\n    type: variable-number-slider\n    default: 1\n    min: 0.5\n    max: 2\n    step: 0.05\n  -\n    id: canvas-card-text-middle\n    title: Canvas card text center align\n    title.zh: 卡片文字默认居中\n    type: class-toggle\n    default: false\n  -\n    id: canvas-card-opacity\n    title: Canvas card opacity\n    title.zh: 卡片透明度\n    type: variable-number-slider\n    default: 0.1\n    min: 0\n    max: 1\n    step: 0.05\n  -\n    id: canvas-workplace-background-heading\n    title: 2.3.23.1 canvas workplace background settings\n    title.zh: 2.3.23.1 canvas页面背景设置\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: toggle-canvas-grid\n    title: Toggle canvas grid\n    title.zh: 关闭Canvas网格显示\n    type: class-toggle\n    default: false\n  -\n    id: canvas-workplace-background\n    title: Toggle canvas workplace background\n    title.zh: 关闭Canvas工作区背景\n    description.zh: 如果开启了1.2.1工作页面背景，编辑画板也会带有背景，这里可以关闭画板背景\n    type: class-toggle\n    default: false\n  -\n    id: canvas-background\n    title: Custom canvas background color\n    title.zh: 自定义canvas背景色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: tab-stack-folder\n    title: 2.3.24 Tab stack\n    title.zh: 2.3.24 堆叠标签页\n    type: heading\n    level: 3\n    collapsed: true\n\t-\n\t\tid: tab-stacked-pane-width\n\t\ttitle: Tag stacked pane with\n\t\ttype: variable-number\n\t\tdefault: 700\n\t\tformat: px\n\t-\n\t\tid: tab-stacked-header-width\n\t\ttitle: Spine width\n\t\ttype: variable-number\n\t\tdefault: 40\n\t\tformat: px\n  -\n    id: highlight-bg-color-folder\n    title: 2.3.25 Highlights (==xx==)\n    title.zh: 2.3.25 高亮 (==xx==)\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: text-highlight\n    title: Highlight text color\n    title.zh: 高亮文本颜色\n    description: ==XXXXX== color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: highlight-style\n    title: Highlight styles\n    title.zh: 高亮样式\n    type: class-select\n    allowEmpty: false\n    default: bt-default-highlight\n    options:\n      -\n        label: Default\n        value: bt-default-highlight\n      -\n        label: All rounded corners (@Mon & @TheGodOfKing)\n        value: all-rounded-corners-highlight\n      -\n        label: No rounded corners\n        value: no-rounded-corners-highlight\n  -\n    id: highlight-bg-color-head\n    title: Highlight background color\n    title.zh: 高亮背景颜色\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: text-highlight-bg-h-light\n    title: Hue (Light mode)\n    description: To adjust Hue\n    description.zh: 调整颜色 明亮模式\n    type: variable-number-slider\n    default: 34\n    min: 0\n    max: 360\n    step: 5\n  -\n    id: text-highlight-bg-s-light\n    title: Saturation (Light mode)\n    description: To adjust Saturation\n    description.zh: 调整饱和度 明亮模式\n    type: variable-number-slider\n    default: 100\n    min: 0\n    max: 100\n    step: 5\n    format: \"%\"\n  -\n    id: text-highlight-bg-l-light\n    title: Lightness (Light mode)\n    description: To adjust Lightness\n    description.zh: 调整亮度 明亮模式\n    type: variable-number-slider\n    default: 80\n    min: 0\n    max: 100\n    step: 5\n    format: \"%\"\n  -\n    id: text-highlight-bg-a-light\n    title: Opacity (Light mode)\n    description: To adjust Alpha\n    description.zh: 调整透明度（Alpha）明亮模式\n    type: variable-number-slider\n    default: 0.80\n    min: 0\n    max: 1\n    step: 0.05\n  -\n    id: text-highlight-bg-h-dark\n    title: Hue (Dark mode)\n    description: To adjust Hue\n    description.zh: 调整颜色 黑暗模式\n    type: variable-number-slider\n    default: 57\n    min: 0\n    max: 360\n    step: 5\n  -\n    id: text-highlight-bg-s-dark\n    title: Saturation (Dark mode)\n    description: To adjust Saturation\n    description.zh: 调整饱和度 黑暗模式\n    type: variable-number-slider\n    default: 40\n    min: 0\n    max: 100\n    step: 5\n    format: \"%\"\n  -\n    id: text-highlight-bg-l-dark\n    title: Lightness (Dark mode)\n    description: To adjust Lightness\n    description.zh: 调整亮度 黑暗模式\n    type: variable-number-slider\n    default: 38\n    min: 0\n    max: 100\n    step: 5\n    format: \"%\"\n  -\n    id: text-highlight-bg-a-dark\n    title: Opacity (Dark mode)\n    description: To adjust Alpha\n    description.zh: 调整透明度（Alpha）黑暗模式\n    type: variable-number-slider\n    default: 0.55\n    min: 0\n    max: 1\n    step: 0.05\n  -\n    id: colorful-highlight-head\n    title: Colorful highlight setting\n    title.zh:  多彩高亮背景颜色\n    type: heading\n    level: 4\n    collapsed: true\n  -\n    id: remove-colorful-highlight-bg\n    title: Deactivate colorful-highlight\n    title.zh: 取消多彩高亮颜色\n    description: In this theme, *==xxx==*, **==xxx==** and ***==xxx==*** possese different background colors by default, active this option to cancel it. Even with this option actived, you can still type \"cssclass：colorful-highlight\" into yaml to make the colorful-highlight style available to individual documents\n    description.zh: 当前主题下，*==xxx==*, **==xxx==** and ***==xxx==*** 默认情况下具有不同高亮背景色，激活该选项以取消。即使取消了该功能，你依旧可以在yaml中键入\"cssclass：colorful-highlight\"，使单个文档激活多彩高亮功能\n    type: class-toggle\n    default: false\n  -\n    id: bg-color-highlight-1\n    title: Highlight background color Plus 1 (*==xx==*)\n    title.zh: 高亮颜色 Plus 1 (*==xx==*)\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#ff000034'\n    default-dark: '#c865656f'\n  -\n    id: color-highlight-1\n    title: Highlight text color Plus 1 (*==xx==*)\n    title.zh: 高亮文字颜色 Plus 1 (*==xx==*)\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: font-weight-highlight-1\n    title: Font weight of highlight text Plus 1 (*==xx==*)\n    title.zh: 字重 Plus 1 (*==xx==*)\n    description: Can type normal, bold, lighter or bolder to change the font weight\n    description.zh: 可以输入 normal, bold, lighter 或者 bolder 去改变字重\n    type: variable-text\n    default: normal\n  -\n    id: bg-color-highlight-2\n    title: Highlight background color Plus 2 (**==xx==**)\n    title.zh: 高亮颜色 Plus 2 (**==xx==**)\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#0fc41835'\n    default-dark: '#54b9476f'\n  -\n    id: color-highlight-2\n    title: Highlight text color Plus 2 (**==xx==**)\n    title.zh: 高亮文字颜色 Plus 2 (**==xx==**)\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: font-weight-highlight-2\n    title: Font weight of highlight text Plus 2 (**==xx==**)\n    title.zh: 字重 Plus 2 (**==xx==**)\n    description: Can type normal, bold, lighter or bolder to change the font weight\n    description.zh: 可以输入 normal, bold, lighter 或者 bolder 去改变字重\n    type: variable-text\n    default: normal\n  -\n    id: bg-color-highlight-3\n    title: Highlight background color Plus 3 (***==xx==***)\n    title.zh: 高亮颜色 Plus 3 (***==xx==***)\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#4ca6ff51'\n    default-dark: '#1e83d086'\n  -\n    id: color-highlight-3\n    title: Highlight text color Plus 3 (***==xx==***)\n    title.zh: 高亮文字颜色 Plus 3 (***==xx==***)\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: font-weight-highlight-3\n    title: Font weight of highlight text Plus 3 (***==xx==***)\n    title.zh: 字重 Plus 3 (***==xx==***)\n    description: Can type normal, bold, lighter or bolder to change the font weight\n    description.zh: 可以输入 normal, bold, lighter 或者 bolder 去改变字重\n    type: variable-text\n    default: normal\n  -\n    id: highlight-bg-color-folder\n    title: 2.3.26 Popover \n    title.zh: 2.3.26 悬浮预览弹窗\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: background-popover\n    title: Hover popover background color\n    title.zh: 悬浮弹窗背景色\n    description: --background-popover\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: popover-width-factor\n    title: Popover width\n    title.zh: 弹窗宽度\n    type: variable-number-slider\n    default: 1\n    min: 0.5\n    max: 2.5\n    step: 0.05\n  -\n    id: popover-height-factor\n    title: Popover height\n    title.zh: 弹窗宽度\n    type: variable-number-slider\n    default: 1\n    min: 0.5\n    max: 2\n    step: 0.05\n  -\n    id: style-options-for-other-plugins\n    title: 3. For Plugins\n    title.zh: 3. 插件样式\n    type: heading\n    level: 1\n    collapsed: true\n  -\n    id: style-options-for-admonition-plugin-header\n    title: 3.1 Admonition & Callout style\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: admonition-bg-color\n    title: Admontion codebock and Callout background\n    title.zh: Admonition 和 Callout背景色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#FFFFFF00'\n    default-dark: '#11111100'\n  -\n    id: admonition-bg-color-same\n    title:  The same as the title color\n    title.zh: 背景色与标题色一致\n    description.zh: Obsidian 默认callout样式\n    type: class-toggle\n    default: false\n  -\n    id: callout-style-settings\n    title: callout style settings\n    title.zh: Callout 外观样式设置\n    type: class-select\n    allowEmpty: false\n    default: admonition-bg-color-same\n    options:\n      -\n        label: Default\n        value: admonition-bg-color-same\n      -\n        label: Traditional\n        value: traditional-callout-style\n      -\n        label: Border\n        value: border-callout-style\n      -\n        label: Shade\n        value: shade-callout-style\n  -\n    id: full-width-callout\n    title: Full-width layout for callout & admonition\n    title.zh: callout和ad块全宽显示\n    description.zh: 不收缩减栏宽影响，全宽显示callout块\n    type: class-toggle\n    default: false\n  -\n    id: style-options-for-admonition-plugin\n    title: Admonition special style support\n    title.zh: 是否开启Admonition特别样式支持\n    type: class-toggle\n    default: true\n    description : 目前支持ad类型：blank 全透明框🔸def definition🔸thm theorem🔸lem lemma🔸cor corollary🔸pro proposition 🔸hibox  自动隐藏框🔸col2 col3 col4内容分多栏🔸kanban 伪看板🔸table 表格单行全部显示❗使用方法❗下面以thm类型为例，在admonition插件的设置页面中，类型填 thm，标题填 定理，图标选择hand-point-right，颜色自己选比如浅绿色，添加成功后，在正文中使用代码块```ad-thm 即可激活。其他类型以此类推。\n  -\n    id: style-options-for-calendar-plugin-header\n    title: 3.2 Calendar\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: toggle-calendar-shadow\n    title: Toggle shadow of current date\n    title.zh: 开启日历中当前日期的阴影\n    type: class-toggle\n    default: false\n  -\n    id: toggle-calendar-transparent\n    title:  Transparent calendar background\n    title.zh: 日历背景透明\n    type: class-toggle\n    default: false\n  -\n    id: style-options-for-calendar-plugin\n    title: Calendar\n    type: class-select\n    allowEmpty: false\n    default: style-options-for-calendar-plugin-default\n    options:\n      -\n        label: Default\n        value: style-options-for-calendar-plugin-default\n      -\n        label: Style 1\n        value: style-options-for-calendar-plugin-style-one\n      -\n        label: Style 2\n        value: style-options-for-calendar-plugin-style-two\n  -\n    id: rainbow-checklist-folder\n    title: 3.3 Checklist plugin\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: rainbow-checklist\n    title: Rainbow checklist\n    title.zh: 彩虹色条目\n    type: class-toggle\n    default: false\n  -\n    id: style-options-for-kanban-plugin-header\n    title: 3.4 Kanban\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: style-options-for-kanban-plugin-static\n    title: Static\n    type: class-select\n    allowEmpty: false\n    default: style-options-for-kanban-plugin-static-default\n    options:\n      -\n        label: Default\n        value: style-options-for-kanban-plugin-static-default\n      -\n        label: All color (instead of images in light mode)\n        value: style-options-for-kanban-plugin-static-all-color\n      -\n        label: All image-1\n        value: style-options-for-kanban-plugin-static-all-image-one\n      -\n        label: All image-2 abstract\n        value: style-options-for-kanban-plugin-static-all-image-two\n      -\n        label: Plain\n        value: style-options-for-kanban-plugin-static-plain\n      -\n        label: Little color\n        value: style-options-for-kanban-plugin-static-little-color\n  -\n    id: style-options-for-kanban-plugin-dynamic\n    title: Dynamic\n    type: class-select\n    allowEmpty: false\n    default: style-options-for-kanban-plugin-dynamic-default\n    options:\n      -\n        label: None\n        value: style-options-for-kanban-plugin-dynamic-default\n      -\n        label: Neon-1\n        value: style-options-for-kanban-plugin-dynamic-neon-one\n      -\n        label: Neon-2\n        value: style-options-for-kanban-plugin-dynamic-neon-two\n      -\n        label: Neon-3\n        value: style-options-for-kanban-plugin-dynamic-neon-three\n  -\n    id: style-options-for-buttons-plugin-heading\n    title: 3.5 Buttons\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: style-options-for-buttons-plugin\n    title: Buttons special style support\n    title.zh: 是否开启Buttons特别样式支持\n    type: class-toggle\n    default: true\n    description : 目前内置class：🔸circle_btn 圆形按钮🔸blank 透明按钮🔸grad_button渐变按钮🟣g_purple 紫色🔵g_blue蓝色🟢g_green 绿色💚g_lightgreen 浅绿🟡g_yellow黄色\n  -\n    id: style-options-for-buttons-plugin-heading\n    title: 3.6 Dataview\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: style-options-for-dataview-plugin-heading\n    title: 3.6.1 Dataview list\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: folder-dataview-list-style\n    title: Style\n    title.zh: 样式\n    type: class-select\n    allowEmpty: false\n    default: dataview-list-style-pacman\n    options:\n      -\n        label: Pac-man\n        value: dataview-list-style-pacman\n      -\n        label: Normal\n        value: dataview-list-style-normal\n  -\n    id: style-options-for-dataview-table-plugin-heading\n    title: 3.6.2 Dataview table\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: dvtable-style-options\n    title: Dataview table format\n    title.zh: Dataview 表格格式\n    type: class-select\n    allowEmpty: false\n    default: default-dvtable\n    options:\n      -\n        label: Defaut table\n        value: default-dvtable\n      -\n        label: Wrapped table (break all)\n        value: wrapped-dvtable\n      -\n        label: Non-wrapped table (limited cell width)\n        value: no-wrapped-dvtable-cell\n      -\n        label: Non-wrapped table\n        value: no-wrapped-dvtable\n  -\n    id: auto-serial-number-dvtable\n    title: Automatically add serial numbers to tables\n    title.zh: Dataview表格自动添加序号\n    type: class-toggle\n    default: false\n  -\n    id: full-width-dvtable\n    title: Full-width dvtable display\n    title.zh: dataview表格全宽显示\n    description: for Reading View, require Contextual Typography plugin\n    description.zh: 阅读模式下，实现效果需要安装Contextual Typography插件\n    type: class-toggle\n    default: false\n  -\n    id: style-options-for-dialogue-plugin-heading\n    title: 3.7 Dialogue & Chatview\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: dialogue-style\n    title: Dialogue & Chatview Style\n    title.zh: 聊天框样式\n    type: class-select\n    allowEmpty: false\n    default: dialogue-style-default\n    description.zh: Wechat样式适合titleMode：all ，chat样式适合 titleMode：first\n    description: Wechat options is for ’titleMode：all‘ ，chat options is for  ‘titleMode：first’\n    options:\n      -\n        label: Default\n        value: dialogue-style-default\n      -\n        label: Wechat\n        value: dialogue-style-wechat\n      -\n        label: Chat\n        value: dialogue-style-chat\n  -\n    id: style-options-for-Thino-plugin-heading\n    title: 3.9 ✏️Thino\n    description: Adapted from @Quorafind's Thino Plugin\n    type: heading\n    level: 2\n    collapsed: false\n  -\n    id: style-options-for-Thino-plugin-heading-1\n    title: 3.9.1 Thino  style\n    title.zh: 3.9.1 Thino  全局样式\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: memos-inputbox\n    title: Put input box to bottom\n    title.zh: PC端memos输入框置于页面底部\n    type: class-toggle\n    default: false\n  -\n    id: memos-hide-header\n    title: hider Thino header\n    title.zh: 隐藏thino 视图的头部\n    type: class-toggle\n    default: false\n  -\n    id: memos-scroll\n    title: add Thino list scroll\n    title.zh: 列表 瀑布流模式下给thino 增加一个滚动条\n    type: class-toggle\n    default: false\n  -\n    id: hider-memos-modern-banner\n    title: hide thino modern moment banner\n    title.zh: 隐藏Thino modern 主题下的动态视图的banner\n    type: class-toggle\n    default: false\n  -\n    id: memos-banner-gradient\n    title: moment banner gradient\n    title.zh: 动态视图的banner 渐变显示\n    type: class-toggle\n    default: true\n  -\n    id: thino-view-style\n    title: thino style\n    title.zh: Thino的风格\n    type: class-select\n    allowEmpty: false\n    default: thino-frosted-style\n    options:\n      -\n        label: default\n        value: thino-default\n      -\n        label: Frosted Style(Transparent)\n        value: thino-frosted-style\n      -\n        label: Frosted Style\n        value: thino-frosted-style-default\n  -\n    id: thino-view-background\n    title: custom thino background\n    title.zh: 自定义Thino背景\n    type: class-select\n    allowEmpty: false\n    default: thino-background-default\n    options:\n      -\n        label: default\n        value: thino-background-default\n      -\n        label: custom color  \n        value: thino-background-color  \n      -\n        label: Custom background img\n        value: custom-thino-background\n  -\n    id: thino-modern-primary\n    title: thino  background color\n    title.zh: thino 背景色\n    type: variable-themed-color\n    opacity: true\n    format: hsl-split\n    default-light: '#ebf3ee'\n    default-dark: '#1e1e1e'\n  -\n    id: thino-background-light-custom\n    title: Custom thino background light (url)\n    title.zh: 自定义Thino背景（亮色模式）\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置在线图片。 \n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: thino-background-dark-custom\n    title: Custom thino background dark (url)\n    title.zh: 自定义Thino背景（暗色模式）\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置在线图片。 \n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: style-options-for-Thino-plugin-share-heading\n    title: 3.9.2 Thino share style\n    title.zh: 3.9.2 Thino 卡片分享样式\n    type: heading\n    level: 3\n    collapsed: true\n  -\n    id: share-thino-style\n    title: share thino style\n    title.zh: Thino分享样式\n    type: class-select\n    allowEmpty: false\n    default: thino-share-default\n    options:\n      -\n        label: default\n        value: thino-share-default\n      -\n        label: Same as workspace background\n        value: share-thino-with-workspace-background\n      -\n        label: Same as  thino  background \n        value: share-thino-with-thino-background\n      -\n        label: Custom share background\n        value: custom-thino-share-background\n  -\n    id: share-card-background-opacity-cp\n    title: Share Card Background Opacity\n    title.zh: 分享卡片背景透明度\n    type: variable-number-slider\n    default: 0.6\n    min: 0\n    max: 1\n    step: 0.05\n  -\n    id: share-card-background-color\n    title: Share Card Background color（Gradient Mode）\n    title.zh: 自定义分享卡片渐变背景颜色（渐变模式生效）\n    type: variable-themed-color\n    opacity: true\n    format: hsl-split\n    default-light: '#ffafbd'\n    default-dark: '#1e1e1e'\n  -\n    id: share-thino-background-light-custom\n    title: Custom thino share background light (url)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置在线图片。 \n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: share-thino-background-dark-custom\n    title: Custom thino share background dark (url)\n    description: Customise the background image. Use the format in the Default below for an Online image. \n    description.zh: 需在上方选项种选择Custom，以自定义背景。使用Default内格式设置在线图片。 \n    type: variable-text\n    default: url(\"https://\")\n  -\n    id: style-options-for-backlinks-panel\n    title: 3.10 backlinks panel\n    title.zh: 3.10 反链面板\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: full-width-backlinks\n    title: Full-width backlinks panel display\n    title.zh: 笔记中的反链面板全宽度显示\n    type: class-toggle\n    default: false\n  -\n    id: style-options-for-quiet-outline\n    title: 3.11 Quiet outline\n    title.zh: 3.11 Quiet outline\n    type: heading\n    level: 2\n    collapsed: true\n  -\n    id: quiet-outline-optimize\n    title: Optimize quiet-outline plugin\n    title.zh: 美化 quiet-outline 插件\n    type: class-toggle\n    default: true\n  -\n    id: build-in-style-folder\n    title: 4. Built-in style intro\n    title.zh: 4. 内置样式介绍\n    description: There are some built-in CSS classes that should be manually declared in the YAML area. Details refer to the TIPS demo vault for Blue Topaz on Github.\n    description.zh: 主题内置css类，手动在文档YAML区域进行cssclass声明，详细用法可以参考主题tips库，可以在主题QQ群（社区）获取。\n    type: heading\n    level: 1\n    collapsed: true\n  -\n    id: built-in-style-kanban\n    title: Pseudo-kanban\n    title.zh: 伪看板 kanban\n    type: heading\n    level: 2\n    collapsed: false\n    description:  ❗cssclass：kanban❗ A kind of kanban-liked style for unordered lists. (Adapted from Spectrum theme by @Wiktoria Mielcarek)\n    description.zh:  ❗cssclass：kanban❗ 实现类似看板样式并排显示，只对无序列表生效。改自Spectrum theme by @Wiktoria Mielcarek\n  -\n    id: simple-p-kanban\n    title: Simple pseudo-kanban\n    title.zh: 单色伪看板\n    description: Remove colors of pseudo-kanban\n    description.zh: 移除伪看板头部颜色\n    type: class-toggle\n    default: false\n  -\n    id: remove-shadow-p-kanban\n    title: Remove shadow of pseudo-kanban\n    title.zh: 移除伪看板触发阴影\n    type: class-toggle\n    default: false\n  -\n    id: colorful-p-kanban\n    title: Colorful pseudo-kanban\n    title.zh: 多彩伪看板\n    type: class-toggle\n    default: false\n  -\n    id: blur-p-kanban-frosted-glass\n    title: Blur radius (For Frosted Glass Style)\n    title.zh: 模糊程度 (毛玻璃效果)\n    type: variable-number-slider\n    default: 2\n    min: 0\n    max: 8\n    step: 1\n  -\n    id: p-kanban-color-1\n    title: pseudo-kanban color 1\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#52aaf365'\n    default-dark: '#3496e652'\n  -\n    id: p-kanban-color-2\n    title: pseudo-kanban color 2\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#84ecec65'\n    default-dark: '#2ec4c452'\n  -\n    id: p-kanban-color-3\n    title: pseudo-kanban color 3\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#94ec8c65'\n    default-dark: '#38ce2a52'\n  -\n    id: p-kanban-color-4\n    title: pseudo-kanban color 4\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#dce28765'\n    default-dark: '#d2dd3852'\n  -\n    id: p-kanban-color-5\n    title: pseudo-kanban color 5\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#eeb36f65'\n    default-dark: '#eb973752'\n  -\n    id: p-kanban-color-6\n    title: pseudo-kanban color 6\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#f18e8e65'\n    default-dark: '#f3424252'\n  -\n    id: p-kanban-color-7\n    title: pseudo-kanban color 7\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#e677e065'\n    default-dark: '#e45bdd52'\n  -\n    id: p-kanban-color-8\n    title: pseudo-kanban color 8\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#ba8be165'\n    default-dark: '#b962ff52'\n  -\n    id: p-kanban-card-color-1\n    title: pseudo-kanban-card subitem color\n    title.zh: 伪看板子项背景色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#f9f9f99b'\n    default-dark: '#0000003f'\n  -\n    id: p-kanban-border-color\n    title: pseudo-kanban-border color\n    title.zh: 伪看板边框颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#a0a0a060'\n    default-dark: '#00000000'\n  -\n    id: built-in-style-code-wrap\n    title:  Code Wrap\n    title.zh: 代码行自动换行 code-wrap\n    type: heading\n    level: 2\n    collapsed: true\n    description.zh:  ❗cssclass：code-wrap❗实现代码块中的代码行自动换行。\n    description:  ❗cssclass：code-wrap❗ Can be used to wrap code in code blocks for individual .md file\n  -\n    id: built-in-style-inline-list\n    title:  List in a horizontal row (inline list)\n    title.zh: 行内列表 inline-list\n    type: heading\n    level: 2\n    collapsed: true\n    description.zh:  ❗cssclass：inline-list❗列表项横向排布。\n    description:  ❗cssclass：inline-list❗ To make the list show in a horizontal row. Meanwhile, it makes the list show inline which can be used with inline images (like ![[xxx.jpg|inlineR]])\n  -\n    id: built-in-style-img-grid\n    title:  Image grid\n    title.zh: 图片自适应横排显示 img-grid\n    type: heading\n    level: 2\n    collapsed: true\n    description.zh:  ❗cssclass：img-grid❗实现图片类似网格一样自适应横排显示。也可以使用类似格式单独调整![[obsidian_image.png|inl|100]]  (adapted from https://github.com/iEchoxu/obsidian_orange/blob/main/.obsidian/snippets/image-grid.css)\n    description: ❗cssclass：img-grid❗ To make images arrange in a grid in the preview mode. (adapted from https://github.com/iEchoxu/obsidian_orange/blob/main/.obsidian/snippets/image-grid.css)\n  -\n    id: built-in-style-matrix\n    title: Eisenhower matrix\n    title.zh: 表格四象图分布 matrix\n    type: heading\n    level: 2\n    collapsed: true\n    description:  ❗cssclass：matrix❗ Usage https://forum.obsidian.md/t/theme-spectrum-version-1-0-0-and-resise-graphs-controls/12688/34 (Adapted from Spectrum theme by @Wiktoria Mielcarek)\n    description.zh:  ❗cssclass：matrix❗ 实现N*2表格四象限分布。表格内容使用![[XXX]]引入 见 https://forum.obsidian.md/t/theme-spectrum-version-1-0-0-and-resise-graphs-controls/12688/34。改自Spectrum theme by @Wiktoria Mielcarek\n  -\n    id: built-in-style-full-width\n    title: full-width layout\n    title.zh: 全宽显示元素 (i.e. wide-dataview, wide-table, wide-callout and wide-backlinks)\n    type: heading\n    level: 2\n    collapsed: true\n    description:  ❗cssclass：fullwidth  wide-dataview wide-table wide-callout  wide-backlinks❗ (Adapted from https://github.com/efemkay @ Faiz Khuzaimah)\n    description.zh:  ❗cssclass：fullwidth wide-dataview wide-table wide-callout  wide-backlinks❗ 分别实现整页，dv表格 md表格 callout  反链面板全宽度布局。改自https://github.com/efemkay @ Faiz Khuzaimah\n  -\n    id: topaz-community\n    title: Supported by Topaz Community 😁\n    title.zh: 感谢Topaz社区支持😁，欢迎来访，QQ群:908688452\n    type: heading\n    level: 1\n    collapsed: false\n  -\n    id: bt-buyacoffe\n    title: Support me\n    description: \"[https://www.buymeacoffee.com/whyi](https://www.buymeacoffee.com/whyi)\"\n    type: info-text\n    markdown: true\n  -\n    id: bt-github\n    title: Star the theme\n    description: \"[https://github.com/PKM-er/Blue-Topaz_Obsidian-css](https://github.com/PKM-er/Blue-Topaz_Obsidian-css)\"\n    type: info-text\n    markdown: true\n*/\n\n/* @settings\nname: 🥑Blue Topaz Codebox Settings\nid: Blue-Topaz-Codebox-Highlight\nsettings:\n  -\n    id: code-header-theme\n    title: Codebox highlighting\n    title.zh: 代码框高亮语法设置\n    type: heading\n    level: 1\n    collapsed: false\n  -\n    id: code-theme-selection\n    title: Codebox highlighting schemes\n    title.zh: 代码高亮主题\n    type: class-select\n    allowEmpty: false\n    default: code-theme-bt-default\n    options:\n      -\n        label: bt-default\n        value: code-theme-bt-default\n      -\n        label: Solarized Light\n        value: code-theme-solarized-light\n      -\n        label: Material Palenight\n        value: code-theme-material-palenight\n      -\n        label: Dracula\n        value: code-theme-dracula\n      -\n        label: Gruvbox Dark\n        value: code-theme-Gruvbox-dark\n      -\n        label: monokai\n        value: code-theme-monokai\n      -\n        label: sublime\n        value: code-theme-sublime\n      -\n        label: Custom\n        value: code-theme-custom\n  -\n    id: code-style-settings\n    title: Codebox style settings\n    title.zh: 代码框样式设置\n    type: heading\n    level: 1\n    collapsed: true\n  -\n    id: mute-code-indent-line\n    title: Mute codebox indent line\n    title.zh: 取消代码块缩进参考线\n    type: class-toggle\n    default: false\n  -\n    id: code-line-number\n    title: Code box showing line numbers (Editing mode)\n    title.zh: 代码显示行号 （编辑模式）\n    description: csslass declares code-line-number to be available for the current document\n    description.zh:  csslass 声明code-line-number 可对单篇note生效\n    type: class-toggle\n    default: false\n  -\n    id: whole-code-wrap\n    title: Code wrap (Reading mode)\n    title.zh: 代码换行 （阅读模式）\n    type: class-toggle\n    default: true\n    addCommand: true\n  -\n    id: remove-language-type\n    title: Toggle showing types of code languages\n    title.zh: 移除阅读模式下代码名称\n    type: class-toggle\n    default: false\n  -\n    id: nowrap-edit-codebox\n    title: Non-wrap Codebox (Live preview)\n    title.zh: 代码不换行 （Live preview）\n    type: class-toggle\n    default: false\n    addCommand: true\n  -\n    id: letter-space-code\n    title: Letter spacing for code\n    title.zh: 代码字间距\n    type: variable-number-slider\n    default: 0\n    min: 0\n    max: 2\n    step: 0.1\n  -\n    id: code-box-style-option\n    title: Codebox style\n    type: class-select\n    allowEmpty: false\n    default: codebox-default-style\n    options:\n      -\n        label: Default\n        value: codebox-default-style\n      -\n        label: Frosted Glass\n        value: codebox-frosted-glass\n  -\n    id: blur-codebox-frosted-glass\n    title: Blur radius (For Frosted Glass Style)\n    title.zh: 模糊程度 (毛玻璃效果)\n    type: variable-number-slider\n    default: 2\n    min: 0\n    max: 8\n    step: 1\n  -\n    id: code-background-colors\n    title: Codebox highlighting background colors\n    title.zh: 代码框高亮背景色设置\n    type: heading\n    level: 1\n    collapsed: true\n  -\n    id: background-code\n    title: Codebox background color\n    title.zh: 代码块背景色\n    type: variable-themed-color\n    format: hex\n    opacity: true\n    default-light: '#292d3e'\n    default-dark: '#292d3e'\n  -\n    id: muted-code-activeline-bg\n    title: Mute codebox active line\n    title.zh: 取消代码块当前行高亮\n    type: class-toggle\n    default: false\n  -\n    id: code-active-line-background-color\n    title: Codebox active line background color\n    title.zh: 代码块当前行背景色\n    type: variable-themed-color\n    format: hex\n    opacity: true\n    default-light: '#353a50'\n    default-dark: '#353a50'\n  -\n    id: code-selection-background\n    title: Codebox selection line background color\n    title.zh: 代码块选中背景色\n    type: variable-themed-color\n    format: hex\n    opacity: true\n    default-light: '#353a50'\n    default-dark: '#353a50'\n  -\n    id: code-block-colors\n    title: Custom codebox syntax highlighting colors\n    title.zh: 自定义语法高亮颜色\n    type: heading\n    level: 1\n    collapsed: true\n  -\n    id: code-normal\n    title: Code block normal color\n    description.zh: 代码框普通字体颜色\n    type: variable-themed-color\n    format: hex\n    opacity: true\n    default-light: '#d4d4d4'\n    default-dark: '#d4d4d4'\n  -\n    id: code-keyword\n    title: Code block keyword color\n    type: variable-themed-color\n    format: hex\n    default-light: '#c792ea'\n    default-dark: '#c792ea'\n  -\n    id: code-value\n    title: Code block number color\n    type: variable-themed-color\n    format: hex\n    default-light: '#ff5370'\n    default-dark: '#ff5370'\n  -\n    id: code-type\n    title: Code block type color\n    type: variable-themed-color\n    format: hex\n    default-light: '#decb6b'\n    default-dark: '#decb6b'\n  -\n    id: code-property\n    title: Code block property color\n    type: variable-themed-color\n    format: hex\n    default-light: '#c792ea'\n    default-dark: '#c792ea'\n  -\n    id: code-variable\n    title: Code block variable color\n    type: variable-themed-color\n    format: hex\n    default-light: '#f07178'\n    default-dark: '#f07178'\n  -\n    id: code-variable-2\n    title: Code block variable-2 color\n    type: variable-themed-color\n    format: hex\n    default-light: '#eeffff'\n    default-dark: '#eeffff'\n  -\n    id: code-variable-3\n    title: Code block variable-3 color\n    type: variable-themed-color\n    format: hex\n    default-light: '#f07178'\n    default-dark: '#f07178'\n  -\n    id: code-qualifier\n    title: Code block qualifier color\n    type: variable-themed-color\n    format: hex\n    default-light: '#decb6b'\n    default-dark: '#decb6b'\n  -\n    id: code-operator\n    title: Code block operator color\n    type: variable-themed-color\n    format: hex\n    default-light: '#89ddff'\n    default-dark: '#89ddff'\n  -\n    id: code-hr\n    title: Code block hr color\n    type: variable-themed-color\n    format: hex\n    default-light: '#98e342'\n    default-dark: '#98e342'\n  -\n    id: code-builtin\n    title: Code block builtin color\n    type: variable-themed-color\n    format: hex\n    default-light: '#ffcb6b'\n    default-dark: '#ffcb6b'\n  -\n    id: code-tag\n    title: Code block tag color\n    type: variable-themed-color\n    format: hex\n    default-light: '#ff5370'\n    default-dark: '#ff5370'\n  -\n    id: code-string-2\n    title: Code block string-2 color\n    description: class-name\n    type: variable-themed-color\n    format: hex\n    default-light: '#f07178'\n    default-dark: '#f07178'\n  -\n    id: code-punctuation\n    title: Code block punctuation color\n    description: code punctuation, bracket color\n    type: variable-themed-color\n    format: hex\n    default-light: '#ff5370'\n    default-dark: '#ff5370'\n  -\n    id: code-comment\n    title: Code block comment color\n    type: variable-themed-color\n    format: hex\n    default-light: '#676e95'\n    default-dark: '#676e95'\n  -\n    id: code-string\n    title: Code block string color\n    type: variable-themed-color\n    format: hex\n    default-light: '#c3e88d'\n    default-dark: '#c3e88d'\n  -\n    id: code-attribute\n    title: Code block attribute color\n    type: variable-themed-color\n    format: hex\n    default-light: '#c792ea'\n    default-dark: '#c792ea'\n  -\n    id: code-function\n    title: Code block function color\n    type: variable-themed-color\n    format: hex\n    default-light: '#c792ea'\n    default-dark: '#c792ea'\n  -\n    id: code-important\n    title: Code block important color\n    type: variable-themed-color\n    format: hex\n    default-light: '#c792ea'\n    default-dark: '#c792ea'\n  -\n    id: cm-atom\n    title: Code block atom color\n    description: Frontmatter keys color\n    type: variable-themed-color\n    format: hex\n    default-light: '#f78c6c'\n    default-dark: '#f78c6c'\n  -\n    id: code-meta\n    title: Code block meta color\n    description: Frontmatter punctuation color\n    type: variable-themed-color\n    format: hex\n    default-light: '#ffcb6b'\n    default-dark: '#ffcb6b'\n  -\n    id: code-language\n    title: Code block language color\n    type: variable-themed-color\n    format: hex\n    default-light: '#ff5370'\n    default-dark: '#ff5370'\n  -\n    id: codeblock-folder\n    title: Inline code\n    title.zh: 行内代码\n    type: heading\n    level: 1\n    collapsed: true\n  -\n    id: background-code-2\n    title: Inline code background color\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: text-color-code\n    title: Inline code color\n    title.zh: 行内代码颜色\n    type: variable-themed-color\n    opacity: true\n    format: hex\n    default-light: '#'\n    default-dark: '#'\n  -\n    id: font-weight-inline-code\n    title: Font weight of inline code\n    title.zh: 行内代码字重\n    type: variable-text\n    default: bold\n*/\n\n@font-face {\n  font-family: 'Lucida Handwriting';\n  src: url('data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAC48AA0AAAAAS8gAAC3kAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlYAXAiDYAmIGgrxUON6C4ESAAE2AiQDgiAEIAWObQeBQAyCCht2Q0VGhI0DQMCn7cj+Px1oIVe/XcEwPK06XcllLaTKLSw8vNi59NYycKp6Dyx9xoZgRwg+7FlrvJvuKE6iG9WwdKFi/PzY9XhOYIgCFpSRd4jCPwJrKXvCDOPPhlJshCSzFq2V1Ti9dxdCUABokYVMJMo4RgsIksCByt8MwLahn7eooCjigzshc4LDCM4iiAoOePOYm7l5lZmdzdq+NvNXunTPhHIIT7m8DJKMqLF0MpIUPBmAqgBeuGmA14CViyZFjyVVqf1jmy+0N2TqmhA6vphnfty/TtxO7g+Sli91OlWe9/92t70/ok6EAQWUkPT/v9Oq6/f0hE8MlkG2Y0dO2D01nQwuoRRZe9SVBk51NVB1DRDV7icwf+3n8mdOeslLnB2tluNtd6Cw7ouSlJbsuWRPCoxBMThDzdunVkm63ztVByXwpMwByNg/60xokqoAFcAWgRK4ASqC6rHP/Mx0m+ue7Tz37R5NAqkgmhsk+j+bZrsrHaztECgECvHrgZsyRZdy9v/Z0c6MLFjpQCvdZa09sBS0fQSrQx3rwtW9awNcpbN9hLYPGNpQdVXKvFRX5qXLS1FUBB1w0XUpqizL2WIEKqK0/e7OD3+zvqKrzrYsTcnEmImRkHL7d8+kGSDdRc2QAfSxWgIgja805g+CuIGUpIWuFNyf8NGMumspIEHk7i3urTamae5t26wyF7ysISnQqdKY0NLaCDAcbcG5ixAl9/8PoXqqHaQS867zx3wzX8+b+WK+IBFn/fjbfMROA3Z/s6CgBZBtEZhaNdwmgmpV4wea/c7xw/zTYh1PjYiEMkYzwZ1hubmSF7kUTnUGkpWbNWn/cx4AbpNJ0Css+NUzeop5Qy/Qji4cAVtJ3387FsFVjC/r2EXCL4O6LKe72UL3IzBu8B2ugSmbbjOe00Vbw03KDtsZe+ckElIvjfCg4CVXxJbjCC9ISqkxDIpBs+zHK6Ij71RgXq7nHWROv6RI1XXSGM4NABrwLDNiEIdO80ne5LfiobLa0bg+LvvnU/+ehvGdUHSNjTiK87hXKMKTw3Jb0VqkLfpQn5mtCW3e9dzeA5zn5/1WIiZ+ughJ2i6b8sXuea8fSfjUEjuiaZBexyAhLsfLwv2PuLZvbVdMtzyD+CNkOesv12HorpP8azRaBScyxcrPy83Jzso0DT0jPS1VC11ml1RamFh5YkWKlarZ9uTMFRQ1gREaq601q3EWyO2DlECqo3Gb00jFdjR0q1p3NtjKams1kSi0HMpNg3JG8avD6C650uaNyrPzfIp//E2JCG2pJsZV9TKRjqeGHY0R0TUd3cVhyYVjGmStHGczeyDONGAtLl55PPePLpteI24lmTlhLi+tOkIk7lZzrGcOKHUgvg8MD/GgH1tNy7hzVlV900Bi97FeBFaNyfrXCbBFXIZuY7RFR0xpPjyha8aBzF0FeoWe0M/6g2sehgf+lZOiYw1ejDWrv7w+dsnrOR7G2q0CDe1B/SHW6m45jn/pLchwLuXDQ4k21tDuqdw5y/hTqhyZoV665MmpLNPYReWpGeaADyw+O8QoxVhWzYblqAgonpEI7Svq+pl6a+/wm3pOZafHVKw6y/zAObd2DGT7ykadRetq86axpqTQp3cnJiU/ICExOlCP5xVKCmrMEBTkshmsDi2BtI8itHsMw0LFDzUGikH2Fftw1ZlE+uUjGGsLqZTiewwspDAq/0Mi2J/fO60DxYmFN/AC6kn43iaohbqOGRnuz0bbGKWzrKyaBW5Wi9jAphWKDZwitHo3HL8065SxVNV1uSe7FvROuuCtNm+r0EbOroOVpfsYJmrbHJQf72pzK3RsR8FUJzdzb/fjGKPdfUiTlRNH+XApkhNfiYElRE09lNO1iMiQbPX0pvLJWU3Ip77T0WVub8q6I3WlzjvYPbzVy6jC5FpDg5zmwhx9zzzwj6HF+WFSasJNeS1oL6H6GkDcjssouTC9TQLg+H9hIEh+Ybf4nkZgQNO71YN6aBz2FZuODrMx2DuiLxvEMAYV+/3pUd+jqS1JHt0XC2kVbJVbk/uKQREezhRnxw1GzjjaCo/205mru7QvbYcjyeanY1HYiWhCF+E370dqJoVSHgmzY3s5iJaUJXV5qjmx6g6lpJuye+MxyVNBQWO0G5LyN/0Flg/VXopY1L7ORVGYglYlTTDhIwkhQJdFaY9lE3qjcbG5LDt12x1LEZpVddgz9LpyJOkHRYTmVlSdz2Ex2bNDIi0R6lIC1AeSAi6EJTdiXU3gbD8Wj7QORSBgMEgnQgAuRRzDn3DNWAsR45B7zerwtEqgvnasfZJNt2iiGcYJxHFNt6URAEWJonIFNZaixsE777ZVFW7rq3PVBrm1wjECPry8iZ02UTC1f+J03GbQ8zi3MTAdf8P0c1UQS+oecktGEu8BAICRX4AskYKLfqw4SsSK6TuoYTtjA8KSs8yOwjTwS0a5/Kk1Qmql3CQ1tonhu5E7GiQBZUZ9Aj8pImHakrDtvIMoEoct0USRxkgFISYvtjfjGUsQwmPiV4sSQFoZtWc+cVv7TkD0Yo8/KurcrOJfNYyTRCMH0GqjOOAK7hERCJyFfPRJQEl6hikJxwpEWYzAsvIDxZ1Ig486ZChojjmMOZV/6VMS1yKAHvlFqjDUJSC7Z5swtb4LSM+yoTi1TLYHOIPpjlGZVSl86dzCOexZBjgVcKwWgDZPQpnq5cyya/1DM58MnR94i37hEhLX9C5JHzvigI9I7TUhXtx0k/i+JfwW4NL2YZ7xd8fJfhl+Ym72SXLkckGkWvZobq2Bh5KwQH6UyrV+GEGZMm9kUt2++JrkdnLSGkFFlEq1ylZNW7debGuWBlrdzc723jb5IQ+SgHslbo7xMJX4/p12RmKL2PPOuo1MbZ2qM+7zyGaNyLsZrtZPdXXAceAiYkHm4a5lId3ISES/LmEYOpr6RRWTmeYZhNuFlWNVeEaSH0weDJCAhaPV2cQMnh9Nkt5o5wBmPVeRHQAby7mHok9A0hwS93/roeBTmdn/4ppmlZDhreCJSce9H7gXV1mBekJ2aiC3ibOV23a0ti+5bnZTYy5Ebs82K986gjLgF3WSmVhWWVQ6nnrX3/iHZGMXwH7ZgHI/7o3/YGxzry0a6MQB87xRsmF/6DR7dNTBb2ZjMQ2uI4DVb5u1JG3MNFcOuXEHScZev+2DPdldTHToy7lm2PrBTYYJYmLwEI+JgrrC8vkgO1YzJ/RPyIdPJtdO99fJeqJCo+jJ9NHKU2d+dLhtql1vImT9pX1KKOCC1zT4HLWu+lDU7/94KtvjjTdBankYK4si6hQ3Ua8bUmrJY3loEHaWFEHIAYGQxqDAWEBP6jAXuLazm0Ya65K77e4Bm4Ck7D1JYkSAAjQpC83f7JEBRg34b5byr1KBCjuJSOxSwOJwOUquwGhinNKuvJSTmP8U2v/jGyX/GJh/tTbl5oYPFlobPvFEx7xLmA+ldaSSInqOkcFR7JEIqdeKQwbaRbs9OjHvkw2bpSZmTFQiuT8rEomaWYK6LlGZhAQsbsq4Llb/63zjxjZlaGQ2N9u7BkXRZSKnODaEqVXTWi61J7mEyJELJYaxjcRlpmJ6XlqJukCfUJBghmTBb97sSRQ1i0ZFC1pwQjbS+d3epR9UC9B121Goh1z8V5Fb04CkNO623uy0WUDy0GCPqifaP+omfAqvUBOAEq7F9QwVscZ7tywYdI3VR9wZx77h6XoK2z3aAxFW+Qpnb6PPSnCq6S9uiqU9IJ4GU2mqbnDIR4TuYGwf1UYDkyEaUwLY7LjA5p4QEg/vFDoEUWDhUgUcbiMlnlih4Qf1NsYM10yRXxjiE/TC2EJYSJBGzvM8HILTQG8acO7Y34qzMSeAba0hZJE+73WjW2QmCVy8Q7vNkM30/V4nO/B8xoT0SH1ndhYcb5bi3g3W0kW7I1T+jCSls8lZuEPGLCXTimVmZup3O8DjiPttruwirf/5cPtCX9pTcN4UELMaR+TI56eCIoyai9Irc2ebJYwYuQFjTdZlYPP4FEpqnVAm5kVfXaY4uVmCYUj56/FdgRrdfaEb8VHWba4Q2MpX/GQYaA0+lqyHJspTdlj7ONeabrww+9lzkeV18SVMsudq4PvkY+Z/KC9sjhn/CHoBwXLeq40x+Soe5czAHFQou16tWR0ln67OgCWrH3R34gv0lK+FjgZGN6+ClgLK3PecDKcWG3RjZW9chZxmKAEJTFAc9f5z1saxG5/3aR0wzcZeWR0+0VskcngySoM/GudEeEic82nLtrlgH/0xojIzUZxWIxu/lDo6eXqw8r82YM/QvByg/afwnG5Ae+fz4btHGgUlWWKzI07BdJTQwLDXZD6UMECEeoVnucAOWV3rUdwAu9ZpGpCcLZRItgOZNyOBLvamWFvwqhzE5asmuagNruwLsywsQ0SEmIIqVMk4N/Bx6GBkuPJ4DlpoWAZrW68xaPt30BuaP8Qdbs9UiwqhKbs+1FO98crf81f6VR23vs774kevJ/ovLy+l+stfrzv/fXb76cwTPPXepiTiy95xb5/qESYR2JwfO3nQIAn76jGKy6yuKT+tupBT25HymxLScRq2jtTpWlPzViHc1D9enXh0I2P8TeDfY4Li+9XGrtrhO8P2kBAdSECNOCCB2uloLv6xemTd7tOHe8qnx9R6H54YHh/+efr0ytZk1Y5e4s3EC9zasqTI4tyQgo3hjGGjiY+ik5OVhXO7cwZBZ0gE6ue6C99nnz6d2SIEaXfO/LjPzocm6c0VsHevgviBxezazn8D4iLmW1SFqQ5INVY7tS3Hc6g0cze0Jln1uZLv0dM7oNJozZk7+7//MI07X1xBQsZopBUdBvbys5Z+jW2RHb7lQExyNIhBOxTkNlRE0WlFp5Rn+qM8NW3iwa+dC16VmB3PohkKoDh03TToieNoiANi98U8yYn+16hGfmWSb68+aLGvL3LM8XkiKiIcPcgAj6rvPp17RnpToAyPfA4g7RDWbf6LPsRRgh7stJ+2AVNWtxtE1xGr87anj+Z9UqZlas5YgjvrN9ToptD8MntnH7wGZKC0WTsNWvjhBPCJOL+vbhmG1KPo80CJwcQYvdZrfT3LWodjQ437bfRL176/AlhYSvXo+mV0byb540Jo2R8ffE74EXTz1q8DXkglqb0i1yUYKDx5FK2fhQNPd8oefrs95WN2tKRejQaD5pfbO/kQ1I0G+CYWl1y8Aq1Sk14ewP9l21p8HHpOL9tyAKRidIUk4BibjniTbVcbOv62h9EoKlCVE2ntkoTzpBjHvAEfGMiwFwfD0SZRVvpzrv75uc4X0LFvNm8Xu6ALExw3Yk6m1yxoRIJAm3EOdCcrHU1O5zfV0HgruwSSF9Ugi6FzpzjTbCDKCW0aK2d2zNGbX0moZwIcMhm3zpQ62Kbme+/jRUMRA8RoLjvzprKgLXfn9XNbz2yc3uZX+g9pp9hGCXq1sWO3oVObXtdu/V3c9f6j+blc5wN0WFECal09f0ebot+Vc/kZmmHm2utxDlRnK21Nbu0By7b+IMvsGloflCvLVCIPgjbxnrniD4bV0yqRe3gX3VMjPGt2SKi/UY011fAX4XSPTtqA+2Yge4ksb5UTX41W2o3HG9zHIlXT764DA0uXCcAg/1SVLXCOmj0dGyCbgDOjWMWoqJbfS1IPqB1O8CTU6A2AR8HMKq2lXG9KlPKTLJ+vEYpSmRHXN29v3n6Vc6HcP6oyQNRYlbu4okbKVoJeajSAFasM7fcJWIZFaxXrRyWHMdWyQ7yykcy0qzwVjQgwaJPrQHWy0tHiqZoeZyqSB8AX8R65Pd/Azbe8KjihDQQaYjTndscKK2I2mpubusPv8lAsII6GvAOJOX+ejzq384638aSS4w01OszECyDofuYobAlga6QC7e8IM9HZ0mZgIcHvJd/Ym0sN83yufJVuUYC94guP9CK5+k/zYrRwt9S7VtPyVs5rPEs2dY7lm+qMaLfLh2DqZDG+pwLtuHhi1ne2SqOMyDOTk/WtPf1xaI7ZF3phEXQ5os7fNdTELzU+NvNfewGI4jHIMurBWaBR+dI806UIbCnZ9Vemfww2IOtYb2Ke9y1OdAH/W/6FJ6i+9Hj3CsPei/9u63l8yolISt3BilQ2rR67GLXX6oL5rY+6brelG16j1078b2m7+W403SWGr0mgsEvCxErMlQCkhM1Jk8tT/OOWotuWxOoxx4TEHu0JBL4zsVEQgcGD3PX2gWv6VQXQLpC054NoiQ9F5BT3ZfD45vdbur4/gNHPXVrNAS+x+AnCINLLidkwvVDZ0FhFaNWux2FrsBsWj97Kmj9W7+mg4wKxjmuDEw997c+qrR790Fmxur9MTqgZ5pqtrLmv0XfcwQj1wavn2g150TvITFh8EUGBfmIp/JV8gb+1tq7pWpfhQbzgf+Rqdsu3E19UN25xHGhOVjo6XCWp0/Erdip8lChq5miEm2nnK4aPLBwYrL8wkZbz5KqAc+X42BHr7y/yukhens6U4ImN3PHOFJILpbE0hPp1e+VagM7/H30gzqU57VxGqGglhBT0kJ/YKtszdW+nbCDlKb6HxtSZG1ampUP+0QhVlH/LIZt5k4Fz2/Mx6niqKj6CGa4mJHlkYUpMovcmlRaPcRp1dHLlmc+qH14KTd/7TG6zMCCR7qqEGRFFKwfbxf4z00hq98/66vqGujvYJS4JVZjW0aFx3hyNd7Xh0dxYgZQKZrhty+Clci68x1KPM9ZZ+IG9xgEiUF55iGeEGEg8Ze5K5dHAblVagK6vOaZPMg2AzhKWVql22nbOBXfi1T3D/bhFfW/28I+r/eUKw/+6FShJfthVqAoh4Fqo3ri91YeoSepQIdfHiSAfMd0n7MeK2pswMcWW72Qj6hoIFSZyVfHzVoV6iTNIYy/vnYUKaRfFN12j1wdW2RnFgaGwTznHMrMXz3r4HocY+vo5OCzFvMPNOsxJLv+h6mhxk+291L6dKSLzCC5H1KDqG9MWIpKlCh1mT2XG1J2yDz+eK5d+oZ9INq3TphT4BXhrZwmVNJCywWhtDTp2rl6MJfobaTTKjcjBH/ZrSJFC07iFpssmamlmNCSyu9taSgFFM7sHCcW70lgAnkbFZXA3uugMEW8ADApwSHD+RgAPa45bSp+0s3/s3u0Ro/s0rP8SElodKJVb2xTr9Fg3zmYVV2hwndS6gkC4Bs/lGwPc8deN03bBGq1FSME+Fbbdwz9t+ThDnAm7SD5TWJdYuDbgnnv3Z9dchF74qtKQWzC4U40Oali/y+Vn8pZ0KM77iXf3T93i+TkJLlfXdd1N/nO2vKlNhKcEfTpwyfF3lPDd7J3N0Szr+wplgfKwGw+R3k0FmztVNoZ0ssLzSrp5A3dAZ+MgkQWWQxW+JivKWvXXSryb27pYDoEzZbfY6UlS9h87wFdeHH0vd1VnoF83rTkYnbzq0qUzPN3xi3xy1/jZytS3v1ywQmIfkE6oTCpYHfDKuvOzYy4yUZ+p7sEKogLT8HYdB6bQyqME030l07HR60fbvwY57sVqSYjPYiopQ5vVtZ13Un6fLW9sEyXyr4hhP27K9Gz60xHHBcKHekuXnp8xye1TLOktESzOaqpGXVKwut1ULKx+CvXUuwrS6kgm6haFYzrMIKOogNa25X33g/MC3D2KSdDu4q2Yt9b3I96n6Nkm5Fr935JGQoF5EZ5iNsSFFkGEjJPRCyHRp1LgrYKatkytkWs/itsImlF+9r2qlH6cvxJnWuKFEs3prqEW1UxS5Zff29jEo5d0Og7UpwqGRu5ntJIVuxn1JTX97TLCy+2CxMhoY9PW+diQYx2oFAazkP91xXLQJV9w8QUgyy1MmijpkzCqToXvQnYeLM9LeioTguC1bbU/7SLrmZ8mhAS4+mgDdbOUrsmjgJhjT6PwRYujeAW0J5zFEXBCFx0e111Y359a3ZIF14zRFti9jXbXLAEbk3gUUJPZMVC9VX5CgXj0GMoh7dQllOSvYhzKuiYlfLLBy8Ie53NRaKbkGxLtXc84BKOiw4NX7N5FuUsVg01ICWQ7cxEREyasWb5zJ6Qi0AXjFvxTT5P6XeRLVcx/iXGz8bB9C8yP8BBzjJ2okUTImCr9ShjENyMBqskiEOIrloKVr/EGDqWZ+9t6VMQoUI8nJf5uWGPtLqybKh+hN1Jtl/07+ttzoxFRjC3bi9W71ndlNC21UsEdSqJXHPCzI7pZ6K6uVJJK+aLhLu/J/OxPKloHUIzI+O9aOXN+jrKeiNmUvPXa7gWkzbZhn0E9JptxpOEMDWEA9cdsqoSanzSoMagzsbbh60z/qXST9bliuW0YEWIArhqasLwK30ag7fmXSy8VkbQ/xyN4qSpgLZ1riilR2XIiSzsWD6b7to3OjX1ncH+/RPYVqyH34Dvq3wZodncHw1pqi7hfbQHVqGW5U7mpCr4YQ67wAp7osuCkQvT+21ylhpz4Bwe4nr/QS6XF1iaB1vrYXNO4akbuzB/AhXGMByaseiM7xc+au56OpS5lVPnb0weTJ1JSSqlArIuVyR5Z+43GwZWCyc/0N9ScU96ENGB+hKc4DuJMQ/iI0sCuBat7MqlUYCrBruPAHjS5ZHJkRXz1w5JeRZdSC/JWXEbb/Dfzaz11h1LrRwaSsKVkVhwksWBt0D37zs/2uQhQ2AbYPVq/SmVJzNVH1efpS9U18aaVNf0vnuD3WxZtZMkNRUBX7H/A7yd5yPKgKFyIq/1LN5O15MLOftcAHziuSwTzxxVtKOdMLMaR8c5Ho439sD3/g9Ochnii/zHxtiCguOVV+fo9UZVjQOo0N+0ya9d62tHhtskAuxtGUgawASY1iyXIjHTD7/xYPwSLJb2pzu68PrkWGwqfmEx8657g5xzWpYmB9xQJi1UlKGzaa7U6AhTIpfqkOTQHZPddeTERfLaFRXTg1YBo7CpBVU/eYMIYKM3Q0KQGEIK1dj8Hwr2xXolu504ABl4HNmktBum4s1yUs31e6qtjj4SLIaPN9xJfxbfR7PVGtOlPG/yY5vraTOT3y4z6rmBrbPIjpF337P2tmyp7OjzJGMOHE9eD4lM84Re0gcwMgxooOznMwpPf8c1go/XQudncHXLBRggmStvkRJGTDFrWn61bnLnQoXAoEhaCpWSvqh/mTLie2SqWfZH6v3i2cA9TTDmnayedRfTrdaPgsvJDKdSTxhyNlT4baeu9SvPDSnyP5qK89ueTcAafZvugISP+8BZuWsZK8Y5SYQ3R2x/Nykat8AwdXwTpGDTN6oVFezCWf1w2HCB1VKYhCmKCYLb4D73GTHdp3uDj8qkyzsX4xEDT8DYx0Ua5ONTEmdK58n90FpitGCB/VpvB0l0vSjobcszP18XTKzg+cf7R6FWkPLxPFJn7TzmN6nAvKlSs6D/gGkZGNcs67vYTnSPhZmY/TVDe+BmO+Yffqw+W/NVQhhHZ8omPVH9y7D/+F19vfeYm/kWhxwj3tBp1XE3/EIIIv5R/Co+BX3pXhwOU//G26bxen6rXgy0XvZvdzVOdrkFvWQyyVWG1Ep7E5TWF2cnJi5x/45we3HV6IcQ93cbYZFXc8dSsVcer45hX09czrEopPJI6PadXpXZpIztg36OXV5h3m3m4zoWTkyuPVbmBbJQeuuGudGO1s4TuNDW0hINISjqk1QhcDKJkWBEjKFUQwNNCeYn5xrVXcHJirDZzAka77XG6IwkoLlKhVdPWB8YaMUWHbqMe8lXsy8BI1IpHXB6yjZFXjmN8IlRnvhGKwUvpSC+0HQZ3wLzNXR4tv2Z5tnx8+cqSdf1iuntA9OmvcUDtJFuy+o/uWrv+b3JyMcooDm03wUL4vCk0GMgSj5qtLXzwpFleGirbguhFfyt9BScbqCx9Cuc6fgp73em8R7B0T4Z7bdxHTZHvMPJbM+1kLJsEmzL0RMkldtRoGvmCXW6QUFaAJSifMflfbMqZavZ480KvFQ/yaM3brZLXCPEK5mVTJ5B6jZQ2hOhfkOZWcnrAOVRwvQNW2jWfw87ydBCFftzTWJ3XHo6R3iUoTngf8z1WxeBbzDl8olRuCGjjK/mJQbP0CJYtm3O2ayOQ7IwJRms2WGuYlT82ZRLnjRA3stuYkwZj2XxaiFG+1z6gC+lAjzmPPYhQnVt2q0TrXOGxgT3L4KUm0Q16WPqC7lx6Hr+mIkFUl21/Y98+HEOHajKu9Ys31O4frSZ/OHs/XEffM19Lv9P/RrI82bfNYdLkN82z4d3pA8rqzH+kPFN+N8pNKkUvRQGNS30JGyvKpZAtith1x4vAKmbYnAxBJYKeMePcbNVJOx7nAc7lIIuAWAUzx7PhoppXkYIrKZKyV3SvCQNRPGd2IYpVYx8KaDL4IT7aGbaaONveY3a6uXXUzjWCcc328MF2nPsuoLwy4sotzuWDijdcHsvfj4ISOErfk0LWkxvvRDEbbGf506b+S1+Vp8j1ZWQ5MtLA8GpirCVMZEAaVuxz5SVMos5SYLrTc4+hIDybn54Wv/RVv6g/kNFwzGfFMwSOhyd5LU9agmXHApRWalBZo4q3VP4zyP4epZJQXnjhttfpwVYUuBZHJuC2hlUEbYZITTODDjCVtx7hqsEECmx9KCoqv/J0XCnK4Jnofwj4Zv+NYvYhddh6D66k5hPmrzNduf0C24ZKuCHIrTGgDRei0OASzBnFZxMgQzzAqmtSS0ieUT/kDirL+iyuBCFxyyUvnDQBNMWFNSkwK5tvYIvIlrt2YILCWPOCZgFrZTlxopqnTsszCmaA+VyX1fxK+5REMLPQkOjYAd8aeaNg5hh7qrxDDjiIiwVjtLJlOXWAduoD+UAO8OgD3KIYlUBiHGHV57FKjqpydrO8u/fdo+i8A/U03s3Rl9VyY6XKtJWmsjSW+OxCedmOcj3BHfoFo27H3/9Y70nr5d4di/HSAKw+Hjg91cRYJxTXnF5Tpw0G9Wl6Eaj0glMDFPw6R6FHTMtj+0+r5VUYTe1aG769+SkI1trfv6TCnzqduP/X+yO3lFZ6SVPozlg+ip7SX0J3dcaOXNBT3Ddbt1+fRheqi9zfaw948bbcEtBtnIo309+qlZdoQpyROCQLwKGO8dwRq6foY9Hj8V3KuJoBdtRnUqoY1j3tQlJqA3FklFIj1UZAqGW7ftQXcgzt/BWtZFFwcDw634AX/+8b3mnLPUXzoUatXxONyIpbcUZFKXwiDXtlwkSpJRyg9oD5WtcJwyDyhvbOy8bL5gvWC/bLO6KqA42WTOITbor3thLsP7y3p3/gVJ8+VchAKF6ouBKiRbE8zxZVUWSfSbU0pZgrAFVCZNtZGeyPKr50sePf5PYC6xHjyelLcKd4bcJ9F/SAqiGjcyR2fnSotzGOf2MoG1ZRkBD72L2Zn/lN+rIAD1D6iIobaRAbInUDIK29PSeLX7ZUV6ITkf7ps37C0Ey73PGWeYQ0Q0agpDiwWj7oEOblFNxYryS3IkoMmZy8r5CxMg6X3qzB1nv4jQlgHBpUEGzNcMeMn5Cl/yWOQrJeDtslt4U5bTzBCjVcjCsBSILDyu5XC1tYfErJS7I9rEeMSIR9zBvn+GHlndrv/VWJduPGzvKnZ5NOaNGwfFQEjpEf7okg7oHo9hdkSge8Gre6PO0Qprw6WDDjeRqAG/eZ+QNlUFnjipBSfJ9VFFGoXF0qJdHMer2bSUqhM/EQedtr1ms2WsJuqLh0ZBa7fk47k4q2HzPuw2HehmZBcKFonGjHON2HKUobbrmqpiN/v9qebnNYexWtjaHoZOexxKMW9JrdUQ9ZpdAEbLcKxm3f1BO4OWTPEq+REkl/eggEXUAIOE3AbLECGeHAUC+oXBvIsH+Qk23iYqgofSSO0u57VfGy2NIRVOV1mIp/KBAwDO6xx+BJ7g5313unTzSq5CDYNaIhJ9ALoVZQ1iqIFnIeDhONmxoVgWmVJGT4aWocDFoIjIbZSuuruIf1zxZzsm4ywvtB1lUZOLlC6rmN7PdyHkdiY6xhXbavNuaM5EPM7SjGl6JuTufcb0MumyCrCtog+BAHiCo7Vr7HFx8kJ5/hK7fqdxPQoo8AENtbeHRneWfnzi4B0Q6T4ZzTZ902v411jGWl0QGLuh0OOdavsmz+/expckLbrNkQsdrdaQyEqqYXcPodTgZieoxDcSU4TSREL6nqE1Zd/2ajFaYKfuuuh/fSto9ARZ10j29V6jYjqEyWN+N0xA5f0jdiI8v5+4JOO/29MUV9nAEVcUtaC8S1aqkAKqEWBr6BW/owBqXXopvPUibAARhA0Jn6MVJe74ABjE+MaV3MNkyZDcbM1m8BS6ggMrErorIXAi/UcE8QZdlbUP7HHE5uXKVz1uXp6JYHP+gzA2fSYaeLJVnFgzbGAodFXw1A6mMrHVds8C6rSm+x5b+lKKMu1AV7BH4GMfvPm1VTH4ymM0Yu/DWRbsvvlpFcqxfmhd5LoGjnc6L3iDidoUES9c1zSeo7DT+CqJk9gR7r8/3n1PISch1/grDB8PaO+HoGTq5iCqdj1LRPWAxKgA2vxsZa4LAUAFU0u2K1hlJ4mR3Rswy4809PIU5GTBHMO0xNJXi4LxWtwOmvN19uK+9WkFJjQcF9s9cX7XMa2wlII+zpg1nFJre8ZvAuHACSnlvlZm268kgwU+pGFcRobqK9BiAsDlAtBGuVE0TCGranb99rDIN9hc7wW+ZGnPq6yeZ4GDu9ljVbdkhh6MQJzmwOJgUztis+q8Zj/0l8OkcUVCnMw1F9FNesE9BNa0wmi+XRyFl0WJqsFbwCwtE6Pg50B3uKNIYRs6TnyrLyQDE9xtrfqtj9KsusH2a/KYKUE5PTTjbaySX7MRTN3ZX3gUSxLYSx0Kl2h7jheHIxv7g9fvcYjetZT0VjPItFiaVkfj4MwTca4jcpSekfdx3vE0JCjQQEidUJFj3omyEBWyAHWQ2jmPWy20OvxmIWwjjSHVlyGlavJAle1BcORxwEHE03y52CoiUpGZO1n98e+4oCFCWTp2hloJtG/kxk9WuVzIHRMmgWexW1AbhBOi5YpU9mHLWUfjebcas1MS6ctdXjROecUiBulI7ZwtBwVbxP+F5oaTcCJXYVGcKZFQvD2VtqHIDkdli4Lb1bQlKtXSh/+MRXDMBiALZxLtgVy8KL8kgFvcXursqICF+Xjs+pyhpYQ+cYf83X9YGzHebwRmHef7+39XXfWymanSf2Hxa5w4dFbwtxW6Lt0IJjRjfgG+77mredBpWeVnTULJhq/77m9Buqt71tsa9T4vxp/g2JSqV0sr5JiwTcsv3e07lG3uB4X/S+4OPpIiSOM4dP1MX3ZnynUqdTM8RlokQok0AZTYvcbIyGiZq8bAqmoB/MB3qvPNzAIjTulauRkqamyhqjQkST2VCdH6FhLpYbxcsGHa+JB3YbWKacrSUp0L9IRNdDsh4lzFQdVLwJ08p7Dj2m/iQf2yVEkoESS5NPqKZwHLVG9+u26WQzPMlJwlFTgXyd0EntcV5i+wVklpzJKUC8sgTb5+Xm1qMmFMIn9fIyMecyX14ZQweByDCWnmR3HE9FGkKcW8ihfxh5h8S4RQ7POQqIVsjIRlYRrzIM+UnSW0NURSKCwGcDFm7Wk+TbRg+MAEfy96LoYZtDYuAZoPYlRq0EwXu6XzHlZsGOwvQEPaiyOw3ehFOQLMcPIi6TMu1XiR84YEiaETFISRreapTgMdQMlMGzfGZnCkkdyC030F61sbdjz9EVKPqB3lK26AglDiaidxYgiPuDYCSJfFAZxqji+fgZJduhSrjUnaZd0gJa+OPrLtgBKic7u2xWeh0uu/19nHFY3NnNE4gOqehUrFqJUZUfNgtxkePdD7KeDisMLW94ewe6jRA36Al4Aj0mMESUVYb7IkiARNkg6ovcGSk3bI9+KD674uBQOBRroRYZIqp6fzDnuAjutay5L07lfmrOVRmQiMnWWSBXZtqMzNGnOXhColLXwN4wSjdIP25Y1bD8OOGlsOv3kcSiOHGBlVTDZ2W9cZHcCK6QfJoZt3rGrJVlOluu8BW+R9YUsOgxNOgsylmAReoR5b3Oe4AD6XAkLwUeGm8NbXsL2UG82CbZFERlydCDNTGKLUy76ZRkLFEW2wiyLZyLhl0sybGyG2i7DZ8nvL11i5lhknV7Z8foQtGlBbRYF2GCKIx1MYxfeNj4zQ25T5Tq9VfeKAA3lxx4UXqABi+OvH+pGnnNFfelafAFMveJ6F9jCVCMOtH+99WLEEfLPD+h3wDzkuQL9zeRd/TJuHgQJ69WfaPC1VecAKqlOqsqzoqWhHjqQBBWHkdtz2i+xVnoN+zpc9KyQ9j21/OfRxGY0qCsZi+wrtuESoX45WUk4z/wxQpx3Z/hq/OwW/NQYQEk40+wZeHYnzpx2XLRqtMYMGNkJ4SOyRdS1oW4oQDMXwa+Gwr/tJXkfDq+6yx+8DYqbAWP7T8m9URiQnXG7EhDkCQZe6jQ06nQIvBct1FmOviudLKUFDyUcmTtTnLXcjz0Rfw0GFlrb76vP8kcEgAm4JHBHNJg1KXJDSB9wwYkQQC61rMp3Gib0PcgoT5hkOHYGhR0VBtUNDMbNFRwJ+ho6mo+YbjXv9CmTL1ThTpNL1P0L3uZ6vyL/cmf0nMB4BPtmgYJHbsiyKjwsaBgQi/rz07sv0FD07ENOvoO/rKELZN17RIYteWnWjp94PzkZTy9YeBq+fTh8VUrp9dNnlo5fXDq1LqZ2nptBhAV2RQNZhUmvgYVR724YVdv37C41fR2rRLReB4e+45TH624ovvtK8UVHVtXxLHfamfxUCPxHH5KFkSDEKb4Ao4IUjfJRvyxfJ156aL/VahUYJBexQeSBzwyYQdvDb8cOvT/Ez6Mi1qNC+yEuJg/1bTxM8vsr342BnZdGLKs40FRWm2pjsPWbPzUNZEzEC6u3ukocO4T74b8mfU9v3UL/tJr+HXVh47CLCBJBiGRBJnII2ebmnFiQBBqnow864wYnh6/OFk8CPN49WtZOOWT85Q995zbI0et+47HwZcii6QZAE8BLtjhoqgmUTI2BHFf5PxWUtnTPOlNgsqilymhTJVxTKlAMSf0VXC0gUuv1Bfagcu/mC5Hqg5+msjQWsfXPJmIzWr4CeHEPhWDH40HNoGFzNKDNtsM4ZV1Y0RDyGCdw6KuIsiDEFy4Dst87ODa81kQCaSgBlwIMr4q0uUgORwyEqPG5DgEYoAnrSddCm4wFKMDanzEdLuQvTAkZQrLeM4IZtbKSwVPM+OX4wja4gVoKaAjon0hu7d7k5aDSwnMQB//4/HClj+kWd+SQP551b+XOuQbHKTrAohJIKudpUWbDl1AevQZAIEyBWPGnAVLVqzZgEOwZceeA0dOnIP0EHPjzoMnL9587ISEgoGFg0dAROKHjMJfgEBBqGjoGIIxsYQIFSZcxMavyUnl2T/17WDNQl5NcKBxVo1WWSpTYTT8YdHB0HM++MkgJ5a8D1SOylYjlGAnmkCZrMR/QQGMewAAzLhiTAIShgEK/QCGTmiFRqiFSlSiFBEeGhwI0OSzR9jw+yD4jzbYJYWZi+ZloKPIfP0G8HtRwD1IpKvbamN9VS8QKAFurJZauY91wZso9jhbgo5CxTpEtDkdYD09PZ1Y1wTMM3bF/AvoG1kXPQ9hGJQdky+xVdVEBbR+Zb+GOgAAAA==') format('woff2');\n  font-weight: normal;\n  font-style: italic;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: 'boxicons';\n  src: url('data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAAUQAAwAAAAACcgAAATCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYGYABcEQgKizCJEgsWAAE2AiQDIAQgBYJKB20bvAfIjsK22bOwIjmQDyeRhxX00NzbvN1Nmu62nLQHQCDL9ufY3SlWLCy602dZsQLOD3n6L92cdrLTQfkrT6MySDfJpw9OaT98nP5JmH4/V2cmpe/6WhKztuSGJ/ESuA4hvX1EJEJolEji6JTI0tpue1NL4JWIHgIq4OgbhCi/3NpClyACc5XyAoCL6n70EWwlhmpONTB1FlpfjQVO/p/gZZEPIDSpXtxo4LaSYhHSHYt+SxUJhpheH+5uX9ye3VV/Gfy/gOQ3Fu8zRRlHGQfpRqmPgCzFCBUF1Uh/SQrUgH4DZhk6yeGXoC8cBhsxFq7pb0yj9ZTXp1KXLMmRQUixqcS8vOSggBJukKH1ydDZR4IPYZr5Euhg83gIFk9pP/Clx0I87acK8hy24z0qvcx2nb/0Cdoa+Ii0XgVzgN6r+iK0nkGLXR2X+z/gex7bxsateRzxFtwXn/LeVSySZJFoZH5I+4HvqJZKR+o4Dur6t87I2TrM6j9XdbrRcY44fLSlI+3ubuzuV5Hdvmmca2jI1uvoSDsmADmD6IHuGenUM5hVdZIFkpwkXs2bzaqVg5ig21xnZ9bUpK4udbC3keseVkdfg/zQ+QTxrilf2khRYnFlXQ3oFA9wOU5xw2nnctiCmtR0SRXZXYGyoKwnVewY+LjeTGHwbDzaORny7Ubx7umQd2bik2Sobg3K+RPl9l33+SOXNRX7Rzyyh3xsi93O6bABkL+k7Qg6sJdNW4lpYOrJSeqY8Y5wNiV/TaCTQbNh4pWu3ptEMLym787heHiFV1iqrfSZGuEmx6pMFUnBWUPZprrSuqbVv4VrsZIKU9XLvSABx5PYHh7sJLorocDdi5VC+fTknXoQAxapG1EZ7VJcvB7ywPCse5ZoWiXhxg3VDtXKzdUSo1yu6AlFbyjzB3Pl5lRYKqpMFQC6zlNVwVQBoO3DfBetL/3fZHyLEH875zoW9LUhTUVOcYUwA6fRgIBbTtKvA2yR+LMPYlIc5SLq732uzjZsbz84PdW809uR351YPvDkeGS/e1mcsIKQurCaoLCpnHWQjeFEVjhOEDgAvBQ5jVYIczAa5Qa864uU+J0mG9FJzq7mz8ye7ie0vQGl5woLR5VRhY1FYIfw4VmMLCL8P4DJY4JBvrso7cAWqDglK65rDHcKgpDsOnEZo+/qSKSJPI5BruiogT4dVdX60tQ816e755+W0fkD9Kn+1ymZhUg7aIxqABL9F1JVtE7bwhtlS+iC/gaPfES5EmhGRPcKfzdjw4z8RBxP5HiAThQ/8i1/7/VOSbevCeoAeBVmJ+lNFB8tT6ATuAU6O9hvowFoaKlY+maXjJ1P0vq4gXpOO6ynCtbAAgG8fQ61ZUvrtSoegKYKJ8usGcpIYLktWu4idUSgenkMV3u60AWLXDmihnGgNlQxb7mF5Q7UEQ2sWR6D18uFQ3uIogdmMPf3es536ZyNhdVX/kVvRrnAOOLfKX4a7IGgiBTiIMgklwgSSCKfdGLIgU0COeSSUjGpxRhGMIoFieY8tDhIAtqr9WPII4H4zj0Uo8XiwfKhEM12YYFBf70HGYwsVk6RYpUpiQ8eK85KthbJP5FiReyeEPPGMJafL53oZ03CnHJ0G2cA') format('woff2');\n  font-weight: normal;\n  font-style: normal;\n  font-display: swap;\n}\n\n\nbody {\n  --font-size-obsidian-titlebar: 13px;\n  --font-size-vault-name: 1em;/*左侧库名字体大小*/\n  --font-size-file-header-title: 0.9em;/*文件抬头标题，只在非Andy mode plugin时生效*/\n  --font-size-file-header-title-andy-plugin: 1em;/*文件抬头标题for Andy mode plugin*/\n  --font-size-embed-title-size: 1.3em;\n  --font-size-embed-file: 1.25em;\n  --font-size-folder-and-file: 0.9em;/*左侧边栏文件字体大小*/\n  --font-size-edit-normal: 1em;/*编辑正文字体大小*/\n  --font-size-preview-normal: 1em;/*预览正文字体大小*/\n  --h1-size: 1.5625em;\n  --h2-size: 1.4375em;\n  --h3-size: 1.3125em;\n  --h4-size: 1.1875em;\n  --h5-size: 1.0625em;\n  --h6-size: 1em;\n  --font-size-tag: 0.85em;\n  --font-size-emoji-after-tag: 1.5625em;\n  --font-size-list: 1em;\n  --font-size-preview-blockquote: 1em;\n  --font-size-edit-blockquote: 1em;\n  --font-size-outline:var(--nav-item-size);\n  --font-size-code: 1em;\n  --font-size-latex: 1em;\n  --font-size-cloze: 0.9375em;\n  --font-size-better-footnote: 1.3em;\n  --font-size-checklist: 0.85em;\n  --font-size-split: 0.85em;\n  --font-size-loading-diy-text: 3em;\n  --font-size-loading-add: 1.5em;\n  --table-header-size: inherit;\n\n  /*font family*/\n  --font-default: ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Inter\", \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Microsoft YaHei Light\", sans-serif;\n  --font-family-list: ;/*列表字体*/\n  --font-text-theme: Bookerly, 'Inter', \"Segoe UI\", \"霞鹜文楷 GB\", \"LXGW WenKai\", \"Microsoft YaHei\"; /*主体（包括列表）字体，除代码框等少数部分*/\n  --h1-font: var(--font-text),var(--font-default);\n  --h2-font: var(--font-text),var(--font-default);\n  --h3-font: var(--font-text),var(--font-default);\n  --h4-font: var(--font-text),var(--font-default);\n  --font-family-title: ;/*文件抬头标题*/\n  --font-family-folder-file-title: Arlrdbd, \"Source Han Sans\", \"Noto Sans CJK\", \"Source Sans Pro\", \"Segoe UI Emoji\", sans-serif;/*左侧边栏文件、文件夹字体*/\n  --font-monospace-theme: 'JetBrains Mono', Consolas, Monaco, \"等距更纱黑体 SC\", \"Source Han Mono\", \"Microsoft Yahei Mono\", \"Segoe UI Emoji\", \"Microsoft YaHei\", \"Source Code Pro\", monospace;\n  --font-family-inline-code: var(--font-monospace-override), var(--font-monospace-theme);\n  --font-family-tag: Bookerly, 'Inter', \"Segoe UI\", \"Microsoft YaHei\", STzhongsong, STSong, \"Segoe UI Emoji\", Serif;\n  --font-family-vault: \"Lucida Handwriting\", \"Segoe UI Emoji\";/*左侧库名字体*/\n  --font-family-special-tag: \"Lucida Handwriting\", \"Segoe UI Emoji\";\n  --mermaid-font-family: Segoe UI, \"Microsoft YaHei\", \"Segoe UI Emoji\", \"trebuchet ms\", verdana, Arial, cursive;\n  --font-family-better-footnote: Arlrdbd, \"Source Han Sans\", \"Segoe UI Emoji\";\n  --font-family-strong: Bookerly, 'Inter', \"Segoe UI\", \"LXGW WenKai Screen\", \"LXGW WenKai Screen R\", \"霞鹜文楷 GB\", \"LXGW WenKai\", \"Segoe UI Emoji\", var(--font-interface);\n  --font-family-em: ;\n  --font-loading-text: var(--font-monospace-theme);\n\n  /*radius*/\n  --radius-xs: 3px;\n  --radius-s: 5px;\n  --radius-m: 7px;\n  --radius-l: 15px;\n\n  --background-settings-workplace-theme-light-custom: url(\"https://\");\n  --background-settings-workplace-theme-dark-custom: url(\"https://\");\n  --background-command-palette-theme-light-custom: url(\"https://\");\n  --background-command-palette-theme-dark-custom: url(\"https://\");\n  --background-panel-page-theme-dark-custom: url(\"https://\");\n  --background-panel-page-theme-light-custom: url(\"https://\");\n  --background-markdown-page-theme-dark-custom: url(\"https://\");\n  --background-markdown-page-theme-light-custom: url(\"https://\");\n  --blur-depth: 10px;\n  --blur-depth-cp: 10px;\n  --saturate-4-bg: 1;\n  --saturate-4-bg-cp: 1;\n  --brightness-4-bg: 0.9;\n  --brightness-4-bg-cp: 0.9;\n  --opacity-cp: 0.25;\n  --bg-panel-page-opacity-cp:0.25;\n  --titlebar-brightness: 1;\n  --titlebar-blur-depth: 8px;\n  --stack-tabs-background-blur-depth:40px;\n\n  --fancy-hr-icon: '😀';\n  --fancy-hr-rotate: 0deg;\n  --line-height-main: 1.5;\n  --line-height-list: 2;\n\n  --line-height-split: 1.3;\n  --letter-space-main: 0;\n  --letter-space-code: 0;\n\n  --file-line-width: 45rem;\n  --embed-content-height: 600px;\n\n  --bottom-padding-value: 0em;\n\n  --font-weight-highlight-1: normal;\n  --font-weight-highlight-2: normal;\n  --font-weight-highlight-3: normal;\n  --font-weight-inline-code: bold;\n  --image-max-width: 100%;\n\n  --checkbox-size: 0.9rem;\n\n  --loading-diy-text: \"快乐摸鱼又一天，人生还剩多少天？\";\n  --loading-diy-text-color: var(--text-normal);\n  --loading-page-custom-gif-caption: \" \";\n  --loading-page-custom-gif-caption-alt: \" \";\n  --loading-page-custom-gif-url: url(https://);\n  --loading-text-before: \"❀✿\";\n  --loading-text-after: \"✿❀\";\n  --loading-add-text-color: #d47e86;\n  --loading-add-text-color-alt: #a4e39c;\n  --pixel: 20px;\n  --c-1: #da2400;\n  --c-2: #ffb623;\n  --c-3: #8c6e22;\n\n  --nord0: #2E3440;\n  --nord1: #3B4252;\n  --nord1-1: #3B425251;\n  --nord2: #434C5E;\n  --nord3: #4C566A;\n  --nord3-1: #717a91;\n\n  --nord4: #d8dee9;\n  --nord4-1: #d8dee95c;\n  --nord5: #E5E9F0;\n  --nord5-1: #E5E9F053;\n  --nord6: #ECEFF4;\n  --nord6-1: #ECEFF46c;\n  --nord6-2: #ECEFF43c;\n\n  --nord7: #8fbcbb;\n  --nord7-transparent: #8fbcbb2f;\n  --nord8: #88C0D0;\n  --nord8-0: #65afc4;\n  --nord9: #81a1c1;\n  --nord9-1: #81a1c16c;\n  --nord9-2: #81a1c13c;\n  --nord10: #5e81ac;\n\n  --nord11: #BF616A;\n  --nord11-1: #BF616A4b;\n  --nord12: #D08770;\n  --nord13: #EBCB8B;\n  --nord13-0: #e2b65e;\n  --nord13-1: #ebca894b;\n  --nord14: #A3BE8C;\n  --nord14-0: #95b677;\n  --nord15: #B48EAD;\n\n  --hr-color-icon-1: var(--theme-color);\n  --hr-color-icon-2: var(--theme-color);\n  --hr-color-icon-3: var(--theme-color);\n  --hr-color-icon-4: var(--theme-color);\n  --hr-color-1: var(--theme-color);\n  --hr-color-2: var(--theme-color);\n  --hr-color-3: var(--theme-color);\n  --hr-color-4: var(--theme-color);\n  --hr-color-numbers-line-1: var(--theme-color);\n  --hr-color-numbers-line-2: var(--theme-color);\n  --hr-color-numbers-line-3: var(--theme-color);\n  --hr-color-numbers-line-4: var(--theme-color);\n  --hr-color-numbers-bg-color: var(--theme-color-translucent-015);\n  --hr-color-numbers-color: var(--theme-color);\n  --hr-numbers-text-fill: transparent;\n  --hr-numbers-text-stroke: var(--text-normal);\n\n  --cloze-bg-color: var(--accent-strong);\n  --cloze-decoration: none;\n  --cloze-decoration-color: red;\n  --cloze-decoration-2: dashed;\n  --cloze-decoration-color-2: var(--theme-color);\n  --cloze-bg-color-3: transparent;\n  --cloze-decoration-3: dashed;\n  --cloze-decoration-color-3: var(--theme-color);\n\n  --custom-titlebar-bg: var(--background-secondary-alt);\n\n  --text-highlight-bg-h-dark: 57;\n  --text-highlight-bg-s-dark: 40%;\n  --text-highlight-bg-l-dark: 38%;\n  --text-highlight-bg-a-dark: 0.541;\n\n  --text-highlight-bg-h-light: 34;\n  --text-highlight-bg-s-light: 100%;\n  --text-highlight-bg-l-light: 80%;\n  --text-highlight-bg-a-light: 0.847;\n\n  --cursor-color: var(var(--text-normal));\n\n  --fancy-cursor-width: 2px;\n  --cursor-color-temp: var(var(--text-normal));\n\n  --print-strong-color: ;\n  --print-em-color: var(--accent-em);\n\n  --tag-border-width: 1px;\n  --paragraph-spacing: 1;\n  --blur-codebox-frosted-glass: 2;\n  --blur-p-kanban-frosted-glass: 5;\n\n  --status-bar-bg: var(--background-secondary-alt);\n  --status-bar-text-color: var(--text-muted);\n\n  --list-ol-marker-1: decimal;\n  --list-ol-marker-2: lower-latin;\n  --list-ol-marker-3: lower-roman;\n  --list-ol-marker-4: decimal;\n  --list-ul-marker-1: '\\2022';\n  --list-ul-marker-2: '\\25E6';\n  --list-ul-marker-3: '\\25AA';\n  --list-ul-marker-4: '\\25E6';\n  --list-ul-marker-color: var(--list-marker-color);\n  --list-marker-color-collapsed: var(--theme-color);\n\n  --list-ul-colorful-marker-content: '\\2022';\n\n  --he-title-bar-active-bg: var(--theme-color-translucent-005);\n  --he-title-bar-active-pinned-bg: var(--theme-color-translucent-005);\n  --he-title-bar-inactive-bg: var(--theme-color-translucent-001);\n  --he-title-bar-inactive-pinned-bg: var(--theme-color-translucent-001);\n  --he-title-bar-inactive-action: var(--text-normal);\n  --he-title-bar-active-action: var(--theme-color);\n  --he-title-bar-active-fg: var(--text-normal);\n  --he-title-bar-inactive-fg: var(--text-muted);\n\n  --list-spacing-bt: 1;\n\n  --font-weight-strong: bold;\n  --font-style-em: italic;\n  --code-background: var(--background-code);\n  --canvas-card-opacity: 0.1;\n\n  --popover-width-factor: 1;\n  --popover-height-factor: 1;\n\n  /*bubble*/\n  --bt-bubble-layout-padding: 8px;\n  --bt-bubble-background-color: transparent;\n  --bt-bubble-border-color: var(--background-modifier-border);\n  --bt-indentation-gradient-color-1: var(--theme-color);\n  --bt-indentation-gradient-color-2: transparent;\n  --bt-colorful-indentation-width: 1px;\n\n  --h1-bg-color: color-mix(in srgb, var(--h1-color) 15%, transparent);\n  --h2-bg-color: color-mix(in srgb, var(--h2-color) 15%, transparent);\n  --h3-bg-color: color-mix(in srgb, var(--h3-color) 15%, transparent);\n  --h4-bg-color: color-mix(in srgb, var(--h4-color) 15%, transparent);\n  --h5-bg-color: color-mix(in srgb, var(--h5-color) 15%, transparent);\n  --h6-bg-color: color-mix(in srgb, var(--h6-color) 15%, transparent);\n  --inline-title-bg-color: color-mix(in srgb, var(--h1-color) 15%, transparent);\n\n  --ribbon-background: var(--background-secondary-alt);--ribbon-background-collapsed: var(--background-secondary-alt);\n\n  --bt-indentation-width-hover: 3px;\n\n  /***thino***/\n  --share-thino-background-light-custom:url(\"https://\");\n  --share-thino-background-dark-custom:url(\"https://\");\n  --thino-background-light-custom:url(\"https://\");\n  --thino-background-dark-custom:url(\"https://\");\n \n  --share-card-background-opacity-cp:0.6;\n}\n\n\nbody.all-dark-pdf .print,\n.theme-dark {\n  --background-primary: var(--background-primary-bg-4-bt,#202020);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#444444);\n  --background-secondary: var(--background-secondary-bg-4-bt,#151515);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#000000);\n  --background-modifier-border: #343434;\n  --background-modifier-success: #539126;\n  --background-modifier-success-rgb: 83, 145, 38;\n  --background-modifier-error: #9b4343;\n  --background-modifier-error-rgb: 155, 67, 67;\n  --text-accent: var(--color-accent);\n  --text-accent-hover: var(--color-accent-2);\n  --text-normal: #c6c6c6;\n  --text-highlight: var(--text-normal);\n  --background-modifier-box-shadow: rgba(228, 228, 228, 0.08);\n\n  --text-muted: #8a8a8a;\n  --text-muted-rgb: 138, 138, 138;\n  --text-faint: #797979;\n  --text-folder-file: #b3b3b3;\n  --accent-strong: #e7e7e7;\n  --accent-em: #a4ca8e;\n  --text-error: #e16d76;\n  --text-error-hover: #c9626a;\n  --text-selection: #3b767160;\n  --text-on-accent: #e4e4e4;\n  --interactive-normal: #2b2b2b;\n  --interactive-hover: #373737;\n  --accent-h: 208;\n  --accent-s: 64%;\n  --accent-l: 49%;\n  --accent-l-alt: calc(var(--accent-l) * 1.05);\n  --interactive-accent-rgb: 45, 130, 204;\n  --interactive-accent-hover: var(--color-accent-2);\n  --panel-border-color: #18191e;\n  --search-text: #e0e0e0;\n  --folder-title: #ffffff;\n\n  --text-highlight-bg: hsla(var(--text-highlight-bg-h-dark), var(--text-highlight-bg-s-dark), var(--text-highlight-bg-l-dark), var(--text-highlight-bg-a-dark));\n  --mark-highlight-strong-em: #fff7603a;\n  --strong-em-highlight-color: #a7b4ff;\n  --text-search-highlight-bg: #bb4361;\n  --strong-em-color-1: #43d3ff;\n  --strong-em-color-2: #baaaff;\n\n  --background-search-result: var(--background-secondary-bg-4-bt);\n  --search-result-file-matched-bg: #023774;\n  --page-border-bottom: var(--background-secondary-alt);\n  --background-asymm-split-left: var(--background-secondary-alt);\n  --background-mobile-drawer-1: #1b1b1b;\n  --background-mobile-drawer-2: #1b1b1b69;\n  --background-modifier-border-hr: #3f3f3f;\n  --background-modifier-border-asymm: #343434;\n  --background-modifier-border-checkbox: #7b7b7b;\n  --background-transparent-black-or-white-1: #1b1b1b9a;\n  --background-transparent-black-or-white-2: #1e1e1ebd;\n  --background-transparent-black-or-white-3: #2f2f2f6c;\n  --background-transparent-black-or-white-3-1: #00000064;\n  --background-transparent-black-or-white-4: #7e7e7e1d;\n  --background-transparent-black-or-white-5: #0f0f0f6c;\n  --background-black-or-white-1: #353535;\n  --background-modifier-border-1: #000000;\n  --background-transparent-blue: #003e759a;\n  --scrollbar-thumb-bg: #3f3f3f7e;\n  --scrollbar-active-thumb-bg: #4d4d4d88;\n  --gray-1: #5C6370;\n  --gray-2: #abb2bf;\n  --red: #db7c84;\n  --red-1: #d05a63;\n  --orange: #d1945b;\n  --orange-1: #da904b;\n  --green: #abd58e;\n  --darkgreen: #568060;\n  --aqua: #35bed0;\n  --purple: #c594d4;\n  --blue: #a0c7e9;\n  --darkblue: #478fee;\n  --yellow: #d6b87f;\n  --light-yellow: #cac685;\n  --white: #ffffff;\n  --variable-2: #0072d0;\n  --variable-3: #5a96f7;\n\n  --embed-color: hsla(calc(var(--accent-h) * 1),calc(var(--accent-s) * 1.2),calc(var(--accent-l) * 2),0.055);\n  --search-result-file-title-color: var(--text-normal);\n  --theme-color: var(--interactive-accent);\n  --theme-color-translucent-06: hsla(var(--interactive-accent-hsl),0.6);\n  --theme-color-translucent-04: hsla(var(--interactive-accent-hsl),0.4);\n  --theme-color-translucent-02: hsla(var(--interactive-accent-hsl),0.2);\n  --theme-color-translucent-015: hsla(var(--interactive-accent-hsl),0.15);\n  --theme-color-translucent-01: hsla(var(--interactive-accent-hsl),0.1);\n  --theme-color-translucent-005: hsla(var(--interactive-accent-hsl),0.05);\n  --theme-color-translucent-001: hsla(var(--interactive-accent-hsl),0.01);\n\n  --background-blockquote: #9191911c;\n  --background-code: #1111118c;\n  --background-code-2: #4c4c4cb0;\n  --text-color-code: #d58000;\n  --code-normal: #d0d0d0;\n  --list-ul-block-color: #e19742a9;\n  --list-ul-disc-color: #eb9563;\n  --green-1: #79c142;\n  --list-ul-hover: #e28915de;\n  --list-ol-block-color: #2685bbb4;\n  --list-ol-number-color: var(--list-marker-color);\n  --list-ol-hover: #2c7bd6;\n  --list-marker-color-collapsed: var(--theme-color);\n\n  --tag-text: #e4e4e4;\n  --stag1: #f08383;\n  --stag1-bg: #bd1919;\n  --stag2: #e7b263;\n  --stag2-bg: #ac6700;\n  --stag3: #77df89;\n  --stag3-bg: #058c1c;\n  --tag1: #3674bb;\n  --tag2: #3685ad;\n  --tag3: #2a8f91;\n  --tag4: #43804f;\n  --tag5: #5f932e;\n\n  --tag-dailynote: #98c8ff;\n  --tag-dailynote-bg: #0f60bd;\n  --tag-weeklynote: #d1e6ff;\n  --tag-weeklynote-bg: #3971b1;\n  --tag-questions: #d4bdff;\n  --tag-questions-bg: #6640ae;\n  --tag-ideas: #fcfcc0;\n  --tag-ideas-bg: #565656d8;\n\n  --h1-color: var(--print-h1-color,hsl(78, 62%, 47%));\n  --h2-color: var(--print-h2-color,hsl(118, 42%, 49%));\n  --h3-color: var(--print-h3-color,hsl(180, 53%, 48%));\n  --h4-color: var(--print-h4-color,hsl(216, 69%, 68%));\n  --h5-color: var(--print-h5-color,hsl(258, 79%, 77%));\n  --h6-color: var(--print-h6-color,hsl(290, 85%, 81%));\n\n  --graph-text-color: #B5B5B5;\n  --graph-tag: #88d842bb;\n  --graph-attach: #b2cfe0bb;\n  --graph-circle: #55a2d6bb;\n  --graph-line: #8c8c8c;\n  --graph-unresolved: #f08080de;\n  --graph-arrow: #c23917;\n  --graph-control-bg: #00000080;\n  --graph-circle-outline: transparent;\n  --graph-canvas-bg: var(--background-primary);\n  --graph-circle-fill-highlight: var(--interactive-accent);\n  --graph-line-fill-highlight: rgb(var(--interactive-accent-rgb));\n\n  --unresolved-link: var(--graph-unresolved);\n  --link-unresolved-decoration-color: var(--graph-unresolved);\n  --internal-link-color: var(--text-accent);\n  --external-link-color: var(--internal-link-color);\n\n  /*mermaid*/\n  --mermaid-active-task-color: #187ef1;\n  --mermaid-seq-dia-color: #1371be;\n\n  /*table*/\n  --table-background-color: #2f2f2f32;\n  --table-background-color-odd: #00000033;\n  --table-border-color: #4a4a4a;\n  --table-thead-background-color: var(--theme-color-translucent-01);\n  --table-hover-raw-color: #08569a21;\n  --table-hover-color: #1f65a221;\n  --table-hover-thead-color: #21395bc7;\n  --table-header-color: var(--text-normal);\n\n  /*calendar*/\n  --calendar-week-color: #a2df94;\n  --calendar-week-hover: #61815c;\n  --calendar-week-background-color: #4a5842;\n  --calendar-today-background-color: #8c4545;\n  --calendar-hover-color: var(--theme-color-translucent-02);\n  --calendar-active-color: var(--theme-color-translucent-04);\n\n  /*day planner*/\n  --day-planner-pie: #f19c1c;\n  --day-planner-timeline: #000000;\n  --day-planner-line: #dfcf77;\n  --day-planner-dot: #dfcf77;\n  --day-planner-item-hover: #053c85;\n  --event-item-color1: #283493bb;\n  --event-item-color2: #1565c0bb;\n  --event-item-color3: #00838fbb;\n  --event-item-color4: #2e7d32bb;\n  --event-item-color5: #9e9d24bb;\n  --event-item-color6: #ff8f00bb;\n  --event-item-color7: #d84315bb;\n  --event-item-color8: #c62828bb;\n  --event-item-color9: #ad1457bb;\n  --event-item-color10: #6a1b9abb;\n\n  --kanban-color-1: #0065d852;\n  --kanban-color-2: #30e4e441;\n  --kanban-color-3: #1cb54f44;\n  --kanban-color-4: #97b82b49;\n  --kanban-color-5: #bb722d41;\n  --kanban-color-6: #d12e2e42;\n  --kanban-color-7: #8f36cb3f;\n\n  /*colourful notes*/\n  --text-gray: #acacac;\n  --text-brown: #be9684;\n  --text-orange: #ffa344;\n  --text-yellow: #ffdc51;\n  --text-yellow-2: #cca217;\n  --text-green: #52c7b2;\n  --text-blue: #7c94ff;\n  --text-purple: #b386f1;\n  --text-pink: #ff6bba;\n  --text-red: #ff4f4f;\n\n  --background-gray: #535353;\n  --background-brown: #493a3a;\n  --background-orange: #53422f;\n  --background-yellow: #585536;\n  --background-green: #32503e;\n  --background-blue: #2f5264;\n  --background-purple: #443f57;\n  --background-pink: #533b4a;\n  --background-red: #683c3c;\n\n  --note-important: #d64545;\n  --note-cloze: #ffffff;\n\n  /* stickies */\n  --stickies-color-1: #84c584;\n  --stickies-color-2: #c7a3cf;\n  --tape-color: #99999967;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #f1a634d0;\n  --background-4-sliding-pane: #252525ed;\n  --bg-sliding-pane-header: #00000043;\n  --bg-sliding-pane-leaf: #0f0f0f36;\n\n  /*admonition*/\n  --admonition-bg-color: #11111100;\n\n  /*checklist*/\n  --checklist-bg: #1d1d1d96;\n  --checklist-bg-hover: #08080896;\n\n  --color-view-header-gradient-1: #060813de;\n  --color-view-header-gradient-2: #00285dc0;\n\n  --checkbox-color-0: #3187d3;\n  --checkbox-color-1: #a9a608;\n  --checkbox-color-2: #1dac10;\n  --checkbox-color-3: #ffd1d1;\n  --checkbox-color-4: #625d4c;\n  --checkbox-color-5: #9a67ae;\n  --checkbox-color-6: #5f5f5f;\n  --text-checked-checkbox: #8e8e8e;\n\n  --activeline-background: var(--theme-color-translucent-005);\n\n  /*pseudo-kanban*/\n  --p-kanban-bg-color: #6c6c6c42;\n  --p-kanban-border-color: transparent;\n  --p-kanban-card-color-1: #0000003f;\n  --p-kanban-card-color-2: #41414136;\n  --p-kanban-color-6: #f3424252;\n  --p-kanban-color-5: #eb973752;\n  --p-kanban-color-4: #d2dd3852;\n  --p-kanban-color-3: #38ce2a52;\n  --p-kanban-color-2: #2ec4c452;\n  --p-kanban-color-1: #3496e652;\n  --p-kanban-color-8: #b962ff52;\n  --p-kanban-color-7: #e45bdd52;\n  --p-kanban-color-simple: #8e8e8e41;\n  --p-kanban-color-shadow: #0000004d;\n\n  /*style settings*/\n  --background-secondary-translucent: #2c2c2c26;\n  --background-secondary-translucent-1: #2c2c2c26;\n\n  /*rainbow-checklist*/\n  --checklist-color-1: #005aa486;\n  --checklist-color-2: #00798986;\n  --checklist-color-3: #12781586;\n  --checklist-color-4: #897b0086;\n  --checklist-color-5: #a4620086;\n  --checklist-color-6: #ab100586;\n  --checklist-color-7: #7f1f9086;\n\n  --table-color-calendar-2: rgb(0, 91, 144);\n  --table-color-rgb: 0, 91, 144;\n\n  --mjx-inline-math-color: var(--text-normal);\n  --mjx-math-color: var(--text-normal);\n  --background-leaf-resize-handle: var(--background-secondary-alt-bg-4-bt);\n  --search-result-background: var(--background-secondary-alt-bg-4-bt);\n  --text-folder-file-icon: var(--theme-color);\n\n  --color-highlight-1: var(--text-normal);\n  --color-highlight-2: var(--text-normal);\n  --color-highlight-3: var(--text-normal);\n  --bg-color-highlight-1: #c865656f;\n  --bg-color-highlight-2: #54b9476f;\n  --bg-color-highlight-3: #1e83d086;\n\n  --background-popover: var(--color-base-10);\n\n  --cursor-red: #ff3939;\n  --cursor-yellow: #fff955;\n  --cursor-green: #7dff7d;\n  --cursor-blue: #8ac7ff;\n  --cursor-violet: #bf76ff;\n\n  --bg-color-settings-0: #07070747;\n  --bg-color-settings-0-1: #ffffff00;\n  --bg-color-settings-1: #7c7c7c6d;\n  --bg-color-settings-2: #1f1f1f52;\n  --bg-color-settings-3: #141414be;\n  --bg-color-settings-4: #2e2e2e9d;\n  --bg-color-settings-5: #424242aa;\n  --bg-color-settings-6: #191919c7;\n\n  --background-waves-color:#4A75DB8C;\n\n  --tab-stacked-shadow: #0e0e0e;\n  --divider-color: #000000;\n  --tab-outline-color: #151515;\n\n  --bg-color-notebook: #FFFFFF00;\n  --grid-notebook-line-color-1: #c7c7c71f;\n  --grid-notebook-line-color-2: #74747440;\n  --dotted-notebook-dot-color: #c7c7c71f;\n  --background-nonoverlapping-note: #000000;\n  --stripe-notebook-stripe-color: #162419;\n  --prompt-box-shadow: #555555;\n  --background-titlebar-inner: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 10%);\n  --window-shadow: 0 1px 3px hsla(207, 10%, 10%, 0.1);\n  --window-shadow2:\t0 0 9px hsla(212, 17%, 0%, 0.3);\n  --bt-indentation-line-image: url(\"\");\n  --bt-connected-indent-line-color: #926a6a;\n  --list-colorful-marker: #ff8686;\n}\n\n.theme-light {\n  --background-primary: var(--background-primary-bg-4-bt,#ffffff);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e9e9e9);\n  --background-secondary: var(--background-secondary-bg-4-bt,#fcfcfc);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#f3f3f3);\n\n  --background-modifier-border: #dddddd;\n  --background-modifier-form-field: #fff;\n  --background-modifier-form-field-highlighted: #fff;\n  --background-modifier-box-shadow: rgba(0, 0, 0, 0.08);\n  --background-modifier-success: #A4E7C3;\n  --background-modifier-error: #e68787;\n  --background-modifier-error-rgb: 230, 135, 135;\n  --background-modifier-error-hover: #FF9494;\n\n  --text-accent: var(--color-accent);\n  --text-accent-hover: var(--color-accent-2);\n  --text-normal: #0e0e0e;\n  --text-muted: #7f7f7f;\n  --text-highlight: var(--text-normal);\n  --text-faint: #7f7f7f;\n  --text-folder-file: #272727;\n  --accent-strong: #000000;\n  --accent-em: #099d4e;\n  --text-error: #e75545;\n  --text-error-hover: #f86959;\n\n  --text-selection: #a9d1c859;\n  --text-on-accent: #ffffff;\n  --interactive-normal: #efefef;\n  --interactive-hover: #e6e6e6;\n  --accent-h: 207;\n  --accent-s: 77%;\n  --accent-l: 54%;\n  --accent-l-alt: calc(var(--accent-l) * 0.9);\n  --interactive-accent-rgb: 70, 142, 235;\n\n  --interactive-accent-hover: var(--color-accent-2);\n  --panel-border-color: #dbdbdc;\n  --search-text: #000000;\n  --folder-title: #000000;\n\n  --strong-em-highlight-color: #237add;\n  --mark-highlight-strong-em: #ff880049;\n  --text-highlight-bg: hsla(var(--text-highlight-bg-h-light), var(--text-highlight-bg-s-light), var(--text-highlight-bg-l-light), var(--text-highlight-bg-a-light));\n  --text-search-highlight-bg: #ffd1dd;\n  --strong-em-color-1: #1048ff;\n  --strong-em-color-2: #14c8ff;\n\n  --background-search-result: var(--background-secondary-bg-4-bt);\n  --search-result-file-matched-bg: #ffd9d9e5;\n\n  --page-border-bottom: var(--background-secondary-alt);\n  --background-asymm-split-left: var(--background-secondary-alt);\n\n  --background-mobile-drawer-1: #ffffff;\n  --background-mobile-drawer-2: #ffffffa1;\n  --background-modifier-border-hr: #bfbfbf;\n  --background-modifier-border-asymm: #d8d8d8;\n  --background-modifier-border-checkbox: #9c9c9c;\n  --background-secondary-alt-bg-4-bt-publish: #f6f6f6;\n\n  --background-transparent-black-or-white-1: #ffffffb0;\n  --background-transparent-black-or-white-2: #ffffffca;\n  --background-transparent-black-or-white-3: #eeeeee91;\n  --background-transparent-black-or-white-3-1: #fafafac3;\n  --background-transparent-black-or-white-4: #a7a7a765;\n  --background-transparent-black-or-white-5: #f0f0f091;\n  --background-black-or-white-1: #e4e4e4;\n  --background-modifier-border-1: #e1dfdf;\n  --background-transparent-blue: #c6e5ffde;\n  --bg-color-settings-0: #7d7d7d6b;\n  --bg-color-settings-0-1: #ffffff77;\n  --bg-color-settings-1: #ffffff17;\n  --bg-color-settings-2: #ffffff5a;\n  --bg-color-settings-3: #ffffffda;\n  --bg-color-settings-4: #ffffffd2;\n  --bg-color-settings-5: #d4d4d464;\n  --bg-color-settings-6: #ffffff85;\n\n  --scrollbar-thumb-bg: #dcdcdcbe;\n  --scrollbar-active-thumb-bg: #ddddddd9;\n\n  --gray-1: #383a42;\n  --gray-2: #383a42;\n  --red: var(--nord11);\n  --red-1: #f16464f5;\n  --green: var(--nord14);\n  --darkgreen: #068a5e;\n  --blue: var(--nord10);\n  --darkblue: #3b84e4;\n  --purple: #c74df7;\n  --aqua: var(--nord8);\n  --yellow: #e48100;\n  --light-yellow: #ab9a02;\n  --orange: #db9600;\n  --orange-1: #cc7523;\n  --light-purple: #b74ff3;\n  --blue-green: #3bd4da;\n  --white: #ffffff;\n  --variable-2: #0072d0;\n  --variable-3: #5a96f7;\n\n  --embed-color: hsla(calc(var(--accent-h) * 1),calc(var(--accent-s) * 0.8),calc(var(--accent-l) * 1),0.035);\n  --search-result-file-title-color: var(--text-normal);\n  --theme-color: var(--interactive-accent);\n  --theme-color-translucent-06: hsla(var(--interactive-accent-hsl),0.6);\n  --theme-color-translucent-04: hsla(var(--interactive-accent-hsl),0.4);\n  --theme-color-translucent-02: hsla(var(--interactive-accent-hsl),0.2);\n  --theme-color-translucent-015: hsla(var(--interactive-accent-hsl),0.15);\n  --theme-color-translucent-01: hsla(var(--interactive-accent-hsl),0.1);\n  --theme-color-translucent-005: hsla(var(--interactive-accent-hsl),0.05);\n  --theme-color-translucent-001: hsla(var(--interactive-accent-hsl),0.01);\n\n  --background-blockquote: #d5d5d52c;\n  --background-code: #e6e6e671;\n  --background-code-2: #cccccc62;\n  --text-color-code: #e95d00;\n  --code-normal: #000000;\n\n  --list-ul-block-color: #b9751b;\n  --list-ul-disc-color: #f39c55;\n  --green-1: #3dc730;\n  --list-ul-hover: #dd922f;\n  --list-ol-block-color: #3573a5;\n  --list-ol-number-color: var(--list-marker-color);\n  --list-ol-hover: #2c7bd6;\n  --list-marker-color-collapsed: var(--theme-color);\n\n  --tag-text: #f8f8f8;\n  --stag1: #fa8787;\n  --stag1-bg: #eb2727;\n  --stag2: #fdbd5c;\n  --stag2-bg: #ee9002;\n  --stag3: #50ce3a;\n  --stag3-bg: #22ac09;\n  --tag1: #2573f0;\n  --tag2: #2193f0;\n  --tag3: #17a5e7;\n  --tag4: #14acc7;\n  --tag5: #10bdbd;\n  --tag-dailynote: #0077ff;\n  --tag-dailynote-bg: #277CDD;\n  --tag-weeklynote: #4b9fff;\n  --tag-weeklynote-bg: #6aafff;\n  --tag-questions: #b68fff;\n  --tag-questions-bg: #b085ff;\n  --tag-ideas: #ceb900;\n  --tag-ideas-bg: #444444d8;\n\n  --h1-color: var(--print-h1-color,hsl(216, 88%, 26%));\n  --h2-color: var(--print-h2-color,hsl(212, 100%, 33%));\n  --h3-color: var(--print-h3-color,hsl(210, 86%, 39%));\n  --h4-color: var(--print-h4-color,hsl(208, 58%, 49%));\n  --h5-color: var(--print-h5-color,hsl(209, 70%, 62%));\n  --h6-color: var(--print-h6-color,hsl(209, 65%, 72%));\n\n  --graph-text-color: #696969;\n  --graph-tag: #77d425cc;\n  --graph-attach: #afcfe0cc;\n  --graph-circle: #1f78b4cc;\n  --graph-line: #b1b1b1;\n  --graph-unresolved: #db4e4ecc;\n  --graph-arrow: #e25300;\n  --graph-control-bg: #ffffff9a;\n  --graph-circle-outline: transparent;\n  --graph-canvas-bg: var(--background-primary);\n  --graph-circle-fill-highlight: var(--interactive-accent);\n  --graph-line-fill-highlight: rgb(var(--interactive-accent-rgb));\n \n  --unresolved-link: var(--graph-unresolved);\n  --link-unresolved-decoration-color: var(--graph-unresolved);\n  --internal-link-color: var(--text-accent);\n  --external-link-color: var(--internal-link-color);\n\n  /*mermaid*/\n  --mermaid-active-task-color: #44bbff;\n  --mermaid-seq-dia-color: #76c8ff;\n\n  /*table*/\n  --table-background-color: #f1f1f176;\n  --table-background-color-odd: #ffffff70;\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: var(--theme-color-translucent-01);\n  --table-hover-raw-color: #85bfee2f;\n  --table-hover-color: #5dacec34;\n  --table-hover-thead-color: #ddefff;\n  --table-header-color: var(--text-normal);\n\n  /*calendar*/\n  --calendar-week-color: #48b432;\n  --calendar-week-hover: #e9ffe3;\n  --calendar-week-background-color: #d6e6bf;\n  --calendar-today-background-color: #aaeec6;\n  --calendar-hover-color: var(--theme-color-translucent-01);\n  --calendar-active-color: var(--theme-color-translucent-02);\n\n  /*day planner*/\n  --day-planner-pie: #eca95c;\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: #ffd900;\n  --day-planner-dot: #ffd900;\n  --day-planner-item-hover: #8fccff;\n  --event-item-color1: #65ace6;\n  --event-item-color2: #52a4e7;\n  --event-item-color3: #2e96eb;\n  --event-item-color4: #2786da;\n  --event-item-color5: #1275cc;\n  --event-item-color6: #2664c0;\n  --event-item-color7: #1652ac;\n  --event-item-color8: #0c469c;\n  --event-item-color9: #0a3c86;\n  --event-item-color10: #072f6b;\n\n  /*colourful notes*/\n  --text-gray: #37352f99;\n  --text-brown: #855a46;\n  --text-orange: #d9730d;\n  --text-yellow: #d4a300;\n  --text-yellow-2: #a78000;\n  --text-green: #00927f;\n  --text-blue: #0083bb;\n  --text-purple: #5d1fb9;\n  --text-pink: #c40075;\n  --text-red: #ff4343;\n  --background-gray: #ebeced;\n  --background-brown: #e9e5e3;\n  --background-orange: #faebdd;\n  --background-yellow: #fbf3db;\n  --background-green: #ddedea;\n  --background-blue: #ddebf1;\n  --background-purple: #eae4f2;\n  --background-pink: #f4dfeb;\n  --background-red: #ffe3e3;\n\n  --note-important: #fd4141;\n  --note-cloze: #000000;\n\n  /* stickies */\n  --stickies-color-1: #b3e2b3;\n  --stickies-color-2: #e9c6f1;\n  --tape-color: #acacac65;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #0e64bb;\n  --background-4-sliding-pane: #ffffffef;\n  --bg-sliding-pane-header: #ffffff97;\n  --bg-sliding-pane-leaf: #ffffff88;\n\n  /*admonition*/\n  --admonition-bg-color: #FFFFFF00;\n\n  /*checklist*/\n  --checklist-bg: #dfdfdf8e;\n  --checklist-bg-hover: #ffffffcc;\n\n  --color-view-header-gradient-1: #ffffffce;\n  --color-view-header-gradient-2: #ffffffce;\n\n  /*checkbox*/\n  --checkbox-color-0: #2f92e4;\n  --checkbox-color-1: #c4c116;\n  --checkbox-color-2: #4bbf40;\n  --checkbox-color-3: #ffe9e9;\n  --checkbox-color-4: #fff8b7;\n  --checkbox-color-5: #ad7fbf;\n  --checkbox-color-6: #5f5f5f;\n  --text-checked-checkbox: #9b9b9b;\n\n  --activeline-background: var(--theme-color-translucent-005);\n\n  /*pseudo-kanban*/\n  --p-kanban-bg-color: #d3d3d32d;\n  --p-kanban-border-color: #a0a0a060;\n  --p-kanban-card-color-1: #ffffff80;\n  --p-kanban-card-color-2: #ffffff;\n  --p-kanban-color-6: #f18e8e65;\n  --p-kanban-color-5: #eeb36f65;\n  --p-kanban-color-4: #d1d77f65;\n  --p-kanban-color-3: #8ce38465;\n  --p-kanban-color-2: #7cdddd65;\n  --p-kanban-color-1: #52aaf365;\n  --p-kanban-color-8: #ba8be165;\n  --p-kanban-color-7: #e677e065;\n  --p-kanban-color-simple: #cdcdcd2c;\n  --p-kanban-color-shadow: #cfcfcf4d;\n\n  /*style settings*/\n  --background-secondary-translucent: #ffffff3d;  --background-secondary-translucent-1: #ffffff5d;\n\n  /*rainbow-checklist*/\n  --checklist-color-1: #bbdefbab;\n  --checklist-color-2: #b2ebf2ab;\n  --checklist-color-3: #c8e6c9ab;\n  --checklist-color-4: #f8ef99ab;\n  --checklist-color-5: #ffe0b2ab;\n  --checklist-color-6: #ffcdd2ab;\n  --checklist-color-7: #e1bee7ab;\n\n  --table-color-calendar-2: rgb(167, 223, 251);\n  --table-color-rgb: 167, 223, 251;\n\n  --mjx-inline-math-color: var(--text-normal);\n  --mjx-math-color: var(--text-normal);\n  --background-leaf-resize-handle: var(--background-secondary-alt-bg-4-bt);\n  --text-folder-file-icon: var(--theme-color);\n\n  --color-highlight-1: var(--text-normal);\n  --color-highlight-2: var(--text-normal);\n  --color-highlight-3: var(--text-normal);\n  --bg-color-highlight-1: #ff000034;\n  --bg-color-highlight-2: #0fc41835;\n  --bg-color-highlight-3: #4ca6ff51;\n\n  --background-popover: var(--color-base-10);\n\n  --cursor-red: #ff0000;\n  --cursor-yellow: #d5ca00;\n  --cursor-green: #008000;\n  --cursor-blue: #1791e2;\n  --cursor-violet: #ee82ee;\n\n  --background-waves-color:#4A75DB8C;\n\n  --tab-stacked-shadow: #d6d6d6;\n  --divider-color: #e3e3e3;\n  --tab-outline-color: #e3e3e3;\n\n  --bg-color-notebook: #FFFFFF00;\n  --grid-notebook-line-color-1: #c7c7c740;\n  --grid-notebook-line-color-2: #afafaf40;\n  --dotted-notebook-dot-color: #c7c7c780;\n  --stripe-notebook-stripe-color: #f5f2e6;\n  --background-nonoverlapping-note: #ffffff;\n  --prompt-box-shadow: #bebebe;\n  --background-titlebar-inner: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 10%);\n  --window-shadow: 0 1px 3px hsla(212, 17%, 80%, 0.2);\n  --window-shadow2: 0 0 9px hsla(217, 15%, 83%, 0.7);\n  --bt-indentation-line-image: url(\"\");\n  --bt-connected-indent-line-color: #FFA8A8;\n  --list-colorful-marker: #fd4949;\n}\n\nbody.color-scheme-options-avocado-topaz .theme-light,\nbody.color-scheme-options-avocado-topaz.theme-light {\n  --background-primary: var(--background-primary-bg-4-bt,#ffffff);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e9e9e9);\n  --background-secondary: var(--background-secondary-bg-4-bt,#fcfcfc);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#e8f0e8);\n\n  --background-modifier-border: #e1dfdf;\n\n  --accent-em: #620ac6;\n  --text-selection: #7fbffe59;\n  --accent-h: 143;\n  --accent-s: 34%;\n  --accent-l: 45%;\n  --interactive-accent-rgb: 122, 189, 148;\n\n  --search-text: #000000;\n  --folder-title: #000000;\n\n  --strong-em-highlight-color: #08ae84;\n  --mark-highlight-strong-em: #dbe72849;\n  --text-highlight-bg: #ecf56ed8;\n  --text-search-highlight-bg: #ffd1dd;\n  --strong-em-color-1: #08ae84;\n  --strong-em-color-2: #01531d;\n\n  --background-primary-bg-4-bt: #ffffff;\n  --background-primary-alt-bg-4-bt: #e9e9e9;\n  --background-secondary-bg-4-bt: #ffffff;\n  --background-secondary-alt-bg-4-bt: #e8f0e8;\n\n  --background-mobile-drawer-1: #ffffff;\n  --background-mobile-drawer-2: #ffffffa1;\n  --background-secondary-alt-bg-4-bt-publish: #f6f6f6;\n\n  --background-transparent-blue: #c6e5ffde;\n\n  --scrollbar-thumb-bg: #c6c6c6a8;\n  --scrollbar-active-thumb-bg: #c6c6c6;\n  --search-result-file-title-color: var(--text-normal);\n\n  --background-blockquote: #b6b6b62c;\n  --background-code: #ebebeb71;\n  --background-code-2: #cccccc62;\n  --text-color-code: #e95d00;\n\n  --list-ul-block-color: #b9751b;\n  --list-ul-disc-color: #f39c55;\n  --green-1: #3dc730;\n  --list-ul-hover: #dd922f;\n  --list-ol-block-color: #35a569;\n  --list-ol-number-color: #429a71;\n  --list-ol-hover: #31b870;\n\n  --tag-text: #f8f8f8;\n  --stag1: #fa8787;\n  --stag1-bg: #eb2727;\n  --stag2: #fdbd5c;\n  --stag2-bg: #ee9002;\n  --stag3: #50ce3a;\n  --stag3-bg: #22ac09;\n  --tag1: #79a26b;\n  --tag2: #7eb56b;\n  --tag3: #56b15b;\n  --tag4: #2db37b;\n  --tag5: #17b198;\n  --tag6: #19bb8b;\n  --tag7: #15bf1d;\n  --tag8: #61c108;\n  --tag9: #6ab607;\n  --tag-dailynote: #0077ff;\n  --tag-dailynote-bg: #277CDD;\n  --tag-weeklynote: #4b9fff;\n  --tag-weeklynote-bg: #6aafff;\n  --tag-questions: #b68fff;\n  --tag-questions-bg: #b085ff;\n  --tag-ideas: #ceb900;\n  --tag-ideas-bg: #444444d8;\n\n  --h1-color: var(--print-h1-color,#02401f);\n  --h2-color: var(--print-h2-color,#034f27);\n  --h3-color: var(--print-h3-color,#034924);\n  --h4-color: var(--print-h4-color,#14452b);\n  --h5-color: var(--print-h5-color,#0e4728);\n  --h6-color: var(--print-h6-color,#19452e);\n\n  /*graph*/\n  --graph-text-color: #696969;\n  --graph-tag: #da9ee2cc;\n  --graph-attach: #88b0d6cc;\n  --graph-circle: #6fbf8ecc;\n  --graph-line: #b1b1b1;\n  --graph-unresolved: #db4e4ecc;\n  --graph-arrow: #e25300;\n  --graph-control-bg: #ffffff9a;\n\n  /*mermaid*/\n  --mermaid-active-task-color: #44bbff;\n  --mermaid-seq-dia-color: #76c8ff;\n\n  /*table*/\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: #dbe4dac7;\n  --table-hover-raw-color: #dbe4da57;\n  --table-hover-color: #dbe4da37;\n  --table-hover-thead-color: #dbe4da;\n\n  /*calendar*/\n  --calendar-week-color: #48b432;\n  --calendar-week-hover: #e9ffe3;\n  --calendar-week-background-color: #d6e6bf;\n  --calendar-today-background-color: #aaeec6;\n\n  /*day planner*/\n  --day-planner-pie: #eca95c;\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: #ffd900;\n  --day-planner-dot: #ffd900;\n  --day-planner-item-hover: #5ca35c;\n  --event-item-color1: #7c9f14;\n  --event-item-color2: #659f14;\n  --event-item-color3: #529f14;\n  --event-item-color4: #3d9f14;\n  --event-item-color5: #2d9f14;\n  --event-item-color6: #1d9f14;\n  --event-item-color7: #149f1f;\n  --event-item-color8: #149f2d;\n  --event-item-color9: #149f39;\n  --event-item-color10: #149f44;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #02401f;\n\n  --color-view-header-gradient-1: #d9f7d9ef;\n  --color-view-header-gradient-2: #e9f3edef;\n\n  /*checkbox*/\n  --checkbox-color-0: #4cb385;\n  --checkbox-color-1: #c4c116;\n  --checkbox-color-2: #4077bf;\n  --checkbox-color-3: #ffe9e9;\n  --checkbox-color-4: #fffbd4;\n  --checkbox-color-5: #ad7fbf;\n  --checkbox-color-6: #5f5f5f;\n\n  --table-color-calendar-2: rgb(182, 221, 191);\n  --table-color-rgb: 182, 221, 191;\n}\n\nbody.color-scheme-options-avocado-topaz .workspace-leaf.mod-active .view-header-title {\n  color: var(--h1-color);\n}\n\nbody.color-scheme-options-avocado-topaz.theme-dark {\n  --background-primary: var(--background-primary-bg-4-bt,#181818);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#000000);\n  --background-secondary: var(--background-secondary-bg-4-bt,#181818);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#000000);\n  --accent-h: 140;\n  --accent-s: 52%;\n  --accent-l: 41%;\n  --interactive-accent-rgb: 50, 159, 86;\n\n  --text-selection: #0080ff59;\n  --text-highlight-bg: #47893b8a;\n  --mark-highlight-strong-em: #47893b7a;\n  --strong-em-highlight-color: #9c8ce6;\n  --text-search-highlight-bg: #bb4361;\n  --strong-em-color-1: #9c8ce6;\n  --strong-em-color-2: #23d05c;\n\n  --background-mobile-drawer-1: #1b1b1b;\n  --background-mobile-drawer-2: #1b1b1b69;\n  --background-transparent-blue: #003e759a;\n  --scrollbar-thumb-bg: #8282827e;\n  --scrollbar-active-thumb-bg: #828282;\n  --search-result-file-title-color: var(--text-normal);\n\n  --background-blockquote: #9191911c;\n  --background-code: #1111118c;\n  --background-code-2: #4c4c4cb0;\n  --text-color-code: #d58000;\n\n  --list-ul-block-color: #e19742a9;\n  --list-ul-disc-color: #eb9563;\n  --green-1: #79c142;\n  --list-ul-hover: #e28915de;\n  --list-ol-block-color: #26bb32b4;\n  --list-ol-number-color: #95c49d;\n  --list-ol-hover: #2cd62c;\n\n  --graph-text-color: #B5B5B5;\n  --graph-tag: #b992ddbb;\n  --graph-attach: #76c1f0bb;\n  --graph-circle: #44d07ebb;\n  --graph-line: #8c8c8c;\n  --graph-unresolved: #f08080de;\n  --graph-arrow: #c23917;\n  --graph-control-bg: #00000080;\n\n  /*mermaid*/\n  --mermaid-active-task-color: #187ef1;\n  --mermaid-seq-dia-color: #1371be;\n\n  /*table*/\n  --table-thead-background-color: #557f5c43;\n  --table-hover-raw-color: #557f5c23;\n  --table-hover-color: #557f5c23;\n  --table-hover-thead-color: #557f5c53;\n\n  /*calendar*/\n  --calendar-week-color: #a2df94;\n  --calendar-week-hover: #61815c;\n  --calendar-week-background-color: #4a5842;\n  --calendar-today-background-color: #8c4545;\n\n  /*day planner*/\n  --day-planner-pie: #f19c1c;\n  --day-planner-timeline: #000000;\n  --day-planner-line: #dfcf77;\n  --day-planner-dot: #dfcf77;\n  --day-planner-item-hover: #059429;\n  --event-item-color1: #347703;\n  --event-item-color2: #077703;\n  --event-item-color3: #03771e;\n  --event-item-color4: #037737;\n  --event-item-color5: #03774d;\n  --event-item-color6: #03775a;\n  --event-item-color7: #03776c;\n  --event-item-color8: #037377;\n  --event-item-color9: #036877;\n  --event-item-color10: #035e77;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #27b822;\n  --background-4-sliding-pane: #252525ed;\n\n  --color-view-header-gradient-1: #000000de;\n  --color-view-header-gradient-2: #002900c0;\n\n  /*checkbox*/\n  --checkbox-color-0: #25c648;\n  --checkbox-color-1: #a9a608;\n  --checkbox-color-2: #1061ac;\n  --checkbox-color-3: #ffd1d1;\n  --checkbox-color-4: #625d4c;\n  --checkbox-color-5: #9a67ae;\n  --checkbox-color-6: #5f5f5f;\n\n  --table-color-calendar-2: rgb(5, 158, 5);\n  --table-color-rgb: 5, 158, 5;\n  --divider-color: #000000;\n}\n\n\nbody.color-scheme-options-monochrome-topaz.theme-dark {\n  --background-primary: var(--background-primary-bg-4-bt,#1e1e1e);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#000000);\n  --background-secondary: var(--background-secondary-bg-4-bt,#151515);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#000000);\n  --accent-em: #ffffff;\n  --accent-h: 0;\n  --accent-s: 0%;\n  --accent-l: 47%;\n  --interactive-accent-rgb: 120, 120, 120;\n\n  --text-highlight-bg: #89853b8a;\n  --mark-highlight-strong-em: #fff7603a;\n  --strong-em-highlight-color: #ffffff;\n  --text-search-highlight-bg: #bb4361;\n\n  --search-result-file-title-color: var(--text-normal);\n\n  --background-blockquote: #9191911c;\n  --background-code: #1111118c;\n  --background-code-2: #4c4c4cb0;\n  --text-color-code: #d58000;\n\n  --internal-link-color: #3197eb;\n  --list-ul-block-color: #d0d0d0a9;\n  --list-ul-disc-color: #eb9563;\n  --green-1: #79c142;\n  --list-ul-hover: #e28915de;\n  --list-ol-block-color: #878787b4;\n  --list-ol-number-color: #c6c6c6;\n  --list-ol-hover: #2c7bd6;\n  --tag-text: #e4e4e4;\n  --stag1: #f08383;\n  --stag1-bg: #bd1919;\n  --stag2: #e7b263;\n  --stag2-bg: #ac6700;\n  --stag3: #77df89;\n  --stag3-bg: #058c1c;\n  --tag1: #cccccc;\n  --tag2: #cccccc;\n  --tag3: #cccccc;\n  --tag4: #cccccc;\n  --tag5: #cccccc;\n  --tag-dailynote: #98c8ff;\n  --tag-dailynote-bg: #0f60bd;\n  --tag-weeklynote: #d1e6ff;\n  --tag-weeklynote-bg: #3971b1;\n  --tag-questions: #d4bdff;\n  --tag-questions-bg: #6640ae;\n  --tag-ideas: #fcfcc0;\n  --tag-ideas-bg: #565656d8;\n\n  --h1-color: var(--print-h1-color,#ebebeb);\n  --h2-color: var(--print-h2-color,#ebebeb);\n  --h3-color: var(--print-h3-color,#ebebeb);\n  --h4-color: var(--print-h4-color,#ebebeb);\n  --h5-color: var(--print-h5-color,#ebebeb);\n  --h6-color: var(--print-h6-color,#ebebeb);\n\n  /*graph*/\n  --graph-text-color: #B5B5B5;\n  --graph-tag: #88d842bb;\n  --graph-attach: #5cb5e9bb;\n  --graph-circle: #ebebebb9;\n  --graph-line: #8c8c8c;\n  --graph-unresolved: #f08080de;\n  --graph-arrow: #c23917;\n  --graph-control-bg: #00000080;\n\n  /*mermaid*/\n  --mermaid-active-task-color: #187ef1;\n  --mermaid-seq-dia-color: #1371be;\n\n  --table-border-color: #878787;\n  --table-thead-background-color: #b3b3b363;\n  --table-hover-raw-color: #4040401c;\n  --table-hover-color: #59595947;\n  --table-hover-thead-color: #6969691c;\n\n  /*calendar*/\n  --calendar-week-color: #ededed;\n  --calendar-week-hover: #bfbfbf52;\n  --calendar-week-background-color: #b5b5b52e;\n  --calendar-today-background-color: #8c4545;\n\n  /*day planner*/\n  --day-planner-pie: #f19c1c;\n  --day-planner-timeline: #000000;\n  --day-planner-line: #dfcf77;\n  --day-planner-dot: #dfcf77;\n  --day-planner-item-hover: #707070;\n  --event-item-color1: #0a0a0a;\n  --event-item-color2: #121212;\n  --event-item-color3: #171717;\n  --event-item-color4: #212121;\n  --event-item-color5: #2b2b2b;\n  --event-item-color6: #333333;\n  --event-item-color7: #3d3d3d;\n  --event-item-color8: #454545;\n  --event-item-color9: #4d4d4d;\n  --event-item-color10: #575757;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #ebebeb;\n  --background-4-sliding-pane: #252525ed;\n\n\n\n  --color-view-header-gradient-1: #000000de;\n  --color-view-header-gradient-2: #000000c0;\n\n  --table-color-calendar-2: rgb(69, 69, 69);\n  --table-color-rgb: 69, 69, 69;\n}\n\nbody.color-scheme-options-monochrome-topaz .theme-light,\nbody.color-scheme-options-monochrome-topaz.theme-light {\n  --background-primary: var(--background-primary-bg-4-bt,#ffffff);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e9e9e9);\n  --background-secondary: var(--background-secondary-bg-4-bt,#ffffff);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#f5f5f5);\n  --accent-strong: #000000;\n  --accent-em: #000000;\n  --text-selection: #c6c6c659;\n  --accent-h: 0;\n  --accent-s: 0%;\n  --accent-l: 31%;\n  --interactive-accent-rgb: 79, 79, 79;\n\n  --strong-em-highlight-color: #000000;\n  --text-highlight-bg: #ecf56eb4;\n  --mark-highlight-strong-em: #ecf56eb4;\n  --text-search-highlight-bg: #ffd1dd;\n  --strong-em-color-1: #08ae84;\n  --strong-em-color-2: #01531d;\n\n  --search-result-file-title-color: var(--text-normal);\n\n  --background-blockquote: #b6b6b62c;\n  --background-code: #ebebeb71;\n  --background-code-2: #cccccc62;\n  --text-color-code: #e95d00;\n\n  --internal-link-color: #0040ff;\n\n  /*list*/\n  --list-ul-block-color: #313131;\n  --list-ul-disc-color: #f39c55;\n  --green-1: #3dc730;\n  --list-ul-hover: #dd922f;\n  --list-ol-block-color: #a2a2a2;\n  --list-ol-number-color: #b5b5b5;\n  --list-ol-hover: #4f8fcb;\n\n  --tag-text: #5a5a5a;\n  --stag1: #fa8787;\n  --stag1-bg: #eb2727;\n  --stag2: #fdbd5c;\n  --stag2-bg: #ee9002;\n  --stag3: #50ce3a;\n  --stag3-bg: #22ac09;\n  --tag1: #4f4f4f;\n  --tag2: #4f4f4f;\n  --tag3: #4f4f4f;\n  --tag4: #4f4f4f;\n  --tag5: #4f4f4f;\n  --tag-dailynote: #0077ff;\n  --tag-dailynote-bg: #277CDD;\n  --tag-weeklynote: #4b9fff;\n  --tag-weeklynote-bg: #6aafff;\n  --tag-questions: #b68fff;\n  --tag-questions-bg: #b085ff;\n  --tag-ideas: #ceb900;\n  --tag-ideas-bg: #444444d8;\n\n  --h1-color: var(--print-h1-color,#000000);\n  --h2-color: var(--print-h2-color,#000000);\n  --h3-color: var(--print-h3-color,#000000);\n  --h4-color: var(--print-h4-color,#000000);\n  --h5-color: var(--print-h5-color,#000000);\n  --h6-color: var(--print-h6-color,#000000);\n\n  /*graph*/\n  --graph-text-color: #696969;\n  --graph-tag: #57bf5fcc;\n  --graph-attach: #78b0e4cc;\n  --graph-circle: #6a6a6acc;\n  --graph-line: #b1b1b1;\n  --graph-unresolved: #db4e4ecc;\n  --graph-arrow: #e25300;\n  --graph-control-bg: #ffffff9a;\n\n  /*mermaid*/\n  --mermaid-active-task-color: #44bbff;\n  --mermaid-seq-dia-color: #76c8ff;\n\n  /*table*/\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: #bdbdbdc7;\n  --table-hover-raw-color: #f0f0f063;\n  --table-hover-color: #e3e3e354;\n  --table-hover-thead-color: #ebebeb54;\n\n  /*calendar*/\n  --calendar-week-color: #949494;\n  --calendar-week-hover: #b5b5b52e;\n  --calendar-week-background-color: #878787;\n  --calendar-today-background-color: #aaeec6;\n\n  /*day planner*/\n  --day-planner-pie: #eca95c;\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: #ffd900;\n  --day-planner-dot: #ffd900;\n  --day-planner-item-hover: #474747;\n  --event-item-color1: #b5b5b5;\n  --event-item-color2: #a8a8a8;\n  --event-item-color3: #a1a1a1;\n  --event-item-color4: #969696;\n  --event-item-color5: #8c8c8c;\n  --event-item-color6: #828282;\n  --event-item-color7: #787878;\n  --event-item-color8: #707070;\n  --event-item-color9: #666666;\n  --event-item-color10: #595959;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #000000;\n  --background-4-sliding-pane: #ffffffef;\n\n  --color-view-header-gradient-1: #ffffffef;\n  --color-view-header-gradient-2: #ffffffef;\n\n  --table-color-calendar-2: rgb(212, 212, 212);\n  --table-color-rgb: 212, 212, 212;\n}\n\n\nbody.color-scheme-options-avocado-topaz .workspace-leaf.mod-active .view-header-title {\n  color: var(--h1-color);\n}\n\nbody.color-scheme-options-monochrome-topaz *:not(font)>em>strong,\nbody.color-scheme-options-monochrome-topaz *:not(font)>strong>em,\nbody.color-scheme-options-monochrome-topaz .cm-strong.cm-em {\n  background-image: initial;\n  background-clip: initial;\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: initial;\n  background-color: initial;\n}\n\nbody.color-scheme-options-pink-topaz .theme-light,\nbody.color-scheme-options-pink-topaz.theme-light {\n  --background-primary: var(--background-primary-bg-4-bt,#fffaf0);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e9e9e9);\n  --background-secondary: var(--background-secondary-bg-4-bt,#fffaf0);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#ffebeb);\n  --background-modifier-border: #e1dfdf;\n  --text-normal: #0e0e0e;\n  --text-muted: #7f7f7f;\n  --text-faint: #7f7f7f;\n  --text-folder-file: #272727;\n\n  --accent-em: #000000;\n  --accent-h: 325;\n  --accent-s: 80%;\n  --accent-l: 77%;\n  --text-selection: #f7b2cf59;\n  --interactive-accent-rgb: 243, 148, 203;\n\n  --search-text: #000000;\n  --folder-title: #000000;\n\n  --strong-em-highlight-color: #000000;\n  --mark-highlight-strong-em: #ffd0e99b;\n  --text-highlight-bg: #ffd0e99b;\n  --text-search-highlight-bg: #ffd1dd;\n  --search-result-file-matched-bg: #ffc3c3;\n\n  --background-mobile-drawer-1: #ffffff;\n  --background-mobile-drawer-2: #ffffffa1;\n  --background-secondary-alt-bg-4-bt-publish: #f6f6f6;\n\n  --scrollbar-thumb-bg: #e2bdbd8d;\n  --scrollbar-active-thumb-bg: #e2bdbd;\n  --search-result-file-title-color: #cc437c;\n\n  --background-blockquote: #e6d6ba2c;\n  --background-code: #fae4ee4d;\n  --background-code-2: #d5d5d562;\n  --text-color-code: #e95d00;\n\n  --list-ul-block-color: #c7c947;\n  --list-ul-disc-color: #f39c55;\n  --green-1: #3dc730;\n  --list-ul-hover: #dd922f;\n  --list-ol-block-color: #ce6d8a;\n  --list-ol-number-color: #e599ac;\n  --list-ol-hover: #b83175;\n\n  --tag-text: #f8f8f8;\n  --stag1: #fa8787;\n  --stag1-bg: #eb2727;\n  --stag2: #fdbd5c;\n  --stag2-bg: #ee9002;\n  --stag3: #50ce3a;\n  --stag3-bg: #22ac09;\n  --tag1: #f1afaf;\n  --tag2: #e7c190;\n  --tag3: #86c93a;\n  --tag4: #48c6bf;\n  --tag5: #797fd1;\n  --tag-dailynote: #0077ff;\n  --tag-dailynote-bg: #277CDD;\n  --tag-weeklynote: #4b9fff;\n  --tag-weeklynote-bg: #6aafff;\n  --tag-questions: #b68fff;\n  --tag-questions-bg: #b085ff;\n  --tag-ideas: #ceb900;\n  --tag-ideas-bg: #444444d8;\n\n  --h1-color: var(--print-h1-color,#6f0000);\n  --h2-color: var(--print-h2-color,#7a0757);\n  --h3-color: var(--print-h3-color,#9a1d75);\n  --h4-color: var(--print-h4-color,#b52a87);\n  --h5-color: var(--print-h5-color,#bb5795);\n  --h6-color: var(--print-h6-color,#cc76b7);\n\n  /*graph*/\n  --graph-text-color: #585858;\n  --graph-tag: #e3c982c7;\n  --graph-attach: #c982e3c7;\n  --graph-circle: #f596bbcc;\n  --graph-line: #e6b0c9;\n  --graph-unresolved: #db4e4ecc;\n  --graph-arrow: #e25300;\n  --graph-control-bg: #ffffff9a;\n\n  /*mermaid*/\n  --mermaid-active-task-color: #44bbff;\n  --mermaid-seq-dia-color: #76c8ff;\n\n  /*table*/\n\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: #fad1e96f;\n  --table-hover-raw-color: #fad1e92f;\n  --table-hover-color: #fad1e92f;\n  --table-hover-thead-color: #fad1e98f;\n\n  /*calendar*/\n  --calendar-week-color: #b884a5c7;\n  --calendar-week-hover: #e3d8df66;\n  --calendar-week-background-color: #b884a599;\n  --calendar-today-background-color: #b1779c94;\n\n  /*day planner*/\n  --day-planner-pie: #eca95c;\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: #ffd900;\n  --day-planner-dot: #ffd900;\n  --day-planner-item-hover: #e8a6be;\n  --event-item-color1: #e5b8cb;\n  --event-item-color2: #e1a3bd;\n  --event-item-color3: #e090b1;\n  --event-item-color4: #e080a8;\n  --event-item-color5: #e0719f;\n  --event-item-color6: #e16096;\n  --event-item-color7: #e25590;\n  --event-item-color8: #e64c8c;\n  --event-item-color9: #e64186;\n  --event-item-color10: #e92b7a;\n\n  /* stickies */\n  --stickies-color-1: #e5c7dab5;\n  --stickies-color-2: #dac7afc7;\n  --tape-color: #acacac65;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #6f0000;\n  --background-4-sliding-pane: #ffffffef;\n\n  --color-view-header-gradient-1: #ffdfe4ef;\n  --color-view-header-gradient-2: #ffe4e4ef;\n\n  /*checkbox*/\n  --checkbox-color-0: #d879a8;\n  --checkbox-color-1: #c4c116;\n  --checkbox-color-2: #50a947;\n  --checkbox-color-3: #ffe9e9;\n  --checkbox-color-4: #fffbd4;\n  --checkbox-color-5: #ad7fbf;\n  --checkbox-color-6: #5f5f5f;\n  --text-checked-checkbox: #9b9b9b;\n\n  --table-color-calendar-2: rgb(245, 214, 224);\n  --table-color-rgb: 245, 214, 224;\n}\n\n\nbody.color-scheme-options-pink-topaz.theme-dark {\n  --background-primary: var(--background-primary-bg-4-bt,#0f0f0f);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#000000);\n  --background-secondary: var(--background-secondary-bg-4-bt,#181818);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#222222);\n\n  --accent-em: #d9d4a6;\n  --accent-h: 338;\n  --accent-s: 51%;\n  --accent-l: 59%;\n  --interactive-accent-rgb: 204, 97, 136;\n\n  --text-highlight-bg: #de87a785;\n  --mark-highlight-strong-em: #dc799e85;\n\n  --strong-em-highlight-color: #d9afb3d1;\n  --text-search-highlight-bg: #bb4361;\n  --strong-em-color-1: #fc3b3b;\n  --strong-em-color-2: #f5c414;\n  --search-result-file-matched-bg: #a9672dc9;\n\n  --background-mobile-drawer-1: #1b1b1b;\n  --background-mobile-drawer-2: #1b1b1b69;\n\n  --background-transparent-blue: #003e759a;\n  --scrollbar-thumb-bg: #8d69698d;\n  --scrollbar-active-thumb-bg: #8d6969;\n  --search-result-file-title-color: #c0689b;\n\n  --background-blockquote: #9191911c;\n  --background-code: #00000082;\n  --background-code-2: #4c4c4cb0;\n  --text-color-code: #d58000;\n\n  /*list*/\n  --list-ul-block-color: #b27b7b;\n  --list-ul-disc-color: #af5a5a;\n  --green-1: #79c142;\n  --list-ul-hover: #b69696;\n  --list-ol-block-color: #ce7ea7;\n  --list-ol-number-color: #a25d81;\n  --list-ol-hover: #c0a5b3;\n\n  --tag-text: #e4e4e4;\n  --stag1: #f08383;\n  --stag1-bg: #bd1919;\n  --stag2: #e7b263;\n  --stag2-bg: #ac6700;\n  --stag3: #77df89;\n  --stag3-bg: #058c1c;\n  --tag1: #ba6d6d;\n  --tag2: #ba6d7b;\n  --tag3: #ba6d88;\n  --tag4: #ba6d96;\n  --tag5: #ba6da6;\n  --tag-dailynote: #98c8ff;\n  --tag-dailynote-bg: #0f60bd;\n  --tag-weeklynote: #d1e6ff;\n  --tag-weeklynote-bg: #3971b1;\n  --tag-questions: #d4bdff;\n  --tag-questions-bg: #6640ae;\n  --tag-ideas: #fcfcc0;\n  --tag-ideas-bg: #565656d8;\n\n  --h1-color: var(--print-h1-color,#c66279);\n  --h2-color: var(--print-h2-color,#bb7283);\n  --h3-color: var(--print-h3-color,#b4507f);\n  --h4-color: var(--print-h4-color,#b25c84);\n  --h5-color: var(--print-h5-color,#b74e94);\n  --h6-color: var(--print-h6-color,#b7629a);\n\n  /*graph*/\n  --graph-text-color: #B5B5B5;\n  --graph-tag: #d2bf83c7;\n  --graph-attach: #ad71d6c7;\n  --graph-circle: #d67a8dc7;\n  --graph-line: #ad7b8dc7;\n  --graph-unresolved: #cf3a3ac7;\n  --graph-arrow: #c23917;\n  --graph-control-bg: #00000080;\n\n  /*mermaid*/\n  --mermaid-active-task-color: #187ef1;\n  --mermaid-seq-dia-color: #1371be;\n\n  /*table*/\n\n  --table-thead-background-color: #a76c8f45;\n  --table-hover-raw-color: #a76c8f25;\n  --table-hover-color: #a76c8f2b;\n  --table-hover-thead-color: #a76c8f35;\n\n  /*calendar*/\n  --calendar-week-color: #bb6396e6;\n  --calendar-week-hover: #96798a6b;\n  --calendar-week-background-color: #c794948c;\n  --calendar-today-background-color: #8c4545;\n\n  /*day planner*/\n  --day-planner-pie: #f19c1c;\n  --day-planner-timeline: #000000;\n  --day-planner-line: #dfcf77;\n  --day-planner-dot: #dfcf77;\n  --day-planner-item-hover: #b893a3ad;\n  --event-item-color1: #d35f5fc7;\n  --event-item-color2: #d35f6ac7;\n  --event-item-color3: #d35f76c7;\n  --event-item-color4: #d35f7ec7;\n  --event-item-color5: #d35f86c7;\n  --event-item-color6: #d35f8dc7;\n  --event-item-color7: #d35f95c7;\n  --event-item-color8: #d35f9dc7;\n  --event-item-color9: #d35fa3c7;\n  --event-item-color10: #d35facc7;\n\n  /*kanban*/\n  --kanban-color-1: #9b3636ad;\n  --kanban-color-2: #9b364ead;\n  --kanban-color-3: #9b3660ad;\n  --kanban-color-4: #9b366fad;\n  --kanban-color-5: #9b3679ad;\n  --kanban-color-6: #9b368cad;\n  --kanban-color-7: #99369bad;\n\n  /* stickies */\n  --stickies-color-1: #ecb6d8c7;\n  --stickies-color-2: #ecd9b6c7;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #ffffff;\n  --background-4-sliding-pane: #252525ed;\n\n  --color-view-header-gradient-1: #000000c2;\n  --color-view-header-gradient-2: #2e1f28c2;\n\n  --checkbox-color-0: var(--theme-color);\n  --checkbox-color-1: #a9a608;\n  --checkbox-color-2: #1061ac;\n  --checkbox-color-3: #ffd1d1;\n  --checkbox-color-4: #625d4c;\n  --checkbox-color-5: #9a67ae;\n  --checkbox-color-6: #5f5f5f;\n  --text-checked-checkbox: #8e8e8e;\n\n  --table-color-calendar-2: rgb(215, 121, 153);\n  --table-color-rgb: 215, 121, 153;\n}\n\nbody.color-scheme-options-pink-topaz.theme-light *:not(font)>em>strong,\nbody.color-scheme-options-pink-topaz.theme-light *:not(font)>strong>em,\nbody.color-scheme-options-pink-topaz.theme-light .cm-strong.cm-em {\n  background-image: initial;\n  background-clip: initial;\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: initial;\n  background-color: initial;\n}\n\n\nbody.color-scheme-options-topaz-nord.theme-dark {\n  --background-primary: var(--background-primary-bg-4-bt,#2E3440);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#2E3440);\n  --background-secondary: var(--background-secondary-bg-4-bt,#3B4252);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#434C5E);\n\n  --background-black-or-white-1: var(--nord2);\n\n  --text-normal: var(--nord4);\n  --text-muted: var(--nord5);\n  --text-faint: var(--nord6);\n  --accent-h: 210;\n  --accent-s: 34%;\n  --accent-l: 63%;\n\n  --text-folder-file: var(--nord4);\n\n  --accent-em: var(--nord14);\n\n  --text-highlight-bg: var(--nord13-1);\n  --mark-highlight-strong-em: var(--nord13-1);\n  --text-selection: var(--nord9-2);\n\n  --interactive-accent-rgb: 129, 161, 193;\n\n  --folder-title: var(--nord4);\n\n  --tag-text: var(--nord7);\n  --tag1: var(--nord7-transparent);\n  --tag2: var(--nord7-transparent);\n  --tag3: var(--nord7-transparent);\n  --tag4: var(--nord7-transparent);\n  --tag5: var(--nord7-transparent);\n\n  --h1-color: var(--print-h1-color,var(--nord11));\n  --h2-color: var(--print-h2-color,var(--nord12));\n  --h3-color: var(--print-h3-color,var(--nord13));\n  --h4-color: var(--print-h4-color,var(--nord14));\n  --h5-color: var(--print-h5-color,var(--nord8));\n  --h6-color: var(--print-h6-color,var(--nord15));\n\n  --background-code: #3B42525c;\n  --background-blockquote: #3B42525c;\n\n  --text-color-code: var(--nord8);\n\n  --color-view-header-gradient-1: var(--nord0);\n  --color-view-header-gradient-2: var(--nord0);\n\n  --strong-em-color-1: var(--accent-strong);\n  --strong-em-color-2: var(--accent-strong);\n  --strong-em-highlight-color: var(--accent-strong);\n\n  --embed-color: var(--nord1-1);\n\n  --activeline-background: #4C566A1a;\n\n  --list-ul-block-color: var(--nord12);\n  --list-ul-disc-color: var(--nord12);\n  --green-1: var(--nord14);\n  --list-ul-hover: var(--nord13);\n  --list-ol-block-color: var(--nord9);\n  --list-ol-number-color: var(--nord9);\n  --list-ol-hover: var(--nord7);\n\n  --table-thead-background-color: var(--nord9-2);\n  --table-hover-raw-color: var(--nord9-2);\n  --table-hover-color: var(--nord9-2);\n  --table-hover-thead-color: var(--nord9-1);\n\n  --checkbox-color-0: var(--interactive-accent);\n\n  --graph-text-color: var(--nord4);\n  --graph-tag: var(--nord7);\n  --graph-attach: var(--nord15);\n  --graph-circle: var(--nord9);\n  --graph-line: var(--nord6);\n  --graph-unresolved: var(--nord11);\n  --graph-arrow: var(--nord11);\n\n  --text-search-highlight-bg: var(--nord9-1);\n  --tab-outline-color: var(--nord0);\n  --divider-color: var(--nord0);\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .titlebar-text {\n  color: var(--nord4);\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.unit {\n  color: var(--nord10) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian .cm-hmd-frontmatter.cm-qualifier,\nbody.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian .cm-math.cm-qualifier,\nbody.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian .cm-qualifier,\nbody.color-scheme-options-topaz-nord.theme-dark .token.class {\n  color: var(--nord7) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.number,\nbody.color-scheme-options-topaz-nord.theme-dark .cm-number {\n  color: var(--nord15) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.operator,\nbody.color-scheme-options-topaz-nord.theme-dark .token.entity,\nbody.color-scheme-options-topaz-nord.theme-dark .token.url,\nbody.color-scheme-options-topaz-nord.theme-dark .language-css .token.string,\nbody.color-scheme-options-topaz-nord.theme-dark .style .token.string,\nbody.color-scheme-options-topaz-nord.theme-dark .cm-string,\nbody.color-scheme-options-topaz-nord.theme-dark .token.string,\nbody.color-scheme-options-topaz-nord.theme-dark .token.char,\nbody.color-scheme-options-topaz-nord.theme-dark .token.attr-value,\nbody.color-scheme-options-topaz-nord.theme-dark .token.builtin,\nbody.color-scheme-options-topaz-nord.theme-dark .token.inserted {\n  color: var(--nord14) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.selector,\nbody.color-scheme-options-topaz-nord.theme-dark .token.tag,\nbody.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian span.cm-variable-3 {\n  color: var(--nord10) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.regex,\nbody.color-scheme-options-topaz-nord.theme-dark .token.variable,\nbody.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian span.cm-variable-2 {\n  color: var(--nord12) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.macro.property,\nbody.color-scheme-options-topaz-nord.theme-dark .markdown-source-view.cm-s-obsidian .cm-hmd-codeblock.cm-property,\nbody.color-scheme-options-topaz-nord.theme-dark .token.property,\nbody.color-scheme-options-topaz-nord.theme-dark .token.boolean,\nbody.color-scheme-options-topaz-nord.theme-dark .token.constant,\nbody.color-scheme-options-topaz-nord.theme-dark .token.symbol,\nbody.color-scheme-options-topaz-nord.theme-dark .token.attr-name,\nbody.color-scheme-options-topaz-nord.theme-dark .token.deleted {\n  color: var(--nord9) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.function,\nbody.color-scheme-options-topaz-nord.theme-dark .markdown-source-view.cm-s-obsidian .cm-variable {\n  color: var(--nord13) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.comment,\nbody.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian span.cm-comment {\n  color: var(--nord3-1) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.atrule,\nbody.color-scheme-options-topaz-nord.theme-dark .token.keyword {\n  color: var(--nord13) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.tag,\nbody.color-scheme-options-topaz-nord.theme-dark .token.constant,\nbody.color-scheme-options-topaz-nord.theme-dark .token.symbol,\nbody.color-scheme-options-topaz-nord.theme-dark .token.deleted,\nbody.color-scheme-options-topaz-nord.theme-dark .cm-tag {\n  color: var(--nord11) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark .token.color,\nbody.color-scheme-options-topaz-nord.theme-dark .token.hexcode.color {\n  color: var(--nord8) !important;\n}\n\nbody.color-scheme-options-topaz-nord.theme-dark #calendar-container,\nbody.style-options-for-calendar-plugin-style-one.color-scheme-options-topaz-nord.theme-dark #calendar-container {\n  --color-tr: var(--nord0);\n  --color-calendar-weekends: var(--nord11);\n}\n\nbody.color-scheme-options-topaz-nord .theme-light,\nbody.color-scheme-options-topaz-nord.theme-light {\n  --accent-h: 210;\n  --accent-s: 34%;\n  --accent-l: 63%;\n  --accent-em: var(--nord14-0);\n\n  --text-selection: var(--nord9-2);\n\n  --interactive-accent-rgb: 129, 161, 193;\n\n  --tag-text: #3a79dd;\n  --tag1: #005aec21;\n  --tag2: #005aec21;\n  --tag3: #005aec21;\n  --tag4: #005aec21;\n  --tag5: #005aec21;\n  --h1-color: var(--print-h1-color,var(--nord11));\n  --h2-color: var(--print-h2-color,var(--nord12));\n  --h3-color: var(--print-h3-color,var(--nord13-0));\n  --h4-color: var(--print-h4-color,var(--nord14-0));\n  --h5-color: var(--print-h5-color,var(--nord8-0));\n  --h6-color: var(--print-h6-color,var(--nord15));\n\n  --background-code: var(--nord6-2);\n  --background-blockquote: var(--nord6-2);\n\n  --text-highlight-bg: var(--nord13-1);\n  --mark-highlight-strong-em: var(--nord13-1);\n\n  --text-color-code: var(--nord8-0);\n\n  --color-view-header-gradient-1: var(--background-primary-bg-4-bt);\n  --color-view-header-gradient-2: var(--background-primary-bg-4-bt);\n\n  --strong-em-color-1: var(--accent-strong);\n  --strong-em-color-2: var(--accent-strong);\n  --strong-em-highlight-color: var(--accent-strong);\n\n  --embed-color: var(--nord6-2);\n\n  --activeline-background: var(--nord5-1);\n\n  --list-ul-block-color: var(--nord12);\n  --list-ul-disc-color: var(--nord12);\n  --green-1: var(--nord14-0);\n  --list-ul-hover: var(--nord13-0);\n  --list-ol-block-color: var(--nord9);\n  --list-ol-number-color: var(--nord9);\n  --list-ol-hover: var(--nord7);\n\n  --table-thead-background-color: var(--nord9-2);\n  --table-hover-raw-color: var(--nord9-2);\n  --table-hover-color: var(--nord9-2);\n  --table-hover-thead-color: var(--nord9-1);\n\n  --checkbox-color-0: var(--interactive-accent);\n\n  --graph-text-color: var(--nord1);\n  --graph-tag: var(--nord7);\n  --graph-attach: var(--nord15);\n  --graph-circle: var(--nord9);\n  --graph-line: var(--nord3-1);\n  --graph-unresolved: var(--nord11);\n  --graph-arrow: var(--nord11);\n\n  --text-search-highlight-bg: var(--nord9-2);\n}\n\n/*@Lavi & @嘴 的Flamingo主题色（原Pink Topaz）*/\nbody.color-scheme-options-flamingo .theme-light,\nbody.color-scheme-options-flamingo.theme-light {\n  --background-primary: var(--background-primary-bg-4-bt,#efe9d9);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#ffdece);\n  --background-secondary: var(--background-secondary-bg-4-bt,#efe9d9);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#efe9d9);\n\n  --background-4-sliding-panel: #efe9d9;\n  --background-mobile-drawer-1: #efe9d9;\n  --background-mobile-drawer-2: #efe9d9;\n  --graph-control-bg: #efe9d9;\n\n  --background-modifier-border: rgba(0, 0, 0, 0.1);\n  --background-modifier-form-field: #ffdece;\n  --background-modifier-form-field-highlighted: #f5a7a2;\n  --background-modifier-box-shadow: rgba(0, 0, 0, 0.1);\n  --background-modifier-success: #ffdece;\n  --background-modifier-error: #f5a7a2;\n  --background-modifier-error-rgb: 230, 135, 135;\n  --background-modifier-error-hover: #fefcf9;\n\n  --text-normal: #37291a;\n  --text-muted: #37291a;\n  --text-faint: #37291a;\n  --accent-strong: #37291a;\n  --text-error: #f5a7a2;\n  --text-error-hover: #fefcf9;\n\n  --text-highlight-bg-h: 4;\n  --text-highlight-bg-s: 81%;\n  --text-highlight-bg-l: 80%;\n  --text-highlight-bg-a: 0.847;\n  --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a));\n  --text-selection: #f39ba044;\n\n  --interactive-accent-rgb: 245,167,162;\n  --accent-h: 4;\n  --accent-s: 81%;\n  --accent-l: 80%;\n  --panel-border-color: #fd355a;\n  --search-text: #37291a;\n  --folder-title: #37291a;\n\n  --gray-1: #c4c4c4;\n  --gray-2: #7c8595;\n  --red: #fd355a;\n  --red-1: #980000;\n  --green: #40916c;\n  --darkgreen: #004f2d;\n  --blue: #69a2ee;\n  --darkblue: #5981f0;\n  --purple: #8673b4;\n  --aqua: #4dd8ef;\n  --yellow: #ffc727;\n  --light-yellow: #e5e79c;\n  --orange: #f19c79;\n  --light-purple: #d3d6fe;\n  --blue-green: #16bcc0;\n\n  --search-result-file-title-color: #980000;\n\n  --list-ul-block-color: #f5a7a2;\n  --list-ul-disc-color: #fd355a;\n  --list-ul-hover: #980000;\n  --list-ol-block-color: #f5a7a2;\n  --list-ol-number-color: #f5a7a2;\n  --list-ol-hover: #980000;\n  --stag1: #fd355a;\n  --stag2: #fd355a;\n  --stag3: #fd355a;\n  --tag1: #56cfc7c7;\n  --tag2: #eca1bcda;\n  --tag3: #e6d00d;\n  --tag4: #40916c;\n  --tag5: #68c7a4;\n\n  --h1-color: var(--print-h1-color,#f39ba0);\n  --h2-color: var(--print-h2-color,#f39ba0);\n  --h3-color: var(--print-h3-color,#f39ba0);\n  --h4-color: var(--print-h4-color,#f39ba0);\n  --h5-color: var(--print-h5-color,#f39ba0);\n  --h6-color: var(--print-h6-color,#f39ba0);\n\n  --graph-text-color: #37291a;\n  --graph-tag: #ffdece;\n  --graph-attach: #f5a7a2;\n  --graph-circle: #FD355C;\n  --graph-line: #fea2c2;\n  --graph-unresolved: #E87659;\n  --graph-arrow: #980000;\n  --mermaid-active-task-color: #f5a7a2;\n  --mermaid-seq-dia-color: #ffdece;\n  --table-background-color: #ffdece;\n  --table-background-color-odd: #ffdece;\n  --table-border-color: #fd355a;\n  --table-thead-background-color: #f5a7a2;\n  --table-hover-color: #f5a7a2;\n  --table-hover-thead-color: #f5a7a2;\n  --table-hover-raw-color: #ffdece;\n  --calendar-week-color: #f5a7a2;\n  --calendar-week-hover: #ffdece;\n  --calendar-week-background-color: #ffdece;\n  --day-planner-pie: #f5a7a2;\n  --day-planner-timeline: #ffdece;\n  --day-planner-line: #fd355a;\n  --day-planner-dot: #ffdece;\n  --day-planner-item-hover: #f5a7a2;\n  --event-item-color1: #f39ba063;\n  --event-item-color2: #f39ba091;\n  --event-item-color3: #f39ba0c4;\n  --event-item-color4: #f39ba0;\n  --event-item-color5: #D08489;\n  --event-item-color6: #B27175;\n  --event-item-color7: #D08489;\n  --event-item-color8: #f39ba0;\n  --event-item-color9: #f39ba0c4;\n  --event-item-color10: #f39ba091;\n\n  --note-important: #fd355a;\n  --note-cloze: #fd355a;\n  --stickies-color-1: #e46969;\n  --stickies-color-2: #f5a7a2;\n  --tape-color: #acacac65;\n  --header-color: #f5a7a2;\n\n  --color-view-header-gradient-1: #efe9d933;\n  --color-view-header-gradient-2: #efe9d933;\n\n  --table-color-calendar-2: rgb(214, 118, 146);\n  --table-color-rgb: 214, 118, 146;\n  --scrollbar-thumb-bg: #f39ba050;\n  --scrollbar-active-thumb-bg: #f39ba0;\n}\n\n\nbody.color-scheme-options-flamingo.theme-dark {\n  --background-primary: var(--background-primary-bg-4-bt,#212121);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#f937590d);\n  --background-secondary: var(--background-secondary-bg-4-bt,#242424);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#191919);\n\n  --background-modifier-border: #191919;\n  --background-modifier-form-field: #f39ba0;\n  --background-modifier-form-field-highlighted: #e5c7a9;\n  --background-modifier-box-shadow: #292929;\n  --background-modifier-success: #f93759;\n  --background-modifier-error: #f93759;\n  --background-modifier-error-rgb: #f93759;\n  --background-modifier-error-hover: #F93758;\n\n  --text-normal: #efe9d9;\n  --text-muted: #efe9d9;\n  --text-faint: #efe9d9;\n  --accent-strong: #efe9d9;\n  --text-em-color: #f93759;\n  --text-error: #f93759;\n  --text-error-hover: #f93759;\n\n  --text-highlight-bg-h: 357;\n  --text-highlight-bg-s: 79%;\n  --text-highlight-bg-l: 78%;\n  --text-highlight-bg-a: 0.847;\n  --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a));\n  --text-selection: #e5c7a94a;\n\n  --accent-h: 357;\n  --accent-s: 79%;\n  --accent-l: 78%;\n  --interactive-accent-rgb: 243, 155, 160;\n\n  --panel-border-color: #f93759;\n  --search-text: #fff;\n  --folder-title: #fff;\n\n  --gray-1: #c9b0b0;\n  --gray-2: #b4b1c6;\n  --red: #ff9090;\n  --red-1: #f93759;\n  --orange: #f28d61;\n  --green: #00ffc7;\n  --darkgreen: #1bbc9b;\n  --aqua: #30daff;\n  --purple: #b073ff;\n  --blue: #00a3b9;\n  --darkblue: #0040ff;\n  --yellow: #fcdc00;\n  --light-yellow: #ffd26c;\n\n  --search-result-file-title-color: #f39ba0;\n  --background-blockquote-dark: #292929;\n  --list-ul-block-color: #f39ba0;\n  --list-ul-disc-color: #f93759;\n  --list-ul-hover: #ffebec;\n  --list-ol-block-color: #f39ba0;\n  --list-ol-number-color: #ffccbc;\n  --list-ol-hover: #ffebec;\n  --stag1: #f39ba0;\n  --stag2: #ffccbc;\n  --stag3: #ffebec;\n  --tag1: #028588;\n  --tag2: #40916c;\n  --tag3: #69a2ee;\n  --tag4: #c47a5e;\n  --tag5: #004f2d;\n\n  --h1-color: var(--print-h1-color,#ffccbc);\n  --h2-color: var(--print-h2-color,#ffccbc);\n  --h3-color: var(--print-h3-color,#ffccbc);\n  --h4-color: var(--print-h4-color,#ffccbc);\n  --h5-color: var(--print-h5-color,#ffccbc);\n  --h6-color: var(--print-h6-color,#ffccbc);\n\n  --graph-text-color: #efe9d9;\n  --graph-tag: #f39ba0;\n  --graph-attach: #ffebec;\n  --graph-circle: #f39ba0;\n  --graph-line: #ffc3bc;\n  --graph-unresolved: #ffccbc;\n  --graph-arrow: #ffc3bc;\n  --mermaid-active-task-color: #F39BA4;\n  --mermaid-seq-dia-color: #ffebec;\n  --table-background-color: #212121;\n  --table-background-color-odd: transparent;\n  --table-border-color: #ffebec;\n  --table-thead-background-color: #f39ba0ad;\n  --table-hover-raw-color: #292929;\n  --table-hover-color: #ffccbc0a;\n  --table-hover-thead-color: #f39ba0;\n  --calendar-week-color: #ffccbc;\n  --calendar-week-hover: #f39ba0;\n  --calendar-week-background-color: transparent;\n  --day-planner-pie: #ffccbc;\n  --day-planner-timeline: #ff9b7c;\n  --day-planner-line: #f39ba0;\n  --day-planner-dot: #ffebec;\n  --day-planner-item-hover: #f39ba0;\n  --event-item-color9: #ffc3bc;\n  --event-item-color8: #ffbcbc;\n  --event-item-color10: #ffccbc;\n  --event-item-color7: #ffbcc4;\n  --event-item-color6: #ffbcbc;\n  --event-item-color5: #ffc3bc;\n  --event-item-color4: #ffccbc;\n  --event-item-color3: #ffd4bc;\n  --event-item-color2: #ffdcbc;\n  --event-item-color1: #ffe4bc;\n\n  --note-important: #f93759;\n  --note-cloze: #f93759;\n  --stickies-color-1: #f39ba0;\n  --stickies-color-2: #ffebec;\n  --tape-color: #ffccbc47;\n  --header-color: #f39ba0;\n\n  --color-view-header-gradient-1: #21212122;\n  --color-view-header-gradient-2: #21212122;\n\n  --table-color-calendar-2: rgb(215, 86, 125);\n  --table-color-rgb: 215, 86, 125;\n  --scrollbar-thumb-bg: #e2bdbd50;\n  --scrollbar-active-thumb-bg: #e2bdbd;\n}\n\nbody.color-scheme-options-flamingo.theme-light #calendar-container {\n  --color-background-heading: transparent;\n  --color-background-weeknum: transparent;\n  --color-background-day: transparent;\n  --color-background-weekend: transparent;\n\n  --color-tr: #ffdece8c !important;\n  --color-tr-odd: #ffdece !important;\n\n  --color-dot: var(--text-accent);\n  --color-arrow: currentColor;\n  --color-button: var(--text-muted);\n  --color-text-weeknum: var(--calendar-week-color);\n\n  --color-text-title: var(--text-normal);\n  --color-text-heading: var(--text-normal);\n  --color-text-day: var(--text-normal);\n  --color-text-today: var(--text-accent);\n\n  padding: 0px 5px 0px 8px;\n  margin: -21px -8px 0px -8px;\n  line-height: 0.6;\n}\n\n/*表格调整*/\n/*星期*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container th {\n  padding: 6px 0;\n  border-radius: 0px !important;\n  background-color: var(--table-thead-background-color) !important;\n}\n\nbody.color-scheme-options-flamingo.theme-light #calendar-container .week-num,\nbody.color-scheme-options-flamingo.theme-light #calendar-container .day {\n  border-radius: 0px !important;\n}\n\n/*天*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container td {\n  width: 12.5%;\n  border-right: 0px solid var(--background-secondary-alt);\n  padding: 0px 0px 0px 0px !important;\n  line-height: 22px;\n  border-radius: 0px !important;\n}\n\nbody.color-scheme-options-flamingo.theme-light #calendar-container tr {\n  border: 2px solid var(--background-secondary-alt);\n}\n\n/*“Today”*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container .reset-button {\n  font-size: 14px !important;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  line-height: 1.2;\n  text-align: center;\n}\n\n/*悬停Today*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container .reset-button:hover {\n  color: var(--header-color);\n  background-color: var(--table-hover-raw-color);\n}\n\n/*悬停arrow*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container .arrow:hover {\n  color: var(--theme-color);\n}\n\nbody.color-scheme-options-flamingo.theme-light #calendar-container .day:active,\nbody.color-scheme-options-flamingo.theme-light #calendar-container .active,\nbody.color-scheme-options-flamingo.theme-light #calendar-container .active.today {\n  background-color: #f5a7a2 !important;\n}\n\n/*点调整 dot*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container .dot-container {\n  margin-top: -2px;\n  margin-bottom: -1px;\n}\n\n/*月份调整 month*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container .month {\n  font-size: 20px;\n  line-height: 1;\n}\n\n/*年份调整 year*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container .year {\n  font-size: 20px;\n  line-height: 1;\n}\n\n/*星期数 week*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container .week-num {\n  background-color: var(--calendar-week-background-color);\n  font-weight: 600;\n}\n\n/*星期数悬停 week hover*/\nbody.color-scheme-options-flamingo.theme-light #calendar-container .week-num:hover {\n  background-color: var(--calendar-week-hover) !important;\n}\n\n/*比上面那个还菜鸟的人做的一些修改*/\nbody.color-scheme-options-flamingo.theme-light .nav-folder.mod-root>.nav-folder-title {\n  background-color: var(--background-secondary-alt-bg-4-bt)\n}\n\nbody.color-scheme-options-flamingo.theme-light .admonition {\n  background-color: #ffebec15 !important;\n}\n\nbody.color-scheme-options-flamingo.theme-light {\n  --font-family-vault: Arlrdbd, 'Source Han Sans', 'Noto Sans CJK', 'Source Sans Pro' !important; /*左侧库名字体*/\n  --font-family-folder-file-title: Arlrdbd, 'Source Han Sans', 'Noto Sans CJK', 'Source Sans Pro' !important;/*左侧边栏文件、文件夹字体*/\n}\n\nbody.color-scheme-options-flamingo.theme-light .tag[href^=\"#DailyNote\"] {\n  background-color: var(--tag1);\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n}\n\nbody.color-scheme-options-flamingo.theme-light .tag[href^=\"#DailyNote\"]::after {\n  content: '❀';\n  font-size: var(--font-size-emoji-after-tag);\n}\n\nbody.color-scheme-options-flamingo.theme-light .search-result-file-match {\n  background: transparent;\n}\n\n/*@Lavi & @嘴 的Flamingo主题色（原Pink Topaz）到此结束 */\n\n/*=================== Lillian 的配色 ========================*/\n/*蜂蜜牛奶配色 by Lillian */\nbody.color-scheme-options-honey-milk-topaz .theme-light,\nbody.color-scheme-options-honey-milk-topaz.theme-light {\n  /*色系设置*/\n  --color1: #ffde89;\n  --color2: #ffd876;\n  --color3: #ffd362;\n  --color4: #ffcd4e;\n  --color5: #ffc83b;\n  --color6: #ffc227;\n  --color7: #ffbd14;\n  --color8: #ffb700;\n  --color9: #ebae14;\n  --color10: #d8a627;\n  --color11: #c49d3b;\n\n  --main-color: #f1b024;\n  --low-color: var(--color3);\n  --high-color: var(--color8);\n  --deep-color: var(--color11);\n\n  --bg-color: #f8f8f5;\n  --bg-color2: #f0ede0;\n\n  --background-primary: var(--background-primary-bg-4-bt,#f8f8f5);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#f0ede0);\n  --background-secondary: var(--background-secondary-bg-4-bt,#f8f8f5);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#f0ede0);\n\n  --background-modifier-border: #e1dfdf;\n\n  --accent-em: #099d4e;\n\n  --text-selection: #66bbaa59;\n  --accent-h: 41;\n  --accent-s: 88%;\n  --accent-l: 54%;\n  --interactive-accent-rgb: 215, 178, 88;\n\n  --search-text: #000000;\n  --folder-title: #000000;\n\n  --strong-em-highlight-color: var(--color11);\n\n  --text-highlight-bg-h: 34;\n  --text-highlight-bg-s: 100%;\n  --text-highlight-bg-l: 80%;\n  --text-highlight-bg-a: 0.847;\n  --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a));\n  --text-search-highlight-bg: var(--color2);\n  --search-result-file-matched-bg: var(--low-color);\n\n  --background-mobile-drawer-1: var(--bg-color);\n  --background-mobile-drawer-2: var(--bg-color);\n  --background-secondary-alt-bg-4-bt-publish: #f6f6f6;\n\n  --search-result-file-title-color: var(--main-color);\n\n  --list-ul-block-color: var(--color6);\n  --list-ul-disc-color: var(--main-color);\n  --green-1: #3dc730;\n  --list-ul-hover: var(--low-color);\n  --list-ol-block-color: var(--main-color);\n  --list-ol-number-color: var(--main-color);\n  --list-ol-hover: var(--low-color);\n\n  --h1-color: var(--print-h1-color,var(--color6));\n  --h2-color: var(--print-h2-color,var(--color7));\n  --h3-color: var(--print-h3-color,var(--color8));\n  --h4-color: var(--print-h4-color,var(--color9));\n  --h5-color: var(--print-h5-color,var(--color10));\n  --h6-color: var(--print-h6-color,var(--color11));\n\n  /*graph*/\n  --graph-text-color: #696969;\n  --graph-tag: #77d425cc;\n  --graph-attach: #afcfe0cc;\n  --graph-circle: var(--color3);\n  --graph-line: #b1b1b1;\n  --graph-unresolved: #db4e4ecc;\n  --graph-arrow: #e25300;\n  --graph-control-bg: var(--bg-color);\n\n  /*mermaid*/\n  --mermaid-active-task-color: var(--high-color);\n  --mermaid-seq-dia-color: var(--low-color);\n\n  /*table*/\n  --table-background-color: var(--bg-color2);\n  --table-background-color-odd: #ffffffaf;\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: var(--color1);\n  --table-hover-raw-color: var(--color2);\n  --table-hover-color: var(--color1);\n  --table-hover-thead-color: var(--color2);\n\n  /*calendar*/\n  --calendar-week-color: var(--high-color);\n  --calendar-week-hover: var(--color1);\n  --calendar-week-background-color: var(--bg-color);\n  --calendar-today-background-color: var(--color1);\n\n  /*day planner*/\n  --day-planner-pie: var(--deep-color);\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: var(--low-color);\n  --day-planner-dot: var(--low-color);\n  --day-planner-item-hover: var(--color1);\n  --event-item-color1: var(--color2);\n  --event-item-color2: var(--color3);\n  --event-item-color3: var(--color4);\n  --event-item-color4: var(--color5);\n  --event-item-color5: var(--color6);\n  --event-item-color6: var(--color7);\n  --event-item-color7: var(--color8);\n  --event-item-color8: var(--color9);\n  --event-item-color9: var(--color10);\n  --event-item-color10: var(--color11);\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--deep-color);\n  --background-4-sliding-pane: var(--bg-color);\n\n\n\n  /*checklist*/\n  --checklist-bg: #dfdfdf8e;\n  --checklist-bg-hover: #ffffffcc;\n\n  --color-view-header-gradient-1: var(--color1);\n  --color-view-header-gradient-2: var(--bg-color);\n\n  /*checkbox*/\n  --checkbox-color-0: var(--main-color);\n  --checkbox-color-1: #c4c116;\n  --checkbox-color-2: #4bbf40;\n  --checkbox-color-3: #ffe9e9;\n  --checkbox-color-4: #fffbd4;\n  --checkbox-color-5: #ad7fbf;\n  --checkbox-color-6: #5f5f5f;\n  --text-checked-checkbox: #9b9b9b;\n\n  --table-color-calendar-2: rgb(242, 235, 207);\n  --table-color-rgb: 242, 235, 207;\n}\n\n\nbody.color-scheme-options-honey-milk-topaz.theme-dark {\n  /*蜂蜜牛奶 #f1b024*/\n\n  --color1: #ffde89;\n  --color2: #ffd876;\n  --color3: #ffd362;\n  --color4: #ffcd4e;\n  --color5: #ffc83b;\n  --color6: #ffc227;\n  --color7: #ffbd14;\n  --color8: #ffb700;\n  --color9: #ebae14;\n  --color10: #d8a627;\n  --color11: #a17f28;\n\n  --main-color: #f1b024;\n  --low-color: var(--color3);\n  --high-color: var(--color8);\n  --deep-color: var(--color11);\n\n  --bg-color: #222222;\n  --bg-color2: #333333;\n\n  --background-primary: var(--background-primary-bg-4-bt,#222222);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#222222);\n  --background-secondary: var(--background-secondary-bg-4-bt,#333333);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#222222);\n\n  --background-modifier-border: #565656;\n\n  --text-selection: #47a5914d;/*鼠标选择 文字背景颜色*/\n  --accent-h: 43;\n  --accent-s: 69%;\n  --accent-l: 50%;\n  --interactive-accent-rgb: 216, 166, 39;/*主题强调色 rgb , 需与主题色一致（把上面的值转成rgb放下面）*/\n\n  --panel-border-color: #18191e;/*侧边栏、下部状态栏线条颜色，改了没有，线条被我取消了 :p*/\n  --search-text: var(--color1);/*搜索结果文字颜色*/\n  --folder-title: #ffffff;/*文件栏文件夹文字颜色*/\n\n  --strong-em-highlight-color: var(--color11);\n  --text-search-highlight-bg: #bb4361;\n\n  --strong-em-color-1: #43d3ff;/*加粗斜体渐变色1*/\n  --strong-em-color-2: #baaaff;/*加粗斜体渐变色2*/\n  --search-result-file-matched-bg: var(--color9);/* 搜索结果文字高亮颜色 */\n\n  --background-mobile-drawer-1: var(--bg-color);\n  --background-mobile-drawer-2: var(--bg-color);\n\n  --background-transparent-blue: #003e759a;\n\n  --scrollbar-thumb-bg: #8282827e;\n  --scrollbar-active-thumb-bg: #828282;\n\n  --search-result-file-title-color: var(--main-color);\n\n  --background-blockquote: #9191911c;/*引用框背景颜色*/\n  --background-code: #1111118c;/*代码框背景颜色*/\n  --background-code-2: #4c4c4cb0;\n  --text-color-code: #d58000;/*代码框文字颜色*/\n\n  --list-ul-block-color: var(--deep-color);\n  --list-ul-disc-color: var(--main-color);\n  --green-1: #3dc730;\n  --list-ul-hover: var(--low-color);\n  --list-ol-block-color: var(--deep-color);\n  --list-ol-number-color: var(--main-color);\n  --list-ol-hover: var(--low-color);\n\n  --h1-color: var(--print-h1-color,var(--color6));\n  --h2-color: var(--print-h2-color,var(--color7));\n  --h3-color: var(--print-h3-color,var(--color8));\n  --h4-color: var(--print-h4-color,var(--color9));\n  --h5-color: var(--print-h5-color,var(--color10));\n  --h6-color: var(--print-h6-color,var(--color11));\n\n  /*graph*/\n  --graph-text-color: #B5B5B5;/*图谱文字颜色*/\n  --graph-tag: #88d842bb;/*图谱线颜色*/\n  --graph-attach: #b2cfe0bb;/*图谱附件颜色*/\n  --graph-circle: var(--color8);/*图谱普通点颜色*/\n  --graph-line: #8c8c8c;/*图谱线颜色*/\n  --graph-unresolved: #f08080de;/*图谱未创建点颜色，兼未创建双链颜色*/\n  --graph-arrow: #c23917;/*图谱箭头颜色*/\n  --graph-control-bg: #00000080;/*图谱控制窗背景颜色*/\n\n  /*mermaid*/\n  --mermaid-active-task-color: var(--low-color);\n  --mermaid-seq-dia-color: var(--high-color);\n\n  --table-background-color: var(--bg-color2);\n  --table-background-color-odd: var(--bg-color);\n  --table-border-color: #878787;\n  --table-thead-background-color:  var(--color11);\n  --table-hover-raw-color: var(--color10);\n  --table-hover-color: var(--color11);;\n  --table-hover-thead-color:  var(--color10);\n\n  /*calendar*/\n  --calendar-week-color: var(--high-color);\n  --calendar-week-hover: var(--color1);\n  --calendar-week-background-color: var(--bg-color);\n  --calendar-today-background-color: var(--color1);\n\n  /*day planner*/\n  --day-planner-pie: var(--color1);\n  --day-planner-timeline: #000000;\n  --day-planner-line: var(--low-color);\n  --day-planner-dot: var(--low-color);\n  --day-planner-item-hover: var(--main-color);\n  --event-item-color1: var(--color2);\n  --event-item-color2: var(--color3);\n  --event-item-color3: var(--color4);\n  --event-item-color4: var(--color5);\n  --event-item-color5: var(--color6);\n  --event-item-color6: var(--color7);\n  --event-item-color7: var(--color8);\n  --event-item-color8: var(--color9);\n  --event-item-color9: var(--color10);\n  --event-item-color10: var(--color11);\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--color1);\n\n  --color-view-header-gradient-1: var(--bg-color2);\n  --color-view-header-gradient-2: var(--bg-color);\n\n  /*checkbox*/\n  --checkbox-color-0: var(--main-color);\n\n  --table-color-calendar-2: rgb(120, 104, 38);\n  --table-color-rgb: 120, 104, 38;\n}\n\nbody.color-scheme-options-honey-milk-topaz #calendar-container {\n  --color-background-heading: transparent;\n  --color-background-weeknum: transparent;\n  --color-background-day: transparent;\n  --color-background-weekend: transparent;\n\n  --color-tr: var(--bg-color) !important;\n  --color-tr-odd: #ffdece !important;\n\n  --color-dot: var(--text-accent);\n  --color-arrow: currentColor;\n  --color-button: var(--text-muted);\n  --color-text-weeknum: var(--calendar-week-color);\n\n  --color-text-title: var(--text-normal);\n  --color-text-heading: var(--text-normal);\n  --color-text-day: var(--text-normal);\n  --color-text-today: var(--text-accent);\n\n  padding: 0px 5px 0px 8px;\n  margin: -21px -8px 0px -8px;\n  line-height: 0.6;\n}\n\n/*巧克力色 by Lillian */\nbody.color-scheme-options-chocolate-topaz .theme-light,\nbody.color-scheme-options-chocolate-topaz.theme-light {\n  --color1: #f8d3a0;\n  --color2: #d8a86a;\n  --color3: #c2907a;\n  --color4: #af7d6b;\n  --color5: #af694f;\n  --color6: #74412d;\n  --color7: #683725;\n  --color8: #502819;\n  --color9: #552917;\n  --color10: #572917;\n  --color11: #4b1e0e;\n\n  --main-color: var(--color6);\n  --low-color: var(--color3);\n  --high-color: var(--color8);\n  --deep-color: var(--color11);\n\n  --bg-color: #faf4eb;\n  --bg-color2: #f7e6ce;\n\n  --background-primary: var(--background-primary-bg-4-bt,#faf4eb);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#faf4eb);\n  --background-secondary: var(--background-secondary-bg-4-bt,#faf4eb);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#f7e6ce);\n\n  --background-modifier-border: #e1dfdf;\n\n  --accent-em: #099d4e;\n  --text-selection: #66bbaa59;\n\n  --accent-h: 17;\n  --accent-s: 44%;\n  --accent-l: 32%;\n  --interactive-accent-rgb: 116, 65, 45;\n\n  --strong-em-highlight-color: var(--color11);\n\n  --text-search-highlight-bg: #ffd1dd;\n  --search-result-file-matched-bg: var(--low-color);\n\n  --background-mobile-drawer-1: var(--bg-color);\n  --background-mobile-drawer-2: var(--bg-color);\n  --background-secondary-alt-bg-4-bt-publish: #f6f6f6;\n\n  --search-result-file-title-color: var(--main-color);\n  --background-blockquote: #b6b6b62c;\n  --background-code: #ebebeb71;\n  --background-code-2: #cccccc62;\n  --text-color-code: #e95d00;\n\n  --list-ul-block-color: var(--color5);\n  --list-ul-disc-color: var(--main-color);\n  --green-1: #3dc730;\n  --list-ul-hover: var(--low-color);\n  --list-ol-block-color: var(--main-color);\n  --list-ol-number-color: var(--main-color);\n  --list-ol-hover: var(--low-color);\n\n  --tag-text: #f8f8f8;\n  --stag1: #fa8787;\n  --stag1-bg: #eb2727;\n  --stag2: #fdbd5c;\n  --stag2-bg: #ee9002;\n  --stag3: #50ce3a;\n  --stag3-bg: #22ac09;\n  --tag1: var(--color3);\n  --tag2: var(--color4);\n  --tag3: var(--color5);\n  --tag4: var(--color6);\n  --tag5: var(--color7);\n\n  --tag-dailynote: var(--low-color);\n  --tag-dailynote-bg: var(--color3);\n  --tag-weeklynote: var(--color6);\n  --tag-weeklynote-bg: var(--color4);\n  --tag-questions: var(--color5);\n  --tag-questions-bg: var(--color5);\n  --tag-ideas: #ceb900;\n  --tag-ideas-bg: #444444d8;\n\n  --h1-color: var(--print-h1-color,var(--color7));\n  --h2-color: var(--print-h2-color,var(--color6));\n  --h3-color: var(--print-h3-color,var(--color5));\n  --h4-color: var(--print-h4-color,var(--color4));\n  --h5-color: var(--print-h5-color,var(--color3));\n  --h6-color: var(--print-h6-color,var(--color2));\n\n  /*graph*/\n  --graph-text-color: #696969;\n  --graph-tag: #77d425cc;\n  --graph-attach: #afcfe0cc;\n  --graph-circle: var(--color3);\n  --graph-line: #b1b1b1;\n  --graph-unresolved: #db4e4ecc;\n  --graph-arrow: #e25300;\n  --graph-control-bg: var(--bg-color);\n\n  /*mermaid*/\n  --mermaid-active-task-color: var(--high-color);\n  --mermaid-seq-dia-color: var(--low-color);\n\n  /*table*/\n  --table-background-color: var(--bg-color2);\n  --table-background-color-odd: var(--bg-color);\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: var(--color1);\n  --table-hover-raw-color: var(--color2);\n  --table-hover-color: var(--color1);\n  --table-hover-thead-color: var(--color2);\n\n  /*calendar*/\n  --calendar-week-color: var(--high-color);\n  --calendar-week-hover: var(--color1);\n  --calendar-week-background-color: var(--bg-color);\n  --calendar-today-background-color: var(--color1);\n\n  /*day planner*/\n  --day-planner-pie: var(--deep-color);\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: var(--low-color);\n  --day-planner-dot: var(--low-color);\n  --day-planner-item-hover: var(--color1);\n  --event-item-color1: var(--color2);\n  --event-item-color2: var(--color3);\n  --event-item-color3: var(--color4);\n  --event-item-color4: var(--color5);\n  --event-item-color5: var(--color6);\n  --event-item-color6: var(--color7);\n  --event-item-color7: var(--color8);\n  --event-item-color8: var(--color9);\n  --event-item-color9: var(--color10);\n  --event-item-color10: var(--color11);\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--deep-color);\n  --background-4-sliding-pane: var(--bg-color);\n\n  --color-view-header-gradient-1: var(--color1);\n  --color-view-header-gradient-2: var(--bg-color);\n\n  /*checkbox*/\n  --checkbox-color-0: var(--main-color);\n\n  --table-color-calendar-2: rgb(76, 52, 16);\n  --table-color-rgb: 76, 52, 16;\n}\n\nbody.color-scheme-options-chocolate-topaz.theme-dark {\n  /* 焦茶色 焦茶#6f4b3e */\n  --color1: #f8d3a0;\n  --color2: #d8a86a;\n  --color3: #c2907a;\n  --color4: #af7d6b;\n  --color5: #af694f;\n  --color6: #74412d;\n  --color7: #683725;\n  --color8: #502819;\n  --color9: #552917;\n  --color10: #572917;\n  --color11: #4b1e0e;\n\n  --main-color: var(--color6);\n  --low-color: var(--color3);\n  --high-color: var(--color7);\n  --deep-color: var(--color11);\n\n  /*黑暗颜色的背景不建议修改*/\n  --bg-color: #222222;\n  --bg-color2: #222222;\n\n  --background-primary: var(--background-primary-bg-4-bt,#222222);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#222222);\n  --background-secondary: var(--background-secondary-bg-4-bt,#222222);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#222222);\n\n  --background-modifier-border: #565656;/*一些线条颜色*/\n\n  --text-muted: #8a8a8a;/*muted 文字颜色*/\n  --text-faint: #797979;/*faint 文字颜色*/\n  --text-folder-file: #b3b3b3;/*文件夹、文件 文字颜色*/\n\n  --accent-em: #a4ca8e;/*斜体 文字颜色*/\n\n  --text-selection: #47a5914d;/*鼠标选择 文字背景颜色*/\n  --accent-h: 17;\n  --accent-s: 44%;\n  --accent-l: 32%;\n  --interactive-accent: var(--main-color); /*主题强调色*/\n  --interactive-accent-rgb: 116, 65, 45;/*主题强调色 rgb , 需与主题色一致（把上面的值转成rgb放下面）*/\n\n  --panel-border-color: #18191e;/*侧边栏、下部状态栏线条颜色，改了没有，线条被我取消了 :p*/\n  --search-text: #e0e0e0;/*搜索结果文字颜色*/\n  --folder-title: #ffffff;/*文件栏文件夹文字颜色*/\n\n  --strong-em-highlight-color: var(--color11);\n  --text-search-highlight-bg: #bb4361;\n  --strong-em-color-1: #43d3ff;/*加粗斜体渐变色1*/\n  --strong-em-color-2: #baaaff;/*加粗斜体渐变色2*/\n  --search-result-file-matched-bg: var(--color9);/* 搜索结果文字高亮颜色 */\n\n  --background-mobile-drawer-1: var(--bg-color);\n  --background-mobile-drawer-2: var(--bg-color);\n\n  --background-transparent-blue: #003e759a;/*用在kanban里的，可以不调*/\n  --scrollbar-thumb-bg: #8282827e;\n  --scrollbar-active-thumb-bg: #828282;\n\n  --search-result-file-title-color: var(--main-color);\n\n  --background-blockquote: #9191911c;/*引用框背景颜色*/\n  --background-code: #1111118c;/*代码框背景颜色*/\n  --background-code-2: #4c4c4cb0;\n  --text-color-code: #d58000;/*代码框文字颜色*/\n\n  --list-ul-block-color: var(--color6);\n  --list-ul-disc-color: var(--main-color);\n  --green-1: #3dc730;\n  --list-ul-hover: var(--low-color);\n  --list-ol-block-color: var(--main-color);\n  --list-ol-number-color: var(--main-color);\n  --list-ol-hover: var(--low-color);\n\n  --tag-text: #e4e4e4;\n  --stag1: #f08383;\n  --stag1-bg: #bd1919;\n  --stag2: #e7b263;\n  --stag2-bg: #ac6700;\n  --stag3: #77df89;\n  --stag3-bg: #058c1c;\n\n  --tag1: var(--color11);\n  --tag2: var(--color10);\n  --tag3: var(--color9);\n  --tag4: var(--color8);\n  --tag5: var(--color7);\n\n  --tag-dailynote: var(--mian-color);\n  --tag-dailynote-bg: var(--color5);\n  --tag-weeklynote: var(--color3);\n  --tag-weeklynote-bg: var(--color6);\n  --tag-questions: var(--color8);\n  --tag-questions-bg: var(--color8);\n  --tag-ideas: #fcfcc0;\n  --tag-ideas-bg: #565656d8;\n\n  --h1-color: var(--print-h1-color,var(--color2));\n  --h2-color: var(--print-h2-color,var(--color3));\n  --h3-color: var(--print-h3-color,var(--color4));\n  --h4-color: var(--print-h4-color,var(--color5));\n  --h5-color: var(--print-h5-color,var(--color6));\n  --h6-color: var(--print-h6-color,var(--color7));\n\n  /*graph*/\n  --graph-text-color: #B5B5B5;\n  --graph-tag: #88d842bb;\n  --graph-attach: #b2cfe0bb;\n  --graph-circle: var(--color8);\n  --graph-line: #8c8c8c;\n  --graph-unresolved: #f08080de;\n  --graph-arrow: #c23917;\n  --graph-control-bg: #00000080;\n\n  /*mermaid*/\n  --mermaid-active-task-color: var(--low-color);\n  --mermaid-seq-dia-color: var(--high-color);\n\n  /*table*/\n  --table-background-color: var(--bg-color2);\n  --table-background-color-odd: var(--bg-color);\n  --table-border-color: #878787;\n  --table-thead-background-color:  var(--color11);\n  --table-hover-raw-color: var(--color10);\n  --table-hover-color: var(--color11);;\n  --table-hover-thead-color:  var(--color10);\n\n  /*calendar*/\n  --calendar-week-color: var(--high-color);\n  --calendar-week-hover: var(--color1);\n  --calendar-week-background-color: var(--bg-color);\n  --calendar-today-background-color: var(--color1);\n\n  /*day planner*/\n  --day-planner-pie: var(--color1);\n  --day-planner-timeline: #000000;\n  --day-planner-line: var(--low-color);\n  --day-planner-dot: var(--low-color);\n  --day-planner-item-hover: var(--main-color);\n  --event-item-color1: var(--color2);\n  --event-item-color2: var(--color3);\n  --event-item-color3: var(--color4);\n  --event-item-color4: var(--color5);\n  --event-item-color5: var(--color6);\n  --event-item-color6: var(--color7);\n  --event-item-color7: var(--color8);\n  --event-item-color8: var(--color9);\n  --event-item-color9: var(--color10);\n  --event-item-color10: var(--color11);\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--color1);\n  --background-4-sliding-panel: #252525ed;/* sliding panes 背景颜色 */\n\n  --color-view-header-gradient-1: var(--bg-color2);\n  --color-view-header-gradient-2: var(--bg-color);\n\n  /*checkbox*/\n  --checkbox-color-0: var(--main-color);\n\n  --table-color-calendar-2: rgb(70, 45, 6);\n  --table-color-rgb: 70, 45, 6;\n}\n\nbody.color-scheme-options-chocolate-topaz #calendar-container {\n  --color-background-heading: transparent;\n  --color-background-weeknum: transparent;\n  --color-background-day: transparent;\n  --color-background-weekend: transparent;\n\n  --color-tr: var(--bg-color) !important;\n  --color-tr-odd: #ffdece !important;\n\n  --color-dot: var(--text-accent);\n  --color-arrow: currentColor;\n  --color-button: var(--text-muted);\n  --color-text-weeknum: var(--calendar-week-color);\n\n  --color-text-title: var(--text-normal);\n  --color-text-heading: var(--text-normal);\n  --color-text-day: var(--text-normal);\n  --color-text-today: var(--text-accent);\n\n  /*===*/\n  padding: 0px 5px 0px 8px;\n  margin: -21px -8px 0px -8px;\n  line-height: 0.6;\n}\n\nbody.color-scheme-options-autumn-topaz .theme-light,\nbody.color-scheme-options-autumn-topaz.theme-light {\n  /*色系设置*/\n  --color1: #ebe1cc;\n  --color2: #e4ca8f;\n  --color3: #e6bf66 ;\n  --color4: #fab102;\n  --color5: #b6af00;\n  --color6: #70a600;\n  --color7: #00992c;\n  --color8: #00884a;\n  --color9: #007562;\n  --color10: #006674;\n  --color11: #2f4858;\n\n  /*Lillian: 第三步：把上面的色系，粘贴到dark模式下*/\n  --main-color: var(--color6);\n  --low-color: var(--color4);\n  --high-color: var(--color7);\n  --deep-color:var(--color11);\n\n  --bg-color:#fafaf3;\n  --bg-color2:#bbddcd;\n\n  --background-primary: var(--background-primary-bg-4-bt,#fafaf3);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#fafaf3);\n  --background-secondary: var(--background-secondary-bg-4-bt,#fafaf3);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#bbddcd);\n  --accent-h: 80;\n  --accent-s: 100%;\n  --accent-l: 33%;\n  --interactive-accent-rgb: 112, 166, 0;\n\n  --strong-em-highlight-color: var(--color11);\n  --text-search-highlight-bg: #ffd1dd;\n  --search-result-file-matched-bg: var(--low-color);\n\n  --background-mobile-drawer-1:  var(--bg-color);\n  --background-mobile-drawer-2:  var(--bg-color);\n\n  --search-result-file-title-color: var(--main-color);\n\n  --list-ul-block-color: var(--color5);\n  --list-ul-disc-color: var(--main-color);\n  --green-1: #3dc730;\n  --list-ul-hover: var(--low-color);\n  --list-ol-block-color: var(--main-color);\n  --list-ol-number-color: var(--main-color);\n  --list-ol-hover: var(--low-color);\n\n  --tag1: var(--color3);\n  --tag2: var(--color4);\n  --tag3: var(--color5);\n  --tag4: var(--color6);\n  --tag5: var(--color7);\n\n  --tag-dailynote: var(--low-color);\n  --tag-dailynote-bg: var(--color3);\n  --tag-weeklynote: var(--color6);\n  --tag-weeklynote-bg: var(--color4);\n  --tag-questions: var(--color5);\n  --tag-questions-bg: var(--color5);\n\n  --h1-color: var(--print-h1-color,var(--color9));\n  --h2-color: var(--print-h2-color,var(--color8));\n  --h3-color: var(--print-h3-color,var(--color7));\n  --h4-color: var(--print-h4-color,var(--color6));\n  --h5-color: var(--print-h5-color,var(--color5));\n  --h6-color: var(--print-h6-color,var(--color4));\n\n  /*graph*/\n  --graph-circle:  var(--color3);\n  --graph-control-bg: var(--bg-color);\n\n  /*mermaid*/\n  --mermaid-active-task-color: var(--high-color);\n  --mermaid-seq-dia-color: var(--low-color);\n\n  /*table*/\n  --table-background-color: var(--bg-color2);\n  --table-background-color-odd: var(--bg-color);\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: var(--color1);\n  --table-hover-raw-color: var(--color2);\n  --table-hover-color: var(--color1);\n  --table-hover-thead-color: var(--color2);\n\n  /*calendar*/\n  --calendar-week-color: var(--high-color);\n  --calendar-week-hover: var(--color1);\n  --calendar-week-background-color: var(--bg-color);\n  --calendar-today-background-color: var(--color1);\n\n  /*day planner*/\n  --day-planner-pie: var(--deep-color);\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: var(--low-color);\n  --day-planner-dot: var(--low-color);\n  --day-planner-item-hover: var(--color1);\n  --event-item-color1: var(--color2);\n  --event-item-color2: var(--color3);\n  --event-item-color3: var(--color4);\n  --event-item-color4: var(--color5);\n  --event-item-color5: var(--color6);\n  --event-item-color6: var(--color7);\n  --event-item-color7: var(--color8);\n  --event-item-color8: var(--color9);\n  --event-item-color9: var(--color10);\n  --event-item-color10:var(--color11);\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--deep-color);\n  --background-4-sliding-pane: var(--bg-color);\n\n  --color-view-header-gradient-1: #70a60085;\n  --color-view-header-gradient-2: var(--bg-color);\n\n  /*checkbox*/\n  --checkbox-color-0: var(--main-color);\n\n  --table-color-calendar-2: rgb(222, 236, 182);\n  --table-color-rgb: 222, 236, 182;\n}\n\n\nbody.color-scheme-options-autumn-topaz.theme-dark {\n  /* 黄绿*/\n  --color1: #ebe1cc;\n  --color2: #e4ca8f;\n  --color3: #e6bf66 ;\n  --color4: #fab102;\n  --color5: #b6af00;\n  --color6: #70a600;\n  --color7: #00992c;\n  --color8: #00884a;\n  --color9: #007562;\n  --color10: #006674;\n  --color11: #2f4858;\n\n  --main-color: var(--color6);\n  --low-color: var(--color3);\n  --high-color: var(--color7);\n  --deep-color:var(--color11);\n\n  --bg-color:#222222;\n  --bg-color2:#444444;\n\n  --background-primary: var(--background-primary-bg-4-bt,#222222);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#222222);\n  --background-secondary: var(--background-secondary-bg-4-bt,#222222);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#444444);\n\n  --text-muted: #8a8a8a;  /*muted 文字颜色*/\n  --text-faint: #797979;  /*faint 文字颜色*/\n  --text-folder-file: #b3b3b3; /*文件夹、文件 文字颜色*/\n  --accent-strong: #f7f7f7; /*加粗 文字颜色*/\n  --accent-em: #a4ca8e; /*斜体 文字颜色*/\n\n  --text-selection: #47a5914d;  /*鼠标选择 文字背景颜色*/\n\n  --interactive-accent: var(--main-color); /*主题强调色*/\n  --interactive-accent-rgb: 104, 56, 39; /*主题强调色 rgb , 需与主题色一致（把上面的值转成rgb放下面）*/\n\n  --strong-em-highlight-color: var(--color11);\n\n  --search-result-file-matched-bg: var(--color9); /* 搜索结果文字高亮颜色 */\n\n  --background-mobile-drawer-1:  var(--bg-color);\n  --background-mobile-drawer-2:  var(--bg-color);\n\n  --search-result-file-title-color: var(--main-color);\n\n  --list-ul-block-color: var(--color6);\n  --list-ul-disc-color: var(--main-color);\n  --green-1: #3dc730;\n  --list-ul-hover: var(--low-color);\n  --list-ol-block-color: var(--main-color);\n  --list-ol-number-color: var(--main-color);\n  --list-ol-hover: var(--low-color);\n\n  --tag1: var(--color11);\n  --tag2: var(--color10);\n  --tag3: var(--color9);\n  --tag4: var(--color8);\n  --tag5: var(--color7);\n  --tag-dailynote: var(--mian-color);\n  --tag-dailynote-bg: var(--color5);\n  --tag-weeklynote: var(--color3);\n  --tag-weeklynote-bg: var(--color6);\n  --tag-questions: var(--color8);\n  --tag-questions-bg: var(--color8);\n  --tag-ideas: #fcfcc0;\n  --tag-ideas-bg: #565656d8;\n\n  --h1-color: var(--print-h1-color,var(--color4));\n  --h2-color: var(--print-h2-color,var(--color5));\n  --h3-color: var(--print-h3-color,var(--color6));\n  --h4-color: var(--print-h4-color,var(--color7));\n  --h5-color: var(--print-h5-color,var(--color8));\n  --h6-color: var(--print-h6-color,var(--color9));\n\n  --graph-text-color: #B5B5B5;  /*图谱文字颜色*/\n  --graph-tag: #88d842bb; /*图谱线颜色*/\n  --graph-attach: #b2cfe0bb; /*图谱附件颜色*/\n  --graph-circle: var(--color8); /*图谱普通点颜色*/\n  --graph-line: #8c8c8c;  /*图谱线颜色*/\n  --graph-unresolved: #f08080de; /*图谱未创建点颜色，兼未创建双链颜色*/\n  --graph-arrow: #c23917; /*图谱箭头颜色*/\n  --graph-control-bg: #00000080; /*图谱控制窗背景颜色*/\n\n  /*mermaid*/\n  --mermaid-active-task-color: var(--low-color);\n  --mermaid-seq-dia-color: var(--high-color);\n\n  /*table*/\n  --table-background-color: var(--bg-color2);\n  --table-background-color-odd: var(--bg-color);\n  --table-border-color: #878787;\n  --table-thead-background-color:  var(--color11);\n  --table-hover-raw-color: var(--color10);\n  --table-hover-color: var(--color11);;\n  --table-hover-thead-color:  var(--color10);\n\n  /*calendar*/\n  --calendar-week-color: var(--high-color);\n  --calendar-week-hover: var(--color1);\n  --calendar-week-background-color: var(--bg-color);\n  --calendar-today-background-color: var(--color1);\n\n  /*day planner*/\n  --day-planner-pie: var(--color1);\n  --day-planner-timeline: #000000;\n  --day-planner-line: var(--low-color);\n  --day-planner-dot: var(--low-color);\n  --day-planner-item-hover: var(--main-color);\n  --event-item-color1: var(--color2);\n  --event-item-color2: var(--color3);\n  --event-item-color3: var(--color4);\n  --event-item-color4: var(--color5);\n  --event-item-color5: var(--color6);\n  --event-item-color6: var(--color7);\n  --event-item-color7: var(--color8);\n  --event-item-color8: var(--color9);\n  --event-item-color9: var(--color10);\n  --event-item-color10:var(--color11);\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--color1);\n\n  --checklist-bg-hover: #08080896;\n\n  --color-view-header-gradient-1: var(--bg-color2);\n  --color-view-header-gradient-2: var(--bg-color);\n\n  /*checkbox*/\n  --checkbox-color-0: var(--main-color);\n\n  --table-color-calendar-2: rgb(81, 165, 39);\n  --table-color-rgb: 81, 165, 39;\n}\n\nbody.color-scheme-options-autumn-topaz #calendar-container {\n  --color-background-heading: transparent;\n  --color-background-weeknum: transparent;\n  --color-background-day: transparent;\n  --color-background-weekend: transparent;\n\n  --color-tr: var(--bg-color) !important;\n  --color-tr-odd: #ffdece !important;\n\n  --color-dot: var(--text-accent);\n  --color-arrow: currentColor;\n  --color-button: var(--text-muted);\n  --color-text-weeknum: var(--calendar-week-color);\n\n  --color-text-title: var(--text-normal);\n  --color-text-heading: var(--text-normal);\n  --color-text-day: var(--text-normal);\n  --color-text-today: var(--text-accent);\n\n  padding: 0px 5px 0px 8px;\n  margin: -21px -8px 0px -8px;\n  line-height: 0.6;\n}\n\nbody.color-scheme-options-lillimon-topaz .theme-light,\nbody.color-scheme-options-lillimon-topaz.theme-light {\n  /*魔方浅色*/\n  /*色系设置*/\n  --magic-low-color: #e0e79a;\n  --magic-main-color: var(--theme-color);\n  --magic-deep-color: #746909;\n  --accent-h: 66;\n  --accent-s: 96%;\n  --accent-l: 33%;\n  --bg-color: #f8f8f5;\n  --bg-color2: #e7e7e4;\n\n  /*色系共 5 个值，3个主题色+2个背景色*/\n  --color1: var(--magic-low-color);\n  --color2: var(--magic-low-color);\n  --color3: var(--magic-low-color);\n  --color4: var(--magic-low-color);\n  --color5: var(--magic-main-color);\n  --color6: var(--magic-main-color);\n  --color7: var(--magic-main-color);\n  --color8: var(--magic-main-color);\n  --color9: var(--magic-deep-color);\n  --color10: var(--magic-deep-color);\n  --color11: var(--magic-deep-color);\n\n  --high-color: var(--color8);\n\n  /*色系设置结束*/\n  --background-primary: var(--background-primary-bg-4-bt,#f8f8f5);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#f8f8f5);\n  --background-secondary: var(--background-secondary-bg-4-bt,#f8f8f5);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#e7e7e4);\n\n  --text-normal:var(--magic-main-color);\n  --interactive-accent-rgb: 215, 178, 88;\n\n  --strong-em-highlight-color: var(--color11);\n\n  --search-result-file-matched-bg: var(--magic-low-color);\n\n  --background-mobile-drawer-1: var(--bg-color);\n  --background-mobile-drawer-2: var(--bg-color);\n\n  --search-result-file-title-color: var(--magic-main-color);\n\n  --list-ul-block-color: var(--color5);\n  --list-ul-disc-color: var(--magic-main-color);\n  --green-1: #3dc730;\n  --list-ul-hover: var(--magic-low-color);\n  --list-ol-block-color: var(--magic-main-color);\n  --list-ol-number-color: var(--magic-main-color);\n  --list-ol-hover: var(--magic-low-color);\n\n  --tag-dailynote: var(--magic-low-color);\n  --tag-dailynote-bg: var(--color10);\n  --tag-weeklynote: var(--color6);\n  --tag-weeklynote-bg: var(--color10);\n  --tag-questions: var(--color5);\n  --tag-questions-bg: var(--color5);\n  --tag-ideas: #ceb900;\n  --tag-ideas-bg: #444444d8;\n\n  --tag1: var(--color3);\n  --tag2: var(--color4);\n  --tag3: var(--color5);\n  --tag4: var(--color6);\n  --tag5: var(--color7);\n\n  --h1-color: var(--print-h1-color,var(--color9));\n  --h2-color: var(--print-h2-color,var(--color8));\n  --h3-color: var(--print-h3-color,var(--color7));\n  --h4-color: var(--print-h4-color,var(--color6));\n  --h5-color: var(--print-h5-color,var(--color5));\n  --h6-color: var(--print-h6-color,var(--color4));\n\n  /*graph*/\n  --graph-circle: var(--color3);\n  --graph-control-bg: var(--bg-color);\n\n  /*mermaid*/\n  --mermaid-active-task-color: var(--high-color);\n  --mermaid-seq-dia-color: var(--magic-low-color);\n\n  /*table*/\n  --table-background-color: var(--bg-color2);\n  --table-background-color-odd: var(--bg-color);\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: var(--color1);\n  --table-hover-raw-color: var(--color2);\n  --table-hover-color: var(--color1);\n  --table-hover-thead-color: var(--color2);\n\n  /*calendar*/\n  --calendar-week-color: var(--high-color);\n  --calendar-week-hover: var(--color1);\n  --calendar-week-background-color: var(--bg-color);\n  --calendar-today-background-color: var(--color1);\n\n  /*day planner*/\n  --day-planner-pie: var(--magic-deep-color);\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: var(--magic-low-color);\n  --day-planner-dot: var(--magic-low-color);\n  --day-planner-item-hover: var(--color1);\n  --event-item-color1: var(--color2);\n  --event-item-color2: var(--color3);\n  --event-item-color3: var(--color4);\n  --event-item-color4: var(--color5);\n  --event-item-color5: var(--color6);\n  --event-item-color6: var(--color7);\n  --event-item-color7: var(--color8);\n  --event-item-color8: var(--color9);\n  --event-item-color9: var(--color10);\n  --event-item-color10: var(--color11);\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--magic-deep-color);\n  --background-4-sliding-pane: var(--bg-color);\n\n  --color-view-header-gradient-1: var(--color1);\n  --color-view-header-gradient-2: var(--bg-color);\n\n  /*checkbox*/\n  --checkbox-color-0: var(--magic-main-color);\n}\n\n\nbody.color-scheme-options-lillimon-topaz.theme-dark {\n  /*魔方深色*/\n  /*魔方*/\n  --magic-low-color: #e0e79a;\n  --magic-main-color: #95a503;\n  --magic-deep-color: #746909;\n  --accent-h: 66;\n  --accent-s: 96%;\n  --accent-l: 33%;\n  --bg-color: #222222;\n  --bg-color2: #333333;\n\n  --color1: var(--magic-low-color);\n  --color2: var(--magic-low-color);\n  --color3: var(--magic-low-color);\n  --color4: var(--magic-low-color);\n  --color5: var(--magic-main-color);\n  --color6: var(--magic-main-color);\n  --color7: var(--magic-main-color);\n  --color8: var(--magic-main-color);\n  --color9: var(--magic-deep-color);\n  --color10: var(--magic-deep-color);\n  --color11: var(--magic-deep-color);\n  --high-color: var(--color8);\n  /*主题色设置结束**/\n\n  --background-primary: var(--background-primary-bg-4-bt,#222222);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#222222);\n  --background-secondary: var(--background-secondary-bg-4-bt,#222222);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#333333);\n\n  --interactive-accent-rgb: 58, 91, 82;\n\n  --strong-em-highlight-color: var(--color11);\n\n  --search-result-file-matched-bg: var(--high-color);\n  /* 搜索结果文字高亮颜色 */\n\n  --background-mobile-drawer-1: var(--bg-color);\n  --background-mobile-drawer-2: var(--bg-color);\n\n  --search-result-file-title-color: var(--magic-main-color);\n\n  --list-ul-block-color: var(--color6);\n  --list-ul-disc-color: var(--magic-main-color);\n  --green-1: #3dc730;\n  --list-ul-hover: var(--magic-low-color);\n  --list-ol-block-color: var(--magic-main-color);\n  --list-ol-number-color: var(--magic-main-color);\n  --list-ol-hover: var(--magic-low-color);\n\n  --tag1: var(--color11);\n  --tag2: var(--color10);\n  --tag3: var(--color9);\n  --tag4: var(--color8);\n  --tag5: var(--color7);\n\n  --tag-dailynote: var(--mian-color);\n  --tag-dailynote-bg: var(--color5);\n  --tag-weeklynote: var(--color3);\n  --tag-weeklynote-bg: var(--color6);\n  --tag-questions: var(--color8);\n  --tag-questions-bg: var(--color8);\n  --tag-ideas: #fcfcc0;\n  --tag-ideas-bg: #565656d8;\n\n  --h1-color: var(--print-h1-color,var(--color4));\n  --h2-color: var(--print-h2-color,var(--color5));\n  --h3-color: var(--print-h3-color,var(--color6));\n  --h4-color: var(--print-h4-color,var(--color7));\n  --h5-color: var(--print-h5-color,var(--color8));\n  --h6-color: var(--print-h6-color,var(--color9));\n\n  --graph-circle: var(--color8);\n  /*图谱普通点颜色*/\n\n  /*mermaid*/\n  --mermaid-active-task-color: var(--magic-low-color);\n  --mermaid-seq-dia-color: var(--high-color);\n\n  /*table*/\n  --table-background-color: var(--bg-color2);\n  --table-background-color-odd: var(--bg-color);\n  --table-border-color: #878787;\n  --table-thead-background-color: var(--color11);\n  --table-hover-raw-color: var(--color10);\n  --table-hover-color: var(--color11);\n  --table-hover-thead-color: var(--color10);\n\n  /*calendar*/\n  --calendar-week-color: var(--high-color);\n  --calendar-week-hover: var(--color1);\n  --calendar-week-background-color: var(--bg-color);\n  --calendar-today-background-color: var(--color1);\n\n  /*day planner*/\n  --day-planner-pie: var(--color1);\n  --day-planner-timeline: #000000;\n  --day-planner-line: var(--magic-low-color);\n  --day-planner-dot: var(--magic-low-color);\n  --day-planner-item-hover: var(--magic-main-color);\n  --event-item-color1: var(--color2);\n  --event-item-color2: var(--color3);\n  --event-item-color3: var(--color4);\n  --event-item-color4: var(--color5);\n  --event-item-color5: var(--color6);\n  --event-item-color6: var(--color7);\n  --event-item-color7: var(--color8);\n  --event-item-color8: var(--color9);\n  --event-item-color9: var(--color10);\n  --event-item-color10: var(--color11);\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--color1);\n\n  --color-view-header-gradient-1: var(--bg-color2);\n  --color-view-header-gradient-2: var(--bg-color);\n\n  /*checkbox*/\n  --checkbox-color-0: var(--magic-main-color);\n}\n\nbody.color-scheme-options-lillimon-topaz #calendar-container {\n  --color-background-heading: transparent;\n  --color-background-weeknum: transparent;\n  --color-background-day: transparent;\n  --color-background-weekend: transparent;\n\n  --color-tr: var(--bg-color) !important;\n  --color-tr-odd: #ffdece !important;\n\n  --color-dot: var(--text-accent);\n  --color-arrow: currentColor;\n  --color-button: var(--text-muted);\n  --color-text-weeknum: var(--calendar-week-color);\n\n  --color-text-title: var(--text-normal);\n  --color-text-heading: var(--text-normal);\n  --color-text-day: var(--text-normal);\n  --color-text-today: var(--text-accent);\n\n  padding: 0px 5px 0px 8px;\n  margin: -21px -8px 0px -8px;\n  line-height: 0.6;\n}\n/*=================== Lillian 的配色 end  ========================*/\n\n/*========== awyugan 的 配色 =========*/\nbody.color-scheme-options-lilac .theme-light,\nbody.color-scheme-options-lilac.theme-light {\n  --background-primary: var(--background-primary-bg-4-bt,#d7c4f2);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e8dffa);\n  --background-secondary: var(--background-secondary-bg-4-bt,#e1cefa);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#d7c4f2);\n\n  --background-modifier-border: #af9dd1;\n  --background-modifier-success: #d7a4e7;\n\n  --text-normal: #0e0e0e;\n  --text-muted: #ab7ecf;\n  --text-faint: #a23ac2;\n  --accent-em: #620ac6;\n  --text-selection: #8b66bb59;\n\n  --interactive-normal: #eaeaeb;\n  --interactive-hover: #d1b6f0;\n\n  --interactive-accent-rgb: 195, 144, 230;/*工作区旁边的线*/\n  --accent-h: 266;\n  --accent-s: 62%;\n  --accent-l: 72%;\n  --strong-em-highlight-color: #7908ae;\n  --text-highlight-bg-h: 273;\n  --text-highlight-bg-s: 65%;\n  --text-highlight-bg-l: 75%;\n  --text-highlight-bg-a: 0.706;\n  --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a));\n  --text-search-highlight-bg: #d1d2ff;\n  --strong-em-color-1: #5008ae;\n  --strong-em-color-2: #2e0153;\n  --search-result-file-matched-bg: #ffc3c3;\n\n  --background-mobile-drawer-1: #ffffff;\n  --background-mobile-drawer-2: #ffffffa1;\n\n  --background-secondary-alt-bg-4-bt-publish: #e1d5eb61;\n\n  --scrollbar-thumb-bg: #aa7dd3a8;\n  --scrollbar-active-thumb-bg: #aa7dd3;\n\n  --search-result-file-title-color: #5a10a0;\n\n  --background-blockquote: #b6b6b62c;\n\n  --internal-link-color: #6203a2;\n\n  --list-ul: #ffffff;\n  --list-ul-block-color: #7f1bb9;\n  --list-ul-disc-color: #d955f3;\n  --list-ul-hover: #ba2fdd;\n  --list-ol-block-color: #7835a5;\n  --list-ol-number-color: #85429a;\n  --list-ol-hover: #9231b8;\n\n  --green-1: #9c30c7;\n\n  --tag-text: #d2a3d4;\n  --stag1: #fa8787;\n  --stag1-bg: #eb2727;\n  --stag2: #fdbd5c;\n  --stag2-bg: #ee9002;\n  --stag3: #50ce3a;\n  --stag3-bg: #22ac09;\n\n  --tag1: #2b85ce;\n  --tag2: #29b325;\n  --tag3: #20b9ce;\n  --tag4: #dfd331;\n  --tag5: #bbbbbb;\n\n  --tag-dailynote: #0077ff;\n  --tag-dailynote-bg: #277CDD;\n  --tag-weeklynote: #4b9fff;\n  --tag-weeklynote-bg: #6aafff;\n  --tag-questions: #b68fff;\n  --tag-questions-bg: #b085ff;\n  --tag-ideas: #ceb900;\n  --tag-ideas-bg: #444444d8;\n\n  --h1-color: var(--print-h1-color, #6F6493);\n  --h2-color: var(--print-h2-color, #724681);\n  --h3-color: var(--print-h3-color, #330349);\n  --h4-color: var(--print-h4-color, #2d1445);\n  --h5-color: var(--print-h5-color, #300e47);\n  --h6-color: var(--print-h6-color, #331945);\n\n  /*graph*/\n  --graph-text-color: #696969;\n  --graph-tag: #da9ee2cc;\n  --graph-attach: #88b0d6cc;\n  --graph-circle: #ac6fbfcc;\n  --graph-line: #b1b1b1;\n  --graph-unresolved: #db4e4ecc;\n  --graph-arrow: #e25300;\n  --graph-control-bg: #ffffff9a;\n\n  /*mermaid*/\n  --mermaid-active-task-color: #44bbff;\n  --mermaid-seq-dia-color: #76c8ff;\n\n  /*table*/\n  --table-background-color: #efe0f1;\n  --table-background-color-odd: #ffffffaf;\n  --table-border-color: #7d7d7d;\n  --table-thead-background-color: #d4a7e6c7;\n  --table-hover-raw-color: #c485ee2f;\n  --table-hover-color: #a75dec34;\n  --table-hover-thead-color: #edddff;\n\n  /*calendar*/\n  --calendar-week-color: #8b32b4;\n  --calendar-week-hover: #f9e3ff;\n  --calendar-week-background-color: #d4bfe6;\n  --calendar-today-background-color: #c2aaee;\n  --color-text-weeknum: #8b32b4;\n\n  /*day planner 改为相应色系*/\n  --day-planner-pie: #eca95c;\n  --day-planner-timeline: #d62f2f;\n  --day-planner-line: #d0aee6;\n  --day-planner-dot: #d0aee6;\n  --day-planner-item-hover: #d0aee6;\n\n  --event-item-color1: #e6e0f1;\n  --event-item-color2: #d4cae5;\n  --event-item-color3: #c2b4d9;\n  --event-item-color4: #b09fcd;\n  --event-item-color5: #9f8ac1;\n  --event-item-color6: #9078b6;\n  --event-item-color7: #8066ac;\n  --event-item-color8: #7154a1;\n  --event-item-color9: #604195;\n  --event-item-color10: #4f2d89;\n  --event-item-color11: #3c197c;\n  --event-item-color12: #280070;\n\n  /* stickies */\n  --stickies-color-1: #b8b3e2;\n  --stickies-color-2: #e9c6f1;\n  --tape-color: #acacac65;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: #2c0240;\n  --background-4-sliding-pane: #ffffffef;\n\n  --color-view-header-gradient-1: #efe0f1ef; /*标题上的颜色*/\n  --color-view-header-gradient-2: #e1c9f1ef;\n\n  /*checkbox*/\n  --checkbox-color-0: var(--text-accent);\n  --checkbox-color-1: #e0dd2a;\n  --checkbox-color-2: #4077bf;\n  --checkbox-color-3: #ffe9e9;\n  --checkbox-color-4: #fffbd4;\n  --checkbox-color-5: #ad7fbf;\n  --checkbox-color-6: #a3a1a1;\n  --text-checked-checkbox: #9b9b9b;\n\n  --interactive-hover: #dbdbdc;\n\n  --table-color-calendar-2: rgb(211, 161, 247);\n  --table-color-rgb: 211, 161, 247;\n\n  --divider-color: #d7c4f2;\n  --tab-stacked-shadow: #c69fd5;\n}\n\n\nbody.color-scheme-options-lilac.theme-dark {\n  --bg-color: #462058;\n  --bg-color2: #b276c4;\n\n  --background-primary: var(--background-primary-bg-4-bt,#462058);\n  --background-primary-alt: var(--background-primary-alt-bg-4-bt,#b276c4);\n  --background-secondary: var(--background-secondary-bg-4-bt,#462058);\n  --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#462058);\n\n  --background-modifier-border: #947676;\n\n  --text-normal: #c9b8e9;\n\n  --text-muted: #c46ec4;\n  --text-faint: #b932e2;\n  --text-folder-file: #b3b3b3;\n\n  --accent-em: #ca91d8;\n  --accent-h: 300;\n  --accent-s: 53%;\n  --accent-l: 47%;\n  --interactive-normal: #20242b;\n  --interactive-hover: #353b47;\n\n  --interactive-accent-rgb: 128, 50, 159;\n\n  --strong-em-highlight-color: #9c8ce6;\n\n  --text-highlight-bg-h: 286;\n  --text-highlight-bg-s: 40%;\n  --text-highlight-bg-l: 38%;\n  --text-highlight-bg-a: 0.541;\n  --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a));\n  --text-search-highlight-bg: #bb4361;\n  --strong-em-color-1: #9c8ce6;\n  --strong-em-color-2: #23d05c;\n\n  --background-mobile-drawer-1: #1b1b1b;\n  --background-mobile-drawer-2: #1b1b1b69;\n  --background-transparent-blue: #003e759a;\n\n  --scrollbar-thumb-bg: #603a8199;\n  --scrollbar-active-thumb-bg: #603a81;\n\n  --search-result-file-title-color: #a75ac6;\n\n  --background-blockquote: #9191911c;\n  --background-code: #1111118c;\n  --background-code-2: #4c4c4cb0;\n  --text-color-code: #d58000;\n\n  --internal-link-color: #a360da;\n\n  --list-ul: #f1a8f8;\n  --list-ul-block-color: #e142d9a9;\n  --list-ul-disc-color: #ae63eb;\n  --green-1: #8442c1;\n  --list-ul-hover: #9715e2de;\n  --list-ol-block-color: #9826bbb4;\n  --list-ol-number-color: #b595c4;\n  --list-ol-hover: #ba2cd6;\n\n  --tag-text: #e4e4e4;\n  --stag1: #f08383;\n  --stag1-bg: #bd1919;\n  --stag2: #e7b263;\n  --stag2-bg: #ac6700;\n  --stag3: #77df89;\n  --stag3-bg: #058c1c;\n  --tag1: #2b85ce;\n  --tag2: #29b325;\n  --tag3: #20b9ce;\n  --tag4: #dfd331;\n  --tag5: #bbbbbb;\n\n  --h1-color: var(--print-h1-color, #bc7ad4);\n  --h2-color: var(--print-h2-color, #8d26ac);\n  --h3-color: var(--print-h3-color, #9642af);\n  --h4-color: var(--print-h4-color, #d496f8);\n  --h5-color: var(--print-h5-color, #a192f7);\n  --h6-color: var(--print-h6-color, #c675f5);\n\n  /*graph*/\n  --graph-tag: #b992ddbb;\n  --graph-attach: #76c1f0bb;\n  --graph-circle: #8f70a1bb;\n  --graph-line: #8c8c8c;\n  --graph-unresolved: #c3afdade;\n\n  /*mermaid*/\n  --mermaid-active-task-color: #187ef1;\n  --mermaid-seq-dia-color: #1371be;\n\n  /*table*/\n  --table-background-color: #58266e;\n  --table-background-color-odd: #0000001c;\n  --table-border-color: #ac9494;\n  --table-thead-background-color: #4332ddc2;\n  --table-hover-raw-color: #08569a21;\n  --table-hover-color: #4125a5a1;\n  --table-hover-thead-color: #5f298cc7;\n\n  /*calendar*/\n  --calendar-week-color: #c194df;\n  --calendar-week-hover: #705c81;\n  --calendar-week-background-color: #683270;\n  --calendar-today-background-color: #e01313;\n\n  /*day planner 改为相应色系*/\n  --day-planner-pie: #eca95c;\n  --day-planner-timeline: #9231b8;\n  --day-planner-line: #8b36b3;\n  --day-planner-dot: #8b36b3;\n  --day-planner-item-hover: #8b36b3;\n  --event-item-color1: #c79cdb;\n  --event-item-color2: #b67fd1;\n  --event-item-color4: #9646bc;\n  --event-item-color3: #a662c6;\n  --event-item-color5: #8b3fae;\n  --event-item-color6: #7f3aa0;\n  --event-item-color7: #683083;\n  --event-item-color8: #592672;\n  --event-item-color9: #371945;\n  --event-item-color10:#351544;\n\n  /* stickies */\n  --stickies-color-1: #683083;\n  --stickies-color-2: #823a92;\n  --tape-color: #99999967;\n\n  /*Sliding panes*/\n  --sliding-panes-header-color: var(--h2-color);\n  --background-4-sliding-pane: #252525ed;\n\n  --color-view-header-gradient-1: #330c46de;\n  --color-view-header-gradient-2: #002900c0;\n\n  /*checkbox*/\n  --checkbox-color-0: var(--text-accent);\n  --checkbox-color-1: #dbd821;\n  --checkbox-color-2: #1061ac;\n  --checkbox-color-3: #ffd1d1;\n  --checkbox-color-4: #625d4c;\n  --checkbox-color-5: #9a67ae;\n  --checkbox-color-6: #5f5f5f;\n  --text-checked-checkbox: #b9b8b8;\n\n  --interactive-hover: #dbdbdc;\n\n  --table-color-calendar-2: rgb(98, 36, 143);\n  --table-color-rgb: 98, 36, 143;\n\n  --tab-stacked-shadow: #240a2e;\n}\n\n/*分割工作区的线透明*/\nbody.color-scheme-options-lilac .workspace-split.mod-left-split>.workspace-leaf-resize-handle,\nbody.color-scheme-options-lilac .workspace-split.mod-right-split>.workspace-leaf-resize-handle {\n  width: 2px;\n  background-color: transparent;\n}\n\n/* scrollbar 滚动条颜色*/\nbody.color-scheme-options-lilac.theme-light ::-webkit-scrollbar-thumb {\n  background-color: #cbb5e9;\n}\nbody.color-scheme-options-lilac.theme-dark ::-webkit-scrollbar-thumb {\n  background-color: #683083;\n}\n\n/*stickies*/\nbody.color-scheme-options-lilac .stickies {\n  color: var(--text-normal);\n}\n\nbody.color-scheme-options-lilac div .CodeMirror-line span.cm-hashtag-begin + span.cm-hashtag.cm-meta.cm-hashtag-end {\n  background-color: transparent;\n  border: 1px solid var(--text-normal);\n  color: var(--tag-text);\n  border-radius: var(--radius-l);\n  padding-right: 0.4375em;\n  padding-left: 0.4375em;\n}\n\nbody.color-scheme-options-lilac *:not(font) > em > strong,\nbody.color-scheme-options-lilac *:not(font) > strong > em,\nbody.color-scheme-options-lilac .cm-strong.cm-em {\n  background-image: initial;\n  background-clip: initial;\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: initial;\n  background-color: initial;\n}\n\nbody.color-scheme-options-lilac.theme-dark #calendar-container {\n  --theme-color-translucent-3: #553b75;\n}\n\nbody.color-scheme-options-lilac.theme-light #calendar-container {\n  --theme-color-translucent-3: #dccaffb0;\n}\n/*======@awyugan--end========*/\n\n\n/*======@cuman--start========*/\n/*modified from https://github.com/hydescarf/Obsidian-Theme-Mado-Miniflow*/\n:root {\n  --simple-white-1:hsla(204, 45%, 97%, 1);\n  --simple-white-2:hsla(210, 45%, 95%, 1);\n  --simple-white-3:hsla(212, 17%, 80%, 0.2);\n  --simple-white-4:hsla(180, 33%, 99%, 1);\n  --simple-white-5:hsla(207, 10%, 90%, 0.1);\n  --simple-white-6:hsla(212, 17%, 80%, 0.3);\n\n  --simple-blue-1:hsla(209, 95%, 62%, 1);\n  --simple-blue-2:hsla(209, 85%, 72%, 0.5);\n  --simple-blue-3: hsla(245, 60%, 67%, 1);\n  --simple-blue-4:hsla(209, 20%, 66%, 0.62);\n\n  --simple-black-1:hsla(0, 0%, 13%, 1);\n  --simple-black-2:hsla(220, 20%, 35%, 1);\n  --simple-gray-1:hsla(0, 0%, 33%, 1);\n  --simple-gray-2:hsla(210, 15%, 70%, 0.2);\n  --simple-gray-3:hsla(210, 15%, 20%, 0.2);\n  --simple-gray-4:hsla(210, 6%, 38%, 0.5);\n  --simple-gray-5:hsla(207, 17%, 90%, 1);\n  --simple-gray-6:hsla(217, 15%, 83%, 1);\n  --simple-gray-7:hsla(217, 15%, 83%, 0.7);\n  --simple-tran:hsla(204, 45%, 97%, 0);\n  --simple-yellow:hsla(60, 100%, 50%, 0.4);\n  --simple-orange:hsla(25, 75%, 65%, 1);\n  --simple-red-1:hsla(365, 90%, 62%, 1);\n  --simple-red-2:hsl(365, 95%, 85%, 1);\n  --simple-red-3:hsl(365, 85%, 45%, 1);\n  --button-radius:4px;\n  --window-radius:8px;\n}\n\nbody.color-scheme-options-simplicity-topaz .theme-light,\nbody.color-scheme-options-simplicity-topaz.theme-light {\n  --h1-color: var(--print-h1-color,var(--text-normal));\n  --h2-color: var(--print-h2-color,var(--text-normal));\n  --h3-color: var(--print-h3-color,var(--text-normal));\n  --h4-color: var(--print-h4-color,var(--text-normal));\n  --h5-color: var(--print-h5-color,var(--text-normal));\n  --h6-color: var(--print-h6-color,var(--text-normal));\n  --background-accent:  var(--simple-white-1);\n  --background-modifier-border: var(--simple-gray-5);\n  --background-modifier-form-field:  var(--simple-white-1);\n  --background-modifier-form-field-highlighted:  var(--simple-white-1);\n  --background-modifier-box-shadow: rgba(0, 0, 0, 0.05);\n\n  --text-normal: var(--simple-black-1);\n  --text-muted: hsla(218, 19%, 39%, 1);\n\n  --text-faint: hsla(218, 19%, 39%, 1);\n\n  --accent-em: var(--simple-gray-4);\n  --text-error: var(--simple-red-1);\n\n  --text-selection: var(--simple-gray-7);\n\n  --interactive-normal: var(--simple-white-2);\n  --interactive-hover: var(--simple-white-4);\n  --accent-h: 220;\n  --accent-s: 20%;\n  --accent-l: 35%;\n  --interactive-accent-rgb: 70, 142, 235;\n\n  --panel-border-color: var(--simple-white-4);\n\n  --background-primary-bg-4-bt: var(--simple-white-2);\n  --background-primary-alt-bg-4-bt: var(--simple-tran);\n  --background-secondary-bg-4-bt: var(--simple-tran);\n  --background-secondary-alt-bg-4-bt: var(--simple-tran);\n  --background-primary-alt:var(--simple-white-2);\n\n  --background-mobile-drawer-1: var(--simple-white-1);\n  --background-mobile-drawer-2: var(--simple-white-1);\n  --background-modifier-border-hr: var(--simple-gray-5);\n  --background-secondary-alt-bg-4-bt-publish: var(--simple-gray-5);\n\n  --scrollbar-thumb-bg: var(--simple-gray-5);\n\n  --color-black: var(--simple-black-1);\n  --color-dark-gray: var(--simple-gray-1);\n  --color-accent:\tvar(--simple-blue-1);\n  --color-accent-alt:\tvar(--simple-blue-2);\n  --color-accent-dark: var(--simple-blue-3);\n  --color-gray:\tvar(--simple-gray-2);\n  --color-light-gray:\tvar(--simple-gray-3);\n  --color-medium-gray: var(--simple-gray-4);\n\n  --modal-group-border:\tvar(--simple-gray-6);\n  --button-selected: var(--simple-white-6);\n  --button-hover:\tvar(--simple-white-6);\n  --button-selected-hover: var(--simple-white-3);\n\n  --window-shadow: 0 1px 3px var(--simple-white-3);\n  --window-shadow2:\t0 0 9px var(--simple-gray-7);\n  --window-shadow-hover: 0 3px 5px var(--simple-white-6);\n  --window-shadow-transparent:0 3px 5px transparent;\n\n  --border:1px solid var(--simple-gray-5);\n\n  --background-primary:\tvar(--simple-white-1);\n\n  --background-secondary-alt:\tvar(--simple-white-2);\n\n  --background-tertiary: var(--simple-white-3);\n\n  --background-accent: var(--simple-blue-1);\n  --background-fourth: var(--simple-white-4);\n  --background-fifth:\tvar(--simple-white-5);\n  --background-sixth:\tvar(--simple-white-4);\n\n  --text-color-code: var(--simple-orange);\n  --text-normal: var(--simple-black-1);\n  --text-error:\tvar(--simple-red-1);\n\n  --text-faint:\tvar(--simple-gray-1);\n  --text-highlight-bg: var(--simple-yellow);\n  --accent-strong: var(--simple-black-2);\n  --accent-em: var(--simple-gray-4);\n  --text-muted: hsla(218, 19%, 39%, 1);\n\n  --background-modifier-error: var(--simple-red-1);\n  --background-modifier-border:\tvar(--simple-gray-5);\n  --custom-titlebar-bg: var(--background-secondary);\n  --background-code-2: var(--simple-tran);\n  --scrollbar-bg: transparent;\n  --background-transparent-black-or-white-1: var(--simple-white-2) !important;\n  --background-transparent-black-or-white-2: var(--bg-color-settings-1) !important;\n  --background-transparent-black-or-white-3: var(--bg-color-settings-1) !important;\n  --tab-background-active: #ffffff;\n  --theme-color-translucent-01: hsla(254,80%,68%,0.1);\n}\n\n\nbody.color-scheme-options-simplicity-topaz.theme-dark {\n  /* dark mode quick hack */\n  --simple-white-1:hsla(215, 17%, 10%, 1);\n  --simple-white-2:hsla(214, 24%, 15%, 1);\n  --simple-white-3:hsla(212, 17%, 22%, 0.9);\n  --simple-white-6:hsla(212, 17%, 0%, 0.3);\n  --simple-white-4:hsla(215, 22%, 13%, 1);\n  --simple-white-5:hsla(207, 10%, 10%, 0.1);\n  --simple-tran:hsla(207, 10%, 10%, 0);\n  --simple-black-1:hsla(0, 0%, 73%, 1);\n  --simple-black-2:hsla(213, 33%, 65%, 1);\n  --simple-gray-1:hsla(0, 0%, 83%, 1);\n  --simple-gray-2:hsla(210, 25%, 5%, 0.3);\n  --simple-gray-3:hsla(210, 15%, 50%, 0.4);\n  --simple-gray-4:hsla(210, 15%, 70%, 0.5);\n  --simple-gray-5:hsla(207, 17%, 10%, 0.5);\n  --simple-gray-6:hsla(217, 28%, 90%, 0.9);\n  --simple-gray-7:hsla(217, 18%, 50%, 0.9);\n\n  --simple-yellow:hsla(45, 63%, 43%, 1);\n  --simple-blue-3:hsla(245, 60%, 67%, 1);\n\n  --custom-titlebar-bg:var(--background-modifier-cover);\n\n  --color-black: var(--simple-black-1);\n  --color-dark-gray: var(--simple-gray-1);\n  --color-accent:\tvar(--simple-blue-1);\n  --color-accent-alt:\tvar(--simple-blue-2);\n  --color-accent-dark: var(--simple-blue-3);\n  --color-gray: var(--simple-gray-2);\n  --color-light-gray:\tvar(--simple-gray-3);\n  --color-medium-gray: var(--simple-gray-4);\n\n  --modal-group-border:\tvar(--simple-gray-6);\n  --button-selected: var(--simple-white-6);\n  --button-hover:\tvar(--simple-white-6);\n  --button-selected-hover: var(--simple-white-3);\n\n  --window-shadow: 0 1px 3px var(--simple-white-5);\n  --window-shadow2:\t0 0 9px var(--simple-white-6);\n  --window-shadow-hover: 0 3px 5px var(--simple-white-6);\n  --window-shadow-transparent: 0 3px 5px transparent;\n\n  --border:1px solid var(--simple-gray-5);\n\n  --background-primary:\tvar(--simple-white-2);\n\n  --tab-outline-color: var(--simple-white-2);\n  --divider-color: var(--simple-gray-5);\n  --background-secondary-alt:\tvar(--simple-white-2);\n  --background-tertiary: var(--simple-white-3);\n  --background-primary-alt:\tvar(--simple-white-6);\n  --background-secondary-bg-4-bt: var(--simple-tran) ;\n\n  --background-accent: var(--simple-blue-1);\n  --background-fourth: var(--simple-white-3);\n  --background-fifth: var(--simple-white-5);\n  --background-sixth:\tvar(--simple-white-5);\n\n  --text-color-code:var(--simple-orang-1);\n  --text-normal: var(--simple-black-1);\n  --text-error:\tvar(--simple-red-1);\n\n  --text-faint:\tvar(--simple-gray-6);\n  --text-highlight-bg:var(--simple-yellow);\n  --text-bold: var(--simple-black-2);\n  --text-em: var(--simple-gray-6);\n  --text-muted: hsl(218, 17%, 58%);\n\n  --background-modifier-error: var(--simple-red-1);\n  --background-modifier-border:\tvar(--simple-gray-5);\n  --accent-h: 209;\n  --accent-s: 60%;\n  --accent-l: 55%;\n  --indentation-guide: var(--simple-gray-3);\n  --search-result-background:var(--simple-gray-2);\n  --scrollbar-bg: transparent;\n\n}\n\nbody.color-scheme-options-simplicity-topaz:not(.background-settings-workplace-background-image) {\n  --background-secondary:\tvar(--simple-white-2);\n}\n\nbody.theme-dark.color-scheme-options-simplicity-topaz .workspace-tab-header.is-active {\n  --tab-background-active: var(--background-primary);\n  --tab-outline-width: var(--simple-gray-5);\n}\n\nbody.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  background-color: var(--tab-background-active);\n}\nbody.bt-bubble-layout.default-tab.color-scheme-options-simplicity-topaz:not(.background-settings-workplace-background-image,.background-image-settings-switch.background-image-settings-markdown-page-transparent) .workspace-split.mod-root .workspace-tab-header.is-active\n{\n  background-color: var(--background-primary-alt);\n  box-shadow:none;\n}\n\nbody:not(.bt-bubble-layout).color-scheme-options-simplicity-topaz.background-image-settings-switch.background-image-settings-markdown-page-transparent  {\n  --background-secondary: var(--simple-tran);\n  --background-primary: var(--simple-tran);\n  --background-secondary-bg-4-bt: var(--simple-tran);\n  --tab-outline-color: var(--background-secondary);\n}\nbody.color-scheme-options-simplicity-topaz.background-image-settings-switch.background-image-settings-markdown-page-transparent:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile {\n  background-color:var(--simple-white-2);\n}\n/*\n---------------------------\n\tTitle Bar\n---------------------------\n*/\n\n@media screen and (max-width:960px) {\n  body.color-scheme-options-simplicity-topaz .view-header .view-actions .view-action{\n    opacity: 1 !important;\n  }\n  body.color-scheme-options-simplicity-topaz .workspace>.workspace-split.mod-vertical{\n    padding: 0;\n  }\n}\n\nbody.is-mobile.color-scheme-options-simplicity-topaz .workspace>.workspace-split.mod-vertical{\n  padding: 0;\n}\n.view-header .view-actions .view-action\n{\n  z-index: 1;\t\n}\nbody.color-scheme-options-simplicity-topaz .view-header .view-actions .view-action,\nbody.color-scheme-options-simplicity-topaz .titlebar-button-container.mod-right{\n  opacity: 0;\n  z-index: 1;\n  transition: all 0.6s linear;\n}\nbody.color-scheme-options-simplicity-topaz .view-header:hover .view-actions .view-action,\nbody.color-scheme-options-simplicity-topaz .titlebar-button-container.mod-left:hover,\nbody.color-scheme-options-simplicity-topaz .titlebar-button-container.mod-right:hover {\n  opacity: 0.8;\n  transition: all 0.6s linear;\n}\n\nbody.color-scheme-options-simplicity-topaz .nav-action-button.is-active {\n  background-color: var(--simple-blue-2);\n}\nbody.color-scheme-options-simplicity-topaz .checkbox-container.is-enabled {\n  background-color: var(--interactive-accent-hover);\n}\n\nbody.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  border-radius: 6px;\n  border-color: var(--background-modifier-border);\n  border-style: solid;\n  border-width: 0px;\n}\n\nbody.color-scheme-options-simplicity-topaz.theme-dark:not(.background-settings-workplace-background-image) .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  background-color: var(--simple-white-4);\n}\n\n/* Hide dock's tab menu, and show them when hovered  */\nbody.color-scheme-options-simplicity-topaz .workspace-tab-header-container {\n  /* z-index: 1; */\n  /* height:1px; */\n  transition: opacity 0.1s;\n  /* border-radius: var(--button-radius); */\n  box-shadow: none;\n  width: 100%;\n  border-bottom: var(--tab-outline-width) transparent;\n}\nbody.color-scheme-options-simplicity-topaz .modal,\nbody.color-scheme-options-simplicity-topaz .modal-container .prompt {\n  animation: 0.2s popup forwards;\n  border-radius: 20px;\n  box-shadow: var(--window-shadow2);\n}\n\nbody.color-scheme-options-simplicity-topaz.setting-default-frosted-glass.theme-dark .modal-bg {\n  background-color: var(--bg-color-settings-3);\n  backdrop-filter: blur(5px);\n}\n\nbody.color-scheme-options-simplicity-topaz.background-image-settings-command-palette-switch .modal-container .prompt::before {\n  border-radius: 20px;\n  box-shadow: var(--window-shadow2);\n}\n\nbody.color-scheme-options-simplicity-topaz.background-image-settings-command-palette-switch .modal-container .community-plugin-search {\n  border-bottom-left-radius: 20px;\n}\n\nbody.color-scheme-options-simplicity-topaz.background-image-settings-command-palette-switch .modal-container .community-plugin-search {\n  border-bottom-left-radius: 20px;\n}\n\nbody.color-scheme-options-simplicity-topaz [class=\"menu\"] {\n  animation: 0.2s popup forwards;\n  border-radius: 10px;\n  box-shadow: var(--window-shadow2);\n}\n@keyframes popup {\n  0% { transform:scale(70%); opacity:0; }\n  15% { transform:scale(80%); opacity:0.1; }\n  35% { transform:scale(102%);  }\n  45% { opacity:0.3; }\n  65% { opacity:0.7; }\n  100% { transform:scale(100%); opacity:1; }\n}\n/* Left dock navigation (new note, new folder, reorder) */\n\nbody.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container:hover + .workspace-tab-container .workspace-leaf .workspace-leaf-content>.nav-header {\n  margin-top: 0;\n  transition: all 0.1s linear;\n}\n\nbody.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container + .workspace-tab-container .workspace-leaf .workspace-leaf-content>.nav-header:hover {\n  margin-top: 0;\n  transition: all 0.6s linear;\n}\nbody.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container + .workspace-tab-container .workspace-leaf .workspace-leaf-content>.nav-header {\n  margin-top: -30px;\n  transition: all 0.6s linear;\n}\n\n\nbody.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container + .workspace-tab-container .workspace-leaf .workspace-leaf-content[data-type=\"file-tree-view\"]\n.view-content .file-tree-header-fixed {\n  position: relative;\n  margin-top: -30px;\n  transition: all 0.6s linear;\n}\nbody.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container:hover + .workspace-tab-container .workspace-leaf .workspace-leaf-content[data-type=\"file-tree-view\"] .view-content .file-tree-header-fixed {\n  margin-top: 0;\n  transition: all 0.3s linear;\n}\nbody.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container + .workspace-tab-container .workspace-leaf .workspace-leaf-content[data-type=\"file-tree-view\"] .view-content .file-tree-header-fixed:hover{\n  margin-top: 0;\n}\n\nbody.color-scheme-options-simplicity-topaz .oz-folders-tree-wrapper .oz-folder-contents {\n  border-left: 1px solid var(--background-modifier-border);\n}\nbody.color-scheme-options-simplicity-topaz .oz-flex-container {\n  justify-content: start;\n}\nbody.color-scheme-options-simplicity-topaz .oz-nav-action-button {\n  color: var(--text-faint);\n  opacity: 0.3;\n}\n\n/* Remove style for border-on-active */\nbody.color-scheme-options-simplicity-topaz .workspace-tabs .workspace-leaf,\nbody.color-scheme-options-simplicity-topaz .workspace-tabs .workspace-leaf.mod-active{\n  border: none;\n}\n\nbody.color-scheme-options-simplicity-topaz .horizontal-main-container {\n  overflow: visible;\n}\nbody.color-scheme-options-simplicity-topaz .workspace {\n  overflow: visible;\n}\n\n/*\n---------------------------\n\tNote Title\n---------------------------\n*/\n\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header,\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > .workspace-leaf .view-header,\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf .view-header {\n  display: flex;\n  align-items: center;\n  border: none;\n  background: var(--simple-white-2);\n}\n\nbody.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header,\nbody.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > .workspace-leaf .view-header,\nbody.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf .view-header {\n  background-color: transparent;\n}\n\nbody.color-scheme-options-simplicity-topaz .view-header-title {\n  font-size: 1rem;\n  border-radius: var(--button-radius);\n  margin-left: 0;\n  border: 1px solid transparent;\n  transition:border 0.2s, background 0.2s;\n}\n\nbody.color-scheme-options-simplicity-topaz .view-header-title:hover,\nbody.color-scheme-options-simplicity-topaz .view-header-title:focus {\n  background: var(--background-fourth);\n}\n\nbody.color-scheme-options-simplicity-topaz .view-action,\nbody.color-scheme-options-simplicity-topaz .view-header-icon{\n  display: flex;\n  padding: 4px;\n  margin: 0 3px;\n  color: var(--color-dark-gray);\n  border-radius: var(--button-radius);\n  transition: 0.1s background, 0.1s opacity;\n  top: 0;\n}\n\nbody.color-scheme-options-simplicity-topaz .view-action:hover,.view-header-icon:hover{\n  background: var(--button-hover);\n  color: var(--color-dark-gray);\n}\n\nbody.color-scheme-options-simplicity-topaz .view-action:active,.view-header-icon:active {\n  opacity: 0.75;\n}\n\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle {\n  background: none;\n  height: 7px;\n  border: none;\n  background-color: transparent;\n}\n\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle,\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-left-split > .workspace-leaf-resize-handle,\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-right-split > .workspace-leaf-resize-handle{\n  background: none;\n  background-color: transparent;\n  width: 3px;\n  border: none;\n}\nbody.color-scheme-options-simplicity-topaz .workspace-split .workspace-leaf-resize-handle:hover{\n  background: var(--simple-gray-2);\n}\n\nbody:not(.is-mobile).color-scheme-options-simplicity-topaz:not(.background-image-settings-switch) .workspace-split.mod-root .view-content,\nbody:not(.is-mobile).color-scheme-options-simplicity-topaz:not(.background-settings-workplace-background-image) .workspace-split.mod-root .view-content {\n  background-color: var(--background-primary);\n}\n\nbody:not(.is-mobile).color-scheme-options-simplicity-topaz .workspace-fake-target-overlay:not(.is-in-sidebar) .workspace-tabs .workspace-leaf,\nbody:not(.is-mobile).color-scheme-options-simplicity-topaz .mod-root .workspace-tabs .workspace-leaf,\nbody:not(.is-mobile).color-scheme-options-simplicity-topaz .mod-root .workspace-tabs .workspace-tab-header-container {\n  background-color: transparent;\n}\n\n\nbody:not(.is-mobile).theme-dark.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .workspace-split.mod-root\n{\n  background-color: var(--simple-tran);\n}\n\nbody:not(.is-mobile).background-image-settings-switch.background-image-settings-markdown-page-transparent.background-settings-workplace-background-image.color-scheme-options-simplicity-topaz .workspace-split.mod-root\n{\n  background-color: var(--simple-tran);\n}\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-root\n{\n  background-color: var(--simple-white-2);\n}\nbody.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .workspace-tabs,\nbody.theme-dark.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-left,\nbody.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image div.workspace-ribbon.mod-left:before\n{\n  background-color: var(--background-secondary-bg-4-bt);\n}\n\nbody.color-scheme-options-simplicity-topaz.background-image-settings-switch.background-image-settings-markdown-page-transparent .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header {\n  background-color:var(--simple-white-5);\n}\nbody.color-scheme-options-simplicity-topaz .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header.is-active {\n  box-shadow: var(--window-shadow-hover);\n}\nbody.color-scheme-options-simplicity-topaz .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header {\n  border-radius: 15px;\n  box-shadow: none;\n}\n\nbody.color-scheme-options-simplicity-topaz .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner {\n  border-radius: 15px;\n}\n\n/*\n---------------------------\n\tMain Pane Border Styling\n---------------------------\n*/\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-horizonta.mod-left-split.is-collapsed+.workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content{\n  border-top-left-radius: 0px;\n}\n\nbody:not(.is-mobile).color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root .workspace-leaf{\n  border-radius: 15px;\n}\n\nbody.color-scheme-options-simplicity-topaz.theme-dark .view-content {\n  border-bottom-right-radius: 20px;\n  border-bottom-left-radius: 20px;\n}\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root .workspace-split.mod-vertical:not(:first-child):last-child .workspace-leaf{\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root,\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root .workspace-split{\n  display: flex;\n  gap: 18px;\n}\nbody.color-scheme-options-simplicity-topaz .workspace>.workspace-split.mod-vertical{\n  padding: 0px 3px 0;\n}\n\nbody.is-popout-window.color-scheme-options-simplicity-topaz .workspace>.workspace-split.mod-vertical{\n  padding: 0;\n}\n\n\nbody.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root .workspace-leaf{\n  box-shadow: var(--window-shadow);\n  height: 100%;\n}\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf{\n  padding: 0;\n}\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-root > .workspace-leaf:last-of-type .workspace-leaf-content{\n  border-top-right-radius: 0;\n}\n\n/* Remove sttles on button-on-active, but not during right-click-menu as that is alright */\nbody.color-scheme-options-simplicity-topaz .nav-folder-title,\nbody.color-scheme-options-simplicity-topaz .nav-file{\n  border: none;\n}\nbody.color-scheme-options-simplicity-topaz .workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title,\nbody.color-scheme-options-simplicity-topaz .workspace-leaf.mod-active .nav-file.has-focus{\n  border-radius: none;\n  border: none;\n  background-color: none;\n}\n\nbody.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > .workspace-leaf.mod-active .view-header,\nbody.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf.mod-active .view-header {\n  background:var(--simple-white-1);\n}\nbody.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > .workspace-leaf.mod-active .view-header .view-header-title,\nbody.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf.mod-active .view-header .view-header-title{\n  color:var(--simple-black-2);\n  text-shadow: 0px 0px 0px rgba(145, 237, 232, 1);\n}\n\nbody.color-scheme-options-simplicity-topaz .workspace-tab-header:not(.is-active ) .workspace-tab-header-inner-icon {\n  color: var(--text-faint);\n  opacity: 0.3;\n}\n\n\n\nbody.color-scheme-options-simplicity-topaz .markdown-source-view.mod-cm6 .cm-underline,\nbody.color-scheme-options-simplicity-topaz a,\nbody.color-scheme-options-simplicity-topaz :is(.markdown-preview-view,.markdown-rendered) .internal-link {\n  font-weight: 600;\n}\n\nbody.color-scheme-options-simplicity-topaz .nav-folder-children,\nbody.color-scheme-options-simplicity-topaz\n.item-list{\n  padding-left: 0.5em;\n  display: flex;\n  flex-direction: column;\n}\nbody.color-scheme-options-simplicity-topaz .nav-folder{\npadding-bottom: 2px;\n}\n\nbody.color-scheme-options-simplicity-topaz .nav-folder-title{\n  font-weight: 500;\n}\n\nbody.color-scheme-options-simplicity-topaz :is(h3,h4,h5,h6),\nbody.color-scheme-options-simplicity-topaz .cm-s-obsidian :is(.cm-header-3,.cm-header-4,.cm-header-5,.cm-header.cm-header-6) {\n  font-weight: 500;\n}\n\nbody.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image:is(.background-settings-workplace-waves2-light,.background-settings-workplace-waves-light).theme-light{\n  --background-secondary-bg-4-bt: var(--simple-tran);\n}\nbody.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image.theme-dark {\n  --background-primary-alt-bg-4-bt: var(--simple-tran);\n  --background-secondary-bg-4-bt: var(--simple-tran);\n  --background-secondary-alt-bg-4-bt: var(--simple-tran);\n  --background-primary:\tvar(--simple-gray-2);\n}\n\n\nbody.color-scheme-options-simplicity-topaz.is-frameless.background-settings-workplace-background-image .workspace-tab-header.is-active {\n  box-shadow: none;\n}\n\nbody.color-scheme-options-simplicity-topaz .workspace-leaf-content .view-header .view-header-icon {\n  margin-left: -10px;\n  opacity: 0;\n  width: 18px;\n}\nbody.color-scheme-options-simplicity-topaz .workspace-leaf-content .view-header .view-header-icon:hover {\n  opacity: 1;\n}\n\nbody.color-scheme-options-simplicity-topaz:not(.view-button-front) .workspace-leaf-content .view-header .view-header-nav-buttons {\n  margin-left: -15px;\n}\n\nbody.default-tab.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-root .workspace-tab-header.is-active {\n  background-image: linear-gradient(to right, var(--background-secondary), var(--simple-white-2));\n}\nbody.default-tab.color-scheme-options-simplicity-topaz:not(.background-settings-workplace-background-image,.background-image-settings-switch.background-image-settings-markdown-page-transparent)\n.workspace-split.mod-root .workspace-tab-header.is-active {\n  background:var(--background-primary);\n  --tab-background-active:var(--background-primary);\n}\n\nbody.default-tab.background-image-settings-switch.background-image-settings-markdown-page-transparent:not(.toggle-nonoverlapping-bg)\n.workspace-split.mod-root .workspace-tab-header.is-active {\n  background:transparent;\n  --tab-background-active:transparent;\n}\n\nbody.background-image-settings-switch.toggle-nonoverlapping-bg .workspace-tab-header-container\n{\n  border:none;\n}\n\nbody.color-scheme-options-simplicity-topaz .workspace-leaf-content .view-header .view-header-icon svg {\n  opacity: 0;\n}\nbody.color-scheme-options-simplicity-topaz .workspace-tab-container-before.is-before-active,\nbody.color-scheme-options-simplicity-topaz .workspace-tab-container-after.is-after-active,\n.workspace-tab-header.is-before-active,\nbody.color-scheme-options-simplicity-topaz .workspace-tab-header.is-after-active,\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-right-split .workspace-tabs .workspace-leaf,\nbody.color-scheme-options-simplicity-topaz .workspace-split.mod-left-split .workspace-tabs .workspace-leaf,\nbody.color-scheme-options-simplicity-topaz .workspace-tabs .workspace-tab-header-container {\n  background-color: var(--background-secondary-alt);\n}\nbody.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .workspace-tabs .workspace-tab-header-container {\n  background-color: transparent;\n}\n\nbody.is-mobile.color-scheme-options-simplicity-topaz .workspace-tabs .workspace-tab-header-container {\n  background-color: var(--background-secondary);\n}\n\nbody.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .mod-root .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner {\n  padding-bottom:1px;\n}\n\n/*==============*/\n/*==============*/\n/*======@cuman--end========*/\n\nbody.font-family-change-to-default .markdown-source-view,\nbody.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered),\nbody.font-family-change-to-default .markdown-source-view.mod-cm6 .cm-scroller,\nbody.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) h5,\nbody.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) h6,\nbody.font-family-change-to-default .nav-file-title,\nbody.font-family-change-to-default .nav-folder-title,\nbody.font-family-change-to-default a.tag,\nbody.font-family-change-to-default .cm-s-obsidian span.cm-hashtag,\nbody.font-family-change-to-default .nav-folder.mod-root>.nav-folder-title,\nbody.font-family-change-to-default pre.frontmatter.language-yaml::before,\nbody.font-family-change-to-default span.cm-strong,\nbody.font-family-change-to-default :not(font)>strong,\nbody.font-family-change-to-default a,\nbody.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) .internal-link,\nbody.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) th,\nbody.font-family-change-to-default *:not(font)>em>strong,\nbody.font-family-change-to-default *:not(font)>strong>em,\nbody.font-family-change-to-default .cm-strong.cm-em {\n  font-family: var(--font-default) !important;\n}\n\nbody.font-family-change-to-default .cm-s-obsidian .cm-hmd-frontmatter,\nbody.font-family-change-to-default .markdown-rendered code,\nbody.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) code{\n  font-family: var(--font-monospace);\n}\n\nbody.reduce-bottom-padding .workspace-leaf-content[data-type=\"markdown\"] :is(.markdown-preview-view,.markdown-rendered) .markdown-preview-sizer,\nbody.reduce-bottom-padding:not(.plugin-cm-typewriter-scroll) .cm-s-obsidian .cm-content {\n  padding-bottom: var(--bottom-padding-value) !important;\n}\n\n\n/*===============================*/\n/*=============YAML==============*/\n/*===============================*/\n\ninput[type='text'].metadata-property-key-input {\n  background:transparent;\n}\n\n\n/* cssclass: inline-list */\n/* can change list from block to inline; can be used with inline images */\n.inline-list ul,\n.inline-list ol {\n  display: inline-block;\n  margin-top: 0.3em;\n}\n\n/* cssclass: code-wrap */\n/* as implied by the name, to wrap texts for code boxes */\n.code-wrap pre>code>span {\n  word-wrap: break-word;\n  word-break: break-all;\n  white-space: pre-wrap;\n}\n.code-wrap code.language-yaml.is-loaded {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n  white-space: pre-wrap !important;\n}\n.code-wrap code.language-md.is-loaded {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n  white-space: break-spaces !important;\n}\n\n/* cssclass: image-grid */\n/* image-grid-2 */\n/* adapted from https://github.com/iEchoxu/obsidian_orange/blob/main/.obsidian/snippets/image-grid.css */\n\n.img-grid :is(.markdown-preview-section,.markdown-rendered)>div>p>.image-embed[alt*=\".\"]:last-child {\n  padding-right: 0;\n}\n.img-grid :is(.markdown-preview-section,.markdown-rendered)>div>p>.image-embed[alt*=\".\"]:first-child {\n  padding-left: 0;\n}\n.img-grid :is(.markdown-preview-section,.markdown-rendered)>div hr {\n  width: 100%;\n}\n.img-grid span.image-embed[alt*=\".\"] {\n  display: table-cell;\n}\n.img-grid img[alt*=\".\"] {\n  max-height: 100vh;\n  object-fit: cover;\n}\n\n.img-grid .markdown-preview-section .el-embed-image img:not([width]),.img-grid .markdown-preview-section video{\n  width:100%\n}\n.img-grid .markdown-preview-section>.el-embed-image>p{\n  display:grid;\n  grid-column-gap:0.5rem;\n  grid-row-gap:0;\n  grid-template-columns:repeat(auto-fit,minmax(0,1fr))\n}\n.img-grid .markdown-preview-section>.el-embed-image>p>br{\n  display:none\n}\n.img-grid .markdown-preview-section>.el-embed-image>p>img{\n  object-fit:cover;\n  align-self:stretch\n}\n.img-grid .markdown-preview-section>.el-embed-image>p>.internal-embed img{\n  object-fit:cover;\n  height:100%\n}\n\n.img-grid-ratio .markdown-preview-section>.el-embed-image>p>.internal-embed img\n,.img-grid.img-grid-ratio .markdown-preview-section>.el-embed-image>p>.internal-embed img{\n  object-fit:contain;\n  height:100%;\n  align-self:center\n}\n@media (max-width:400pt){\n  .el-embed-image{\n    margin-top:.25rem\n  }\n  .img-grid .markdown-preview-section>.el-embed-image>p{\n    grid-column-gap:0.25rem\n  }\n}\n\n/* cssclass: kanban */\n/* adapted from spectrum theme, thanks to @Braweria. https://github.com/Braweria/Spectrum */\n/* a kind of css-based pseudo-kanban feature */\n.kanban ul {\n  display: flex;\n  flex-direction: row;\n  border: 0px solid var(--p-kanban-border-color);\n  padding: 0rem;\n  border-radius: var(--radius-m);\n  flex-wrap: wrap;\n}\n.kanban ul>li .list-bullet:after {\n  display: none;\n}\n\n.kanban ul>li {\n  flex: 1 1 20%;\n  padding: 0.1em 1em 0.1em 0.8em;\n  margin: 0 0.3em 0.3em 0 !important;\n  list-style: none;\n  border: 1px solid var(--p-kanban-border-color);\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n}\n\n.kanban ul li.task-list-item .task-list-item-checkbox {\n  margin-left: auto;\n}\n\n\n.kanban ul .list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s\n}\n\nbody.colorful-p-kanban .kanban ul>li:nth-of-type(8n+1) {\n  background-color: var(--p-kanban-color-1);\n}\nbody.colorful-p-kanban .kanban ul>li:nth-of-type(8n+2) {\n  background-color: var(--p-kanban-color-2);\n}\nbody.colorful-p-kanban .kanban ul>li:nth-of-type(8n+3) {\n  background-color: var(--p-kanban-color-3);\n}\nbody.colorful-p-kanban .kanban ul>li:nth-of-type(8n+4) {\n  background-color: var(--p-kanban-color-4);\n}\nbody.colorful-p-kanban .kanban ul>li:nth-of-type(8n+5) {\n  background-color: var(--p-kanban-color-5);\n}\nbody.colorful-p-kanban .kanban ul>li:nth-of-type(8n+6) {\n  background-color: var(--p-kanban-color-6);\n}\nbody.colorful-p-kanban .kanban ul>li:nth-of-type(8n+7) {\n  background-color: var(--p-kanban-color-7);\n}\nbody.colorful-p-kanban .kanban ul>li:nth-of-type(8n) {\n  background-color: var(--p-kanban-color-8);\n}\n.canvas-node-container .kanban ul>li:nth-of-type(n) {\n  backdrop-filter:none;\n}\n.kanban ul>li:nth-of-type(n) {\n  background-color: var(--p-kanban-color-simple);\n  padding-left: 1em;\n  backdrop-filter: blur(calc(var(--blur-p-kanban-frosted-glass) * 2px));\n}\n.kanban ul:first-child>li:nth-of-type(8n+1) {\n  border-top: 6px solid var(--p-kanban-color-1) !important;\n}\n.kanban ul:first-child>li:nth-of-type(8n+2) {\n  border-top: 6px solid var(--p-kanban-color-2) !important;\n}\n.kanban ul:first-child>li:nth-of-type(8n+3) {\n  border-top: 6px solid var(--p-kanban-color-3) !important;\n}\n.kanban ul:first-child>li:nth-of-type(8n+4) {\n  border-top: 6px solid var(--p-kanban-color-4) !important;\n}\n.kanban ul:first-child>li:nth-of-type(8n+5) {\n  border-top: 6px solid var(--p-kanban-color-5) !important;\n}\n.kanban ul:first-child>li:nth-of-type(8n+6) {\n  border-top: 6px solid var(--p-kanban-color-6) !important;\n}\n.kanban ul:first-child>li:nth-of-type(8n+7) {\n  border-top: 6px solid var(--p-kanban-color-7) !important;\n}\n.kanban ul:first-child>li:nth-of-type(8n) {\n  border-top: 6px solid var(--p-kanban-color-8) !important;\n}\nbody.simple-p-kanban .kanban ul:first-child>li:nth-of-type(n) {\n  border-top: none !important;\n}\n\nbody:not(.remove-shadow-p-kanban) .kanban ul>li:hover {\n  transition: box-shadow .2s cubic-bezier(.4, 0, 1, 1);\n  box-shadow: 0 3px 5px 0 var(--p-kanban-color-shadow), 0 3px 1px -3px var(--p-kanban-color-shadow), 2px 3px 3px 0 var(--p-kanban-color-shadow);\n}\n\n.kanban ul ul {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  padding: 0rem;\n  margin-top: 0.5rem;\n  border-radius: 0;\n  border: 0;\n  background: none;\n}\n\n.kanban ul ul li:not(.task-list-item) {\n  width: 100%;\n  display: block;\n  background-color: var(--p-kanban-card-color-1) !important;\n}\n\nbody.remove-shadow-p-kanban .kanban ul ul li:hover {\n  background: var(--p-kanban-card-color-2) !important;\n  border-color: var(--p-kanban-border-color) !important;\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n}\n\nbody.remove-shadow-p-kanban.theme-dark .kanban ul ul li:hover {\n  border-color: #696969e1 !important;\n  border-left: 1px solid #696969e1 !important;\n}\n\n.kanban ul ul li .task-list-item-checkbox {\n  margin-left: 1.5rem !important;\n}\n\n.kanban ul ul ul {\n  margin-right: 0;\n}\n\n.kanban ul ul::before {\n  border-left: 0;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width.kanban .markdown-preview-sizer>div>ul {\n  max-width: 100%;\n}\n\n.kanban :is(ol,ul).contains-task-list :is(ol,ul) {\n  position: initial;\n}\n\n.kanban :is(ol,ul).contains-task-list :is(ol,ul)::before {\n  all: initial;\n}\n\n.kanban ul > li.task-list-item {\n  flex: 1 1 20%;\n  padding: 0.1em 1em;\n  list-style: none;\n  border: 1px solid var(--p-kanban-border-color);\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n  text-indent: 0.01em;\n}\n\n.kanban ul ul li.task-list-item {\n  width: 100%;\n  display: block;\n  padding-left: 2em;\n  text-indent: -3em;\n  background-color: var(--p-kanban-card-color-1) !important;\n}\n\n.kanban ul ul li.task-list-item .list-collapse-indicator.collapse-indicator.collapse-icon {\n  text-indent: -1em;\n}\n\nbody:not(.default-icons) .kanban li.task-list-item .list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  margin-left: -0.2em;\n}\n\nbody:not(.default-icons) .kanban li.task-list-item .task-list-item.is-collapsed .list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  transform: translateX(-0.9em) translateY(-1em) rotate(-90deg);\n}\n\nbody.colorful-p-kanban .kanban .task-list-item-checkbox {\n  border-color: var(--text-normal) !important;\n}\n\n/* cssclass: colorful-highlight */\nbody:not(.remove-colorful-highlight-bg) .markdown-source-view.is-live-preview *:not([class*=\"cm-formatting-highlight\"])~*:not([class*=\"cm-em\"])~.cm-em.cm-highlight.cm-strong,\n.markdown-source-view.is-live-preview.colorful-highlight .cm-em.cm-highlight.cm-strong {\n  background-color: var(--bg-color-highlight-3) !important;\n  color: var(--color-highlight-3) !important;\n  -webkit-text-fill-color: unset;\n  font-style: normal;\n  font-weight: var(--font-weight-highlight-3);\n}\nbody:not(.remove-colorful-highlight-bg) .markdown-source-view.is-live-preview *:not([class*=\"cm-formatting-highlight\"])~*:not([class*=\"cm-strong\"])~.cm-highlight.cm-strong,\n.markdown-source-view.is-live-preview.colorful-highlight .cm-highlight.cm-strong {\n  background-color: var(--bg-color-highlight-2) !important;\n  color: var(--color-highlight-2) !important;\n  font-weight: var(--font-weight-highlight-2);\n}\nbody:not(.remove-colorful-highlight-bg) .markdown-source-view.is-live-preview *:not([class*=\"cm-formatting-highlight\"])~*:not([class*=\"cm-em\"])~.cm-em.cm-highlight,\n.markdown-source-view.is-live-preview.colorful-highlight .cm-em.cm-highlight {\n  background-color: var(--bg-color-highlight-1) !important;\n  color: var(--color-highlight-1) !important;\n  font-style: normal;\n  font-weight: var(--font-weight-highlight-1);\n}\n.cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-highlight[class*=\"cm-em\"]~span.cm-highlight[class*=\"cm-em\"],\n.cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-highlight[class*=\"cm-strong\"]~span.cm-highlight[class*=\"cm-strong\"],\n.cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-highlight[class*=\"cm-em\"]:not([class*=\"cm-formatting-highlight\"]),\n.cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-highlight[class*=\"cm-strong\"]:not([class*=\"cm-formatting-highlight\"]) {\n  background-color: var(--text-highlight-bg) !important;\n}\n\n/* cssclass: cloze */\n.markdown-source-view.is-live-preview.cloze .cm-highlight.cm-strikethrough:not([class*=\"formatting\"]),\nbody:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-highlight.cm-strikethrough:not([class*=\"formatting\"]) {\n  background-color: var(--cloze-bg-color) !important;\n  color: var(--cloze-bg-color);\n  text-decoration: underline var(--cloze-decoration) var(--cloze-decoration-color);\n}\n\n.markdown-source-view.is-live-preview.cloze .cm-highlight.cm-strikethrough:hover,\nbody:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-highlight.cm-strikethrough:hover {\n  background-color: transparent !important;\n  color: var(--text-normal) !important;\n  transition: all 400ms ease-in-out;\n}\n\n\nbody:not(.remove-cloze-style) .markdown-rendered mark:has(> del) {\n  background-color: transparent !important;\n}\n\nbody:not(.remove-cloze-style) .markdown-rendered mark:empty {\n  background-color: initial !important;\n}\n\n\n.markdown-source-view.is-live-preview.cloze .cm-em.cm-highlight.cm-strikethrough:not([class*=\"formatting\"]),\nbody:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-em.cm-highlight.cm-strikethrough:not([class*=\"formatting\"]) {\n  color: transparent !important;\n  background-color: transparent !important;\n  padding: 0 2px;\n  text-decoration: underline var(--cloze-decoration-2) var(--cloze-decoration-color-2) !important;\n}\n\n\n/*========floating-toc===========*/\ndiv.markdown-source-view ul.floating-toc>li{\n  flex:none;\n  background-color: transparent;\n  border:0px;\n}\ndiv.markdown-source-view ul.floating-toc{\n  flex-wrap:unset;\n}\n/*=========================*/\n/*==========tags===========*/\n/*=========================*/\n/*customised colorful tags*/\nbody.colorful-tag-bt .tag:not(.token):nth-child(5n+1) {\n  background-color: var(--tag1);\n}\n\nbody.colorful-tag-bt .tag:not(.token):nth-child(5n+2) {\n  background-color: var(--tag2);\n}\n\nbody.colorful-tag-bt .tag:not(.token):nth-child(5n+3) {\n  background-color: var(--tag3);\n}\n\nbody.colorful-tag-bt .tag:not(.token):nth-child(5n+4) {\n  background-color: var(--tag4);\n}\n\nbody.colorful-tag-bt .tag:not(.token):nth-child(5n) {\n  background-color: var(--tag5);\n}\n\n/*rainbow tag alt*/\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+1) {\n  --tag-border-color: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 20%);\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n}\n\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+2) {\n  --tag-border-color: hsla(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l), 20%);\n  background-color: hsla(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l), 10%) !important;\n  color: hsl(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l-alt)) !important;\n}\n\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+3) {\n  --tag-border-color: hsla(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l), 20%);\n  background-color: hsla(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l), 10%) !important;\n  color: hsl(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l-alt)) !important;\n}\n\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+4) {\n  --tag-border-color: hsla(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l), 20%);\n  background-color: hsla(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l), 10%) !important;\n  color: hsl(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l-alt)) !important;\n}\n\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n) {\n  --tag-border-color: hsla(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l), 20%);\n  background-color: hsla(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l), 10%) !important;\n  color: hsl(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l-alt)) !important;\n}\n\n\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n):hover {\n  color: white !important;\n  background-color: hsl(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l)) !important;\n}\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+1):hover {\n  color: white !important;\n  background-color: hsl(var(--accent-h), var(--accent-s), var(--accent-l)) !important;\n}\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+2):hover {\n  color: white !important;\n  background-color: hsl(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l)) !important;\n}\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+3):hover {\n  color: white !important;\n  background-color: hsl(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l)) !important;\n}\nbody.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+4):hover {\n  color: white !important;\n  background-color: hsl(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l)) !important;\n}\n\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1),\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+.cm-hashtag.cm-meta,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  --tag-border-color: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 20%);\n  background-color: var(--theme-color-translucent-01) !important;\n  color: var(--theme-color) !important;\n}\n\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2),\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+.cm-hashtag.cm-meta,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  --tag-border-color: hsla(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l), 20%);\n  background-color: hsla(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l), 10%) !important;\n  color: hsl(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l-alt)) !important;\n}\n\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3),\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+.cm-hashtag.cm-meta,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  --tag-border-color: hsla(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l), 20%);\n  background-color: hsla(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l), 10%) !important;\n  color: hsl(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l-alt)) !important;\n}\n\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4),\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+.cm-hashtag.cm-meta,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  --tag-border-color: hsla(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l), 20%);\n  background-color: hsla(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l), 10%) !important;\n  color: hsl(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l-alt)) !important;\n}\n\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n),\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+.cm-hashtag.cm-meta,\nbody.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  --tag-border-color: hsla(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l), 20%);\n  background-color: hsla(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l), 10%) !important;\n  color: hsl(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l-alt)) !important;\n}\n\n\n\n/*rainbow tag*/\nbody.rainbow-tag .tag:not(.token):nth-child(5n+1) {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n}\n\nbody.rainbow-tag .tag:not(.token):nth-child(5n+2) {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(70deg);\n}\n\nbody.rainbow-tag .tag:not(.token):nth-child(5n+3) {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(140deg);\n}\n\nbody.rainbow-tag .tag:not(.token):nth-child(5n+4) {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(210deg);\n}\n\nbody.rainbow-tag .tag:not(.token):nth-child(5n) {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(280deg);\n}\n\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1),\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+.cm-hashtag.cm-meta,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--theme-color-translucent-01) !important;\n  color: var(--theme-color) !important;\n}\n\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2),\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+.cm-hashtag.cm-meta,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--theme-color-translucent-01) !important;\n  color: var(--theme-color) !important;\n  filter: hue-rotate(210deg);\n}\n\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3),\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+.cm-hashtag.cm-meta,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--theme-color-translucent-01) !important;\n  color: var(--theme-color) !important;\n  filter: hue-rotate(70deg);\n}\n\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4),\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+.cm-hashtag.cm-meta,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--theme-color-translucent-01) !important;\n  color: var(--theme-color) !important;\n  filter: hue-rotate(280deg);\n}\n\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n),\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+.cm-hashtag.cm-meta,\nbody.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--theme-color-translucent-01) !important;\n  color: var(--theme-color) !important;\n  filter: hue-rotate(140deg);\n}\n\n\n/*tag font size and font family*/\nbody.colorful-tag-bt a.tag:not(.token) {\n  font-size: var(--font-size-tag);\n  font-family: var(--font-family-tag) !important;\n  border: none;\n  color: var(--tag-text);\n  text-align: center;\n  text-decoration: none;\n  cursor: pointer;\n}\n\nbody:not(.tag-default) .tag:not(.token):hover {\n  color: white !important;\n  background-color: var(--theme-color) !important;\n}\n\nbody:is(:not(.tag-default),:not(.font-family-change-to-default)) .cm-s-obsidian span.cm-hashtag {\n  font-family: var(--font-family-tag);\n  font-size: var(--font-size-tag) !important;\n  text-decoration: none;\n}\n\nbody:not(.tag-default) .cm-s-obsidian span.cm-hashtag-begin {\n  border-top-left-radius: var(--radius-l);\n  border-bottom-left-radius: var(--radius-l);\n  border-right: none !important;\n  text-decoration: none;\n  padding-left: 0.3em;\n}\n\nbody:not(.tag-default) .cm-s-obsidian span.cm-hashtag-end {\n  border-radius: 0 var(--radius-l) var(--radius-l) 0;\n  padding-right: 0.3em !important;\n  border-left: none;\n  text-decoration: none;\n}\n\nbody:not(.tag-default) .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta {\n  padding-right: 0;\n  border-left: none !important;\n}\n\nbody:is(.rainbow-tag,.tag-pill-outlined,.tag-clear-style,.colorful-tag-bt) .cm-s-obsidian span:is(.cm-hashtag,.cm-hashtag-begin,.cm-hashtag-end,.cm-hashtag-begin+.cm-hashtag.cm-meta,.cm-hashtag-begin+.cm-hashtag.cm-meta+span.cm-hashtag.cm-meta.cm-hashtag-end) {\n  color: var(--tag-text) ;\n}\n\n\nbody:not(.tag-default) .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta+span.cm-hashtag.cm-meta.cm-hashtag-end {\n  padding-left: 0;\n  border-top-right-radius: var(--radius-l);\n  border-bottom-right-radius: var(--radius-l);\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n  padding-right: 0.3em;\n}\n\nbody:not(.tag-default).tag-pill-outlined .tag:not(.token) {\n  color: var(--text-normal);\n  background-color: transparent !important;\n  border: var(--tag-border-width) solid;\n  padding: 0px 8px;\n}\n\na.tag,\n.editor .cl-hashtag,\n.cm-hashtag {\n  padding-top: 0.1em;\n  padding-bottom: 0.1em;\n}\n.is-live-preview a.tag {\n  line-height: 1.8;\n}\nbody.tag-pill-outlined .tag:not(.token):nth-child(5n+1) {\n  border-color: var(--tag1);\n  color: var(--tag1);\n}\nbody.tag-pill-outlined .tag:not(.token):nth-child(5n+2) {\n  border-color: var(--tag2);\n  color: var(--tag2);\n}\nbody.tag-pill-outlined .tag:not(.token):nth-child(5n+3) {\n  border-color: var(--tag3);\n  color: var(--tag3);\n}\nbody.tag-pill-outlined .tag:not(.token):nth-child(5n+4) {\n  border-color: var(--tag4);\n  color: var(--tag4);\n}\nbody.tag-pill-outlined .tag:not(.token):nth-child(5n) {\n  border-color: var(--tag5);\n  color: var(--tag5);\n}\n\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-end,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta+span.cm-hashtag.cm-meta.cm-hashtag-end {\n  color: var(--text-normal) !important;\n}\n\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1),\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+.cm-hashtag.cm-meta,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  border: var(--tag-border-width) solid var(--tag1);\n  background-color: transparent !important;\n  color: var(--tag1) !important;\n}\n\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2),\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+.cm-hashtag.cm-meta,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  border: var(--tag-border-width) solid var(--tag2);\n  background-color: transparent !important;\n  color: var(--tag2) !important;\n}\n\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3),\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+.cm-hashtag.cm-meta,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  border: var(--tag-border-width) solid var(--tag3);\n  background-color: transparent !important;\n  color: var(--tag3) !important;\n}\n\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4),\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+.cm-hashtag.cm-meta,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  border: var(--tag-border-width) solid var(--tag4);\n  background-color: transparent !important;\n  color: var(--tag4) !important;\n}\n\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n),\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+.cm-hashtag.cm-meta,\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  border: var(--tag-border-width) solid var(--tag5);\n  background-color: transparent !important;\n  color: var(--tag5) !important;\n}\n\n\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(n)+span.cm-hashtag:not([class*=\"-end\"]),\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(n)+.cm-hashtag.cm-meta:not([class*=\"-end\"]) {\n  border-left: none;\n  border-right: none;\n}\n\nbody.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  border-left: none;\n}\n\nbody.tag-clear-style .tag:not(.token):nth-child(n) {\n  background-color: transparent;\n  border: none;\n  color: var(--text-accent);\n  text-decoration: underline;\n  padding: 0 2px;\n}\n\nbody.tag-clear-style .tag:not(.token):nth-child(n):hover {\n  background-color: var(--theme-color-translucent-015) !important;\n}\n\nbody.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin,\nbody.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta,\nbody.tag-clear-style .cm-s-obsidian span.cm-hashtag-end,\nbody.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin+span.cm-hashtag.cm-meta.cm-hashtag-end,\nbody.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta {\n  background-color: transparent;\n  border: none;\n  color: var(--text-accent) !important;\n  text-decoration: underline;\n  padding: 0;\n}\n\nbody.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: transparent;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-dailynote,\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-weeklynote,\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-ideas,\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-inprogress,\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-important,\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-questions,\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-complete {\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n  display: inline;\n  color: var(--white) !important;\n}\n\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1),\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+.cm-hashtag.cm-meta,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--tag1);\n}\n\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2),\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+.cm-hashtag.cm-meta,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--tag2);\n}\n\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3),\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+.cm-hashtag.cm-meta,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--tag3);\n}\n\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4),\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+.cm-hashtag.cm-meta,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--tag4);\n}\n\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n),\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+.cm-hashtag.cm-meta,\nbody.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end {\n  background-color: var(--tag5);\n}\n\n\n/*special tags*/\nbody.tag-pill-outlined .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-hashtag.cm-meta.cm-hashtag-end:is(.cm-tag-important,.cm-tag-complete,.cm-tag-ideas,.cm-tag-questions,.cm-tag-weeklynote,.cm-tag-dailynote,.cm-tag-inprogress):not(.cm-formatting-hashtag) {\n  border-top: var(--tag-border-width) solid var(--tag1);\n  border-bottom: var(--tag-border-width) solid var(--tag1);\n}\n\nbody:not(.tag-default) .tag[href ^=\"#important\"]:not(.token) {\n  background-color: var(--stag1-bg) !important;\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-important:not(.cm-formatting-hashtag) {\n  font-family: var(--font-family-special-tag) !important;\n  font-weight: 600;\n  background-color: var(--stag1-bg) !important;\n  color: var(--white) !important;\n  font-size: calc(var(--font-size-tag) - 0.3em);\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href^=\"#重要\"]:not(.token) {\n  background-color: var(--stag1-bg) !important;\n  font-weight: 600;\n  font-family: Webdings, 'Microsoft YaHei';\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href^=\"#complete\"]:not(.token) {\n  background-color: var(--stag3-bg) !important;\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-complete:not(.cm-formatting-hashtag) {\n  font-family: var(--font-family-special-tag) !important;\n  font-weight: 600;\n  background-color: var(--stag3-bg) !important;\n  color: var(--white) !important;\n  font-size: 0.95em;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href^=\"#完成\"]:not(.token) {\n  background-color: var(--stag3-bg) !important;\n  font-family: Origin, 'Microsoft YaHei';\n  font-weight: 600;\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href ^=\"#inprogress\"]:not(.token) {\n  background-color: var(--stag2-bg) !important;\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-inprogress:not(.cm-formatting-hashtag) {\n  font-family: var(--font-family-special-tag) !important;\n  font-weight: 600;\n  background-color: var(--stag2-bg) !important;\n  color: var(--white) !important;\n  font-size: 0.95em;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href ^=\"#进行中\"]:not(.token) {\n  background-color: var(--stag2-bg) !important;\n  font-weight: 600;\n  font-family: Wingdings, 'Microsoft YaHei';\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href ^=\"#dailynote\"]:not(.token) {\n  background-color: var(--tag-dailynote-bg) !important;\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href ^=\"#dailynote\"]::after {\n  content: ' 🐈';\n  font-size: var(--font-size-emoji-after-tag);\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-tag-dailynote:not(.cm-formatting-hashtag)::after {\n  content: ' 🐈';\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-dailynote:not(.cm-formatting-hashtag) {\n  font-family: var(--font-family-special-tag) !important;\n  font-weight: 600;\n  background-color: var(--tag-dailynote-bg) !important;\n  color: var(--white) !important;\n  font-size: 0.95em;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href ^=\"#weeklynote\"]:not(.token) {\n  background-color: var(--tag-weeklynote-bg) !important;\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href^=\"#weeklynote\"]::after {\n  content: ' 🥑';\n  font-size: var(--font-size-emoji-after-tag);\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-tag-weeklynote:not(.cm-formatting-hashtag)::after {\n  content: ' 🥑';\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-weeklynote:not(.cm-formatting-hashtag) {\n  font-family: var(--font-family-special-tag) !important;\n  font-weight: 600;\n  background-color: var(--tag-weeklynote-bg) !important;\n  color: var(--white) !important;\n  font-size: 0.95em;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href ^=\"#questions\"]:not(.token) {\n  background-color: var(--tag-questions-bg) !important;\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href^=\"#questions\"]::after {\n  content: ' ❓';\n  font-size: var(--font-size-emoji-after-tag);\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-tag-questions:not(.cm-formatting-hashtag)::after {\n  content: ' ❓';\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-questions:not(.cm-formatting-hashtag) {\n  font-family: var(--font-family-special-tag) !important;\n  font-weight: 600;\n  background-color: var(--tag-questions-bg) !important;\n  color: var(--white) !important;\n  font-size: 0.95em;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href ^=\"#ideas\"]:not(.token) {\n  background-color: var(--tag-ideas-bg) !important;\n  font-weight: 600;\n  font-family: var(--font-family-special-tag) !important;\n  color: var(--white) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .tag[href^=\"#ideas\"]::after {\n  content: ' 💡';\n  font-size: var(--font-size-emoji-after-tag);\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-tag-ideas:not(.cm-formatting-hashtag)::after {\n  content: ' 💡';\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-ideas:not(.cm-formatting-hashtag) {\n  background-color: var(--tag-ideas-bg) !important;\n  font-family: var(--font-family-special-tag) !important;\n  font-weight: 600;\n  color: var(--white) !important;\n  font-size: 0.95em;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-important {\n  background-color: var(--stag1-bg) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-weeklynote {\n  background-color: var(--tag-weeklynote-bg) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-dailynote {\n  background-color: var(--tag-dailynote-bg) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-ideas {\n  background-color: var(--tag-ideas-bg) !important;\n  filter: hue-rotate(0) !important;\n}\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-inprogress {\n  background-color: var(--stag2-bg) !important;\n  filter: hue-rotate(0) !important;\n}\n\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-questions {\n  background-color: var(--tag-questions-bg) !important;\n  filter: hue-rotate(0) !important;\n}\nbody:not(.tag-default) .cm-s-obsidian:not([class=\"markdown-source-view cm-s-obsidian mod-cm6\"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-complete {\n  background-color: var(--stag3-bg) !important;\n  filter: hue-rotate(0) !important;\n}\n\n/*source mode*/\ndiv[class=\"markdown-source-view cm-s-obsidian mod-cm6\"] span.cm-hashtag {\n  background-color: transparent !important;\n  color: var(--text-muted) !important;\n  text-decoration: underline;\n}\n\ndiv[class=\"markdown-source-view cm-s-obsidian mod-cm6\"] span.cm-hashtag,\ndiv[class=\"markdown-source-view cm-s-obsidian mod-cm6\"] span.cm-hashtag-begin,\ndiv[class=\"markdown-source-view cm-s-obsidian mod-cm6\"] span.cm-hashtag-end,\ndiv[class=\"markdown-source-view cm-s-obsidian mod-cm6\"] span.cm-hashtag-begin+.cm-hashtag.cm-meta {\n  padding: 0 !important;\n}\n\n/*thanks to Klaas from Obsidian Members Group on discord*/\n/* Selection highlight */\n.suggestion-item.is-selected {\n  background-color: var(--theme-color-translucent-015);\n}\n\n:is(.markdown-preview-view,.markdown-rendered):not([class*=\"kanban-plugin\"]) {\n  position: relative;\n  overflow-y: auto;\n  overflow-wrap: break-word;\n  color: var(--text-normal);\n  user-select: text;\n}\n\n/*edit mode font size*/\npre.CodeMirror-line {\n  font-size: var(--font-size-edit-normal) !important;\n}\n\n/*preview mode font size*/\np {\n  font-size: var(--font-size-preview-normal);\n}\n\n:is(.markdown-preview-view,.markdown-rendered) p {\n  margin-block-start: calc(var(--paragraph-spacing) * 1em);\n  margin-block-end: calc(var(--paragraph-spacing) * 1em);\n}\n\n \n\n.markdown-source-view.mod-cm6 div.cm-line:not(.HyperMD-codeblock):not(.HyperMD-header):not(:has(>br:only-child)) {\n  padding-bottom: calc((var(--paragraph-spacing) - 1) * 1em) ;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) :is(ol,ul) {\n  margin-block-start: calc((var(--line-height-list) - 2) * 1em);\n  margin-block-end: calc((var(--line-height-list) - 2) * 1em);\n}\n\n\n\nbody.toggle-paragraph-spacing :is(.markdown-preview-view,.markdown-rendered) p>br {\n  content:\" \";\n  margin-top: calc((var(--paragraph-spacing) - 1) * 1em);\n  display: block;\n}\n\nbody.toggle-left-aligned-content .markdown-source-view.mod-cm6.is-readable-line-width:not(.is-rtl) .cm-scroller > *:first-child {\n  margin-left: 0;\n}\n\nbody.toggle-left-aligned-content :is(.markdown-preview-view,.markdown-rendered).is-readable-line-width:not(.matrix) .markdown-preview-sizer, .markdown-source-view.is-readable-line-width:not(.matrix) .CodeMirror, :is(.markdown-preview-view,.markdown-rendered):not(.matrix) .is-readable-line-width :is(.markdown-preview-section,.markdown-rendered), :is(.markdown-preview-view,.markdown-rendered):not(.matrix) .is-readable-line-width :is(.markdown-preview-section,.markdown-rendered) > div, :is(.markdown-preview-view,.markdown-rendered).is-readable-line-width:not(.matrix) :is(.markdown-preview-section,.markdown-rendered) {\n  margin-left: 0;\n}\n\n\n\nbody.text-indentation-two-em .workspace-leaf-content[data-type=\"markdown\"] .markdown-source-view.mod-cm6 div.cm-line:not(:is(.hr,.HyperMD-header,.HyperMD-quote,.HyperMD-list-line,.HyperMD-codeblock)),\n.markdown-source-view.mod-cm6.indent div.cm-line:not(:is(.hr,.HyperMD-header,.HyperMD-quote,.HyperMD-list-line,.HyperMD-codeblock)) {\n  text-indent: 2em;\n}\n\nbody.text-indentation-two-em  .workspace-leaf-content[data-type=\"markdown\"]  .markdown-source-view.mod-cm6 div.cm-line:not(:is(.hr,.HyperMD-header,.HyperMD-quote,.HyperMD-list-line,.HyperMD-codeblock)) .cm-hmd-frontmatter:first-of-type,\n.markdown-source-view.mod-cm6.indent div.cm-line:not(:is(.hr,.HyperMD-header,.HyperMD-quote,.HyperMD-list-line,.HyperMD-codeblock)) .cm-hmd-frontmatter:first-of-type {\n  margin-left: -2em;\n}\nbody.text-indentation-two-em .markdown-source-view.mod-cm6 div.has-banner.cm-line:not(.HyperMD-header) .cm-def.cm-hmd-frontmatter,\nbody.text-indentation-two-em .markdown-source-view.mod-cm6 div.has-banner.cm-line:not(.HyperMD-header) .collapse-indicator,\n.markdown-source-view.mod-cm6.indent div.has-banner.cm-line:not(.HyperMD-header) .cm-def.cm-hmd-frontmatter,\n.markdown-source-view.mod-cm6.indent div.has-banner.cm-line:not(.HyperMD-header) .collapse-indicator {\n  margin-left: 0;\n  left: -3em;\n}\n\nbody.text-indentation-two-em [data-type=\"markdown\"] div[class=\"el-p\"]:not(blockquote) > p,\n[data-type=\"markdown\"] :is(.markdown-preview-view,.markdown-rendered).indent div[class=\"el-p\"]:not(blockquote) > p {\n  text-indent: 2em;\n}\n\n\nbody.text-indentation-two-em [data-type=\"markdown\"] div[class=\"el-p\"]:not(blockquote) > p>br,\n[data-type=\"markdown\"] :is(.markdown-preview-view,.markdown-rendered).indent div[class=\"el-p\"]:not(blockquote) >  p>br {\n  content: ' ';\n  white-space: pre;\n  line-height: calc((var(--paragraph-spacing) + 0.3) * 1em);\n  display:unset;\n}\nbody.text-indentation-two-em [data-type=\"markdown\"] div[class=\"el-p\"]:not(blockquote) > p>br::after,\n[data-type=\"markdown\"] :is(.markdown-preview-view,.markdown-rendered).indent div[class=\"el-p\"]:not(blockquote) >p>br::after {\n  content: '\\A\\9\\9';\n}\n\nbody.justify-align div[data-type=\"markdown\"] div.cm-line:not(.HyperMD-codeblock),\nbody.justify-align div[data-type=\"markdown\"] :is(.markdown-preview-view,.markdown-rendered),\n.markdown-source-view.text-justify div.cm-line:not(.HyperMD-codeblock),\n:is(.markdown-preview-view,.markdown-rendered).text-justify {\n  text-align: justify;\n  hyphens: auto;\n}\n\n/*edit mode blockquote font size*/\n.cm-s-obsidian span.cm-quote {\n  font-size: var(--font-size-edit-blockquote);\n}\n\n.CodeMirror-code span.cm-formatting.cm-formatting-quote.cm-formatting-quote.cm-quote::before {\n  content: \"\";\n  border-left: 7px solid var(--theme-color);\n  border-radius: 0; /*5px 0 0 5px;*/\n  height: 100%;\n  margin-left: -7px;\n  position: absolute;\n}\n\n.markdown-source-view.mod-cm6 .cm-blockquote-border {\n  border-color: var(--theme-color);\n}\n\n.CodeMirror-line span.cm-formatting-quote + *::before,\n.CodeMirror-line span.cm-formatting-quote + span.cm-hmd-indent-in-quote + span.cm-quote:not(.cm-formatting-quote)::before,\n.CodeMirror-line span.cm-inline-code + *::before,\n.CodeMirror-line span.cm-highlight + *::before,\n.CodeMirror-line span.cm-quote + *::before,\n.CodeMirror-line span.cm-hmd-html-end + *::before,\n.CodeMirror-line span.cm-formatting-math + *::before {\n  border-left: none;\n}\n\n/*Quote (> lorem ipsum ...) in edit mode with left border rendered instead of >*/\ndiv:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-quote {\n  color: transparent !important;\n}\n\n.CodeMirror-line span.cm-formatting-quote {\n  color: var(--red) !important;\n}\n\n.HyperMD-quote.CodeMirror-line {\n  background-color: var(--background-blockquote);\n}\n\n.cm-quote:not([class*=\"link\"]):not([class*=\"string\"]):not([class*=\"em\"]):not([class*=\"strong\"]) {\n  color: var(--text-normal);\n}\n\n/* highlight */\n:is(.markdown-preview-view,.markdown-rendered) mark {\n  background-color: var(--text-highlight-bg);\n  padding: 1px 2px;\n  color: var(--text-highlight);\n  border-radius: var(--radius-xs);\n}\n\n.cm-s-obsidian span.cm-highlight,\n.cm-highlight.cm-quote {\n  color: var(--text-highlight);\n  padding: 2px 0 1px 0;\n}\n\nbody:not(.no-rounded-corners-highlight):not(.all-rounded-corners-highlight) .cm-s-obsidian .cm-widgetBuffer[aria-hidden=\"true\"]+span.cm-highlight:has(+ .cm-widgetBuffer[aria-hidden=\"true\"]) {\n  border-radius: 3px;\n  padding: 1px 2px;\n}\n\n.cm-s-obsidian span.cm-formatting-highlight {\n  border-radius: 3px 0 0 3px;\n}\n\n.cm-s-obsidian span[class=\"cm-highlight\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"cm-list\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"cm-quote\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"cm-header\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"cm-formatting-code\"][class*=\"cm-inline-code\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"cm-formatting-link\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"cm-hmd-internal-link\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"cm-strong\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"cm-em\"]+span.cm-formatting-highlight,\n.cm-s-obsidian span[class*=\"cm-highlight\"][class*=\"strikethrough\"]+span.cm-formatting-highlight {\n  border-radius: 0 3px 3px 0;\n}\n\nspan.cm-formatting.cm-formatting-code.cm-highlight.cm-inline-code,\nspan.cm-highlight.cm-inline-code {\n  border-radius: 0;\n  padding: 2px 0 1px !important;\n}\n\n.theme-dark .cm-formatting.cm-formatting-highlight.cm-strong.cm-em.cm-highlight {\n  background-image: initial;\n  background-clip: initial;\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: initial;\n  background-color: var(--text-highlight-bg);\n  color: var(--text-highlight);\n}\n\n.CodeMirror-lines span.cm-strong.cm-em.cm-highlight {\n  padding: 0 1px 1px;\n}\n\n/*cloze*/\nbody:not(.remove-cloze-style) :is(.markdown-preview-view,.markdown-rendered) mark > del,\n:is(.markdown-preview-view,\n.markdown-rendered).cloze mark > del {\n  background-color: var(--cloze-bg-color);\n  color: var(--cloze-bg-color);\n  text-decoration: underline var(--cloze-decoration) var(--cloze-decoration-color);\n  border-radius:5px;\n  padding:2px;\n}\n\nbody:not(.remove-cloze-style) .cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~span.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-highlight.cm-strikethrough:not(.cm-em),\nbody:not(.remove-cloze-style) .cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~span.cm-formatting-strikethrough.cm-highlight.cm-strikethrough,\n.markdown-source-view.cloze .cm-formatting.cm-formatting-highlight.cm-highlight~span.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-highlight.cm-strikethrough:not(.cm-em),\n.markdown-source-view.cloze *:not([class*=\"cm-formatting-em\"]).cm-formatting.cm-formatting-highlight.cm-highlight~span.cm-formatting-strikethrough.cm-highlight.cm-strikethrough {\n  text-decoration: underline var(--cloze-decoration) var(--cloze-decoration-color);\n  background-color: transparent !important;\n}\n\nbody:not(.remove-cloze-style) .cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-formatting-strikethrough~span.cm-highlight.cm-strikethrough:not(.cm-em):hover,\n.markdown-source-view.cloze .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-formatting-strikethrough~span.cm-highlight.cm-strikethrough:not(.cm-em):hover {\n  background-color: var(--text-highlight-bg);\n  color: var(--text-normal);\n  transition: all 400ms ease-in-out;\n}\n\nbody:not(.remove-cloze-style) :is(.markdown-preview-view,\n.markdown-rendered) mark > del:hover,\n:is(.markdown-preview-view,\n.markdown-rendered).cloze mark > del:hover {\n  background-color: transparent;\n  color: var(--accent-strong);\n  transition: all 400ms ease-in-out;\n}\n\nbody:not(.remove-cloze-style) :is(.markdown-preview-view,\n.markdown-rendered) em > mark > del,\n:is(.markdown-preview-view,\n.markdown-rendered).cloze em > mark > del {\n  color: transparent;\n  background-color: transparent;\n  padding: 0 2px;\n  text-decoration: underline var(--cloze-decoration-2) var(--cloze-decoration-color-2) !important;\n}\n\nbody:not(.remove-cloze-style) :is(.markdown-preview-view,\n.markdown-rendered) em > mark > del:hover,\n:is(.markdown-preview-view,\n.markdown-rendered).cloze em > mark > del:hover {\n  cursor: pointer;\n  color: transparent;\n}\n\nbody:not(.remove-cloze-style) :is(.markdown-preview-view,\n.markdown-rendered) em > mark > del:active,\n:is(.markdown-preview-view,\n.markdown-rendered).cloze em > mark > del:active {\n  color: var(--accent-strong);\n  background-color: transparent;\n  transition: all 400ms ease-in-out;\n}\n\nbody:not(.remove-cloze-style) .cm-s-obsidian .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough:not([class*=\"formatting\"]),\nbody:not(.remove-cloze-style) .cm-s-obsidian .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough:not([class*=\"formatting\"]),\n.markdown-source-view.cloze .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough,\n.markdown-source-view.cloze .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough {\n  color: var(--accent-strong) !important;\n  text-decoration: underline var(--cloze-decoration-2) var(--cloze-decoration-color-2) !important;\n}\nbody:not(.remove-cloze-style) .cm-s-obsidian .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough,\nbody:not(.remove-cloze-style) .cm-s-obsidian .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough{\n  background-color: transparent !important;\n}\nbody:not(.remove-cloze-style) .markdown-source-view:not([class*=\"cm5\"]) .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight,\n.markdown-source-view:not([class*=\"cm5\"]).cloze .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight {\n  background-color: var(--bg-color-highlight-1) !important;\n  color: var(--color-highlight-1);\n  font-style: normal;\n}\n\nbody:not(.remove-cloze-style) :is(.markdown-preview-view,\n.markdown-rendered) em > del,\n:is(.markdown-preview-view,\n.markdown-rendered).cloze em > del {\n  background-color: var(--cloze-bg-color-3);\n  color: var(--cloze-bg-color-3);\n  font-style: normal;\n  text-decoration: underline var(--cloze-decoration-3) var(--cloze-decoration-color-3);\n}\n\nbody:not(.remove-cloze-style) :is(.markdown-preview-view,\n.markdown-rendered) em > del:hover,\n:is(.markdown-preview-view,\n.markdown-rendered).cloze em > del:hover {\n  background-color: transparent;\n  color: var(--text-normal);\n  transition: all 400ms ease-in-out;\n}\n\nbody:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-em.cm-strikethrough,\n.markdown-source-view.is-live-preview.cloze .cm-em.cm-strikethrough {\n  background-color: var(--cloze-bg-color-3);\n  color: var(--cloze-bg-color-3);\n  font-style: normal;\n  text-decoration: underline var(--cloze-decoration-3) var(--cloze-decoration-color-3);\n}\n\nbody:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-em.cm-strikethrough:hover,\n.markdown-source-view.is-live-preview.cloze .cm-em.cm-strikethrough:hover {\n  background-color: transparent !important;\n  color: var(--text-normal) !important;\n  transition: all 400ms ease-in-out;\n}\n\nbody:not(.remove-cloze-style) .cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-strikethrough,\n.markdown-source-view.cloze .cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-strikethrough {\n  color: var(--accent-strong);\n  text-decoration: none;\n}\nbody:not(.remove-cloze-style) .cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-strikethrough~span.cm-em.cm-strikethrough:not([class*=\"formatting\"]),\n.markdown-source-view.cloze .cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-strikethrough~span.cm-em.cm-strikethrough:not([class*=\"formatting\"]) {\n  font-style: normal;\n  color: var(--accent-strong);\n  text-decoration: underline var(--cloze-decoration-3) var(--cloze-decoration-color-3);\n}\n\nspan.cm-strong.cm-em.cm-highlight {\n  background-image: initial;\n  background-clip: initial;\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: var(--strong-em-highlight-color);\n  background-color: var(--text-highlight-bg);\n}\n\n\n\n/* body.default-icons .nav-folder.mod-root .nav-folder > .nav-folder-children {\n  margin: 0 0 0 16px;\n} */\n\n/* .nav-folder.mod-root .nav-folder > .nav-folder-children {\n  margin: 0 0 0 13px;\n} */\n\n.nav-folder.mod-root .nav-folder > .nav-folder-children:hover {\n  border-left-color: var(--theme-color-translucent-04);\n}\n\n.view-header-title-container:after,\n.view-header-title-container::before {\n  display: none;\n}\n\n.workspace-leaf.mod-active .view-header-icon {\n  color: var(--interactive-accent);\n  cursor: grab;\n  position: relative;\n}\n\nbody.hide-titlebar-text .titlebar-text {\n  display: none\n}\n\n.titlebar-left {\n  width: 30px;\n}\n\n/*change color when hover*/\n.titlebar-button.mod-back:hover,\n.titlebar-button.mod-forward:hover,\n.titlebar-button.mod-maximize:hover,\n.titlebar-button.mod-minimize:hover,\n.workspace-ribbon-collapse-btn:hover {\n  color: var(--theme-color);\n}\n\n.titlebar-button {\n  -webkit-app-region: no-drag;\n  padding: 0 9px;\n  cursor: pointer;\n  opacity: 0.8;\n}\n\n.titlebar-button:hover {\n  opacity: 1;\n}\n\n.workspace-tab-header-inner {\n  padding: 3px 9px;\n}\n\n/*reduce space of header buttons*/\nbody:not(.is-mobile) div.nav-header {\n  padding: 3px 2px;\n  line-height: 1;\n}\n\ndiv.nav-buttons-container {\n  margin: 1px;\n}\n\n.workspace-leaf-content[data-type='file-explorer'] .nav-buttons-container {\n  margin-right: 2px;\n  border-radius: var(--radius-s);\n}\n\ninput.search-input {\n  margin: -2px 0px -3px 0px;\n}\n\n.nav-action-button {\n  margin: 0px 5px !important;\n}\n\n\n/*tag page button*/\n.nav-buttons-container>.nav-action-button,\n.nav-buttons-container>.nav-action-button.is-active {\n  padding: 3px 2px 1px;\n}\n\n.titlebar-text {\n  font-size: var(--font-size-obsidian-titlebar);\n  font-weight: 600;\n}\n\nbody:not(.is-focused) .titlebar-text {\n  opacity: 0.5;\n}\n\n.side-dock-ribbon-tab:hover,\n.side-dock-ribbon-action:hover {\n  color: var(--theme-color);\n}\n\n.side-dock-settings {\n  margin-top: auto;\n  margin-bottom: 2px;\n}\n\n.workspace-leaf-content[data-type=\"file-explorer\"] .nav-folder.mod-root>.nav-folder-title {\n  padding-left: 5px;\n  font-size: var(--font-size-vault-name);\n  font-family: var(--font-family-vault);\n  font-weight: bolder;\n  text-shadow: 1px 1px 6px var(--theme-color-translucent-04);\n  cursor: default;\n}\n\n.theme-dark .nav-folder.mod-root>.nav-folder-title {\n  color: var(--theme-color);\n  text-shadow: none;\n}\n\n.theme-dark .nav-folder.mod-root>.nav-folder-title:hover {\n  background-color: var(--background-secondary-alt);\n  color: var(--text-muted);\n  opacity: 1;\n}\n\n.theme-light .nav-folder.mod-root>.nav-folder-title:hover {\n  background-color: var(--background-secondary-alt);\n  text-shadow: 1px 1px 5px #ffffff7c;\n  color: var(--theme-color);\n  opacity: 1;\n}\n\n/*=======search panel=======*/\n.search-result-file-title {\n  color: var(--search-result-file-title-color);\n}\n\n.workspace-leaf-content[data-type=\"outgoing-link\"] .search-result-file-match {\n  padding: 4px 10px;\n  left: 0;\n}\n\n.backlink-pane .search-result-container {\n  margin-left: 3px;\n}\n\n.search-result-file-matches {\n  border-bottom: none;\n  margin-bottom: 0;\n}\n\n.tree-item-self.is-clickable:hover {\n  background-color: transparent;\n  color: var(--search-result-file-title-color);\n}\n\n.tree-item-self.is-clickable.is-collapsed .tree-item-inner {\n  opacity: 0.6;\n}\n\n.tag-container .tree-item-self.tag-pane-tag.is-clickable:hover {\n  background-color: var(--theme-color-translucent-015);\n  color: var(--text-normal);\n}\n\n.outline .tree-item-self.is-clickable:hover {\n  background-color: var(--theme-color-translucent-015);\n  color: var(--text-normal);\n}\n.outline .tree-item-self {\n  font-size: var(--font-size-outline);\n}\n\n.search-result-file-match:hover {\n  background-color: var(--background-secondary-alt);\n  color: var(--text-normal);\n}\n\nspan.search-result-file-matched-text {\n  color: var(--search-text);\n  background-color: var(--search-result-file-matched-bg);\n  opacity: 0.8;\n}\n\n.is-flashing {\n  background-color: var(--search-result-file-matched-bg);\n}\n\n/* background of search result */\n.search-result {\n  border-radius: var(--radius-s);\n  margin: 0 0 0 1px;\n}\n\n.tree-item.search-result .tree-item-self.search-result-file-title.is-clickable {\n  padding-left: 15px;\n}\n\nspan.obsidian-search-match-highlight {\n  background-color: var(--text-search-highlight-bg) !important;\n}\n\n.search-result-file-match:after {\n  display: none;\n}\n\n.search-input {\n  display: block;\n  margin: 0 auto 10px auto;\n  width: calc(100% - 20px);\n}\n\n.nav-action-button>svg {\n  width: 17px;\n  height: 17px;\n}\n\n/*code box unfold icon*/\n.CodeMirror-foldgutter-open.CodeMirror-guttermarker-subtle::after {\n  color: var(--text-accent);\n}\n\n.CodeMirror-gutter.CodeMirror-linenumbers,\n.CodeMirror-gutter.CodeMirror-foldgutter {\n  background-color: transparent;\n}\n\n/*checkbox*/\nspan.cm-formatting-task.cm-property {\n  color: var(--text-accent);\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-reading-view) .task-list-item-checkbox {\n  top: 0.25em;\n}\n\n/*\n.markdown-source-view.mod-cm6 .task-list-label .task-list-item-checkbox {\n  margin-left: -1.5px;\n  margin-top: 0px;\n  margin-bottom: 2px;\n  margin-right:3px;\n  vertical-align: middle;\n  top: 0;\n}\n.markdown-source-view.mod-cm6 .cm-formatting-list-ol ~ .task-list-label .task-list-item-checkbox {\n  margin-left: 3px;\n}\n*/\ninput[type=checkbox] {\n  -webkit-appearance: none;\n  appearance: none;\n  border-radius: var(--radius-xs);\n  border: 1px solid var(--background-modifier-border-checkbox);\n  padding: 0;\n  margin: 0 2px 2px 0;\n  width: var(--checkbox-size);\n  height: var(--checkbox-size);\n}\ninput[type=checkbox]:hover {\n  border: 1px solid var(--theme-color);\n}\n\nul > li.task-list-item.is-checked,\n.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task] {\n  text-decoration: none;\n}\n\nbody.toggle-checked-decoration .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=\"x\"], \nbody.toggle-checked-decoration .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=\"X\"],\nbody.toggle-checked-decoration ul > li.task-list-item[data-task=\"x\"], \nbody.toggle-checked-decoration ul > li.task-list-item[data-task=\"X\"] {\n  text-decoration: var(--checklist-done-decoration);\n}\n\n.task-list-item-checkbox {\n  filter: hue-rotate(0);\n}\n\nbody.enable-alternative-checkboxes input[type=checkbox]:checked:after {\n  display: none;\n}\n\nbody.enable-alternative-checkboxes .is-flashing input[type=checkbox]:checked,\nbody.enable-alternative-checkboxes input[type=checkbox]:checked {\n  border-radius: var(--radius-xs);\n  border: none;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 120%;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"m10 15.586-3.293-3.293-1.414 1.414L10 18.414l9.707-9.707-1.414-1.414z\"></path></svg>');\n  background-color: var(--checkbox-color-0);\n}\n\nbody:not(.unmute-checkbox-animation) .is-flashing input.task-list-item-checkbox[type=checkbox]:checked:hover,\nbody:not(.unmute-checkbox-animation) input.task-list-item-checkbox[type=checkbox]:checked:hover {\n  animation: tada 1s;\n  filter: hue-rotate(160deg) !important;\n}\n\n\n/* SVG Plane-right; bujo: task-migrated/waiting */\nbody.enable-alternative-checkboxes input[data-task=\">\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\">\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\">\"]>p>input:checked {\n  background-color: var(--checkbox-color-1);\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M10.061 19.061 17.121 12l-7.06-7.061-2.122 2.122L12.879 12l-4.94 4.939z\"></path></svg>');\n}\nbody.enable-alternative-checkboxes :is(.markdown-preview-view,.markdown-rendered) ul.contains-task-list li.task-list-item.is-checked[data-task=\">\"],\nbody.enable-alternative-checkboxes :is(.markdown-preview-view,.markdown-rendered) ol.contains-task-list li.task-list-item.is-checked[data-task=\">\"],\nbody.enable-alternative-checkboxes .markdown-source-view.is-live-preview input.task-list-item-checkbox[data-task=\">\"] {\n  text-decoration: none !important;\n  color: var(--text-normal);\n}\n/* SVG Plane-left; bujo: task-scheduled/delegated */\nbody.enable-alternative-checkboxes input[data-task=\"<\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"<\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"<\"]>p>input:checked {\n  background-color: var(--checkbox-color-2);\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M13.939 4.939 6.879 12l7.06 7.061 2.122-2.122L11.121 12l4.94-4.939z\"></path></svg>');\n}\nbody.enable-alternative-checkboxes input[data-task=\"?\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"?\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"?\"]>p>input:checked {\n  background-color: var(--checkbox-color-3);\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"red\"><path d=\"M12 4C9.243 4 7 6.243 7 9h2c0-1.654 1.346-3 3-3s3 1.346 3 3c0 1.069-.454 1.465-1.481 2.255-.382.294-.813.626-1.226 1.038C10.981 13.604 10.995 14.897 11 15v2h2v-2.009c0-.024.023-.601.707-1.284.32-.32.682-.598 1.031-.867C15.798 12.024 17 11.1 17 9c0-2.757-2.243-5-5-5zm-1 14h2v2h-2z\"></path></svg>');\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"!\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"!\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"!\"]>p>input:checked {\n  background-color: var(--checkbox-color-4);\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"rgb(212, 163, 0)\"><path d=\"M9 20h6v2H9zm7.906-6.288C17.936 12.506 19 11.259 19 9c0-3.859-3.141-7-7-7S5 5.141 5 9c0 2.285 1.067 3.528 2.101 4.73.358.418.729.851 1.084 1.349.144.206.38.996.591 1.921H8v2h8v-2h-.774c.213-.927.45-1.719.593-1.925.352-.503.726-.94 1.087-1.363zm-2.724.213c-.434.617-.796 2.075-1.006 3.075h-2.351c-.209-1.002-.572-2.463-1.011-3.08a20.502 20.502 0 0 0-1.196-1.492C7.644 11.294 7 10.544 7 9c0-2.757 2.243-5 5-5s5 2.243 5 5c0 1.521-.643 2.274-1.615 3.413-.373.438-.796.933-1.203 1.512z\"></path></svg>');\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"+\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"+\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"+\"]>p>input:checked {\n  background-color: var(--checkbox-color-5);\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M19 11h-6V5h-2v6H5v2h6v6h2v-6h6z\"></path></svg>');\n}\nbody.enable-alternative-checkboxes input[data-task=\"-\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"-\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"-\"]>p>input:checked {\n  background-color: var(--checkbox-color-6);\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M5 11h14v2H5z\"></path></svg>');\n}\n\nbody.enable-alternative-checkboxes ul > li[data-task=\"-\"].task-list-item.is-checked,\nbody.enable-alternative-checkboxes .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=\"-\"] {\n  text-decoration: line-through !important;\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"“\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"“\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"“\"]>p>input:checked {\n  background-color: transparent;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" style=\"fill: rgb(47, 167, 188);transform: ;msFilter:;\"><path d=\"M3.691 6.292C5.094 4.771 7.217 4 10 4h1v2.819l-.804.161c-1.37.274-2.323.813-2.833 1.604A2.902 2.902 0 0 0 6.925 10H10a1 1 0 0 1 1 1v7c0 1.103-.897 2-2 2H3a1 1 0 0 1-1-1v-5l.003-2.919c-.009-.111-.199-2.741 1.688-4.789zM20 20h-6a1 1 0 0 1-1-1v-5l.003-2.919c-.009-.111-.199-2.741 1.688-4.789C16.094 4.771 18.217 4 21 4h1v2.819l-.804.161c-1.37.274-2.323.813-2.833 1.604A2.902 2.902 0 0 0 17.925 10H21a1 1 0 0 1 1 1v7c0 1.103-.897 2-2 2z\"></path></svg>');\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"…\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"…\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"…\"]>p>input:checked {\n  background-color: transparent;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" style=\"fill: rgb(128, 128, 128);transform: ;msFilter:;\"><path d=\"M10 10h4v4h-4zm6 0h4v4h-4zM4 10h4v4H4z\"></path></svg>');\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"/\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"/\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"/\"]>p>input:checked {\n  background-color: transparent;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"rgb(213, 155, 48)\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.94-.49-7-3.85-7-7.93s3.05-7.44 7-7.93v15.86zm2-15.86c1.03.13 2 .45 2.87.93H13v-.93zM13 7h5.24c.25.31.48.65.68 1H13V7zm0 3h6.74c.08.33.15.66.19 1H13v-1zm0 9.93V19h2.87c-.87.48-1.84.8-2.87.93zM18.24 17H13v-1h5.92c-.2.35-.43.69-.68 1zm1.5-3H13v-1h6.93c-.04.34-.11.67-.19 1z\"/></svg>');\n}\n\nbody.enable-alternative-checkboxes input[data-task=\".\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\".\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\".\"]>p>input:checked {\n  background-color: transparent;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"rgb(115, 115, 115)\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3-8c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3z\"/></svg>');\n}\n\n\n\nbody.enable-alternative-checkboxes input[data-task=\"A\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"A\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"A\"]>p>input:checked {\n  background-color: transparent;\n  background-image: url('data:image/svg+xml; utf8, <svg width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" overflow=\"hidden\"><defs><clipPath id=\"clip0\"><rect x=\"1066\" y=\"514\" width=\"16\" height=\"16\"/></clipPath></defs><g clip-path=\"url(#clip0)\" transform=\"translate(-1066 -514)\"><rect x=\"1066\" y=\"514\" width=\"16.0001\" height=\"16.0002\"/></g></svg>');\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"D\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"D\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"D\"]>p>input:checked {\n  background-color: transparent;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"rgb(218, 78, 78)\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M16 9v10H8V9h8m-1.5-6h-5l-1 1H5v2h14V4h-3.5l-1-1zM18 7H6v12c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7z\"/></svg>');\n}\n\nbody.enable-alternative-checkboxes input:is([data-task=\"￥\"],[data-task=\"$\"]):checked,\nbody.enable-alternative-checkboxes li:is([data-task=\"￥\"],[data-task=\"$\"])>input:checked,\nbody.enable-alternative-checkboxes li:is([data-task=\"￥\"],[data-task=\"$\"])>p>input:checked {\n  background-color: transparent;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" style=\"fill: rgb(57, 211, 49);transform: ;msFilter:;\"><path d=\"M12 6C7.03 6 2 7.546 2 10.5v4C2 17.454 7.03 19 12 19s10-1.546 10-4.5v-4C22 7.546 16.97 6 12 6zm-8 8.5v-1.197a9.989 9.989 0 0 0 2 .86v1.881c-1.312-.514-2-1.126-2-1.544zm12 .148v1.971c-.867.179-1.867.31-3 .358v-2a21.75 21.75 0 0 0 3-.329zm-5 2.33a18.788 18.788 0 0 1-3-.358v-1.971c.959.174 1.972.287 3 .33v1.999zm7-.934v-1.881a9.931 9.931 0 0 0 2-.86V14.5c0 .418-.687 1.03-2 1.544zM12 13c-5.177 0-8-1.651-8-2.5S6.823 8 12 8s8 1.651 8 2.5-2.823 2.5-8 2.5z\"></path></svg>');\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"*\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"*\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"*\"]>p>input:checked {\n  background-color: transparent;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"rgb(218, 192, 22)\"><path d=\"M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z\"></path></svg>');\n}\n\n@keyframes fade-left {\n  0% {-webkit-transform: translateX(-10px); transform: translateX(-10px); opacity: 0;}\n  75% {-webkit-transform: translateX(0); transform: translateX(0); opacity: 1;}\n}\n\n@keyframes tada {\n  from {-webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1);}\n  10%,\n  20% {-webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);}\n  30%,\n  50%,\n  70%,\n  90% {-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);}\n  40%,\n  60%,\n  80% {-webkit-transform: rotate3d(0, 0, 1, -10deg); transform: rotate3d(0, 0, 1, -10deg);}\n  to {-webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1);}\n}\n\nbody.circular-checkbox input[type=checkbox] {\n  border-radius: 50%;\n}\n \n/* headers */\n/*编辑状态是否显示H1 H2标记*/\n/*适配Live preview模式*/\nbody.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header::before {\n  font-size: 0.6rem;\n  width: auto;\n  margin-right: 1px;\n  border-radius: var(--radius-xs);\n  color: var(--text-muted);\n  overflow: visible;\n  font-family: var(--font-interface);\n  font-weight: normal !important;\n}\n\nbody.clutter-free-headings div.mod-cm6.is-live-preview div:not(.cm-active).cm-line .cm-header ~ span.cm-header::before,\nbody.clutter-free-headings div.mod-cm6.is-live-preview div:not(.cm-active).cm-line .cm-header.cm-hmd-internal-link::before {\n  display: none;\n}\n\nbody.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-1::before {\n  content: 'H1';\n  margin-top: calc(var(--h1-size) - 0.1em);\n}\n\nbody.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-2::before {\n  content: 'H2';\n  margin-top: calc(var(--h2-size) - 0.2em);\n}\n\nbody.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-3::before {\n  content: 'H3';\n  margin-top: calc(var(--h3-size) - 0.2em);\n}\nbody.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-4::before {\n  content: 'H4';\n  margin-top: calc(var(--h4-size) - 0.3em);\n}\n\nbody.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-5::before {\n  content: 'H5';\n  margin-top: calc(var(--h5-size) - 0.4em);\n}\n\nbody.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-6::before {\n  content: 'H6';\n  margin-top: calc(var(--h6-size) - 0.4em);\n}\n\n/*适配source mode 模式*/\nbody.clutter-free-headings div.mod-cm6:not(.is-live-preview) div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header ~ span.cm-header::before {\n  display: none;\n}\nbody.clutter-free-headings div.mod-cm6:not(.is-live-preview) div:not(.cm-active).cm-line span.cm-formatting-header {\n  display:none;\n}\n/*适配传统模式*/\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line.hmd-inactive-line span.cm-formatting-header::before {\n  position: absolute;\n  margin-top: 10px;\n  font-size: 0.7rem;\n  width: auto;\n  margin-left: -18px;\n  padding: 0px 2px;\n  border-radius: var(--radius-xs);\n  color: var(--text-muted);\n  overflow: visible;\n  font-family: var(--font-default);\n  font-weight: normal !important;\n}\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line:not(.hmd-inactive-line) span.cm-formatting-header::before {\n  position: absolute;\n  margin-top: 10px;\n  font-size: 0.7rem;\n  width: auto;\n  margin-left: -6px;\n  border-radius: var(--radius-xs);\n  color: var(--text-muted);\n  overflow: visible;\n  font-family: var(--font-default);\n  font-weight: normal !important;\n}\n\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header {\n  color: transparent !important;\n  background: none;\n}\n\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-1::before {\n  content: 'H1';\n}\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-2::before {\n  content: 'H2';\n}\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-3::before {\n  content: 'H3';\n}\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-4::before {\n  content: 'H4';\n}\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-5::before {\n  content: 'H5';\n}\nbody.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-6::before {\n  content: 'H6';\n}\n\nbody.h1-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h1,\nbody.h1-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-1.cm-line {\n  border-bottom: var(--h1-underline-width, 2px) var(--h1-underline-style, solid) var(--h1-underline-color, var(--h1-color));\n}\nbody.h2-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h2,\nbody.h2-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-2.cm-line {\n  border-bottom: var(--h2-underline-width, 1px) var(--h2-underline-style, solid) var(--h2-underline-color, var(--h2-color));\n}\nbody.h3-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h3,\nbody.h3-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-3.cm-line {\n  border-bottom: var(--h3-underline-width, 1px) var(--h3-underline-style, solid) var(--h3-underline-color, var(--h3-color));\n}\nbody.h4-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h4,\nbody.h4-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-4.cm-line {\n  border-bottom: var(--h4-underline-width, 1px) var(--h4-underline-style, solid) var(--h4-underline-color, var(--h4-color));\n}\nbody.h5-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h5,\nbody.h5-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-5.cm-line {\n  border-bottom: var(--h5-underline-width, 1px) var(--h5-underline-style, solid) var(--h5-underline-color, var(--h5-color));\n}\nbody.h6-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h6,\nbody.h6-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-6.cm-line {\n  border-bottom: var(--h6-underline-width, 1px) var(--h6-underline-style, solid) var(--h6-underline-color, var(--h6-color));\n}\n\nbody.inline-title-toggle-underline .inline-title {\n  border-bottom: var(--inline-title-underline-width, 2px) var(--inline-title-underline-style, solid) var(--inline-title-underline-color, var(--h1-color));\n}\n\nbody.h1-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h1,\nbody.h2-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h2,\nbody.h3-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h3,\nbody.h4-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h4,\nbody.h5-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h5,\nbody.h6-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h6,\nbody.h1-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-1.cm-line,\nbody.h2-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-2.cm-line,\nbody.h3-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-3.cm-line,\nbody.h4-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-4.cm-line,\nbody.h5-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-5.cm-line,\nbody.h6-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-6.cm-line,\nbody.inline-title-toggle-short-underline .inline-title {\n  text-decoration: underline;\n}\n\nbody.header-1-background .cm-header-1,\nbody.header-1-background :is(.markdown-preview-view,.markdown-rendered) h1 {\n  background-color: var(--h1-bg-color);\n}\nbody.header-2-background .cm-header-2,\nbody.header-2-background :is(.markdown-preview-view,.markdown-rendered) h2 {\n  background-color: var(--h2-bg-color);\n}\nbody.header-3-background .cm-header-3,\nbody.header-3-background :is(.markdown-preview-view,.markdown-rendered) h3 {\n  background-color: var(--h3-bg-color);\n}\nbody.header-4-background .cm-header-4,\nbody.header-4-background :is(.markdown-preview-view,.markdown-rendered) h4 {\n  background-color: var(--h4-bg-color);\n}\nbody.header-5-background .cm-header-5,\nbody.header-5-background :is(.markdown-preview-view,.markdown-rendered) h5 {\n  background-color: var(--h5-bg-color);\n}\nbody.header-6-background .cm-header-6,\nbody.header-6-background :is(.markdown-preview-view,.markdown-rendered) h6 {\n  background-color: var(--h6-bg-color);\n}\n\nbody.toggle-inline-title-background .inline-title {\n  background: no-repeat center/100% var(--inline-title-bg-url) var(--inline-title-bg-color);\n}\n\nbody.h1-toggle-underline  .markdown-source-view.mod-cm6 .HyperMD-header-1 + .cm-line,\nbody.h2-toggle-underline  .markdown-source-view.mod-cm6 .HyperMD-header-2 + .cm-line,\nbody.h3-toggle-underline  .markdown-source-view.mod-cm6 .HyperMD-header-3 + .cm-line,\nbody.h4-toggle-underline  .markdown-source-view.mod-cm6 .HyperMD-header-4 + .cm-line,\nbody.h5-toggle-underline  .markdown-source-view.mod-cm6 .HyperMD-header-5 + .cm-line,\nbody.h6-toggle-underline  .markdown-source-view.mod-cm6 .HyperMD-header-6+ .cm-line\n{\n  padding-top: 0.5em!important;\n}\n\n\nbody:not(.h1-toggle-underline) \n.cm-contentContainer .cm-header-1\n{\n  line-height: var(--h1-line-height);\n}\nbody:not(.h2-toggle-underline) \n.cm-contentContainer .cm-header-2\n{\n  line-height: var(--h2-line-height);\n}\nbody:not(.h3-toggle-underline) \n.cm-contentContainer .cm-header-3\n{\n  line-height: var(--h3-line-height);\n}\nbody:not(.h4-toggle-underline) \n.cm-contentContainer .cm-header-4 {\n  line-height: var(--h4-line-height);\n}\nbody:not(.h5-toggle-underline) \n.cm-contentContainer .cm-header-5 {\n  line-height: var(--h5-line-height);\n}\nbody:not(.h6-toggle-underline) \n.cm-contentContainer .cm-header-6 {\n  line-height: var(--h6-line-height);\n}\n.markdown-rendered div:has( > :is(p,pre,table,ul,ol)) + div > :is(h1,h2,h3,h4,h5,h6)\n{\n  margin-top: calc(var(--p-spacing) * 0.5);\n  margin-bottom: calc(var(--p-spacing) * 0.5);\n}\nbody.h6-toggle-underline .cm-s-obsidian .cm-line.HyperMD-header-6,\nbody.h5-toggle-underline .cm-s-obsidian .cm-line.HyperMD-header-5,\nbody.h4-toggle-underline .cm-s-obsidian .cm-line.HyperMD-header-4,\nbody.h3-toggle-underline .cm-s-obsidian .cm-line.HyperMD-header-3,\nbody.h2-toggle-underline .cm-s-obsidian .cm-line.HyperMD-header-2,\nbody.h1-toggle-underline .cm-s-obsidian .cm-line.HyperMD-header-1 {\n  padding-top: 0.5rem;\n}\n.cm-s-obsidian .cm-line.HyperMD-header {\n  padding-top: calc(var(--p-spacing) * 0.5);\n  padding-bottom:calc(var(--p-spacing) * 0.5);\n}\n\nbody.h1-text-align-center .HyperMD-header.HyperMD-header-1.cm-line,\nbody.h2-text-align-center .HyperMD-header.HyperMD-header-2.cm-line,\nbody.h3-text-align-center .HyperMD-header.HyperMD-header-3.cm-line,\nbody.h4-text-align-center .HyperMD-header.HyperMD-header-4.cm-line,\nbody.h5-text-align-center .HyperMD-header.HyperMD-header-5.cm-line,\nbody.h6-text-align-center .HyperMD-header.HyperMD-header-6.cm-line,\nbody.h1-text-align-center :is(.markdown-preview-view,.markdown-rendered) h1,\nbody.h2-text-align-center :is(.markdown-preview-view,.markdown-rendered) h2,\nbody.h3-text-align-center :is(.markdown-preview-view,.markdown-rendered) h3,\nbody.h4-text-align-center :is(.markdown-preview-view,.markdown-rendered) h4,\nbody.h5-text-align-center :is(.markdown-preview-view,.markdown-rendered) h5,\nbody.h6-text-align-center :is(.markdown-preview-view,.markdown-rendered) h6,\nbody.inline-title-text-align-center .inline-title {\n  text-align: center;\n}\nbody.h1-text-align-end .HyperMD-header.HyperMD-header-1.cm-line,\nbody.h2-text-align-end .HyperMD-header.HyperMD-header-2.cm-line,\nbody.h3-text-align-end .HyperMD-header.HyperMD-header-3.cm-line,\nbody.h4-text-align-end .HyperMD-header.HyperMD-header-4.cm-line,\nbody.h5-text-align-end .HyperMD-header.HyperMD-header-5.cm-line,\nbody.h6-text-align-end .HyperMD-header.HyperMD-header-6.cm-line,\nbody.h1-text-align-end :is(.markdown-preview-view,.markdown-rendered) h1,\nbody.h2-text-align-end :is(.markdown-preview-view,.markdown-rendered) h2,\nbody.h3-text-align-end :is(.markdown-preview-view,.markdown-rendered) h3,\nbody.h4-text-align-end :is(.markdown-preview-view,.markdown-rendered) h4,\nbody.h5-text-align-end :is(.markdown-preview-view,.markdown-rendered) h5,\nbody.h6-text-align-end :is(.markdown-preview-view,.markdown-rendered) h6,\nbody.inline-title-text-align-end .inline-title {\n  text-align: end;\n}\n\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) em,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) strong,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) strong em,\nbody.retain-header-color .cm-s-obsidian .cm-header[class*=\"cm-em\"],\nbody.retain-header-color .cm-s-obsidian .cm-header[class*=\"cm-strong\"] {\n  background-image: initial;\n  background-clip: initial;\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: initial;\n  background-color: initial;\n}\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h1 em,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h1 strong,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h1 strong em,\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-1[class*=\"cm-em\"],\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-1[class*=\"cm-strong\"] {\n  color: var(--h1-color) !important;\n  font-family: var(--h1-font) !important;\n}\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h2 em,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h2 strong,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h2 strong em,\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-2[class*=\"cm-em\"],\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-2[class*=\"cm-strong\"] {\n  color: var(--h2-color) !important;\n  font-family: var(--h2-font) !important;\n}\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h3 em,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h3 strong,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h3 strong em,\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-3[class*=\"cm-em\"],\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-3[class*=\"cm-strong\"] {\n  color: var(--h3-color) !important;\n  font-family: var(--h3-font) !important;\n}\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h4 em,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h4 strong,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h4 strong em,\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-4[class*=\"cm-em\"],\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-4[class*=\"cm-strong\"] {\n  color: var(--h4-color) !important;\n  font-family: var(--h4-font) !important;\n}\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h5 em,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h5 strong,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h5 strong em,\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-5[class*=\"cm-em\"],\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-5[class*=\"cm-strong\"] {\n  color: var(--h5-color) !important;\n  font-family: var(--h5-font) !important;\n}\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h6 em,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h6 strong,\nbody.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h6 strong em,\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-6[class*=\"cm-em\"],\nbody.retain-header-color .cm-s-obsidian .cm-header.cm-header-6[class*=\"cm-strong\"] {\n  color: var(--h6-color) !important;\n  font-family: var(--h6-font) !important;\n}\n\n:is(.markdown-preview-section,.markdown-rendered):not(:first-child) :is(h1,h2,h3,h4,h5) {\n  margin-top: 13px !important;\n}\n\n:is(.markdown-preview-section,.markdown-rendered):not(:first-child) h6 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n/*preview Header hover*/\n/* adapted from Obsidian-Typora-Vue https://github.com/ZekunC/Obsidian-Typora-Vue-Theme */\n:is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) {\n  position: relative;\n}\nbody:not(.remove-heading-indicator).is-mobile :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6):hover::before {\n\n  margin-left: -20px;\n}\nbody:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h1:hover::before {\n  content: 'H1';\n  position: absolute;\n  font-size: 0.7rem;\n  width: auto;\n  margin-left: -24px;\n  border: 1px solid;\n  padding: 0px 2px;\n  border-radius: var(--radius-xs);\n  top: 25px;\n}\nbody:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h2:hover::before {\n  content: 'H2';\n  position: absolute;\n  font-size: 0.7rem;\n  width: auto;\n  margin-left: -25px;\n  border: 1px solid;\n  padding: 0px 2px;\n  border-radius: var(--radius-xs);\n  top: 23px;\n}\nbody:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h3:hover::before {\n  content: 'H3';\n  position: absolute;\n  font-size: 0.65rem;\n  width: auto;\n  margin-left: -25px;\n  border: 1px solid;\n  padding: 0px 2px;\n  border-radius: var(--radius-xs);\n  top: 22px;\n}\nbody:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h4:hover::before {\n  content: 'H4';\n  position: absolute;\n  font-size: 0.6rem;\n  width: auto;\n  margin-left: -25px;\n  border: 1px solid;\n  padding: 0px 2px;\n  border-radius: var(--radius-xs);\n  top: 22px;\n}\nbody:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h5:hover::before {\n  content: 'H5';\n  position: absolute;\n  font-size: 0.6rem;\n  width: auto;\n  margin-left: -25px;\n  border: 1px solid;\n  padding: 0px 2px;\n  border-radius: var(--radius-xs);\n  top: 22px;\n}\nbody:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h6:hover::before {\n  content: 'H6';\n  position: absolute;\n  font-size: 0.6rem;\n  width: auto;\n  margin-left: -25px;\n  border: 1px solid;\n  padding: 0px 2px;\n  border-radius: var(--radius-xs);\n  top: 22px;\n}\n\n/*---*/\n.markdown-rendered hr {\n  border-color: var(--background-modifier-border-hr);\n}\n\n/* inspired by Obsidianite */\nbody.fancy-hr-icon .markdown-rendered hr {\n  overflow: initial;\n  margin-block-start: 2.5em;\n  margin-block-end: 2.5em;\n  border: none;\n  height: 0;\n  min-height: 0.7em;\n  border-bottom: 2px solid;\n  border-image-slice: 1;\n  border-width: 2px;\n  border-image: linear-gradient(to right, transparent 0%, var(--hr-color-icon-1) 30%, var(--hr-color-icon-2) 46%, transparent 46%, transparent 54%, var(--hr-color-icon-3) 54%, var(--hr-color-icon-4) 70%, transparent 100%) 1;\n}\n\nbody.fancy-hr-icon .markdown-rendered hr::after {\n  content: var(--fancy-hr-icon);\n  display: inline-block;\n  position: relative;\n  left: 50%;\n  font-size: 1em;\n  transform: translate(-50%, -0.35em)  rotate(var(--fancy-hr-rotate));\n  transform-origin: 50% 50%;\n  padding: 0.3rem;\n  color: var(--theme-color);\n}\n\nbody.fancy-hr-icon div:not(.CodeMirror-activeline) > .CodeMirror-line span.cm-hr {\n  opacity: 0;\n  position: relative;\n}\n\nbody.fancy-hr-icon div > .CodeMirror-line span.cm-hr {\n  display: inline-block;\n}\n\nbody.fancy-hr-icon div:not(.CodeMirror-activeline) > .CodeMirror-line.HyperMD-hr::before {\n  position: absolute;\n  content: '';\n  width: 100%;\n  height: 2px;\n  border-image: linear-gradient(to right, transparent 0%, var(--hr-color-icon-1) 30%, var(--hr-color-icon-2) 46%, transparent 46%, transparent 54%, var(--hr-color-icon-3) 54%, var(--hr-color-icon-4) 70%, transparent 100%) 1;\n  left: 0;\n  top: 50%;\n}\n\nbody.fancy-hr-icon div:not(.CodeMirror-activeline) > .CodeMirror-line.HyperMD-hr::after {\n  content: var(--fancy-hr-icon);\n  display: inline-block;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  font-size: 1em;\n  transform: translate(-50%, -50%) rotate(var(--fancy-hr-rotate));\n  transform-origin: 50% 50%;\n  padding: 0.5rem;\n  color: var(--theme-color);\n}\n\nbody.fancy-hr-icon .cm-s-obsidian hr {\n  border-image: linear-gradient(to right, transparent 0%, var(--hr-color-icon-1) 30%, var(--hr-color-icon-2) 46%, transparent 46%, transparent 54%, var(--hr-color-icon-3) 54%, var(--hr-color-icon-4) 70%, transparent 100%) 1;\n  border-width: 2px;\n}\n\nbody.fancy-hr-icon .markdown-source-view.mod-cm6 .hr::after {\n  content: var(--fancy-hr-icon);\n  display: inline-block;\n  position: absolute;\n  font-size: 1em;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%) rotate(var(--fancy-hr-rotate));\n  transform-origin: 50% 50%;\n  padding: 0.5rem;\n  color: var(--theme-color);\n}\n\nbody.fancy-hr-no-icon .cm-s-obsidian hr {\n  border-image: linear-gradient(to right, transparent 0%, var(--hr-color-1) 20%, var(--hr-color-2) 40%, var(--hr-color-3) 60%, var(--hr-color-4) 80%, transparent 100%) 1;\n  border-width: 2px;\n}\n\nbody.fancy-hr-no-icon .markdown-rendered hr {\n  margin-block-start: 2.5em;\n  margin-block-end: 2.5em;\n  border: none;\n  height: 0;\n  border-bottom: 2px solid;\n  border-width: 2px;\n  border-image: linear-gradient(to right, transparent 0%, var(--hr-color-1) 20%, var(--hr-color-2) 40%, var(--hr-color-3) 60%, var(--hr-color-4) 80%, transparent 100%) 1;\n}\n\nbody.fancy-hr-no-icon div:not(.CodeMirror-activeline) > .CodeMirror-line.HyperMD-hr::before {\n  position: absolute;\n  content: '';\n  width: 100%;\n  height: 2px;\n  background-image: linear-gradient(to right, transparent 0%, var(--hr-color-1) 20%, var(--hr-color-2) 40%, var(--hr-color-3) 60%, var(--hr-color-4) 80%, transparent 100%);\n  left: 0;\n  top: 50%;\n}\n\nbody.fancy-hr-number .markdown-rendered {\n  counter-reset: fancyhrno;\n}\n\nbody.fancy-hr-number .markdown-rendered hr {\n  overflow: initial;\n  margin-block-start: 2.5em;\n  margin-block-end: 2.5em;\n  border: none;\n  height: 0;\n  min-height: 0.7em;\n  border-bottom: 2px solid;\n  border-image-slice: 1;\n  border-width: 2px;\n  border-image-source: linear-gradient(to right, transparent 0%, var(--hr-color-numbers-line-1) 30%, var(--hr-color-numbers-line-2) 46%, transparent 46%, transparent 54%, var(--hr-color-numbers-line-3) 54%, var(--hr-color-numbers-line-4) 70%, transparent 100%);\n  counter-increment: fancyhrno;\n}\n\nbody.fancy-hr-number .markdown-rendered hr::after {\n  content: counter(fancyhrno);\n  display: inline-block;\n  font-family: var(--font-monospace-theme);\n  font-weight: bold;\n  position: relative;\n  left: 50%;\n  transform: translate(-50%, -0.2em);\n  color: var(--hr-color-numbers-color);\n  background: var(--hr-color-numbers-bg-color);\n  border-radius: 50%;\n  padding: 0 0.44em 0 0.5em;\n}\n\nbody.fancy-hr-number.hollow-number .markdown-rendered hr::after,\nbody.fancy-hr-number.hollow-number .markdown-source-view.mod-cm6 hr::after,\nbody.fancy-hr-number.hollow-number .markdown-source-view div:not(.CodeMirror-activeline) > .HyperMD-hr.CodeMirror-line::after {\n  -webkit-text-fill-color: var(--hr-numbers-text-fill);\n  -webkit-text-stroke: 1px var(--hr-numbers-text-stroke);\n  font-family: var(--font-text-theme);\n}\n\nbody.fancy-hr-number div:not(.CodeMirror-activeline) > .CodeMirror-line span.cm-hr {\n  opacity: 0;\n  position: relative;\n}\n\nbody.fancy-hr-number div > .CodeMirror-line span.cm-hr {\n  display: inline-block;\n}\n\nbody.fancy-hr-number .markdown-source-view {\n  counter-reset: fancyhrno1;\n}\n\nbody.fancy-hr-number .markdown-source-view div:not(.CodeMirror-activeline) > .HyperMD-hr.CodeMirror-line::before {\n  position: absolute;\n  content: '';\n  width: 100%;\n  height: 2px;\n  background-image: linear-gradient(to right, transparent 0%, var(--hr-color-numbers-line-1) 30%, var(--hr-color-numbers-line-2) 46%, transparent 46%, transparent 54%, var(--hr-color-numbers-line-3) 54%, var(--hr-color-numbers-line-4) 70%, transparent 100%);\n  left: 0;\n  top: 50%;\n  counter-increment: fancyhrno1;\n}\n\nbody.fancy-hr-number .markdown-source-view div:not(.CodeMirror-activeline) > .HyperMD-hr.CodeMirror-line::after {\n  content: counter(fancyhrno1);\n  display: inline-block;\n  font-family: var(--font-monospace-theme);\n  font-weight: bold;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  color: var(--hr-color-numbers-color);\n  background: var(--hr-color-numbers-bg-color);\n  border-radius: 50%;\n  padding: 0 0.44em 0 0.5em;\n}\n\nbody.fancy-hr-number .cm-s-obsidian hr {\n  border-image: linear-gradient(to right, transparent 0%, var(--hr-color-numbers-line-1) 30%, var(--hr-color-numbers-line-2) 46%, transparent 46%, transparent 54%, var(--hr-color-numbers-line-3) 54%, var(--hr-color-numbers-line-4) 70%, transparent 100%) 1;\n  border-width: 2px;\n  counter-increment: fancyhrno;\n}\n\nbody.fancy-hr-number .markdown-source-view.mod-cm6 {\n  counter-reset: fancyhrno;\n}\n\nbody.fancy-hr-number .markdown-source-view.mod-cm6 .hr::after {\n  left: 50%;\n  top: 50%;\n  content: counter(fancyhrno);\n  display: inline-block;\n  font-family: var(--font-monospace-theme);\n  font-weight: bold;\n  position: absolute;\n  transform: translate(-50%, -50%);\n  color: var(--hr-color-numbers-color);\n  background: var(--hr-color-numbers-bg-color);\n  border-radius: 50%;\n  padding: 0 0.45em 0 0.5em;\n}\n\n.nav-files-container {\n  padding: 0 3px 10px;\n}\n\n/* blockquote */\n:is(.markdown-preview-view,.markdown-rendered) blockquote {\n  padding: 0.5em 0.5em 0.5em 0.6em;\n  border-right-width: 0;\n  border-left: solid;\n  border-top-width: 0;\n  border-bottom-width: 0;\n  border-left-width: 5px;\n  border-color: var(--theme-color);\n  background-color: var(--background-blockquote);\n  border-radius: var(--radius-s);\n  margin-inline-start: 2.5%;\n  margin-inline-end: 2.5%;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) blockquote p {\n  margin-left: 1px;\n  margin-right: 0;\n  font-size: var(--font-size-preview-blockquote);\n}\n\nbody:not(.font-family-change-to-default) :is(.markdown-preview-view,.markdown-rendered),\nbody:not(.font-family-change-to-default) .markdown-source-view.mod-cm6 .cm-scroller,\nbody:not(.font-family-change-to-default) .markdown-source-view {\n  font-family: var(--font-text);\n}\n\n/* preview page */\n:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width :is(.markdown-preview-section,.markdown-rendered),\n.markdown-source-view.is-readable-line-width .CodeMirror,\n:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width .markdown-preview-sizer,\n:is(.markdown-preview-view,.markdown-rendered) :is(.markdown-preview-section,.markdown-rendered),\n.markdown-source-view .CodeMirror,\n:is(.markdown-preview-view,.markdown-rendered) .markdown-preview-sizer,\n.markdown-source-view.mod-cm6 .cm-scroller,\n.cm-s-obsidian.is-folding.is-readable-line-width .markdown-reading-view {\n  line-height: var(--line-height-main);\n  letter-spacing: calc(var(--letter-space-main) * 0.03em);\n  /*text-align: var();*/\n  -webkit-font-smoothing: subpixel-antialiased;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width:not(.matrix) .markdown-preview-sizer,\n.markdown-source-view.is-readable-line-width:not(.matrix) .CodeMirror,\n:is(.markdown-preview-view,.markdown-rendered):not(.matrix) .is-readable-line-width :is(.markdown-preview-section,.markdown-rendered),\n:is(.markdown-preview-view,.markdown-rendered):not(.matrix) .is-readable-line-width :is(.markdown-preview-section,.markdown-rendered) > div,\n:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width:not(.matrix) :is(.markdown-preview-section,.markdown-rendered) {\n  width: var(--file-line-width);\n  max-width: 100%;\n  margin: 0 auto;\n}\n\n.markdown-source-view.mod-cm6.is-readable-line-width:not(.is-rtl) .cm-contentContainer {\n  max-width: var(--file-line-width);\n}\n\n.markdown-source-view.mod-cm6.is-readable-line-width:not(.is-rtl) .cm-content {\n/*   width: var(--file-line-width);\n  max-width: 100%; */\n  margin: 0 auto;\n}\n\n.markdown-source-view.mod-cm6.is-line-wrap.is-readable-line-width .cm-line:not(.HyperMD-table-row) {\n  max-width: 100%;\n}\n\nbody:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .CodeMirror,\nbody:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .cm-scroller,\nbody:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .markdown-preview-sizer {\n  line-height: var(--line-height-split);\n  font-size: var(--font-size-split);\n}\n \n \nbody:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .cm-lineNumbers .cm-gutterElement {\n  padding: 0;\n}\n\n/* code */\n.cm-s-obsidian .hmd-fold-html-stub,\n.cm-s-obsidian .hmd-fold-code-stub,\n.cm-s-obsidian.CodeMirror .HyperMD-hover > .HyperMD-hover-content code,\nbody:not(.tag-default) .cm-s-obsidian .cm-formatting-hashtag,\n.cm-s-obsidian .cm-inline-code,\n.cm-s-obsidian .HyperMD-codeblock,\n.cm-s-obsidian .HyperMD-hr,\n.cm-s-obsidian .cm-hmd-frontmatter,\n.cm-s-obsidian .cm-hmd-orgmode-markup,\n.cm-s-obsidian .cm-formatting-code,\n.cm-s-obsidian .cm-math,\n.cm-s-obsidian span.hmd-fold-math-placeholder,\n.cm-s-obsidian .CodeMirror-linewidget kbd,\n.cm-s-obsidian .hmd-fold-html kbd {\n  font-family: var(--font-monospace);\n}\n.is-live-preview .admonition-content .math-block>mjx-container {\n  padding: 0.3em 0;\n}\n\n.math.math-block mjx-container[jax='CHTML'] {\n  outline: none;\n  font-size: var(--font-size-latex);\n}\n\n.markdown-source-view mjx-math,\n:is(.markdown-preview-view,.markdown-rendered) :not(:is(h1,h2,h3,h4,h5,h6))>.math>mjx-container>mjx-math {\n  color: var(--mjx-inline-math-color);\n}\n.markdown-source-view .cm-header-1 ~ .math  mjx-math {\n  color: var(--h1-color);\n}\n.markdown-source-view .cm-header-2 ~ .math  mjx-math {\n  color: var(--h2-color);\n}\n.markdown-source-view .cm-header-3 ~ .math  mjx-math {\n  color: var(--h3-color);\n}\n.markdown-source-view .cm-header-4 ~ .math  mjx-math {\n  color: var(--h4-color);\n}\n.markdown-source-view .cm-header-5 ~ .math  mjx-math {\n  color: var(--h5-color);\n}\n.markdown-source-view .cm-header-6 ~ .math  mjx-math {\n  color: var(--h6-color);\n}\n\ndiv.math.math-block mjx-math{\n  color: var(--mjx-math-color);\n}\n\n.cm-s-obsidian pre.HyperMD-codeblock,\n:is(.markdown-preview-view,.markdown-rendered) code,\n.markdown-rendered code {\n  color: var(--text-color-code);\n  font-size: var(--font-size-code) !important;\n  font-family: var(--font-monospace);\n  text-align: start;\n}\n.cm-s-obsidian span.cm-math:not(.cm-formatting-math-begin):not(.cm-formatting-math-end) {\n  font-size: var(--font-size-code) !important;\n  font-family: var(--font-monospace);\n  text-align: start;\n}\n\n.cm-s-obsidian .cm-widgetBuffer[aria-hidden=\"true\"]+.cm-inline-code:has(+ .cm-widgetBuffer[aria-hidden=\"true\"]) {\n  border-radius: var(--radius-s);\n  padding: 2px 2px 1px;\n}\n\n.cm-s-obsidian div.HyperMD-codeblock-bg {\n  border-left: none;\n  border-right: none;\n  border-top: none;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) pre {\n  background-color: var(--background-code);\n  padding: 1em 1.5em;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) code {\n  vertical-align: auto;\n  background-color: var(--background-code-2) ;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) pre code {\n  background-color: transparent !important;\n  color:var(--code-normal);\n}\n\n.cm-s-obsidian span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight),\n.cm-formatting.cm-formatting-code.cm-inline-code {\n  color: var(--text-color-code);\n  background-color: var(--background-code-2);\n}\n\n.cm-s-obsidian .cm-inline-code.cm-strong {\n  color: var(--text-color-code) !important;\n}\n\n/*******codebox settings*******/\n/* ================================== */\n/* ===== editor syntax highlight ==== */\n/* ================================== */\nbody.theme-dark {\n  --code-tag: var(--red);\n}\nbody {\n  --code-selection-background: var(--text-selection);\n  --code-selection-color: var(--code-normal);\n  --code-type: var(--code-function);\n  --code-qualifier: var(--aqua);\n  --code-property: var(--blue);\n  --code-value: var(--green);\n  --code-tag: var( --purple);\n  --code-operator: var(--code-property);\n  --code-hr: var(--code-punctuation);\n  --code-string-2: var(--code-string);\n  --code-language: var(--text-muted);\n  --code-attribute: var(--code-function);\n  --code-atom: var(--orange-1);\n  --code-comment: var(--darkgreen);\n}\n\n\n:root,\n.code-theme-custom {\n  /* material: palenight theme */\n  --code-keyword: #c792ea;\n  --code-atom: #f78c6c;\n  --code-number: #ff5370;\n  --code-type: #decb6b;\n  --code-def: #82aaff;\n  --code-property: #c792ea;\n  --code-variable: #f07178;\n  --code-variable-2: #53ada3;\n  --code-variable-3: #e7852fe7;\n  --code-definition: #82aaff;\n  --code-callee: #89ddff;\n  --code-qualifier: #decb6b;\n  --code-operator: #89ddff;\n  --code-hr: #98e342;\n  --code-link: #696d70;\n  --code-error-bg: #ff5370;\n  --code-header: #da7dae;\n  --code-builtin: #ffcb6b;\n  --code-meta: #ffcb6b;\n  --code-matching-bracket: #ffffff;\n  --code-tag: #ff5370;\n  --code-tag-in-comment: #ff5370;\n  --code-string-2: #f07178;\n  --code-bracket: #ff5370;\n  --code-comment: #676e95;\n  --code-string: #c3e88d;\n  --code-attribute: #c792ea;\n  --code-attribute-in-comment: #c792ea;\n  --background-code: #292d3e;\n  --code-normal: #d4d4d4;\n}\n.theme-light,\n.theme-dark {\n  --code-active-line-background-color: var(--activeline-background);\n}\n\n.code-theme-custom {\n  --code-active-line-background-color: #353a50c2;\n}\n\nbody.theme-light.code-theme-material-palenight,\nbody.theme-dark.code-theme-material-palenight {\n  /* material: palenight theme */\n  --code-keyword: #c792ea;\n  --code-atom: #f78c6c;\n  --code-number: #ff5370;\n  --code-type: #decb6b;\n  --code-def: #82aaff;\n  --code-property: #c792ea;\n  --code-variable: #f07178;\n  --code-variable-2: #eeffff;\n  --code-variable-3: #f07178;\n  --code-definition: #82aaff;\n  --code-callee: #89ddff;\n  --code-qualifier: #decb6b;\n  --code-operator: #89ddff;\n  --code-hr: #98e342;\n  --code-link: #696d70;\n  --code-error-bg: #ff5370;\n  --code-header: #da7dae;\n  --code-builtin: #ffcb6b;\n  --code-meta: #ffcb6b;\n  --code-matching-bracket: #ffffff;\n  --code-tag: #ff5370;\n  --code-tag-in-comment: #ff5370;\n  --code-string-2: #f07178;\n  --code-bracket: #ff5370;\n  --code-comment: #676e95;\n  --code-string: #c3e88d;\n  --code-attribute: #c792ea;\n  --code-attribute-in-comment: #c792ea;\n  --background-code: #292d3eba;\n  --code-active-line-background-color: #353a50;\n  --code-normal: #d4d4d4;\n}\n\nbody.theme-light.code-theme-solarized-light,\nbody.theme-dark.code-theme-solarized-light {\n  /* solarized */\n  --code-keyword: #cb4b16;\n  --code-atom: #d33682;\n  --code-number: #d33682;\n  --code-type: #6c71c4;\n  --code-def: #2aa198;\n  --code-property: #2aa198;\n  --code-variable: #839496;\n  --code-variable-2: #b58900;\n  --code-variable-3: #6c71c4;\n  --code-function: var(--code-def) ;\n  --code-definition: #82aaff;\n  --code-callee: #89ddff;\n  --code-qualifier: #b58900;\n  --code-operator: #6c71c4;\n  --code-hr: #98e342;\n  --code-link: #93a1a1;\n  --code-error-bg: #ff5370;\n  --code-header: #586e75;\n  --code-builtin: #d33682;\n  --code-meta: #859900;\n  --code-matching-bracket: #859900;\n  --code-tag: #93a1a1;\n  --code-tag-in-comment: #ff5370;\n  --code-string-2: #b58900;\n  --code-bracket: #cb4b16;\n  --code-comment: #586e75;\n  --code-string: #859900;\n  --code-attribute: #2aa198;\n  --code-attribute-in-comment: #c792ea;\n  --background-code: #fdf6e3e1;\n  --code-active-line-background-color: #fffcf4;\n  --code-normal: #657b83;\n}\n\nbody.theme-dark.code-theme-bt-default {\n  --background-code: #1111118c;\n  --code-variable: var(--red) ;\n  --code-normal: #ebdbb2;\n  --code-comment: var(--darkgreen) ;\n  --code-function: var(--light-yellow) ;\n  --code-important:  var(--darkblue);\n  --code-keyword: var(--darkblue);;\n  --code-operator: #a89984;\n  --code-property: var(--blue) ;\n  --code-punctuation: var(--gray-2) ;\n  --code-string: var(--green) ;\n  --code-tag: var(--red) ;\n  --code-value:  var(--green) ;\n  --code-string-2:var(--yellow) ;\n  --code-active-line-background-color: #111111eb;\n}\nbody.theme-light.code-theme-bt-default {\n  --code-keyword:var(--blue-green);\n  --code-tag: var(--purple);\n  --code-function: var(--red);\n  --code-important:  var(--blue-green);\n  --code-active-line-background-color: var(--activeline-background);\n  --code-string-2: var(--orange-1);\n  --code-variable-2: var(--light-purple);\n  --code-meta: var(--text-faint);\n}\n\nbody.code-theme-Gruvbox-dark {\n  --code-selection-color: #fbf1c7;\n  --code-selection-background: #7c6f6456;\n  --code-active-line-background-color: #533c3cee;\n  --background-code: #1d2021c6;\n  --code-variable:  var(--code-property);\n  --code-normal: #ebdbb2;\n  --code-comment: #a89984;\n  --code-function: #fabd2f;\n  --code-important:  #fb4934;\n  --code-keyword: #fb4934;\n  --code-operator: #a89984;\n  --code-property: #fb4934;\n  --code-punctuation: #a89984;\n  --code-string: #b8bb26;\n  --code-tag: #fabd2f;\n  --code-value:  #d3869b;\n  --code-meta:var(--code-comment);\n}\n\nbody.theme-light.code-theme-dracula {\n  --background-code: #e6e6e671;\n  --code-normal: var(--tex-normal);\n  --code-string: var(--orange) ;\n  --code-string-2: var(--orange-1) ;\n  --code-variable: var(--blue-green);\n  --code-variable-2: var(--light-purple) ;\n  --code-meta: var(--text-faint);\n  --code-active-line-background-color:#dee1b9a5;\n}\nbody.code-theme-dracula {\n  --background-code: #282a36c0;\n  --code-normal: #f8f8f2;\n  --code-comment: #6272a4;\n  --code-string: #f1fa8c;\n  --code-string-2: #ffb86c;;\n  --code-number: #bd93f9;\n  --code-variable: #50fa7b;\n  --code-variable-2: #ffffff;\n  --code-def: #50fa7b;\n  --code-operator: #8be9fd;\n  --code-keyword: #ff79c6;\n  --code-atom: #bd93f9;\n  --code-meta: #f8f8f2;\n  --code-tag: #ff79c6;\n  --code-attribute: #50fa7b;\n  --code-qualifier: #50fa7b;\n  --code-property: #66d9ef;\n  --code-builtin: #50fa7b;\n  --code-variable-3: #dc8e3b;\n  --code-type: #ffb86c;\n  --code-active-line-background-color: #414458;\n  --code-matchingbracket: #fffff;\n}\nbody.theme-light.code-theme-monokai {\n  --code-comment: #aca47a;\n}\nbody.code-theme-monokai {\n  --background-code: #272822d9;\n  --code-normal: #F8F8F2;\n  --code-keyword:#F92772;\n  --code-value: #AE81FF;\n  --code-string-2:#E6DB74;\n  --code-comment: #75715E;\n  --code-active-line-background-color: #17013f9f;\n}\nbody.code-theme-sublime {\n  --code-operator: #9a6e3a;\n  --code-variable: #5180de;\n  --code-keyword: #EA5E66;\n  --code-string: #40bf31;\n  --code-function: #F9AE58;\n  --code-string-2: #F9AE58;\n --code-type: #F9AE58;\n --code-def: #F9AE58;\n}\n\n\n.cm-s-obsidian span.cm-variable {\n  color: var(--code-variable);\n}\n.cm-s-obsidian span.cm-variable-2 {\n  color: var(--code-variable-2);\n}\n\n.cm-s-obsidian span.cm-variable-3 {\n  color: var(---code-variable-3);\n}\n.token.class,\n.token.class-name {\n  color: var(--code-string-2) ;\n}\n\nspan.cm-variable + .cm-hmd-codeblock + span.cm-variable {\n  color: var(--code-variable-2);\n}\n\nspan.cm-variable + .cm-hmd-codeblock + span.cm-variable + .cm-hmd-codeblock + span.cm-variable {\n  color: var(--code-variable-3);\n}\nspan.cm-type {\n  color: var(--code-keyword);\n}\nspan.cm-def {\n  color:var(--code-function);\n}\n.cm-type {\n  color: var(--code-type);\n}\n.token.atrule,\n.token.attr-value,\n.cm-property,\n.cm-attribute {\n  color: var(--code-attribute);\n}\n\n.cm-qualifier {\n  color: var(--code-qualifier);\n}\n\n.cm-operator {\n  color:var(--code-operator);\n}\n\n.cm-hr {\n  color: var(--code-hr);\n}\n.cm-string-2 {\n  color: var(--code-string-2);\n}\n\n.cm-s-obsidian .cm-hmd-frontmatter.cm-atom,\n.cm-s-obsidian .cm-templater-command.cm-atom,\n.cm-s-obsidian .cm-math.cm-atom,\n.cm-s-obsidian .HyperMD-codeblock .cm-atom,\n.markdown-preview-view pre.cm-s-obsidian .cm-atom {\n  color: var(--code-atom);\n}\n\n.cm-s-obsidian .cm-hmd-frontmatter.cm-meta,\n.cm-s-obsidian .cm-templater-command.cm-meta,\n.cm-s-obsidian .cm-math.cm-meta,\n.cm-s-obsidian .HyperMD-codeblock .cm-meta,\n.markdown-preview-view pre.cm-s-obsidian .cm-meta {\n  color: var(--code-meta);\n}\n\n.cm-s-obsidian .cm-hmd-frontmatter.cm-builtin,\n.cm-s-obsidian .cm-templater-command.cm-builtin,\n.cm-s-obsidian .cm-math.cm-builtin,\n.cm-s-obsidian .HyperMD-codeblock .cm-builtin,\n.markdown-preview-view pre.cm-s-obsidian .cm-builtin,\n.markdown-preview-view pre code span.builtin  {\n  color: var(--code-builtin);\n}\n\n\n.markdown-preview-view pre code span.class {\n  color: var(--code-qualifier);\n}\n\n.markdown-preview-view pre code span.function {\n  color: var(--code-function);\n}\n\n.markdown-preview-view pre code span.punctuation {\n  color: var(--code-punctuation);\n}\n\n.markdown-preview-view pre code span.operator {\n  color: var(--code-operator);\n  background: transparent;\n}\n\n.markdown-preview-view pre code span.entity {\n  color: var(--code-attribute);\n}\n\n.markdown-preview-view pre code span.parameter {\n  color: var(--code-property);\n}\n\n.markdown-preview-view pre code span.property {\n  color: var(--code-property);\n}\n\n.markdown-preview-view pre code span.important {\n  color: var(--code-important);\n}\n\n.markdown-preview-view pre code span.attr-name {\n  color: var(--code-tag);\n}\n\n.markdown-preview-view pre code span.attr-value {\n  color: var(--code-string);\n}\n\n.markdown-preview-view pre code span.builtin {\n  color: var(--code-builtin);\n}\n\n.markdown-preview-view pre code span.unit {\n  color: var(--code-value);\n}\n\n.markdown-preview-view  span.token.macro-name {\n  color: var(--code-important);\n}\n\nspan.token.directive-hash {\n  color: var(--code-tag);\n}\n.cm-s-obsidian span.cm-comment {\n  color: var(--code-comment);\n}\n\n.muted-code-activeline-bg .markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line.HyperMD-codeblock-bg  {\n  background-color: var(--background-code) !important;\n}\n.muted-code-activeline-bg .markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line.HyperMD-codeblock-bg::before  {\n  background-color: unset !important;\n}\n.markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line.HyperMD-codeblock-bg::before {\n  display: none;\n}\n.markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line.HyperMD-codeblock-bg {\n  background-color: var(--code-active-line-background-color) !important;\n  --text-selection:var(--code-selection-background);\n  z-index: -1;\n}\n\npre code[class*=\"language-\"] {\n  padding: 1em 0.5em;\n}\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  color: var(--code-selection-color);\n  background: var(--code-active-line-background-color);\n}\n\n/*Advanced Codeblock */\n.HyperMD-codeblock.HyperMD-codeblock-bg.cm-line span.live-preview-codeblock-line-nums {\n  margin-left: -1.5em;\n}\n\n.code-line-number .HyperMD-codeblock-begin {\n  counter-reset: line-numbers;\n}\n\n.code-line-number .HyperMD-codeblock.cm-line:not(.HyperMD-codeblock-begin):not(.HyperMD-codeblock-end) {\n  padding-left: 3em;\n  position: relative;\n}\n\n.code-line-number .HyperMD-codeblock.cm-line:not(.HyperMD-codeblock-begin):not(.HyperMD-codeblock-end)::after {\n  align-items: flex-start;\n  color: var(--text-faint);\n  content: counter(line-numbers);\n  counter-increment: line-numbers;\n  display: flex;\n  font-size: 0.8em;\n  height: 100%;\n  justify-content: flex-end;\n  left: 0;\n  position: absolute;\n  text-align: right;\n  width: 2em;\n  padding-right: 0.5em;\n  bottom: -2px;\n  border-right: 1px solid var(--scrollbar-thumb-bg);\n}\n\n.code-line-number .HyperMD-codeblock.cm-line.cm-active:not(.HyperMD-codeblock-begin):not(.HyperMD-codeblock-end)::after {\n  color: var(--color-accent);\n}\n\n.code-line-number .HyperMD-codeblock .cm-foldPlaceholder::before {\n  display: none;\n}\n\n\n/* ================================== */\n.cm-s-obsidian .cm-hmd-frontmatter.cm-qualifier,\n.cm-s-obsidian .cm-math.cm-qualifier,\n.cm-s-obsidian .cm-qualifier {\n  color: var(--yellow) ;\n}\n\n.cm-s-obsidian pre.HyperMD-codeblock .cm-qualifier {\n  color: var(--code-qualifier) ;\n}\n\n.cm-s-obsidian .cm-hmd-frontmatter.cm-property,\n.cm-s-obsidian .cm-math.cm-property,\n.cm-s-obsidian pre.HyperMD-codeblock .cm-property {\n  color: var(--code-property) ;\n}\n\n.cm-s-obsidian .cm-math.cm-atom,\n.cm-s-obsidian pre.HyperMD-codeblock .cm-atom {\n  color: var(--text-normal) ;\n}\n\n.cm-s-obsidian .cm-hmd-frontmatter.cm-number,\n.cm-s-obsidian .cm-math.cm-number,\n.cm-s-obsidian pre.HyperMD-codeblock .cm-number {\n  color: var(--code-value) ;\n}\n\n.cm-s-obsidian .cm-hmd-frontmatter.cm-comment,\n.cm-s-obsidian .cm-math.cm-comment,\n.cm-s-obsidian pre.HyperMD-codeblock .cm-comment {\n  color: var(--code-comment) ;\n}\n\n.theme-dark .cm-s-obsidian .cm-hmd-frontmatter.cm-tag,\n.theme-dark .cm-s-obsidian .cm-math.cm-tag,\n.theme-dark .cm-s-obsidian pre.HyperMD-codeblock .cm-tag {\n  color: var(--code-tag) ;\n}\n\n.theme-light .cm-s-obsidian .cm-hmd-frontmatter.cm-tag,\n.theme-light .cm-s-obsidian .cm-math.cm-tag,\n.theme-light .cm-s-obsidian pre.HyperMD-codeblock .cm-tag {\n  color: var(--code-tag) ;\n}\n\n.cm-atom.cm-hmd-frontmatter {\n  color: var(--code-atom)  ;\n}\n\n.cm-meta.cm-hmd-frontmatter {\n  color: var(--code-meta)  ;\n}\n.token.punctuation,\n.cm-punctuation,\n.cm-bracket {\n  color: var(--code-punctuation)  !important ;\n}\n\n.theme-dark .cm-s-obsidian span.cm-keyword {\n  font-weight: 600 ;\n}\n\n\n/*inline code*/\n.cm-s-obsidian.mod-cm6 .HyperMD-codeblock span.cm-inline-code {\n  display: inline-block;\n  padding: unset;\n}\n\n.cm-s-obsidian span.cm-formatting-code.cm-inline-code {\n  color: var(--text-muted);\n  border-radius: 3px 0 0 3px;\n}\n\n.cm-s-obsidian span[class=\"cm-inline-code\"]+span.cm-formatting-code.cm-inline-code,\n.cm-s-obsidian span[class*=\"cm-inline-code\"][class*=\"cm-list\"]+span.cm-formatting-code.cm-inline-code,\n.cm-s-obsidian span[class*=\"cm-inline-code\"][class*=\"cm-quote\"]+span.cm-formatting-code.cm-inline-code,\n.cm-s-obsidian span[class*=\"cm-inline-code\"][class*=\"cm-header\"]+span.cm-formatting-code.cm-inline-code,\n.cm-s-obsidian span[class*=\"cm-inline-code\"][class*=\"cm-em\"]+span.cm-formatting-code.cm-inline-code,\n.cm-s-obsidian span[class*=\"cm-inline-code\"][class*=\"cm-strong\"]+span.cm-formatting-code.cm-inline-code {\n  color: var(--text-muted);\n  border-radius: 0 3px 3px 0;\n}\n\n.cm-formatting.cm-formatting-code-block.cm-hmd-codeblock {\n  color: var(--code-language);\n}\n.cm-hmd-frontmatter {\n  color: var(--code-normal);\n}\n.cm-hmd-frontmatter.cm-string {\n  color: var(--code-string);\n}\n/*bold code text except code language*/\n:not(pre)>code:not([class*='language-']) {\n  font-weight: var(--font-weight-inline-code);\n  padding: 2px 2px 1px;\n  font-family: var(--font-family-inline-code) !important;\n}\n\n.cm-s-obsidian span.cm-inline-code {\n  padding: 2px 0 1px;\n  color: var(--text-color-code);\n  font-weight: var(--font-weight-inline-code);\n  font-family: var(--font-family-inline-code) !important;\n  font-size: var(--font-size-code) !important;\n}\n\n.cm-formatting.cm-formatting-list.cm-formatting-list-ol {\n  color: var(--list-ol-number-color);\n}\n\n:not(.default-ol-list-marker) .cm-formatting.cm-formatting-list.cm-formatting-list-ol {\n  margin-left: -2px;\n}\n\n.cm-s-obsidian .HyperMD-table-row.HyperMD-table-row.HyperMD-table-row {\n  min-width: max-content;\n  white-space: pre-wrap;\n}\n\n.markdown-source-view.mod-cm6 .HyperMD-list-line.cm-line {\n  font-family: var(--font-family-list);\n}\n\nli {\n  \n  font-family: var(--font-family-list);\n}\n\nli>p:not(.task-list-item) {\n  margin-top: 0.75em;\n  margin-bottom: 0.75em;\n}\n\n.markdown-source-view ol > li,\n.markdown-source-view ul > li,\n.markdown-preview-view ol > li,\n.markdown-preview-view ul > li,\n.markdown-rendered ul > li,\n.mod-cm6 .HyperMD-list-line.cm-line:not(.HyperMD-codeblock) {\n  padding-top: calc(var(--list-spacing-bt) * 0.075em);\n  padding-bottom: calc(var(--list-spacing-bt) * 0.075em);\n}\n\nul,\nol ul,\nol ol ul,\nol ol ol ul {\n  list-style: disc;\n}\nul ul,\nol ul ul,\nul ol ul,\nol ol ul ul {\n  list-style: circle;\n}\nul ul ul,\nol ul ul ul,\nul ol ul ul,\nul ul ol ul {\n  list-style: square;\n}\nul ul ul ul,\nol ul ul ul ul,\nul ol ul ul ul,\nul ul ol ul ul,\nul ul ul ol ul {\n  list-style: circle;\n}\n\n\nbody.custom-ordered-list ol {\n  list-style: var(--list-ol-marker-1);\n}\nbody.custom-ordered-list :is(ul, ol) ol {\n  list-style: var(--list-ol-marker-2);\n}\nbody.custom-ordered-list :is(ul, ol) :is(ul, ol) ol {\n  list-style: var(--list-ol-marker-3);\n}\nbody.custom-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) ol {\n  list-style: var(--list-ol-marker-4);\n}\n\nbody.custom-ordered-list ol>li::marker {\n  font-weight: 600;\n  color: var(--list-ol-number-color);\n  white-space: pre;\n  font-family: Inter;\n}\n\n:is(ol,ul) li {\n  font-size: var(--font-size-list);\n}\n\nol > li::marker {\n  color: var(--list-ol-number-color);\n}\n\nol > li.is-collapsed::marker,\nul > li.is-collapsed::marker,\n.cm-s-obsidian .is-collapsed ~ .cm-formatting-list {\n  color: var(--list-marker-color-collapsed);\n}\n\n/*list-no-border*/\nbody.list-no-border ul>li:not(.task-list-item) {\n  border-left: none !important;\n}\n\nbody.list-no-border ol>li {\n  border-left: none !important;\n}\n\n/* Adapted from https://gist.github.com/KillyMXI/cbef8edff6dd55d9e6ea4df66567e9b1 */\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-1:not(:has(~ .HyperMD-list-line-1 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3, .HyperMD-list-line-2):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-1:not(:has(~ .HyperMD-list-line-1 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-2:hover, ~ .HyperMD-list-line-2 ~ :is(.HyperMD-list-line-3, .HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-3, .HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before {\n  --list-threading-offset: 1em;\n}\n\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-3:hover, ~ .HyperMD-list-line-3 ~ :is(.HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before {\n  --list-threading-offset: calc(1em + var(--list-indent));\n}\n\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-4:hover, ~ .HyperMD-list-line-4 ~ :is(.HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before {\n  --list-threading-offset: calc(1em + 2 * var(--list-indent));\n}\n\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-5:hover, ~ .HyperMD-list-line-5 ~ :is(.HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before {\n  --list-threading-offset: calc(1em + 3 * var(--list-indent));\n}\n\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-6:hover, ~ .HyperMD-list-line-6 ~ :is(.HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7):hover))::before {\n  --list-threading-offset: calc(1em + 4 * var(--list-indent));\n}\n\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-7:hover, ~ .HyperMD-list-line-7 ~ :is(.HyperMD-list-line-8):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-7:not(:has(~ .HyperMD-list-line-7 ~ .HyperMD-list-line:hover)):hover::before {\n  --list-threading-offset: calc(1em + 5 * var(--list-indent));\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover)::after,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-3:hover, ~ .HyperMD-list-line-3 ~ :is(.HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before {\n  filter: hue-rotate(60deg);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover)::after,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-4:hover, ~ .HyperMD-list-line-4 ~ :is(.HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before {\n  filter: hue-rotate(120deg);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover)::after,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-5:hover, ~ .HyperMD-list-line-5 ~ :is(.HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before {\n  filter: hue-rotate(180deg);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::after,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-6:hover, ~ .HyperMD-list-line-6 ~ :is(.HyperMD-list-line-7):hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7):hover))::before {\n  filter: hue-rotate(240deg);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7):hover)::after,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-7:hover, ~ .HyperMD-list-line-7 ~ :is(.HyperMD-list-line-8):hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-7:not(:has(~ .HyperMD-list-line-7 ~ .HyperMD-list-line:hover)):hover::before {\n  filter: hue-rotate(300deg);\n}\n\n/* tails */\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-1:not(:has(~ .HyperMD-list-line-1 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3, .HyperMD-list-line-2):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::after,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7):hover)::after {\n  content: \"\";\n  position: absolute;\n  left: var(--list-threading-offset);\n  bottom: 0;\n  height: calc(100% - 1em);\n  width: var(--bt-indentation-width-hover);\n  background-color: var(--bt-connected-indent-line-color);\n}\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line.HyperMD-task-line::after {\n  max-height: calc(100% - 1.2em);\n}\n\n/* in-between lines */\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-1:not(:has(~ .HyperMD-list-line-1 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-2:hover, ~ .HyperMD-list-line-2 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-3:hover, ~ .HyperMD-list-line-3 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-4:hover, ~ .HyperMD-list-line-4 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-5:hover, ~ .HyperMD-list-line-5 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-6:hover, ~ .HyperMD-list-line-6 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-7:hover)::before {\n  content: \"\";\n  position: absolute;\n  left: var(--list-threading-offset);\n  top: 0;\n  height: 100%;\n  width: var(--bt-indentation-width-hover);\n  background-color: var(--bt-connected-indent-line-color);\n}\n\n/* elbows */\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover))::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover))::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover))::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover))::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7):hover))::before,\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-7:not(:has(~ .HyperMD-list-line-7 ~ .HyperMD-list-line:hover)):hover::before {\n  content: \"\";\n  position: absolute;\n  left: var(--list-threading-offset);\n  width: var(--list-indent);\n  top: 0;\n  height: calc(1.4 / 2 * var(--font-size-list) + var(--list-spacing-bt) * 0.075em * 1.5);\n  border-bottom-left-radius: var(--radius-m);\n  border-bottom: var(--bt-indentation-width-hover) solid var(--bt-connected-indent-line-color);\n  border-left: var(--bt-indentation-width-hover) solid var(--bt-connected-indent-line-color);\n}\nbody.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line.HyperMD-task-line::before {\n  max-width: calc(var(--list-indent) - 0.35em);\n}\n\nbody.bt-colorful-indentation-lines.bt-indentation-line-gradient ul ul::before,\nbody.bt-colorful-indentation-lines.bt-indentation-line-gradient ol ol::before  {\n  border-right-color: var(--bt-connected-indent-line-color) !important;\n  border-image: linear-gradient(var(--bt-indentation-gradient-color-1), var(--bt-indentation-gradient-color-2)) 10;\n}\n\nbody.bt-colorful-indentation-lines.bt-indentation-line-image :is(ul, ol) :is(ul, ol)::before {\n  border-right-color: var(--bt-connected-indent-line-color) !important;\n  border-image: var(--bt-indentation-line-image) 10;\n}\n\nbody.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol)::before {\n  border-right-color: var(--bt-connected-indent-line-color) !important;\n  border-right-width: var(--bt-colorful-indentation-width);\n  border-right-style: double;\n}\nbody.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol)::before {\n  border-right-color: var(--bt-connected-indent-line-color) !important;\n  filter: hue-rotate(60deg);\n}\nbody.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol)::before {\n  border-right-color: var(--bt-connected-indent-line-color) !important;\n  filter: hue-rotate(120deg);\n}\nbody.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol)::before {\n  border-right-color: var(--bt-connected-indent-line-color) !important;\n  filter: hue-rotate(180deg);\n}\nbody.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol)::before {\n  border-right-color: var(--bt-connected-indent-line-color) !important;\n  filter: hue-rotate(240deg);\n}\nbody.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol)::before {\n  border-right-color: var(--bt-connected-indent-line-color) !important;\n  filter: hue-rotate(300deg);\n}\n\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-2 .cm-hmd-list-indent > .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-3 .cm-hmd-list-indent > .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-4 .cm-hmd-list-indent > .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-5 .cm-hmd-list-indent > .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent::before {\n  border-color: var(--bt-connected-indent-line-color)\n}\n\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-3 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-4 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-5 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before  {\n  border-color: var(--bt-connected-indent-line-color);\n  filter: hue-rotate(60deg);\n}\n\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-4 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-5 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before {\n  border-color: var(--bt-connected-indent-line-color);\n  filter: hue-rotate(120deg);\n}\n\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-5 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before {\n  border-color: var(--bt-connected-indent-line-color);\n  filter: hue-rotate(180deg);\n}\n\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before {\n  border-color: var(--bt-connected-indent-line-color);\n  filter: hue-rotate(240deg);\n}\n\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before,\nbody.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before{\n  border-color: var(--bt-connected-indent-line-color);\n  filter: hue-rotate(300deg);\n}\n\nbody.bt-connected-indent-hover .markdown-preview-view:not(.kanban) li {\n  position: relative;\n}\n\n/* In-between items */\nbody.bt-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li:has(~ li:hover)::before,\nbody.bt-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) :is(ul, ol):has(~ *:hover) > li::before {\n  content: \"\";\n  position: absolute;\n  background-color: var(--bt-connected-indent-line-color);\n  width: var(--bt-indentation-width-hover);\n  top: calc(var(--list-spacing-bt) * 0.075em - var(--font-size-list) * 0.6);\n  left: calc(-1.5 * var(--list-indent));\n  bottom: calc(var(--list-spacing-bt) * 0.075em - var(--font-size-list) * 0.5);\n}\n\n/* Elbows items */\nbody.bt-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li:hover::before {\n  content: \"\";\n  position: absolute;\n  background-color: transparent;\n  top: calc(var(--list-spacing-bt) * 0.075em - var(--font-size-list) * 0.6);\n  left: calc(-1.5 * var(--list-indent));\n  width: calc(1em + var(--size-4-4));\n  height: calc(var(--font-size-list) * 1.27);\n  border-bottom-left-radius: var(--radius-m);\n  border-bottom: var(--bt-indentation-width-hover) solid var(--bt-connected-indent-line-color);\n  border-left: var(--bt-indentation-width-hover) solid var(--bt-connected-indent-line-color);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li:has( ~ li:hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > ul:has(+ ol) > li::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > ol:has(+ ul) > li::before {\n  filter: hue-rotate(60deg);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:has( ~ li:hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > ul:has(+ ol) > li::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > ol:has(+ ul) > li::before {\n  filter: hue-rotate(120deg);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) >li:has( ~ li:hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ul:has(+ ol) > li::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ol:has(+ ul) > li::before {\n  filter: hue-rotate(180deg);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) >li:has( ~ li:hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ul:has(+ ol) > li::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ol:has(+ ul) > li::before {\n  filter: hue-rotate(240deg);\n}\n\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:has( ~ li:hover)::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ul:has(+ ol) > li::before,\nbody.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout=\"kanban\"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ol:has(+ ul) > li::before {\n  filter: hue-rotate(300deg);\n}\n\n\n/*===========*/\n:is(.markdown-preview-view,.markdown-rendered) :is(b,strong),\n.view-header-title {\n  font-weight: bold;\n}\n\nspan.cm-strong,\n:not(font)>strong,\n.cm-s-obsidian .cm-highlight.cm-strong {\n  font-weight: var(--font-weight-strong);\n}\n\nspan.cm-strong,\n:not(font)>strong,\n.cm-s-obsidian .cm-highlight.cm-strong {\n  color: var(--accent-strong) !important;\n  font-family: var(--font-family-strong) !important;\n}\n\nfont>strong {\n  font-family: var(--font-family-strong) !important;\n}\n\nspan.cm-em,\nspan.cm-em.cm-highlight,\nspan.cm-em.cm-quote,\nspan.cm-em.cm-highlight.cm-quote,\n:is(.markdown-preview-view,.markdown-rendered) :not(font):not(strong)>em,\n:is(.markdown-preview-view,.markdown-rendered) em>mark {\n  color: var(--accent-em);\n  font-family: var(--font-family-em);\n  font-style: var(--font-style-em);\n}\n\n*:not(font)>em>strong,\n*:not(font)>strong>em,\n.cm-strong.cm-em {\n  padding-right: 0.05em;\n  background-clip: text;\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n  background-color: #f55454;\n  background-image: linear-gradient(120deg, var(--strong-em-color-1) 0%, var(--strong-em-color-2) 80%);\n  font-family: var(--font-family-strong) !important;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) :not(font)>strong>em>mark {\n  background-color: var(--mark-highlight-strong-em);\n  padding: 1px 3px;\n  border-radius: var(--radius-xs);\n}\n\nem>strong>font,\nstrong>em>font,\nstrong>em>mark>font {\n  background-image: initial;\n  background-clip: initial;\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: initial;\n  background-color: initial;\n}\n\n/*internal link with strong&em*/\nstrong>em>.internal-link,\n.cm-strong.cm-em.cm-hmd-internal-link {\n  -webkit-text-fill-color: initial;\n  text-decoration: underline !important;\n}\n\n.markdown-source-view.mod-cm5 span.cm-formatting.cm-formatting-strong.cm-strong,\n.markdown-source-view.mod-cm5 span.cm-formatting.cm-formatting-em.cm-em {\n  opacity: 0.2;\n}\n\n.theme-dark .markdown-source-view.mod-cm5 .cm-formatting.cm-formatting-strong.cm-em.cm-strong {\n  opacity: 0.2;\n  -webkit-text-fill-color: var(--green);\n}\n\n.theme-light .markdown-source-view.mod-cm5 .cm-formatting.cm-formatting-strong.cm-em.cm-strong {\n  opacity: 0.2;\n  -webkit-text-fill-color: var(--orange);\n}\n\na:not([class*=\"is-unresolved\"]).internal-link>strong,\na.external-link>strong,\na:not([class*=\"is-unresolved\"]).internal-link>em,\na.external-link>em {\n  color: var(--text-accent);\n}\n\nbody.remove-external-link-icon a.external-link {\n  background-image: none;\n}\nbody.remove-external-link-icon span.external-link\n{\n  background-image:none;\n}\n/*link format [[]]*/\n.cm-formatting-link.cm-strong.cm-em {\n  -webkit-text-fill-color: var(--text-faint);\n  opacity: 0.2;\n}\n\ndiv.CodeMirror-activeline .CodeMirror-line span.cm-formatting-link.cm-strong.cm-em {\n  opacity: 1;\n}\n\n.theme-dark div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-strong.cm-strong {\n  opacity: 1;\n  color: var(--text-accent);\n}\n\n.theme-dark div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-em.cm-em {\n  opacity: 1;\n  color: var(--text-orange);\n}\n\n.theme-dark div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-strong.cm-em.cm-strong {\n  opacity: 1;\n  color: var(--green);\n}\n\n.theme-light div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-strong.cm-strong {\n  opacity: 1;\n  color: var(--orange);\n}\n\n.theme-light div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-em.cm-em,\n.theme-light div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-strong.cm-em.cm-strong {\n  opacity: 1;\n  color: var(--orange);\n}\n\n.workspace>.workspace-split>.workspace-leaf:first-of-type:last-of-type .view-header {\n  border: none;\n  background: var(--background-primary);\n}\n\n/*smaller header title*/\n.view-header-title {\n  font-size: var(--font-size-file-header-title);\n}\n\n.popover.hover-popover {\n  overflow: hidden;\n  box-shadow: 0 0 6px 6px var(--theme-color-translucent-015);\n}\n\n \n\n/*hover editor plugin*/\n.popover.hover-editor .popover-title:after {\n  background: none !important;\n}\n\nbody:not(.remove-heading-indicator) .popover h1:hover::before,\nbody:not(.remove-heading-indicator) .markdown-embed h1:hover::before,\nbody:not(.remove-heading-indicator) .markdown-preview-view .callout-content h1:hover::before {\n  content: 'H1';\n  position: absolute;\n  font-size: 0.4em;\n  width: auto;\n  border: 1px solid;\n  padding: 0 2px;\n  border-radius: var(--radius-xs);\n  top: -1.1em;\n}\nbody:not(.remove-heading-indicator) .popover h2:hover::before,\nbody:not(.remove-heading-indicator) .markdown-embed h2:hover::before,\nbody:not(.remove-heading-indicator) .markdown-preview-view .callout-content h2:hover::before {\n  content: 'H2';\n  position: absolute;\n  font-size: 0.45em;\n  width: auto;\n  border: 1px solid;\n  padding: 0 2px;\n  border-radius: var(--radius-xs);\n  top: -1.1em;\n}\nbody:not(.remove-heading-indicator) .popover h3:hover::before,\nbody:not(.remove-heading-indicator) .markdown-embed h3:hover::before,\nbody:not(.remove-heading-indicator) .markdown-preview-view .callout-content h3:hover::before {\n  content: 'H3';\n  position: absolute;\n  font-size: 0.45em;\n  width: auto;\n  border: 1px solid;\n  padding: 0 2px;\n  border-radius: var(--radius-xs);\n  top: -1.1em;\n}\nbody:not(.remove-heading-indicator) .popover h4:hover::before,\nbody:not(.remove-heading-indicator) .markdown-embed h4:hover::before,\nbody:not(.remove-heading-indicator) .markdown-preview-view .callout-content h4:hover::before {\n  content: 'H4';\n  position: absolute;\n  font-size: 0.5em;\n  width: auto;\n  border: 1px solid;\n  padding: 0 2px;\n  border-radius: var(--radius-xs);\n  top: -1.1em;\n}\nbody:not(.remove-heading-indicator) .popover h5:hover::before,\nbody:not(.remove-heading-indicator) .markdown-embed h5:hover::before,\nbody:not(.remove-heading-indicator) .markdown-preview-view .callout-content h5:hover::before {\n  content: 'H5';\n  position: absolute;\n  font-size: 0.55em;\n  width: auto;\n  border: 1px solid;\n  padding: 0 2px;\n  border-radius: var(--radius-xs);\n  top: -1.1em;\n}\nbody:not(.remove-heading-indicator) .popover h6:hover::before,\nbody:not(.remove-heading-indicator) .markdown-embed h6:hover::before,\nbody:not(.remove-heading-indicator) .markdown-preview-view .callout-content h6:hover::before {\n  content: 'H6';\n  position: absolute;\n  font-size: 0.6em;\n  width: auto;\n  border: 1px solid;\n  padding: 0 2px;\n  border-radius: var(--radius-xs);\n  top: -1.1em;\n}\n\nbody:not(.remove-heading-indicator) .markdown-embed :is(h1, h2, h3, h4, h5, h6):hover::before,\nbody:not(.remove-heading-indicator) .callout-content :is(h1, h2, h3, h4, h5, h6):hover::before{\n  margin-left: 0 !important;\n}\nbody:not(.remove-heading-indicator) .callout-content :is(h1, h2, h3, h4, h5, h6):hover::before {\n  top: -1.25em;\n}\n\n:is(.markdown-preview-section,.markdown-rendered) table:not(:is(.dataview.table-view-table,.table-editor)) {\n\n  border-collapse: collapse;\n  overflow: auto;\n  margin: 20px auto;\n}\n\nbody.table-width-100 :is(.markdown-preview-section,.markdown-rendered) table:not(.dataview.table-view-table) {\n  width: 100%;\n}\nbody.table-width-auto :is(.markdown-preview-section,.markdown-rendered) table:not(.dataview.table-view-table) {\n  width: auto;\n}\n\n:is(.markdown-preview-section,.markdown-rendered) table:not(:is(.dataview.table-view-table,.table-editor)):active,\n:is(.markdown-preview-section,.markdown-rendered) table:not(:is(.dataview.table-view-table,.table-editor)):hover {\n  overflow: hidden;\n  resize: both !important;\n}\n\nbody .markdown-preview-view th,\nbody .markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th,\nbody .table-view-table>thead>tr>th {\n  background-image: none;\n}\n/*修复Itinerary插件显示问题*/\n:is(.markdown-preview-view,.markdown-rendered) :is(.markdown-preview-section,.markdown-rendered) .block-language-itinerary.fc table {\n  overflow: unset;\n}\n\n/*modified from https://codepen.io/brettdewoody/pen/oBjbbB */\nbody.no-wrapped-table-cell table:not([class*=\"table-view-table\"]),\nbody.no-wrapped-dvtable-cell .dataview.table-view-table {\n  width: 100%;\n  table-layout: fixed;\n}\n\nbody.no-wrapped-table-cell table:not([class*=\"table-view-table\"]) :is(th,td),\nbody.no-wrapped-dvtable-cell .dataview.table-view-table :is(th,td) {\n  white-space: nowrap;\n  overflow-x: auto;\n  text-overflow: ellipsis;\n}\n\nbody.no-wrapped-table-cell table:not([class*=\"table-view-table\"]) :is(th,td):hover,\nbody.no-wrapped-dvtable-cell .dataview.table-view-table :is(th,td):hover {\n  text-overflow: clip;\n}\n/*modified from https://forum.obsidian.md/t/custom-css-for-tables-5-new-styles-ready-to-use-in-your-notes/17084 */\n\n/****dataview table***/\ntable.table-view-table > thead > tr > th {\n  font-size: 0.9em;\n}\ntable.table-view-table > tbody > tr > td {\n  font-size: 0.85em;\n}\n\nbody.wrapped-dvtable:not(.no-wrapped-dvtable-cell):not(.no-wrapped-dvtable) :is(.markdown-preview-view,.markdown-rendered) table.dataview.table-view-table>thead>tr,\nbody.wrapped-dvtable:not(.no-wrapped-dvtable-cell):not(.no-wrapped-dvtable) :is(.markdown-preview-view,.markdown-rendered) .table.dataview.table-view-table>tbody>tr,\nbody.wrapped-table:not(.no-wrapped-table-cell):not(.no-wrapped-table) :is(.markdown-preview-view,.markdown-rendered) table:not([class*=\"table-view-table\"]) >thead>tr,\nbody.wrapped-table:not(.no-wrapped-table-cell):not(.no-wrapped-table) :is(.markdown-preview-view,.markdown-rendered) table:not([class*=\"table-view-table\"]) >tbody>tr {\n  white-space: pre-wrap;\n  word-break: break-word;\n  overflow-wrap: anywhere;\n}\n\nbody.no-wrapped-dvtable .block-language-dataview,\nbody.no-wrapped-table table:not([class*=\"table-view-table\"]) {\n  width: 100%;\n  margin: 0;\n  overflow-x: auto;\n  white-space: nowrap;\n}\nbody.no-wrapped-dvtable table.dataview th {\n  padding: 0 20px;\n  font-size: 1em;\n}\n\nbody.no-wrapped-dvtable table.dataview tbody tr td:first-child {\n  font-size: 0.9em;\n}\n\nbody.no-wrapped-dvtable table.dataview td:not(:first-child),\nbody.no-wrapped-dvtable table.dataview tr > td:last-of-type {\n  font-size: 0.9em;\n  max-width: unset;\n}\n\nbody.auto-serial-number-dvtable .markdown-source-view:not(.cards) .dataview.table-view-table {\n  counter-reset: sec;\n}\nbody.auto-serial-number-dvtable .markdown-source-view:not(.cards) .dataview.table-view-table> tbody > tr> td:first-child::before {\n  counter-increment: sec;\n  content:counter(sec) \". \";\n}\n\nbody.auto-serial-number-dvtable .markdown-preview-view:not(.cards) .dataview.table-view-table {\n  counter-reset: section;\n}\nbody.auto-serial-number-dvtable .markdown-preview-view:not(.cards) .dataview.table-view-table> tbody > tr> td:first-child::before {\n  counter-increment: section;\n  content:counter(section) \". \";\n}\n\nbody:not(.no-wrapped-dvtable) :is(.markdown-preview-view,.markdown-rendered) .table-view-table>tbody>tr>td,\nbody:not(.no-wrapped-dvtable) .markdown-source-view.mod-cm6 .table-view-table>tbody>tr>td {\n  max-width: 18em;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) table tbody>tr:nth-child(odd),\n.markdown-source-view table tbody>tr:nth-child(odd) {\n  background-color: var(--table-background-color-odd);\n}\n\n:is(.markdown-preview-view,.markdown-rendered) table tbody>tr,\n.markdown-source-view table tbody>tr {\n  background-color: var(--table-background-color);\n}\n\n:is(.markdown-preview-view,.markdown-rendered) :is(th,td) {\n  padding: 4px 10px;\n  border: none;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) th,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) thead tr > th:nth-child(2n+2) {\n  background-color: var(--table-thead-background-color);\n  font-family: var(--font-family-strong);\n}\n\n\n/*table hover*/\n:is(.markdown-preview-view,.markdown-rendered) td:hover,\n.markdown-rendered tbody tr > td:nth-child(2n+2):hover {\n  background-color: var(--table-hover-color);\n}\n\n/*table raw hover*/\n:is(.markdown-preview-view,.markdown-rendered) table tbody>tr:hover,\n.markdown-rendered tbody tr:nth-child(odd):hover {\n  background-color: var(--table-hover-raw-color);\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) th:hover,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) thead tr > th:nth-child(2n+2):hover {\n  background-color: var(--table-hover-thead-color);\n}\n\n\nbody.toggle-table-transition :is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) tbody tr:nth-child(odd):hover,\nbody.toggle-table-transition :is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) tbody tr:hover{\n  background: var(--table-hover-raw-color);\n  transform: scale(1.02);\n  transition: transform 0.1s cubic-bezier(0.11, 0.33, 0.23, 0.33);\n}\n\nbody.toggle-table-transition :is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) tbody td:hover{\n  background: var(--table-hover-color);\n  transform: scale(1.02);\n  transition: transform 0.1s cubic-bezier(0.22, 0.66, 0.46, 0.66);\n}\n\nbody.show-border-table :is(.markdown-preview-view,.markdown-rendered) :is(th,td) {\n  border: 1px solid var(--table-border-color);\n}\n\n:is(.markdown-preview-view,.markdown-rendered) table {\n  box-shadow: 1px 1px 0px rgba(0, 0, 0, 0.1);\n}\n\nbody.table-style-one.theme-light {\n  --table-background-color-odd: rgba(0, 0, 0, 0.02);\n  --table-background-color: rgba(0, 0, 0, 0.02);\n  --table-thead-background-color: rgba(0, 0, 0, 0.1);\n  --table-hover-color: rgba(0, 0, 0, 0.03);\n  --table-hover-raw-color: rgba(0, 0, 0, 0.05);\n  --table-hover-thead-color: var(--table-thead-background-color);\n}\nbody.table-style-one.theme-dark {\n  --table-background-color-odd: rgba(0, 0, 0, 0.3);\n  --table-background-color: rgba(0, 0, 0, 0.3);\n  --table-thead-background-color: rgba(0, 0, 0, 0.5);\n  --table-hover-color: rgba(0, 0, 0, 0.5);\n  --table-hover-raw-color: rgba(0, 0, 0, 0.5);\n  --table-hover-thead-color: var(--table-thead-background-color);\n}\n\nbody.table-style-two.theme-light {\n  --table-background-color-odd: rgba(0, 0, 0, 0.02);\n  --table-background-color: rgba(0, 0, 0, 0.05);\n  --table-thead-background-color: rgba(0, 0, 0, 0.1);\n  --table-hover-color: rgba(0, 0, 0, 0.03);\n  --table-hover-raw-color: rgba(0, 0, 0, 0.09);\n  --table-hover-thead-color: var(--table-thead-background-color);\n}\nbody.table-style-two.theme-dark {\n  --table-background-color-odd: rgba(0, 0, 0, 0.3);\n  --table-background-color: rgba(0, 0, 0, 0.4);\n  --table-thead-background-color: rgba(0, 0, 0, 0.5);\n  --table-hover-color: rgba(0, 0, 0, 0.5);\n  --table-hover-raw-color: rgba(0, 0, 0, 0.5);\n  --table-hover-thead-color: var(--table-thead-background-color);\n}\n\nbody.table-style-two :is(.markdown-preview-view,.markdown-rendered) th {\n  border: none;\n  border-bottom: 2px solid;\n}\nbody.table-style-two :is(.markdown-preview-view,.markdown-rendered) td {\n  border: none;\n}\n\nbody.table-style-three :is(.markdown-preview-view,.markdown-rendered) th,\nbody.table-style-three .markdown-source-view th,\nbody.table-style-three :is(.markdown-preview-view,.markdown-rendered) th:hover,\nbody.table-style-three .markdown-source-view th:hover,\nbody.table-style-three :is(.markdown-preview-view,.markdown-rendered) td:hover,\nbody.table-style-three .markdown-source-view td:hover,\nbody.table-style-three :is(.markdown-preview-view,.markdown-rendered) table tbody>tr:hover,\nbody.table-style-three .markdown-source-view table tbody>tr:hover,\nbody.table-style-three :is(.markdown-preview-view,.markdown-rendered) table tbody>tr:nth-child(odd),\nbody.table-style-three .markdown-source-view table tbody>tr:nth-child(odd),\nbody.table-style-three :is(.markdown-preview-view,.markdown-rendered) table tbody>tr,\nbody.table-style-three .markdown-source-view table tbody>tr {\n  background-color: transparent;\n}\n\n/*Full-width table dvtable callout backlinks layout*/\n/*modified from https://github.com/efemkay */\n.markdown-source-view.mod-cm6.is-readable-line-width.fullwidth .cm-sizer,\n.markdown-source-view.mod-cm6.is-readable-line-width.fullwidth .cm-line,\n.markdown-source-view.mod-cm6.fullwidth.is-readable-line-width:not(.is-rtl) .cm-contentContainer,\n.markdown-source-view.mod-cm6.fullwidth .cm-contentContainer,\n.markdown-source-view.mod-cm6.fullwidth .cm-contentContainer > div,\n.markdown-source-view.mod-cm6.fullwidth .cm-contentContainer > div.cm-content {\n  max-width: 100%;\n}\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks)   .markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer .inline-title,\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks)   .markdown-source-view.mod-cm6.is-readable-line-width .metadata-container\n{\n  margin-left: calc((100% - var(--file-line-width)) / 2);\n}\n\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer,\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6.is-readable-line-width:not(.is-rtl) .cm-contentContainer,\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer,\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div,\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div.cm-content,\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div.cm-content .cm-table-widge\n{\n  max-width: 100%;\n \n}\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer,\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div {\n  \n  margin-inline: auto;\n  width: 100%;\n}\n\n/*\tEditing View -- set all divs back to normal width (ensuring specificity rule over some theme), then\texpand to full-width for each selected css class */\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) div.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div,\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks)  div.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > .cm-line {\n  max-width: var(--file-line-width);\n  margin-inline: auto !important;\n} /* important for margin needed because app.css:2842 use it */\n\nbody.full-width-dvtable .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div.cm-preview-code-block:not(.admonition-parent),\nbody.full-width-dvtable .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div.cm-preview-code-block>.block-language-dataviewjs ,\nbody.full-width-dvtable .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div.cm-preview-code-block>.block-language-dataview ,\nbody.full-width-table .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div:is(.HyperMD-table-row, .cm-table-widget),\nbody.full-width-callout .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div:is(.cm-callout,.admonition-parent),\nbody.full-width-backlinks .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div:is(.embedded-backlinks) > div {\n  max-width: 100%;\n}\n\nbody.full-width-dvtable .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div.cm-preview-code-block>div[class^=\"block-language\"]:not([class^=\"block-language-dataview\"])\n{\n  max-width: var(--file-line-width);\n  margin-inline: auto;\n}\n\n/*\tReading View -- similar to Editing View, set all divs to normal-width and then selected divs to full-width,\n\t\thowever, for Reading View, wide-dataview and wide-table will require Contextual Typography plugin */\n:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks)\tdiv.markdown-preview-view:not(.fullwidth) .markdown-preview-sizer.markdown-preview-sizer > div:not(.obsidian-banner-wrapper) {\n  max-width: var(--file-line-width);\n  margin-inline: auto;\n}\nbody.full-width-dvtable .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div[data-block-language=\"dataview\"],\nbody.full-width-dvtable .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div[data-block-language=\"dataviewjs\"],\nbody.full-width-dvtable .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-lang-dataviewjs),\nbody.full-width-dvtable .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-lang-dataview),\nbody.full-width-table .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-table),\nbody.full-width-callout .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is([data-callout],.admonition-parent),\nbody.full-width-backlinks .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.embedded-backlinks) {\n  max-width: 100%!important;\n}\n\n/*Full-width table dvtable callout backlinks layout*/\n/*modified from https://github.com/efemkay */\n\n/*\tEditing View -- set Readable Line Length (RLL) to wide (100%) for any css class with \"wide\" word in it. / \"width:100%\" added for Blue Topaz / div.cm-content added to override Mado 11 */\ndiv[class*=\"wide-\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer,\ndiv[class*=\"wide-\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div,\ndiv[class*=\"wide-\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div.cm-content,\ndiv[class*=\"wide-\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div.cm-content .cm-table-widget {\n  max-width: 100%;\n  /* width: 100%;  ob1.0*/\n}\n\n/*\tReading View -- similar to Editing View, set the RLL to 100% for any css class with \"wide\" word in it. \"width:100%\" added for Blue Topaz */\ndiv[class*=\"wide-\"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer,\ndiv[class*=\"wide-\"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div {\n  max-width: 100%;\n  margin-inline: auto;\n  width: 100%;\n}\n\n/* === Wide Dataview, Table & Backlink === */\n/*\tEditing View -- set all divs back to normal width (ensuring specificity rule over some theme), then expand to full-width for each selected css class (i.e. wide-dataview, wide-table and wide-backlinks) */\ndiv.markdown-source-view.mod-cm6.is-readable-line-width:is(.wide-dataview,.wide-table,.wide-backlinks,.wide-callout) .cm-contentContainer > div > div,\ndiv.markdown-source-view.mod-cm6.is-readable-line-width:is(.wide-dataview,.wide-table,.wide-backlinks,.wide-callout) .cm-contentContainer > div > .cm-line {\n  max-width: var(--file-line-width);\n  margin-inline: auto !important;\n} /* important for margin needed because app.css:2842 use it */\ndiv[class*=\"-dataview\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div.cm-preview-code-block:not(.admonition-parent),\ndiv[class*=\"-table\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div:is(.HyperMD-table-row, .cm-table-widget),\ndiv[class*=\"-callout\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div:is(.cm-callout,.admonition-parent),\ndiv[class*=\"-backlinks\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div:is(.embedded-backlinks) > div {\n  max-width: 100%;\n}\n\ndiv[class*=\"-dataview\"].markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer > div > div.cm-preview-code-block>div[class^=\"block-language\"]:not(.block-language-dataview) {\n  max-width: var(--file-line-width);\n  margin-inline: auto;\n}\n\n/*\tReading View -- similar to Editing View, set all divs to normal-width and then selected divs to full-width, however, for Reading View, wide-dataview and wide-table will require Contextual Typography plugin */\ndiv.markdown-preview-view:is(.wide-dataview,.wide-table,.wide-backlinks,.wide-callout) .markdown-preview-sizer.markdown-preview-sizer > div {\n  max-width: var(--file-line-width);\n  margin-inline: auto;\n}\ndiv[class*=\"-dataview\"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-lang-dataview),\ndiv[class*=\"-table\"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-table),\ndiv[class*=\"-callout\"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is([data-callout],.admonition-parent),\ndiv[class*=\"-backlinks\"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.embedded-backlinks) {\n  max-width: 100%!important;\n}\n\n/***end--Full-width table display--end****/\n\n.popover mark {\n  color: var(--text-normal);\n}\n\n.theme-light .cm-s-obsidian span.cm-formatting-highlight,\n.theme-light .cm-s-obsidian span.cm-highlight:not([class*=\"code\"]),\n.theme-light :is(.markdown-preview-view,.markdown-rendered) mark,\n.theme-light .cm-formatting.cm-formatting-highlight.cm-strong.cm-em.cm-highlight,\n.theme-light .popover mark,\n.theme-light span.cm-strong.cm-em.cm-highlight {\n  background-color: hsla(var(--text-highlight-bg-h-light), var(--text-highlight-bg-s-light), var(--text-highlight-bg-l-light), var(--text-highlight-bg-a-light));\n}\n.theme-dark .cm-s-obsidian span.cm-formatting-highlight,\n.theme-dark .cm-s-obsidian span.cm-highlight:not([class*=\"code\"]),\n.theme-dark :is(.markdown-preview-view,.markdown-rendered) mark,\n.theme-dark .cm-formatting.cm-formatting-highlight.cm-strong.cm-em.cm-highlight,\n.theme-dark .popover mark,\n.theme-dark span.cm-strong.cm-em.cm-highlight {\n  background-color: hsla(var(--text-highlight-bg-h-dark), var(--text-highlight-bg-s-dark), var(--text-highlight-bg-l-dark), var(--text-highlight-bg-a-dark));\n}\n\n.theme-light :is(.markdown-preview-view,.markdown-rendered) :not(font)>strong>em>mark {\n  background-color: hsla(var(--text-highlight-bg-h-light), calc(var(--text-highlight-bg-s-light) * 1.5), calc(var(--text-highlight-bg-l-light) * 0.6), calc(var(--text-highlight-bg-a-light) * 0.28));\n}\n\n.theme-dark :is(.markdown-preview-view,.markdown-rendered) :not(font)>strong>em>mark {\n  background-color: hsla(var(--text-highlight-bg-h-dark), calc(var(--text-highlight-bg-s-dark) * 1.5), calc(var(--text-highlight-bg-l-dark) * 1.1), calc(var(--text-highlight-bg-a-dark) * 0.55));\n}\n\nbody:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight,\nbody:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight + .cm-em.cm-highlight:not([class*=\"strong\"]),\n.markdown-source-view.colorful-highlight .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight,\n.markdown-source-view.colorful-highlight .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight + .cm-em.cm-highlight:not([class*=\"strong\"]),\nbody:not(.remove-colorful-highlight-bg) :is(.markdown-preview-view,.markdown-rendered) :not(font):not(strong)>em>mark,\n:is(.markdown-preview-view,.markdown-rendered).colorful-highlight :not(font):not(strong)>em>mark {\n  background-color: var(--bg-color-highlight-1);\n  color: var(--color-highlight-1);\n  font-style: normal;\n  font-weight: var(--font-weight-highlight-1);\n}\nbody:not(.remove-colorful-highlight-bg) :is(.markdown-preview-view,.markdown-rendered) :not(font):not(strong)>em>mark {\n  border-radius: var(--radius-xs);\n}\n\nbody:not(.remove-colorful-highlight-bg) .cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong,\nbody:not(.remove-colorful-highlight-bg) .cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-highlight.cm-strong:not([class*=\"em\"]),\n.markdown-source-view.colorful-highlight .cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong,\n.markdown-source-view.colorful-highlight .cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-highlight.cm-strong:not([class*=\"em\"]),\nbody:not(.remove-colorful-highlight-bg) :is(.markdown-preview-view,.markdown-rendered) :not(font):not(em)>strong>mark,\n:is(.markdown-preview-view,.markdown-rendered).colorful-highlight :not(font):not(em)>strong>mark {\n  background-color: var(--bg-color-highlight-2) !important;\n  color: var(--color-highlight-2) !important;\n  font-weight: var(--font-weight-highlight-2);\n}\n\nbody:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong,\nbody:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-em.cm-highlight.cm-strong,\n.markdown-source-view.colorful-highlight .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong,\n.markdown-source-view.colorful-highlight .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-em.cm-highlight.cm-strong,\nbody:not(.remove-colorful-highlight-bg) :is(.markdown-preview-view,.markdown-rendered) :not(font)>strong>em>mark,\n:is(.markdown-preview-view,.markdown-rendered).colorful-highlight :not(font)>strong>em>mark {\n  background-color: var(--bg-color-highlight-3) !important;\n  color: var(--color-highlight-3) !important;\n  font-style: normal;\n  font-weight: var(--font-weight-highlight-3);\n  background-image: initial;\n  background-clip: initial;\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: initial;\n}\nbody:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong,\nbody:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-em.cm-highlight.cm-strong,\nbody:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight,\nbody:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight + .cm-em.cm-highlight:not([class*=\"strong\"]) {\n  padding: 1px 0;\n}\n\nbody.all-rounded-corners-highlight .cm-s-obsidian span.cm-highlight, \nbody.all-rounded-corners-highlight :is(.markdown-preview-view,.markdown-rendered) mark {\n  -webkit-box-decoration-break: clone;\n  border-radius: 5px;\n  padding: 1px 2px;\n  margin: 0 2px;\n}\n\nbody.all-rounded-corners-highlight .cm-s-obsidian .cm-formatting.cm-formatting-highlight:has(+ span.cm-highlight) {\n  border-radius: 5px 0 0 5px;\n  padding: 1px 0;\n  margin: 0 -5px 0 2px;\n}\n\nbody.all-rounded-corners-highlight .cm-s-obsidian .cm-formatting.cm-formatting-highlight+span.cm-highlight:has(+ span.cm-highlight) {\n  padding: 1px 4px;\n}\n\nbody.all-rounded-corners-highlight .cm-s-obsidian span.cm-highlight+.cm-formatting.cm-formatting-highlight {\n  border-radius: 0 5px 5px 0;\n  padding: 1px 0;\n  margin: 0 2px 0 -5px;\n}\n\nbody.no-rounded-corners-highlight .cm-s-obsidian span.cm-highlight, \nbody.no-rounded-corners-highlight :is(.markdown-preview-view,.markdown-rendered) mark {\n  border-radius: 0;\n  padding: 0;\n  margin: 0;\n}\n\n.status-bar,\n.side-dock.mod-right,\n.side-dock.mod-left {\n  border-color: var(--panel-border-color);\n  border-width: 1px;\n}\n/* ----状态栏透明开关----------- */\n\nbody.bt-search-bar-bottom .document-search-container {\n  bottom: 38px;\n  width: 100% !important;\n  position: absolute;\n  height: 62px !important;\n  margin: 0 5px;\n}\nbody.bt-status-on .status-bar {\n  position: sticky;\n}\n.status-bar {\n  --bar-vertical-padding: 5px;\n  --bar-height: calc(22px + (var(--bar-vertical-padding)));\n  line-height: 1;\n  height: var(--bar-height);\n  max-height: var(--bar-height);\n  min-height: var(--bar-height);\n  overflow: hidden;\n  color: var(--status-bar-text-color);\n  border-top: 1px solid var(--panel-border-color);\n  background-color: var(--status-bar-bg);\n}\n\n.is-translucent .status-bar {\n  margin: 0;\n}\n\nbody.dark-background-file .nav-file-title.is-active {\n  background-color: var(--theme-color);\n  color: var(--white);\n}\n\n/** file name**/\n\nbody.file-name-animation .nav-file-title-content:not(.is-being-renamed):hover {\n  animation: filemove 1.5s 1 normal linear;\n}\n\nbody.file-name-animation .nav-file-title-content:not(.is-being-renamed) {\n  min-width: 200px;\n  white-space: nowrap;\n}\nbody.file-name-animation .nav-file {\n  display: table;\n}\n/** file folder name**/\nbody.file-name-animation .obsidian-icon-folder-icon {\n  vertical-align: middle;\n  display: inline;\n}\n\nbody.file-name-animation .nav-folder-title {\n  white-space: nowrap;\n}\n\n.nav-folder-title-content.is-being-renamed {\n  white-space: break-spaces;\n}\n\nbody.file-name-animation .nav-folder-title-content:not(.is-being-renamed) {\n  min-width: 200px;\n  white-space: nowrap;\n}\nbody.file-name-animation .nav-folder-title-content:not(.is-being-renamed):hover {\n  animation: filemove 1.5s 1 normal linear;\n}\n\n@keyframes filemove {\n  0% {transform: translate(0, 0);}\n  100% {transform: translate(calc(-100% + 200px), 0);}\n}\n\nbody.file-bg-rounded-rectangle .nav-file-title.is-active,\nbody.file-bg-rounded-rectangle .nav-folder-title.is-active,\nbody:not(.is-grabbing).file-bg-rounded-rectangle .nav-file-title:hover,\nbody:not(.is-grabbing).file-bg-rounded-rectangle .nav-folder-title:hover {\n  border-radius: var(--radius-m);\n}\n\nbody.file-bg-pill .nav-file-title.is-active,\nbody.file-bg-pill .nav-folder-title.is-active,\nbody:not(.is-grabbing).file-bg-pill .nav-file-title:hover,\nbody:not(.is-grabbing).file-bg-pill .nav-folder-title:hover {\n  border-radius: 15px;\n}\n\nbody.file-bg-pill .nav-folder.mod-root>.nav-folder-title {\n  margin-left: -2px;\n}\n\n.item-list {\n  padding: 0;\n}\n\nbody.file-bg-pill .item-list {\n  padding: 0 4px 0 1px;\n}\n\n.item-list .nav-file-icon {\n  margin-left: 2px;\n}\n\n.nav-file-title.is-active {\n  background-color: var(--theme-color-translucent-01);\n}\n\nbody:not(.is-grabbing) .tree-item-self.is-clickable.nav-folder-title:hover {\n  background-color: color-mix(in srgb, var(--nav-item-background-active), transparent 0%);\n  color: var(--text-normal);\n  font-weight: bold;\n}\n\n.nav-folder-title.is-being-dragged-over {\n  border-radius: var(--radius-xs);\n  color: var(--theme-color);\n  background: var(--theme-color-translucent-015);\n}\n\nbody:not(.is-grabbing) .tree-item-self.is-clickable.nav-file-title.is-active:hover,\nbody:not(.is-grabbing) .tree-item-self.is-clickable.nav-file-title:hover,\n.nav-file:not(.is-active):hover .nav-file-title,\n.nav-folder:hover .nav-folder-content {\n  background-color: var(--theme-color-translucent-01);\n}\n\nbody.is-grabbing .nav-folder-title:hover,\nbody.is-grabbing .nav-file-title:hover {\n  font-weight: bold !important;\n  color: var(--theme-color);\n  filter: hue-rotate(160deg);\n  background-color: var(--theme-color-translucent-015);\n  opacity: 1;\n}\n\n.workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title,\n.workspace-leaf.mod-active .nav-file.has-focus > .nav-file-title {\n  background-color: var(--theme-color-translucent-015);\n}\n\nbody.is-grabbing:not(.remove-file-icons):not(.bt-toggle-colorful-folder.folder-style-change-options-colorful) .nav-file-title.is-active[data-path$=\".md\"]>.nav-file-title-content::before,\nbody:not(.remove-file-icons):not(.bt-toggle-colorful-folder.folder-style-change-options-colorful) .nav-file-title.is-active[data-path$=\".md\"]:hover>.nav-file-title-content::before {\n  filter: hue-rotate(160deg);\n}\n\n.side-dock-plugin-panel-inner {\n  padding-left: 6px;\n}\n\n/*link*/\n:is(.markdown-preview-view,.markdown-rendered) .internal-link {\n  font-family: var(--font-family-strong) !important;\n}\n\nbody:not(.default-unresolved-link) :is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved>*,\nbody:not(.default-unresolved-link) *>.internal-link.is-unresolved,\nbody:not(.default-unresolved-link) .markdown-source-view.mod-cm6 .cm-hmd-internal-link  .is-unresolved .cm-underline \n{\n  color: var(--unresolved-link) !important;\n  --link-unresolved-decoration-color:var(--unresolved-link);\n}\n\nbody:not(.default-unresolved-link) .markdown-source-view.mod-cm6 .is-unresolved .cm-underline,\nbody:not(.default-unresolved-link) :is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved {\n  opacity: 0.7;\n}\n\nbody.link-underline-unresolved :is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved>*,\nbody.link-underline-unresolved *>.internal-link.is-unresolved,\nbody.link-underline-unresolved .markdown-source-view.mod-cm6 .cm-hmd-internal-link .is-unresolved .cm-underline,\nbody.link-underline-unresolved .markdown-source-view.mod-cm6 .is-unresolved .cm-underline,\nbody.link-underline-unresolved :is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved,\nbody.link-underline-unresolved .cm-hmd-internal-link .is-unresolved .cm-underline {\n  text-decoration: none !important;\n}\n\nbody:not(.default-unresolved-link) :is(.markdown-preview-view,.markdown-rendered) mark .internal-link.is-unresolved {\n  opacity: 0.9;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved:hover {\n  opacity: 1 !important;\n}\n.metadata-container .internal-link:hover, \n.markdown-rendered .internal-link:hover\n{\n  color: var(--internal-link-color);\n opacity: 0.8;\n}\n.cm-s-obsidian span.cm-hmd-internal-link:hover\n{\n  color: var(--internal-link-color);\n}\n.metadata-container .internal-link,\n .markdown-rendered .internal-link,\na.internal-link,\n.cm-s-obsidian span.cm-hmd-internal-link ,\n.cm-s-obsidian span.cm-hmd-internal-link a {\n  color: var(--internal-link-color);\n}\n.metadata-container a.external-link:hover, \n.markdown-rendered a.external-link:hover\n{\n  color: var(--external-link-color);\n opacity: 0.8;\n}\n.cm-s-obsidian span.cm-link:hover,\n.cm-s-obsidian span.cm-url:hover,\n.markdown-source-view.mod-cm6 .cm-link .cm-underline:hover, \n.markdown-source-view.mod-cm6 .cm-url .cm-underline:hover\n{\n  color: var(--external-link-color);\n}\n.cm-s-obsidian span.cm-link,\n.cm-s-obsidian span.cm-url,\n.cm-s-obsidian span.cm-link a\n{\n  color: var(--external-link-color);\n}\n \n \n/* internal link in highlight\n.cm-highlight.cm-hmd-internal-link,\n:is(.markdown-preview-view,.markdown-rendered) mark .internal-link:not(.is-unresolved) {\n  color: var(--internal-link-color-in-highlight) !important;\n}\n*/\n\n:is(.markdown-preview-view,.markdown-rendered) a:hover {\n  color: var(--text-accent);\n  border-radius: var(--radius-xs);\n  text-decoration: none !important;\n  transition: all 0.4s ease-in-out;\n  text-shadow: var(--window-shadow-hover);\n \n}\n\nbody.colorful-link-animation :is(.markdown-preview-view,.markdown-rendered) a:hover {\n  animation: 2s colorful-link infinite;\n}\n\n@keyframes colorful-link {\n  0% { filter: hue-rotate(0deg); }\n  100% { filter: hue-rotate(360deg); }\n}\n\na.external-link {\n  text-decoration: underline;\n  color: var(--external-link-color);\n}\n\n\nbody.link-underline-external .markdown-source-view.mod-cm6 .cm-link .cm-underline,\nbody.link-underline-externa .markdown-source-view.mod-cm6 .cm-url .cm-underline,\nbody.link-underline-external  a.external-link,\nbody:not(.link-underline-internal) .markdown-source-view.mod-cm6 .cm-hmd-internal-link >*:not(.is-unresolved).cm-underline,\nbody:not(.link-underline-internal) :is(.markdown-preview-view,.markdown-rendered) .internal-link:not(.is-unresolved) {\n  text-decoration-line:none;\n}\n\n.cm-url:hover {\n  transition: all 600ms;\n}\n\n.cm-s-obsidian div.HyperMD-codeblock-bg {\n  background: var(--background-code);\n}\n\n.theme-dark :not(pre)>code[class*='language-'],\n.theme-dark pre[class*='language-'] {\n  background: var(--background-code) ;\n  border-radius: var(--radius-m);\n}\n\n.theme-light :not(pre)>code[class*='language-'],\n.theme-light pre[class*='language-'] {\n  background: var(--background-code);\n  border-radius: var(--radius-m);\n}\n\n.theme-light code[class*=\"language-\"],\n.theme-light pre[class*=\"language-\"] {\n  text-shadow: none;\n  color: var(--code-normal);\n  letter-spacing: calc(var(--letter-space-code) * 0.02em);\n}\n\n.theme-dark code[class*=\"language-\"],\n.theme-dark pre[class*=\"language-\"] {\n  color: var(--code-normal);\n  text-shadow: none;\n  letter-spacing: calc(var(--letter-space-code) * 0.02em);\n}\n\nbody.codebox-frosted-glass .canvas-node-container pre[class*='language-'] {\n  backdrop-filter: none;\n}\nbody.codebox-frosted-glass .cm-s-obsidian div.HyperMD-codeblock-bg,\nbody.codebox-frosted-glass :not(pre)>code[class*='language-'],\nbody.codebox-frosted-glass pre[class*='language-'] {\n  backdrop-filter: blur(calc(var(--blur-codebox-frosted-glass) * 2px));\n}\n\ncode[class*=\"language-\"] {\n  padding: 1em 0.5em;\n}\n\n/*embedded*/\nbody.naked-embed.theme-dark,\nbody.naked-embed.theme-light {\n  --embed-color: transparent !important;\n}\nbody.naked-embed .markdown-source-view.mod-cm6 .markdown-embed {\n  border: none;\n}\nbody.hide-embed-title .markdown-embed-title{\n  display: none;\n}\nbody.embed-hd .markdown-embed :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) {\n  display: none;\n}\n.hide-embed-banner .markdown-embed-content .obsidian-banner-wrapper {\n  display: none;\n}\n\n\n.popover.hover-popover :is(.markdown-preview-view,.markdown-rendered) .markdown-embed,\n.popover .markdown-preview-sizer:is(.markdown-preview-section,.markdown-rendered) {\n  height: auto;\n  min-height: min-content !important;\n}\n\n\nbody.embed-hover.theme-light :is(.markdown-preview-view,.markdown-rendered) .internal-embed .markdown-embed:hover {\n  box-shadow: 0 3px 8px 0 rgba(0, 0, 0, .25);\n  transition: all .2s ease-in-out;\n  transform: translate3d(0px, -3px, 0px);\n}\nbody.embed-hover.theme-light .markdown-source-view .internal-embed .markdown-embed:hover {\n  background: var(--background-primary-alt);\n  color: var(--text-normal);\n  border-radius: 6px;\n  border-width: 1px;\n  box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.1);\n}\n\nbody.embed-hover.theme-dark .internal-embed .markdown-embed:hover {\n  box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22);\n  transform: translate3d(0px, -3px, 0px);\n}\n\nbody:not(.is-mobile).hover-scrollbars .markdown-embed:not(.canvas-node-content),\nbody:not(.is-mobile).hover-scrollbars .popover.hover-popover .markdown-embed .markdown-embed {\n  padding:  0 0 0 1em;\n}\n.markdown-embed:not(.canvas-node-content),\n.popover.hover-popover .markdown-embed .markdown-embed {\n  background-color: var(--embed-color);\n  border: 1px solid var(--embed-color);\n  border-radius: var(--radius-xs);\n  margin-bottom: 0;\n  padding: 0 0.5em 0 1em;\n  margin-top: 0;\n}\n.popover.hover-popover,\n.popover.hover-popover .markdown-embed {\n  background-color: var(--background-popover);\n}\n\n\n.markdown-embed-link,\n.file-embed-link {\n  position: absolute;\n  top: 2px;\n  right: 2px;\n  color: var(--text-faint);\n  cursor: pointer;\n  opacity: 0;\n}\n\n.markdown-embed:hover .markdown-embed-link,\n.markdown-embed:hover .file-embed-link {\n  opacity: 1;\n}\n\n.markdown-source-view .markdown-embed {\n  border-color: transparent;\n  border-radius: var(--radius-xs);\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.cm-s-obsidian) .file-embed {\n  border: 2px solid var(--embed-color);\n  border-radius: var(--radius-l);\n  padding: 0.1em 0.5em;\n  margin: 0.1em 0;\n  background-color: transparent;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.cm-s-obsidian) .file-embed:hover {\n  border: 2px solid var(--theme-color-translucent-04);\n  background-color: var(--embed-color);\n  border-radius: var(--radius-m);\n}\n\n.markdown-embed .markdown-preview-sizer:is(.markdown-preview-section,.markdown-rendered):first-child :is(h1,h2,h3,h4,h5,h6) {\n  margin-block-start: 0.5em;\n}\n\n.inline-embed .markdown-embed-content p:first-child {\n  margin: 0.5em 0;\n}\n\nbody:not(.adjustable-embed-content-height) :is(.markdown-preview-view,.markdown-rendered) .markdown-embed-content {\n  padding-right: 0;\n  max-height: 100%;\n  max-width: 100%;\n  overflow: auto;\n}\n\nbody.adjustable-embed-content-height :is(.markdown-preview-view,.markdown-rendered) .markdown-embed-content {\n  padding-right: 0;\n  max-height: var(--embed-content-height);\n  max-width: 100%;\n  overflow: auto;\n}\n\n.file-embed-icon {\n  color: var(--theme-color);\n  vertical-align: middle;\n}\n\n.markdown-embed-title {\n  font-weight: 600;\n  font-size: var(--font-size-embed-title-size);\n  line-height: inherit;\n  height: unset;\n  word-wrap: break-word;\n  white-space: pre-wrap;\n}\n\n.file-embed-title {\n  font-weight: 600;\n  text-align: left;\n  line-height: 1.5em;\n  font-size: var(--font-size-embed-file);\n}\n\n/* Source: https://github.com/AGMStudio/prism-theme-one-dark */\nbody:not(.whole-code-wrap) code[class*='language-'],\nbody:not(.whole-code-wrap) pre[class*='language-'] {\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: break-word;\n  white-space: pre;\n  -moz-tab-size: 4 !important;\n  -o-tab-size: 4 !important;\n  tab-size: 4 !important;\n}\n\nbody.whole-code-wrap code[class*='language-'],\nbody.whole-code-wrap pre[class*='language-'] {\n  word-spacing: normal;\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n\n\n/* Inline code */\n:not(pre)>code[class*='language-'] {\n  padding: .1em !important;\n  border-radius: var(--radius-s) !important;\n  white-space: normal !important;\n}\n\n.token.important,\n.token.bold {\n  font-weight: bold !important;\n}\n\n.token.italic {\n  font-style: italic !important;\n}\n\n.token.entity {\n  cursor: help !important;\n}\n\n/*show language type in preview mode*/\n/*Thanks to elutao from https://snippets.cacher.io/snippet/018387c872dc39277996 */\nbody:not(.remove-language-type) pre::before {\n  font-family: var(--font-default);\n  color: #95a3b5;\n  opacity: 0.7;\n  font-size: 0.85em;\n  font-weight: 600;\n  position: absolute;\n  right: 48px;\n  top: 0.05em;\n}\n\npre {\n  position: relative;\n}\n\nbody:not(.remove-language-type) pre[class~='language-c']::before {\n  content: \"C\";\n}\nbody:not(.remove-language-type) pre[class~='language-py']::before,\nbody:not(.remove-language-type) pre[class~='language-python']::before {\n  content: \"PYTHON\";\n}\nbody:not(.remove-language-type) pre[class~='language-nginx']::before {\n  content: \"NGINX\";\n}\nbody:not(.remove-language-type) pre[class~='language-css']::before {\n  content: \"CSS\";\n}\nbody:not(.remove-language-type) pre[class~='language-javascript']::before {\n  content: \"JS\";\n}\nbody:not(.remove-language-type) pre[class~='language-js']::before {\n  content: \"JS\";\n}\nbody:not(.remove-language-type) pre[class~='language-php']::before {\n  content: \"PHP\";\n}\nbody:not(.remove-language-type) pre[class~='language-shell']::before,\nbody:not(.remove-language-type) pre[class~='language-bash']::before {\n  content: \"SHELL\";\n}\nbody:not(.remove-language-type) pre[class~='language-flow']::before {\n  content: \"FLOW\";\n}\nbody:not(.remove-language-type) pre[class~='language-sequence']::before {\n  content: \"SEQUENCE\";\n}\nbody:not(.remove-language-type) pre[class~='language-sql']::before {\n  content: \"SQL\";\n}\nbody:not(.remove-language-type) pre[class~='language-yaml']::before {\n  content: \"YAML\";\n}\nbody:not(.remove-language-type) pre[class~='language-ini']::before {\n  content: \"INI\";\n}\nbody:not(.remove-language-type) pre[class~='language-xml']::before {\n  content: \"XML\";\n}\nbody:not(.remove-language-type) pre[class~='language-git']::before {\n  content: \"GIT\";\n}\nbody:not(.remove-language-type) pre[class~='language-cs']::before {\n  content: \"C#\";\n}\nbody:not(.remove-language-type) pre[class~='language-cpp']::before {\n  content: \"C++\";\n}\nbody:not(.remove-language-type) pre[class~='language-java']::before {\n  content: \"JAVA\";\n}\nbody:not(.remove-language-type) pre[class~='language-html']::before {\n  content: \"HTML\";\n}\nbody:not(.remove-language-type) pre[class~='language-txt']::before {\n  content: \"TXT\";\n}\nbody:not(.remove-language-type) pre[class~='language-r']::before {\n  content: \"R\";\n}\nbody:not(.remove-language-type) pre[class~='language-matlab']::before {\n  content: \"MATLAB\";\n}\n\n/* ==== fold icons ==== */\n.CodeMirror-guttermarker-subtle {\n  color: var(--text-normal);\n}\n\n/*-- reduce left padding --*/\ndiv:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting.cm-formatting-header {\n  font-size: 0.6rem !important;\n  opacity: 0.5;\n}\n\ndiv.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-header {\n  font-size: 0.6rem !important;\n  opacity: 1;\n}\n\nspan.cm-formatting.cm-formatting-header {\n  opacity: 0.45;\n}\n\nbody.image-border img{\n  border: 1px solid rgba(var(--mono-rgb-100),0.1);\n  filter: drop-shadow(0px 0px 3px rgba(var(--mono-rgb-100),0.2));\n}\n/* images : reduce displayed size of embedded files, zoom on hover */\nbody:not(.obsidian-default-image) :is(.markdown-preview-view, .markdown-rendered) .workspace-leaf-content[data-type=\"markdown\"] img:not([class*=\"emoji\"]) {\n  max-width: var(--image-max-width);\n  margin-left: auto;\n  margin-right: auto;\n}\n\nbody:not(.obsidian-default-image) .print :is(.markdown-preview-view, .markdown-rendered) img:not([class*=\"emoji\"]) {\n  display: block;\n}\n\nbody:not(.obsidian-default-image) .workspace-leaf-content[data-type=\"markdown\"] .view-content :not(.canvas-node-content)>img:not([class*=\"emoji\"]) {\n  cursor: zoom-in;\n  display: block;\n  margin-left: auto ;\n  margin-right: auto;\n}\n\nbody:not(.image-zoom) .markdown-reading-view button img,\nbody:not(.image-zoom) .markdown-reading-view .callout-title-inner img {\n  pointer-events: none;\n}\n\nbody:not(.image-zoom) .markdown-reading-view img:not([class*=\"emoji\"]):active,\n.workspace-leaf-content[data-type=\"image\"] img:active {\n  cursor: zoom-out !important;\n  position: fixed;\n  object-fit: contain;\n  max-height: 100%;\n  max-width: 100%;\n  height: 100%;\n  width: 100%;\n  margin: 1px auto 0;\n  padding: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 200;\n  background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDgwIDgwIj4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiBmaWxsPSIjRjJGNEY2Ii8+CiAgICA8ZyBmaWxsPSIjRkZGIj4KICAgICAgPHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iNzkiIHg9Ijc4Ii8+CiAgICAgIDxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE5IiB4PSIxOSIvPgogICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxOSIgeD0iMzkiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTkiIHg9IjU5Ii8+CiAgICAgIDxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE5IiB4PSIxOSIgeT0iMjAiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTkiIHg9IjM5IiB5PSIyMCIvPgogICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxOSIgeD0iNTkiIHk9IjIwIi8+CiAgICAgIDxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE5IiB4PSIxOSIgeT0iNDAiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTkiIHg9IjM5IiB5PSI0MCIvPgogICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxOSIgeD0iNTkiIHk9IjQwIi8+CiAgICAgIDxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE5IiB4PSIxOSIgeT0iNjAiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTkiIHg9IjM5IiB5PSI2MCIvPgogICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxOSIgeD0iNTkiIHk9IjYwIi8+CiAgICAgIDxyZWN0IHdpZHRoPSI3OSIgaGVpZ2h0PSIxIiB5PSIxOSIvPgogICAgICA8cmVjdCB3aWR0aD0iNzkiIGhlaWdodD0iMSIgeT0iMzkiLz4KICAgICAgPHJlY3Qgd2lkdGg9Ijc5IiBoZWlnaHQ9IjEiIHk9IjU5Ii8+CiAgICA8L2c+CiAgICA8cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iMiIgeT0iNzgiIGZpbGw9IiNGRkYiLz4KICA8L2c+Cjwvc3ZnPgo=\");\n}\n\nbody:not(.obsidian-default-image)  .workspace-leaf-content[data-type=\"markdown\"]  .internal-embed.image-embed.is-loaded img:not([class*=\"emoji\"]) {\n  max-width: var(--image-max-width);\n \n  display: block;\n}\n\n.internal-embed[alt$=\"inline\"],\n.internal-embed[alt$=\"Inline\"],\n.internal-embed[alt$=\"INLINE\"],\n.internal-embed[alt$=\"inl\"] {\n  display: inline ;\n}\n\nbody:not(.obsidian-default-image) .markdown-source-view.mod-cm6 img:not([class*=\"emoji\"]) {\n  display: block;\n  margin: auto !important;\n  cursor: help;\n}\n\nbody.hide-vault-name .nav-folder.mod-root>.nav-folder-title {\n  display: none;\n}\n\nbody.file-name-wrapped .workspace-leaf-content[data-type=\"file-explorer\"] .nav-file-title-content,\nbody.file-name-wrapped .workspace-leaf-content[data-type=\"file-explorer\"] .nav-folder-title-content {\n  white-space: normal;\n}\n\n.nav-file-title-content.is-being-renamed {\n  margin-left: 0px;\n  text-indent: 0px;\n  color: black !important;\n}\n\n/* Cursor color in normal vim mode and opacity */\n.cm-fat-cursor .CodeMirror-cursor,\n.cm-animate-fat-cursor {\n  width: 0.6em;\n  background: #db9a1f;\n  opacity: 0.6 !important;\n}\n\n/*an active line highlight in vim normal mode */\n.cm-fat-cursor .CodeMirror-activeline .CodeMirror-linebackground,\n.CodeMirror-activeline-background.CodeMirror-linebackground,\n.cm-active.cm-line {\n  background-color: var(--activeline-background) !important;\n}\n\n.mute-code-indent-line .markdown-source-view.mod-cm6 .HyperMD-codeblock .cm-indent::before {\n  display: none;\n}\n\n.muted-activeline-bg .CodeMirror-activeline-background.CodeMirror-linebackground,\n.muted-activeline-bg .markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line:not(.HyperMD-codeblock-bg) {\n  background-color: transparent  !important;\n}\n\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n  padding-left: 0;\n}\n\n.CodeMirror pre.HyperMD-codeblock.CodeMirror-line {\n  padding-left: 4px;\n  letter-spacing: calc(var(--letter-space-code) * 0.02em);\n}\n\n.CodeMirror pre.HyperMD-quote.CodeMirror-line {\n  padding-left: 4px;\n}\n\n.cm-s-obsidian pre.HyperMD-header {\n  padding-top: 0.25em;\n}\n\n/*linenumber*/\n.is-mobile .cm-lineNumbers .cm-gutterElement,\n.cm-s-obsidian .CodeMirror-linenumber {\n  font-family: var(--font-monospace-theme);\n  font-size: 0.85em;\n}\n\n.cm-gutter.cm-lineNumbers {\n  font-family: var(--font-monospace-theme);\n}\n\n.cm-lineNumbers .cm-active.cm-gutterElement {\n  color: var(--text-accent);\n  /* background: var(--activeline-background); */\n}\n\n/*----file explorer smaller fonts & line height----*/\n.workspace-leaf-content[data-type=\"file-explorer\"] .nav-file-title,\n.workspace-leaf-content[data-type=\"file-explorer\"] .nav-folder-title {\n  font-size: var(--font-size-folder-and-file);\n  font-family: var(--font-family-folder-file-title);\n  border-radius: 0;\n}\n\n.workspace-leaf-content[data-type=\"file-explorer\"] .nav-file-title {\n  padding: 1px 5px 3px 4px;\n  color: var(--text-folder-file);\n}\n\n.workspace-leaf-content[data-type=\"file-explorer\"] .nav-folder-title,\n.workspace-leaf-content[data-type=\"file-explorer\"] .tree-item-self.is-clickable.nav-folder-title {\n  font-weight: 600;\n  padding: 4px 0 4px 23px;\n  color: var(--text-normal);\n}\n\n/*rename*/\n.nav-file-title-content.is-being-renamed,\n.nav-folder-title-content.is-being-renamed {\n  cursor: text;\n  border-color: transparent;\n  background-color: white;\n  color: black;\n}\n\n/*---- nav arrows adjust location ----*/\nbody:not(.default-icons) .nav-folder-collapse-indicator {\n  position: absolute;\n  transition: transform 20ms linear 0s;\n}\n\n/* body.default-icons .nav-folder-collapse-indicator {\n  margin-left: -9px;\n} */\n\nbody:not(.default-icons):not(.remove-arrow) .nav-folder-collapse-indicator::before {\n  position: absolute;\n  content: \"↓\";\n  margin-left: 3px;\n  font-family: 'Inter';\n  font-weight: bold;\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n}\n\nbody:not(.default-icons) .nav-folder-collapse-indicator svg {\n  display: none;\n  color: var(--accent-strong);\n  height: 7px;\n  width: 7px;\n}\n\n\n\nbody:not(.default-icons) .nav-folder.is-collapsed .nav-folder-collapse-indicator::before {\n  transform: rotate(-90deg);\n  opacity: 0.55;\n}\n\n/*search icon 1*/\nbody:not(.default-icons) .backlink-pane .search-result-container .collapse-icon {\n  transition: transform 20ms linear 0s;\n}\n\nbody:not(.default-icons) .backlink-pane .search-result-container .collapse-icon::before {\n  content: \"↓\";\n  font-size: 14px;\n  font-family: 'Inter';\n  font-weight: bold;\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n}\n\nbody:not(.default-icons) .backlink-pane .search-result-container .collapse-icon svg {\n  display: none;\n  color: var(--accent-strong);\n  height: 7px;\n  width: 7px;\n}\n\nbody:not(.default-icons) .backlink-pane .search-result-container .tree-item.search-result.is-collapsed .collapse-icon::before {\n  transform: rotate(-90deg);\n  opacity: 0.5;\n}\n\n/* search panel icons */\nbody:not(.default-icons) .workspace-leaf .search-result-container.mod-global-search .tree-item-self.search-result-file-title.is-clickable .collapse-icon {\n  transition: transform 20ms linear 0s;\n}\n\nbody:not(.default-icons) .workspace-leaf .search-result-container.mod-global-search .tree-item-self.search-result-file-title.is-clickable .collapse-icon::before {\n  content: \"↓\";\n  font-size: 14px;\n  font-weight: bold;\n  font-family: 'Inter';\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n}\n\nbody:not(.default-icons) .workspace-leaf .search-result-container.mod-global-search .tree-item-self.search-result-file-title.is-clickable .collapse-icon svg {\n  display: none;\n  color: var(--accent-strong);\n  height: 7px;\n  width: 7px;\n}\n\nbody:not(.default-icons) .workspace-leaf .search-result-container.mod-global-search .tree-item.search-result.is-collapsed .collapse-icon::before {\n  transform: rotate(-90deg);\n  opacity: 0.5;\n}\n\n/* header collaspe indicators*/\n:is(.markdown-preview-view,.markdown-rendered) div.is-collapsed :is(h1,h2,h3,h4,h5,h6)::after,\n:is(.markdown-preview-view,.markdown-rendered) li.is-collapsed::after {  \n  content: \"...\";\n  padding: 5px;\n  color: var(--text-faint);\n} \n\nbody:not(.default-icons) .heading-collapse-indicator.collapse-indicator  {\n  position: absolute;\n  margin: 15px 0 0 -20px;\n  padding: 0;\n  transition: transform 20ms linear 0s;\n}\n\nbody:not(.default-icons) :is(h1,h2) .heading-collapse-indicator.collapse-indicator  {\n  position: absolute;\n  transition: transform 20ms linear 0s;\n}\n\nbody:not(.default-icons) .heading-collapse-indicator.collapse-indicator::before {\n  width: 1.5em;\n  height: 1.5em;\n  content: \"↓\";\n  position: absolute;\n  font-size: 15px;\n  font-weight: bold;\n  font-family: 'Inter';\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n  opacity: 0;\n}\n\nbody:not(.default-icons) .heading-collapse-indicator.collapse-indicator.collapse-icon svg {\n  display: none;\n}\n\nbody:not(.default-icons) div.is-collapsed .heading-collapse-indicator.collapse-indicator  {\n  transform: translateX(7px) translateY(7px) rotate(-90deg);\n}\n\nbody:not(.default-icons) div.is-collapsed .heading-collapse-indicator.collapse-indicator::before,\nbody:not(.default-icons) :is(h1,h2,h3,h4,h5,h6):hover .heading-collapse-indicator.collapse-indicator::before {\n  opacity: 1;\n}\n\nbody:not(.default-icons) .workspace-leaf-content[data-type=outline]  .tree-item .collapse-icon {\n  padding: 0;\n  transition: transform 20ms linear 0s;\n}\n\nbody:not(.default-icons) .workspace-leaf-content[data-type=outline]  .tree-item .collapse-icon::before {\n  content: \"↓\";\n  font-size: 1em;\n  font-weight: bold;\n  font-family: 'Inter';\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n}\n\nbody:not(.default-icons) .workspace-leaf-content[data-type=outline]  .tree-item .collapse-icon svg {\n  display: none;\n  color: var(--accent-strong);\n  height: 7px;\n  width: 7px;\n}\n\nbody:not(.default-icons) .workspace-leaf-content[data-type=outline]  .tree-item.is-collapsed .collapse-icon::before {\n  transform: rotate(-90deg);\n  opacity: 0.5;\n}\n\n/*vertical lines in outline page*/\n.workspace-leaf-content[data-type=outline]  .tree-item-children {\n  margin-left: 14px;\n  border-left: 1px solid #94949433;\n  border-radius: 0;\n  transition: all 400ms ease-in-out;\n}\n\nbody.default-icons .workspace-leaf-content[data-type=outline]  .tree-item-children {\n  margin-left: 12.5px;\n}\n\n.workspace-leaf-content[data-type=outline]  .tree-item-children:hover {\n  border-left-color: var(--theme-color-translucent-04);\n}\n\n.tree-item-flair {\n  line-height: 17px;\n  padding-top: 3px;\n  height: 1.45rem;\n}\n\nbody.nowrap-outline .workspace-leaf-content[data-type=outline]  .tree-item-inner {\n  white-space: nowrap;\n}\n/*****from https://www.yuque.com/fanmofeng/obsidian/ioifq0 *******/\n\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .collapse-icon {\n  padding-inline-end: var(--size-2-3);\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .collapse-icon::before {\n  content: \"\" !important;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item {\n  position: relative;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-self {\n  position: relative;\n  margin-bottom: 0;\n  white-space: nowrap;\n  margin-top: -1px; /* fix item gap */\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-self .tree-item-inner {\n  padding-left: 4px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  height: calc(var(--nav-item-size) * 1.5);\n  line-height: calc(var(--nav-item-size) * 1.5);\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-self .tree-item-inner::before {\n  content: \"\";\n  width: var(--size-4-1);\n  height: var(--size-4-1);\n  border: 2px solid hsla(var(--color-accent-hsl), 0.9);\n  border-radius: 50%;\n  position: absolute;\n  margin-left:-1.5em;\n  top: 50%;\n  transform: translateY(-50%);\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-self .tree-item-icon ~ .tree-item-inner {\n  padding-left: 4px;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-self .tree-item-icon ~ .tree-item-inner::before {\n  content: none;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item.is-collapsed .tree-item-icon::before {\n  box-shadow: 0 0 0 4px var(--background-modifier-hover);\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item::after {\n  content: \"\";\n  width: 1.5px;\n  position: absolute;\n  background-color: transparent;\n  top: calc(calc(var(--nav-item-size) * 1.5) / 2 * -1);\n  left: -10px;\n  height: calc(100% - calc(var(--nav-item-size) * 1.5) + var(--size-4-8));\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-icon {\n  cursor: pointer;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-icon::before {\n\n  width: var(--size-4-2);\n  height: var(--size-4-2);\n  background-color: hsla(var(--color-accent-hsl), 0.9);\n  border-radius: 50%;\n  position: absolute;\n  left: 4px;\n  top: 50%;\n  transform: translateY(-50%);\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-icon svg {\n  display: block;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item-icon svg path {\n  display: none;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item:hover > .tree-item-children > .tree-item::after {\n  background-color: hsla(var(--color-accent-hsl), 0.9);\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item:hover > .tree-item-self:hover + .tree-item-children .tree-item::after {\n  background-color: transparent;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item:hover > .tree-item-children > .tree-item:hover::after, body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item:hover > .tree-item-children > .tree-item:hover ~ .tree-item::after {\n  background-color: transparent;\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .tree-item:hover > .tree-item-children > .tree-item:hover::before {\n  content: \"\";\n  position: absolute;\n  top: calc(calc(var(--nav-item-size) * 1.5) / 2 * -1);\n  left: -10px;\n  bottom: calc(100% - (calc(var(--nav-item-size) * 1.5) + var(--size-4-2)) / 2 - 1px);\n  width: 16px;\n  border-bottom-left-radius: var(--radius-m);\n  border-bottom: 1.5px solid hsla(var(--color-accent-hsl), 0.9);\n  border-left: 2px solid hsla(var(--color-accent-hsl), 0.9);\n}\nbody.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content :is(.tree-item-children, .tree-item-self .tree-item-self) {\n  padding-left: 0;\n  margin-left: var(--size-4-5);\n  border-left: none;\n}\n\n/*tag collapse indicator*/\n.tag-container .tree-item-children {\n  border-left: 1px solid #94949433;\n  border-radius: 0 3px 3px 0;\n  transition: all 300ms ease-in-out;\n}\n\n.tag-container .tree-item-children > div[style=\"width: 1px; height: 0.1px; margin-bottom: 0px;\"] {\n  height: 0 !important;\n}\n\n.tag-container .tree-item-self .tree-item-icon svg {\n  display: none;\n}\n\n.tag-container .tree-item-self .tree-item-icon::before {\n  content: \"#\";\n  font-size: 1em;\n  font-weight: bold;\n  font-family: 'Inter';\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n}\n\n.tag-container .tree-item-children:hover {\n  border-left-color: var(--theme-color);\n}\n\n.tag-container .tree-item.is-collapsed .collapse-icon {\n  opacity: 0.5;\n}\n\n/*setting panel*/\n\n.modal  .modal-title {\n  margin-left: 1em;\n}\n.modal-content .cmdr-setting-content {\n  height: auto;\n}\n[class='modal'] {\n  max-width: unset ;\n  width: unset;\n  min-width: var(--dialog-width);\n}\n\n.modal.mod-settings {\n  border: none;\n}\n\n.modal.mod-narrow .modal-content {\n  overflow: hidden;\n}\n\n.vertical-tab-nav-item {\n  padding: 6px 6px 6px 24px;\n  margin-bottom: 0;\n}\n\n\n.modal.mod-settings .vertical-tab-content-container {\n  padding: 0;\n}\n\n.modal-content .cmdr-setting-content {\n  height: auto;\n}\n\n.vertical-tab-content .setting-item {\n  padding: 8px 0;\n}\n\n.is-phone .setting-item-heading {\n  margin-top: 0px;\n  margin-bottom: 0px;\n}\n\n.modal button:not(.mod-cta):not(.mod-warning):hover {\n  background-color: var(--interactive-accent-hover);\n  color: #fdfdfd;\n}\n.modal .community-modal-details {\n  background-color: var(--background-primary);\n}\n.community-theme-container .clickable-icon {\n  color: var(--accent-strong)\n}\n\n.dropdown {\n  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iMTI4MC4wMDAwMDBwdCIgaGVpZ2h0PSI2NDAuMDAwMDAwcHQiIHZpZXdCb3g9IjAgMCAxMjgwLjAwMDAwMCA2NDAuMDAwMDAwIgogcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCI+CjxtZXRhZGF0YT4KQ3JlYXRlZCBieSBwb3RyYWNlIDEuMTUsIHdyaXR0ZW4gYnkgUGV0ZXIgU2VsaW5nZXIgMjAwMS0yMDE3CjwvbWV0YWRhdGE+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDAwMDAwLDY0MC4wMDAwMDApIHNjYWxlKDAuMTAwMDAwLC0wLjEwMDAwMCkiCmZpbGw9IiMyMTk2ZjMiIHN0cm9rZT0ibm9uZSI+CjxwYXRoIGQ9Ik0xMCA2MzkyIGMwIC00IDE0MzggLTE0NDUgMzE5NSAtMzIwMiBsMzE5NSAtMzE5NCAzMTk1IDMxOTQgYzE3NTcKMTc1NyAzMTk1IDMxOTggMzE5NSAzMjAyIDAgNSAtMjg3NSA4IC02MzkwIDggLTM1MTUgMCAtNjM5MCAtMyAtNjM5MCAtOHoiLz4KPC9nPgo8L3N2Zz4K);\n}\n\n/*translucent setting panel*/\nbody.translucent-setting-panel .modal-bg {\n  background-color: var(--background-secondary-translucent-1);\n}\n\n \n\nbody.setting-default-frosted-glass .prompt {\n  background-color: var(--bg-color-settings-4);\n  backdrop-filter: blur(3px);\n}\n\nbody.setting-default-frosted-glass.theme-dark .prompt {\n  backdrop-filter: blur(8px);\n}\n\nbody.setting-default-frosted-glass .vertical-tab-header-group-title {\n  color: var(--text-normal);\n  border-top: 1px dashed var(--text-muted);\n}\n\nbody.translucent-setting-panel .modal-bg,\nbody.setting-default-frosted-glass .modal-bg {\n  background-color: var(--bg-color-settings-0);\n  backdrop-filter: blur(5px);\n}\n\nbody.translucent-setting-panel .modal.mod-settings,\nbody.setting-default-frosted-glass .modal.mod-settings {\n  background-color: var(--bg-color-settings-0-1);\n  box-shadow: 0 0 20px var(--bg-color-settings-1);\n}\n\nbody.translucent-setting-panel .modal.mod-settings,\nbody.setting-default-frosted-glass .modal.mod-settings {\n  border: none;\n}\nbody.setting-default-frosted-glass .vertical-tab-header,\nbody.translucent-setting-panel .vertical-tab-header {\n  background-color: var(--bg-color-settings-3);\n}\nbody.translucent-setting-panel .horizontal-tab-nav-item,\nbody.translucent-setting-panel .vertical-tab-nav-item,\nbody.setting-default-frosted-glass .horizontal-tab-nav-item,\nbody.setting-default-frosted-glass .vertical-tab-nav-item {\n  background-color: transparent;\n}\n\nbody.translucent-setting-panel .horizontal-tab-nav-item:hover,\nbody.translucent-setting-panel .vertical-tab-nav-item:hover,\nbody.translucent-setting-panel .horizontal-tab-nav-item.is-active,\nbody.translucent-setting-panel .vertical-tab-nav-item.is-active,\nbody.setting-default-frosted-glass .horizontal-tab-nav-item:hover,\nbody.setting-default-frosted-glass .vertical-tab-nav-item:hover,\nbody.setting-default-frosted-glass .horizontal-tab-nav-item.is-active,\nbody.setting-default-frosted-glass .vertical-tab-nav-item.is-active {\n  background-color: var(--bg-color-settings-2);\n  color: var(--text-normal);\n  font-weight: bold;\n}\n\nbody.translucent-setting-panel .horizontal-tab-content,\nbody.translucent-setting-panel .vertical-tab-content,\nbody.setting-default-frosted-glass .horizontal-tab-content,\nbody.setting-default-frosted-glass .vertical-tab-content {\n  background-color: var(--bg-color-settings-3);\n}\n\nbody.translucent-setting-panel .vertical-tab-content {\n  background-color: var(--bg-color-settings-2);\n}\n\nbody.setting-default-frosted-glass .vertical-tab-header-group-title {\n  border: none;\n}\n\n/* ======= graph view ==============*/\n.workspace-leaf-content[data-type=\"graph\"] .graph-controls {\n  background-color: var(--graph-control-bg);\n  border: none;\n}\n.workspace-split.mod-root .workspace-leaf-content[data-type=\"graph\"] .view-content {\n  background-color: var(--graph-canvas-bg);\n}\n\n.graph-view.color-fill {\n  color: var(--graph-circle);\n}\n.graph-view.color-circle {\n  color: var(--graph-circle-outline);\n}\n.graph-view.color-line {\n  color: var(--graph-line);\n}\n.graph-view.color-text {\n  color: var(--graph-text-color);\n}\n.graph-view.color-fill-highlight {\n  color: var(--graph-circle-fill-highlight);\n}\n.graph-view.color-line-highlight {\n  color: var(--graph-line-fill-highlight);\n}\n.graph-view.color-fill-tag {\n  color: var(--graph-tag) !important;\n}\n.graph-view.color-fill-attachment {\n  color: var(--graph-attach) !important;\n}\n.graph-view.color-fill-unresolved {\n  color: var(--graph-unresolved);\n  opacity: 1;\n}\n.graph-view.color-arrow {\n  color: var(--graph-arrow);\n  opacity: 1;\n}\n\n/*Horizontal line in edit mode. Changes --- to full-width line*/\n/*thanks to Piotr from obsidian forum*/\ndiv:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-hr {\n  color: transparent;\n}\n\ndiv:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-hr:after {\n  content: \"\";\n  position: absolute;\n  height: 1px;\n  width: 100%;\n  background: var(--text-muted);\n  left: 0;\n  top: 50%;\n}\n\n/*change collapse icon position in left side*/\n.workspace-ribbon.mod-left .workspace-ribbon-collapse-btn {\n  margin-top: 0;\n  padding: 7px 6px 2px 6px;\n}\n\n/* colourful notes */\n/* from Notation by death_au  https://github.com/deathau/Notation-for-Obsidian */\n/* Original idea from: https://gist.github.com/mklepaczewski/54e451f09994b9d450de81c8baaf8aa4 */\n/* but also with simpler classes so you can use `<span class='colour'>` as well */\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-bg code,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-bg code,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-bg code,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-bg code,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-bg code,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-bg code,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-bg code,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-bg code,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-bg code,\n.print pre.language-note-gray-bg code,\n.print pre.language-note-brown-bg code,\n.print pre.language-note-orange-bg code,\n.print pre.language-note-yellow-bg code,\n.print pre.language-note-green-bg code,\n.print pre.language-note-blue-bg code,\n.print pre.language-note-purple-bg code,\n.print pre.language-note-pink-bg code,\n.print pre.language-note-red-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-bg code,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-bg code{\n  background: unset !important;\n  background-color:unset !important;\n  white-space: pre-wrap !important;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-notice,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-background,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-bg,\n.gray-background,\n.gray-bg,\n.print pre.language-note-gray-bg .popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-notice,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-bg {\n  background-color: var(--background-gray) !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-background,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-bg,\n.brown-background,\n.brown-bg,\n.print pre.language-note-brown-bg,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-bg {\n  background-color: var(--background-brown) !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-background,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-bg,\n.orange-background,\n.orange-bg,\n.print pre.language-note-orange-bg,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-bg {\n  background-color: var(--background-orange) !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-background,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-bg,\n.yellow-background,\n.yellow-bg,\n.print pre.language-note-yellow-bg,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-bg {\n  background-color: var(--background-yellow) !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-background,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-bg,\n.green-background,\n.green-bg,\n.print pre.language-note-green-bg,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-bg {\n  background-color: var(--background-green) !important;\n}\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-background,\n :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-bg,\n.blue-background,\n.blue-bg,\n.print pre.language-note-blue-bg,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-bg {\n  background-color: var(--background-blue) !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-background,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-bg,\n.purple-background,\n.purple-bg,\n.print pre.language-note-purple-bg,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-bg {\n  background-color: var(--background-purple) !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-background,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-bg,\n.pink-background,\n.pink-bg,\n.print pre.language-note-pink-bg,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-bg {\n  background-color: var(--background-pink) !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-background,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-bg,\n.red-background,\n.red-bg,\n.print pre.language-note-red-bg,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-background,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-bg {\n  background-color: var(--background-red) !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-important,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-imp,\n.print pre.language-note-important,\n.print pre.language-note-imp,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-important,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-imp {\n  border: 4px dashed var(--note-important) !important;\n}\npre.language-note-important:before,\npre.language-note-imp::before {\n  content: \"Important\";\n  color: var(--note-important)  !important;\n  font-weight: 800;\n  top: -1px;\n}\n\n/*colourful text*/\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-green,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink,\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-red,\n.print pre.language-note-gray,\n.print pre.language-note-brown,\n.print pre.language-note-orange,\n.print pre.language-note-yellow,\n.print pre.language-note-green,\n.print pre.language-note-blue,\n.print pre.language-note-purple,\n.print pre.language-note-pink,\n.print pre.language-note-red,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red {\n  background-color: transparent  !important;\n  margin: 3px 0;\n  padding: 5px 10px;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray code.language-note-gray,\n.print code.language-note-gray,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray code.language-note-gray {\n  color: var(--text-gray) !important;\n  background: unset !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown code.language-note-brown,\n.print code.language-note-brown,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown code.language-note-brown {\n  color: var(--text-brown) !important;\n  background: unset !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange code.language-note-orange,\n.print code.language-note-orange,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange code.language-note-orange {\n  color: var(--text-orange) !important;\n  background: unset !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow code.language-note-yellow,\n.print code.language-note-yellow,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow code.language-note-yellow {\n  color: var(--text-yellow) !important;\n  background: unset !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-green code.language-note-green,\n.print code.language-note-green,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green code.language-note-green {\n  color: var(--text-green) !important;\n  background: unset !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue code.language-note-blue,\n.print code.language-note-blue,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue code.language-note-blue {\n  color: var(--text-blue) !important;\n  background: unset !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple code.language-note-purple,\n.print code.language-note-purple,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple code.language-note-purple {\n  color: var(--text-purple) !important;\n  background: unset !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink code.language-note-pink,\n.print code.language-note-pink,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink code.language-note-pink {\n  color: var(--text-pink) !important;\n  background: unset !important;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-red code.language-note-red,\n.print code.language-note-red,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red code.language-note-red {\n  color: var(--text-red) !important;\n  background: unset !important;\n}\n\n/* cloze */\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze code.language-note-cloze,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze code.language-note-cloze {\n  color: var(--text-normal) !important;\n  background-color: var(--text-normal)!important;\n  display: block;\n  padding: 0px !important;\n  text-shadow: none;\n  margin: 1em 0.7em 0;\n  font-size: var(--font-size-cloze) !important;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze {\n  background-color: transparent;\n}\n\ncode.language-note-cloze.is-loaded:hover {\n  cursor: pointer;\n}\n:is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze code.language-note-cloze.is-loaded:active,\n.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze code.language-note-cloze.is-loaded:active {\n  background-color: transparent !important;\n}\n\npre.language-note-cloze::before {\n  content: \"TO RECALL\";\n  color: var(--note-cloze);\n  font-weight: 800;\n  left: 22px;\n}\n\n/*hidden box*/\n/*改自 https://github.com/chokcoco/iCSS/issues/153 */\n@property --hibox {\n  syntax: '<length>';\n  inherits: false;\n  initial-value: 24px;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) pre.language-hibox {\n  background-color: transparent;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) pre.language-hibox code.language-hibox:hover {\n  color: var(--text-normal);\n  --hibox: 900px;\n  overflow: auto;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) pre.language-hibox code.language-hibox {\n  position: relative;\n  height: auto;\n  overflow: hidden;\n  background: radial-gradient(circle at 0px 0px, var(--theme-color-translucent-015) 0, var(--theme-color-translucent-015) var(--hibox), transparent var(--hibox), transparent 0);\n  transition: --hibox 0.4s linear;\n  color: var(--background-code);\n  color: transparent;\n}\n\n\n/*======== optionnal mermaid style below ========*/\n.markdown-source-view.mod-cm6 .cm-content > [contenteditable=false] {\n  overflow: auto;\n}\n\nbody.resizable-mermaid .mermaid {\n  resize: both;\n  overflow: auto;\n  position: relative;\n}\n\n:is(.markdown-preview-section,.markdown-rendered) .mermaid,\n.markdown-source-view.mod-cm6 .cm-scroller .mermaid {\n  letter-spacing: 0;\n}\n\n.markdown-source-view.mod-cm6 .mermaid svg {\n  margin: 0 auto;\n  display: block;\n}\n\n.mermaid .label {\n  font-family: var(--mermaid-font-family) !important;\n  color: var(--text-normal) !important;\n}\n\n.mermaid .label text {\n  fill: var(--background-primary-alt) !important;\n}\n\n/*\n.mermaid .node:not([class*=\"id\"]) rect:not([style*=\"fill\"]):not([style*=\"stroke\"]),\n.mermaid .node:not([class$=\"id\"]) circle:not([style*=\"fill\"]):not([style*=\"stroke\"]),\n.mermaid .node:not([class$=\"id\"]) ellipse:not([style*=\"fill\"]):not([style*=\"stroke\"]),\n.mermaid .node:not([class$=\"id\"]) polygon:not([style*=\"fill\"]):not([style*=\"stroke\"]),\n.mermaid .node:not([class$=\"id\"]) path:not([style*=\"fill\"]):not([style*=\"stroke\"]) {\n  fill: var(--background-primary) !important;\n}\n*/\n\n.mermaid .node .label {\n  text-align: center !important;\n}\n\n.mermaid .node.clickable {\n  cursor: pointer !important;\n}\n\n.mermaid .arrowheadPath {\n  fill: var(--text-faint) !important;\n}\n\n.mermaid .edgePath .path,\n.mermaid .flowchart-link {\n  stroke: var(--text-faint) !important;\n}\n\n.mermaid .edgeLabel {\n  background-color: var(--background-primary) !important;\n  text-align: center !important;\n}\n\n.mermaid .edgeLabel rect {\n  opacity: 0 !important;\n}\n\n.mermaid .cluster rect {\n  fill: var(--background-primary-alt) !important;\n  stroke: var(--text-faint) !important;\n}\n\n.mermaid .cluster text {\n  fill: var(--background-primary) !important;\n}\n\n/* Sequence Diagram variables */\n.mermaid .actor {\n  stroke: var(--text-accent) !important;\n}\n\n.mermaid .actor-line {\n  stroke: var(--text-muted) !important;\n}\n\n.mermaid .messageLine0 {\n  stroke-dasharray: none !important;\n  stroke: var(--text-muted) !important;\n}\n\n.mermaid .messageLine1 {\n  stroke-dasharray: 2, 2 !important;\n  stroke: var(--text-muted) !important;\n}\n\n.mermaid #arrowhead path,\n.mermaid #crosshead path {\n  fill: var(--text-muted) !important;\n  stroke: var(--text-muted) !important;\n}\n\n.mermaid .sequenceNumber {\n  fill: var(--background-primary) !important;\n}\n\n.mermaid #sequencenumber,\n.mermaid .messageText {\n  fill: var(--text-muted) !important;\n}\n\n.mermaid .labelBox {\n  stroke: var(--text-accent) !important;\n  fill: var(--background-secondary-alt) !important;\n}\n\n.mermaid .labelText,\n.mermaid .labelText>tspan,\n.mermaid .loopText,\n.mermaid .loopText>tspan {\n  fill: var(--text-muted) !important;\n  stroke: none !important;\n}\n\n.mermaid .loopLine {\n  stroke-dasharray: 2, 2 !important;\n  stroke: var(--text-accent) !important;\n  fill: var(--text-accent) !important;\n}\n\n.mermaid .note {\n  stroke: var(--text-normal) !important;\n  fill: var(--mermaid-seq-dia-color) !important;\n}\n\n.mermaid .noteText,\n.mermaid .noteText>tspan {\n  fill: var(--text-normal) !important;\n  stroke: none !important;\n}\n\n/* Gantt chart variables */\n.mermaid .activation0,\n.mermaid .activation1,\n.mermaid .activation2 {\n  fill: var(--background-secondary) !important;\n  stroke: var(--text-accent) !important;\n}\n\n/** Section styling */\n.mermaid .mermaid-main-font {\n  font-family: var(--mermaid-font-family) !important;\n}\n\n.mermaid .section {\n  stroke: none !important;\n  opacity: 0.3 !important;\n}\n\n.mermaid .section0 {\n  fill: var(--text-faint) !important;\n}\n\n.mermaid .section2 {\n  fill: var(--text-accent) !important;\n}\n\n.mermaid .section1,\n.mermaid .section3 {\n  fill: var(--text-muted) !important;\n  opacity: 0.15 !important;\n}\n\n.mermaid .sectionTitle0,\n.mermaid .sectionTitle1,\n.mermaid .sectionTitle2,\n.mermaid .sectionTitle3 {\n  fill: var(--text-normal) !important;\n}\n\n.mermaid .sectionTitle {\n  text-anchor: start !important;\n  font-size: 15px !important;\n  font-weight: bold;\n  line-height: 14px !important;\n  font-family: var(--mermaid-font-family) !important;\n}\n\n/* Grid and axis */\n.mermaid .grid .tick {\n  stroke: var(--text-muted) !important;\n  opacity: 1 !important;\n  shape-rendering: crispEdges !important;\n}\n\n.mermaid .grid .tick text {\n  font-family: var(--mermaid-font-family) !important;\n  font-size: 13px;\n}\n\n.mermaid .grid path {\n  stroke-width: 0 !important;\n}\n\n/* Today line */\n.today {\n  fill: none !important;\n  stroke: var(--background-modifier-error) !important;\n  stroke-width: 2px !important;\n}\n\n/* Task styling */\n\n/* Default task */\n.task {\n  stroke-width: 0.5px !important;\n}\n\n.taskText:not([font-size]) {\n  font-size: 9px !important;\n}\n\n.taskTextOutsideRight {\n  fill: var(--text-normal) !important;\n  text-anchor: start !important;\n  font-size: 12px !important;\n  font-family: var(--mermaid-font-family) !important;\n}\n\n.taskTextOutsideLeft {\n  fill: var(--text-normal) !important;\n  text-anchor: end !important;\n  font-size: 9px !important;\n}\n\n/* Special case clickable */\n.task.clickable {\n  cursor: pointer !important;\n}\n\n.taskText.clickable {\n  cursor: pointer !important;\n  fill: var(--interactive-accent_hover) !important;\n  font-weight: bold !important;\n}\n\n.taskTextOutsideLeft.clickable {\n  cursor: pointer !important;\n  fill: var(--interactive-accent_hover) !important;\n  font-weight: bold !important;\n}\n\n.taskTextOutsideRight.clickable {\n  cursor: pointer !important;\n  fill: var(--interactive-accent_hover) !important;\n  font-weight: bold !important;\n}\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n  fill: var(--text-normal) !important;\n  font-size: 13px;\n}\n\n.task0,\n.task1,\n.task2,\n.task3 {\n  fill: var(--theme-color-translucent-04) !important;\n  stroke: var(--text-muted) !important;\n}\n\n.taskTextOutside0,\n.taskTextOutside2,\n.taskTextOutside1,\n.taskTextOutside3 {\n  fill: var(--text-muted) !important;\n}\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n  fill: var(--mermaid-active-task-color) !important;\n  stroke: var(--text-muted) !important;\n}\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n  fill: var(--text-normal) !important;\n}\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n  stroke: var(--text-muted) !important;\n  fill: var(--background-secondary) !important;\n}\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n  fill: var(--text-normal) !important;\n}\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n  stroke: var(--red-1) !important;\n  fill: var(--red-1) !important;\n}\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n  stroke: var(--accent-strong) !important;\n  fill: var(--text-accent) !important;\n}\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n  stroke: var(--accent-strong) !important;\n  fill: var(--text-muted) !important;\n  cursor: pointer !important;\n  shape-rendering: crispEdges !important;\n}\n\n.milestone {\n  transform: rotate(45deg) scale(0.8, 0.8) !important;\n}\n\n.milestoneText {\n  font-style: italic !important;\n}\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3,\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n  fill: var(--text-normal) !important;\n}\n\n.titleText {\n  text-anchor: middle !important;\n  font-size: 20px !important;\n  fill: var(--text-normal) !important;\n  font-family: var(--mermaid-font-family) !important;\n}\n\ng.classGroup text {\n  fill: var(--text-normal) !important;\n  stroke: none !important;\n  font-size: 8px !important;\n}\n\ng.classGroup text .title {\n  font-weight: bolder !important;\n}\n\ng.clickable {\n  cursor: pointer !important;\n}\n\ng.classGroup rect {\n  fill: var(--background-secondary-alt) !important;\n  stroke: var(--theme-color) !important;\n}\n\ng.classGroup line {\n  stroke: var(--theme-color) !important;\n  stroke-width: 1 !important;\n}\n\n.classLabel .box {\n  stroke: none !important;\n  stroke-width: 0 !important;\n  fill: var(--background-secondary-alt) !important;\n  opacity: 0.2 !important;\n}\n\n.classLabel .label {\n  fill: var(--text-accent) !important;\n  font-size: 10px !important;\n}\n\n.relation {\n  stroke: var(--text-accent) !important;\n  fill: none !important;\n}\n\n.dashed-line {\n  stroke-dasharray: 3 !important;\n}\n\n#compositionStart,\n#compositionEnd,\n#dependencyStart,\n#dependencyEnd,\n#extensionStart,\n#extensionEnd {\n  fill: var(--text-accent) !important;\n  stroke: var(--text-accent) !important;\n}\n\n#aggregationStart,\n#aggregationEnd {\n  fill: var(--background-secondary-alt) !important;\n  stroke: var(--text-accent) !important;\n}\n\n.commit-id,\n.commit-msg,\n.branch-label {\n  fill: var(--text-muted) !important;\n  color: var(--text-muted) !important;\n  font-family: var(--mermaid-font-family) !important;\n}\n\n.pieTitleText {\n  text-anchor: middle !important;\n  font-size: 18px !important;\n  fill: var(--text-normal) !important;\n  font-family: var(--mermaid-font-family) !important;\n}\n\n.slice {\n  font-family: var(--mermaid-font-family) !important;\n}\n\ng.stateGroup text {\n  fill: var(--text-accent) !important;\n  stroke: none !important;\n  font-size: 10px !important;\n  font-family: var(--mermaid-font-family) !important;\n}\n\ng.stateGroup text {\n  fill: var(--text-accent) !important;\n  stroke: none !important;\n  font-size: 10px !important;\n}\n\ng.stateGroup .state-title {\n  font-weight: bolder !important;\n  fill: var(--text-normal) !important;\n}\n\ng.stateGroup rect {\n  fill: var(--background-secondary-alt) !important;\n  stroke: var(--background-secondary-alt) !important;\n}\n\ng.stateGroup line,\n.transition {\n  stroke: var(--text-accent) !important;\n}\n\n.stateGroup .composit {\n  fill: var(--background-secondary) !important;\n  border-bottom: 1px !important;\n}\n\n.stateGroup .alt-composit {\n  fill: var(--background-primary) !important;\n  border-bottom: 1px !important;\n}\n\n.state-note {\n  stroke: var(--text-faint) !important;\n  fill: var(--text-accent) !important;\n}\n\n.state-note text {\n  fill: black !important;\n  stroke: none !important;\n  font-size: 10px !important;\n}\n\n.stateLabel .box {\n  stroke: none !important;\n  stroke-width: 0 !important;\n  fill: var(--background-secondary-alt) !important;\n  opacity: 0.5 !important;\n}\n\n.stateLabel text {\n  fill: black !important;\n  font-size: 10px !important;\n  font-weight: bold !important;\n  font-family: var(--mermaid-font-family) !important;\n}\n\n.node circle.state-start {\n  fill: var(--text-normal) !important;\n  stroke: var(--text-normal) !important;\n}\n\n.node circle.state-end {\n  fill: var(--text-normal) !important;\n  stroke: var(--text-normal) !important;\n  stroke-width: 1.5 !important;\n}\n\n#statediagram-barbEnd {\n  fill: var(--text-accent) !important;\n}\n\n.statediagram-cluster rect {\n  fill: var(--background-secondary-alt) !important;\n}\n\n.statediagram-cluster rect.outer,\n.statediagram-state .title-state,\n.statediagram-state rect.basic {\n  rx: 5px !important;\n  ry: 5px !important;\n}\n\n.statediagram-state .divider {\n  stroke: var(--text-accent) !important;\n}\n\n.statediagram-cluster.statediagram-cluster .inner {\n  fill: var(--background-secondary) !important;\n}\n\n.statediagram-cluster.statediagram-cluster-alt .inner {\n  fill: var(--background-secondary-alt) !important;\n}\n\n.statediagram-cluster .inner {\n  rx: 0 !important;\n  ry: 0 !important;\n}\n\n.statediagram-state rect.divider {\n  stroke-dasharray: 10, 10 !important;\n  fill: var(--background-secondary) !important;\n}\n\n.note-edge {\n  stroke-dasharray: 5 !important;\n}\n\n.statediagram-note rect {\n  fill: var(--text-accent) !important;\n  stroke: var(--text-muted) !important;\n  stroke-width: 1px !important;\n  rx: 0 !important;\n  ry: 0 !important;\n}\n\n/* Classes common for multiple diagrams */\n.error-icon {\n  fill: var(--text-error) !important;\n}\n\n.error-text {\n  fill: var(--text-muted) !important;\n  stroke: var(--text-muted) !important;\n}\n\n.edge-pattern-solid {\n  stroke-dasharray: 0 !important;\n}\n\n.edge-pattern-dashed {\n  stroke-dasharray: 3 !important;\n}\n\n.edge-pattern-dotted {\n  stroke-dasharray: 2 !important;\n}\n\n.marker {\n  fill: var(--text-muted) !important;\n}\n\n.marker.cross {\n  stroke: var(--text-muted) !important;\n}\n\n.mermaid div:not(text.tracker-month-label) #arrowhead,\n.mermaid div:not(text.tracker-month-label) #sequencenumber,\n.mermaid div:not(text.tracker-month-label) .cluster text,\n.mermaid div:not(text.tracker-month-label) .label text,\n.mermaid div:not(text.tracker-month-label) text,\n.mermaid div:not(text.tracker-month-label) text.actor {\n  fill: var(--text-muted) !important;\n}\n\n/*emoji🙂*/\n.mermaid g>g>circle,\n.mermaid g>circle {\n  stroke: #000000 !important;\n}\n\n.mermaid line.task-line {\n  stroke: #6e6e6e !important;\n}\n\n/* scrollbar*/\nbody:not(.native-scrollbars) ::-webkit-scrollbar-thumb {\n  background-clip: padding-box;\n  border: 3px solid transparent;\n  border-width: 3px 2px 3px 3px;\n  min-height: 65px;\n  background-color: var(--scrollbar-thumb-bg);\n  border: 3.5px solid transparent !important;\n}\n\nbody:not(.native-scrollbars) ::-webkit-scrollbar {\n  background: transparent;\n}\n\nbody:not(.native-scrollbars) textarea:hover::-webkit-scrollbar-thumb:active,\nbody:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover {\n  background: var(--scrollbar-active-thumb-bg);\n}\n\nbody.remove-scrollbars ::-webkit-scrollbar-thumb {\n  display: none;\n}\n\n/*adapted from the CSS snippet created by @subframe7536 https://forum-zh.obsidian.md/t/topic/11164*/\nbody.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container,.workspace-leaf-content .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion,\n.prompt-results, .markdown-embed-content, .community-modal-search-results-wrapper,.community-modal-info,.tag-container)::-webkit-scrollbar-thumb {\n  box-shadow: inset 0 0 0 10px !important;\n  background-color: transparent !important;\n}\n\nbody.body:not(.is-mobile).hover-scrollbars .community-modal-info div[class^='community-modal-info-'] {\n  color:var(--text-normal);\n}\nbody.body:not(.is-mobile).hover-scrollbars .canvas-node-content  .markdown-preview-view {\n  overflow-y: auto!important;\n}\nbody.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container, .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, .prompt-results, .markdown-embed-content, .community-modal-search-results-wrapper,.community-modal-info,.tag-container) {\n  color: transparent;\n  transition: color var(--anim-duration-fast) var(--anim-motion-smooth);\n  overflow-y: overlay;\n}\nbody.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container, .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, .prompt-results, .markdown-embed-content, .community-modal-search-results-wrapper,.community-modal-info,.tag-container):hover {\n  color: var(--scrollbar-thumb-bg);\n}\nbody.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container, .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, .prompt-results, .community-modal-search-results-wrapper,.tag-container) > :not(h1, h2, h3, h4, h5, h6) {\n  color: var(--text-normal);\n}\n\nbody.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container, .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, .prompt-results, .markdown-embed-content, .community-modal-search-results-wrapper,.community-modal-info,.tag-container)::-webkit-scrollbar-thumb:active {\n  background-color: var(--scrollbar-active-thumb-bg) !important;\n}\n\nbody.body:not(.is-mobile).hover-scrollbars .popover.hover-popover > .markdown-embed > .markdown-embed-content > .markdown-preview-view {\n  color: transparent !important;\n}\nbody.body:not(.is-mobile).hover-scrollbars .popover.hover-popover > .markdown-embed > .markdown-embed-content > .markdown-preview-view:hover {\n  color: var(--scrollbar-thumb-bg) !important;\n}\n\n\n.workspace-split::-webkit-scrollbar:vertical {\n  display: none;\n}\n\nbody.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content,\nbody.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *,\nbody.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *::before,\nbody.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *::-webkit-scrollbar-thumb,\nbody.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *::-webkit-scrollbar,\nbody.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *::marker {\n  color: transparent !important;\n  background: none !important;\n  background-color: transparent !important;\n  border: none !important;\n  -webkit-text-fill-color: transparent !important;\n}\n\nbody.plugin-sliding-panes.transparent-panes .workspace-split.mod-root .workspace-leaf:not(:first-of-type) .workspace-leaf-content {\n  background-color: transparent;\n}\n\nbody.plugin-sliding-panes.transparent-panes .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle {\n  width: 0;\n}\n\nbody.plugin-sliding-panes.plugin-sliding-panes.transparent-panes.theme-light .workspace-split.mod-vertical>.workspace-leaf {\n  box-shadow: -5px 0px 6px 0px rgba(0, 0, 0, 0.1) !important;\n}\n\n\n/*==========================*/\n/* obsidian-calendar-plugin */\n/*==========================*/\n#calendar-container {\n  --color-background-heading: transparent;\n  --color-background-weeknum: transparent;\n  --color-background-day: transparent;\n  --color-background-weekend: transparent;\n\n  --color-dot: var(--text-accent);\n  --color-arrow: currentColor;\n  --color-button: var(--text-muted);\n  --color-text-weeknum: var(--calendar-week-color);\n\n  --color-text-title: var(--text-normal);\n  --color-text-heading: var(--text-normal);\n  --color-text-day: var(--text-normal);\n  --color-text-today: var(--text-accent);\n\n  padding: 0 8px 0 8px;\n  margin: -21px -8px 0px -8px;\n  line-height: 0.6;\n}\n\n.theme-dark #calendar-container {\n  --color-tr: #11111166;\n  --color-tr-odd: #1e1e1e93;\n  --color-calendar-weekends: #cc8484;\n  --color-calendar-weekends-2: #ff9f9f21;\n  --calendar-today-background-color: #00b3005e;\n  --theme-color-translucent-3: #217cc769;\n}\n\n.theme-light #calendar-container {\n  --color-tr: #ffffff6a;\n  --color-tr-odd: #eeeeeea2;\n  --color-calendar-weekends: #c74a4a;\n  --color-calendar-weekends-2: #fdadad21;\n  --theme-color-translucent-3: #91c2eb80;\n}\n\n#calendar-container .calendar {\n  background-color: transparent;\n  padding: 0 4px 2px 4px;\n  margin-top: -8px;\n  margin-left: 2px;\n  border-collapse: separate;\n  border-spacing: 0;\n}\n\n#calendar-container .calendar tr {\n  background-color: transparent;\n}\n\n/*表格调整*/\n/*星期*/\n#calendar-container th:first-of-type {\n  border-top-left-radius: 3px !important;\n}\n\n#calendar-container th:last-of-type {\n  border-top-right-radius: 3px !important;\n}\n\n#calendar-container th {\n  padding: 8px 0;\n  border-bottom: 2px solid var(--text-accent);\n  border-radius: 0 !important;\n}\n\n/*天*/\n#calendar-container td {\n  width: 12.5%;\n  border-right: none;\n  padding: 0 !important;\n  line-height: 23px;\n}\n\n#calendar-container tr {\n  background-color: var(--color-tr);\n}\n\n#calendar-container .day {\n  padding: 2px 0 0 !important;\n}\n\n#calendar-container .day.has-note.active:not(.today) {\n  background-color: var(--calendar-hover-color) !important;\n  color: var(--text-normal) !important;\n  font-weight: 700;\n}\n\n#calendar-container .day:not(:empty):hover {\n  background-color: var(--calendar-hover-color);\n}\n\n#calendar-container .day:active,\n#calendar-container .active,\n#calendar-container .active.today {\n  background-color: var(--calendar-active-color) !important;\n  font-weight: 700;\n}\n\n#calendar-container .active.today,\n#calendar-container .day.has-note.active {\n  color: var(--text-accent) !important;\n  font-weight: 700;\n}\n\nbody.toggle-calendar-shadow #calendar-container .active.today {\n  box-shadow: 0 0 1px 2px var(--text-accent);\n}\n\nbody.toggle-calendar-shadow #calendar-container .today {\n  box-shadow: 0 0 5px var(--text-accent);\n}\n\n#calendar-container .today {\n  font-weight: bolder;\n}\n\n/*“Today”*/\n#calendar-container .reset-button {\n  font-size: 14px !important;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  line-height: 1.2;\n  text-align: center;\n}\n\n/*悬停Today*/\n#calendar-container .reset-button:hover {\n  color: var(--sliding-panes-header-color);\n  background-color: var(--table-hover-raw-color);\n}\n\n/*悬停arrow*/\n#calendar-container .arrow:hover {\n  color: var(--theme-color);\n}\n\n/*dot*/\n#calendar-container .dot {\n  stroke: transparent;\n  margin: -3px 0 2px !important;\n}\n\n#calendar-container .hollow {\n  margin: -3px 0 2px !important;\n}\n\n#calendar-container .dot-container {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n/*月份调整 month*/\n#calendar-container .month {\n  font-size: 20px;\n  line-height: 1;\n}\n\n/*年份调整 year*/\n#calendar-container .year {\n  font-size: 20px;\n  line-height: 1;\n}\n\n/*星期数 week*/\n#calendar-container .week-num {\n  border-right: 2px solid var(--calendar-week-background-color) !important;\n  background-color: transparent;\n  font-weight: 600;\n  border-radius: 0;\n}\n\n#calendar-container .week-num.active {\n  background-color: var(--calendar-week-background-color) !important;\n  color: var(--color-text-weeknum) !important;\n  font-weight: 800;\n}\n\n/*星期数悬停 week hover*/\n#calendar-container .week-num:hover {\n  background-color: var(--calendar-week-hover) !important;\n}\n\n/* calendar-1 translucent, v0.2, for Blue Topaz*/\nbody.style-options-for-calendar-plugin-style-one.theme-dark {\n  --color-calendar-weekends: #cc8484;\n  --color-calendar-weekends-2: #ff9f9f21;\n  --calendar-today-background-color: #00b3005e;\n  --theme-color-translucent-3: #217cc769;\n}\n\nbody.style-options-for-calendar-plugin-style-one.theme-light {\n  --color-calendar-weekends: #c74a4a;\n  --color-calendar-weekends-2: #fdadad21;\n  --theme-color-translucent-3: #91c2eb80;\n}\n\nbody.style-options-for-calendar-plugin-style-one.theme-dark #calendar-container {\n  --color-tr: #11111183;\n}\n\nbody.style-options-for-calendar-plugin-style-one.theme-light #calendar-container {\n  --color-tr: #ffffffa9;\n}\n\nbody.style-options-for-calendar-plugin-style-one #calendar-container th {\n  padding: 10px 0;\n  border-radius: 0 !important;\n}\n\nbody.style-options-for-calendar-plugin-style-one #calendar-container th:nth-last-child(1),\nbody.style-options-for-calendar-plugin-style-one #calendar-container th:nth-last-child(2) {\n  color: var(--color-calendar-weekends) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-one #calendar-container td:nth-last-child(1),\nbody.style-options-for-calendar-plugin-style-one #calendar-container td:nth-last-child(2) {\n  background-color: var(--color-calendar-weekends-2) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-one #calendar-container .day {\n  border-radius: 50% !important;\n}\n\nbody.style-options-for-calendar-plugin-style-one #calendar-container .today {\n  color: var(--text-accent) !important;\n  font-weight: 700 !important;\n  background-image: unset;\n}\n\nbody.style-options-for-calendar-plugin-style-one #calendar-container .day:active,\nbody.style-options-for-calendar-plugin-style-one #calendar-container .active,\nbody.style-options-for-calendar-plugin-style-one #calendar-container .active.today {\n  background-color: var(--theme-color-translucent-3) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-two #calendar-container .day {\n  border-radius: 0 !important;\n}\n\nbody.style-options-for-calendar-plugin-style-two .day.adjacent-month {\n  background-color: var(--background-transparent-black-or-white-3) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:first-child {\n  background-color: rgba(var(--table-color-rgb), 0.1) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(2) {\n  background-color: rgba(var(--table-color-rgb), 0.2) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(3) {\n  background-color: rgba(var(--table-color-rgb), 0.3) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(4) {\n  background-color: rgba(var(--table-color-rgb), 0.4) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(5) {\n  background-color: rgba(var(--table-color-rgb), 0.5) !important;\n}\n\nbody.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(6) {\n  background-color: rgba(var(--table-color-rgb), 0.6) !important;\n}\n\n/*===========================*/\n/*copy button for code blocks*/\n/*===========================*/\nbutton.copy-code-button:not([style=\"right: 32pt\"]) {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAABU0lEQVRYhe2WMU4CQRSG/2eMjQRptQB7j8AJnIbKEq/A2qg0SjRROgauYGljTMALLN7AA7Ak1oRIY7HPYt0IuzPLMgxggK97u2/e/PPv25kBNh0yGSSavQqYqkHEDx2n0FqaANH0SmC8RIqU2k7+1YqAs9rH3uggcw+iMoBD7UDyi75PRESuLoeBT4CeMoPhzXPt5FuVsxt98JXL3hH4cpryduX4HQCE9LQ5BBwBfDXKZRlANZUAgMtAsMJwkt+JGAA6Tn7CtTBWvT9t9IpE5DL4XCdgR636b4Xz8HZR6I7XVKFwIJlwpbaIObBsUjsQ/fa2WLkDWwEz/wWzMq13Vu6AsQAh+10hPdc0nlsAwEwAm8cahPTY9m6XxPr0gGm+xR6wlL/tgbQsrAeCi2RwnUouaacHYvu0kP1HgK91ZWzfC2IO7A+GtwDVQyf+Let7FmwcPzCZvMtlTU3QAAAAAElFTkSuQmCC);\n  background-repeat: no-repeat;\n  background-size: contain;\n  background-position: center;\n  background-color: transparent;\n  color: transparent;\n  height: 1.6em;\n}\n\nbutton.copy-code-button:hover {\n  background-color: var(--theme-color-translucent-015);\n}\n\n.obsidian-banner-wrapper.has-copy-button {\n  position:unset;\n}\n\n/*====================*/\n/*day planner plugin*/\n/*====================*/\n.day-planner-status-bar-text {\n  color: var(--text-accent);\n  font-weight: 600;\n}\n\n.progress-pie.day-planner {\n  background-color: var(--day-planner-pie);\n  float: left;\n  height: 20px;\n  margin: 0.3px 10px 0.3px 0;\n  width: 20px;\n  display: none;\n}\n\n#scroll-controls input#auto-scroll.toggle {\n  background-image: none;\n}\n\n.aside__line {\n  background: var(--day-planner-dot) !important;\n  left: 35px !important;\n}\n\n.ei_Dot {\n  background-color: var(--day-planner-line) !important;\n  left: 28px !important;\n}\n\n.ei_Title {\n  font-size: 15px !important;\n  margin-left: -10px !important;\n}\n\n.ei_Copy {\n  font-size: 15px !important;\n  margin-left: 5px !important;\n}\n\n.event_item {\n  overflow: hidden !important;\n}\n\n#now-line, .timeline-time {\n  background-color: var(--day-planner-timeline) !important;\n}\n\n.event_item:hover {\n  background-color: var(--day-planner-item-hover) !important;\n  box-shadow: 0px 0px 52px -18px rgba(0, 0, 0, 0.75);\n}\n\n.event_item_color1 {\n  background-color: var(--event-item-color1) !important;\n}\n.event_item_color2 {\n  background-color: var(--event-item-color2) !important;\n}\n.event_item_color3 {\n  background-color: var(--event-item-color3) !important;\n}\n.event_item_color4 {\n  background-color: var(--event-item-color4) !important;\n}\n.event_item_color5 {\n  background-color: var(--event-item-color5) !important;\n}\n.event_item_color6 {\n  background-color: var(--event-item-color6) !important;\n}\n.event_item_color7 {\n  background-color: var(--event-item-color7) !important;\n}\n.event_item_color8 {\n  background-color: var(--event-item-color8) !important;\n}\n.event_item_color9 {\n  background-color: var(--event-item-color9) !important;\n}\n.event_item_color10 {\n  background-color: var(--event-item-color10) !important;\n}\n\n/* ================================== */\n/* ============= kanban ============= */\n/* ================================== */\n.kanban-plugin__markdown-preview-view {\n  font-family: var(--font-text) !important;\n}\n/*body:not(.style-options-for-kanban-plugin-static-default)*/\n.workspace-leaf .kanban-plugin__lane {\n  border-radius: 8px;\n  box-shadow: 0 2px 6px 1px rgba(0, 0, 0, 0.1);\n}\n\n.kanban-plugin {\n  background-color: var(--background-secondary) !important;\n}\n\n/* .kanban-plugin__item-title ol:not(.contains-task-list)>li:not(.task-list-item),\n.kanban-plugin__item-title ul:not(.contains-task-list)>li:not(.task-list-item) {\n  border-left: none;\n  padding: 0 1px;\n  margin-left: 0px;\n} */\n\n.kanban-plugin .task-list-item-checkbox {\n  margin: 0px 7px 0px 0;\n}\n\n.kanban-plugin__markdown-preview-view blockquote {\n  padding-top: 1px;\n  padding-bottom: 1px;\n}\n\n.kanban-plugin__lane-header-wrapper {\n  background: var(--theme-color-translucent-015) !important;\n  padding: 8px 11px !important;\n  border-radius: 5px 5px 0 0;\n  margin-bottom: 0px !important;\n  z-index: 100 !important;\n  border-bottom: none !important;\n}\n\n.theme-dark .kanban-plugin__lane-header-wrapper {\n  background: unset !important;\n  padding: 8px 11px 0 !important;\n}\n\n\n.kanban-plugin__checkbox-wrapper {\n  background: var(--background-transparent-black-or-white-2);\n}\n\n.kanban-plugin__item {\n  border: none !important;\n  z-index: 100 !important;\n}\n\n.kanban-plugin__item-content-wrapper,\n.kanban-plugin__item-title-wrapper {\n  background: var(--background-transparent-black-or-white-1) !important;\n  z-index: 100 !important;\n}\n\n.kanban-plugin__item-content-wrapper:hover,\n.kanban-plugin__item-title-wrapper:hover {\n  background: var(--background-transparent-black-or-white-3-1) !important;\n}\n\n.kanban-plugin__item-button-wrapper {\n  background: var(--background-transparent-black-or-white-2) !important;\n  border-radius: 0 0 5px 5px;\n}\n\nbutton.kanban-plugin__new-item-button {\n  color: var(--text-muted) !important;\n  font-weight: bold;\n  font-size: 0.8em;\n  z-index: 100 !important;\n}\n\nbutton.kanban-plugin__new-item-button:hover {\n  color: var(--accent-strong) !important;\n}\n\n.kanban-plugin__lane {\n  border: none !important;\n}\n\n.kanban-plugin__lane-items {\n  padding: 4px !important;\n}\n\n/* .kanban-plugin__markdown-preview-view ol:not(.contains-task-list)>li:not(.task-list-item),\n.kanban-plugin__markdown-preview-view:not(.kanban) ul>li:not(.task-list-item) {\n  margin-left: unset;\n  padding-left: unset;\n  margin-bottom: unset;\n  margin-top: unset;\n} */\n\n/*meta*/\n.kanban-plugin__meta-row {\n  background: transparent !important;\n}\n\n.kanban-plugin__item-metadata-wrapper:not(:empty) {\n  background: var(--background-transparent-black-or-white-3) !important;\n}\n\n.kanban-plugin__lane {\n  background: transparent !important;\n}\n\n.theme-light .kanban-plugin__lane {\n  background: var(--background-transparent-black-or-white-3) !important;\n}\n\n.kanban-plugin__lane-wrapper {\n  border-radius: var(--radius-s);\n}\n\n.kanban-plugin__lane-wrapper {\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n/* checkbox */\n.kanban-plugin__item-prefix-button-wrapper input[type=checkbox] {\n  margin: 1px 6px 0 0;\n  width: 14px;\n  height: 14px;\n  filter: hue-rotate(var(--theme-color)) !important;\n}\n\n.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+1) {\n  background: linear-gradient(to bottom, var(--kanban-color-1) 60%, transparent);\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-1), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-1);\n}\n.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+2) {\n  background: linear-gradient(to bottom, var(--kanban-color-2) 60%, transparent);\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-2), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-2);\n}\n.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+3) {\n  background: linear-gradient(to bottom, var(--kanban-color-3) 60%, transparent);\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-3), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-3);\n}\n.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+4) {\n  background: linear-gradient(to bottom, var(--kanban-color-4) 60%, transparent);\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-4), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-4);\n}\n.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+5) {\n  background: linear-gradient(to bottom, var(--kanban-color-5) 60%, transparent);\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-5), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-5);\n}\n.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+6) {\n  background: linear-gradient(to bottom, var(--kanban-color-6) 60%, transparent);\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-6), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-6);\n}\n.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+0) {\n  background: linear-gradient(to bottom, var(--kanban-color-7) 60%, transparent);\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-7), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-7);\n}\n\nbody.style-options-for-kanban-plugin-static-all-color.theme-light {\n  --kanban-color-1: #63a1e970;\n  --kanban-color-2: #63e6e970;\n  --kanban-color-3: #63e98270;\n  --kanban-color-4: #dee96370;\n  --kanban-color-5: #e8c89170;\n  --kanban-color-6: #e8919170;\n  --kanban-color-7: #bd91e870;\n}\n\nbody.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+1) {\n  background: linear-gradient(to bottom, var(--kanban-color-1) 30%,  transparent) !important;\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-1), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-1);\n}\nbody.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+2) {\n  background: linear-gradient(to bottom, var(--kanban-color-2) 30%,  transparent) !important;\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-2), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-2);\n}\nbody.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+3) {\n  background: linear-gradient(to bottom, var(--kanban-color-3) 30%,  transparent) !important;\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-3), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-3);\n}\nbody.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+4) {\n  background: linear-gradient(to bottom, var(--kanban-color-4) 30%,  transparent) !important;\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-4), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-4);\n}\nbody.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+5) {\n  background: linear-gradient(to bottom, var(--kanban-color-5) 30%,  transparent) !important;\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-5), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-5);\n}\nbody.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+6) {\n  background: linear-gradient(to bottom, var(--kanban-color-6) 30%,  transparent) !important;\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-6), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-6);\n}\nbody.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+0) {\n  background: linear-gradient(to bottom, var(--kanban-color-7) 30%,  transparent) !important;\n  --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-7), transparent 60%);\n  --scrollbar-active-thumb-bg: var(--kanban-color-7);\n}\nbody.style-options-for-kanban-plugin-static-all-color .kanban-plugin__item-title-wrapper {\n  background: transparent !important;\n}\n\n\nbody.style-options-for-kanban-plugin-static-all-image-one.theme-dark .kanban-plugin__lane-wrapper {\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n\n\nbody.style-options-for-kanban-plugin-static-all-image-two.theme-dark .kanban-plugin__lane-wrapper {\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\nbody.style-options-for-kanban-plugin-static-plain .kanban-plugin__lane-wrapper {\n  background: unset !important;\n  --scrollbar-thumb-bg: unset !important;\n  --scrollbar-active-thumb-bg: unset !important;\n}\n\nbody.style-options-for-kanban-plugin-static-plain .kanban-plugin__lane {\n  border: 2px solid var(--background-modifier-border) !important;\n}\n\nbody.style-options-for-kanban-plugin-static-plain .kanban-plugin__lane-header-wrapper {\n  background: unset !important;\n  border-bottom: 1px solid  var(--background-modifier-border) !important;\n}\n\nbody.style-options-for-kanban-plugin-static-plain.theme-dark .kanban-plugin__lane-header-wrapper,\nbody.style-options-for-kanban-plugin-static-little-color.theme-dark .kanban-plugin__lane-header-wrapper {\n  padding: 10px 11px !important;\n}\n\nbody.style-options-for-kanban-plugin-static-plain .kanban-plugin__item-button-wrapper {\n  background: transparent !important;\n}\n\nbody.style-options-for-kanban-plugin-static-little-color.theme-light {\n  --kanban-color-1: #91bae870;\n  --kanban-color-2: #91e8e070;\n  --kanban-color-3: #91e89a70;\n  --kanban-color-4: #e0e89170;\n  --kanban-color-5: #e8c89170;\n  --kanban-color-6: #e8919170;\n  --kanban-color-7: #bd91e870;\n}\n\nbody.style-options-for-kanban-plugin-static-little-color.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane,\nbody.style-options-for-kanban-plugin-static-plain.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane,\nbody.style-options-for-kanban-plugin-static-little-color.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane,\nbody.style-options-for-kanban-plugin-static-plain.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane,\nbody.style-options-for-kanban-plugin-static-little-color.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane,\nbody.style-options-for-kanban-plugin-static-plain.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane {\n  border: none !important;\n}\n\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__item,\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane {\n  border: 1px solid var(--background-modifier-border) !important\n}\n\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper {\n  background-image: unset !important;\n  background-color: transparent !important;\n}\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+1) .kanban-plugin__lane-header-wrapper {\n  background-color: var(--kanban-color-1) !important;\n}\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+2) .kanban-plugin__lane-header-wrapper {\n  background-color: var(--kanban-color-2) !important;\n}\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+3) .kanban-plugin__lane-header-wrapper {\n  background-color: var(--kanban-color-3) !important;\n}\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+4) .kanban-plugin__lane-header-wrapper {\n  background-color: var(--kanban-color-4) !important;\n}\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+5) .kanban-plugin__lane-header-wrapper {\n  background-color: var(--kanban-color-5) !important;\n}\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+6) .kanban-plugin__lane-header-wrapper {\n  background-color: var(--kanban-color-6) !important;\n}\nbody.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n) .kanban-plugin__lane-header-wrapper {\n  background-color: var(--kanban-color-7) !important;\n}\n\n/* Kanban Neon, v0.5, for Blue Topaz, modified from https://codepen.io/Chokcoco/pen/BaQzBEG by @Chokcoco */\nbody.style-options-for-kanban-plugin-dynamic-neon-one.theme-dark,\nbody.style-options-for-kanban-plugin-dynamic-neon-two.theme-dark,\nbody.style-options-for-kanban-plugin-dynamic-neon-three.theme-dark {\n  --background-transparent-black-or-white-1: #232323c2;\n  --background-transparent-black-or-white-2: #0f0f0f69;\n  --background-transparent-black-or-white-3: #2222224d;\n  --background-transparent-blue: #53a3ff41;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one.theme-light,\nbody.style-options-for-kanban-plugin-dynamic-neon-two.theme-light,\nbody.style-options-for-kanban-plugin-dynamic-neon-three.theme-light {\n  --background-transparent-black-or-white-1: #ffffffb0;\n  --background-transparent-black-or-white-2: #eeeeee88;\n  --background-transparent-black-or-white-3: #f5f5f583;\n  --background-transparent-blue: #5eb6ff44;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin,\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin,\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin {\n  background-color: var(--background-secondary-alt) !important;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one.theme-dark .kanban-plugin__lane-header-wrapper,\nbody.style-options-for-kanban-plugin-dynamic-neon-two.theme-dark .kanban-plugin__lane-header-wrapper,\nbody.style-options-for-kanban-plugin-dynamic-neon-three.theme-dark .kanban-plugin__lane-header-wrapper {\n  background: var(--background-transparent-blue) !important;\n  padding: 5px 11px!important;\n  border-radius: 6px 6px 0 0;\n  margin-bottom: 5px !important;\n  z-index: 100 !important;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n) {\n\n  position: relative;\n  z-index: 0;\n  border-radius: 10px;\n  overflow: hidden;\n  cursor: pointer;\n  transition: .3s;\n  -webkit-box-reflect: below 10px linear-gradient(transparent, rgba(0, 0, 0, .4));\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n)::before,\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n)::before {\n  content: '';\n  position: absolute;\n  z-index: -2;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  width: 38px;\n  height: 125%;\n  background-color: var(--background-secondary-alt) !important;\n  background-repeat: no-repeat;\n  background-size: 50% 50%;\n  background-position: 0 0;\n  background-image: conic-gradient(var(--kanban-shadow), var(--kanban-shadow));\n  animation: rotate 2s linear infinite;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n)::after,\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n)::after {\n  content: '';\n  position: absolute;\n  z-index: -1;\n  left: 2px;\n  top: 2px;\n  width: calc(100% - 4px);\n  height: calc(100% - 4px);\n  background-color: var(--background-secondary-alt) !important;\n  border-radius: 10px;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n) {\n  background: unset !important;\n  position: relative;\n  z-index: 0;\n  border-radius: 10px;\n  overflow: hidden;\n  cursor: pointer;\n  transition: .3s;\n  box-shadow: 0px 0px 5px 1px var(--kanban-shadow);\n}\n\n@keyframes rotate {\n  100% {transform: translate(-50%, -50%) rotate(1turn);}\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n):hover\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n):hover {\n  box-shadow: 0 0 5px var(--kanban-shadow), 0 0 25px var(--kanban-shadow);\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n):hover::after,\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n):hover::before,\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n):hover::after,\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n):hover::before {\n  transition: .3s;\n  background: linear-gradient(to bottom, var(--kanban-shadow) 30%,  transparent) !important;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+2),\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+2) {\n  filter: hue-rotate(50deg);\n}\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+3),\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+3) {\n  filter: hue-rotate(140deg);\n}\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+4),\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+4) {\n  filter: hue-rotate(180deg);\n}\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+5),\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+5) {\n  filter: hue-rotate(220deg);\n}\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+6),\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+6) {\n  filter: hue-rotate(280deg);\n}\nbody.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n)\nbody.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n) {\n  filter: hue-rotate(330deg);\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n) {\n  background: unset !important;\n  position: relative;\n  border-radius: 10px;\n  overflow: hidden;\n  cursor: pointer;\n  transition: .3s;\n  animation: huerotate-1 6s infinite linear;\n  filter: hue-rotate(360deg);\n}\n\n@keyframes huerotate-1 {\n  0% {filter: hue-rotate(0deg);}\n  100% {filter: hue-rotate(360deg);}\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n)::before {\n  content: '';\n  position: absolute;\n  z-index: -2;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  width: 250%;\n  height: 300%;\n  background-color: var(--background-secondary-alt) !important;\n  background-repeat: no-repeat;\n  background-size: 50% 50%;\n  background-position: 0 0;\n  background-image: conic-gradient(var(--kanban-shadow), var(--kanban-shadow));\n  animation: rotate 2s linear infinite;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n)::after {\n  content: '';\n  position: absolute;\n  z-index: -1;\n  left: 2px;\n  top: 2px;\n  width: calc(100% - 4px);\n  height: calc(100% - 4px);\n  background-color: var(--background-secondary-alt) !important;\n  border-radius: 10px;\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n):hover {\n  box-shadow: 0 0 5px var(--kanban-shadow), 0 0 25px var(--kanban-shadow);\n}\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n):hover::after,\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n):hover::before {\n  transition: .3s;\n  background: var(--kanban-shadow);\n}\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+2) {\n  animation: huerotate-2 6s infinite linear;\n  filter: hue-rotate(410deg);\n}\n\n@keyframes huerotate-2 {\n  0% {filter: hue-rotate(50deg);}\n  100% {filter: hue-rotate(410deg);}\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+3) {\n  animation: huerotate-3 6s infinite linear;\n  filter: hue-rotate(500deg);\n}\n\n@keyframes huerotate-3 {\n  0% {filter: hue-rotate(140deg);}\n  100% {filter: hue-rotate(500deg);}\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+4) {\n  filter: hue-rotate(540deg);\n  animation: huerotate-4 6s infinite linear;\n}\n\n@keyframes huerotate-4 {\n  0% {filter: hue-rotate(180deg);}\n  100% {filter: hue-rotate(540deg);}\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+5) {\n  filter: hue-rotate(580deg);\n  animation: huerotate-5 6s infinite linear;\n}\n\n@keyframes huerotate-5 {\n  0% {filter: hue-rotate(220deg);}\n  100% {filter: hue-rotate(580deg);}\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+6) {\n  filter: hue-rotate(640deg);\n  animation: huerotate-6 6s infinite linear;\n}\n\n@keyframes huerotate-6 {\n  0% {filter: hue-rotate(280deg);}\n  100% {filter: hue-rotate(640deg);}\n}\n\nbody.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+0) {\n  filter: hue-rotate(690deg);\n  animation: huerotate-7 6s infinite linear;\n}\n\n@keyframes huerotate-7 {\n  0% { filter: hue-rotate(330deg);}\n  100% { filter: hue-rotate(690deg);}\n}\n\n/* =========================================*/\n/* =========tapes pins and stickies=========*/\n/* =========================================*/\n/* thanks to death_au, Gabroel and Lithou from Obsidian Members Group on Discord */\n.stickies {\n  text-align: center;\n  transition: width 2s;\n  padding: 5px;\n  margin: 18px;\n  position: relative;\n  float: right;\n  right: -10px;\n  width: max(180px, 30%);\n  max-width: 50%;\n  background-color: var(--stickies-color-1);\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(2deg);\n  transition: all 2s ease;\n  z-index: 1;\n  padding-top: 10px;\n  padding-bottom: 10px;\n  border-radius: 0;\n  color: black;\n}\n\n.stickies::after {\n  content: \"\";\n  left: -5%;\n  top: -10px;\n  height: 40px;\n  width: 15px;\n  border-radius: var(--radius-l);\n  border: 3px solid #979797;\n  display: inline-block;\n  position: absolute;\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(-11deg);\n  z-index: 11;\n}\n\n.stickies::before {\n  width: 11px;\n  height: 20px;\n  content: \"\";\n  display: inline-block;\n  position: absolute;\n  left: -3.5%;\n  top: -2px;\n  border-radius: var(--radius-l);\n  border: 3px solid #979797;\n  border-bottom: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  z-index: 10;\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(-11deg);\n}\n\n.stickies2 {\n  position: relative;\n  float: left;\n  box-shadow: 0 10px 10px 2px #9191912d;\n  width: max(180px, 30%);\n  max-width: 50%;\n  background-color: var(--stickies-color-2);\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(-2deg);\n  transition: all 2s ease;\n  z-index: 1;\n  padding: 20px;\n  margin: 10px;\n  color: black;\n}\n\n.stickies2::after {\n  content: \"\";\n  display: block;\n  height: 32px;\n  width: 2px;\n  position: absolute;\n  left: 50%;\n  top: -10px;\n  z-index: 1;\n  border-radius: 50%;\n  display: inline-block;\n  height: 15px;\n  width: 15px;\n  border: 1px;\n  box-shadow: inset -10px -10px 10px #f0b7a4, inset 3px 3px 5px;\n}\n\n.to-recall {\n  position: relative;\n  float: left;\n  max-width: 30%;\n  background-color: var(--text-normal);\n  border-radius: var(--radius-xs);\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(0deg);\n  z-index: 1;\n  padding: 8px;\n  margin-right: 8px;\n  margin-top: 20px;\n  font-weight: bold;\n  font-family: Cooper;\n  color: var(--text-normal);\n}\n\n.to-recall:hover {\n  cursor: pointer;\n}\n\n.to-recall:active {\n  background-color: transparent;\n  transition: all 300ms ease;\n}\n\n.to-recall::after {\n  content: \"Click\";\n  position: absolute;\n  font-size: 12px;\n  top: 1px;\n  right: 5px;\n  font-weight: 600;\n  font-family: Arial;\n  color: var(--background-primary);\n}\n\n.to-recall:active:after {\n  display: none;\n}\n\n.to-recall::before {\n  content: \" To Recall\";\n  display: inline-block;\n  position: absolute;\n  top: -20px;\n  left: -8px;\n  border-radius: var(--radius-l);\n  font-size: 14px;\n  font-weight: bold;\n  font-family: OCR A;\n  color: #858585;\n  white-space: pre;\n}\n \n\n/* ================================== */\n/* ====== markdown assitance ======== */\n/* ================================== */\n.command-list-view-row-selected {\n  background-color: gray !important;\n}\n\n\n/*\n.cm-s-obsidian pre.HyperMD-codeblock,\n.cm-s-obsidian span.cm-math:not(.cm-formatting-math-begin):not(.cm-formatting-math-end) {\n  color: var(--gray-2);\n}\n*/\n\n/* ================================== */\n/* ============ comments ============ */\n/* ================================== */\n.theme-light .ob-comment {\n  position: relative;\n  border-bottom: 1px dotted black;\n  color: var(--text-normal) !important;\n  background-color: #57b2ee77 !important;\n  border-radius: 10% !important;\n}\n\n.theme-dark .ob-comment {\n  position: relative;\n  border-bottom: 1px dotted rgb(255, 255, 255);\n  color: var(--text-normal) !important;\n  background-color: #0054b5e0 !important;\n  border-radius: 10% !important;\n}\n\n.theme-light .ob-comment:hover {\n  background-color: #57b2ee50 !important;\n}\n\n.theme-dark .ob-comment:hover {\n  background-color: #0062d1 !important;\n}\n\n.theme-light .ob-comment span {\n  visibility: hidden;\n  min-width: auto;\n  max-width: 500px;\n  width: max-content;\n  background-color: #c7e2f5e5 !important;\n  color: #0068c9 !important;\n  text-align: left;\n  border-radius: var(--radius-s);\n  padding: 10px 10px;\n  z-index: 1;\n  position: absolute;\n  top: 20px;\n  right: 20px;\n  box-shadow: 1px 1px 10px 5px var(--background-secondary);\n  transition: opacity 1s;\n}\n\n.theme-dark .ob-comment span {\n  visibility: hidden;\n  min-width: auto;\n  max-width: 500px;\n  width: max-content;\n  background-color: #aed6f3ef !important;\n  color: #005cb3 !important;\n  text-align: left;\n  border-radius: var(--radius-s);\n  padding: 10px 10px;\n  z-index: 1;\n  position: absolute;\n  top: 20px;\n  right: 20px;\n  box-shadow: 1px 1px 10px 5px var(--background-secondary);\n  transition: opacity 1s;\n}\n\n.theme-light .comment-pannel-p3 {\n  background-color: #c7e2f5e5 !important;\n  color: #0068c9 !important;\n}\n\n.theme-dark .comment-pannel-p3 {\n  background-color: #aed6f3ef !important;\n  color: #005cb3 !important;\n}\n\n.comment-pannel-bubble {\n  width: 90% !important;\n  padding: 0 5px !important;\n  text-decoration: none;\n  display: inline-block;\n  margin-right: 0 !important;\n}\n\n/* ======== tooltip ========= */\n.tooltip,\n.tooltip.mod-right {\n  color: var(--white);\n  background-color: var(--interactive-accent);\n}\n.tooltip .tooltip-arrow {\n  border-bottom: 5px solid var(--interactive-accent);\n}\n.tooltip.mod-right .tooltip-arrow {\n  border-right: 5px solid var(--interactive-accent);\n}\n.tooltip.mod-left .tooltip-arrow {\n  border-left: 5px solid var(--interactive-accent);\n}\n\n/* ================================== */\n/* ======== better footnote ========= */\n/* ================================== */\n:is(.markdown-preview-view,.markdown-rendered) .tippy-content {\n  -webkit-background-clip: initial;\n  -webkit-text-fill-color: initial;\n  /*  font-size: var(--font-size-better-footnote) !important;*/\n  font-family: var(--font-family-better-footnote) !important;\n}\n\n/*default footnote*/\nsection.footnotes ol>li:not(.task-list-item) {\n  border-left: none !important;\n}\n\n.cm-s-obsidian span.cm-footref {\n  color: var(--text-accent);\n}\n.tippy-box[data-theme~=\"obsidian\"]\n{\n  backdrop-filter: blur(8px);\n}\n.file-embed.mod-empty:hover {\n  backdrop-filter: blur(5px);\n}\n/* ================================== */\n/* =========== admonition =========== */\n/* ================================== */\nbody.style-options-for-admonition-plugin .admonition {\n  break-inside: avoid;\n}\n\nbody.style-options-for-admonition-plugin .callout.admonition .admonition-content {\n  overflow: hidden;\n}\n\n.admonition.callout {\n  border-color: rgba(var(--callout-color),0.15);\n}\n.callout:not(.admonition).drop-shadow\n{\n  box-shadow:var(--window-shadow2);\n}\n.callout.admonition.admonition-plugin.is-collapsed {\n  overflow: hidden;\n}\n/* ad伪看板效果*/\nbody.style-options-for-admonition-plugin .admonition-kanban {\n  overflow: visible;\n  background-color: rgba(255, 255, 255, 0) !important;\n  border-left: none !important;\n  margin: auto;\n  box-shadow: none !important;\n}\nbody.style-options-for-admonition-plugin .admonition-kanban .admonition-content {\n  overflow: visible;\n  margin: 0;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban .is-mobile ul {\n  display: flex;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul {\n  display: flex;\n  margin: 0;\n  flex-direction: row;\n  border: none;\n  padding: 0;\n  border-radius: var(--radius-m);\n  flex-wrap: wrap;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul>li:not(.task-list-item) {\n  flex: 1 1 20%;\n  padding: 0.1em 1em 0.1em 0.8em  !important;\n  margin: 0 0.1em 0.3em 0  !important;\n  list-style: none;\n  border: 1px solid var(--p-kanban-border-color);\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul .list-collapse-indicator.collapse-indicator.collapse-icon {\n  margin-left: -1.2em;\n  position: absolute;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul .list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n}\n\nbody.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+1) {\n  background-color: var(--p-kanban-color-1);\n  padding-left: 2em;\n}\nbody.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+2) {\n  background-color: var(--p-kanban-color-2);\n  padding-left: 2em;\n}\nbody.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+3) {\n  background-color: var(--p-kanban-color-3);\n  padding-left: 2em;\n}\nbody.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+4) {\n  background-color: var(--p-kanban-color-4);\n  padding-left: 2em;\n}\nbody.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+5) {\n  background-color: var(--p-kanban-color-5);\n  padding-left: 2em;\n}\nbody.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+6) {\n  background-color: var(--p-kanban-color-6);\n  padding-left: 2em;\n}\nbody.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+7) {\n  background-color: var(--p-kanban-color-7);\n  padding-left: 2em;\n}\nbody.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n) {\n  background-color: var(--p-kanban-color-8);\n  padding-left: 2em;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul ul {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  padding: 0;\n  margin-top: 0.5rem;\n  border-radius: 0;\n  border: 0;\n  background: none;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul ul li:not(.task-list-item) {\n  width: 100%;\n  display: block;\n  background-color: var(--p-kanban-card-color-1) !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul>li:hover {\n  border-color: var(--p-kanban-border-color) !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul ul li:hover {\n  background: transparent !important;\n  border-color: var(--p-kanban-border-color) !important;\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n}\n\n.theme-dark body.style-options-for-admonition-plugin .admonition-kanban ul ul li:hover {\n  border-color: #696969e1 !important;\n  border-left: 1px solid #696969e1 !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul ul li .task-list-item-checkbox {\n  margin-left: 1.5rem;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul ul ul {\n  margin-right: 0;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul ul::before {\n  border-left: 0;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).is-readable-line-widthbody.style-options-for-admonition-plugin .admonition-kanban .markdown-preview-sizer>div>ul {\n  max-width: 100%;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul.contains-task-list ul,\nbody.style-options-for-admonition-plugin .admonition-kanban ol.contains-task-list ul,\nbody.style-options-for-admonition-plugin .admonition-kanban ul.contains-task-list ol,\nbody.style-options-for-admonition-plugin .admonition-kanban ol.contains-task-list ol {\n  position: initial;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul.contains-task-list ul::before,\nbody.style-options-for-admonition-plugin .admonition-kanban ol.contains-task-list ul::before,\nbody.style-options-for-admonition-plugin .admonition-kanban ul.contains-task-list ol::before,\nbody.style-options-for-admonition-plugin .admonition-kanban ol.contains-task-list ol::before {\n  all: initial\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul > li.task-list-item {\n  flex: 1 1 20%;\n  padding: 0.1em 1em;\n  margin: 0 0.1em 0.3em 0;\n  list-style: none;\n  border: 1px solid var(--p-kanban-border-color);\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n  text-indent: 0;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban ul ul li.task-list-item {\n  width: 100%;\n  display: block;\n  padding-left: 2em;\n  text-indent: -3.1em;\n  background-color: var(--p-kanban-card-color-1) !important;\n}\n\n/*blank ad分栏\n修改自 https://forum-zh.obsidian.md/t/topic/2081 */\nbody.style-options-for-admonition-plugin .is-live-preview .admonition-col2 .callout-content.admonition-content>div:nth-child(2),\nbody.style-options-for-admonition-plugin .is-live-preview .admonition-col3 .callout-content.admonition-content>div:nth-child(2),\nbody.style-options-for-admonition-plugin .is-live-preview .admonition-col4 .callout-content.admonition-content>div:nth-child(2) {\n  margin-top: -1.5em;\n}\nbody.style-options-for-admonition-plugin .admonition-kanban .admonition-title-icon,\nbody.style-options-for-admonition-plugin .admonition-flex .admonition-title-icon,\nbody.style-options-for-admonition-plugin .admonition-col2 .admonition-title-icon,\nbody.style-options-for-admonition-plugin .admonition-col3 .admonition-title-icon,\nbody.style-options-for-admonition-plugin .admonition-col4 .admonition-title-icon {\n  display: none;\n}\nbody.style-options-for-admonition-plugin .is-live-preview  :is(.admonition-col2, .admonition-col3, .admonition-col4, .admonition-flex) .admonition-content blockquote {\n  padding: 0;\n  margin: 0;\n  line-height:1em;\n}\nbody.style-options-for-admonition-plugin :is(.admonition-col2, .admonition-col3, .admonition-col4, .admonition-flex) .admonition-content blockquote {\n  flex: 100%;\n  border-left: none;\n  padding-left: 0;\n  padding-right: 0;\n  margin-block-start: 0;\n  margin: 0;\n  box-shadow: none;\n  background-color: transparent;\n  color: var(--text-muted);\n}\nbody.style-options-for-admonition-plugin :is(.admonition-col2, .admonition-col3, .admonition-col4, .admonition-flex) .admonition-content blockquote p::before {\n  display: none;\n}\nbody.style-options-for-admonition-plugin :is(.admonition-col2, .admonition-col3, .admonition-col4, .admonition-flex) .admonition-content blockquote p {\n  margin: 0;\n  overflow-wrap: anywhere;\n}\n\nbody.style-options-for-admonition-plugin :is(.callout.admonition-col2,.callout.admonition-col3,.callout.admonition-col4,.callout.admonition-flex)>.admonition-content>ul {\n  margin-left: auto;\n}\nbody.style-options-for-admonition-plugin .admonition-col2 .admonition-content>ul,\nbody.style-options-for-admonition-plugin .admonition-col3 .admonition-content>ul,\nbody.style-options-for-admonition-plugin .admonition-col4 .admonition-content>ul,\nbody.style-options-for-admonition-plugin .admonition-flex .admonition-content>ul {\n  padding-inline-start: 20px !important;\n  margin-left: -20px;\n  margin-block-start:0;\n}\n\nbody.style-options-for-admonition-plugin :is(.admonition-flex,.admonition-col2,.admonition-col3,.admonition-col4) .admonition-content .admonition-content>ul>li{\n  list-style-type: none;\n  padding:0;\n}\n.markdown-rendered .admonition  ul li p:last-of-type, .markdown-rendered ol li p:last-of-type {\n margin-block-end: 0.5em; \n}\n\n.markdown-rendered  .admonition  ul li p:first-of-type, .markdown-rendered ol li p:first-of-type {\n  margin-block-start: 0.5em; \n}\n\nbody.style-options-for-admonition-plugin .admonition-col2 .admonition-content ul li .task-list-item-checkbox,\nbody.style-options-for-admonition-plugin .admonition-col3 .admonition-content ul li .task-list-item-checkbox,\nbody.style-options-for-admonition-plugin .admonition-col4 .admonition-content ul li .task-list-item-checkbox,\nbody.style-options-for-admonition-plugin .admonition-flex .admonition-content ul li .task-list-item-checkbox {\n  margin-left: auto;\n}\n:is(.admonition-col2,.admonition-col3,.admonition-col4,.admonition-flex) .callout-content ul.dataview.list-view-ul>li:not(.task-list-item) {\n  margin-left: auto;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col2 {\n  box-shadow: none!important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col2 .admonition\t{\n  overflow: visible;\n  margin: 0;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col2>.admonition-content-holder> .admonition-content {\n  columns: 150px 2;\n  -moz-columns: 150px 2;\n  -webkit-columns: 150px 2;\n  column-gap: 2vw;\n  overflow: visible;\n  margin: 0;\n  /*分栏的分割线\n  column-rule: 1px solid #d4d2d2; */\n}\nbody.style-options-for-admonition-plugin .callout.admonition-col2> .admonition-content {\n  columns: 150px 2;\n  -moz-columns: 150px 2;\n  -webkit-columns: 150px 2;\n  column-gap: 2vw;\n  overflow: visible;\n  margin: 0;\n  /*分栏的分割线\n  column-rule: 1px solid #d4d2d2; */\n}\nbody.style-options-for-admonition-plugin .admonition-col2 .admonition-content ol,\nbody.style-options-for-admonition-plugin .admonition-col2 .admonition-content ul {\n  margin-top: -0.25em;\n\n}\nbody.style-options-for-admonition-plugin :is(.markdown-preview-view,.markdown-rendered) .admonition-col2 .admonition-content :is(h3,h4) {\n  margin-top: -0.001em !important;\n}\nbody.style-options-for-admonition-plugin .admonition-kanban .admonition-col2 .admonition-content ol{\n  margin: 0;\n  break-inside: avoid;\n}\n\nbody.style-options-for-admonition-plugin .admonition-kanban .admonition-col2 .admonition-content ul {\n  margin: 0;\n  break-inside: avoid;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col2 .admonition-content {\n  overflow: visible ;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col2 > .admonition-content-holder {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\nbody.style-options-for-admonition-plugin .admonition-col2 p {\n  text-align: justify;\n  margin-top: 0;\n  padding: 2px;\n  /*  height:100%;\n  overflow: auto; */\n}\nbody.style-options-for-admonition-plugin .admonition-col2 p > img{\n  display: block;\n  height: auto;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col2-parent .admonition-col2 .admonition > .admonition-title.no-title + .admonition-content-holder {\n  margin-top: 0;\n}\n\n/****col3 三栏*****/\nbody.style-options-for-admonition-plugin .admonition-col3 {\n  box-shadow: none !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col3 .admonition\t{\n  overflow: visible;\n  margin: 0;\n}\n\nbody.style-options-for-admonition-plugin .callout.admonition-col3>.admonition-content {\n  columns: 100px 3;\n  -moz-columns: 100px 3;\n  -webkit-columns: 100px 3;\n  column-gap: 1vw;\n  overflow: visible;\n  margin: 0;\n  break-inside: avoid;\n  column-rule: 1px solid #d4d2d2;\n}\nbody.style-options-for-admonition-plugin .admonition-col3>.admonition-content-holder>.admonition-content {\n  columns: 100px 3;\n  -moz-columns: 100px 3;\n  -webkit-columns: 100px 3;\n  column-gap: 1vw;\n  overflow: visible ;\n  margin: 0;\n  break-inside: avoid;\n  column-rule: 1px solid #d4d2d2;\n}\nbody.style-options-for-admonition-plugin .admonition-col3 .admonition-content ol,\nbody.style-options-for-admonition-plugin .admonition-col3 .admonition-content ul {\n  margin-top: -0.25em;\n}\nbody.style-options-for-admonition-plugin .admonition-kanban .admonition-col3 .admonition-content ul {\n  margin: 0;\n  break-inside: avoid;\n}\nbody.style-options-for-admonition-plugin .admonition-kanban .admonition-col3 .admonition-content ol {\n  margin: 0;\n  break-inside: avoid;\n}\nbody.style-options-for-admonition-plugin .admonition-col3 .admonition-content {\n  overflow: visible;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col3 >.admonition-content-holder {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\nbody.style-options-for-admonition-plugin .admonition-col3 p{\n  text-align: justify;\n  margin-top: 0;\n  padding: 2px;\n  /*  height:100%;\n  overflow: auto; */\n}\nbody.style-options-for-admonition-plugin .admonition-col3 p>img{\n  display: block;\n  height: auto;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col3-parent .admonition-col3 .admonition > .admonition-title.no-title + .admonition-content-holder {\n  margin-top: 0;\n}\n\n/****col4 四栏*****/\nbody.style-options-for-admonition-plugin .admonition-col4 {\n  box-shadow: none !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col4 .admonition\t{\n  overflow: visible;\n  margin: 0;\n}\n\nbody.style-options-for-admonition-plugin .callout.admonition-col4 > .admonition-content {\n  column-count: 4;\n  column-gap: 1vw;\n  overflow: visible;\n  margin: 0;\n  break-inside: avoid;\n}\nbody.style-options-for-admonition-plugin .admonition-col4 > .admonition-content-holder>.admonition-content {\n  column-count: 4;\n  column-gap: 1vw;\n  overflow: visible;\n  margin: 0;\n  break-inside: avoid;\n}\nbody.style-options-for-admonition-plugin .admonition-col4 .admonition-content {\n  margin: 0;\n  break-inside: avoid;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col4 .admonition-content ol,\nbody.style-options-for-admonition-plugin .admonition-col4 .admonition-content ul {\n  margin-top: -0.25em;\n}\nbody.style-options-for-admonition-plugin .admonition-kanban .admonition-col4 .admonition-content ul {\n  margin: 0;\n  break-inside: avoid;\n}\nbody.style-options-for-admonition-plugin .admonition-kanban .admonition-col4 .admonition-content ol {\n  margin: 0;\n  break-inside: avoid;\n}\nbody.style-options-for-admonition-plugin .admonition-col4 > .admonition-content {\n  overflow: visible;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col4 > .admonition-content-holder {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\nbody.style-options-for-admonition-plugin .admonition-col4 p {\n  text-align: justify;\n  margin-top: 0;\n  padding: 2px;\n}\nbody.style-options-for-admonition-plugin .admonition-col4 p>img{\n  display: block;\n  height: auto;\n  -webkit-transition: -webkit-transform .3s ease;\n  -moz-transition: -moz-transform .3s ease;\n  -ms-transition: -ms-transform .3s ease;\n  transition: transform .3s ease;\n}\n\nbody.style-options-for-admonition-plugin .admonition-col4 p>img:hover{\n  -webkit-transform: scale(1.2);\n  -moz-transform: scale(1.2);\n  -ms-transform: scale(1.2);\n  transform: scale(1.2)\n}\n\nbody.style-options-for-admonition-plugin .admonition-col4-parent .admonition-col4 .admonition > .admonition-title.no-title + .admonition-content-holder {\n  margin-top: 0;\n}\n\n/*自适应分栏*/\nbody.style-options-for-admonition-plugin .admonition-flex {\n  margin: auto;\n  box-shadow: none;\n  border-left: none;\n  word-break: break-word;\n}\nbody.admonition-bg-color-same.style-options-for-admonition-plugin .admonition-flex {\n  margin: 1em 0;\n}\n.is-live-preview .callout-content.admonition-content >p {\n  margin-top: 0;\n}\nbody.style-options-for-admonition-plugin .admonition-flex >.admonition-content-holder {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\nbody.style-options-for-admonition-plugin .admonition-flex .admonition-content {\n  width: 100%;\n  margin: 0px;\n  display: flex;\n  flex-wrap: wrap;\n  border: none;\n}\nbody.style-options-for-admonition-plugin .admonition-flex .admonition-content>div{\n  flex: 1;\n  margin: 0 0.625rem;\n}\nbody.style-options-for-admonition-plugin .admonition-flex .admonition-content[data-embed-type=\"image\"] p{\n  align-self: baseline;\n}\n\nbody.style-options-for-admonition-plugin .admonition-flex .admonition-content[data-embed-type=\"image\"] {\n  justify-content: space-around;\n}\n\n/*ad-table*/\nbody.style-options-for-admonition-plugin .admonition-table {\n  overflow: visible;\n  margin: auto;\n  box-shadow: none;\n}\nbody.style-options-for-admonition-plugin .admonition-table .admonition-content {\n  width: calc(100% - 5px);\n  margin: 0;\n  overflow-x: auto !important;\n  white-space: nowrap;\n}\nbody.style-options-for-admonition-plugin .admonition-table .admonition-content thead > tr > th,\nbody.style-options-for-admonition-plugin .admonition-table .admonition-content tbody > tr > td {\n  white-space: nowrap;\n}\n/*blank ad框全透明隐藏*/\nbody.style-options-for-admonition-plugin .admonition-blank {\n  overflow: visible;\n  background-color: rgba(255, 255, 255, 0) !important;\n  border-left: none !important;\n  margin: auto;\n  box-shadow: none;\n}\nbody.style-options-for-admonition-plugin .admonition-blank .admonition-content {\n  overflow: visible;\n  margin: 0;\n}\nbody.style-options-for-admonition-plugin .callout.admonition-blank .admonition-content {\n  overflow: hidden;\n}\n\n/* 感谢 围城 网友分享\n本样式仿造自elegantbook模板:https://github.com/ElegantLaTeX/ElegantBook\n为以下类型设置了样式，需要在admonition中自行添加，设置好颜色和icon\n- def: definition\n- thm: theorem\n- lem: lemma\n- cor: corollary\n- pro: proposition\n\n标题使用方正书宋_GBK，正文使用方正楷体_GBK,系统需要安装\n*/\n\nbody.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) {\n  margin: 1.5625em 0 !important;\n  overflow: visible !important;\n  border: 1px solid rgb(var(--callout-color)) !important;\n  border-radius: 0.3em !important;\n  background-color: rgba(var(--callout-color),0.05) !important;\n  box-shadow: 0 0 0 !important;\n}\n\nbody.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.admonition-title {\n  display: inline-block;\n  top: -0.9em;\n  left: 1.5em;\n  padding: 1px 8px !important;\n  background-color: rgb(var(--callout-color)) !important;\n  border-radius: 0.2em;\n}\n\nbody.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.callout-title.admonition-title {\n  display: flex;\n  top: unset;\n  left: 1.5em;\n  padding: 1px 8px !important;\n  background-color: rgb(var(--callout-color)) !important;\n  border-radius: 0.2em;\n  position: relative;\n  width: fit-content;\n}\n\nbody.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.admonition-title-content {\n  color: white;\n  font-family: \"方正书宋_GBK\", var(--font-text);\n  font-size: 1.1em;\n}\n\nbody.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.admonition-title-icon {\n  /* display: none !important; */\n  color: white;\n  background-color: rgb(var(--callout-color));\n  margin: 0.2em;\n}\n\nbody.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.admonition-content-holder {\n  margin-top: -1em;\n  padding: 0;\n}\n\nbody.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.callout-title.admonition-title {\n  margin-top: -1em ;\n  padding: 0;\n}\n\nbody.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) p {\n  text-indent: 0;\n  font-family: \"方正楷体_GBK\", var(--font-text) !important;\n  font-size: 1.1em;\n}\n\n/*hibox*/\n/*改自 https://github.com/chokcoco/iCSS/issues/153 */\nbody.style-options-for-admonition-plugin .admonition-hibox .admonition-content-holder {\n  margin: -1em 0.2em;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox {\n  background-color: transparent !important;\n  box-shadow: none !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox *::marker {\n  visibility: hidden;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox {\n  position: relative;\n  height: auto;\n  overflow: hidden;\n  border-radius: var(--radius-s) !important;\n  background: radial-gradient(circle at 0px 0px, rgba(var(--callout-color), 0.2) 0, rgba(var(--callout-color), 0.2) var(--hibox), transparent var(--hibox), transparent 0);\n  transition: --hibox 0.6s linear;\n  border-left: none !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox:hover {\n  --hibox: 1500px;\n  box-shadow: 0 0.2rem 0.5rem var(--background-modifier-box-shadow) !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox:hover * {\n  visibility: visible;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox .admonition-content-copy {\n  top: 7px;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox:hover ol:not(.contains-task-list)>li:not(.task-list-item) {\n  border-color: var(--list-ol-block-color) !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox:hover ul>li:not(.task-list-item) {\n  border-color: var(--list-ul-block-color) !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox:hover *::marker {\n  color: var(--list-ol-number-color) !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox:hover blockquote {\n  border-color: var(--theme-color) !important;\n  background-color: var(--background-blockquote) !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox:hover {\n  border-color: var(--text-normal) !important;\n}\n\nbody.style-options-for-admonition-plugin .admonition-hibox .admonition-title {\n  display: none;\n}\n\n\n/* ======Notice================ */\n.notice-container .notice:nth-child(4n+1){\n  background-color: var(--background-pink);\n  color: var(--text-normal);\n}\n.notice-container .notice:nth-child(4n+2){\n  background-color: var(--background-yellow);\n  color: var(--text-normal);\n}\n.notice-container .notice:nth-child(4n+3){\n  background-color: var(--background-green);\n  color: var(--text-normal);\n}\n.notice-container .notice:nth-child(4n+4){\n  background-color: var(--background-red);\n  color: var(--text-normal);\n}\n\n.notice-container {\n  z-index: var(--layer-notice);\n  position: fixed;\n  top: 40px;\n  right: 0px;\n  padding: 0px;\n  overflow: hidden;\n}\n\n/* ================================== */\n/* ============ checklist =========== */\n/* ================================== */\n.checklist-plugin-main button {\n  box-shadow: none;\n}\n.checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li {\n  border-left: none !important;\n  font-size: var(--font-size-checklist);\n}\n\n.checklist-plugin-main {\n  --todoList-listItemBackground: var(--checklist-bg) !important;\n  --todoList-listItemBackground--hover: var(--checklist-bg-hover) !important;\n}\n\nbody.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+1) {\n  background-color: var(--checklist-color-1);\n}\nbody.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+2) {\n  background-color: var(--checklist-color-2);\n}\nbody.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+3) {\n  background-color: var(--checklist-color-3);\n}\nbody.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+4) {\n  background-color: var(--checklist-color-4);\n}\nbody.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+5) {\n  background-color: var(--checklist-color-5);\n}\nbody.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+6) {\n  background-color: var(--checklist-color-6);\n}\nbody.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+7) {\n  background-color: var(--checklist-color-7);\n}\n\n.is-mobile .checklist-plugin-main :is(.markdown-preview-view,.markdown-rendered) ul {\n  padding-inline-start: 0;\n}\n\n.is-mobile .checklist-plugin-main button.toggle {\n  width: unset;\n}\n\n.checklist-plugin-main button.toggle .checked {\n  background-color: var(--theme-color) !important;\n}\n\n/* ================================== */\n/* ============ longform ============ */\n/* ================================== */\n.workspace-leaf-content[data-type=\"VIEW_TYPE_LONGFORM_EXPLORER\"] li {\n  border-left: none;\n}\n\n/* ================================== */\n/* ========== Breadcrumbs =========== */\n/* ================================== */\n.workspace-leaf-content[data-type=\"breadcrumbs-matrix\"] summary.hier-summary,\nh3.breadcrumbs-matrix-header {\n  color: var(--h3-color) !important;\n}\n\n.workspace-leaf-content[data-type=\"breadcrumbs-matrix\"] summary {\n  color: var(--h4-color) !important;\n}\n\n/*remove H3, H5 when hovering*/\nh3.breadcrumbs-matrix-header:hover::before,\nh5.breadcrumbs-matrix-header:hover::before {\n  display: none;\n}\n\nh5.breadcrumbs-header,\nh5.breadcrumbs-matrix-header {\n  color: var(--h5-color) !important;\n}\n\n.breadcrumbs-matrix-square {\n  border: none !important;\n}\n\n.breadcrumbs-matrix ol {\n  margin-left: 8px !important;\n}\n\n/* ================================== */\n/* ===== code  block enhancer ======= */\n/* ================================== */\n.obsidian-banner-wrapper.code-block-wrap {\n  position: unset;\n}\n.code-block-wrap .code-block-linenum-wrap {\n  top: 0.4em;\n  background-color: transparent;\n}\n.code-block-wrap .code-block-lang-name {\n  top: 4px;\n  left: 2px;\n}\n.code-block-wrap .code-block-lang-name + .code-block-linenum-wrap>.code-block-linenum:first-child::before {\n  color: transparent;\n}\n\n/* ================================== */\n/* ============ Dataview ============ */\n/* ================================== */\nspan.dataview.small-text {\n  position: relative;\n  font-size: 70%;\n  line-height: 0;\n  vertical-align: baseline;\n  top: -.5em;\n  color: var(--text-accent);\n  border-radius: 3px;\n  text-align: center;\n  padding: 0 0.2em;\n  margin: 0 1px;\n  font-variant-numeric: ordinal;\n  opacity: 0.6;\n}\n\n.dataview-container .internal-link {\n  font-size:0.88em;\n}\n\nul.dataview.list-view-ul>li:not(.task-list-item) {\n  border-left: none !important;\n \n}\n\nli.dataview-result-list-li ul>li:not(.task-list-item) {\n  border-left: none !important;\n}\n\nul.dataview.list-view-ul>li:not(.task-list-item)::before {\n  font-family: boxicons;\n  font-size: 0.8em;\n  padding: 0 5px 0 0;\n}\n\nbody.dataview-list-style-pacman ul.dataview.list-view-ul>li:not(.task-list-item):first-of-type::before {\n  content: '\\edcf';\n  color: var(--list-ol-number-color);\n}\nbody.dataview-list-style-pacman ul.dataview.list-view-ul>li:not(.task-list-item):not(:first-of-type):nth-of-type(2n):not(:nth-of-type(10n))::before {\n  content: '\\eaee';\n  color: var(--list-ul-disc-color);\n}\nbody.dataview-list-style-pacman ul.dataview.list-view-ul>li:not(.task-list-item):not(:first-of-type):nth-of-type(2n+1)::before {\n  content: '\\edd1';\n  color: var(--list-ul-disc-color);\n}\nbody.dataview-list-style-pacman ul.dataview.list-view-ul>li:not(.task-list-item):nth-of-type(10n)::before {\n  content: '\\ef29';\n  color:  var(--list-ol-number-color);\n}\n\nbody.dataview-list-style-pacman ul.dataview.list-view-ul {\n  list-style: none;\n}\n\nul.dataview.dataview-ul.dataview-result-list-root-ul>li.dataview-result-list-li {\n  border-left: none !important;\n  margin: 0;\n  padding-left: 0em;\n}\n\nul.dataview.dataview-ul.dataview-result-list-root-ul {\n  list-style: none;\n}\n\n.CodeMirror-code .CodeMirror-linewidget.rendered-block-embed.rendered-widget {\n  background-color: var(--embed-color);\n  border-radius: var(--radius-xs);\n  border: 1px solid var(--embed-color);\n}\n\nbody:is(.rainbow-lines-reading,.list-vertical-line-one) table.dataview.table-view-table :is(ol,ul) :is(ol,ul)::before,\nbody:is(.rainbow-lines-reading,.list-vertical-line-one) .kanban-plugin__markdown-preview-view :is(ol,ul) :is(ol,ul)::before {\n  border-left: none;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) .dataview.inline-field-standalone-value {\n  background-color:  transparent;\n}\n\n/* ================================== */\n/* ======= CodeMirror Options ======= */\n/* ================================== */\n.CodeMirror-widget img.hmd-image:active {\n  all: initial;\n}\n\n.cm-formatting.cm-formatting-highlight.cm-highlight.hmd-hidden-token+.cm-highlight {\n  border-radius: var(--radius-xs);\n  padding: 0 3px 2px;\n}\n\n.cm-formatting.cm-formatting-code.cm-inline-code.hmd-hidden-token+.cm-inline-code {\n  border-radius: var(--radius-xs);\n  padding: 2px 4px;\n}\n\n.cm-formatting.cm-formatting-code.cm-inline-code.hmd-hidden-token {\n  font-size: 0 !important;\n}\n\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\">\"] {\n  background-size: 80% !important;\n  background-position: 60% 55% !important;\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M10.707 17.707 16.414 12l-5.707-5.707-1.414 1.414L13.586 12l-4.293 4.293z\"></path></svg>') !important;\n}\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\">\"]::before {\n  content: ' ';\n  position: absolute;\n  padding: 0 0.2em;\n  margin-left: 0.4em;\n  border-radius: var(--radius-xs);\n  background-color: var(--checkbox-color-2);\n  z-index: -1;\n}\n\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"<\"] {\n  background-size: 80% !important;\n  background-position: 60% 55% !important;\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" style=\"fill: rgba(255, 255, 255, 1);transform: ;msFilter:;\"><path d=\"M13.293 6.293 7.586 12l5.707 5.707 1.414-1.414L10.414 12l4.293-4.293z\"></path></svg>') !important;\n}\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"<\"]::before {\n  content: ' ';\n  position: absolute;\n  padding: 0 0.2em;\n  margin-left: 0.4em;\n  border-radius: var(--radius-xs);\n  background-color: var(--checkbox-color-1);\n  z-index: -1;\n}\n\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"!\"] {\n  background-size: 62% !important;\n  background-position: center !important;\n  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiNkNGEzMDAiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zy8+PGc+PHBhdGggZD0iTTEyLDNjLTAuNDYsMC0wLjkzLDAuMDQtMS40LDAuMTRDNy44NCwzLjY3LDUuNjQsNS45LDUuMTIsOC42NmMtMC40OCwyLjYxLDAuNDgsNS4wMSwyLjIyLDYuNTYgQzcuNzcsMTUuNiw4LDE2LjEzLDgsMTYuNjlWMTljMCwxLjEsMC45LDIsMiwyaDAuMjhjMC4zNSwwLjYsMC45OCwxLDEuNzIsMXMxLjM4LTAuNCwxLjcyLTFIMTRjMS4xLDAsMi0wLjksMi0ydi0yLjMxIGMwLTAuNTUsMC4yMi0xLjA5LDAuNjQtMS40NkMxOC4wOSwxMy45NSwxOSwxMi4wOCwxOSwxMEMxOSw2LjEzLDE1Ljg3LDMsMTIsM3ogTTE0LDE3aC00di0xaDRWMTd6IE0xMCwxOXYtMWg0djFIMTB6IE0xNS4zMSwxMy43NGMtMC4wOSwwLjA4LTAuMTYsMC4xOC0wLjI0LDAuMjZIOC45MmMtMC4wOC0wLjA5LTAuMTUtMC4xOS0wLjI0LTAuMjdjLTEuMzItMS4xOC0xLjkxLTIuOTQtMS41OS00LjcgYzAuMzYtMS45NCwxLjk2LTMuNTUsMy44OS0zLjkzQzExLjMyLDUuMDMsMTEuNjYsNSwxMiw1YzIuNzYsMCw1LDIuMjQsNSw1QzE3LDExLjQzLDE2LjM5LDEyLjc5LDE1LjMxLDEzLjc0eiIvPjwvZz48Zz48cmVjdCBoZWlnaHQ9IjMiIHdpZHRoPSIxIiB4PSIxMS41IiB5PSIxMSIvPjxyZWN0IGhlaWdodD0iMyIgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxIC0wLjcwNzEgMC43MDcxIDAuNzA3MSAtNC4wMzEyIDEwLjg1MzYpIiB3aWR0aD0iMSIgeD0iMTAuNTkiIHk9IjguNzkiLz48cmVjdCBoZWlnaHQ9IjMiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjcwNzEgLTAuNzA3MSAwLjcwNzEgLTAuNzA3MSAxNC43Njc4IDI2LjcwMjgpIiB3aWR0aD0iMSIgeD0iMTIuNDEiIHk9IjguNzkiLz48L2c+PC9nPjwvc3ZnPg==) !important;\n}\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"!\"] {\n  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiNmZmRjNTEiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zy8+PGc+PHBhdGggZD0iTTEyLDNjLTAuNDYsMC0wLjkzLDAuMDQtMS40LDAuMTRDNy44NCwzLjY3LDUuNjQsNS45LDUuMTIsOC42NmMtMC40OCwyLjYxLDAuNDgsNS4wMSwyLjIyLDYuNTYgQzcuNzcsMTUuNiw4LDE2LjEzLDgsMTYuNjlWMTljMCwxLjEsMC45LDIsMiwyaDAuMjhjMC4zNSwwLjYsMC45OCwxLDEuNzIsMXMxLjM4LTAuNCwxLjcyLTFIMTRjMS4xLDAsMi0wLjksMi0ydi0yLjMxIGMwLTAuNTUsMC4yMi0xLjA5LDAuNjQtMS40NkMxOC4wOSwxMy45NSwxOSwxMi4wOCwxOSwxMEMxOSw2LjEzLDE1Ljg3LDMsMTIsM3ogTTE0LDE3aC00di0xaDRWMTd6IE0xMCwxOXYtMWg0djFIMTB6IE0xNS4zMSwxMy43NGMtMC4wOSwwLjA4LTAuMTYsMC4xOC0wLjI0LDAuMjZIOC45MmMtMC4wOC0wLjA5LTAuMTUtMC4xOS0wLjI0LTAuMjdjLTEuMzItMS4xOC0xLjkxLTIuOTQtMS41OS00LjcgYzAuMzYtMS45NCwxLjk2LTMuNTUsMy44OS0zLjkzQzExLjMyLDUuMDMsMTEuNjYsNSwxMiw1YzIuNzYsMCw1LDIuMjQsNSw1QzE3LDExLjQzLDE2LjM5LDEyLjc5LDE1LjMxLDEzLjc0eiIvPjwvZz48Zz48cmVjdCBoZWlnaHQ9IjMiIHdpZHRoPSIxIiB4PSIxMS41IiB5PSIxMSIvPjxyZWN0IGhlaWdodD0iMyIgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxIC0wLjcwNzEgMC43MDcxIDAuNzA3MSAtNC4wMzEyIDEwLjg1MzYpIiB3aWR0aD0iMSIgeD0iMTAuNTkiIHk9IjguNzkiLz48cmVjdCBoZWlnaHQ9IjMiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjcwNzEgLTAuNzA3MSAwLjcwNzEgLTAuNzA3MSAxNC43Njc4IDI2LjcwMjgpIiB3aWR0aD0iMSIgeD0iMTIuNDEiIHk9IjguNzkiLz48L2c+PC9nPjwvc3ZnPg==) !important;\n}\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"!\"]::before {\n  content: ' ';\n  position: absolute;\n  padding: 0 0.2em;\n  margin-left: 0.4em;\n  border-radius: var(--radius-xs);\n  background-color: var(--checkbox-color-4);\n  z-index: -1;\n}\n\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"?\"] {\n  background-size: 62% !important;\n  background-position: 55% 80% !important;\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" style=\"fill: rgba(241, 61, 100, 1)\"><path d=\"M12 4C9.243 4 7 6.243 7 9h2c0-1.654 1.346-3 3-3s3 1.346 3 3c0 1.069-.454 1.465-1.481 2.255-.382.294-.813.626-1.226 1.038C10.981 13.604 10.995 14.897 11 15v2h2v-2.009c0-.024.023-.601.707-1.284.32-.32.682-.598 1.031-.867C15.798 12.024 17 11.1 17 9c0-2.757-2.243-5-5-5zm-1 14h2v2h-2z\"></path></svg>') !important;\n}\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"?\"]::before {\n  content: ' ';\n  position: absolute;\n  padding: 0 0.2em;\n  margin-left: 0.4em;\n  border-radius: var(--radius-xs);\n  background-color: var(--checkbox-color-3);\n  z-index: -1;\n}\n\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"+\"] {\n  background-size: 65% !important;\n  background-position: 52% 55% !important;\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 11h-6V5h-2v6H5v2h6v6h2v-6h6z\"></path></svg>') !important;\n}\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"+\"]::before {\n  content: ' ';\n  position: absolute;\n  padding: 0 0.2em;\n  margin-left: 0.4em;\n  border-radius: var(--radius-xs);\n  background-color: var(--checkbox-color-5);\n  z-index: -1;\n}\n\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"-\"] {\n  background-size: 65% !important;\n  background-position: 55% 60% !important;\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M5 11h14v2H5z\"></path></svg>') !important;\n}\n.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"-\"]::before {\n  content: ' ';\n  position: absolute;\n  padding: 0 0.2em;\n  margin-left: 0.4em;\n  border-radius: var(--radius-xs);\n  background-color: var(--checkbox-color-6);\n  z-index: -1;\n}\n\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"<\"],\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\">\"],\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"!\"],\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"?\"],\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"+\"],\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"-\"] {\n  filter: invert(0) !important;\n}\n\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"<\"]::before,\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\">\"]::before,\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"!\"]::before,\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"?\"]::before,\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"+\"]::before,\n.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=\"-\"]::before {\n  filter: invert(0) opacity(0.5) !important;\n}\n\nspan.cm-formatting.cm-formatting-highlight.cm-strong.cm-em.cm-highlight.hmd-hidden-token {\n  padding: 0;\n}\n\n.markdown-source-view.mod-cm5 .CodeMirror-lines .view-content {\n  background-color: var(--background-transparent-black-or-white-3) !important;\n}\n\n.hide-tokens .cm-s-obsidian pre.HyperMD-hr {\n  background: unset !important;\n}\n\n.HyperMD-quote.CodeMirror-line .CodeMirror-widget + span.cm-quote::before {\n  border-left: none;\n}\n\n.vertical-tab-content {\n  padding-bottom: 4em;\n}\n\n.modal-container .modal-content textarea:not(.rename-textarea) {\n  height: 18rem !important;\n}\n\nbody.setting-default-frosted-glass .suggestion-container\n{\n  background-color: var(--bg-color-settings-4);\n  backdrop-filter: blur(3px);\n}\nbody.setting-style-traditional .suggestion-container\n{\n  background-color: var(--color-base-20);\n \n}\nbody.setting-style-traditional .modal.mod-settings .vertical-tab-content-container {\n  background: var(--color-base-20);\n}\nbody.setting-style-traditional .modal.mod-settings .vertical-tab-header {\n  background: var(--color-base-00);\n}\n\nbody.setting-style-traditional .menu{\n  background-color: var(--color-base-00);\n}\n\nbody.setting-style-traditional  .prompt\n{\n  background: var(--color-base-00);\n}\n/* ================================== */\n/* ============ QuickAdd ============ */\n/* ================================== */\n.quickAddModal .modal {\n  max-height: 90% !important;\n}\n\n.modal-container.quickAddModal .modal-content {\n  overflow: initial !important;\n  margin-top: 5px !important;\n}\n\n/* ================================== */\n/* ========= Style Settings ========= */\n/* ================================== */\n.style-settings-heading {\n  border-bottom: none !important;\n}\n \n.style-settings-heading[data-level=\"1\"] + .style-settings-container\n{\n  padding-left: 1em;\n}\nbody:not(.is-mobile) .style-settings-heading[data-level=\"2\"] + .style-settings-container\n{\n  padding-left: 2em;\n}\nbody:not(.is-mobile) .style-settings-heading[data-level] + .style-settings-container\n{\n  padding-left: 2em;\n}\nbody:not(.is-mobile) .style-settings-heading[data-level=\"3\"] + .style-settings-container\n{\n  padding-left: 3em;\n}\nbody:not(.is-mobile) .style-settings-heading[data-level=\"4\"] + .style-settings-container\n{\n  padding-left: 4em;\n}\nbody:not(.is-mobile) .style-settings-heading[data-level=\"5\"] + .style-settings-container\n{\n  padding-left: 5em;\n}\nbody:not(.is-mobile) .style-settings-heading[data-level=\"5\"] + .style-settings-container\n{\n  padding-left: 5em;\n}\n.setting-item-description,\n.setting-item-info {\n  word-wrap: break-word;\n  word-break: break-word;\n}\n\n.setting-item.setting-item-heading.style-settings-heading[data-level=\"1\"] .setting-item-name {\n  color: var(--h2-color) !important;\n}\n.setting-item.setting-item-heading.style-settings-heading[data-level=\"2\"] .setting-item-name {\n  color: var(--h3-color)!important;\n}\n.setting-item.setting-item-heading.style-settings-heading[data-level=\"3\"] .setting-item-name {\n  color: var(--h4-color) !important;\n}\n.setting-item.setting-item-heading.style-settings-heading[data-level=\"4\"] .setting-item-name {\n  color: var(--h5-color) !important;\n}\n.style-settings-collapse-indicator {\n  color: var(--theme-color) !important;\n}\n\n.setting-item.setting-item-heading.style-settings-heading.is-collapsed .style-settings-collapse-indicator {\n  opacity: 0.4;\n}\n\n.style-settings-container {\n  padding-bottom: 5px !important;\n}\n\n.style-settings-container .setting-item-control select {\n  max-width: 330px;\n}\n\n.workspace-leaf-content .style-settings-container .setting-item:first-child {\n  margin-top: 20px;\n}\n\ndiv.style-settings-heading[data-level=\"0\"] {\n  position: relative;\n  padding: 8px;\n  margin-bottom: 0;\n  background-color: var(--background-primary);\n  border-radius: var(--radius-l);\n  box-shadow: 0 3px 5px var(--background-modifier-box-shadow);\n}\n\n.is-mobile div.style-settings-heading[data-level=\"0\"] {\n  padding: 4px;\n}\n\ndiv.style-settings-heading[data-level=\"0\"] + .style-settings-container {\n  padding: 20px 30px;\n  margin-top: -10px;\n  margin-bottom: 0;\n  margin-left: 0;\n  border: 0px;\n  border-radius: var(--radius-l);\n}\n\ndiv.style-settings-heading[data-level=\"0\"] + .style-settings-container .style-settings-collapse-indicator {\n  margin-left: 0;\n}\n\n\ndiv.style-settings-heading[data-level=\"0\"].is-collapsed {\n  margin-bottom: 15px;\n  border-radius: var(--radius-l);\n  box-shadow: 0 3px 5px var( --background-modifier-box-shadow);\n}\n\ndiv.style-settings-heading[data-level=\"0\"].is-collapsed {\n  background-color: var(--background-primary-alt);\n}\n\n\ndiv.style-settings-heading[data-level=\"1\"] .setting-item-description {\n  padding-left: 2em;\n}\n\ndiv.style-settings-heading:not([data-level=\"0\"]):not([data-level=\"1\"]) .setting-item-description {\n  padding-left: 2em;\n}\n\ndiv.style-settings-heading {\n  padding: 8px 0;\n  margin-bottom: 5px;\n}\n\ndiv.style-settings-container[data-level=\"0\"] {\n  margin-left: 4px;\n}\n\ndiv.style-settings-container[data-level] {\n  padding-bottom: 0;\n  margin-left: 0.5em;\n}\n\n.setting-item.setting-item-heading.style-settings-heading .setting-item-name {\n  width: fit-content;\n  padding: 0 8px;\n  border-radius: var(--radius-l);\n}\n\n.setting-item.setting-item-heading.style-settings-heading:hover .style-settings-collapse-indicator {\n  color: var(--text-accent-hover)!important;\n}\n\n.setting-item.setting-item-heading.style-settings-heading:hover .setting-item-name {\n  color: var(--text-accent-hover)!important;\n}\n\ndiv.workspace-leaf-content[data-type=\"style-settings\"] .view-content .style-settings-container div.setting-item:not(.setting-item-heading) {\n  flex-flow: wrap;\n}\n\ndiv.workspace-leaf-content[data-type=\"style-settings\"] .setting-item-description {\n  font-size:12px;\n}\n\ndiv.workspace-leaf-content[data-type=\"style-settings\"]  div.setting-item,\ndiv.workspace-leaf-content[data-type=\"style-settings\"]  div.style-settings-heading {\n  border-bottom: unset;\n  border-top: 1px inset #ffffff24;\n}\n\n\n/*\n.theme-light div.setting-item {\n  border-bottom: 1px dotted #e1e1e199;\n  border-top: 1.5px solid  #cfcfcf42;\n\n}\n\n\n.theme-dark div.setting-item {\n  border-bottom: 1px solid var(--background-modifier-border);\n  box-shadow: inset 0 -1px 0 rgb(0 0 0 / 45%),\n                        inset 0 -2px 0 rgb(0 0 0 / 10%)\n}\n*/\n\n\ndiv.workspace-leaf-content[data-type=\"style-settings\"] div.style-settings-heading[data-id=\"topaz-community\"] {\n  margin-top: 10px;\n  margin-bottom: 0;\n  pointer-events: none;\n  cursor: text;\n  border-top: 2px solid var(--background-modifier-border);\n  pointer-events: none;\n}\n\n.style-settings-heading[data-id=\"topaz-community\"] .setting-item-control,\n.style-settings-heading[data-id=\"topaz-community\"] .style-settings-collapse-indicator {\n  display: none;\n}\n\n.style-settings-heading[data-id=\"topaz-community\"] .setting-item-name::before {\n  display: inline-block;\n  width: 20px;\n  height: fit-content;\n  padding-right: 8px;\n  font-family: \"Segoe UI Emoji\", \"Apple Color Emoji\", sans-serif;\n  font-weight: initial;\n  color: unset;\n  content: \"❤️\";\n}\n\n.setting-item.style-settings-heading[data-id=\"topaz-github\"] {\n  cursor: default;\n}\n\n.setting-item.style-settings-heading[data-id=\"topaz-github\"]:hover div.setting-item-name {\n  color: var(--text-normal);\n}\n\n.setting-item.style-settings-heading[data-id=\"topaz-github\"] .setting-item-name::before {\n  display: inline-block;\n  width: 20px;\n  height: fit-content;\n  padding-right: 8px;\n  font-family: \"Segoe UI Emoji\", \"Apple Color Emoji\", sans-serif;\n  font-weight: initial;\n  color: unset;\n  content: \"⭐\";\n}\n\n.setting-item.style-settings-heading[data-id=\"topaz-github\"] .setting-item-description {\n  color: var(--interactive-accent);\n  cursor: text;\n  user-select: all;\n}\n\n.setting-item.style-settings-heading[data-id=\"topaz-example-github\"] {\n  cursor: default;\n}\n\n.setting-item.style-settings-heading[data-id=\"topaz-example-github\"]:hover div.setting-item-name {\n  color: var(--text-normal);\n}\n\n.setting-item.style-settings-heading[data-id=\"topaz-example-github\"] .setting-item-name::before {\n  display: inline-block;\n  width: 20px;\n  height: fit-content;\n  padding-right: 8px;\n  font-family: \"Segoe UI Emoji\", \"Apple Color Emoji\", sans-serif;\n  font-weight: initial;\n  color: unset;\n  content: \"⚠️\";\n}\n\n.setting-item.style-settings-heading[data-id=\"topaz-example-github\"] .setting-item-description {\n  color: var(--interactive-accent);\n  cursor: text;\n  user-select: all;\n}\n\n.style-settings-container .setting-item:is([data-id*=\"interactive-accent\"], [data-id*=\"text-accent\"]) .setting-item-control::before {\n  width: 1.5em;\n  height: 1.5em;\n  margin-right: 8px;\n  content: \" \";\n  border: 1px solid var(--background-modifier-border);\n  border-radius: var(--radius-l);\n}\n\n\n.style-settings-container .setting-item:is([data-id^=\"interactive-accent\"]) .setting-item-control::before {\n  background-color: var(--interactive-accent);\n}\n.style-settings-container .setting-item:is([data-id^=\"text-accent\"]) .setting-item-control::before {\n  background-color: var(--text-accent);\n}\n/**style setting logic  ******/\n\n\nbody:not(.color-scheme-options-lillimon-topaz) .setting-item[data-id=\"color-magic\"],\nbody:not(.background-settings-workplace-background-image) .setting-item[data-id=\"background-settings-workplace-background-image\"] ~ * {\n  display: none;\n}\nbody:not(.background-image-settings-switch) .setting-item[data-id=\"bg-markdown-page-opacity-cp\"],\nbody:not(.background-image-settings-switch) .setting-item[data-id=\"toggle-nonoverlapping-bg\"],\nbody:not(.background-image-settings-switch) .setting-item[data-id=\"background-image-settings-markdown-page-options\"],\nbody:not(.background-image-settings-switch) .setting-item[data-id=\"background-image-settings-markdown-page-random\"],\nbody:not(.background-image-settings-switch) .setting-item[data-id=\"background-image-settings-markdown-page-random-options\"] {\n  display: none;\n}\n\nbody:not(.background-notebook-liked-switch) .setting-item[data-id=\"background-notebook-liked-switch\"] ~ * {\n  display: none;\n}\n\nbody:not([class*=\"background-settings-workplace-wave\"]) .setting-item[data-id=\"background-waves-color\"],\nbody:not(.background-settings-workplace-theme-light-custom-option) .setting-item[data-id=\"background-settings-workplace-theme-light-custom\"],\nbody:not(.background-settings-workplace-theme-dark-custom-option) .setting-item[data-id=\"background-settings-workplace-theme-dark-custom\"],\nbody:not(.background-settings-workplace-random-dark) .setting-item[data-id=\"background-settings-workplace-random\"],\nbody:not(.background-settings-workplace-random-light) .setting-item[data-id=\"background-settings-workplace-random\"],\nbody:not(.custom-thino-background) .setting-item[data-id=\"thino-background-dark-custom\"],\nbody:not(.custom-thino-background) .setting-item[data-id=\"thino-background-light-custom\"],\nbody:not(.custom-thino-share-background) .setting-item[data-id=\"share-thino-background-dark-custom\"],\nbody:not(.custom-thino-share-background) .setting-item[data-id=\"share-thino-background-light-custom\"],\nbody:not(.thino-background-color) .setting-item[data-id=\"thino-modern-primary\"]\n {\n  display: none;\n}\nbody:not(:is(.share-thino-with-workspace-background,.share-thino-with-thino-background,.custom-thino-share-background)) .setting-item[data-id=\"blur-thino-share-frosted-glass\"]\n{\n  display: none;\n}\n\n.setting-item:is([data-id=\"background-image-settings-switch\"],[data-id=\"background-notebook-liked-switch\"],[data-id=\"background-settings-workplace-background-image\"],[data-id=\"background-image-settings-command-palette-switch\"]) .setting-item-name {\n  font-weight: bold;\n}\nbody:not(.background-image-settings-markdown-page-custom) .setting-item[data-id=\"custom-markdown-page-background-color\"],\nbody:not(.background-image-settings-markdown-page-custom) .setting-item[data-id=\"background-markdown-page-theme-light-custom\"],\nbody:not(.background-image-settings-markdown-page-custom) .setting-item[data-id=\"background-markdown-page-theme-dark-custom\"]  {\n  display: none;\n}\n\n\nbody:not(.background-image-settings-markdown-page-random) .setting-item[data-id=\"background-image-settings-markdown-page-random-options\"] {\n  display: none;\n}\n.setting-item[data-id=\"notebook-liked-background-settings\"] + .style-settings-container .setting-item:not(:first-child) {\n  /* display: none; */\n}\nbody:is(.notebook-liked-markdown-page-grid-notebook-1,.notebook-liked-markdown-page-grid-notebook-2,\n.notebook-liked-markdown-page-dotted-notebook-1,.notebook-liked-markdown-page-dotted-notebook-2) .setting-item[data-id=\"bg-color-notebook\"],\nbody.notebook-liked-markdown-page-grid-notebook-1 .setting-item[data-id=\"grid-notebook-line-color-1\"],\nbody.notebook-liked-markdown-page-grid-notebook-2 .setting-item[data-id=\"grid-notebook-line-color-2\"],\nbody:is(.notebook-liked-markdown-page-dotted-notebook-1,.notebook-liked-markdown-page-dotted-notebook-2) .setting-item[data-id=\"dotted-notebook-dot-color\"] {\n  display: block !important;\n}\nbody:not(.background-image-settings-command-palette-switch) .setting-item[data-id=\"background-image-settings-command-palette-switch\"] ~ *,\nbody:not(.background-image-settings-command-palette-custom) .setting-item[data-id=\"background-command-palette-theme-light-custom\"],\nbody:not(.background-image-settings-command-palette-custom) .setting-item[data-id=\"background-command-palette-theme-dark-custom\"] {\n  display: none;\n}\n\nbody.background-image-settings-command-palette-same-as-workplace .setting-item[data-id=\"background-image-settings-command-palette-custom\"] {\n  display: none;\n}\nbody:not(.toggle-bg-panel-page) .setting-item[data-id=\"toggle-bg-panel-page\"] ~ *,\nbody:not(.panel-page-bg-theme-light-custom) .setting-item[data-id=\"background-panel-page-theme-light-custom\"],\nbody:not(.panel-page-bg-theme-dark-custom) .setting-item[data-id=\"background-panel-page-theme-dark-custom\"] {\n  display: none;\n}\n\nbody:not(.fancy-hr-icon) .setting-item[data-id=\"fancy-hr-folder-icon\"],\nbody:not(.fancy-hr-no-icon) .setting-item[data-id=\"fancy-hr-folder-no-icon\"],\nbody:not(.fancy-hr-number) .setting-item[data-id=\"fancy-hr-folder-with-number\"] {\n  display: none;\n}\n\nbody:not(.bt-default-unordered-list) .setting-item[data-id=\"options-bt-default\"],\nbody:not(.custom-unordered-list) .setting-item[data-id=\"options-for-custom\"] {\n  display: none;\n}\n\nbody:not(.custom-ordered-list) .setting-item[data-id^=\"list-ol-marker-\"] {\n  display: none;\n}\nbody.folder-style-change-options-colorful-default .setting-item[data-id=\"folder-style-change-options-colorful-subfolder\"] {\n  display: none;\n}\n\nbody:not(.folder-colorful-custom) .setting-item[data-id=\"folder-colorful-custom-color\"] {\n  display: none;\n}\n\nbody:not(.loading-custom-text) .setting-item[data-id=\"loading-custom-text-folder\"],\nbody:not(.loading-animation-custom) .setting-item[data-id=\"loading-animation-custom-folder\"] {\n  display: none;\n}\n\nbody:not(.colorful-tag-bt) .setting-item[data-id=\"customised-colorful-tag\"],\nbody:not(.tag-pill-outlined) .setting-item[data-id=\"outlined-style\"] {\n  display: none;\n}\n\n\nbody.is-hidden-frameless .setting-item:is([data-id=\"simple-titlebar\"],[data-id=\"custom-titlebar-bg\"],[data-id=\"titlebar-blur-depth\"],[data-id=\"titlebar-brightness\"],[data-id=\"hide-titlebar-text\"]) {\n  display: none;\n}\n\nbody:not(.is-hidden-frameless) .setting-item:is([data-id=\"hide-titlebar-close-btn\"]) {\n  display: none;\n}\n\nbody:not(.color-scheme-options-simplicity-topaz) .setting-item:is([data-id=\"disable-auto-hide-header\"]) {\n  display: none;\n}\n\nbody:not(.bt-colorful-titlebar) .setting-item[data-id=\"background-titlebar-inner\"]  {\n  display: none;\n}\n\nbody:not(.folder-icons) .setting-item[data-id=\"remove-first-folder-icon\"]  {\n  display: none;\n}\n\n/********/\n/* ================================== */\n/* ==== advanced-tables-toolbar ===== */\n/* ================================== */\n.workspace-leaf-content[data-type=\"advanced-tables-toolbar\"] .nav-buttons-container>.nav-action-button {\n  padding: 5px;\n}\n\n.workspace-leaf-content[data-type=\"advanced-tables-toolbar\"] .nav-buttons-container>.nav-action-button svg {\n  height: 20px;\n  width: 20px;\n}\n\n/* ================================== */\n/* =========== RTL support ========= */\n/* ================================== */\n:is(.markdown-preview-view,.markdown-rendered).rtl blockquote {\n  border-right-width: 7px;\n  border-left-width: 0;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).rtl ul >li:not(.task-list-item) {\n  border-left: none;\n  border-right: 0.125em solid var(--list-ul-block-color);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).rtl  ol:not(.contains-task-list)>li:not(.task-list-item) {\n  border-right: 0.125em solid var(--list-ol-block-color);\n  border-left: none;\n}\n\n.markdown-preview-view.rtl:not(.kanban) ul>li:not(.task-list-item),\n.markdown-preview-view.rtl ol:not(.contains-task-list)>li:not(.task-list-item) {\n  padding-right: 0.25em;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).rtl h1:hover::before {\n  margin-right: -24px;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).rtl h2:hover::before,\n:is(.markdown-preview-view,.markdown-rendered).rtl h3:hover::before,\n:is(.markdown-preview-view,.markdown-rendered).rtl h4:hover::before,\n:is(.markdown-preview-view,.markdown-rendered).rtl h5:hover::before,\n:is(.markdown-preview-view,.markdown-rendered).rtl h6:hover::before {\n  margin-right: -25px;\n}\n\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl .heading-collapse-indicator.collapse-indicator  {\n  position: absolute;\n  right: -33px;\n  padding-left: 0;\n  transition: transform 20ms linear 0s;\n}\n\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl h1 .heading-collapse-indicator.collapse-indicator ,\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl h2 .heading-collapse-indicator.collapse-indicator  {\n  position: absolute;\n  right: -32px;\n  padding-left: 0;\n  margin-top: 11px;\n  transition: transform 20ms linear 0s;\n}\n\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div.is-collapsed h1 .heading-collapse-indicator.collapse-indicator ,\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div.is-collapsed h2 .heading-collapse-indicator.collapse-indicator  {\n  transform: translateX(-9px) translateY(18px) rotate(90deg);\n  opacity: 0.5;\n}\n\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div.is-collapsed .heading-collapse-indicator.collapse-indicator  {\n  transform: translateX(-2px) translateY(25px) rotate(90deg);\n  opacity: 0.5;\n}\n\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl .list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  right: 0;\n}\n\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div>ul>li>.list-collapse-indicator.collapse-indicator.collapse-icon::before,\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div>ol>li>.list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  margin-right: 48px;\n}\n\nbody:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl li.is-collapsed div.list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  transform: rotate(90deg);\n}\n\n.markdown-source-view.mod-cm6.is-live-preview.is-rtl .HyperMD-quote {\n  border: 0 solid var(--theme-color);\n  border-right-width: 5px;\n}\n\n.CodeMirror-code.CodeMirror-rtl span.cm-quote::before {\n  content: \"\";\n  border-right: 7px solid var(--theme-color);\n  border-radius: 0; /*5px 0 0 5px;*/\n  height: 100%;\n  border-left: none !important;\n  margin-right: -11px;\n  position: absolute;\n}\n\n.markdown-source-view.mod-cm6.is-rtl .HyperMD-list-line:not([class*=\"quote\"]) .cm-indent::before {\n  margin-right: 0.3rem;\n}\n\n.CodeMirror-code.CodeMirror-rtl span.cm-formatting-quote + *::before,\n.CodeMirror-code.CodeMirror-rtl span.cm-formatting-quote + span.cm-hmd-indent-in-quote + span.cm-quote:not(.cm-formatting-quote)::before,\n.CodeMirror-code.CodeMirror-rtl span.cm-inline-code + *::before,\n.CodeMirror-code.CodeMirror-rtl span.cm-highlight + *::before,\n.CodeMirror-code.CodeMirror-rtl span.cm-quote + *::before,\n.CodeMirror-code.CodeMirror-rtl span.cm-hmd-html-end + *::before {\n  border-right: none;\n}\n\n.CodeMirror-code.CodeMirror-rtl *:not(font)>em>strong,\n.CodeMirror-code.CodeMirror-rtl *:not(font)>strong>em,\n.CodeMirror-code.CodeMirror-rtl .cm-strong.cm-em {\n  padding-right: 0 !important;\n}\n\n/* ================================== */\n/* ============ CardBoard =========== */\n/* ================================== */\n.card-board input[type=\"checkbox\"] {\n  box-sizing: border-box !important;\n  border: 2px solid var(--background-modifier-border) !important;\n  width: 1.2em !important;\n  height: 1.2em !important;\n  margin: 0.2em 0.5em 0em 0;\n  filter: hue-rotate(var(--theme-color));\n}\n\n.card-board input[type=\"checkbox\"]:checked {\n  background-position: center;\n  background-size: 120%;\n  background-repeat: no-repeat;\n  background-image: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" style=\"fill: rgba(255, 255, 255, 1);transform: ;msFilter:;\"><path d=\"m10 15.586-3.293-3.293-1.414 1.414L10 18.414l9.707-9.707-1.414-1.414z\"></path></svg>');\n}\n\n.card-board input[type=\"checkbox\"]:checked {\n  border: none !important;\n}\n\n.card-board input[type=\"checkbox\"]:checked::before,\n.card-board input[type=\"checkbox\"]:hover::before {\n  display: none;\n}\n\n/* ================================== */\n/* ============ Outliner ============ */\n/* ================================== */\nbody:not(.outliner-plugin-bls).markdown-source-view.mod-cm5 .cm-hmd-list-indent {\n  position: initial !important;\n}\n\n.outliner-plugin-bls .cm-hmd-list-indent .cm-tab::before {\n  display: none;\n}\n\n.outliner-plugin-bls .cm-s-obsidian.is-live-preview .list-bullet:before {\n  display: none;\n}\n.outliner-plugin-bls .CodeMirror-line .cm-hmd-list-indent::before {\n  left: -0.2em !important;\n  right: -0.4em;\n  background-size: 1.6ch 1px !important;\n}\n.outliner-plugin-bls .cm-line .cm-hmd-list-indent::before {\n  right: -0.4em;\n  background-size: 1.45ch 1px !important;\n}\n\n\n/* ================================== */\n/* ==============Better Code Block ============= */\n/* ================================== */\npre.code-block-pre__has-linenum {\n  padding: 0;\n  min-height: unset;\n}\ndiv.code-block-wrap > pre  pre:not([closed]) + code[class*=language-] {\n  padding-bottom:  1em !important;\n}\n\n.obsidian-embedded-code-title__code-block-title > .title {\n  line-height: 29px;\n  font-weight: bold;\n  font-size: var(--callout-title-size);\n  font-family: var(--font-text);\n}\n.markdown-rendered pre.obsidian-embedded-code-title__code-block-title[closed] {\n  background-color: rgba(var(--interactive-accent-rgb), 0.1) !important;\n}\n.markdown-rendered pre.obsidian-embedded-code-title__code-block-title {\n  overflow-y: hidden;\n  background-color: transparent !important;\n}\n\n.obsidian-embedded-code-title__code-block-title:not([closed]) .langName {\n  opacity: 0.35;\n  font-size: 12px;\n}\n.obsidian-embedded-code-title__code-block-title .langName {\n  color: var(--code-language);\n}\n.obsidian-embedded-code-title__code-block-title .collapser .handle {\n  margin-top: -3px;\n}\n.obsidian-embedded-code-title__code-block-title[closed] .langName {\n  opacity: 0.75;\n  font-size: 12px;\n}\n.obsidian-embedded-code-title__code-block-title .collapser .handle {\n  opacity: 0.35;\n}\npre.code-block-pre__has-linenum::before {\n  display: none;\n}\n.code-block-linenum-wrap {\n  opacity: 0.5;\n  border-right-color:rgba(var(--mono-rgb-100), 0.5) !important;\n}\n\n.markdown-rendered .code-block-pre__has-linenum button.copy-code-button:not([style=\"right: 32pt\"]) {\n  background-image: url(\"data:image/svg+xml,%3Csvg t='1667575665955' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='5542' width='32' height='32'%3E%3Cpath d='M568.7 319.8l86.8 86.8v476.6h-466V319.8h379.2m29-70H178.9c-32.8 0-59.4 26.5-59.4 59.3v584.7c0 15.7 6.3 30.8 17.4 42 11.1 11.2 26.2 17.4 42 17.4h487.4c15.7 0 30.8-6.3 41.9-17.4 11.1-11.1 17.3-26.2 17.3-42V377.6L597.7 249.8z' fill='%2391B1D5' p-id='5543'%3E%3C/path%3E%3Cpath d='M776.7 70.8H357.9c-32.8 0-59.4 26.5-59.4 59.3v100h70v-89.3h379.2l86.8 86.8v476.6h-85.8v70h96.6c15.7 0 30.8-6.3 41.9-17.4 11.1-11.1 17.3-26.2 17.3-42V198.6L776.7 70.8z' fill='%2391B1D5' p-id='5544'%3E%3C/path%3E%3C/svg%3E\");\n}\n.code-block-pre__has-linenum button.copy-code-button:hover {\n  background-color: none;\n  box-shadow: var(--window-shadow);\n}\n/* ================================== */\n/* ============== Make.md ============= */\n/* ================================== */\nbody.mk-mark-sans #calendar-container {\n  margin: -10px -8px 0px -8px;\n}\n\n/* ================================== */\n/* ============== Memos Thino============= */\n/* ================================== */\n\nbody:not(.thino-default) div[data-type='thino_view']\n{\n  --activeline-background:transparent;\n  --thino-wrapper-border:transparent;\n  --memos-icon-hover:var(--background-modifier-border);\n \n  --memos-memo-border:transparent;\n  --memos-location-wrapper-bg: transparent;\n  --memos-bg-accent:var(--theme-color-translucent-04);\n  --thino-background-primary:var(--bg-color-settings-0-1);\n  --memos-bg-light-blue: var(--theme-color-translucent-02);\n  --memos-text-blue:var(--interactive-accent);\n}\n\nbody:is(.thino-frosted-style,.thino-frosted-style-default)  .workspace-leaf div[data-type=thino_view] .view-header,\nbody:is(.thino-frosted-style,.thino-frosted-style-default).is-focused .workspace-leaf.mod-active div[data-type=thino_view] .view-header {\n  background-color: transparent;\n}\n\nbody:is(.thino-default,.thino-frosted-style-default)  div[data-type=thino_view] #page-wrapper:not(.memos-moments-view) .memo-editor-wrapper{\n  background-color: var(--background-primary-bg-4-bt, var(--background-primary));\n}\nbody:is(.thino-default,.thino-frosted-style-default)   div[data-type=thino_view] .memolist-wrapper>.memolist-container {\n\n  background-color: transparent;\n\n}\nbody:is(.thino-default,.thino-frosted-style-default)   div[data-type=thino_view] .memo-wrapper,\nbody:is(.thino-default,.thino-frosted-style-default)    .thino-hover-popover .memo-wrapper, \nbody:is(.thino-default,.thino-frosted-style-default)  .block-language-thino .thino-embed-container .memo-wrapper {\n\n  background-color: var(--background-primary-bg-4-bt, var(--background-primary));\n\n}\ndiv[data-type=thino_view] .section-header-container, div[data-type=thino_view] .memos-header-container\n{\n  justify-content: flex-start;\n}\ndiv[data-type=thino_view] .memo-editor-wrapper>.tip-text {\npadding-left:1.5em;\n}\n.thino-editor-modal .common-editor-wrapper .common-editor-inputer {\n  border: none;\n}\nbody.custom-thino-background div[data-type='thino_view'].workspace-leaf-content\n{\n  background-image: var(--thino-background-light-custom) ;\n  --background-primary:var(--bg-color-settings-2);\n  --memos-memo-bg:var(--bg-color-settings-0-1);\n  --memos-memo-border:var(--bg-color-settings-0-1);\n  background-size: cover;\n}\nbody.custom-thino-background.theme-dark div[data-type='thino_view'].workspace-leaf-content\n{\n  background-image: var(--thino-background-dark-custom);\n  --background-primary:var(--bg-color-settings-2);\n  --memos-memo-bg:var(--bg-color-settings-0-1);\n  --memos-memo-border:var(--bg-color-settings-0-1);\n  background-size: cover;\n}\n\nbody.custom-thino-background.theme-dark div[data-type='thino_view'] #page-wrapper\n{\n \n  background: var(--bg-color-settings-2);\n}\n.workspace-tab-container:fullscreen  div[data-type='thino_view'],\n.workspace-tab-container:fullscreen .workspace-leaf-content \n{\n \n    background-color: var(--background-primary-alt);\n\n}\n \n .theme-dark div[data-type=thino_view] .usage-heat-map-wrapper   .stat-container {\n \n  background-color: #2a2a2a8a;\n  box-shadow:none;\n}\nbody:not(:is(.hider-memos-modern-banner,.memos-banner-gradient)) div[data-type=thino_view] .moments-view .moments-view-background-wrapper .moments-view-background-overlay .moments-view-user-info .moments-view-user-name\n{\n color: white;\n  font-weight: bold;\n    letter-spacing: 1px;\n}\n.theme-dark div[data-type=thino_view] .memo-editor-wrapper, \n.theme-dark .thino-editor-modal .memo-editor-wrapper {\n  border: none;\n}\n.modal.thino-editor-modal .modal-content\n{\n  background-color:var(--bg-color-settings-3);\n}\ndiv[data-type=thino_view] .moments-view .thino-moment-wrapper .thino-moment-container .thino-moment-user-name {\n  color: #66789d;\n}\ndiv[data-type=thino_view] .moments-view .moments-view-background-wrapper .moments-view-background-overlay .moments-view-user-idea {\n  font-size: 12px;\n}   \ndiv[data-type=thino_view] .memo-wrapper>.memo-top-wrapper>.memo-top-left-wrapper>.memo-type-img\n{\n  align-items: flex-end;\n}\ndiv[data-type=thino_view] .moments-view .memo-content-text p a[href^=\"#收集\"] {\n  display: block;\n  position: absolute;\n  left: 180px;\n  top: calc(100% - 31px);\n  font-size: 10px;\n  padding-top: 4px;\n  padding-bottom: 4px;\n  color: var(--tag-color);\n}\n\n \n.is-mobile  div[data-type=thino_view] .view-header:has(+.view-content>.memos-moments-view) .memos-header-container>.memos-header-search-section\n :is(.memos-review-entry-wrapper, .memos-view-switcher-wrapper,.thino-inline-filter-wrapper,.search-bar-inputer:not(:has(input:focus))),\n .is-mobile  div[data-type=thino_view] .view-header:has(+.view-content>.memos-moments-view) .memos-header-container .refresh-icon\n{\npadding: 0px ;\ncolor:var(--memos-icon-hover);\n}\n \n.is-mobile  div[data-type=thino_view] .memos-header-container>.memos-header-search-section .search-bar-inputer:has(input:focus)\n {\n  padding: 0px ;\n  color:var(--memos-text-muted);\n }\n.is-mobile div[data-type=thino_view].mobile-view .search-bar-container>.search-bar-inputer {\n  width: 110px;\n \n}\n.is-mobile  div[data-type=thino_view] .memos-header-container .refresh-icon\n{\n  color: var(--memos-text-muted);\nmargin: 0px;\n}\n.is-mobile div[data-type=thino_view].mobile-view #page-wrapper\n{\nmargin-top:0;\n}\n.is-mobile div[data-type=thino_view].mobile-view .view-content:not(:has(.show-editor.moments-view)) {\n  padding-top: var(--size-4-2);\n}\ndiv[data-type=thino_view].mobile-view .memos-sidebar-wrapper\n{\n  background: linear-gradient(to right, var(--color-base-00) 30%, var(--background-mobile-drawer-2) 100%);\n  backdrop-filter: blur(10px);\n}\ndiv[data-type=thino_view] .common-editor-inputer:has(.cm-focused) + .common-tools-wrapper >.btns-container>.confirm-btn\n{\n  background-color:var(--interactive-accent);\n}\ndiv[data-type=thino_view]  button:not(.clickable-icon):hover\n  {\n    box-shadow: none;\n\n}\ndiv[data-type=thino_view] .queries-wrapper>.create-query-btn-container>.btn\n{\n  border: 1px solid var(--memos-memo-border);\n}\nbody:not(.thino-default)  .heatmap-date-picker-wrapper>.date-picker-day-container>.date-picker-day-content>.day-item.current {\n  background-color: var(--memos-stat-day-L1-bg);\n  filter: opacity(0.8); \n}\nbody:not(.thino-default) .heatmap-date-picker-wrapper>.date-picker-day-container>.date-picker-day-content>.day-item.current .day-item-text {\n  color:var(--color-base-70);\n}\nbody:is(.thino-frosted-style) div[data-type=thino_view] .modern#page-wrapper, \nbody:is(.thino-frosted-style)     div[data-type=thino_view] .memo-wrapper, .thino-hover-popover .memo-wrapper, \nbody:is(.thino-frosted-style)   .block-language-thino .thino-embed-container .memo-wrapper,\nbody:is(.thino-frosted-style)     div[data-type=thino_view] .memo-editor-wrapper, .thino-editor-modal .memo-editor-wrapper\n{\n  --memos-memo-bg: transparent;\n  --memos-memo-bg-primary: transparent;\n}\n\n\nbody:is(.thino-background-default,.custom-thino-background)   div[data-type=thino_view] .modern#page-wrapper, \nbody:is(.thino-background-default,.custom-thino-background)     div[data-type=thino_view] .memo-wrapper, .thino-hover-popover .memo-wrapper, \nbody:is(.thino-background-default,.custom-thino-background)   .block-language-thino .thino-embed-container .memo-wrapper,\nbody:is(.thino-background-default,.custom-thino-background)    div[data-type=thino_view] .memo-editor-wrapper, .thino-editor-modal .memo-editor-wrapper\n{\n  --memos-memo-bg: var(--bg-color-settings-0-1);\n  --memos-memo-bg-primary: var(--bg-color-settings-0-1);\n\n}\nbody:is(.thino-background-default,.thino-frosted-style,.custom-thino-background,.thino-background-color)  div[data-type=thino_view] .modern#page-wrapper:is(.memos-chat-view,.memos-moments-view,.memos-list-view,.memos-table-view,.memos-calendar-view,.memos-waterfall-view) {\n \n  background-color: transparent;\n  --thino-modern-secondary:transparent;\n  --thino-modern-primary:transparent;\n}\nbody.thino-frosted-style-default  div[data-type=thino_view] .modern#page-wrapper:is(.memos-chat-view,.memos-moments-view,.memos-list-view,.memos-table-view,.memos-calendar-view,.memos-waterfall-view) \n\n  {\n    --thino-modern-primary: var(--bg-color-settings-0-1);\n    --thino-modern-secondary: transparent;\n  }\n  body.thino-frosted-style-default div[data-type=thino_view] .moments-view .thino-moment-wrapper {\n    border-radius: var(--radius-m);\n    background-color: var(--bg-color-settings-2);\n}\nbody.thino-frosted-style-default div[data-type=thino_view] .moments-view .thino-moment-wrapper:after\n{\n  display:none;\n}\nbody.thino-background-color div[data-type=thino_view].workspace-leaf-content\n{\n  --start-color: hsla(\n    var(--thino-modern-primary-h), \n    var(--thino-modern-primary-s),\n    var(--thino-modern-primary-l),\n    var(--thino-modern-primary-a) \n  );\n  --end-color: hsla(\n    calc(var(--thino-modern-primary-h) +  30),\n    calc(var(--thino-modern-primary-s) +  5%),\n    calc(var(--thino-modern-primary-l) + 13%), \n    calc(var(--thino-modern-primary-a) * 0.8)\n  );\n  background: linear-gradient(117deg, var(--start-color), var(--end-color)); \n  --background-primary:var(--bg-color-settings-2);\n  --memos-memo-bg:var(--bg-color-settings-0-1);\n  --memos-memo-border:var(--bg-color-settings-0-1);\n }\n \nbody:not(.thino-default)  div[data-type=thino_view] .menu-btns-popup {\n \n  background-color:var(--bg-color-settings-3);\n  backdrop-filter: blur(10px);\n}\nbody:not:is(.thino-background-default,.custom-thino-background,.thino-frosted-style)  div[data-type=thino_view] .memo-editor-wrapper>.memo-editor, .thino-editor-modal .memo-editor-wrapper>.memo-editor {\n \n  background: linear-gradient(to bottom, var(--background-secondary), transparent);\n\n}\n \ndiv[data-type=thino_view] .memos-chat-view .memolist-wrapper .memolist-container .chat-view  {\n  --memos-memo-bg: transparent;\n}\n\ndiv[data-type=thino_view] .memos-chat-view .memolist-wrapper .memolist-container .chat-view:is(.fluent-style,.inline-style) .thino-bubble.right .wrap>.content:has(:is(.callout,img)) {\n  border: 1px solid var(--memos-memo-border);\n}\ndiv[data-type=thino_view] .memos-chat-view .memolist-wrapper .memolist-container .chat-view:is(.fluent-style,.inline-style) .thino-bubble.right .wrap>.content:has(:is(.callout,img)):before {\ndisplay:none;\n}\nbody:not(.thino-default)  div[data-type=thino_view].mobile-view .search-bar-container>.quickly-action-wrapper>.quickly-action-container\n{\n  background-color:var(--bg-color-settings-3);\n  backdrop-filter: blur(10px);\n}\nbody:not(.thino-default)  div[data-type=thino_view] .memo-wrapper>.memo-top-wrapper>.memo-top-right-wrapper>.btns-container>.more-action-btns-wrapper>.more-action-btns-container, \nbody:not(.thino-default)  .thino-hover-popover .memo-wrapper>.memo-top-wrapper>.memo-top-right-wrapper>.btns-container>.more-action-btns-wrapper>.more-action-btns-container, \nbody:not(.thino-default)  .block-language-thino .thino-embed-container .memo-wrapper>.memo-top-wrapper>.memo-top-right-wrapper>.btns-container>.more-action-btns-wrapper>.more-action-btns-container,\nbody:not(.thino-default)  div[data-type=thino_view] .menu {\n  background-color:var(--bg-color-settings-3);\n  backdrop-filter: blur(10px);\n}\ndiv[data-type=thino_view].mobile-view .search-bar-container>.quickly-action-wrappe {\n  padding: 0px;\n  width: 275px;\n}\ndiv[data-type=thino_view].mobile-view .section-header-container>.memos-header-search-section .thino-inline-filter-container\n{\n  width: 275px;\n\n}\n\ndiv[data-type=thino_view] #cMenuToolbarModalBar .cMenuToolbarCommandItem {\n\n  backdrop-filter: unset;\n\n}\ndiv[data-type=thino_view] #cMenuToolbarModalBar .more-menu\n{\n  border:none;\n}\ndiv[data-type=thino_view] #cMenuToolbarModalBar.cMenuToolbarGlassAesthetic,\ndiv[data-type=thino_view] #cMenuToolbarModalBar.cMenuToolbarGlassAesthetic~#cMenuToolbarPopoverBar\n{\n  backdrop-filter: unset;\n}\ndiv[data-type=thino_view].mobile-view .search-bar-container {\n  width: auto;\n}\ndiv[data-type=thino_view] .search-bar-container>.search-bar-inputer{\n  \n  background-color: transparent!important;\n  padding:0;\n}\ndiv[data-type=thino_view].mobile-view .search-bar-container>.search-bar-inputer input:focus{\n background-color: var(--memos-bg-searchbar-lightgray);\n  }\ndiv[data-type=thino_view] .daily-thinos-list-wrapper .daily-thinos-view-wrapper .daily-thinos-view-container .date-card-container>.date-container-details .details-text\n{\n  font-size:18px;\n}\n \ndiv[data-type=thino_view].mobile-view .thino-inline-filter-container .btns-container\n{\n  flex-wrap: wrap;\n}\n\ndiv[data-type=thino_view].mobile-view .memo-editor-wrapper,\n .thino-editor-modal .memo-editor-wrapper\n{\n  padding:8px;\n}\n\nbody  div[data-type='thino_view'] .memo-editor-wrapper:has(.cm-focused)   {\n\n  border: 1px solid var(--color-base-30);\n}\ndiv[data-type=thino_view] .user-banner-container>.userinfo-header-container>.userinfo-container .thino-user-icon\n{\n  background-color: transparent!important;\n  box-shadow:none;\n}\n \ndiv[data-type=thino_view]:not(.mobile-view) .memos-moments-view .section-header-container.memos-header-container\n{\n  justify-content: flex-start;\n  height: 40px;\n    flex-wrap: nowrap;\n    margin-top: 0;\n    padding: 0 20px;  \n}\ndiv[data-type=thino_view] .moments-view .moments-view-background-wrapper .moments-show-editor-btn\n{\n top:20px;\n}\n\ndiv[data-type=thino_view].mobile-view .search-bar-container>.quickly-action-wrapper>.quickly-action-container,\ndiv[data-type=thino_view] .search-bar-container>.quickly-action-wrapper>.quickly-action-container,\n .thino-canvas-filter-group .search-bar-container>.quickly-action-wrapper>.quickly-action-container {\n   \n  background-color:var(--color-base-20);\n\n}\n \ndiv[data-type=thino_view] .section-header-container>.memos-header-search-section .thino-inline-filter-container\n{\n  background-color:var(--color-base-20);\n\n}\ndiv[data-type=thino_view] .modern  input:not([type=checkbox])\n{\n  border: 1px solid var(--background-modifier-border);\n}\n\ndiv[data-type=thino_view].mobile-view .modern .content-wrapper:has(.moments-view:not(.show-editor)) .section-header-container,\ndiv[data-type=thino_view] .content-wrapper:has(.moments-view:not(.show-editor)) .section-header-container {\n  /* position: absolute; */\n  z-index:1;\n  width:calc(100% - 55px);\n}\n \ndiv[data-type=thino_view] .memos-moments-view .filter-query-container {\n  z-index: 1;\n  padding: 6px 0 0 20px;\n  justify-content: flex-start;\n}\ndiv[data-type=thino_view] .memos-chat-view .filter-query-container {\n\npadding-bottom:20px;\npadding-left:0px;\n\n}\ndiv[data-type=thino_view] .moments-view .thino-moment-wrapper .thino-moment-container .thino-moment-user-content .memo-wrapper .memo-top-wrapper .btn.more-action-btn {\n  background-color:  transparent;\n}\n \n body:not(.day) div[data-type=thino_view] .memos-moments-view .filter-query-container:not(.hidden) + .memolist-wrapper {\n  margin-top: auto ;\n}\ndiv[data-type=thino_view]:not(.mobile-view) .memos-moments-view .section-header-container.memos-header-container:has(~.memo-editor-wrapper:not(.edit-ing)):has(~.filter-query-container:not(.hidden))\n{\n  opacity: 1;\n}\ndiv[data-type=thino_view] .memos-moments-view .content-wrapper:not(:has(.edit-ing)) .memolist-wrapper {\n\n  margin-top: -60px;\n  transition: all 0.2s linear;\n}\nbody.is-mobile div[data-type=thino_view] .memos-moments-view  .memolist-wrapper {\n  margin-top: 6px;\n}\nbody.is-mobile div[data-type=thino_view] .view-header:has(+.view-content>.memos-moments-view) {\n  position: absolute;\n  background: transparent;\n  border: none;\n}\nbody div[data-type=thino_view] .section-header-container>.memos-header-search-section >*\n{\n  border-color: transparent!important;\n}\nbody.is-mobile div[data-type=thino_view] .moments-view .moments-view-background-wrapper .moments-show-editor-btn {\n  top: 68px;\n}\nbody.is-mobile div[data-type=thino_view].mobile-view .search-bar-container>.search-bar-inputer input:focus\n{\n  background-color: transparent;\n}\n \n\nbody.is-mobile div[data-type=thino_view] .memos-moments-view .filter-query-container:not(.hidden)\n{\n  margin-top: 30px;\n}\n \nbody.is-mobile div[data-type=thino_view] .memos-moments-view .memos-sidebar-wrapper\n{\n  margin-top: 48px;\n  height: calc(100% - 85px);\n  \n}\nbody.is-mobile div[data-type=thino_view].mobile-view .tags-wrapper\n{\n   background-color: transparent;\n}\nbody.is-mobile div[data-type=thino_view] .memo-content-text\n{\n  padding: 0 18px 0 0;\n}\ndiv[data-type=thino_view].mobile-view .modern#page-wrapper.memos-moments-view .content-wrapper .section-header-container  .search-bar-container .search-bar-inputer\n{\nmax-width:280px;\n}\n\n.share-memo-image-dialog .memo-content-text.markdown-rendered blockquote,\ndiv[data-type=thino_view] .memo-content-text.markdown-rendered blockquote\n{\n  margin-inline-start: 0;\n  margin-inline-end: 0;\n}\ndiv[data-type=thino_view] .memolist-wrapper .memolist-container .table-view th\n{\n  min-width:auto;\n}\ndiv[data-type=thino_view] .memolist-wrapper .memolist-container .table-view th:has(.create-at-header-cell) {\n  min-width: 60px;\n}\n.thino-activation .thino-verify-component {\n \n  background:  hsla(var(--interactive-accent-hsl),0.2);\n\n}\ndiv[data-type=thino_view] .user-banner-container>.userinfo-header-container>.userinfo-container .thino-user-info>.username-container>.user-pro-badge.activated\n{\nbackground: var(--color-yellow) !important;\ncolor:#000000a3!important;\npadding: 2px 4px;\nmargin-top: -1em;\nfont-size:10px;\nline-height:10px;\n}\nbody.background-settings-workplace-background-image div[data-type=thino_view]   .menu-btns-popup,\nbody.background-settings-workplace-background-image div[data-type=thino_view] .selector-wrapper>.items-wrapper {\n \n  background-color:var(--bg-color-settings-3);\n  backdrop-filter: blur(10px);\n}\ndiv[data-type=thino_view] .usage-heat-map-wrapper>.day-tip-text-container, .block-language-thino .usage-heat-map-wrapper>.day-tip-text-container, .thino-canvas-menu .usage-heat-map-wrapper>.day-tip-text-container {\n  \n  width: auto;\n\n}\n/****thino 分享文字背景**/\n\nbody.share-thino-with-workspace-background .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background {\n \n  background-image: var(--theme-background)!important;\n  background-size: cover;\n}\nbody.theme-dark .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background {\n \n  box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;\n}\n\nbody:is(.share-thino-with-thino-background,.share-thino-with-workspace-background, .custom-thino-share-background)  .share-memo-image-dialog>.dialog-container>.dialog-content-container.clean .memo-container>.memo-background .property-image {\n  \n  display:none;\n   \n}\nbody.share-thino-with-thino-background.theme-dark .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background {\n \n  background-image: var(--thino-background-dark-custom)!important;\n  background-size: cover;\n \n}\nbody.share-thino-with-thino-background .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background {\n \n  background-image: var(--thino-background-light-custom)!important;\n  background-size: cover;\n}\n\nbody.custom-thino-share-background .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background {\n \n  background-image: var(--share-thino-background-light-custom)!important;\n  background-size: cover;\n\n}\nbody.custom-thino-share-background.theme-dark .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background {\n \n  background-image: var(--share-thino-background-dark-custom)!important;\n  background-size: cover;\n \n}\n\n.share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background>.memo-content-text,\n.share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background>.thino-user-header,\n.share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background>.watermark-container ,\n.share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background>.thino-time-footer\n {\n  background:rgba(255, 255, 255, var(--share-card-background-opacity-cp));\n \n}\n\n.share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container>.memo-background>.memo-content-text,\n.share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container>.memo-background>.thino-user-header,\n.share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container>.memo-background>.watermark-container ,\n.share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container>.memo-background>.thino-time-footer\n {\n \n  overflow: hidden;\n}\n \n.share-memo-image-dialog .memo-content-text p br {\n  display: block; \n  margin-top: 0.5em; \n  content: '\\A'; \n  white-space: pre; \n}\n\n.theme-dark .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background>.memo-content-text,\n.theme-dark .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background>.thino-user-header,\n.theme-dark .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background>.watermark-container ,\n.theme-dark .share-memo-image-dialog>.dialog-container>.dialog-content-container>.memo-container:is(.modern,.clean,.gradient)>.memo-background>.thino-time-footer\n{\n  background:rgba(24, 24, 24, var(--share-card-background-opacity-cp));\n  overflow: hidden;\n \n}\n\n.share-memo-image-dialog>.dialog-container>.dialog-content-container.gradient .memo-container\n{\n  --start-color: hsla(\n    var(--share-card-background-color-h), \n    var(--share-card-background-color-s),\n    var(--share-card-background-color-l),\n    var(--share-card-background-color-a) \n  );\n  --end-color: hsla(\n    calc(var(--share-card-background-color-h) -  30),\n    calc(var(--share-card-background-color-s) +  10%),\n    calc(var(--share-card-background-color-l) + 20%),\n    0.8\n  );\n  background: linear-gradient(117deg, var(--start-color,#ffc3a0), var(--end-color,#ffafbd)); \n\n }\n\n\n \n/**********thino 加滚动条***/\nbody.memos-scroll div[data-type=thino_view] .memolist-wrapper .memolist-container .masonry-memolist {\n  max-height: 660px;\n  overflow: auto;\n}\n \n/**********动态海报渐变显示***/\nbody.memos-banner-gradient div[data-type=thino_view] .moments-view .moments-view-background-wrapper .moments-view-background {\n    mask-image: linear-gradient(to bottom,black 50%,transparent);\n    -webkit-mask-image: linear-gradient(to bottom,black 50%,transparent);\n}\n/**********隐藏头部信息***/\n\n/* thino 隐藏头部信息 */\nbody.memos-hide-header \ndiv[data-type=\"thino_view\"]\n    .view-header\n    :is(.view-header-nav-buttons, .view-header-title-container) {\n    display: none;\n}\n\nbody.memos-hide-header  div[data-type=\"thino_view\"] .view-header {\n    position: absolute;\n    right: 0;\n    background-color: transparent !important;\n    top: 12px;\n    transition: all 0.1s linear;\n    transform: translateY(-15px);\n}\n\nbody.memos-hide-header  div[data-type=\"thino_view\"] .view-actions {\n    position: relative;\n}\n\nbody.memos-hide-header  div[data-type=\"thino_view\"]  .view-header:not(:hover) {\n    transform: translateY(calc(-1 * var(--header-height)));\n    transition: all 0.6s linear;\n}\n\ndiv[data-type=thino_view] .moments-view .moments-view-background-wrapper .moments-view-background-overlay .moments-view-user-info .moments-view-user-icon,\ndiv[data-type=thino_view] .moments-view .thino-moment-wrapper .thino-moment-icon \n{\n  background-color: transparent;\n}\n \ndiv[data-type=thino_view] .memos-moments-view .search-bar-container>.quickly-action-wrapper, .thino-canvas-filter-group .search-bar-container>.quickly-action-wrapper {\n  top: 38px;\n  left: 220px;\n  right:0;\n}\n.is-mobile div[data-type=thino_view].tiny-view .section-header-container>.memos-header-search-section .memos-view-switcher-wrapper, \ndiv[data-type=thino_view] .memos-header-container>.memos-header-search-section .memos-view-switcher-wrapper {\n  border-color: transparent;\n}\n/********moden 动态视图模式***/\nbody.hider-memos-modern-banner div[data-type=thino_view]:not(.mobile-view) .memos-moments-view.modern .content-wrapper:has(.moments-view:not(.show-editor)) .section-header-container {\n  border-bottom: 1px solid var(--border-color);\n  padding-bottom: 8px;\n  margin-top: 9px;\n}\nbody.hider-memos-modern-banner div[data-type=thino_view] .memos-moments-view.modern .moments-show-editor-btn {\n  top: 22px  ;\n  right: 0px;\n}\nbody.hider-memos-modern-banner div[data-type=thino_view] .moments-view .moments-view-background-wrapper\n{\n  position:unset;\n}\nbody.hider-memos-modern-banner div[data-type=thino_view] .memos-moments-view.modern .search-bar-inputer {\n  width: 90%;\n}\n\nbody.hider-memos-modern-banner div[data-type=thino_view] .memos-moments-view.modern .search-bar-container>.quickly-action-wrapper {\n  right: 80px;\n}\nbody.hider-memos-modern-banner div[data-type=thino_view] .memos-moments-view.modern .moments-view .moments-view-background-wrapper .moments-view-background {\n  display: none;\n}\nbody.hider-memos-modern-banner div[data-type=thino_view] .memos-moments-view.modern .moments-view .moments-view-background-wrapper .moments-view-background-overlay {\n  margin-top: -20px;\n}\nbody.hider-memos-modern-banner  div[data-type=thino_view] .view-header:has(+.view-content>.memos-moments-view.modern) {\n  display: none;\n}\nbody.hider-memos-modern-banner div[data-type=thino_view] .memos-moments-view.modern .moments-view .moments-view-background-wrapper .moments-view-background-overlay .moments-view-user-info .moments-view-user-icon\n{\n  width: 40px;\n  height: 40px;\n  margin-top: -12px;;\n}\n body.background-settings-workplace-background-image:is(.custom-thino-background,.thino-background-color) div[data-type='thino_view'] .view-content,\n body.background-settings-workplace-background-image:is(.custom-thino-background,.thino-background-color) div[data-type='thino_view'] .view-header  \n {\n  background: var(--bg-color-settings-0-1) ;\n }\n body.theme-dark.background-settings-workplace-background-image:is(.custom-thino-background,.thino-background-color) div[data-type='thino_view'] .view-content,\n body.theme-dark.background-settings-workplace-background-image:is(.custom-thino-background,.thino-background-color) div[data-type='thino_view'] .view-header  \n {\n  background: var(--background-primary) ;\n }\n body.thino-frosted-style-default:not(.is-mobile) div[data-type='thino_view']:not(.mobile-view) .view-content ,\n  body.thino-frosted-style:not(.is-mobile) div[data-type='thino_view']:not(.mobile-view) .view-content  {\n  background: var(--bg-color-settings-2) ;\n  backdrop-filter: blur(20px);\n  width: 95% ;\n  height: 95% ;\n  margin: auto;\n  box-shadow: var( --window-shadow2);\n  border-radius:var(--radius-l);\n}\n \nbody.thino-frosted-style div[data-type=thino_view] .memo-editor-wrapper,\nbody.thino-frosted-style div[data-type=thino_view] .memo-wrapper,\nbody.thino-frosted-style:not(.is-mobile) div[data-type='thino_view']:not(.mobile-view) .view-content .status-text-container.sidebar .status-sidebar-wrapper .status-text\n{\n  --memos-bg-lightgray: transparent;\n  --memos-memo-border:transparent;\n  --memos-memo-bg:transparent;\n \n}\nbody:is(.thino-frosted-style,.custom-thino-background,.thino-background-color)  div[data-type=thino_view] #page-wrapper:is(.memos-chat-view,.memos-moments-view,.memos-list-view,.memos-table-view,.memos-calendar-view,.memos-waterfall-view) {\n  background: var(--bg-color-settings-2) ;\n  \n}\n \n/**memos 输入框移到下方***/\nbody.memos-inputbox div[data-type='thino_view']:not(.mobile-view) #page-wrapper .memo-editor-wrapper {\n  bottom: 0;\n  margin-bottom: -145px;\n  position: absolute;\n  padding:8px;\n}\nbody.memos-inputbox div[data-type='thino_view']:not(.mobile-view) .memolist-wrapper.completed {\n  padding-bottom: 20px;\n}\nbody.memos-inputbox div[data-type='thino_view']:not(.mobile-view) #page-wrapper > .content-wrapper {\n  height: calc(100% - 150px);\n}\n\nbody.memos-inputbox div[data-type='thino_view']:not(.mobile-view) .memolist-wrapper {\n  flex-direction: column-reverse;\n}\nbody.memos-inputbox div[data-type=thino_view] .memolist-wrapper .memolist-container .list-view .masonry-memolist-grid_column {\n\n  flex-direction: column-reverse;\n}\nbody.memos-inputbox div[data-type=thino_view] .common-editor-wrapper .common-editor-inputer\n{\n  min-height: 78px;\n}\n  \n \n/* ==============Commander================ */\n\n.cmdr.titlebar-button{\n  float: left;\n  left: 100px;\n}\n\n/* =============recent files=============== */\n\n/**recent file **/\nbody.remove-file-icons .workspace-leaf-content[data-type=\"recent-files\"] .view-content {\n  padding: unset;\n}\n\nbody.remove-file-icons:not(.remove-arrow) .nav-folder.mod-root>.nav-folder-children>.nav-file {\n  padding-left: 16px;\n}\nbody.remove-file-icons.remove-arrow .nav-folder.mod-root {\n  padding-left: 4px;\n}\n.workspace-leaf-content[data-type=\"recent-files\"] .view-content {\n  padding: 3px 0 3px 3px;\n}\n.workspace-leaf-content[data-type=\"recent-files\"] .nav-folder.mod-root {\n  height: fit-content;\n}\n\n/**end recent file **/\n/* =============Db folder=============== */\n\n/**db folder*/\n.database-plugin__cell_size_normal div.dataview-error-box {\n  min-height:auto;\n}\n.database-plugin__cell_size_normal .database-plugin__tr .data-input {\n  padding: 0;\n  flex: 0;\n  font-size: 0.9em;\n}\n.database-plugin__cell_size_normal .database-plugin__tr .data-input .markdown-preview-view {\n  padding:0px;\n\n}\n.database-plugin__cell_size_normal .database-plugin__tr .database-plugin__td .database-plugin__md_cell {\n  padding: 0;\n}\n.database-plugin__cell_size_normal .data-input > *\n{\n  align-items: center;\n}\n.database-plugin__cell_size_normal .data-input > div\n{\n  display: flex;;\n  align-items: center;\n}\n\n.data-input.database-plugin__calendar {\n  flex: 0;\n  cursor: pointer;\n}\n\ndiv.react-datepicker-wrapper {\n  flex: 0;\n}\n.data-input.text-align-right {\n  flex: 0;\n}\n.database-plugin__td :is(.cell-padding, .data-input):empty::before {\n  content: \"✏️\";\n  text-align: center;\n  color: hsla(var(--interactive-accent-hsl),0.8);\n  pointer-events: none;\n}\n.database-plugin__markdown-preview-view {\n  padding: 0;\n}\n.database-plugin__markdown-preview-view p{\n  margin-block-start: 0;\n  margin-block-end: 0;\n}\n.database-plugin__tr .database-plugin__td {\n  background-color: transparent;\n}\n.database-plugin__tr .database-plugin__td .data-input {\n  background-color: transparent;\n}\n.database-plugin__table .database-plugin__tr:nth-child(odd) {\n  background-color: var(--table-background-color-odd);\n}\n\n.database-plugin__td input[type=\"checkbox\"] {\n  border: 1px dashed currentColor;\n}\n.database-plugin__td  input[type=\"checkbox\"]:checked {\n  border: none;\n}\n.database-plugin__td .database-plugin__checkbox input[type=\"checkbox\"]:checked::before {\n  transform: scale(0);\n}\n\n\n/* =============folder tree===================== */\n\n.oz-folders-tree-wrapper .oz-folder-contents {\n  border-left: 1px solid var(--background-modifier-border);\n}\n.oz-folders-tree-wrapper .file-tree-header-fixed {\n  background-color: transparent;\n}\nbody.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer .file-tree-plugin-view .oz-nav-action-button {\n  margin-left: 20px!important;\n}\n.file-tree-plugin-view .oz-flex-container {\n margin-top: -6px;\n}\n.file-tree-plugin-view  .oz-folders-tree-wrapper{\n  margin-top: -8px;\n}\n/* ================================== */\n/* ============== webpage export html ============= */\n/* ================================== */\n\n.webpage-container {\n  --banner-height:300px;\n  --banner-internal-embed-height:200px;\n  --banner-preview-embed-height:120px;\n  }\n  \nbody.color-scheme-options-simplicity-topaz.theme-dark.background-settings-workplace-background-image .webpage-container::before {\n  filter: blur(var(--blur-depth)) brightness(calc(var(--brightness-4-bg) - 0.5)) saturate(var(--saturate-4-bg));\n}\nbody.background-settings-workplace-background-image.theme-light .webpage-container::before,\nbody.background-settings-workplace-background-image.theme-dark .webpage-container::before {\n  background-image: var(--theme-background);\n  background-size: cover;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n}\nbody.background-settings-workplace-background-image.background-settings-workplace-waves2-light.theme-light .webpage-container::before,\nbody.background-settings-workplace-background-image.background-settings-workplace-waves2.theme-dark .webpage-container:before {\n  content: \"\";\n  position: fixed;\n  height: auto;\n  width: 300%;\n  top: 75%;\n  left: -25%;\n  background-image: unset;\n  -webkit-mask-image: var(--theme-background);\n  background-size: 100% 100%;\n  opacity: 0.7;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n  background-color: var(--wave2-background-color);\n}\nbody.background-settings-workplace-background-image .webpage-container::before {\n  content: '';\n  display: block;\n  position: absolute;\n  top: -37px;\n  right: -15px;\n  bottom: 0;\n  left: -15px;\n}\n  \nbody.background-settings-workplace-background-image.background-settings-workplace-waves-light.theme-light .webpage-container::before, \nbody.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark .webpage-container::before {\n  content: \"\";\n  position: fixed;\n  height: auto;\n  width: 300%;\n  transform: rotate(180deg);\n  top: 75%;\n  left: -25%;\n  background-image: unset;\n  -webkit-mask-image: var(--theme-background);\n  background-size: 100% 100%;\n  opacity: 0.7;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n  background-color: var(--wave-background-color);\n}\n  \n.document-container :is(.markdown-preview-view,.markdown-rendered),.document-container .markdown-source-view {\n  background-color: var(--background-primary)!important;\n}\n\n/* ================================== */\n/* ============== quiet-outline ============= */\n/* ================================== */\n\n/**quiet outline**/\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .view-content {\n  padding: unset;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-rail {\n  background-color: var(--background-secondary-alt);\n  box-shadow: 0 3px 5px var(--background-modifier-box-shadow);\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-rail .n-slider-rail__fill {\n  background-color: var(--background-modifier-border);\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-dots .n-slider-dot {\n  background-color: var(--background-primary);\n  border: 2px solid var(--background-modifier-border);\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-dots .n-slider-dot.n-slider-dot--active {\n  border: 2px solid var(--interactive-accent);\n}\n\n\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-button {\n  width: 32px;\n  height: 32px;\n  background-color: var(--background-secondary-alt);\n  border: 0px;\n  border-radius: var(--radius-l);\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__icon svg {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__border,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__state-border {\n  display: none;\n}\n\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node-content__text p {\n  color:var(--text-normal);\n}\n\n\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline {\n  padding-top: 10px;\n  padding-bottom: 28px;\n  margin-bottom: 5px;\n  border-radius: var(--radius-l);\n}\n\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .function-bar > :first-child {\n  margin-right: 8px;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-2 .n-tree-node-indent,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-3 .n-tree-node-indent:first-child,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent:first-child,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:first-child,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:first-child {\n  border-right: 1px solid rgb(var(--accent-1-rgb),0.5) ;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-3 .n-tree-node-indent,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent:nth-child(2),\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:nth-child(2),\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(2) {\n  border-right: 1px solid rgb(var(--accent-2-rgb),0.5) ;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:nth-child(3),\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(3) {\n  border-right: 1px solid rgb(var(--accent-3-rgb),0.5) ;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(4) {\n  border-right: 1px solid rgb(var(--accent-4-rgb),0.5) ;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent {\n  border-right: 1px solid rgb(var(--accent-5-rgb),0.5) ;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-tree.n-tree--block-line .n-tree-node:not(.n-tree-node--disabled):hover {\n  background-color: hsla(var(--interactive-accent-hsl),0.2)\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-tree.n-tree--block-line .n-tree-node:not(.n-tree-node--disabled):hover p {\n  color: var(--text-accent-hover);\n}\n\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.located p {\n  color: var(--text-accent-hover);\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selected p {\n  color: var(--text-accent-hover);\n  font-weight: 600;\n  background-color: hsla(var(--interactive-accent-hsl),0.2)\n}\n\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input {\n  height: 32px;\n  background-color: var(--background-primary);\n  border-radius: var(--radius-l);\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__border {\n  border: 0;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input:not(.n-input--disabled):hover .n-input__state-border,\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input:not(.n-input--disabled).n-input--focus .n-input__state-border {\n  border: 0;\n  box-shadow: unset;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__placeholder {\n  display: none;\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__input input {\n  caret-color: var(--interactive-accent);\n}\nbody.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__input input::placeholder {\n  color: var(--text-faint);\n}\n/* #end quiet outline */\n\n/* ============ */\n/*table-generatorn*/\n/* ============ */\n\n.table-generator {\n  animation:0.2s popup forwards;\n  border-radius:10px;\n  width: auto!important;\n  box-shadow: 2px 2px 12px rgba(0, 0, 0, 0.1);\n}\n\n.table-generator-view {\n  border: none !important;\n}\n.input-table-generator {\n  font-size: small;\n}\n.input-table-generator input {\n  outline-style: none;\n  border: 1px solid var(--background-modifier-border)!important;\n  border-radius: 3px;\n}\n.table-generator button {\n  border: 1px solid var(--background-modifier-border)!important;\n  border-radius: 3px;\n}\n\n/* ============ */\n/*image position*/\n/* ============ */\nimg[alt$=\"left\"]:not([class*=\"emoji\"]),\nimg[alt$=\"Left\"]:not([class*=\"emoji\"]),\nimg[alt$=\"LEFT\"]:not([class*=\"emoji\"]),\nimg[alt$=\"L\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"left\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"Left\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"LEFT\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"L\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"left\"] img[alt$=\"left\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"Left\"] img[alt$=\"Left\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"LEFT\"] img[alt$=\"LEFT\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"L\"] img[alt$=\"L\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"left\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"Left\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"LEFT\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"L\"]:not([class*=\"emoji\"]) {\n  margin: auto !important;\n  margin-left: 0 !important;\n  display: block;\n}\n\nimg[alt$=\"right\"]:not([class*=\"emoji\"]),\nimg[alt$=\"Right\"]:not([class*=\"emoji\"]),\nimg[alt$=\"RIGHT\"]:not([class*=\"emoji\"]),\nimg[alt$=\"R\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"right\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"Right\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"RIGHT\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"R\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"right\"] img[alt$=\"right\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"Right\"] img[alt$=\"Right\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"RIGHT\"] img[alt$=\"RIGHT\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"R\"] img[alt$=\"R\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"right\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"Right\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"RIGHT\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"R\"]:not([class*=\"emoji\"]) {\n  margin: auto !important;\n  margin-right: 0 !important;\n  display: block;\n}\n\nimg[alt$=\"centre\"]:not([class*=\"emoji\"]),\nimg[alt$=\"center\"]:not([class*=\"emoji\"]),\nimg[alt$=\"CENTRE\"]:not([class*=\"emoji\"]),\nimg[alt$=\"CENTER\"]:not([class*=\"emoji\"]),\nimg[alt$=\"Center\"]:not([class*=\"emoji\"]),\nimg[alt$=\"Centre\"]:not([class*=\"emoji\"]),\nimg[alt$=\"C\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"centre\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"center\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"Centre\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"Center\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"CENTRE\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"CENTER\"]:not([class*=\"emoji\"]),\n.markdown-source-view.mod-cm6 img[alt$=\"C\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"centre\"] img[alt$=\"right\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"center\"] img[alt$=\"Right\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"Centre\"] img[alt$=\"RIGHT\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"Center\"] img[alt$=\"R\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"CENTRE\"] img[alt$=\"Right\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"CENTER\"] img[alt$=\"RIGHT\"]:not([class*=\"emoji\"]),\n.internal-embed.image-embed.is-loaded[alt$=\"C\"] img[alt$=\"R\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"centre\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"center\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"Centre\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"Center\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"CENTRE\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"CENTER\"]:not([class*=\"emoji\"]),\nbody:not(.image-zoom) .view-content img[alt$=\"C\"]:not([class*=\"emoji\"]) {\n  margin: auto !important;\n  display: block;\n}\n\nimg[alt$=\"inline\"]:not([class*=\"emoji\"]),\nimg[alt$=\"Inline\"]:not([class*=\"emoji\"]),\nimg[alt$=\"INLINE\"]:not([class*=\"emoji\"]),\nimg[alt$=\"inl\"]:not([class*=\"emoji\"]),\nimg[alt$=\"INL\"]:not([class*=\"emoji\"]),\nimg[alt$=\"Inl\"]:not([class*=\"emoji\"]) {\n  display: inline !important;\n  padding: 0.05em 0.05em !important;\n  vertical-align: bottom;\n}\n\nimg[alt$=\"inlineL\"]:not([class*=\"emoji\"]),\nimg[alt$=\"InlineL\"]:not([class*=\"emoji\"]),\nimg[alt$=\"INLINEL\"]:not([class*=\"emoji\"]),\nimg[alt$=\"inlL\"]:not([class*=\"emoji\"]),\nimg[alt$=\"INLL\"]:not([class*=\"emoji\"]),\nimg[alt$=\"InlL\"]:not([class*=\"emoji\"]) {\n  float: left;\n  padding: 0 0.05em 0.05em 0 !important;\n}\n\nimg[alt$=\"inlineR\"]:not([class*=\"emoji\"]),\nimg[alt$=\"InlineR\"]:not([class*=\"emoji\"]),\nimg[alt$=\"INLINER\"]:not([class*=\"emoji\"]),\nimg[alt$=\"inlR\"]:not([class*=\"emoji\"]),\nimg[alt$=\"INLR\"]:not([class*=\"emoji\"]),\nimg[alt$=\"InlR\"]:not([class*=\"emoji\"]) {\n  float: right;\n  padding: 0 0 0.05em 0.05em !important;\n}\n\nimg.excalidraw-svg-right,\nimg.excalidraw-svg-Right,\nimg.excalidraw-svg-RIGHT,\nimg.excalidraw-svg-R {\n  float: right !important;\n}\n\nimg.excalidraw-svg-left,\nimg.excalidraw-svg-Left,\nimg.excalidraw-svg-LEFT,\nimg.excalidraw-svg-L {\n  float: left !important;\n}\n\nimg.excalidraw-svg-right,\nimg.excalidraw-svg-Right,\nimg.excalidraw-svg-RIGHT,\nimg.excalidraw-svg-R,\nimg.excalidraw-svg-left,\nimg.excalidraw-svg-Left,\nimg.excalidraw-svg-LEFT,\nimg.excalidraw-svg-L {\n  display: table;\n  width: 100%\n}\n\n/* img captions */\n/* modified from Discordian theme by @radekkozak */\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"center\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"centre\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Centre\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Center\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"CENTRE\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"CENTER\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"C\"] {\n  clear: both;\n  margin: 0 auto !important;\n  width: fit-content;\n  display: block;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"center\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"centre\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Centre\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Center\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"CENTRE\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"CENTER\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"C\"]::after {\n  content: attr(alt);\n  margin: 0.5rem 0;\n  display: block;\n  caption-side: bottom;\n  text-align: center;\n  font-size: 0.85rem;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"left\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"LEFT\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Left\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"L\"] {\n  position: relative;\n  float: left;\n  margin: 0.5rem 1rem 0.5rem 0 !important;\n  clear: both;\n  display: table;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"left\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"LEFT\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Left\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"L\"]::after {\n  content: attr(alt);\n  padding: 0 0.5rem;\n  margin: 0.5rem 0 1rem;\n  display: table-caption;\n  caption-side: bottom;\n  text-align: center;\n  font-size: 0.85rem;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"right\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"RIGHT\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Right\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"R\"] {\n  position: relative;\n  float: right;\n  margin: 0.5rem 0 0.5rem 1rem !important;\n  clear: both;\n  display: table;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"right\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"RIGHT\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Right\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"R\"]::after {\n  content: attr(alt);\n  padding: 0 0.5rem;\n  margin: 0.5rem 0 1rem;\n  display: table-caption;\n  caption-side: bottom;\n  text-align: center;\n  font-size: 0.85rem;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"inline\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Inline\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"INLINE\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"inl\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"INL\"],\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Inl\"] {\n  clear: both;\n  margin: 0 auto !important;\n  width: fit-content;\n  display: inline-table;\n}\n\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"inline\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Inline\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"INLINE\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"inl\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"INL\"]::after,\n:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$=\"Inl\"]::after {\n  content: attr(alt);\n  padding: 0 0.7em;\n  margin: 0.5rem 0;\n  display: block;\n  caption-side: bottom;\n  text-align: center;\n  font-size: 0.85rem;\n}\n\n/* image-grid-1 */\n/* adapted from https://github.com/Lithou/Sandbox/blob/main/.obsidian/snippets/pub-Image%20Flags.css */\nbody span[alt*=\"+grid\"] {\n  display: table-cell;\n  vertical-align: middle;\n  padding: 5px;\n}\n\n.markdown-source-view.is-live-preview .internal-embed.image-embed.is-loaded[alt*=\"+grid\"] {\n  display: inline-table;\n  vertical-align: middle;\n  max-width: 25%;\n}\n\n/* image-background */\n.markdown-preview-view img[alt^=\"background\"] {\n  width: 100%;\n  margin: 0px auto;\n  position: absolute;\n  top: 0;\n  left: 0;\n  -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,1)), to(rgba(0,0,0,0)));\n  mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0));\n  z-index: -1;\n  background-size:cover;\n}\n.is-live-preview img[alt^=\"background\"] {\n  width: 100%;\n  margin: 0px auto;\n  position: absolute;\n  top: 0;\n  left: 0;\n  -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,1)), to(rgba(0,0,0,0)));\n  mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0));\n  opacity: 0.35;\n  z-index: -1;\n}\n\n\n/*===================================================*/\n/*==================  PRESENTATION  =================*/\n/*===================================================*/\n/*\n.slides-container li {\n  line-height: 1.05em;\n}\n\n.reveal ol,\n.reveal dl,\n.reveal ul {\n  margin: 0.3em 0 0 1em;\n}\n\n.slides-container ol>li {\n  border-left: 3px solid var(--list-ol-block-color);\n}\n\n.slides-container ul>li:not(.task-list-item) {\n  border-left: 3px solid var(--list-ul-block-color);\n}\n*/\n/*===================================================*/\n/*==================   MOBILE   =====================*/\n/*===================================================*/\n/* .is-mobile :is(.markdown-preview-view,.markdown-rendered) {\n  padding: 0 18px 0 21px;\n} */\n\n/* .is-mobile :is(.markdown-preview-view,.markdown-rendered) ol:not(.contains-task-list)>li:not(.task-list-item),\n.is-mobile .markdown-preview-view:not(.kanban) ul>li:not(.task-list-item) {\n  margin-left: 0;\n} */\n\n/*collapse allows*/\nbody:not(.default-icons).is-mobile h1 .heading-collapse-indicator.collapse-indicator ,\nbody:not(.default-icons).is-mobile h2 .heading-collapse-indicator.collapse-indicator ,\nbody:not(.default-icons).is-mobile .heading-collapse-indicator.collapse-indicator  {\n  padding-left: 2px;\n}\n\nbody:not(.default-icons).is-mobile div.is-collapsed .heading-collapse-indicator.collapse-indicator  {\n  transform: translateX(10px) translateY(6px) rotate(-90deg)\n}\n\nbody:not(.default-icons).is-mobile div.is-collapsed h1 .heading-collapse-indicator.collapse-indicator ,\nbody:not(.default-icons).is-mobile div.is-collapsed h2 .heading-collapse-indicator.collapse-indicator  {\n  transform: translateX(10px) translateY(6px) rotate(-90deg)\n}\n\n/*main body*/\n.is-mobile :is(.markdown-preview-view,.markdown-rendered) :is(.markdown-preview-section,.markdown-rendered),\n.is-mobile .markdown-source-view .CodeMirror,\n.is-mobile :is(.markdown-preview-view,.markdown-rendered) .markdown-preview-sizer {\n  text-align: left;\n}\n\n/*strong*/\n.is-mobile :is(h1,h2,h3,h4,h5,h6,b),\n.is-mobile .view-header-title {\n  font-weight: bold;\n}\n\n.is-mobile .view-header-title {\n  line-height: 37px;\n  -webkit-mask-image: unset;\n  text-overflow: ellipsis;\n}\n\n.is-mobile .view-header-title-container,\n.is-mobile .view-header {\n  height: 40px;\n}\n\n.is-mobile .view-action {\n  margin: 0 5px;\n}\n\n.is-mobile span.cm-strong,\n.is-mobile :not(font)>strong,\n.is-mobile .cm-highlight.cm-strong {\n  color: var(--accent-strong);\n  font-weight: bold;\n}\n\n/*image*/\nbody:not(.image-zoom).is-mobile .markdown-reading-view img:not([class*=\"emoji\"]):active {\n  cursor: initial;\n  position: initial;\n  object-fit: initial;\n  height: initial;\n  width: initial;\n  padding: initial;\n  top: initial;\n  left: initial;\n  right: initial;\n  bottom: initial;\n  transform: initial;\n  z-index: initial;\n  background-image: initial;\n  margin: initial;\n  max-width: 100%;\n}\n\n.is-mobile .workspace-drawer-active-tab-container {\n  padding: 0;\n}\n\n\n\n/*=======================\n===custom buttons by cuman====\n========================*/\n/*便签动画效果*/\n@keyframes shake { /* 水平抖动，核心代码 */\n  10%, 90% { transform: translate3d(-1px, 0, 0); }\n  20%, 80% { transform: translate3d(+2px, 0, 0); }\n  30%, 70% { transform: translate3d(-4px, 0, 0); }\n  40%, 60% { transform: translate3d(+4px, 0, 0); }\n  50% { transform: translate3d(-4px, 0, 0); }\n}\n:is(.markdown-preview-view,.markdown-rendered) .stickies:hover{\n  animation: shake 800ms ease-in-out;\n}\n\n/*按钮颜色*/\n/*图标按钮*/\nbutton:not(.clickable-icon) {\n  box-shadow: none;\n}\nbutton:not(.clickable-icon):hover {\n  box-shadow: var(--input-shadow-hover);\n}\nbody.style-options-for-buttons-plugin button.circle_btn {\n  box-shadow: none;\n  font-size: 12px;\n  word-break: keep-all;\n  margin: 4px;\n  padding: 0px;\n  height: 50px;\n  /* border-radius:50%; */\n  position: relative;\n  border: 0;\n  display: inline-grid;\n  text-align: center;\n  justify-items: center;\n}\n/* blank 透明按钮*/\nbody.style-options-for-buttons-plugin button.blank {\n  box-shadow: none;\n  background: #fff0f000;\n  padding: 0;\n}\nbody.style-options-for-buttons-plugin button.blank:hover {\n  animation: swing_image 0.8s linear 0s 1 normal;\n  box-shadow: 0 2px 6px rgba(0, 0, 0, .3);\n}\n\nbody.style-options-for-buttons-plugin .admonition-content span>button.grad_button {\n  margin:3px;\n}\nbody.style-options-for-buttons-plugin button.grad_button {\n  margin:5PX;\n  line-height: inherit;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  min-width: 90px;\n  padding: 0 18px;\n  height: 38px;\n  font-size: 16px;\n  color: #fff;\n  text-align: center;\n  box-sizing: border-box;\n  font-weight: 500;\n  cursor: pointer;\n  border-radius: 30px;\n  transition: box-shadow .5s ease, transform .2s ease;\n  will-change: transform;\n  box-shadow: 0 2px 5px rgba(0, 0, 0, .2);\n  transform:\n    translateY(var(--ty, 0))\n    rotateX(var(--rx, 0))\n    rotateY(var(--ry, 0))\n    translateZ(var(--tz, -12px));\n}\n\nbody.style-options-for-buttons-plugin button.grad_button:hover {\n  animation: swing_image 0.8s linear 0s 1 normal;\n  box-shadow: 0 5px 15px rgba(0, 0, 0, .3);\n}\nbody.style-options-for-buttons-plugin button.g_purple {\n  background: linear-gradient(135deg, #6e8efb, #a777e3);\n}\nbody.style-options-for-buttons-plugin  button.g_blue {\n  background: linear-gradient(135deg, #3370ff, #9fb9f6);\n}\nbody.style-options-for-buttons-plugin button.g_green {\n  background: linear-gradient(135deg, #0eb347, #5be08a);\n}\nbody.style-options-for-buttons-plugin button.g_lightgreen {\n  color: #17695e;\n  background: linear-gradient(135deg, #adfdad, #dafdda);\n}\nbody.style-options-for-buttons-plugin  button.g_yellow {\n  color: #836f20;\n  background: linear-gradient(135deg, #fcd539, #ffeb9b);\n}\nbody.style-options-for-buttons-plugin.theme-dark  button.g_yellow {\n  color:  #e4cb58;\n  background: none;\n  border: 1px solid;\n}\nbody.style-options-for-buttons-plugin.theme-dark  button.g_green {\n  color:  #19bc8b;\n  background: none;\n  border: 1px solid;\n}\nbody.style-options-for-buttons-plugin.theme-dark  button.g_lightgreen {\n  color:  #8fc866;\n  background: none;\n  border: 1px solid;\n}\nbody.style-options-for-buttons-plugin.theme-dark  button.g_purple {\n  color:  #ffa260;\n  background: none;\n  border: 1px solid;\n}\nbody.style-options-for-buttons-plugin.theme-dark  button.g_blue {\n  color:  #739df9;\n  background: none;\n  border: 1px solid;\n}\nbody.style-options-for-buttons-plugin.theme-dark .grad_button:hover {\n  color: var(--text-accent)\n}\n\nbutton.tiny {\n  border-radius: 10px;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  font-size: 1em;\n  min-width:3.5em;\n  cursor: pointer;\n  margin: 0;\n  padding:3px 6px;\n  background-color: transparent;\n  color: var(--text-normal);\n  position: relative;\n  z-index: 1;\n  overflow: hidden;\n  box-shadow: rgba(0, 0, 0, 0.1) 0px 5px 35px, rgba(0, 0, 0, 0.05) 0px 5px 5px;\n}\nbutton.tiny:hover {\n  color: var(--text-on-accent);\n}\nbutton.tiny::before {\n  content: \"\";\n  position: absolute;\n  z-index: -1;\n  top: 50%;\n  left: 50%;\n  width: 1rem;\n  height: 1rem;\n  transform: translate3d(-50%,-50%,0) scale(0,0);\n  border-radius: 50%;\n  background-color: var(--interactive-accent-hover);\n  transform-origin: center;\n  transition: ease-in-out .5s;\n}\n\nbutton.tiny:hover::before {\n  transform: translate3d(-50%,-50%,0) scale(15,15);\n}\n\n\n/*buttons*/\n.is-mobile .nav-action-button {\n  margin: 0px 3px !important\n}\n\n.is-mobile .workspace-leaf-content[data-type='file-explorer'] .nav-buttons-container {\n  margin: 0 0 5px 0;\n}\n\n.is-mobile .workspace-leaf-content .view-header-icon {\n  padding: 7px 3px 5px 8px;\n}\n\n.is-mobile .nav-buttons-container>.nav-action-button svg {\n  width: 1.5em;\n  height: 1.5em;\n}\n\n/* side bar button */\n.is-mobile .side-dock-ribbon-action {\n  padding: 5px;\n}\n\n.is-mobile .cm-s-obsidian .HyperMD-codeblock {\n  color: var(--text-color-code);\n}\n\n.is-mobile :is(.markdown-preview-view,.markdown-rendered) blockquote {\n  margin-left: 3%;\n  margin-right: 3%;\n}\n\n.is-mobile code:not([class*='language-']),\n.is-mobile .cm-s-obsidian span.cm-inline-code {\n  padding: 5px 3px 2px;\n}\n\n.is-mobile .workspace>.workspace-split>.workspace-leaf:first-of-type:last-of-type .view-header {\n  background: linear-gradient(120deg, var(--color-view-header-gradient-1) 0%, var(--color-view-header-gradient-2) 90%) !important;\n}\n\n.is-mobile .cm-s-obsidian .cm-gutters {\n  background-color: transparent !important;\n}\n\n.is-mobile .cm-foldGutter .cm-gutterElement {\n  color: transparent !important;\n}\n\n.is-mobile .cm-formatting.cm-formatting-quote {\n  color: var(--red);\n}\n\nbody:not(.font-family-change-to-default).is-mobile .markdown-source-view.mod-cm6 .cm-scroller {\n  font-family: var(--font-text);\n}\n\n.is-mobile #calendar-container {\n  padding: 0 4px 2px 4px;\n  margin: unset !important;\n  line-height: unset;\n}\n\n.is-mobile #calendar-container .calendar {\n  margin-left: -8px !important;\n  width: 103%;\n}\n\n.is-mobile #calendar-container th {\n  padding: 2px 0 !important;\n}\n\n.is-mobile #calendar-container td {\n  padding: 0 !important;\n  line-height: 24px !important;\n}\n\n.is-mobile #calendar-container th {\n  padding: 10px 0;\n  border-radius: 0 !important;\n  background-color: transparent !important;\n}\n\n.is-mobile #calendar-container tr {\n  background-color: transparent;\n}\n\n.is-mobile #calendar-container .dot {\n  margin-top: 0 !important;\n}\n\n.is-mobile #calendar-container .hollow {\n  margin: 0 !important;\n}\n\n.is-mobile .workspace-drawer-header-name {\n  font-size: 25px;\n}\n\n.is-mobile .workspace-drawer-header-name-text {\n  color: var(--text-accent);\n  font-weight: 600;\n}\n\n.is-mobile .workspace-drawer-active-tab-header {\n  margin: 5px 0;\n}\n\n.is-mobile .workspace-drawer.mod-left {\n  border-right: none;\n}\n\n.is-mobile .workspace-drawer.mod-right {\n  border-left: none;\n}\n\n.is-mobile .workspace-drawer.mod-right .workspace-drawer-inner {\n  background: linear-gradient(to left, var(--background-mobile-drawer-1) 30%, var(--background-mobile-drawer-2) 100%);\n}\n\n.is-mobile .workspace-drawer.mod-left .workspace-drawer-inner {\n  background: linear-gradient(to right, var(--background-mobile-drawer-1) 30%, var(--background-mobile-drawer-2) 100%);\n}\n\n.is-mobile .workspace-drawer-ribbon {\n  background-color: var(--background-secondary-alt);\n}\n\n.is-mobile .nav-buttons-container {\n  margin-bottom: 10px;\n}\n\n.is-mobile .cm-line .cm-link.cm-strong {\n  color: var(--text-accent);\n}\n\n.is-mobile .cm-line .cm-formatting.cm-formatting-link,\n.is-mobile .cm-line .cm-string.cm-strong.cm-url {\n  color: var(--text-muted);\n}\n\n.is-mobile .search-result-file-match-replace-button {\n  color: var(--text-normal);\n}\n\n.is-mobile :is(.markdown-preview-view,.markdown-rendered).kanban-plugin__markdown-preview-view {\n  padding: 0 5px;\n}\n\n/***修复iphone 底部横条不透明的问题***\nbody.is-mobile {\n  padding-bottom: 0 !important;\n}\n/*** iphone标题栏上方遮罩***\nbody.is-mobile .safe-area-top-cover {\n  background-color: var(--background-primary);\n}\n/*** iphone标题栏上方遮罩 设置背景色后遮罩颜色跟工作区保持一致***\nbody.is-mobile.background-settings-workplace-background-image .safe-area-top-cover {\n  background-color: var(--background-primary);\n}\n*/\n\nbody.is-mobile .menu {\n  background-color: var(--color-base-20);\n}\nbody.is-mobile .menu {\n  color:var(--text-muted);\n}\nbody.is-mobile .menu-item-title {\n  padding-left: 4px;\n}\n\n/* 侧边栏文件列表字体大小\n.is-mobile .nav-file-title, .is-mobile .nav-folder-title, .is-mobile .outline, .is-mobile .tree-item-self, .is-mobile .tag-container, .is-mobile .tag-pane-tag {\n  font-size: calc(var(--font-size-folder-and-file) + 0.2em);\n  line-height: 1.5;\n  margin-bottom: 2px;\n} */\n\n/* body:not(.default-icons).is-mobile .nav-folder-collapse-indicator::before {\n  margin-left: -0.1em;\n} */\n\n/*侧边栏工作区标题*/\n.is-mobile .workspace-drawer-tab-option-item-title, .is-mobile .workspace-drawer-active-tab-title {\n  font-size: calc(var(--font-size-folder-and-file) + 0.15em);\n}\n/*小屏幕特别优化*/\n@media screen and(min-width: 480px) and (max-width: 767px) {\n  body.style-options-for-admonition-plugin .admonition-flex .admonition-content {\n    gap:24px;\n  }\n  body.style-options-for-admonition-plugin .admonition-kanban ul > li.task-list-item {\n    flex: 1 1 40%;\n  }\n  body.style-options-for-admonition-plugin .admonition-kanban ul>li:not(.task-list-item) {\n    flex: 1 1 40%;\n  }\n  .kanban ul>li:not(.task-list-item) {\n    flex: 1 1 40%;\n  }\n  .kanban ul>li.task-list-item{\n    flex: 1 1 40%;\n  }\n}\n\n@media screen and (max-width: 479px) {\n  body.style-options-for-admonition-plugin .admonition-flex .admonition-content {\n    gap:15px;\n  }\n  body.style-options-for-admonition-plugin .admonition-flex .admonition-content div {\n    flex: 1 1 60%;\n    margin: 0;\n  }\n  body.style-options-for-admonition-plugin .admonition-kanban ul > li.task-list-item {\n    flex: 1 1 60%;\n  }\n  body.style-options-for-admonition-plugin .admonition-kanban ul>li:not(.task-list-item) {\n    flex: 1 1 40%;\n  }\n\n  /*伪看板优化显示*/\n  .kanban ul>li:not(.task-list-item) {\n    flex: 1 1 auto;\n  }\n  .kanban ul>li.task-list-item {\n    flex: 1 1 auto;\n  }\n  .is-mobile .nav-folder.mod-root > .nav-folder-title {\n    display: none;\n  }\n\n  /* body:not(.default-icons).is-mobile .nav-folder-collapse-indicator::before {\n    top: 1px;\n  } */\n}\n\n/*=======================\n===  projects  by cuman====\n========================*/\n.projects-container [role='row']:hover {\n  background-color:  hsla(var(--color-accent-hsl), 0.1);\n}\n\n.projects-container [role='row'] {\n  position: relative;\n  font-size: var(--font-ui-small);\n}\n.projects-container a {\n  font-size: var(--font-ui-small);\n  text-decoration-line:none;\n}\n\n.projects-container [role='row'] [role='gridcell']{\n  background-color: transparent;\n}\n\n.projects-container [role='row'] [role='gridcell'][aria-selected=\"true\"]::before {\n  content: \" \";\n  position:absolute;\n  left: 0;\n  min-height: 30px;\n  background-color: hsla(var(--color-accent-hsl), 0.2);\n  width: 100%;\n  pointer-events: none;\n}\n\n.projects-container [role='row'] [role='gridcell'].selected {\n  box-shadow: 0 0 0 1px var(--interactive-accent);\n}\n\n.projects-container div.rowHeader {\n  backdrop-filter: blur(10px);\n}\n/*=======================\n===  dialogue by cuman====\n========================*/\nbody.dialogue-style-wechat .dialogue-plugin-block-wrapper {\n  margin-bottom: 15px;\n  position: relative;\n  display: flex;\n}\nbody.dialogue-style-wechat .dialogue-plugin-message {\n  background-color:unset;\n  padding: 1px;\n}\n\nbody.dialogue-style-wechat.is-mobile .dialogue-plugin-message {\n  max-width: calc(100% - 2em) !important;\n}\nbody.dialogue-style-wechat.is-mobile .dialogue-plugin-message .dialogue-plugin-message-content {\n  margin-left: 2em;\n  margin-right: 2em;\n}\n\nbody.dialogue-style-wechat.is-mobile .dialogue-plugin-message .dialogue-plugin-message-title {\n  min-width:unset;\n  margin-left: -1em;\n  margin-right: -1em;\n}\n\nbody.dialogue-style-wechat .dialogue-plugin-comment-wrapper .dialogue-plugin-comment {\n  margin: 7px;\n  width: fit-content;\n  max-width: 75%;\n  margin: 24px auto;\n  line-height: 1.8;\n  text-align: center;\n  opacity: var(--opacity);\n}\n\nbody.dialogue-style-wechat .dialogue-plugin-message .dialogue-plugin-message-title {\n  min-width: 6.8em;\n  font-size: 18px;\n  height: 50px;\n  background: #f1f1f1;\n  border-radius: 8px;\n  background-size: cover;\n  background-repeat: no-repeat;\n  position: absolute;\n  background-position: center;\n  overflow: hidden;\n  display: flex;\n  align-items: center;\n  justify-content: right;\n  background-color: unset;\n}\n\nbody.dialogue-style-wechat .dialogue-plugin-message-wrapper-right .dialogue-plugin-message-title {\n  justify-content:left;\n  margin-left: 2em;\n  right: 0;\n}\nbody.dialogue-style-wechat .dialogue-plugin-message-wrapper-left .dialogue-plugin-message .dialogue-plugin-message-content {\n  margin-right: 0px;\n}\nbody.dialogue-style-wechat .dialogue-plugin-message-wrapper-left .dialogue-plugin-message-content:after {\n  box-shadow: -1px 2px 0px 0 rgb(178 178 178 / 23%)\n}\n\nbody.dialogue-style-wechat .dialogue-plugin-message-wrapper-right .dialogue-plugin-message .dialogue-plugin-message-content {\n  color: black;\n  background: #98e970;\n  margin-left: 0;\n}\nbody.dialogue-style-wechat .dialogue-plugin-message-wrapper-right .dialogue-plugin-message .dialogue-plugin-message-content:after {\n  background: #98e970;\n  left: auto;\n  right: -5px;\n  border-top-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\nbody.dialogue-style-wechat .dialogue-plugin-message .dialogue-plugin-message-content {\n  background: #fff;\n  padding: 12px 18px;\n  font-size: large;\n  border-radius: 8px;\n  margin-right: 7em;\n  word-break: break-all;\n  margin-left: 7em;\n  display: inline-block;\n  position: relative;\n  line-height: normal;\n  min-height: 50px;\n  -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n}\n.dialogue-style-wechat.theme-dark .dialogue-plugin-message .dialogue-plugin-message-content {\n  background: #343434;\n}\n\nbody.dialogue-style-wechat .dialogue-plugin-message .dialogue-plugin-message-content:after {\n  content: '';\n  background: #fff;\n  width: 12px;\n  height: 12px;\n  border-bottom-left-radius: 2px;\n  top: 20px;\n  left: -6px;\n  position: absolute;\n  transform: rotate(45deg);\n}\n\n.dialogue-style-wechat.theme-dark .dialogue-plugin-message .dialogue-plugin-message-content:after {\n  background: #343434;\n}\n\n/*chatview-style-wechat*/\nbody.dialogue-style-wechat  div.chat-view-bubble {\n  background-color: transparent;\n  border: 0px;\n}\nbody.dialogue-style-wechat .chat-view-message .chat-view-header {\n  font-size: 18px;\n  height: 55px;\n  background: #f1f1f1;\n  border-radius: 8px;\n  background-size: cover;\n  background-repeat: no-repeat;\n  position: absolute;\n  background-position: center;\n  overflow: hidden;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background-color:unset;\n}\n\nbody.dialogue-style-wechat .chat-view-align-right .chat-view-header {\n  text-align: right;\n  margin-right: 0.5em;\n}\n\nbody.dialogue-style-wechat div.chat-view-align-left .chat-view-message {\n  margin-right: 0;\n\n}\nbody.dialogue-style-wechat .chat-view-align-right .chat-view-message {\n  color: black;\n  background: #98e970;\n  float: right;\n}\nbody.dialogue-style-wechat div.chat-view-align-center .chat-view-message {\n  background: #e4effc;\n  padding: 12px 18px;\n  font-size: large;\n  border-radius: 8px;\n  word-break: break-all;\n  display: inline-block;\n  position: relative;\n  line-height: normal;\n  min-height: 50px;\n  -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n}\nbody.dialogue-style-wechat div.chat-view-align-center .chat-view-message:after {\n  content: '';\n  background: #e4effc;\n  width: 12px;\n  height: 12px;\n  border-bottom-left-radius: 2px;\n  top: -5px;\n  left: 10%;\n  position: absolute;\n  transform: rotate(45deg);\n}\n\nbody.dialogue-style-wechat div.chat-view-align-left .chat-view-message:after {\n  box-shadow: -1px 2px 0px 0 rgb(178 178 178 / 23%)\n}\n\nbody.dialogue-style-wechat .chat-view-align-right .chat-view-message:after {\n  background: #98e970;\n  left: auto;\n  right: -5px;\n  border-top-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\nbody.dialogue-style-wechat .chat-view-message,\nbody.dialogue-style-wechat .chat-view-bubble> :not(:is(h1,h2,h3,h4,h5,h6,sub)) {\n  background: #fff;\n  padding: 12px 18px;\n  font-size: large;\n  border-radius: 8px;\n  word-break: break-all;\n  display: inline-block;\n  position: relative;\n  line-height: normal;\n  min-height: 50px;\n  -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n}\nbody.dialogue-style-wechat.theme-dark .chat-view-align-left .chat-view-message {\n  background: #343434;\n}\nbody.dialogue-style-wechat.theme-dark .chat-view-align-center .chat-view-message {\n  background: #3cb676;\n  color:black;\n}\nbody.dialogue-style-wechat.theme-dark .chat-view-align-center .chat-view-message:after {\n  background: #3cb676;\n}\n\nbody.dialogue-style-wechat .chat-view-bubble> :not(:is(h1,h2,h3,h4,h5,h6,sub)):after {\n  content: '';\n  background: #fff;\n  width: 12px;\n  height: 12px;\n  border-bottom-left-radius: 2px;\n  top: 20px;\n  left: -6px;\n  position: absolute;\n  transform: rotate(45deg);\n}\n\nbody.dialogue-style-wechat.theme-dark .chat-view-align-left .chat-view-message:after {\n  background: #343434;\n}\n\nbody.dialogue-style-wechat .chat-view-bubble .chat-view-subtext {\n  display:block;\n}\nbody.dialogue-style-wechat .chat-view-align-right .chat-view-subtext {\n  float: right;\n}\nbody.dialogue-style-wechat div.chat-view-align-right {\n  overflow: hidden;\n}\nbody.dialogue-style-wechat h4.chat-view-header {\n  margin-bottom: 2px;\n  margin-top: 0 !important;\n}\nbody.dialogue-style-wechat div.chat-view-align-center  h4.chat-view-header {\n  text-align: left;\n  margin-bottom: 8px;\n}\n\n/*dialogue-style-chat*/\n.dialogue-style-chat.theme-dark .dialogue-plugin-message-wrapper-left .dialogue-plugin-message {\n  color: #cccccc;\n  background: #343434;\n  box-shadow: 0px 2px 1px 0px #191818,0px 2px 1px 0px #343434;\n}\n.dialogue-style-chat.theme-dark .dialogue-plugin-message-wrapper-right .dialogue-plugin-message {\n  color: #333333;\n  background-image: -webkit-linear-gradient(left, #cccccc,#cccccc);\n}\nbody.dialogue-style-chat .dialogue-plugin-message-wrapper-left .dialogue-plugin-message {\n  font-size: 15px;\n  background: #f5f8ff;\n  letter-spacing: 1.5px;\n  color: #333;\n  border-radius:12px;\n  border-bottom-left-radius: 0px;\n  margin-left: 6px;\n  box-shadow: 0px 2px 1px 0px #f3f3f3,0px 2px 1px 0px #f3f3f3;\n  margin-right: 3em;\n  align-self: flex-end;\n}\n\nbody.dialogue-style-chat .dialogue-plugin-message-wrapper-right .dialogue-plugin-message{\n  font-size: 15px;\n  letter-spacing: 1.5px;\n  color: #333;\n  border-radius: 12px;\n  border-bottom-right-radius: 0px;\n  background-image: -webkit-linear-gradient(left, #cee4ff,#d7eaff);\n  margin-right: 6px;\n  align-self: flex-end;\n  margin-left: 3em;\n}\n\nbody.dialogue-style-chat .dialogue-plugin-message-title {\n  font-size: 16px;\n  letter-spacing: 2px;\n  text-align: center;\n  color: rgb(236, 236, 236);\n  font-weight: bold;\n}\n\n/*===================================================*/\n/*=================   Live Preview   ================*/\n/*===================================================*/\n.markdown-source-view.is-live-preview span.cm-quote::before {\n  all: initial;\n}\n\n.markdown-source-view.mod-cm6 .cm-gutters {\n  background-color: transparent !important;\n}\n\n.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote {\n  border-color: var(--theme-color);\n  background-color: var(--background-blockquote);\n}\n\n.markdown-source-view.is-live-preview .cm-formatting.cm-formatting-quote.cm-quote {\n  color: var(--red);\n}\n\n.markdown-source-view.is-live-preview span.code-block-flair {\n  color: var(--code-language);\n}\n\n.markdown-source-view .HyperMD-codeblock.HyperMD-codeblock-bg.cm-line {\n  letter-spacing: calc(var(--letter-space-code) * 0.02em);\n  line-height: var(--line-height-normal);\n}\n\n.cm-s-obsidian div.HyperMD-codeblock-end-bg {\n  border-bottom: none;\n}\n\n.markdown-source-view.cm-s-obsidian.mod-cm6 .HyperMD-codeblock {\n  font-size: var(--font-size-code);\n}\n\n/* ============ */\n/* just for fun */\n/* ============ */\n/*cursor*/\n.CodeMirror-cursor,\n.cm-s-obsidian .cm-cursor,\n.cm-s-obsidian .cm-dropCursor {\n  border-left-color: var(--cursor-color-temp);\n}\n\n.markdown-source-view.mod-cm6 .cm-content {\n  caret-color: var(--cursor-color);\n}\n\nbody.bt-colorful-titlebar .titlebar::after {\n  z-index:-1;\n  content: \"\";\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background: var(--background-titlebar-inner);\n}\n\nbody.theme-dark.bt-colorful-titlebar .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  box-shadow: none;\n  background-color: #181818;\n}\nbody.theme-light.bt-colorful-titlebar .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  box-shadow: none;\n  background-color:var(--color-base-00);\n}\nbody.theme-light.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-left,\nbody.theme-light.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-right,\nbody.theme-light.background-settings-workplace-background-image .nav-folder.mod-root>.nav-folder-title {\n  background-color: var(--background-secondary);\n}\nbody.theme-dark.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-left {\n  background-color: var(--background-secondary)\n}\nbody.theme-dark.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-right {\n  background-color: var(--background-primary-alt);\n}\n\n\n/*==== separators =====*/\nbody.asymmetric-split-left .workspace-split.mod-horizontal.mod-left-split .workspace-leaf {\n  background-color: var(--background-asymm-split-left);\n}\n\nbody.asymmetric-split-left .workspace-ribbon.mod-left {\n  border-right: 1px solid var(--background-modifier-border-asymm);\n}\n\nbody.asymmetric-split-left .titlebar,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tabs{\n  border-bottom: 1px solid var(--background-modifier-border-asymm);\n}\n\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-container-before.is-before-active .workspace-tab-header-inner,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-container-after.is-after-active .workspace-tab-header-inner,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header.is-before-active .workspace-tab-header-inner,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header.is-after-active .workspace-tab-header-inner,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header-inner,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header.is-after-active,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header.is-before-active,\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-container-before.is-before-active .workspace-tab-header-inner {\n  background-color: var(--background-asymm-split-left);\n  border-radius: 0;\n}\n\nbody.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header-container {\n  padding: 4px 0;\n}\n\n.workspace-split.mod-left-split>.workspace-leaf-resize-handle:hover,\n.workspace-split.mod-right-split>.workspace-leaf-resize-handle:hover {\n  background-color: hsla(var(--interactive-accent-hsl),0.5)\n}\n\n.is-translucent .workspace-split.mod-left-split>.workspace-leaf-resize-handle,\n.is-translucent .workspace-split.mod-right-split>.workspace-leaf-resize-handle {\n  background-color: var(--background-modifier-border);\n}\n\n.workspace-tab-container-before.is-before-active .workspace-tab-header-inner,\n.workspace-tab-container-after.is-after-active .workspace-tab-header-inner,\n.workspace-tab-header.is-before-active .workspace-tab-header-inner,\n.workspace-tab-header.is-after-active .workspace-tab-header-inner {\n  background-color: var(--background-secondary-alt);\n}\n\n.workspace-tabs {\n  background-color: var(--background-secondary);\n  padding-right: 0;\n}\n\n.is-hidden-frameless.mod-windows .titlebar-button {\n  background: var(--background-primary);\n}\n\nbody:not(.color-scheme-options-simplicity-topaz) .workspace-ribbon.mod-left:before,\nbody:not(.color-scheme-options-simplicity-topaz) .workspace-split.mod-root,\nbody:not(.color-scheme-options-simplicity-topaz) .workspace-tabs {\n  background: var(--background-secondary-alt);\n}\n\n\n.workspace-tab-header-container {\n  background: var(--background-secondary-alt);\n}\n\nbody.background-settings-workplace-background-image .workspace-tab-header-container,\nbody.background-settings-workplace-background-image:not(.is-frameless) .workspace-split.mod-root .workspace-tab-header-container,\nbody.background-settings-workplace-background-image:not(.is-frameless) .mod-root .workspace-tabs .workspace-leaf,\nbody.background-settings-workplace-background-image .workspace {\n  background: transparent;\n}\n \nbody.background-settings-workplace-background-image .workspace-ribbon.mod-left:before,\nbody.background-settings-workplace-background-image .workspace-tabs {\n  background: var(--background-secondary);\n}\n\n\nbody.toggle-divider-lines {\n  --divider-color: transparent;\n  --tab-outline-color: transparent;\n  --tab-divider-color: transparent;\n  --bt-bubble-border-color: transparent;\n}\nbody.toggle-divider-lines .workspace-ribbon,\nbody.toggle-divider-lines .workspace-split > .workspace-leaf-resize-handle,\nbody.toggle-divider-lines .view-header  {\n  border: none;\n}\n\nbody.toggle-divider-lines .workspace-split .workspace-leaf-content\n{\n  border: none!important;\n}\nbody.toggle-divider-lines .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle:not(:hover) {\n  border-bottom-color: transparent;\n}\n\nbody.toggle-divider-lines .workspace-ribbon.mod-left:before {\n  border-bottom: var(--tab-outline-width) transparent;\n}\nbody.toggle-divider-lines .workspace-tab-header-container{\n  border-bottom: var(--tab-outline-width) transparent;\n}\n\nbody.toggle-divider-lines .workspace-split.mod-root .workspace-tab-header.is-active {\n  box-shadow: var(--window-shadow);\n}\n\n/*\nbody.background-settings-workplace-background-image .titlebar,\nbody.background-settings-workplace-background-image .workspace-ribbon.mod-left {\n  background: var(--background-secondary);\n}\n*/\nbody.background-settings-workplace-background-image.theme-dark .workspace-ribbon.mod-left {\n  background: transparent;\n}\n\nbody.background-settings-workplace-background-image .workspace-tab-header::before {\n  clip-path: inset(50% 0 0 50%);\n  left: calc(var(--tab-curve) * -1.97);\n}\nbody.background-settings-workplace-background-image .workspace-tab-header::after {\n  clip-path: inset(50% 50% 0 0);\n  right: calc(var(--tab-curve) * -1.97);\n}\n\nbody.background-settings-workplace-background-image .nav-folder.mod-root>.nav-folder-title {\n  background-color: transparent;\n}\n\nbody.background-settings-workplace-background-image {\n  --tab-text-color-focused: var(--text-normal);\n  --titlebar-text-color-focused: var(--text-noraml);\n  --canvas-background: transparent;\n}\n\nbody.is-frameless.background-settings-workplace-background-image.theme-dark {\n  --divider-color: #22222288;\n}\n\n/*\nbody.is-frameless.background-settings-workplace-background-image .workspace-tab-header.is-active {\n  box-shadow: none;\n}\n*//*\nbody.is-frameless.background-settings-workplace-background-image .workspace-split.mod-root,\nbody:not(.is-focused).is-frameless.background-settings-workplace-background-image .workspace-tabs.mod-top .workspace-tab-header-container,\nbody.is-frameless.background-settings-workplace-background-image .workspace-tabs.mod-top .workspace-tab-header-container,\nbody.is-frameless.background-settings-workplace-background-image .workspace-split.mod-root .workspace-tab-header-container {\n  background-color: transparent !important;\n}\n*/\nbody:not(.is-focused):not(.is-frameless) .workspace-split.mod-root .workspace-tab-header-container {\n  background-color: transparent;\n}\n\n.workspace-tab-container-before.is-before-active,\n.workspace-tab-container-after.is-after-active,\n.workspace-tab-header.is-before-active,\n.workspace-tab-header.is-after-active,\n.workspace-split.mod-right-split .workspace-tabs .workspace-leaf,\n.workspace-split.mod-left-split .workspace-tabs .workspace-leaf {\n  background-color: var(--background-secondary);\n}\n\n\n.view-header {\n  border-top: none;\n  height: 33px;\n \n}\n\nbody.color-scheme-options-flamingo .view-header,\nbody.color-scheme-options-honey-milk-topaz .view-header,\nbody.color-scheme-options-chocolate-topaz .view-header,\nbody.color-scheme-options-autumn-topaz .view-header,\nbody.color-scheme-options-lillimon-topaz .view-header {\n  border-bottom: 1px solid transparent;\n}\n\n.workspace-split.mod-root .view-content {\n  background-color: var(--background-primary);\n}\n\n:is(.markdown-preview-view,.markdown-rendered),\n.markdown-source-view {\n  background-color: transparent;\n}\n\n\nbody.view-button-front .popover .workspace-leaf-content:is([data-mode=\"preview\"],[data-mode=\"source\"]) .view-header .view-actions>:is([aria-label^=\"该面板处于编辑视图中\"],[aria-label^=\"Current view: editing\"]),\nbody.view-button-front .popover .workspace-leaf-content:is([data-mode=\"preview\"],[data-mode=\"source\"]) .view-header .view-actions>:is([aria-label^=\"该面板处于编辑视图中\"],[aria-label^=\"Current view: editing\"]) {\n  left: 0;\n  top: 6px;\n}\nbody.view-button-front .popover .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^=\"该面板处于阅读视图中\"],[aria-label^=\"Current view: reading\"]) ,\nbody.view-button-front .popover .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^=\"该面板处于阅读视图中\"],[aria-label^=\"Current view: reading\"]) {\n  left: 0;\n  top: 6px;\n}\n\nbody.is-mobile.view-button-front .workspace-leaf-content:is([data-mode=\"preview\"],[data-mode=\"source\"]) .view-header .view-actions>:is([aria-label^=\"该面板处于编辑视图中\"],[aria-label^=\"Current view: editing\"]) {\n  left: 0;\n  top: 6px;\n}\n\nbody.view-button-front .workspace-leaf-content:is([data-mode=\"preview\"],[data-mode=\"source\"]) .view-header .view-actions>:is([aria-label^=\"该面板处于编辑视图中\"],[aria-label^=\"Current view: editing\"]) {\n  opacity: 0.8;\n  position: absolute;\n  left: 8px;\n  top: 3px;\n}\nbody.is-mobile.view-button-front .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^=\"该面板处于阅读视图中\"],[aria-label^=\"Current view: reading\"]) {\n  left: 0;\n  top: 6px;\n}\nbody.view-button-front .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^=\"该面板处于阅读视图中\"],[aria-label^=\"Current view: reading\"]) {\n  opacity: 0.5;\n  position: absolute;\n  left: 8px;\n  top: 3px;\n}\nbody.view-button-front .workspace-leaf-content[data-mode='preview'] .view-header:hover .view-actions>:is([aria-label^=\"该面板处于阅读视图中\"],[aria-label^=\"Current view: reading\"]) {\n  opacity: 1;\n}\n\nbody.view-button-front:not(.color-scheme-options-simplicity-topaz) .workspace-leaf-content .view-header .view-header-nav-buttons {\n  margin-left: 25px;\n}\nbody.view-button-front.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer.color-scheme-options-simplicity-topaz .workspace-leaf-content .view-header .view-header-nav-buttons {\n  margin-left: 5px;\n}\n\nbody.view-button-front .workspace-leaf-content[data-mode='source'] .view-content .markdown-source-view:not(.is-live-preview)::before {\n  content: \"\";\n  background-image:url(\"data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M84.8 468.8H43.2C17.6 468.8 0 486.4 0 512s17.6 43.2 43.2 43.2h43.2C110.4 555.2 128 537.6 128 512s-17.6-43.2-43.2-43.2zM384 468.8h-43.2c-25.6 0-43.2 17.6-43.2 43.2s17.6 43.2 43.2 43.2H384c25.6 0 43.2-17.6 43.2-43.2s-17.6-43.2-43.2-43.2zM683.2 468.8H640c-25.6 0-43.2 17.6-43.2 43.2s17.6 43.2 43.2 43.2h43.2c25.6 0 43.2-17.6 43.2-43.2-1.6-25.6-17.6-43.2-43.2-43.2zM980.8 468.8h-43.2c-25.6 0-43.2 17.6-43.2 43.2s17.6 43.2 43.2 43.2h43.2c25.6 0 43.2-17.6 43.2-43.2s-17.6-43.2-43.2-43.2z' fill='%23666666'/%3E%3C/svg%3E\");\n  background-size: 14px 16px;\n  background-repeat: no-repeat;\n  height: 12px;\n  width: 15px;\n  position: absolute;\n  z-index: 1;\n  top: 17px;\n  left: 26px;\n  opacity: 0.5;\n  pointer-events: none;\n}\n\nbody.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer.view-button-front  .workspace-leaf-content[data-mode='source'] .view-content .markdown-source-view:not(.is-live-preview)::before {\n  left: 38px;\n}\n\nbody.view-button-front:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-book-open {\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M114.18 936.37c-7.08-0.01-13.88-2.83-18.90-7.84-7.13-7.13-9.73-17.60-6.78-27.24 0.58-1.89 58.08-190.17 69.57-232.60 1.24-4.57 3.65-8.73 6.99-12.08 0 0 509.13-509.34 524.08-524.12 27.32-27.32 63.92-43.31 102.51-44.84 35.84 0.81 69.89 15.79 94.70 41.66 32.72 31.43 49.66 65.07 50.34 100.03 0.52 35.39-15.64 70.37-48.22 103.97C856.96 365.85 382.08 835.45 361.87 855.42c-3.13 3.09-6.97 5.37-11.19 6.62-31.98 9.53-226.32 72.36-228.29 72.99C119.75 935.90 116.98 936.35 114.18 936.37zM207.99 690.03c-10.01 35.62-39.82 125.58-56.68 181.06 55.85-17.99 146.82-49.51 177.65-59.01 50.76-50.21 491.57-486.20 521.11-516.63 22.12-22.85 33.24-44.76 32.85-65.12-0.40-19.87-11.67-40.69-33.65-61.74-14.94-16.13-35.63-25.74-57.60-26.73-24.42 1.73-47.44 12.11-64.90 29.28-14.10 13.90-465.93 465.95-518.84 518.88L207.99 690.03zM350.36 853.71c-13.57-0.06-24.98-10.20-26.63-23.68-6.27-30.87-21.46-59.22-43.70-81.52-22.46-24.48-52.04-41.30-84.56-48.09-14.71-1.90-25.17-15.27-23.48-30.01 1.53-14.70 14.70-25.39 29.40-23.85 0.01 0 0.03 0 0.05 0 88.93 17.85 158.30 87.60 175.66 176.62 1.91 14.80-8.50 28.34-23.28 30.29-1.16 0.15-2.33 0.22-3.51 0.22L350.36 853.71zM828.88 369.14c-13.58-0.05-24.99-10.20-26.62-23.68-14.30-64.29-64.20-114.68-128.34-129.60-14.70-1.94-25.13-15.30-23.45-30.03 1.51-14.67 14.63-25.35 29.31-23.85 0.03 0.01 0.06 0.01 0.10 0.01 44.72 8.07 85.64 30.37 116.68 63.57 30.72 30.78 51.32 70.19 59.05 112.99 2.02 14.73-8.28 28.31-23.02 30.33-1.25 0.18-2.52 0.26-3.80 0.26L828.88 369.14z' fill='%23666666'/%3E%3C/svg%3E\");\n  opacity:0.6;\n}\n\nbody:not(.remove-custom-svg-icons) .workspace-leaf-content[data-type=\"markdown\"] .view-header-icon:hover::before {\n  content:\"👆🏻\";\n  opacity: 0.6;\n  margin-left: -12px;\n}\n\n\nbody.folder-icons .nav-files-container .nav-folder-title-content::before {\n  position: relative;\n  content: \"\";\n  display: inline-block;\n  opacity: 0.9;\n  top: 2px;\n  margin-left: -1px;\n  width: 0.95rem;\n  height: 0.95rem;\n  margin-right: 5px;\n  background-size: contain;\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-color: var(--text-folder-file-icon);\n  filter: hue-rotate(160deg);\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M2.165 19.551c.186.28.499.449.835.449h15c.4 0 .762-.238.919-.606l3-7A.998.998 0 0 0 21 11h-1V8c0-1.103-.897-2-2-2h-6.655L8.789 4H4c-1.103 0-2 .897-2 2v13h.007a1 1 0 0 0 .158.551zM18 8v3H6c-.4 0-.762.238-.919.606L4 14.129V8h14z\"></path></svg>');\n}\nbody.folder-icons .nav-folder-children .nav-folder.is-collapsed .nav-folder-title-content::before {\n  position: relative;\n  content: \"\";\n  display: inline-block;\n  width: 0.95rem;\n  height: 0.95rem;\n  background-size: contain;\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-color: var(--text-folder-file-icon);\n  filter: hue-rotate(160deg);\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M20 5h-8.586L9.707 3.293A.997.997 0 0 0 9 3H4c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h16c1.103 0 2-.897 2-2V7c0-1.103-.897-2-2-2zM4 19V7h16l.002 12H4z\"></path></svg>');\n} \n\n.folder-note-underline .nav-folder.is-collapsed .nav-folder-title-content {\n  text-decoration-line: underline;\n  /* text-decoration-color: var(--text-faint); */\n  text-decoration-color: var(--tab-color);\n\n  color: var(--tab-color);\n  text-decoration-thickness: 2px;\n  line-height: 1.6;\n  text-underline-offset: 4px;\n\n}\n\n \n/* 添加彩色点 by 熊猫 2023-12-27_00:26:41 */\n.folder-note-dot .nav-folder .nav-folder-title-content\n{\n  width: 100%\n}\n.folder-note-dot .workspace-leaf-content[data-type=\"file-explorer\"] .nav-folder-title, .workspace-leaf-content[data-type=\"file-explorer\"] .tree-item-self.is-clickable.nav-folder-title {\n\n  padding: var(--nav-item-parent-padding);\n}\n\n.folder-note-dot .workspace-leaf-content>.nav-files-container>div>.tree-item.nav-folder .nav-folder-title:after {\n  color: var(--tab-color);\n  content: \"⬤\";\n  position: relative;\n  margin-left: 10px;\n  top: 0px;\n  right: 0.3rem ;\n  opacity: 0.7;\n}\nbody.remove-arrow .tree-item-self {\n  --icon-opacity:0;\n}\nbody.remove-arrow .tree-item-self .tree-item-icon {\n  --icon-opacity:0;\n}\nbody.remove-arrow:not(.default-icons):not(.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked) .nav-folder-collapse-indicator::before {\n  display: none;\n}\nbody.remove-arrow:not(.default-icons) :not([class*=\"mk-tree\"]).nav-folder-title-content {\n  margin-left: -18px;\n}\n\nbody.remove-arrow:not(.default-icons) .tree-item.nav-folder.mod-root>.tree-item-self.nav-folder-title {\n  padding-left: 23px;\n  margin-left: -10px;\n}\n\nbody.remove-arrow .nav-folder-title .iconize-icon {\n  margin: 0 22px 0 -18px !important;\n}\n\nbody:not(.remove-file-icons) [data-type=\"starred\"] .nav-file-icon .svg-icon {\n  padding: 4px 0 0;\n}\n\nbody:not(.remove-file-icons) .workspace-leaf-content[data-type=\"starred\"] .nav-file-title-content::before {\n  display: none;\n}\nbody:not(.remove-file-icons) .nav-file-title .nav-file-title-content:not(.mk-tree-text)::before {\n  position: relative;\n  content: \"\";\n  display: inline-block;\n  width: 0.9rem;\n  opacity: 0.9;\n  top: 0.15rem;\n  height: 0.9rem;\n  margin-right: 5px;\n  background-size: contain;\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-color: var(--text-folder-file-icon);\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M8 16h8v2H8zm0-4h8v2H8zm6-10H6c-1.1 0-2 .9-2 2v16c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11z\"/></svg>');\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".pdf\"] .nav-file-title-content::before {\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" ><path fill=\"none\" d=\"M0 0h24v24H0z\"/><path d=\"M12 16H8V8h4a4 4 0 1 1 0 8zm-2-6v4h2a2 2 0 1 0 0-4h-2zm5-6H5v16h14V8h-4V4zM3 2.992C3 2.444 3.447 2 3.999 2H16l5 5v13.993A1 1 0 0 1 20.007 22H3.993A1 1 0 0 1 3 21.008V2.992z\"/></svg>');\n  filter: hue-rotate(-45deg);\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".pdf\"] .nav-file-tag {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(-45deg);\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".jpg\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".png\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".svg\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".gif\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".jpeg\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".bmp\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons)  .nav-folder-title[data-path*=\"banner\"] .nav-folder-title-content::before   {\n  filter: hue-rotate(45deg);\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg     viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3121' %3E%3Cpath d='M266.42944 804.352l123.3408-136.82688a37.93408 37.93408 0 0 1 53.39136-2.90304l81.6896 72.83712a37.92384 37.92384 0 0 0 56.43776-6.76864l99.92704-145.04448a37.91872 37.91872 0 0 1 58.15808-5.12l86.33856 87.31136 66.64704 72.65792-13.9264 60.18048-67.30752 25.46176-529.20832 11.5712z' fill='%23F4CA1C' p-id='3122'%3E%3C/path%3E%3Cpath d='M814.76096 148.48H209.23904A153.26208 153.26208 0 0 0 56.32 301.74208v415.40096A153.26208 153.26208 0 0 0 209.23904 870.4h605.52192A153.26208 153.26208 0 0 0 967.68 717.13792V301.74208A153.26208 153.26208 0 0 0 814.76096 148.48z m83.456 568.65792a83.62496 83.62496 0 0 1-83.456 83.62496H209.23904a83.62496 83.62496 0 0 1-83.456-83.62496V301.74208a83.62496 83.62496 0 0 1 83.456-83.63008h605.52192a83.62496 83.62496 0 0 1 83.456 83.61984v415.40096z m-137.728-298.55744a72.42752 72.42752 0 0 0-111.4112 9.87648l-99.712 145.46432a2.8672 2.8672 0 0 1-2.14528 1.29536 2.81088 2.81088 0 0 1-2.38592-0.75264L463.28832 501.41696a72.52992 72.52992 0 0 0-102.272 5.59104l-123.0848 137.216a34.77504 34.77504 0 1 0 51.67104 46.55616l123.0848-137.216a3.03104 3.03104 0 0 1 4.28544-0.2304l81.51552 73.04192a72.41728 72.41728 0 0 0 108.1088-13.02528l99.71712-145.4592a3.03104 3.03104 0 0 1 4.66432-0.41472l86.15936 87.552a34.78016 34.78016 0 1 0 49.47456-48.896z m-316.2368-33.32608a47.00672 47.00672 0 1 0-46.90432-47.00672 46.95552 46.95552 0 0 0 46.90432 47.00672z' fill='%23adb5bd' p-id='3123'%3E%3C/path%3E%3C/svg%3E\");\n\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".jpg\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".png\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".svg\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".gif\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".jpeg\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".bmp\"] .nav-file-tag {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(45deg);\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".mp4\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".webm\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".ogv\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".mov\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".mkv\"] .nav-file-title-content::before {\n  filter: hue-rotate(90deg);\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg t='1667450951795'  viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2272' %3E%3Cpath d='M867 219.7H233.6l28.6-40.6c0.3-0.4 0.5-0.7 0.7-1.1 2-3.2 5.5-5.1 9.3-5.1h128c3.9 0 7.4 2 9.4 5.2 8.6 13.8 26.7 18 40.5 9.5 13.8-8.6 18-26.7 9.5-40.5-12.8-20.7-35-33-59.4-33h-128c-23.7 0-45.5 11.8-58.5 31.6l-52 74h-5.6c-50.7 0-91.9 41.2-91.9 91.9V819c0 50.7 41.2 91.9 91.9 91.9H867c50.7 0 91.9-41.2 91.9-91.9V311.6c0.1-50.7-41.2-91.9-91.9-91.9zM900.1 819c0 18.3-14.9 33.1-33.1 33.1H156.1c-18.3 0-33.1-14.9-33.1-33.1V311.6c0-18.3 14.9-33.1 33.1-33.1H867c18.3 0 33.1 14.9 33.1 33.1V819z' fill='%23adb5bd' p-id='2273'%3E%3C/path%3E%3Cpath d='M800.1 304.5h-60.6c-16.2 0-29.4 13.2-29.4 29.4s13.2 29.4 29.4 29.4h60.6c16.2 0 29.4-13.2 29.4-29.4s-13.2-29.4-29.4-29.4z' fill='%23adb5bd' p-id='2274'%3E%3C/path%3E%3Cpath d='M544 730.9c79.5-18.1 129.5-97.5 111.4-177-4.3-18.8-12.2-36-22.7-51.2 2 34.8-23.8 89.4-70.8 136.4-45.5 45.5-99.9 69.1-134.4 69.4 32.9 22.5 74.6 31.9 116.5 22.4z' fill='%23FFD524' p-id='2275'%3E%3C/path%3E%3Cpath d='M511.3 379.9c-1.5 0-3 0-4.5 0.1-16.2 0.4-29.1 13.8-28.8 30 0.4 16.2 13.9 29.3 30 28.8 50.7-1 97 24.1 124.6 63.9 10.5 15.2 18.4 32.4 22.7 51.2 18.1 79.5-31.9 159-111.4 177-41.8 9.5-83.5 0.1-116.4-22.5-29.6-20.3-52.1-51.3-60.6-89-8.5-37.2-2.4-75.8 17.2-108.5 8.3-13.9 3.8-32-10.2-40.3-14-8.3-32-3.8-40.3 10.2-27.3 45.8-35.8 99.7-24 151.7 12.2 53.8 44.7 99.7 91.4 129.1 33.4 21 71.2 31.8 109.7 31.8 15.4 0 30.9-1.7 46.2-5.2 53.8-12.2 99.7-44.7 129.1-91.4 29.4-46.7 38.9-102.1 26.6-156-21.2-93.9-105.5-160.9-201.3-160.9z' fill='%23adb5bd' p-id='2276'%3E%3C/path%3E%3Cpath d='M416.8 465.9c5.3 0 10.8-1.5 15.6-4.5l4.5-2.7c14.1-8.1 18.8-26.1 10.7-40.2s-26.1-18.9-40.2-10.7c-2.1 1.2-4.2 2.5-6.3 3.8-13.7 8.6-17.9 26.8-9.2 40.5 5.6 8.9 15.2 13.8 24.9 13.8z' fill='%23adb5bd' p-id='2277'%3E%3C/path%3E%3C/svg%3E\");\n\n\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".mp4\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".webm\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".ogv\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".mov\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".mkv\"] .nav-file-tag {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(90deg);\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".mp3\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".wav\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".m4a\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".ogg\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".3gp\"] .nav-file-title-content::before,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".flac\"] .nav-file-title-content::before {\n  filter: hue-rotate(-90deg);\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg t='1667450617533'  viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2116' %3E%3Cpath d='M512 900.8c214.4 0 388.9-174.4 388.9-388.9 0-54-11.1-105.4-31-152.1 10.1 106.6-34.1 271.1-172 382.9-143.8 116.6-375.7 80.7-477 26.6 71.2 80.6 175.3 131.5 291.1 131.5z' fill='%23FFD524' p-id='2117'%3E%3C/path%3E%3Cpath d='M512 64.2c-26.1 0-52.2 2.3-77.7 6.7-16 2.8-26.7 18.1-23.9 34.1 2.8 16 18.1 26.7 34.1 23.9 22.2-3.9 44.9-5.9 67.6-5.9 160.5 0 298.5 97.7 357.8 236.7 20 46.8 31 98.2 31 152.1 0 214.4-174.4 388.9-388.9 388.9-115.8 0-219.9-50.9-291.2-131.5-60.7-68.6-97.7-158.7-97.7-257.4 0-124.2 57.2-238 157.1-312.3 13-9.7 15.8-28.2 6.1-41.2-9.7-13-28.2-15.8-41.2-6.1C131.8 236.7 64.2 371.1 64.2 512c0 246.9 200.9 447.8 447.8 447.8S959.7 758.9 959.7 512 758.9 64.2 512 64.2z' fill='%23adb5bd' p-id='2118'%3E%3C/path%3E%3Cpath d='M343.2 158.6c4 0 8-0.8 11.9-2.5 3.4-1.5 6.8-3 10.3-4.4 15-6.2 22.3-23.4 16.1-38.4-6.2-15-23.3-22.3-38.4-16.1-3.9 1.6-7.8 3.3-11.7 5-14.9 6.6-21.6 24-15 38.8 4.7 11 15.5 17.6 26.8 17.6zM394.6 787.4c66.2 0 120.9-50.5 127.4-115.1 0.4-2 0.7-4 0.7-6.1V313.6H663c-8 21.5-27.6 49.4-75.9 63.8-15.6 4.6-24.5 21-19.8 36.6 3.8 12.8 15.5 21.1 28.2 21.1 2.8 0 5.6-0.4 8.4-1.2C705.3 403.8 728.9 322 727.2 283c-0.7-15.8-13.6-28.2-29.4-28.2H493.3c-16.3 0-29.4 13.2-29.4 29.4v375.2c0 38.2-31.1 69.2-69.2 69.2s-69.2-31.1-69.2-69.2c0-38.2 31.1-69.2 69.2-69.2 16.3 0 29.4-13.2 29.4-29.4s-13.2-29.4-29.4-29.4c-70.6 0-128.1 57.5-128.1 128.1s57.4 127.9 128 127.9z' fill='%23adb5bd'  p-id='2119'%3E%3C/path%3E%3C/svg%3E\");\n\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".mp3\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".wav\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".m4a\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".ogg\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".3gp\"] .nav-file-tag,\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".flac\"] .nav-file-tag {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(-90deg);\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".canvas\"] .nav-file-title-content::before {\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23adb5bd' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon lucide-layout-dashboard'%3E%3Crect x='3' y='3' width='7' height='9'%3E%3C/rect%3E%3Crect x='14' y='3' width='7' height='5'%3E%3C/rect%3E%3Crect x='14' y='12' width='7' height='9'%3E%3C/rect%3E%3Crect x='3' y='16' width='7' height='5'%3E%3C/rect%3E%3C/svg%3E\");\n  filter: hue-rotate(180deg);\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".canvas\"] .nav-file-tag {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(180deg);\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".excalidraw.md\"] .nav-file-title-content::before {\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M18.404 2.998c-.757-.754-2.077-.751-2.828.005l-1.784 1.791L11.586 7H7a.998.998 0 0 0-.939.658l-4 11c-.133.365-.042.774.232 1.049l2 2a.997.997 0 0 0 1.049.232l11-4A.998.998 0 0 0 17 17v-4.586l2.207-2.207v-.001h.001L21 8.409c.378-.378.586-.881.585-1.415 0-.535-.209-1.038-.588-1.415l-2.593-2.581zm-3.111 8.295A.996.996 0 0 0 15 12v4.3l-9.249 3.363 4.671-4.671c.026.001.052.008.078.008A1.5 1.5 0 1 0 9 13.5c0 .026.007.052.008.078l-4.671 4.671L7.7 9H12c.266 0 .52-.105.707-.293L14.5 6.914 17.086 9.5l-1.793 1.793zm3.206-3.208-2.586-2.586 1.079-1.084 2.593 2.581-1.086 1.089z\"></path></svg>');\n  /*\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-18 -10 35 39\"><path d=\"M-7-4 0-9M0-9V-9L7-4-7 21-3 14-3 6 1 6-6 6-6 5-5 4 2 4-5 4-7-4ZM1-5C1-6-1-6-1-5-1-4 1-4 1-5ZM10-2-4 23 3 28 9 23 6 5M3 23V11\" fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2.5\"></path></svg>');*/\n  filter: hue-rotate(135deg);\n}\n\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".loom\"] .nav-file-title-content::before {\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 21h15.893c1.103 0 2-.897 2-2V5c0-1.103-.897-2-2-2H4c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2zm0-2v-5h4v5H4zM14 7v5h-4V7h4zM8 7v5H4V7h4zm2 12v-5h4v5h-4zm6 0v-5h3.894v5H16zm3.893-7H16V7h3.893v5z\"></path></svg>');\n  filter: hue-rotate(200deg);\n}\nbody:not(.remove-file-icons) .nav-file-title[data-path$=\".loom\"] .nav-file-tag {\n  background-color: var(--theme-color-translucent-01);\n  color: var(--theme-color);\n  filter: hue-rotate(200deg);\n}\n\nbody.dark-background-file:not(.remove-file-icons):not(.bt-toggle-colorful-folder.folder-style-change-options-colorful) .nav-file-title.is-active[data-path$=\".md\"]>.nav-file-title-content::before {\n  background-color: var(--white);\n}\nbody:not(.remove-file-icons) .nav-file-title.is-active[data-path$=\".md\"]>.nav-file-title-content::before {\n  background-color: var(--text-folder-file-icon);\n  opacity: 1;\n}\n\nbody:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-edit-3 > path,\nbody:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-book-open > path {\n  display: none;\n}\n\nbody:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-edit-3,\nbody:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-book-open {\n  background-color: currentColor;\n}\n\nbody:not(.remove-custom-svg-icons) .workspace-leaf-content .view-action svg{\n  width: 17px;\n  height: 17px;\n  background-repeat: no-repeat;\n}\n\nbody:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-edit-3 {\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"></path><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"></path></svg>');\n}\n\nbody:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-book-open {\n  -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"m7 17.013 4.413-.015 9.632-9.54c.378-.378.586-.88.586-1.414s-.208-1.036-.586-1.414l-1.586-1.586c-.756-.756-2.075-.752-2.825-.003L7 12.583v4.43zM18.045 4.458l1.589 1.583-1.597 1.582-1.586-1.585 1.594-1.58zM9 13.417l6.03-5.973 1.586 1.586-6.029 5.971L9 15.006v-1.589z\"></path><path d=\"M5 21h14c1.103 0 2-.897 2-2v-8.668l-2 2V19H8.158c-.026 0-.053.01-.079.01-.033 0-.066-.009-.1-.01H5V5h6.847l2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2z\"></path></svg>');\n  background-color: var(--theme-color);\n}\n\nbody.setting-default-frosted-glass [class=\"menu\"] {\n  border: none;\n  backdrop-filter: blur(8px);\n  background-color: var(--bg-color-settings-3);\n  box-shadow: 0 0 8px var(--bg-color-settings-5);\n}\n\n.menu-item.selected:not(.is-disabled):not(.is-label),\n.menu-item:hover:not(.is-disabled):not(.is-label) {\n  background-color: var(--bg-color-settings-5);\n}\nbody.toggle-bg-panel-page :is(.nav-files-container,.file-tree-plugin-view)::before {\n  content: '';\n  display: block;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background: no-repeat center/cover var(--panel-page-background-url-theme);\n  z-index: -1;\n}\n\nbody.toggle-bg-panel-page.theme-dark :is(.nav-files-container,.file-tree-plugin-view)::before {\n  opacity: var(--bg-panel-page-opacity-cp);\n}\n\nbody.toggle-bg-panel-page.theme-light :is(.nav-files-container,.file-tree-plugin-view)::before {\n  opacity: var(--bg-panel-page-opacity-cp);\n}\n\n\nbody.toggle-bg-panel-page.panel-page-bg-theme-dark-plant.theme-dark {\n  --panel-page-background-url-theme: url(\"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAA1HbWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAANbwAAIoYAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAMv2lwcnAAAAyfaXBjbwAAABRpc3BlAAAAAAAAAu4AAAH1AAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQQMAAAADFRjb2xycHJvZgAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//wAAABNjb2xybmNseAABAA0ABoAAAAAYaXBtYQAAAAAAAAABAAEFAQKDBAUAACKObWRhdBIACgoZJi7fpwQENBoQMvVERDwAMMMMQPaGftXSVUJfY92g+VvDgnOoxsXp5GHrG4AxUxz0YNCD7fxpDoPnkR/ev6EtrQ8W5Gb+36eFHtewziaX5hFoVmALXtjwOfEL2xjX11oPQQP7g3SDa4jGRi94TIQ15YL9FxCZVnSTK7WExCFBruVQ2tVjdB6UdR3lXjdR/8qqAkyHOWcY3GOXRD9GLsO5jbtHhikXXwC5bafUf6qcSXZbU9hxWiaVSfXd4tmvs/pl2osLUxeuFSMh6wjltuftcyyMNJinrjIy6CasCWo87igSJicpYZKjOMcfIAAA//MW/qx7PevdDyPXfP0kkJA7vOvXzJwKq4vuykxGvOl68gZCZkaYApE5FgHzJyYMZYSIssMN6BJTKrafrsYSSkujG0kFhzfRTpoxp4lbBTEnn50/cphUdjcHlbbkEP5SRRxt+qOWHvH7EX5vzcU6j8kgwV+riF9j2D/NNAahRUaP92oz0yc34TURbtl/fl1XQT16d4J6I0WKC1nrnjHCTnrPsa/jx2s96uZtvYIwb5PttEY/oshH+xfUTMr8VhlSE0uNNF8QoFpNRJFI8T3WqKe4XdAEwyXl4umcQLFxfR/4okHZr/YIsa347sagig8fS5FmeYh9avlG07U0bAWLUzmxbFp8OcP8I7hgQK4rtqL/UdlSLp+iyA9UFdF7ps/LAMsHgU2wpfKNB5V+8KAShLUnp4D9oya6nS5CPHndv6rCom2WNLasm1KQwErEGrReeNBDnPCtu8uvkhdoTYY4MxItB3/Etaf68nmgwbEOkj/JTsL2Yvg8iwPHbkXOf30EHx9iNCUxiLF0VTvRtgWjUq2fnPvIcxnjgdhyXdBqHExgHfoS6fvdqhZ+GOxKAOCJm2vHRE86ZfrDW9StEbrnoKdX7afDLJr9oK9UpPVsKXofaBucaf9DHTFIbsa1iXaX+GN+o+wi7I7krzjnSwN8nVBABRqCr4LAy7JFZ1GNMp0Ozftx85nmW8GIVwoIeNJzDcuawHOcthxeMDPLFy21nJE4JQqG1iZ6Uf7z+qRFaaOSiad9hQq3eveBmGBC2hJ+I9IwJdWt+IOgIzyBq30LHh9NK8T68L9m//UMoZ3TMC7EBMms6ED5H3SW+0LQT7hFouWJvk9FIwSRY7ZkS2d2bmA0EfYNSjhZJeLffhfLMHwah7I3A/z2OaOFM73gyf9Nzg72H28xy3ZvtHstYkk43PYDUNw9ltdER31VIqOFed/6ovjSHBWbrPjv6zyvPI9qyjpVqps2JBNDjftbgU8WT4T+0MCHr9t4j03K6F5TNvOHwUsvdOL2r9yn/V9zhPLzGkQm6V2XK97lN6aYvyVV+Vb9WmI8rI3GtbOJZNEId+hoZ5Ve960PTUOctuMAeiVrZ4FbEkVpOjFBDjHP7zVLoEWHBPyb/vWvxSnnAiKEIV3C0QSyZdn/so0ArDNF0RurWa0J9fwMgLFybvL9Z/Sp82ZlVeg6ahiu2bpwAGMTycupdjfwXCz2xAzQ2AIcRkbgEbEmAJDSWZXoaoHj64U3FsvzRcxH3pJ8lOB/nY/cMdWXFXtbHaVqFSUb7bzsmvG+d6Vg8os9lhoXIX1vZ6HZ7BiQ2Eku8DEiKTodQjgt1AA8bqsf+fljuwgqu/AZkMMf4dlnVnvO8ck9sgqzj+Okky1oOUhknS7UWfWNZIpdYFO35WUkr71rR+XWRrvWDWYdRDiUuF2i4W1PVJ2M2r9YTXQOkh2qrYvSfBzzOUpBs8OkyUcdLlr3A9a7lgE+/deidMNYYZH5XI6dj0innASSRdv9ZIFX6oN5ZvtdVPLrpV675fQXV2eAdvSmMx+q/ZWUO9xuwGm7UwvxfXXSfp5s7tTBuf00Zm7JBRi7Ey+x1uarFQU4kZ2QfMbf6dc5F+vPl5Sz/1eLZPTaKA/AMyR449SM5qu+2KIBZJBAxvpF8NDecWM5PSckJglWrBMamIQXr0OyYbKKvCVkKVqPYw2WAN7zFNLP9J39znNqAZJkrNkLbxSjPnt7LEpaKN2ddZZNMIrXtg/JlKjorhbCHBnvYxgDb1+UnOFQlU5ZOE9l9Cv5dVN1DIdQKoiypZESICLegBA0JPJGUVirxMaeqvrR9BmrXoLST+wjCzbZtS6XJi6qRhT5hbjqRR8R3ajmpKoYw9Ow4ulfCSFxqOVrpS8HYVtzPpWZFdEguc6MOs5TqDgd0aiyU87W9wKJbh5PDTetEoWomg6gpuKqfTz3AHJbCYdyd8PUDz0xyVYK5bb3+7L1t5N3TaukC02f2aUJloaiECHyJYeszIHlXvVYJskHwnFCSz/UnGpkbVBFVwVObgyIuTVy0OVnNBULmDNk+fqR6JC8pQt3wJlKlnsvy0piYnyKLCrDn0Rh79UeGFvXhEJGHhaqS4AwkBjDwo4TLPwgSXD0AjrKnxR7K24dlxY4gA0+V4QL30Nr1JQjVXzG7N4R9HN6SHzVanTe7GkZ4iETG864BkzG2M6suK2vjCeV0YS8ahsVjHXr6GAQKzuqQ2iZVVwvepx8QoJtbYmZtyDK8TXywRjO8F3tMLBlGjRdPmwj5uuo+jKUGxnja4bDoBb5Vlo6mY+TtcuYMuttVhZqNk4635q5OvbFOuSGMbdPimOyV/3oXSaiT+gw4y9T4ytRQYfvQN1UAiAakCEykcQvjI+qm3HC3F5JW1SO5iYRxYdyHpZuW6ya5mFBzdSKuaszEhS8MZS8MYyfsY1vEvSopGN6aDMnF9itbP3L/5a2kTfUx3imnoVEKjvMd530m9THDvnjZ/d9nxMk4eLr/mVpaVjJRQ0KebkfJDuuuLzTc+vxsc7airOqbgQ3GsM94f/DBrqEB4k799T8v1lY8sw9CnQxOK099uDlijtxry1PfXAos/YZg9s9Tt7cN++OJi7mYqgYXU4YThz2sbLyc6hKU7b9dLR7I4aHD5RkssZN37WzJ6HHJaz7KW4LX9lGliTg2AhQPoRBYO3ogI1fZUmT/lG79VRUXfJnwnztEYsEXGKogxxMQXSt/qrr8ug1VJ03mcLZQdI8YKxjg2zegzdMT8rYVw8+Ozs1L5VemNL+F45Bs11YBiTCKwDOB9CfdfpzevsnyE+DJAnF2eczT5Lvh5GzoSltCqoEnRMdiCuMCK8wgpZztK0jzcjuFQQtcGThK2Y8PG2H/TX9EykfPPaGPCyydiEF1JEdasmlXFPAw+9pjUf5XTCTgrwBfAD9dxlZsKMOMgtV2Vhvmlxp2UN6kBu1+pwXdbE4Dz/crpyvLWQRz1sYGy6fCl7fbsG25Ij/aQFAHdHUPVHzRxk2gZO/qYnfyAN6D9zx07nmxPStM9Id/TNE0fLIunCZQutqx59ACV1sXH+HrTHMN268LAU7Dgb2j0OnHEWvFT4/b0SZdjRfXhAUQAGK7wRdkYLb7FpBXfHLhN39TrM0B/5O7twAf4nF/1e3pd/N/0G1YGh5PlTFs2OzX9j5c+j30T+S3gu8UzjDcGF9F7mtkf/ZFTgyvsfE4Q9bAXkrsO9FaxzGbQnSKfB5PNNy6T8pWDmwTlKGqMJ2HShgMkmzst5RgdAPYyEcOTZYBq6xMiGqJn9Kt3AewrpYINqY/HapAxI+C2rsV2YdMXNBjgU1mWF5fZIk7jiuRrSFcUwAwATcyyua1lqZjW59/P5Yn5ICibURfGNuR5C5hP1h+OUJFypddDDROLCL3quGxI95DUnBUj+erf8DsGc9Fs+C1ysgwcLmTGQB9Bh6iyfwfZZmjzNYmsQOjnd5mLWDIs9RBMhQT5CKsVM4EUgc8lovOH/nCg2omzVocvR8U4ajbkH2vb50Oat9EKW1i5ebJsn0a0RMXaWqgTIhV7ltbEoLNkjT00GsVWVex9r5DYd+dTGdTxV8RIDGs1nq3BV0D0DvpUY6B9khUVId8BFFIxeDhXuO/9Xwa+NQz3nTXcRGXKI9eErd2itG0EWvUL+kaMMxDfBgxhoIh+G4lsWChNWqM9NsQBnK/RROT2ozL6RkL8FBbmJBk4uX55wBLMLAv1Hl+esl3MmYvZifZXe5IQxNJqUWfK3BWvNh7baulPiuw/vFGPfcbisC7W0r4KXPDTly7KWZ000ox+uwDX3iJ8YXZWmSvmjujTLuGzCsLci9pquhX2KLa9Y32lA2dz1fK3+Q1EfNcF4QNpHFHOKvnrwhSMpduuzEKQMu2WOgnn9Nx5s3UPO6VHvWd/iH8FzWl0Oyk/XUF14Dibf8T25OlIKq3un9z2FcIJkyZFoXWSo3pL5CPq1TZ94Lct2iiX4uXl8XD+kLIF6W1ooVDNIoM9+s6Q2rnxuENJK8eJ6tlriZdVe/kOfx9dBJCarI/x9E9T2ixSIeON3BX0M14p5zw1YC86BXydang6aE7s8b7cFzBEUJzYMXrmgL1nZPnlZOvaASNNpJgqfj6OqrFjfutjbYWFAmsu2M8Xkp2D9530cjInNqOY4126NfIhdy7nCNTjim2xYk+Tjt3TGfIJEYR8r99go9jrloWV22nxt1ySdZYhqxnfteuTWmg5bHNAeAcAlXgiWpJMmhzlTnzcJgxrrHU/QRpQjbi6NQd9tpNXEjLE2YrKq4nDz5JVNWqduMaV7Fy7LGEZNg0Bd+0Hjl7lY+BsekJxjY/tb2/ZcgY/B0mycnh15VvY8UEVrQUtPJojQybiNxUr4bM4BGagyw5QAhz1MMFSu2UaDsQfuqhdkpNSe+lMWqlr1OnkfnX7G0YfOvF4sfp1SlXy9+/FBL2Xagdv5zTBvgyRT2Kh8wYDvWEKkvKoC3GxTb7Jw3MYQe4luQRy5t87YGhanS92fzBz0WI3Gmq0wvdDAeYiU2V3vMPQsUxBeFb/dOgnUobykX4X7IyODnNWOeX3Hw6TUQMmBQonou+W64pfg/ZPoJPNm+9FLq0bLLeGNTM2HOMjPZvt5nZGVaUFodQVXkNfdFxw5h7fQY9RmOk6H58uZvSwmktnmcPYUfboqL9LOpXNwg8iUaSkErbfx+0P8+fslL0pmyHUeuX8+Cxwfpds8yb1j0N40zLAcEuixgUOIKMD6BZL1AoTTLiaiPHjMKbDTyd6/3nS/wgEavz62mkFKmw7zj+gziCfrC5vcePX59z1gTbz20zhBsSESJhXLyz6KOiJYMLo3BLFpVNV9YNsRXepKxjwpb5ryLMOoUhD8O2qtjEdi+Ez82MJvVa8JEFptR9nGNQ9cg/HxrmQ3gQ+975npx66jF4AMCbdPfcHX0BOeBWQ3doGops3gW+XexU6eWT/eBs5Gz9e8N2Bjr8aeovcxoGzNR97fGPczjZ3bkuxqvOOrtvR5D2dF3PEQ6HZaB1XoSxkMB7W/9qZ2L2bKPe5xnMoud6d93AnnpQtAEDB9MBZWtQ65VKAaj7sypl1B9xT/mlAiMCTyE1xw+pMckhirRmPA2seaxFCQy/ZGxfin8FSo/0GddLC11chCfLWBp9Bu5wZFCQ8g7Ex/XrgtzijXMNyG66mjCzsVEhSeTN3vU55GhEQB8NFfuz8zMls62BU5NQCqxbEEWVFmd3ekRH6+VeY/xlqmZ+Gkl/t0eQy50YBh8YJQFCWxmaZwVNyAH7fOQl3BxW8+LfTzNC6AQPGO7DUTjNKjY3c5voD4ZdcvzLeKODjmyzEJuGrcpYS4MnWo/i+6rpI3TPfYqZYLkTDqTRzhAOfhRFwu4g9VKha4hLm7u/TJhSmIb4Z1bkprnbRar3SVTTXiemDFm848bno38AgRrblVVG9NUSQVBXFt/OYqn1AA6r1W1Myh5KLkrVPR7pPlkbuUDAPww1Djlyi3NrvKXwTBHRXE3UCqrBxFvjmoJckHDNREyimxvDLEmp1Lf48u8+9Ozn747NNuxHee/hmyxFzVWTgsn3PXJ2BAI1Y59bNvybdWFD23i86RLbQKFP2rEhnN6sRtpsRXqbAp3CwW7crHbShuhM9cct38vbMvPWLqauU6QNEx61FBLEt2rzJwtZaTjjCfaQaZ5bpN2+pCiHm+uXw3Rc7lu6Cor98mLECCxEI/ukqFsAKWdQSuQbpBJ/pVisYn3esCVu7vFojyvvAjhZNhex9c9jALh8YVt1PBaC8sxFjY80cWvyOGdE3vng+rOy44GXdiAzsGMlmB750qqTRYB0TT9ArSWcGwic6ZBZmHCwZgdy3r1K3YPDv2zRcoTq309+PBP2pcsSszhrwB+dwdZGwhzym2xJedKVnSnIJgsLwW5LFM3Y1C5J1+rlkT0Pqwodi7/chV6ISDS9/B2Izj3XaCPg4pR3i/J4LsY4oKm7Y6INcqLHwXYKvKJcZ/riMipCjwiC6p/p+GuR/6+d5bE+3oi67mHouGfs6+DGOY2tcSiMxAVrdl7lP+AK01mYvY6rOQWpCXyyd2g3OkgUhFszvhCAgi+DSobBMDF5J/FaDd3nWafLiBEvyo05yMy8SZhDReKhF8YWn5AhDAcrrUTez1OF1jVzQV304Na6g0tfx6t1kOsvb2Plexdg1wxcTkXLHfyQjv7AgAiuqNz9vGbRDsUsC8hvB0N6hzH7SflJpIPDeCoqY5oKZowzbr1Xhv/5CzgIiby8oxaK4R3xuIu7fQMuJ6Tgqcqsgqb+D1RseCJjo1tRQ4ccBe+UtTE2Z66CwiN7g+RdussivLg+beqQoqAuf5AFHsGyayXdt5jVwq167/SZ/zP/1n5u+StLqx7C77WoepTnuw8MDKlx6g2wdseWKFxjCZq/eWW/1Pn8QByiWvcRtR5jiaKqBLYUyc6P5QqFWeKhXFjz/xSpgfXtxceTx6gDY6Lt/pvrxvmmQR5nScyIKGSEPWMfj/3XCgq21WyLApG7YrA3pgm56brhcI9EnSjjRjUrsQxTedtH05z9JmQ0B/qE1jD/tFFnhtv5bX6+TpN895pckdfXWGCLRfeoMbwcO6Yva8F4A2bztJq0OSYRL9DuXdk1/6WOpCvrHP4yQu5fKOW2DqbbGBFtyW/RAvu6Y9YEQH9cc2TH0A6vwa+/Un9aBr9gtqHdSvxFPkvUasm5r/3BlfthuBpfAazRiTeVakzTW3sMkGQXDkxopjWmaW+MV4vAXoOe62SiCCurnYp1WvkalV6b8wkHSDMUQMLqh05YvwCYwnD6fKFbjYd4WXoQZmLzacxsNvdqh82wolzTX4hM0+KPelk3rraxz5P4Nk+cYkz6Ecxzm3qL1XSz1vZBuOz8hPTeMKc3Ot5+NoWcSSaVODxTq7HslwvlvFG0NRsGjv76agrfZF/D87JXtmQ6PeTeEsRZMobL5Zk7vEtxRoW4UydwcKUzL9umQyooqmHj9UmuJKjRYxkj0lV2fMowz8/Xk+4EHcC52jglkMXCTHGCKY/wIGTVtFCsZd0Cizmu+cpmFb1NkDQWXd3F5gdx/z1MeLYXRGSIhXouXpIIJIeTTP8Qk/XIabWdLLMaU4kDSdF5zHw9dbqNvlGb61MQ/gwmLRphKtasQVzkGX2WDUEF/Vilg3ixHthKqHLC7tSe+Zf/m3h7Mbbmz2aPenxkQOyPQ0X4B4boLcCoiyGoOLc3jxxyWLzyjREChxCKDNOcCPaSEYkWf5cmUXr/roXxc1omPNx5nYeAX9y6UnuPS/8+utOjQ0H9koLaR5YhqTFyr+hEtsE9nbNegBTFRQOmSHeAOnlLKY0zjZr3MzYQR2uPKnX9/50j6ftWNSs1uyVk/ICnxNXn6OitxkHoK0K8nf9SLXGIcJG4eQ43NaUcahqwa5V3mbuSbm/6eZmTo544xkWVMuk/uWoxaYOHFP2w77l1whZx/5Rud3HO0T9U7H1Qnz2SxJQYv1fu3IM/CODUdnVnaioou40mA0sVifs2/XHEml/i9r//r/gxv0fidT1uqC9gZLU1RUPFQpgcsJYCwE9IgrBjxdlS3vqK7zN1RxjxK5ToZA4tDsnjPZ/DLLzFgrBQGPlATiQN6bBxQPUAPA7CLCvVUhLhYd/qaI+crBVgWDgo7B53+i/0iKc5+ybLC871Af2n8LJdtoDqqfYqecj5gfsMkAZSqPMjjaPbH3PwKLovdd2ymjjTMMmqYQ2sPbos51X/0Cnc5jv9vvew8qyHYlBPIbpphr1L7SpA7AdXTAgaKIfWXUWmze2KXAfhy6kK/ccwYwaSL2ZD04ZT75ySoPq5i7Iyy9+U5mFj83j7tBOs6CmD3b18z8O17FI2TezIYWEJ2teCSUoKJ2r8HL+jmQamUOuH38rR2HjwpekkjjS6Bi5H8om0K4+nW2shEyDWvYc9BkoAAlDqF3n7d0/WIj5xQqjvEbMZ2ZUTPHMF2gVWQRX5WKp9A37v5hLxkm3u9LuQEeHgpsWybHRnnuC+ptaslICmFKPaYxHxtH5UvKYQxdtkIBs+8H0IdNYjN8kQmnHrF2AH1a7Tu/9NtIxRo3M/SWFjBoZJljJiGsDHELpeP/6XOwNQYvSWLeRjG2ryx0qeVj0uke6vFxSh5LBUjCn21HJzz7pFD98aJ85GmSStnDRa2b12MSkYOuSPP5p9D96W6RaU/mUDj1H4d31yG8i4RdlwWv3EvG/Nte187U3t2k+6ji9kXwMSTsLEjo2wNUe06fLamgdtbLP09SLtFyo3BTxPT87xc0PiZh0yuHG0ZKQYorWuQNVaF4DKtYYBKDpx6k8hZLryy2sb1fAXE6rFfRvWvkTyY8st8UygluHZTtXeeR6PC1fGYa60AzjG13dY99e5IliXvrnUazi8yzbyxC9qat+taeRNbSBfbclsO1dNA1Zh9noNc6M8H6wTOxcAGLjW8soxvyCkgTFwZq+ogTae3I6/uNkq2r3ukb2GKwXJwCWrwBnmPyqZcjEDCqySXVR6q6I0HJ54be1ACldNqMohTFi9acBrO8lSeTu5bldjCtM35esWRUqXJrSMBsD9KznlmhruKOA0ag1pAoTp5umQ0BG7GHiX4acAVSZV7KnRYlhk2uLxjJvqcT/qE1teRysLQzPVob5yko3mhr4CuguARC6Ox+RZW+da+ZINbbftaRbF/76/tVrO+Zmzi7QGFn+2UPpMwUi+spqxQirXK3oXq9BcUpqXPxEv+hRzX12F/XRwRA8GHagjiR0vlEAmc20FgwdT+lmIIZ6OdpDUv1nzyFJpd6HluYI5PNgzFW3/PDHHN9KC0RmbTQV0amRN9DpHagnWjbqwAcmZF5AbWubnfeHBpapDOOvaEf30cw2LzScmIXtdQ2yDcI8KtcpNl0CKzSmmqd9gJqb5fm1lkhFIoV7UiJ085+S0JSr7V958FB7aL+I3OrVuKymVYq/Bk1Ds8rMuRQfU27rUKzq+/rufw2UEnN4glcztHY/IjZzbd7gpUPzXmhx98qOqKu9KY8mLGm/LDPaU822Y88j/a5Jtb8TAiWqdrIhAjFOUCsIwdrQuWs5pqSOnRb6XXexHixu7L/yRqR4RgoRiwwoZd3ssJ0aAj4XJ1C53XVAwvDeoydLFeGl3U/FNmlynU6Fjk2E5SI3KaBmSLspa0xO3sJe66Iyvg2utmvQ35ZzWr0mfjliYIaKEnHVzYVnUJ9iTb9pnW5l4LthGCe/zUJ1yK1R+AcFNaGJIFsV0PkB0Oqo2oLQACIq8N9SHTDdXjU4H5pfKCqACtKgy4uNJsF2S2+9NyGRTAsVAAEJ8u/CZ/H0r+7jYv8CGHpCHkhLU78SjAaOMI3Pn3kptpHFCH4Z4JGQdW6yoTztCJvkSHhpXop5OnCNN9TFbb7cUO1fuPHgziC/ZfsiIb8etqRkbz7fMxoe+E+KowaYuzJTs6W7Kc2a0J1GBoh/RYLvwWj3Un2lk3ynsG04d+FJMPKWtmt2JCGQrgTwms6uB6OIDmqBayvYua3HjzXxxUE0E9+3ualIsEiBRqaDWzQEFxS1AyzPPsSyyGnGtaA6UEE9giKqKXTgdU+7j0S8xbLDYxVrIvzVlpXBw4x/IbVTqAJ4Nxs1aQjpWA0KaAFsCnXGMO2Tlxm7fom46xxJErtsAAfnJBxHeUWcgod31WPJ9c4HdMQgvh1tgQvLHsF/VseHiY1xxV6JmATtSPYsIUAYbcbRQvwsD6vi2MrA4r0/TVAimKm7aSJQ8Z3LkG0ZCSTvMAAAbToOnCDhD4na2H5FohYv27UGhoJDvjRiyP7vwHm4NIRvqlh2Hih697qoElwt92NOrR1PwFvH+5RRfHmqQEzTJgzRsEdjue7WjCLbiH/WgCNXyBIUeYjXN4zEUwT2yaIH4flmnIpHG2yWkOgf3TyOpEApzZV6UhP8ia1J1F2LSAlXuqmZXX+VDr6q+5XasXdFacHvJiL93N2ZvNWyQZFj7oVDSBK24+Qspg3bP/zhAAwSbnTTM76CWEGDxUK/ZrxomBEx7SaZXz7MjFNZrwIMOap7nvvfS+jRNhx6RE3ZZx/dWz7F6g6UAc0mcsm1DhJ/GVIAhLXry0lGxN+CZwYxyhsmLXooaKsSx6kSPwm4cJ/tSTm7H3XEIAFVB6B5mHcFfkgRzAgttU3wE4Cx911WkvASC9RbktPFyX8xPA2kZVyAVthPFMbSX9bvdhhc3cT5jPyHeXtl2FNMhUy5nTlM5q9lvUarzVgZ54vpxgj4MrhyxF4bv8QcYbRFySMPAkYMg42t8L1YhSfJbJ4zwiK9B3YH9fwtGSEtISFECiuJvimnaXX7s+0DRKEHLcoAmxZs5cQYtPomFCrEOGc5TjhutxEMGemBoOjAKTdF0m5rdhNFRNBxxR3NiNDIGcTM2pTZNyAQz4Qv5EKWyEhobY+Q9qzoI4kZqzAUMHh2nHDcxt2q0CkcDT5ZVQlWPaI5j6lbGmF4NikLYsiLqwFafGUdl8sjUUjpnC32twI5mzA7tOHNJtU1v1rM543yIYyF/XXjw4goTpU+jBsNtV0FFGBPh5EhA694WVXdpWVW4S3BXNQ0Vs0D2FvwEfYX8bxDBQjSr30gtsdAtdVU9+pjqwq17p9dawXrLNcMCgUJETFTcj2LjAKHrJw2NUMDGEU5Sqjk+tZDgbE0r06j6BcJACRucrRN7/EO6jex/OKj6YQTBCrIVzJVTgyZXXdNni/P8jdwWWFu5yNvYKHMvvCI0G/B5aBxLDtU8B9F+YkJBSW2O07gwcWbqSxpgapzBwB6biPJDarp+3hiDc4RG3kMQnun+LNqr3i/kpJ56KtIFK5FrZMiGhQpV6IVuC4Xt6BDJE16tn5Nkv+UtFXbI2AoZ9Av4He1pTbWb3U5o3VkqDAOx2rvFa6/+gU7tuzmhokmh+T66rUXbCSc5eTW1oGI3tYoGoUiGI0MX5ON/x1xtlksJEdq/IsS9IQDy3IkRl9WTg/Nyb7gaHwAYnaOo6oWYjC0yI6VxdSr8ngStXZFEcfjXI7nGqa05dpvb+WnUtbUNCMq5fd5KyuUS3zQAeghHlqUsyR/wINzSRx3ViLqsceGD8ZqLszROp5IV85K3RDlBE29fCCHWUqOwyQaJkTHK2yFnxkjf5iV3pPFGlXhft9AkN1Ryok6gTqPhDZ10FssHvNwK54LqYmS1pRdwM1dvZrE9CP7QU98Gsv9nUtFKXA8XNMF1VYZLUfaUH+k1JzWUH0YQM5+rKLBaGPOu1B31ZsMwCZpmkJo1zpscEP9wmxziaRz8zUBNVv00dlk9jo73E9rm+2aFWIbQxGi6jGcSfFIB6IG7sUcpH6mPTyLP2lWXJ3Tq5NuQhAPGogydrj4aD92CBtB550mnuOvfSmjzlqbL6YEUvbbV5HdoG1vN/IFg1Spjw1eUB+aKPh6VUL1MPdxE2RzfSJl6YPL4E3IezWE8c8VT5n+QA==\");\n}\nbody.toggle-bg-panel-page.panel-page-bg-theme-dark-custom.theme-dark {\n  --panel-page-background-url-theme: var(--background-panel-page-theme-dark-custom);\n}\n\nbody.toggle-bg-panel-page.panel-page-bg-theme-light-wall.theme-light {\n  --panel-page-background-url-theme: url(\"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAA1HbWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAANbwAACRkAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAMv2lwcnAAAAyfaXBjbwAAABRpc3BlAAAAAAAAAUcAAAJFAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQEMAAAADFRjb2xycHJvZgAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//wAAABNjb2xybmNseAABAA0ABoAAAAAYaXBtYQAAAAAAAAABAAEFAQKDBAUAAAkhbWRhdBIACgoYYmjSIwQENBoQMogSEUABBBBBAMNOchMf02AqJJHtqL94fjTMLZPY9cy2o0iQ08IthJ0S6atFnsl7nCi5n1tlNP5+L6Kh/zDNbUXvbKD8OyQH8pfXRV0gUEm5aOKHcdVqAm0ePbzGbj6nDXbiRieihkewo2bd6jgr/qauWkmRZqqJCv1R3+bmjNvKo8aP0yBqi0Xw/YW4/ImOPMfsQi552r4AXfhopzgP247AJnyPA/aS/Q4vsnqV933rU6Y2in0Mphl+rQaEI32q2FIHnJ5OKPzGxsAKW7tYheeBhGgbJT4icruv/fY+cnWEuEbDnVyWWFjX5gnq/sLPjLUep2Q3l/yXe/UQWVk3cITsghXW6WnzL44wz5wfY1UJb+OxTV+T5h83M1odKUzpRWmCxzPahQCxdwsFYdoSDkbiZDYPrnne/C3SHOotGO76vU/nvbhuB6dJvBuy58tGpI3lo5Ckd6H2UXTNUeMfKz1gybadMS4BMOXYecGw5pQe3W2NBU9z8Own4WSjWN8HYa18KRUWATek0kHm9+1dOUGkelA5Rsy/2s5ByJG0FxjnfidkZx4Qsj5W1V0zKHOX8eP3oUn1NU6/KVHcPT4ZuNbKyAt6KpDdaauFYzHWLewwh97aXRCmrvOCP0Uxw3BUvZE+WawkYXYNMF/LmMXyDcBFu1Tn/y+H+yKhx6bgBdYNuAvyY85kYIlTm5rI76boF/KIMqVHFE3P/WzHRrV18mBNmcQr3687u1zgzXDUW2fdOlVb6WLQSoeS8VB3875AAYs+Sbv4N/uupbuUKwQ4OgWUDTIfHjZi486P0omcg8YMhLBvGjnqYl0ZPGNUu2B6VIWQryKBbwKaDBNuE0/cHN8xHmDCHkuhGXbK1OiPya/xPqYoI9WJSfDhsuBtSleCiVn7qjkMsdNPunivNNEY/z19ZnMQKjbw3otVw5CDweI2tn3NQNBMUS9+PuE1WdgAS4leaZ2X8P+8j1o9+B4cbT+LU3FsTfZxUgoh31JcCcTX6Qv6KyQnSWJR4rPwvzM4SoGB387KOGzNVgKosGDneeJLNHp17Dx6bm7ghru/IDkKPCYnkSddogc9qzdaJU0UNQ6W/TasK3DCaszD/VHQ0wkkrd6GofzXwjghAhD+URlqqOovt6SeqZKL9gb4N/5V+n0C9S3hGjTQgAcA8AJVLq1SwpeREJQjbdLc/NMnpCXxi/aQPmWXG6iKo+jiDfD8bwyp8f85c1OvO6D1Rp73cry/Tw6VuRDqv2jZfBvG2wFneLdTBfsWGq/OaNLcoZkYXBBgsexoWZHtZLEH9JqZSEPxUki1pURFieh1TpRSUBbCkxx+8yEkoiaQLUAVBnHbFoLTGzijrpLCdnDDvLerUk0VGQQ5BRDvxoyESRxiNOB7mnN8PhUDvy+RhhEdRWnHc8urys/tLXlarH/gypQ5xowzKLVidCKNdP7OYr7NbegIrEbefLJuZlLEepnTLNYWRR0PoRTo10EA0nBDpy6v1cA3F1pkQfWmkI8wzohmYTXCKq7DHWNQqV2BY5I8EFkMgMhDr/tLyIjxxI8ZYZlB4Kp4RHIGgvs5YfhCyPD0iY6yO7PHQ5jsrVEvh1nlzICCyK0CT7HZWOtQhol0nIfx8UhBqeQJEnjPygKwwuPTOxTGYanlzlVET+R3lxFS/ZOMb6yxWWV7v5+3S+jMyb3Ya9+GkI74ZaEqh2+Jf18VZRwM2a6ITrBoGOHhJNp9HI69wJ+z+iZZUoTL896jINAHzCYeF8BELdGd8a1lY0qR9nEA8EqnHxlVH1MJ6CWO8khawfahKPSRN+6vuND0Wm6ldgwIsFazyrOI06eQQm9lxVybMFnY0RR/inRN2KfT8gR8kyo+TqvZ10hggpKkcNMaTh72Oc/HJoVWYuHIjtMNLzrmT86Si51XEHTsg3AIv9OU5sEbSQ8w/IRems8/rxzmO0tpqnTR7Ek3fb0wIjNNMv8fToiU+zWMl84Xg/SQ0U6jRruRoJT9QsxTKO7bEPBVIbwDeRd97MY2G4as5zQFRRdUmwppazATbpey2bFQaAzW2kb/wukBmLrqx2fVoapf68E6pIQvVIVqoTxTln8t7fpPbYb1hG154ecrPgA4LgChIGQWbHPRWOD8Bp/stejY74G5/44QX8KDXYrjUNaAiEkEybCu3K3n7V/a18K7dUiLsmLxcXZjQ7QUdIsEnRkNysHHRMlxvEpoVtEESKiFs5q70nNrlpoPv7QT8y78EF5Rkr9DEriAQ7IAzuQ/vbBP3riBzGhB8fXFODc1cwd0Am6UTW9enNT04pb8ljEdKf0cISnwaVAddmDb7CmS6T84+IA3IyAKD1aMgqq3gF7QGn1kvec4lw4utRi9SenMs90b8ydVIbo43NnKA+FSIPsArPEd/WTJOHwiHyMOxPO6eu7Qx/BBdyRBBmz/8py3d0LNDp+kc0Dq1RMM/V2tvqLhIxxwVj6EGB39DJcr5IIGcRHetzMA+lLAdan0MHhd6Nrv4YB8Z6K4hbVKoTMWoyCamfngKCfzHz0KiOWBQwunZWEP4arhMrYRzFFtOwDEgPpHa/25K5HZKINJORY0twdve/YlzMtbtj0K5uM3DjfIdSt61HxT32D//X8ENdkvchy2eRVEfEN1wcZe2wF5XjFhP6JcS9vd78JBWuCwMUXf+IRIcQRf86BK2BN5qNgkRrhKE4Qp4+y66kGzOmCumyCUOZdYTEZ8uCERDVjXIhLVRDIlo8bKlyFHe3fm9wZN3haNBxczsXYI9pqiIl1cEtXCNz6KXtBiGVmGZSJEsqgKUbcbEB4G40GydkJqgJUIwmZv9iF7i5R48m3bPS+SJLoIZ85LHfMziD1Gvk+M2ZnPt9PFzN02LRVZIweI/i+R+xAQ/kykeEB2eGr8QBigRX4MsYgJAwmmTa2aWQ/4ok6MF/lwuxVy7bK8sK0oFkjisV68/kUEgbTyunws2WtM/bo36hnb4FjJMb/9l4YwmjKEuTUocwy1ZDR/AVa+5T77fCEfxwDlEO5+AdQpVakSbA/wYL6+06rc+JYqFD/NWcCKDmixb7HaTj8RDDAW+/jIadmF4VX6SFaNbFqqO0A=\");\n}\nbody.toggle-bg-panel-page.panel-page-bg-theme-light-custom.theme-light {\n  --panel-page-background-url-theme: var(--background-panel-page-theme-light-custom);\n}\nbody.background-image-settings-switch.toggle-nonoverlapping-bg .workspace-split.mod-root .view-header {\n  background: var(--background-nonoverlapping-note);\n}\n\nbody.background-image-settings-switch.toggle-nonoverlapping-bg .workspace-split.mod-root   .workspace-tab-header.is-active\n{\n  background: var(--background-nonoverlapping-note);\n}\n \nbody.background-image-settings-switch.toggle-nonoverlapping-bg .workspace-split.mod-root .view-content {\n  background: var(--background-nonoverlapping-note);\n}\n\n/* Sea and sky for Blue Topaz */\n.workspace-split.mod-root .workspace-leaf:nth-child(n) .workspace-leaf-content[data-type=\"markdown\"]::before {\n  content: '';\n  display: block;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  opacity: 0.12;\n  background-size: 100% 100%;\n}\n\nbody.background-notebook-liked-switch .markdown-embed :is(.markdown-preview-view, .markdown-rendered),\nbody.background-notebook-liked-switch .cm-s-obsidian .cm-embed-block {\n  background: inherit !important;\n}\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-grid-notebook-1 .markdown-preview-view.markdown-rendered,\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-grid-notebook-1 .cm-s-obsidian .cm-scroller {\n  background: var(--bg-color-notebook);\n  background-image: linear-gradient(90deg, var(--grid-notebook-line-color-1) 3%, transparent 0), linear-gradient(var(--grid-notebook-line-color-1) 3%, transparent 0);\n  background-size: 20px 20px;\n}\n\nbody:not(.toggle-fixed-pattern).background-notebook-liked-switch .markdown-preview-view.markdown-rendered,\nbody:not(.toggle-fixed-pattern).background-notebook-liked-switch .cm-s-obsidian .cm-scroller {\n  background-attachment: local !important;\n}\n\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-dotted-notebook-1 .markdown-preview-view.markdown-rendered,\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-dotted-notebook-1 .cm-s-obsidian .cm-scroller {\n  background: var(--bg-color-notebook);\n  background-image: radial-gradient(var(--dotted-notebook-dot-color) 10%, transparent 0);\n  background-size: 22px 22px;\n  background-position: 8px 8px;\n}\n\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-dotted-notebook-2 .markdown-preview-view.markdown-rendered,\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-dotted-notebook-2 .cm-s-obsidian .cm-scroller {\n  background: var(--bg-color-notebook);\n  background-image: radial-gradient(var(--dotted-notebook-dot-color) 10%, transparent 0),\n    radial-gradient(var(--dotted-notebook-dot-color) 10%, transparent 0);\n  background-size: 30px 30px;\n  background-position: 0 0, 15px 15px;\n}\n\n/*https://www.jianshu.com/p/2b713844cfe9*/\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-grid-notebook-2 .markdown-preview-view.markdown-rendered,\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-grid-notebook-2 .cm-s-obsidian .cm-scroller {\n  background: var(--bg-color-notebook);\n  background-image:\n    linear-gradient(var(--grid-notebook-line-color-2) 1px, transparent 0),\n    linear-gradient(90deg, var(--grid-notebook-line-color-2) 1px,transparent 0),\n    linear-gradient(var(--grid-notebook-line-color-1) 1px,\n    transparent 0),\n    linear-gradient(90deg,var(--grid-notebook-line-color-1) 1px,\n    transparent 0);\n  background-size: 75px 75px, 75px 75px, 15px 15px, 15px 15px;\n}\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-1 .markdown-preview-view.markdown-rendered,\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-1 .cm-s-obsidian .cm-scroller {\n  background: var(--stripe-notebook-stripe-color);\n  background-image: repeating-linear-gradient(135deg,\n  hsla(0,0%,100%,.03), hsla(0,0%,100%,.03) 13px, transparent 0, transparent 30px);\n}\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-1.theme-light .markdown-preview-view.markdown-rendered,\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-1.theme-light .cm-s-obsidian .cm-scroller {\n  background: var(--stripe-notebook-stripe-color);\n  background-image: repeating-linear-gradient(135deg,\n  hsla(0,0%,100%,.3), hsla(0,0%,100%,.3) 13px, transparent 0, transparent 30px);\n}\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-2 .markdown-preview-view.markdown-rendered,\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-2 .cm-s-obsidian .cm-scroller {\n  background: var(--stripe-notebook-stripe-color);\n  background-image:repeating-linear-gradient(45deg,\n  hsla(0,0%,100%,.025), hsla(0,0%,100%,.025) 20px, transparent 0, transparent 60px), repeating-linear-gradient(-45deg, hsla(0,0%,100%,.025), hsla(0,0%,100%,.025) 20px, transparent 0, transparent 60px);\n}\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-2.theme-light .markdown-preview-view.markdown-rendered,\nbody.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-2.theme-light .cm-s-obsidian .cm-scroller {\n  background: var(--stripe-notebook-stripe-color);\n  background-image:repeating-linear-gradient(45deg,\n  hsla(0,0%,100%,.3), hsla(0,0%,100%,.3) 20px, transparent 0, transparent 60px), repeating-linear-gradient(-45deg, hsla(0,0%,100%,.3), hsla(0,0%,100%,.3) 20px, transparent 0, transparent 60px);\n}\n\n.workspace-leaf-content .floating-toc-div+.markdown-source-view .cm-editor {\n  padding-left: 0;\n}\n\nbody.toggle-split-note-background .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-leaf-content .markdown-rendered,\nbody.toggle-split-note-background .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tab-container .workspace-leaf-content .cm-scroller,\nbody.toggle-split-note-background .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tab-container .workspace-leaf-content .markdown-reading-view {\n  background: initial;\n}\n\nbody.background-image-settings-switch .workspace-split.mod-root .workspace-leaf:nth-child(n) .workspace-leaf-content[data-type=\"markdown\"]::before {\n  content: '';\n  display: block;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  opacity: var(--bg-markdown-page-opacity-cp,0.25);\n  background-size: cover;\n}\n\n\nbody.background-image-settings-switch.background-image-settings-markdown-page-transparent .workspace-split.mod-root {\n  --background-primary: transparent;\n  --tab-outline-color:transparent;\n}\n\nbody.background-image-settings-switch.background-image-settings-markdown-page-transparent.theme-dark .workspace-split.mod-root .workspace-tab-header.is-active {\n  background-color: transparent;\n}\nbody.background-image-settings-switch.background-image-settings-markdown-page-transparent .mod-root .workspace-tabs .workspace-leaf {\n  background-color: unset;\n}\n\n\n \n\nbody.background-image-settings-switch.background-image-settings-markdown-page-custom.theme-dark .workspace-split.mod-root .workspace-leaf .workspace-leaf-content[data-type=\"markdown\"]::before {\n  background-image: var(--background-markdown-page-theme-dark-custom);\n}\n\nbody.background-image-settings-switch.background-image-settings-markdown-page-custom.theme-light .workspace-split.mod-root .workspace-leaf .workspace-leaf-content[data-type=\"markdown\"]::before {\n  background-image: var(--background-markdown-page-theme-light-custom);\n}\nbody.background-image-settings-switch.background-image-settings-markdown-page-custom .workspace-split.mod-root .workspace-leaf .workspace-leaf-content[data-type=\"markdown\"]::before {\nbackground-size:unset;\nbackground-color: var(--custom-markdown-page-background-color);\nopacity: var(--bg-markdown-page-opacity-cp,1);\n}\n/* ================================== */\n/* ============= publish ============ */\n/* ================================== */\n/*\n.site-body .site-body-left-column-site-name {\n  color: var(--theme-color);\n  font-size: 2.5em;\n}\n\n.modal.mod-publish .file-tree-item-checkbox {\n  filter: hue-rotate(var(--theme-color));\n}\n\n.graph-view-outer .graph-view-container,\n.site-body-left-column,\n.site-body-left-column:before {\n  background-color: var(--background-secondary);\n}\n\n.theme-light .site-body-left-column,\n.theme-light .site-body-left-column:before {\n  background-color: var(--background-secondary-alt-bg-4-bt-publish);\n}\n\n.nav-view-outer .tree-item .tree-item .tree-item-children {\n  margin-left: 12px;\n  padding-left: 0;\n  border-left: 1px solid var(--background-modifier-border);\n  border-radius: 0;\n  transition: all 400ms ease-in;\n}\n\n.nav-view-outer .tree-item .tree-item .tree-item-children:hover {\n  border-left-color: var(--theme-color);\n}\n\nbody:not(.default-icons) .nav-view-outer .tree-item-self.collapse-icon {\n  left: 0px;\n  top: 7px;\n  margin-top: 0px;\n}\n\nbody:not(.default-icons) .nav-view-outer .tree-item-self .tree-item-icon::before {\n  content: \"↓\";\n  font-size: 14px;\n  font-family: 'Inter';\n  font-weight: bold;\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n}\n\nbody:not(.default-icons) .nav-view-outer .tree-item-self .tree-item-icon svg {\n  display: none;\n  color: var(--accent-strong);\n  height: 7px;\n  width: 7px;\n}\n\nbody:not(.default-icons) .nav-view-outer .tree-item.is-collapsed .tree-item-icon.collapse-icon {\n  transform: translateX(0px) translateY(0px) rotate(-90deg);\n  opacity: 0.5;\n}\n\n.nav-view-outer .tree-item-self.mod-active {\n  --background-secondary-alt: var(--interactive-accent);\n  --text-normal: #ffffff;\n}\n\n.nav-view-outer .tree-item .tree-item-self.is-clickable {\n  color: var(--text-normal);\n  font-weight: 600;\n}\n\n.nav-view-outer .tree-item .tree-item-self.is-clickable:hover {\n  background-color: var(--background-secondary-alt);\n}\n\n.nav-view-outer .tree-item.is-collapsed .tree-item-self.is-clickable {\n  color: var(--text-muted);\n}\n\n.outline-view-outer .tree-item .tree-item-children {\n  margin-left: 12px;\n  padding-left: 0;\n  border-left: 1px solid var(--background-modifier-border);\n  border-radius: 0;\n  transition: all 400ms ease-in;\n}\n\n.outline-view-outer .tree-item.tree-item-children:hover {\n  border-left-color: var(--theme-color);\n}\n\n.outline-view-outer .tree-item-self {\n  padding: 2px 6px 2px 10px;\n}\n\n.outline-view-outer .tree-item-self.mod-active {\n  background-color: var(--theme-color-translucent-015);\n}\n\n.site-body :is(.markdown-preview-view,.markdown-rendered) .tag:not(.token) {\n  color: var(--tag-text);\n}\n\n.site-body .publish-renderer :is(.markdown-preview-view,.markdown-rendered) ol>li {\n  border-left: 0.125em solid var(--list-ol-block-color);\n}\n\n.site-body .publish-renderer :is(.markdown-preview-view,.markdown-rendered) ul>li:not(.task-list-item) {\n  border-left: 0.125em solid var(--list-ul-block-color);\n}\n*/\n\n/* Coloured Folders for Blue Topaz 0-Z, v0.3\nmodified from the snippet created by @Lithou */\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder-title {\n  margin-bottom: 0;\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order).theme-dark {\n  --FoldText: #cbcbcb;\n}\n\n/*color scheme-1, high transparency*/\nbody.bt-toggle-colorful-folder.folder-colorful-one.theme-dark {\n  --Fold0: #ff40403d;\n  --Fold1: #f31f7448;\n  --Fold2: #be25ff49;\n  --Fold3: #7337ff67;\n  --Fold4: #2f4bff65;\n  --Fold5: #1372d188;\n  --Fold6: #0289d17e;\n  --Fold7: #0096a77e;\n  --Fold8: #00796b94;\n  --Fold9: #388e3c80;\n  --FoldA: #689f3883;\n  --FoldB: #afb42b81;\n  --FoldC: #f9ab255d;\n  --FoldD: #ff910063;\n  --FoldE: #ef6c0067;\n  --FoldF: #d8421559;\n  --FoldG: #1e5f74ca;\n  --FoldH: #c53571b9;\n  --FoldI: #4b5d67d0;\n  --FoldJ: #295d6d7a;\n  --FoldK: #5734d691;\n  --FoldL: #4c4c6dda;\n  --FoldM: #ad62aab9;\n  --FoldN: #c490e4a1;\n  --FoldO: #b42a3d8e;\n  --FoldP: #af173880;\n  --FoldQ: #4c25a0b2;\n  --FoldR: #5f84dbc4;\n  --FoldS: #c06c84ce;\n  --FoldT: #684656d5;\n  --FoldU: #797d8581;\n  --FoldV: #556e53e3;\n  --FoldW: #2f5241b2;\n  --FoldX: #834c69ed;\n  --FoldY: #df85c885;\n  --FoldZ: #362222ea;\n}\n\n/*color scheme-2, low transparency*/\nbody.bt-toggle-colorful-folder.folder-colorful-two.theme-dark {\n  --Fold0: #823131d7;\n  --Fold1: #96174ad7;\n  --Fold2: #731a9ad7;\n  --Fold3: #543796d7;\n  --Fold4: #2b3ba2d7;\n  --Fold5: #185898d7;\n  --Fold6: #1e6b95d7;\n  --Fold7: #187782d7;\n  --Fold8: #0d6a5fd7;\n  --Fold9: #1f7624d7;\n  --FoldA: #2f6007ef;\n  --FoldB: #6c7e12ef;\n  --FoldC: #7b7e0def;\n  --FoldD: #7f6c0cef;\n  --FoldE: #7d550cef;\n  --FoldF: #76350aef;\n  --FoldG: #671c14ef;\n  --FoldH: #710d0def;\n  --FoldI: #7a0d36ef;\n  --FoldJ: #710b52ef;\n  --FoldK: #710e7aef;\n  --FoldL: #621287ef;\n  --FoldM: #470f7bef;\n  --FoldN: #381182ef;\n  --FoldO: #1c1089ef;\n  --FoldP: #192698ef;\n  --FoldQ: #1737a2ef;\n  --FoldR: #0e4295ef;\n  --FoldS: #0f5495ef;\n  --FoldT: #0f5f8eef;\n  --FoldU: #0d687eef;\n  --FoldV: #0a7373ef;\n  --FoldW: #0d6e5def;\n  --FoldX: #0b6542ef;\n  --FoldY: #0a642def;\n  --FoldZ: #105b09ef;\n}\n\n/*color scheme-3*/\nbody.bt-toggle-colorful-folder.folder-colorful-three.theme-dark {\n  --Fold0: #002044d7;\n  --Fold1: #042b58d7;\n  --Fold2: #032d5dd7;\n  --Fold3: #032f60d7;\n  --Fold4: #04356ed7;\n  --Fold5: #053c7ad7;\n  --Fold6: #0f4a8ed7;\n  --Fold7: #18559ad7;\n  --Fold8: #1e5fa9d7;\n  --Fold9: #296bb6d7;\n  --FoldA: #003404ef;\n  --FoldB: #014406ef;\n  --FoldC: #004c06ef;\n  --FoldD: #005607ef;\n  --FoldE: #005d08ef;\n  --FoldF: #006c09ef;\n  --FoldG: #007a06ef;\n  --FoldH: #4e3200ef;\n  --FoldI: #5d3c00ef;\n  --FoldJ: #6c4600ef;\n  --FoldK: #784e00ef;\n  --FoldL: #8c5b00ef;\n  --FoldM: #915e00ef;\n  --FoldN: #a06800ef;\n  --FoldO: #5d0000ef;\n  --FoldP: #640000ef;\n  --FoldQ: #780000ef;\n  --FoldR: #870000ef;\n  --FoldS: #930000ef;\n  --FoldT: #a20000ef;\n  --FoldU: #0a0f58ef;\n  --FoldV: #050b64ef;\n  --FoldW: #091075ef;\n  --FoldX: #131a82ef;\n  --FoldY: #1f2791ef;\n  --FoldZ: #2a3296ef;\n}\n\n/*color scheme-4*/\nbody.bt-toggle-colorful-folder.folder-colorful-four.theme-dark {\n  --Fold0: #002f65d7;\n  --Fold1: #003675d7;\n  --Fold2: #003d82d7;\n  --Fold3: #004696d7;\n  --Fold4: #0053b1d7;\n  --Fold5: #0657b5d7;\n  --Fold6: #0b66ced7;\n  --Fold7: #156cd0d7;\n  --Fold8: #2278dad7;\n  --Fold9: #2879d6d7;\n  --FoldA: #001e5fef;\n  --FoldB: #002473ef;\n  --FoldC: #002d90ef;\n  --FoldD: #0135a5ef;\n  --FoldE: #073bb6ef;\n  --FoldF: #0d46c2ef;\n  --FoldG: #1253d6ef;\n  --FoldH: #002351ef;\n  --FoldI: #00306eef;\n  --FoldJ: #05336fef;\n  --FoldK: #093c7eef;\n  --FoldL: #0f4489ef;\n  --FoldM: #19529def;\n  --FoldN: #2965b3ef;\n  --FoldO: #003156ef;\n  --FoldP: #003f6fef;\n  --FoldQ: #004b84ef;\n  --FoldR: #005190ef;\n  --FoldS: #07599bef;\n  --FoldT: #1c6db0ef;\n  --FoldU: #003d5aef;\n  --FoldV: #004d71ef;\n  --FoldW: #005c87ef;\n  --FoldX: #066996ef;\n  --FoldY: #1379a9ef;\n  --FoldZ: #1b89bbef;\n}\n\n/*color scheme-5*/\nbody.bt-toggle-colorful-folder.folder-colorful-five.theme-dark {\n  --Fold0: #7b7b05d7;\n  --Fold1: #2d7a04d7;\n  --Fold2: #097a4bd7;\n  --Fold3: #09756fd7;\n  --Fold4: #0a6b7ad7;\n  --Fold5: #0b556ed7;\n  --Fold6: #0b426fd7;\n  --Fold7: #0d226ed7;\n  --Fold8: #350e6cd7;\n  --Fold9: #5b0254d7;\n  --FoldA: #350e6cd7;\n  --FoldB: #0d226ed7;\n  --FoldC: #0b426fd7;\n  --FoldD: #0b556ed7;\n  --FoldE: #09756fd7;\n  --FoldF: #097a4bd7;\n  --FoldG: #2d7a04d7;\n  --FoldH: #7b7b05d7;\n  --FoldI: #2d7a04d7;\n  --FoldJ: #097a4bd7;\n  --FoldK: #09756fd7;\n  --FoldL: #0b556ed7;\n  --FoldM: #0b556ed7;\n  --FoldN: #0b426fd7;\n  --FoldO: #0d226ed7;\n  --FoldP: #350e6cd7;\n  --FoldQ: #5b0254d7;\n  --FoldR: #350e6cd7;\n  --FoldS: #0d226ed7;\n  --FoldT: #0b426fd7;\n  --FoldU: #0b556ed7;\n  --FoldV: #0b556ed7;\n  --FoldW: #09756fd7;\n  --FoldX: #097a4bd7;\n  --FoldY: #2d7a04d7;\n  --FoldZ: #7b7b05d7;\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order).theme-light {\n  --FoldText: #000000;\n}\n\n/*color scheme-1, high transparency*/\nbody.bt-toggle-colorful-folder.folder-colorful-one.theme-light {\n  --Fold0: #f3bfbf54;\n  --Fold1: #ffbdd769;\n  --Fold2: #ebbcff69;\n  --Fold3: #ccb7ff65;\n  --Fold4: #b1bcff5e;\n  --Fold5: #98c6f45d;\n  --Fold6: #99ceeb5d;\n  --Fold7: #81dee95d;\n  --Fold8: #6ec7bc5b;\n  --Fold9: #8dde9162;\n  --FoldA: #a5dd745e;\n  --FoldB: #c9d96c5e;\n  --FoldC: #dbdd6a65;\n  --FoldD: #e5cb5965;\n  --FoldE: #e6b25365;\n  --FoldF: #e5915965;\n  --FoldG: #df756765;\n  --FoldH: #f46f6f65;\n  --FoldI: #f16fa16e;\n  --FoldJ: #ec6bc66e;\n  --FoldK: #de6ce86e;\n  --FoldL: #be62e96e;\n  --FoldM: #ad6cea6e;\n  --FoldN: #966ce66e;\n  --FoldO: #786be56e;\n  --FoldP: #717ce26e;\n  --FoldQ: #748fe76e;\n  --FoldR: #6f9ee96e;\n  --FoldS: #6fade86e;\n  --FoldT: #68b8e76e;\n  --FoldU: #63c9e36e;\n  --FoldV: #6ed3d36e;\n  --FoldW: #61c0b06e;\n  --FoldX: #4dbc916e;\n  --FoldY: #52bb7b6e;\n  --FoldZ: #5fbb576e;\n}\n\n/*color scheme-2, low transparency*/\nbody.bt-toggle-colorful-folder.folder-colorful-two.theme-light {\n  --Fold0: #ffe2e2;\n  --Fold1: #ffdee9;\n  --Fold2: #f6e1ff;\n  --Fold3: #e9dfff;\n  --Fold4: #e1e5ff;\n  --Fold5: #d4eaff;\n  --Fold6: #cdedff;\n  --Fold7: #ccf2f7;\n  --Fold8: #d5f8f4;\n  --Fold9: #d8f8da;\n  --FoldA: #ecffdb;\n  --FoldB: #f4fbd2;\n  --FoldC: #f7f8cf;\n  --FoldD: #f7f0cc;\n  --FoldE: #fdeed2;\n  --FoldF: #ffe4d3;\n  --FoldG: #ffdbd6;\n  --FoldH: #ffdfdf;\n  --FoldI: #ffdce9;\n  --FoldJ: #ffdbf4;\n  --FoldK: #fcddff;\n  --FoldL: #f4dbff;\n  --FoldM: #ecd7ff;\n  --FoldN: #e5d7ff;\n  --FoldO: #dad6ff;\n  --FoldP: #d6daff;\n  --FoldQ: #d7e1ff;\n  --FoldR: #d5e5ff;\n  --FoldS: #d3eaff;\n  --FoldT: #d3eeff;\n  --FoldU: #d6f7ff;\n  --FoldV: #d6ffff;\n  --FoldW: #dafff8;\n  --FoldX: #dcfcef;\n  --FoldY: #dcffe9;\n  --FoldZ: #defcdc;\n}\n\n\n/*color scheme-3*/\nbody.bt-toggle-colorful-folder.folder-colorful-three.theme-light {\n  --Fold0: #80dc87ef;\n  --Fold1: #8fe296ef;\n  --Fold2: #9de5a3ef;\n  --Fold3: #b1ebb6ef;\n  --Fold4: #bbebbfef;\n  --Fold5: #c8ebcbef;\n  --Fold6: #d9ecdaef;\n  --FoldG: #50a2ffd7;\n  --FoldF: #60aaffd7;\n  --FoldE: #6eb2ffd7;\n  --FoldD: #76b6ffd7;\n  --FoldC: #89c0ffd7;\n  --FoldB: #93c5ffd7;\n  --FoldA: #aad2ffd7;\n  --Fold9: #bbdbffd7;\n  --Fold8: #c8e2ffd7;\n  --Fold7: #d2e7ffd7;\n  --FoldH: #ffbc40ef;\n  --FoldI: #ffc75fef;\n  --FoldJ: #ffcd71ef;\n  --FoldK: #ffd485ef;\n  --FoldL: #ffe0a6ef;\n  --FoldM: #ffe7bbef;\n  --FoldN: #ffedcbef;\n  --FoldO: #ff7676ef;\n  --FoldP: #ff9494ef;\n  --FoldQ: #ffa1a1ef;\n  --FoldR: #ffb8b8ef;\n  --FoldS: #ffcbcbef;\n  --FoldT: #ffe1e1ef;\n  --FoldU: #a38fffef;\n  --FoldV: #b09fffef;\n  --FoldW: #c2b5ffef;\n  --FoldX: #d2c6ffef;\n  --FoldY: #e0daffef;\n  --FoldZ: #eae4ffef;\n}\n\n/*color scheme-4*/\nbody.bt-toggle-colorful-folder.folder-colorful-four.theme-light {\n  --Fold0: #50a2ffd7;\n  --Fold1: #60aaffd7;\n  --Fold2: #6eb2ffd7;\n  --Fold3: #76b6ffd7;\n  --Fold4: #89c0ffd7;\n  --Fold5: #93c5ffd7;\n  --Fold6: #aad2ffd7;\n  --Fold7: #bbdbffd7;\n  --Fold8: #c8e2ffd7;\n  --Fold9: #d2e7ffd7;\n  --FoldA: #709effef;\n  --FoldB: #81a9ffef;\n  --FoldC: #92b5ffef;\n  --FoldD: #a4c1ffef;\n  --FoldE: #b4cbffef;\n  --FoldF: #c3d6ffef;\n  --FoldG: #d4e2ffef;\n  --FoldH: #7ab3ffef;\n  --FoldI: #86bbffef;\n  --FoldJ: #9dc7ffef;\n  --FoldK: #acd0ffef;\n  --FoldL: #b1d3ffef;\n  --FoldM: #c6dfffef;\n  --FoldN: #d1e5ffef;\n  --FoldO: #80c8ffef;\n  --FoldP: #97d2ffef;\n  --FoldQ: #a9daffef;\n  --FoldR: #b7e0ffef;\n  --FoldS: #c8e6ffef;\n  --FoldT: #d9eeffef;\n  --FoldU: #7dd6ffef;\n  --FoldV: #94ddffef;\n  --FoldW: #a4e2ffef;\n  --FoldX: #b5e8ffef;\n  --FoldY: #c5edffef;\n  --FoldZ: #d2f1ffef;\n}\n\n/*color scheme-5*/\nbody.bt-toggle-colorful-folder.folder-colorful-five.theme-light {\n  --Fold0: #e4e483d7;\n  --Fold1: #bde7a7d7;\n  --Fold2: #9de2c5d7;\n  --Fold3: #93dad6d7;\n  --Fold4: #9de2ecd7;\n  --Fold5: #8ddcf7d7;\n  --Fold6: #8acaffd7;\n  --Fold7: #aebdf3d7;\n  --Fold8: #cab2ebd7;\n  --Fold9: #e9b1e5d7;\n  --FoldA: #cab2ebd7;\n  --FoldB: #aebdf3d7;\n  --FoldC: #8acaffd7;\n  --FoldD: #9de2ecd7;\n  --FoldE: #93dad6d7;\n  --FoldF: #9de2c5d7;\n  --FoldG: #bde7a7d7;\n  --FoldH: #e4e483d7;\n  --FoldI: #bde7a7d7;\n  --FoldJ: #9de2c5d7;\n  --FoldK: #93dad6d7;\n  --FoldL: #9de2ecd7;\n  --FoldM: #8ddcf7d7;\n  --FoldN: #8acaffd7;\n  --FoldO: #aebdf3d7;\n  --FoldP: #cab2ebd7;\n  --FoldQ: #e9b1e5d7;\n  --FoldR: #cab2ebd7;\n  --FoldS: #aebdf3d7;\n  --FoldT: #8acaffd7;\n  --FoldU: #8ddcf7d7;\n  --FoldV: #9de2ecd7;\n  --FoldW: #93dad6d7;\n  --FoldX: #9de2c5d7;\n  --FoldY: #bde7a7d7;\n  --FoldZ: #e4e483d7;\n}\n\n/*color scheme-custom*/\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) {\n  --Fold0: hue-rotate(350deg);\n  --Fold1: hue-rotate(340deg);\n  --Fold2: hue-rotate(330deg);\n  --Fold3: hue-rotate(320deg);\n  --Fold4: hue-rotate(310deg);\n  --Fold5: hue-rotate(300deg);\n  --Fold6: hue-rotate(290deg);\n  --Fold7: hue-rotate(280deg);\n  --Fold8: hue-rotate(270deg);\n  --Fold9: hue-rotate(260deg);\n  --FoldA: hue-rotate(250deg);\n  --FoldB: hue-rotate(240deg);\n  --FoldC: hue-rotate(230deg);\n  --FoldD: hue-rotate(220deg);\n  --FoldE: hue-rotate(210deg);\n  --FoldF: hue-rotate(200deg);\n  --FoldG: hue-rotate(190deg);\n  --FoldH: hue-rotate(180deg);\n  --FoldJ: hue-rotate(170deg);\n  --FoldK: hue-rotate(160deg);\n  --FoldL: hue-rotate(150deg);\n  --FoldM: hue-rotate(140deg);\n  --FoldN: hue-rotate(130deg);\n  --FoldO: hue-rotate(120deg);\n  --FoldP: hue-rotate(110deg);\n  --FoldQ: hue-rotate(100deg);\n  --FoldR: hue-rotate(90deg);\n  --FoldS: hue-rotate(80deg);\n  --FoldT: hue-rotate(70deg);\n  --FoldU: hue-rotate(60deg);\n  --FoldV: hue-rotate(50deg);\n  --FoldW: hue-rotate(40deg);\n  --FoldX: hue-rotate(30deg);\n  --FoldY: hue-rotate(20deg);\n  --FoldZ: hue-rotate(10deg);\n}\n\nbody.bt-toggle-colorful-folder.folder-colorful-six {\n  --Fold0: #fc5c65;\n  --Fold1: #fd9644;\n  --Fold2: #fed330;\n  --Fold3: #26de81;\n  --Fold4: #2bcbba;\n  --Fold5: #45aaf2;\n  --Fold6: #4b7bec;\n  --Fold7: #a55eea;\n  --Fold8: #d1d8e0;\n  --Fold9: #778ca3;\n  --FoldA: #eb3b5a;\n  --FoldB: #fa8231;\n  --FoldC: #f7b731;\n  --FoldD: #20bf6b;\n  --FoldE: #0fb9b1;\n  --FoldF: #2d98da;\n  --FoldG: #3867d6;\n  --FoldH: #8854d0;\n  --FoldI: #a5b1c2;\n  --FoldJ: #4b6584;\n  --FoldK: #fc5c65;\n  --FoldL: #fd9644;\n  --FoldM: #fed330;\n  --FoldN: #26de81;\n  --FoldO: #2bcbba;\n  --FoldP: #45aaf2;\n  --FoldQ: #4b7bec;\n  --FoldR: #a55eea;\n  --FoldS: #d1d8e0;\n  --FoldT: #778ca3;\n  --FoldU: #eb3b5a;\n  --FoldV: #fa8231;\n  --FoldW: #f7b731;\n  --FoldX: #20bf6b;\n  --FoldY: #0fb9b1;\n  --FoldZ: #2d98da;\n}\n/* =======folder-colorful-custom============= */\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder .nav-folder-title:hover,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder .nav-file-title:hover{\n  font-weight: bold;\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title+.nav-folder-children .nav-file-title.is-active {\n  opacity: 0.8;\n  background-color: var(--folder-colorful-custom-color);\n}\n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"0\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"0\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"0\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold0);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"1\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"1\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"1\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold1);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"2\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"2\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"2\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold2);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"3\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"3\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"3\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold3);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"4\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"4\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"4\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold4);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"5\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"5\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"5\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold5);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"6\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"6\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"6\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold6);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"7\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"7\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"7\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold7);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"8\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"8\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"8\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold8);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"9\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"9\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"9\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--Fold9);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"A\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"A\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"A\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldA);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"B\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"B\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"B\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldB);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"C\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"C\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"C\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldC);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"D\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"D\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"D\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldD);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"E\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"E\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"E\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldE);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"F\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"F\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"F\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldF);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"G\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"G\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"G\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldG);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"H\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"H\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"H\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldH);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"I\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"I\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"I\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldI);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"J\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"J\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"J\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldJ);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"K\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"K\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"K\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldK);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"L\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"L\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"L\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldL);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"M\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"M\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"M\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldM);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"N\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"N\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"N\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldN);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"O\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"O\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"O\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldO);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"P\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"P\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"P\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldP);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Q\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Q\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Q\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldQ);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"R\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"R\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"R\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldR);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"S\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"S\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"S\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldS);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"T\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"T\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"T\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldT);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"U\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"U\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"U\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldU);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"V\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"V\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"V\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldV);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"W\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"W\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"W\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldW);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"X\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"X\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"X\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldX);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Y\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Y\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Y\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldY);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Z\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Z\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Z\"]+.nav-folder-children .nav-file-title.is-active {\n  filter: var(--FoldZ);\n}\n\n/* ===folder-style-change-options-colorful-order ============ */\n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder .nav-file-title {\ncolor: var(--FoldText);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder .nav-folder-title.is-active,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder .nav-folder-title:hover {\n  font-weight: bold;\n  filter: saturate(150%);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+2) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+2) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold0);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+3) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+3) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold1);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+4) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+4) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold2);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+5) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+5) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold3);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+6) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+6) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold4);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+7) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+7) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold5);\n}\n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+8) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+8) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold6);\n}\n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+9) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+9) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold7);\n}\n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+10) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+10) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold8);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+11) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+11) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--Fold9);\n}\n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+12) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+12) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--FoldA);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+13) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+13) .nav-folder-title+.nav-folder-children {\n --tab-color: var(--FoldB);\n}\n \n\n/*=====folder colorful title=====*/\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder .nav-folder-title.is-active,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder .nav-file-title.is-active,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder .nav-folder-title:hover,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder .nav-file-title:hover{\n  font-weight: bold;\n  filter: saturate(150%);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder .nav-folder-title {\n  font-weight: 600;\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+2) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+2) .nav-file-title {\n --tab-color: var(--Fold0);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+3) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+3) .nav-file-title {\n --tab-color: var(--Fold1);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+4) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+4) .nav-file-title{\n --tab-color: var(--Fold2);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+5) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+5) .nav-file-title {\n --tab-color: var(--Fold3);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+6) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+6) .nav-file-title {\n --tab-color: var(--Fold4);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+7) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+7) .nav-file-title {\n --tab-color: var(--Fold5);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+8) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+8) .nav-file-title {\n --tab-color: var(--Fold6);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+9) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+9) .nav-file-title {\n --tab-color: var(--Fold7);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+10) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+10) .nav-file-title {\n --tab-color: var(--Fold8);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+11) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+11) .nav-file-title {\n --tab-color: var(--Fold9);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+12) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+12) .nav-file-title {\n --tab-color: var(--FoldA);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+13) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+13) .nav-file-title {\n --tab-color: var(--FoldB);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-files-container>div>.tree-item.nav-folder .nav-folder-title {\ncolor: var(--tab-color);\nfilter: brightness(0.8);\n}\nbody.theme-dark.bt-toggle-colorful-folder.folder-style-change-options-colorful-title:not(.folder-colorful-six) .nav-files-container>div>.tree-item.nav-folder .nav-folder-title,\nbody.theme-dark.bt-toggle-colorful-folder.folder-style-change-options-colorful-title:not(.folder-colorful-six)  .nav-files-container>div>.tree-item.nav-folder .nav-file-title {\nfilter: brightness(2);\n}\n/*=====folder-colorful-custom=====*/\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-order.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder .nav-folder-title+.nav-folder-children {\n  background-color: var(--folder-colorful-custom-color);\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order,.folder-style-change-options-colorful-title) {\n  --folder-colorful-custom-color: var(--theme-color);\n}\n\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-files-container>div>.tree-item.nav-folder .nav-folder-title.is-active,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-files-container>div>.tree-item.nav-folder .nav-file-title.is-active,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-files-container>div>.tree-item.nav-folder .nav-folder-title:hover,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-files-container>div>.tree-item.nav-folder .nav-file-title:hover{\n  font-weight: bold;\n  filter: saturate(150%);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-title.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder .nav-file-title {\n  color:var(--folder-colorful-custom-color);\n  font-weight: 600;\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+2) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+2) .nav-file-title {\n  filter: var(--Fold0);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+3) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+3) .nav-file-title {\n  filter: var(--Fold1);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+4) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+4) .nav-file-title {\n  filter: var(--Fold2);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+5) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+5) .nav-file-title {\n  filter: var(--Fold3);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+6) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+6) .nav-file-title {\n  filter: var(--Fold4);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+7) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+7) .nav-file-title {\n  filter: var(--Fold5);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+8) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+8) .nav-file-title {\n  filter: var(--Fold6);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+9) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+9) .nav-file-title {\n  filter: var(--Fold7);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+10) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+10) .nav-file-title {\n  filter: var(--Fold8);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+11) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+11) .nav-file-title {\n  filter: var(--Fold9);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+12) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+12) .nav-file-title {\n  filter: var(--FoldA);\n}\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+13) .nav-folder-title,\nbody.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default):not(.folder-style-change-options-colorful-tab-liked) .nav-files-container>div>.tree-item.nav-folder:nth-child(12n+13) .nav-file-title {\n  filter: var(--FoldB);\n}\n\n/* ===folder-style-change-options-colorful-borde============ */\n \n\nbody.theme-dark.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-border).folder-colorful-custom:not(.is-grabbing) .workspace-leaf-content[data-type=\"file-explorer\"] .nav-folder-title, \nbody.theme-dark.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-border).folder-colorful-custom:not(.is-grabbing) .workspace-leaf-content[data-type=\"file-explorer\"] .tree-item-self.is-clickable.nav-folder-title {\n  color: color-mix(in hsl, var(--folder-colorful-custom-color), white 38%);\n  filter: var(--tab-color);\n}\n \n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-border.folder-colorful-custom  .nav-files-container>div>.tree-item.nav-folder {\n  border-left: 2px solid var(--folder-colorful-custom-color);\n  filter: var(--tab-color) ;\n}\n \n/* ===folder-style-change-options-colorful-tab-liked============ */\n \nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder {\n  border: none;\n  \n  border-left: 2px solid var(--folder-colorful-custom-color);\n  filter: var(--tab-color)  ;\n  @supports (border: 1px solid color-mix(in srgb, var(--folder-colorful-custom-color) 30%, var(--background-secondary))) {\n    border: 1px solid color-mix(in srgb, var(--folder-colorful-custom-color) 30%, var(--background-secondary));\n  }\n}\n \n\n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder.is-collapsed>.tree-item-self.is-clickable.nav-folder-title::before {\n \n  background-color: var(--folder-colorful-custom-color);\n  filter: var(--tab-color);\n}\n  \nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked.folder-colorful-custom .nav-files-container>div>.tree-item.nav-folder>.tree-item-self.is-clickable.nav-folder-title::before {\n \n  background-color: var(--folder-colorful-custom-color);\n  filter: var(--tab-color);\n}\n  \n \n\n/* Set up explorer container margins */\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-files-container {\n  margin: 0 5px;\n}\n\n/* Remove collapse arrow from top level folders */\nbody.remove-arrow.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title>.nav-folder-collapse-indicator {\n  display: none;\n}\n\n/* Top Level Folder Titles */\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title {\n color: var(--FoldText);\n  padding: var(--nav-item-parent-padding);\n  padding-bottom: 4px;\n  /* padding-left: 3px; */\n   margin-top: 3px;\n  /* space between top level sections */\n  border-radius: 5px 5px 0 0;\n}\n\n/* Rounded borders */\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-files-container>div>.tree-item.nav-folder.is-collapsed>.nav-folder-title {\n  border-radius: 5px;\n}\n\n/* General Nav Folder Children (this is the part that expands from each top level folder) */\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-files-container>div>.tree-item.nav-folder>.nav-folder-children {\n  margin-left: 0;\n  border-radius: 0 0 5px 5px;\n  padding-bottom: 5px;\n  border-left: 0px solid;\n  padding-left:1em;\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-file-title {\n  padding-left: 5px;\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-file-title-content {\ncolor: var(--FoldText);\n}\n\n/*\nbody.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder>.nav-folder-children {\n  margin-left: 0;\n  padding-left: 0;\n  border-left: unset !important;\n  border-radius: 0;\n  transition: all 400ms ease-in;\n}\n*/\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order).is-mobile .nav-folder-title {\n  margin-bottom: 0;\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder-children .nav-folder-children {\n  border-left: 1px solid var(--text-muted);\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order).is-mobile .nav-files-container>div>.tree-item.nav-folder>.nav-folder-children {\n  padding-bottom: 5px;\n}\n\n/* active file increase font size and removes normal highlight marker */\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-file-title.is-active {\n  background-color: var(--theme-color-translucent-015);\n}\n\n/* Adds hemisphere marker to active file instead */\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-file-title.is-active::before {\n  content: '';\n  position: absolute;\n  bottom: -1px;\n  left: 0;\n  height: 2px;\n  width: 100%;\n  background-image: linear-gradient(to right, var(--theme-color), transparent 90%);\n}\n\n\n\n/* 16 Top level Folders By Starting Digit (0-F)\nThese are set for me by leading number/letter which also ensures they are in the correct order when sorted alphabetically\nYou can change these to match your use case.\n*/\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"0\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"0\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"0\"]+.nav-folder-children .nav-file-title.is-active {\n  --tab-color: var(--Fold0);\n\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"1\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"1\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"1\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold1);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"2\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"2\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"2\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold2);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"3\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"3\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"3\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold3);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"4\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"4\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"4\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold4);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"5\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"5\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"5\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold5);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"6\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"6\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"6\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold6);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"7\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"7\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"7\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold7);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"8\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"8\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"8\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold8);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"9\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"9\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"9\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--Fold9);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"A\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"A\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"A\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldA);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"B\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"B\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"B\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldB);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"C\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"C\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"C\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldC);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"D\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"D\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"D\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldD);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"E\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"E\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"E\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldE);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"F\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"F\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"F\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldF);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"G\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"G\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"G\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldG);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"H\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"H\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"H\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldH);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"I\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"I\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"I\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldI);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"J\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"J\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"J\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldJ);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"K\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"K\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"K\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldK);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"L\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"L\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"L\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldL);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"M\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"M\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"M\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldM);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"N\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"N\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"N\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldN);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"O\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"O\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"O\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldO);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"P\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"P\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"P\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldP);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Q\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Q\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Q\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldQ);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"R\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"R\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"R\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldR);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"S\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"S\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"S\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldS);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"T\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"T\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"T\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldT);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"U\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"U\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"U\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldU);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"V\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"V\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"V\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldV);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"W\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"W\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"W\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldW);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"X\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"X\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"X\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldX);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Y\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Y\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Y\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldY);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Z\"],\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Z\"]+.nav-folder-children,\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title[data-path^=\"Z\"]+.nav-folder-children .nav-file-title.is-active {\n --tab-color: var(--FoldZ);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children .nav-file-title.is-active {\n  filter: hue-rotate(110deg);\n}\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order)  .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title +.nav-folder-children,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-files-container>div>.tree-item.nav-folder>.nav-folder-title +.nav-folder-children .nav-file-title.is-active {\n  background-color: var(--tab-color, hsla(var(--interactive-accent-hsl), 0.25));\n}\n/* Scrollbars eliminated\nbody.folder-style-change-options-colorful .workspace-leaf-content[data-type='file-explorer'] ::-webkit-scrollbar {\n  width: 0px;\n  height: 0px;\n}\n*/\n\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder-title:hover {\n  font-weight: bold;\n  filter: saturate(250%);\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .theme-dark .workspace-leaf-content[data-type=\"file-explorer\"] {\n  background-color: var(--background-secondary-alt);\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder.mod-root>.nav-folder-title {\n  background-color: initial;\n}\n\n/*style settings blockquote quotation marks*/\nbody.blockquote-style-quotation-mark .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before,\nbody.blockquote-style-quotation-mark .markdown-source-view.mod-cm6 .cm-blockquote-border:before {\n  border-left: none;\n}\nbody.blockquote-style-quotation-mark :is(.markdown-preview-view,.markdown-rendered) blockquote {\n  color: var(--text-normal);\n\n  background:transparent;\n}\n\nbody.blockquote-style-quotation-mark :is(.markdown-preview-view,.markdown-rendered) blockquote {\n  padding-left: 35px;\n  padding-right: 10px;\n  margin-inline-start: 1%;\n  margin-inline-end: 1%;\n  border-left-width: 0px;\n  border:none;\n}\n\nbody.blockquote-style-quotation-mark :is(.markdown-preview-view,.markdown-rendered) blockquote p {\n  position: relative;\n  margin-left: 0.7em;\n  margin-right: 0;\n  font-size: var(--font-size-preview-blockquote);\n}\n\nbody.blockquote-style-quotation-mark :is(.markdown-preview-view,.markdown-rendered) blockquote p:first-of-type::before {\n  content: '\\ee81';\n  font-size: 2em;\n  font-family: boxicons;\n  color: var(--text-folder-file-icon);\n  position: absolute;\n  top: -0.4em;\n  left: -1.2em;\n}\n\nbody.blockquote-style-quotation-mark\n.markdown-source-view.mod-cm6.is-live-preview\n.HyperMD-quote:not(.cm-active) > .cm-formatting.cm-formatting-quote.cm-quote::before {\n  content: '\\ee81';\n  font-size: 1.5em;\n  font-family: boxicons;\n  color: var(--text-folder-file-icon);\n  position: absolute;\n  margin-left: -0.8em;\n}\nbody.blockquote-style-quotation-mark .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote + .HyperMD-quote > .cm-formatting.cm-formatting-quote.cm-quote::before {\n  display: none;\n}\nbody.blockquote-style-quotation-mark .markdown-source-view.mod-cm6.is-live-preview .cm-content div.HyperMD-quote .cm-blockquote-border {\n  border: none;\n}\n\n/*speech bubble-1*/\nbody.blockquote-style-speech-bubble-one :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote {\n  position: relative;\n  color: var(--theme-color);\n  font-weight: normal;\n  line-height: 1.5;\n  margin-top: 2em;\n  margin-bottom: 2.5em;\n  border: 3px solid;\n  border-radius: 20px;\n  padding: 10px 15px;\n  background: var(--background-primary) !important;\n}\n\nbody.blockquote-style-speech-bubble-one .theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote {\n  background-color: var(--background-primary) !important;\n}\n\nbody.blockquote-style-speech-bubble-one :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote p {\n  color: var(--text-normal);\n}\n\nbody.blockquote-style-speech-bubble-one :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:after {\n  content: '';\n  position: absolute;\n  border: 2.5px solid var(--theme-color);\n  border-radius: 35px 0 0 0;\n  width: 1.75rem;\n  height: 3.45rem;\n  bottom: -3.65rem;\n  left: 1.8rem;\n  border-bottom: none;\n  border-left: none;\n  border-right: none;\n  z-index: 3;\n}\n\nbody.blockquote-style-speech-bubble-one :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:before {\n  content: '';\n  position: absolute;\n  width: 25px;\n  border: 4px solid var(--background-primary);\n  bottom: -4px;\n  left: 20px;\n  z-index: 2;\n}\n\n/*speech bubble-2*/\n/*adapted from https://codepen.io/mchernin34/pen/ojXvLq*/\nbody.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote {\n  position: relative;\n  padding: 10px;\n  margin-top: 1.5rem;\n  margin-bottom: 2.2rem;\n  border: 4px solid var(--theme-color);\n  text-align: center;\n  background: var(--background-primary);\n  -webkit-border-radius: 20px;\n  -moz-border-radius: 20px;\n  border-radius: 20px;\n  font-size: 1.2em;\n}\n\nbody.blockquote-style-speech-bubble-two .theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote {\n  background-color: var(--background-primary) !important;\n  border: 4px solid var(--theme-color);\n}\n\nbody.blockquote-style-speech-bubble-two.theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:before,\nbody.blockquote-style-speech-bubble-two.theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:after {\n  border-color: var(--theme-color);\n}\n\nbody.blockquote-style-speech-bubble-two.theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote> :first-child:before {\n  background: var(--theme-color);\n}\n\nbody.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:before {\n  content: '';\n  position: absolute;\n  z-index: 10;\n  bottom: -35px;\n  left: 50px;\n  width: 50px;\n  height: 29px;\n  border-style: solid;\n  border-width: 0 7px 4px 0;\n  border-color: var(--theme-color);\n  background: transparent;\n  -webkit-border-bottom-right-radius: 80px 50px;\n  -moz-border-radius-bottomright: 80px 50px;\n  border-bottom-right-radius: 80px 50px;\n  display: block;\n}\n\nbody.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:after {\n  content: '';\n  position: absolute;\n  z-index: 10;\n  bottom: -35px;\n  left: 49px;\n  width: 20px;\n  height: 29px;\n  border-style: solid;\n  border-width: 0 7px 4px 0;\n  border-color: var(--theme-color);\n  background: transparent;\n  -webkit-border-bottom-right-radius: 40px 50px;\n  -moz-border-radius-bottomright: 40px 50px;\n  border-bottom-right-radius: 40px 50px;\n  display: block;\n}\n\n/* creates a small circle to produce a rounded point where the two curves meet */\nbody.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote> :first-child:before {\n  content: '';\n  position: absolute;\n  bottom: -35px;\n  left: 47px;\n  width: 4px;\n  height: 4px;\n  background: var(--theme-color);\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n}\n\n/* creates a white rectangle to cover part of the oval border*/\nbody.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote> :first-child:after {\n  content: \"\";\n  position: absolute;\n  bottom: -10px;\n  left: 76px;\n  width: 24px;\n  height: 15px;\n  background: var(--background-primary);\n}\n\n/*blockquote-style-outline*/\nbody.blockquote-style-outline :is(.markdown-preview-view,.markdown-rendered) blockquote {\n  border: 3px solid var(--theme-color-translucent-04);\n  background-color: transparent;\n  border-radius: var(--radius-m);\n}\n\n/*blockquote-style-border-left*/\nbody.blockquote-style-border-left :is(.markdown-preview-view,.markdown-rendered) blockquote {\n  border-left: 3px solid var(--theme-color-translucent-04);\n  background-color: transparent;\n  border-radius: 0;\n}\n\nbody.background-settings-workplace-background-image .titlebar {\n  z-index: 1;\n}\n\nbody.background-settings-workplace-background-image.theme-light .titlebar-text,\nbody.background-settings-workplace-background-image.theme-dark .titlebar-text {\n  color: var(--text-normal);\n}\n\n\n\nbody .titlebar,\nbody .workspace-ribbon.mod-left {\n  --titlebar-background: var(--titlebar-background-focused);\n  border:none;\n}\n\n\n\n/*==========*/\nbody.background-settings-workplace-background-image .side-dock-ribbon-tab,\nbody.background-settings-workplace-background-image .side-dock-ribbon-action:not(:hover),\nbody.background-settings-workplace-style-high-transparency .side-dock-ribbon-tab,\nbody.background-settings-workplace-style-high-transparency .side-dock-ribbon-action:not(:hover) {\n  color: var(--text-normal);\n}\n\nbody.is-mobile.background-settings-workplace-background-image .workspace-split.mod-root {\n  background-color: transparent;\n}\nbody.is-mobile.background-settings-workplace-background-image:not(:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light,.background-settings-workplace-waves,.background-settings-workplace-waves2)) {\n  background-image: var(--theme-background);\n  background-size: cover;\n  opacity: 0.8;\n}\nbody.color-scheme-options-simplicity-topaz.theme-dark.background-settings-workplace-background-image .workspace::before {\n  filter: blur(var(--blur-depth)) brightness(calc(var(--brightness-4-bg) - 0.5)) saturate(var(--saturate-4-bg));\n}\n\nbody.background-settings-workplace-background-image.theme-light .workspace::before,\nbody.background-settings-workplace-background-image.theme-dark .workspace::before {\n  background-image: var(--theme-background);\n  background-size: cover;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n}\n\nbody.is-mobile.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light,.background-settings-workplace-waves,.background-settings-workplace-waves2),\nbody.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light).theme-light .workspace,\nbody.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image:is(.background-settings-workplace-waves,.background-settings-workplace-waves2).theme-dark .workspace,\nbody.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light):not(.is-hidden-frameless).theme-light .titlebar {\n  background: var(--simple-white-2);\n}\n\nbody.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves,.background-settings-workplace-waves2,.background-settings-workplace-waves2-light):not(.is-hidden-frameless) .titlebar-inner,\nbody.background-settings-workplace-background-image:is(.background-settings-workplace-waves,.background-settings-workplace-waves2).theme-dark .workspace {\n  background: var(--background-secondary);\n}\n\n/****from https://www.shapedivider.app/*****/\nbody.background-settings-workplace-background-image.background-settings-workplace-waves-light.theme-light .workspace:before,\nbody.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark .workspace:before {\n  content: \"\";\n  position: fixed;\n  height: auto;\n  width: 300%;\n  transform: rotate(180deg);\n  top: 75%;\n  left: -25%;\n  background-image: unset;\n  -webkit-mask-image: var(--theme-background);\n  background-size: 100% 100%;\n  opacity: 0.7;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n  background-color: var(--wave-background-color);\n}\n/**from https://svgwave.in/*/\nbody.background-settings-workplace-background-image.background-settings-workplace-waves2-light.theme-light .workspace::before,\nbody.background-settings-workplace-background-image.background-settings-workplace-waves2.theme-dark .workspace:before {\n  content: \"\";\n  position: fixed;\n  height: auto;\n  width: 300%;\n  top: 75%;\n  left: -25%;\n  background-image: unset;\n  -webkit-mask-image: var(--theme-background);\n  background-size: 100% 100%;\n  opacity: 0.7;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n  background-color: var(--wave2-background-color);\n}\n\nbody.background-settings-workplace-background-image.theme-light .workspace-split.mod-root .workspace-tab-container:fullscreen::before,\nbody.background-settings-workplace-background-image.theme-dark .workspace-split.mod-root .workspace-tab-container:fullscreen::before {\n  background-image: var(--theme-background);\n  background-size: cover;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n  content: '';\n  display: block;\n  position: absolute;\n  top: -25px;\n  right: -15px;\n  bottom: 0px;\n  left: -15px;\n}\n\n/****from https://www.shapedivider.app/*****/\nbody.background-settings-workplace-background-image.background-settings-workplace-waves-light.theme-light .workspace-split.mod-root::before,\nbody.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark .workspace-split.mod-root::before {\n  content: \"\";\n  position: fixed;\n  height: auto;\n  width: 300%;\n  transform: rotate(180deg);\n  top: 75%;\n  left: -25%;\n  background-image: unset;\n  -webkit-mask-image: var(--theme-background);\n  background-size: 100% 100%;\n  opacity: 0.7;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n  background-color: var(--wave-background-color);\n}\n\n/**from https://svgwave.in/*/\nbody.background-settings-workplace-background-image.background-settings-workplace-waves2-light.theme-light .workspace-split.mod-root::before,\nbody.background-settings-workplace-background-image.background-settings-workplace-waves2.theme-dark .workspace-split.mod-root:before {\n  content: \"\";\n  position: fixed;\n  height: auto;\n  width: 300%;\n  top: 75%;\n  left: -25%;\n  background-image: unset;\n  -webkit-mask-image: var(--theme-background);\n  background-size: 100% 100%;\n  opacity: 0.7;\n  filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg));\n  background-color: var(--wave2-background-color);\n}\n\n\n\nbody.background-settings-workplace-background-image .workspace::before {\n  content: '';\n  display: block;\n  position: absolute;\n  top: -37px;\n  right: 0px;\n  bottom: 0;\n  left: 0px;\n}\n\n/*\nbody.background-settings-workplace-background-image.theme-light .workspace-leaf .view-header {\n  background: #f7f7f7;\n}\n\nbody.background-settings-workplace-background-image.theme-light .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  --tab-background-active: #f7f7f7;\n}\n*/\nbody.background-settings-workplace-background-image.theme-light {\n  --background-primary:var(--background-primary-bg-4-bt);\n  --background-primary-bg-4-bt: #ffffffab;\n  --background-primary-alt-bg-4-bt: #ffffffbe;\n  --background-secondary-bg-4-bt: #ffffff80;\n  --background-secondary-alt-bg-4-bt: #ffffff20;\n  --text-muted: #525252;\n  --text-folder-file: #292929;\n  --background-modifier-border: #bfbfbf;\n  --page-border-bottom: var(--color-base-30);\n  --tab-outline-color: #dededee0;\n  --divider-color: #dededee0;\n}\n\ntextarea, input[type='text'], input[type='search'], input[type='email'], input[type='password'], input[type='number']\n{\n  background: var(--bg-color-settings-4);\n}\n\nbody:is(.background-settings-workplace-background-image,.background-image-settings-switch) .modal-container {\n  --modal-background:var(--bg-color-settings-3);\n  --background-primary: var(--bg-color-settings-3);\n  --background-secondary:var(--bg-color-settings-3);\n}\n\n.snw-popover-container\n{\n  --background-primary: var(--color-base-10);\n  --text-highlight:var(--text-highlight-bg);\n}\n.snw-popover-container a\n{\n  padding: 2px 4px;\n}\n \n/* font color */\n/* body.background-settings-workplace-background-image :is(.tree-item-inner,.tree-item-flair,.workspace-ribbon-collapse-btn,.side-dock-ribbon-tab,.side-dock-ribbon-action):not(:hover) {\n  color: var(--text-normal);\n} */\nbody.background-settings-workplace-background-image.background-settings-workplace-theme-light-blue-mountain.theme-light {\n  --blue-mountain: url(data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAA1HbWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAANbwAAIRIAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAMv2lwcnAAAAyfaXBjbwAAABRpc3BlAAAAAAAABJEAAAMMAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQUMAAAADFRjb2xycHJvZgAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//wAAABNjb2xybmNseAABAA0ABoAAAAAYaXBtYQAAAAAAAAABAAEFAQKDBAUAACEabWRhdBIACgoZamSGF8EBDQaEMoFCRHQAggggUPaGJnHmMfSLQ3PbhrQbZTUgzf8GvC9f92KRxhXenCNJJjw3RGxQmtE+3BxpCQJkeRpL1avCbNANmnMbszUR3t5Q0hcaN1XdWj70xyzGEA7dRzdi0WUEERqL1lUNNpovMGt33yJnqUSTpBprF9TpzGFLz5cyFiUzorwEDVxyX5ofxMRv2Ha4jLIXWoiCQnAwu8F9Ksvyxz1eVwy2BKGB7O8jpKPnp48jm42JhyxOlfz7shu7AVShmVZulRDvqSt0JpH3zJnz0nXUVlbcj0A7raYokM2PeFhproD1M/CTrie3CqqQ3VYrdJeoATt/y121C7pxvYP+PJj/JdVcpHk53yI8+iKLE26pqnqWD6Z24+lM/LuNbgP12N5fW5IyQzBOzNwNy0CD5ksn+HtBvWtjVinQu3j2uiIz0gZx++hNiNVDQP3giZ3+LGLsg/rxPvUVKL3dUWVzfTUgKLhX6/0ys+gP68PTMDGOHmMZWtWktzqg9etV0Bd+6th8F5DC4UJMXgcG/DLiti2nu/9N+NIw6e+ulMzwD4U+WXeesAwwcEx3mYkMxzf0HgYepjgkT44HGO0k4bKbElRyzGzmEiG85+e93AZM2g5drua/tjpnVHQ9h44RWe2khpJePPVUKc7PnGq6lUtTkNMV4s7cQaO+C9ByyGhoaPSju+3vNlk97xlP+XIQPaRbpMIuMXk4dkuazPntrsZth67+eRn2lbZyIMwdmfJhmFskiUXGyhDgd4hIgiMdx5Mu1rqDciUaIS/VCX+EnrKZMZAr7geOAloC82u3/2opN7z5kmJcrislgLe5dkB7nH5imrmS+N+gZu5yNA0IenjoDGcVLbSHd5VB2zfs+5qmJdL2FMUZVfswkj1hZv4bEfBira397qSUEl9GBJkdUHbmHOpQFpBFYgQ+wVM2TuxY1DcU0kEx/BBGqNsiL+oNp91I3xcyR+R5d1vuTUKVaNc9UrPv/V0aKnKsKRdT1LFnOA0coeuP193kCLtuMCgtaZq5PxwzyUQrx98/Icl1K86W9etOMVsj5XFkEO+X0iw/jueW9HiLGp7H/Mg6YyCEZuL7AE88mAIRHkscTvPR96gBoO+un1F3OEDaFKF/uMUNbIq8M9qnsh8M899BckGsEDTWQ+AzD0Ntp4Ns9JE7rnHyOaMqpm5hkltgpqPoWa12ApcHF01ns8L+CMeVXwlFzIT/dHdTUKE9m9HSvdCxOI+p/KESPjmF4un0Wy8kg1vo1uagWFxuY5Fhwao8x9IXngunTUNSuKs8m1uu7Vu1sPzjv1WLr/N++AD+0UwvPEfpefKmwLvclJ6d/kNW4VXPkItiQMGRZgjoDzUbSEOWNHtCyRtLCcQN8DFWK/HAxLrNS7WpvxlRQYiNp0SqkTpSxBISPSHk2Uo+MUHMPqbhocqE+/Zz6ns3eOMYyJAq83P5uUnoxtztyeZdoY31/CKaG+DcZHfr5Qp8yBGQv/9iucJWtZuaO6tuHhbrC9StT9KJ9u1UD6DeEw+tdA5XoCH/8sYsj4sGoiSWZzWcjjSvt6GcWbMLtpPdfz6E/UgYW9CV8viRb6AZ7Xl8nIIRmDPkQ8mgD4JanSsVBSURfy385J2D5DdIkUFHFFDof0urRMh/pRWV7+zkdMVGpFaBFu/HVZg3Ybsa//jCNWz8X/2RRodTtpYmcMAMFKjtdWfN8LDvtltp3Rwgdj9pyXnrBDWi5mFMySstZWVKFMqGTQ7doNqSg2zx7+ywL9bbYEq/J3T64RaxS7i3PFak7IVZX8GtQzVCunQT9Qtf72uxp8M5Em4hST8zshLYKZ5Dt7hpqVk8ZrsmvlDV9SJVH0lxcQef14Uc0UeuG3rx++r7JnMHp7p0o7ad+zaDDWuwpIMCJbMPiX4864XmF3+cqzTIgZKOpnKkIlURGk+jlY6yZRwmu6o9ww4JWnT2u5LQJ9MlUjo6RoIaJZ4iXhn1WRrtxLdXN7DKRWSvztv7Ai++gvvBQhT4Xw58+6yScFR9R95s16dKWLkbsIWiWfsQNuUtPZIm/9nBRMBDuNBFo/bVk1GQFi3gTPPKwWr6365YSXKku74kT9Yq1+jml0HdMJtv2xxyqnrtStOBMwP/gwZvHcCN4QM3RwUpVoCj1xF7c2i8ClsIVozRxkzmJnuK6bXJSl1OkB4u+ZDUPh7FpXMoqB5UknvBpXX/096MyvqAN3haVAv2TUEa2Il0PW/hlrqPQ82eGvAwQqXeIc31UpcDOf272VrteWjo028qGYy5T5TZB1t5PmYJmZSJowJpPKTwK6JqhGnarD4d0UazTwBfjmNDfFzre/sKcPZVJElChyf/DPw8FYZC7EgujyKaZ+WUtrdieJrysh0fEUcmxvHleqh3T3Xrk0tacSCLECe36AzY6GkkBGyrCq0/RX0rqmH5i4DpZiAdmflVlROfLVQ1zuXP2wMsKQrJqe4cerOUBnbyOLDL89hI/KDGcgaOFjxC0P6T7Z7orFM+Qi6DV4mxBs0+Pwg4CJVFuotXFGIQ53LoT5Fh1ZrB6PxSE00fMgV6XnIXIC1W4bC5zmnbmCxXcMA6v+loXJ9yzOmIcX6tOptks+WCHfd58iGWgcHVR7kbD3QoodTdiCL89hvjEL1tH8a7oWLGyZbYq0cBp9IcRQhUKeY+Gzdm68jviOmCThAeQWH+NHAzmo85s97hcOXyrEZOWIQ1hnKTmrErtloSBJzJxtqF2947R/fqJ1QaHIISxR1amvQGDgIhlZHwXDqfGEqrLGooPhneC6We58Dh+RoP2FbKDkQVm0Hs3NStty/4WG5LgAhgNuua2Z32B+mIguH4B1KIqDTW9SvJe1WGXiBQMoUQfeQsQHVQc6AD3pVe9GCbhh8Eb4Dlqss/Mc5Mcxc1b8u3nVKqTGc54U4133KBKAjo+tdiJYA2tbl7xi27fzsM3iceRWhfURAFGsMDxrMytWLxLQ87b5X55Ds7pPOeNHWqP2pGX/1frFXOJpxagfXcGmwjI8BlMukHhnHhe7ETF2S9mksU00pWCmL0PWFDMrWRBXJ9siI2nWj2a+cf8Od+EqFGmppGpmHqUJ+l9h1ApPnGvrKNDuQxzpraNtc3jx0ONhk+Xxvb5FRmuLjbxo83TE7n46GY2kYIyMA3ctZpPgVnM1Cm3l1Hs1J5R/9xCW7DkiVJEVvlrNhK+at30eK9prUrf7PUo/bYoufwusjdyi041IUoWTN18tuUI+OrRTHHnN6xRJ0vMBkmq3NTV/leGAJPUXaAPeHWt1VXcxMjmdPxlOyEgo5Et2VPEX/dzL0VOJR3ZLQ/gq5qgIawzCsXtgvLIGyx72I1psK3+yy3saGRgRJsVOf92RilOOYvd5o5oR9YDy+4vGIBTaE18t4ivj3VH+OxPkjjuq0dmP+oP+bR7w9JK5/HSzSx7TkSK2fHXH6g0BvguvhFJy+Ji+Fn2FCDIs88PqK8+JTlSVAUIDRgKd6OA/AuZ8K9uK+xT2CoG0EzHbospuaR63v1XEBM5JOTk6MEFetNk2383S+JX5uJEZRcq9XbpXhIq8DEBBlcO1jWw91L6NYUzCyOs44pdw5DBirD81YiJyLgRYMGEPoip+utZ48T8ixY4Pvr48KykNlxbquPWwVefgY4LYlhhBUblLaUX0OkAR+CvWTqrL3xWCCdVm39mq7wo6wTl5RO3mqPq2AUJYvgGNkfE0gsyV9HuiEnJ1EP3fYiLGn0uoCD3n74NXBHF0HSgxJMrTxQapfefg3oYd71OV0QVcdmKCZatsZF1Hd6LZSsShlmScJ1P29Mzs7Kx6W6D2avwQm6dqa94XN58k/4mmhRcUh6jxsihSbX/UWpQ8rPDhxg/qpZMUA/B7Hy+TxN6UkUBiOerYS1B4czfalrOuHR3ZMlc51J6ybOhh6VZ7ZhjwuxS70ChzNm+G8E8b7UWWcBcJNH/gsR63I0aHMTXYPH2/GXYQ8FYrM4yLDwr383SpQlzNOfrao/mTaQlAzF1iNaq4rAPSuwUfTgOZlcnOQvgJgpsdGnFBcZGeF+9Yr8DBZz7K1LAJRb4T7B1bGJtUSzzCxSkKYOPKH4RZ8u15/IfdWcfl92X4K/09LDpupyE0Wxn8wff0pFqduBsOIlDcFdk2mE2KJjtAC3AuhvYa7e14WsTudt9HIgYG9zrTpe8XSY9M4SUNz3xcPSISuK72bj2vA5pZNJfnixi7agCzJWQIZhyum/ToXWK52P9I6a0LaWmOXQRcIeq9FZy0FF58taVwdem2GcBoV6ismfihDbdC5LyQ7A0aHZ8l/rpzKhyyE3tjwSnkeyrQMDDUJQOhZHgeHxOUfpWYzi8/qsCHqCJVVOS25EC+99XqUM5ySdTXnmAZAu8+5jliNJwjZgNSV3+CpTHUpE7k4FQhCjdV/KsL1HJl25PDIz95fsveMB2z1SEel+Osb59OY4yO5WKO1c8ABDEQ8N1m87MUlCzXKFyzUq6U3RT26fIOIulJ7CZSbk1ZLUDmfwMPqN6OjUV2z2wiM72nAOhqrKHS6W+GR4NBvyPEbE8Hl93SRx2IeR++Qais5bNlbJQz/0ZRsdzLeiUZ162v4eITxm5m7DJBRIr4/DQWo4NnjAu4nVDuG64hsDlQxKnwV1kSU/kcMy0Hc6bVL9OoJ3afKjzG2h6oQZwcbNp8pyMg9575ENFjHBozQWcFGGcdz30bycRlvWaAMofZRvKdKlo+5/mk4iYFYrQkO5cNCxNPMa0P55uIPeDTmK6Oz3aHD9vNDGRm1cvkh9m3oCUTEswIXCQflFgAAg3qZAYdG820D1UDCZ75hicFvRpeyJT8N53/ozStsUXy2ulWQLc/Irvdh/O7VvTAu+6eCFaSFUeQIZbFf55asKWW9wN9Mpz1WK57d+1FsSJLMH8GpkEHFGTWdID+KWU3ocEm8jOUeXYep/B5TDSBialqL8oliZA8zTM1k8f28+/95bu7gJ/O/dcQgmBreGFZxuobR2BXVuNQV2Dppjhkgg/KcftuvBOP9tuEz02BftEgtyCcQQKLIntjhD+xOxjSpT7smmM8MAd8lVnItrBBSJ0TkStrCDeVKn94GLX1ZuB/aHn99qM2h2tPr9nfY+A1dnlsSjl1hj6w02nnGFbt8IhleAlw19AvNiKLnzP6JBt8YOtGTXBp02/xCnQpO1x1H0yhWJYtYjNalCqPs99b31nIfjgyxxra+LC3U3ZdKTI3hQ3BNWqz4nTI8kqs1JEnHudJ9fjcuCFU23KOgipQQqQbNMbwjwMD5yqCiO40qfNhJTsg96HA5j8fCmBrzcOjg1xpcf00ROgGB/oA+AEUlau8WRwsyum5n1MsP18RFs2bKMQjG+gy7nGFV+BnqndDSVx48sAdEA5InAQmccG/pt8FhbAKKvLtgK8lPS8fMXAS3M9SHC0gyKOO8VjUrbql5yq8pJAHdh0MvpmnjAXZDiBYVjQXzCfLL/Qvfi1bfBb++XGs/Ea83fMC9fP4NKiZXPwUk3Xit8GsULgR7lKI8dkcTy2+cTvZvyNMM57VJpaqegyMk2Rq7sd2zFMFPPah3ELQfH4YLx8+LgIINgG+qsfhC6W8qs5y3wjUY+s22MsyMmnxspJgPb5APqfhT/uFDZeXpXq/Zitvg3Q98q6ydpRjzoLZ1t7Vsy4np2yvjXcBQy6bazNG8SXUd1bKr4cx8QilhlQ6zyc/ZsnWKJnzn2buUgM4x8LR3EkYBTbxxyWOtgf32yjmYXNX46ZHwTZJPx6o1iR4F1Nx+kc0r11n8eiH2ULwr6RFyz9pt/vs6IH9jjBVHkKMbrG+MXkjDRWfF5TyO4pdATxwBKTsuxhJrnakFsxKU4Qt9OMnb7L0WNtxwBz8VSYTUEpFog/RRY1+FKE6Z3TsBHOkUVz3vHSiIXgt2u1+dzeVHOa/umiQcimdkCGkDDrk3R/8qHCuEEt8sw6+keQB0WRpMVuU08OvuVU3A6HbeMX+z2eNx35sMxyeBWuKOEnXcxTm/d23BmxNZMcXt5UNe8nwbst4h752DrEtO9e21UOrIuXpvxYPJa7Lxml1lUz3RaB8NvoohqaeQrzjVfAT80FY9ewtC+Nw5idkHkmaN0lnZrEek9bk+HN2bLBMFa5pMzB4ZwV8OZ9dvD3y3uRkYe13GLS7JZ0Rw0AYAlEy0XKY3zGwyLEHtHIW9DpGLWHw7N6DAMaOr3I3z4rnY4kCkfxrHOFXJBlm1qmsItNKVpNZscl+zs1QDjs5zDg9JORL7yihjKykmAK1I98Ih8v2uj7BI/enC34j6tB7o8zHH4+4aAa+ydBSa3YM4Ahrfz/pd8psj7YSxihIvJXDVMYLSmnM6jIGI1H/kbLvCRPs9xEXZp1ppa1dsHjQKNifodZ00zqLc4zSCNE07+56S3c9+fS9IxuW2OwRbBW2HVCqUmo2xiODhYJ/LL6yEIKHw2tC8O/CyEfmanD0v70RHF6SlWcDljS3ASJGKYrdEOjlHKrPl39FQHgQAZktUy4wg9BdhqsmHR4L5LKRsP8limK3FRg3O7/0Eslx39Q8L2eYORo5a0tR9Lj4rbuuYsLUVtyklbvQ1qLEah5Q9J5WLA4hKJc8ROkBN1KceTIdeyvDfv2Nyo1j/+wi/WEvIxLrIMzsoucQutDZI9ZKMN/RgQVilp9JJJKZYx/IyQ8/w7sFIcGhCNMqLuEOaGKiy0gidM78uXkvimQ7VNbBcLqMFY6BFNzlcfK8GRdpiyZyktvlD2F1ggF/BQToBcrJ2pSZaXi4t427R4uX0blacQBosNuHzMlKVb+6apjmjwz9XqGFHjmcdCafqAEr19g/FpKE8LOO1Up+kOynSKmUSyj2SaOrVBfjecd9Ts85rhrQ0LzHm3+ZTqZeM4T++fVPwCaxOI8P3w1jVosok4cLY/u1zfTrCRgvEuVNek727jBEHTN9vVdEgmN9Fo1Dg3JrksMstUsn1fVbN25a+eKCAAEI6iPoGy0EeVl8y7TV9TOgWhNenI72QljrO1a9GpeOHZg5Fj61CESzd33f/T+Cx88C4CbJkIKBar4z6ogg+OIrBTS+OvFdKlPwltfMzCkGpCyQIx9AYxt78OvUDI19mIs5+LWY/iW4kyQ0TlHbW7GNwVVHApwg21iyOhPydISoooUOCIclFaJ6T0CkmLB+dH7pgl249ht70OE++RjYKRSuUrWo8rh1Mx/FfbaBG4x84KtobnoTbaGUiO+o59tMCh4CuAZIk8HluwpvjRBN2072OfioPj2YSotGV8ZBTouQoKLTrIL29YfDy0s+4Jlt4l0nZXu6LtRD013jfEd0pdC3H3xInTb0UIUE5yQxmuwlts+AYxl8eCPvPIOsjo6adrvndxYs02/FuqK5W059R60kX6IfzC+FpJJxJHzmcUKvbXgCw7JqNabgmrbNhNIbs0K8HSjLs2AIUi+n0Qzk9t7+ePhgr7jlNb4eOmH3CXKuD8D6wt6XFRKOHgtj7BjhPMNKs7fCu61F1lRKNBOhCwVV/Z3EPcJqGUsMQCIb+0uNsjGnngkFz8oohZNoym47TSqs8GpGRAQ4fbfkb5puNCWrBTmWt7ts01EqT6gA0xHn7VbNnstb5pltSYnclBftOP/GHUKwz/+PObSygdmk0gg+vnVpCkPIqUc/A+DdC0UC8f4PUwdorcq/soljvTDe2CVTF35GfSnY/XgvhWM/DyLIOIqFw55Kce3J35Dh00IdYClrnDDgk126EHrdG6KqnDmu27lVVkekNL7fQsnOByp/cDAyv7bDFEpTBImL8PVm96FZL+Vh2fbU/288I+SVm9th4i0S8Rcs2pjJv9YkOg9GipV6AZYfP4xIkv79lzXs0PvBFV9lPmY9GiCR77Wr0PsQVOoFyU+yZr9vu6CQGYGU0ETckz/Hgiy2u8R5Xe6vGIrkgRl7DDPvANcDJAR5xRB/LNA8bWR9iLiKWtUC1brn5665awonntj2XX0WRF08jeSHYrbEAp1FEnD8pr80gj+XxxARxYCrKiXQarj3pFf2vWICU0nRvNcxvupdIuN4Da3whOcDJai/8eeABP+23s2vkA21qsfUbIhYEO6gkVIeXTmUUHe5Ka2oxP29Ijk96JrsF0Cgz9bIN84sweHnBkdBPdaRJiMw3xXxFJezg15jCnBT1HpO6rLcKKSJKqBF5fxH0h/zdrluEtpesKrDCCEXgzZO2tE9VI/K4fNPCWcC07UozPRQYkfx2uZNagm4AxcyVStUIh1NnJSsl4hY+4Q6jQyhzxpE7sYbhsk5ADGgzi4wOwkbs2h7FQ21ptX3mx2kpV2erzYFcNeP0R5o1GMkRwtsT9htUWbLNMQWj3YJevYtmR3brx0gOpnKhJGYB9vCGpBVl39tPjQDjdTgJ/R3oA8Wa1yf3G1ZxzPkqHrz8Dbd97jRyeyFZHYsaPvhDXI94y5VQ7YrY530lo42364jJ7l6i4bOMT5Dul0tx3jDyNEeQ5n5ReECmCqn8B5DseWuk0zOtOI5+Tt2xMXsMg6jc9bAbA23J2OcR4b9D6MlS8ZVbgu26qGmCTTngorzO3khUSe9C82mud141SwQUM+prRyQ4Ix3F3Sp/nRSUsJRLd/e8xaknOTILtTsK/ut9lHgS5NbZFl4ObV3XQDmdjSx17MQ08tBcuhHO+iCzD43WiNIy2XCCGNw7QD8o/bIlAEkQKySGutvlmTHe5nUZty2KV6+Djv2ej6+JxdK3mlf/gE/uSnCDDv/0r6hXD0nBO1wsm6iG1E2d8hAgsOzK+3lliv+BvE9vBMpCpZV7ZosRZFT3Qtzh4/oDnbG2hcFPTs/cMLwT9lbIThFkmuxNm/jowHxJw0tgz1uCBE+w4EEWee6u/iEl25DYcwIp784KFLB8ktNrF+WOUwuJjo3hJ1F1bxwALQYE6TS+I73hzAYZb61D1Icj7rCZtJ1fOC0tPqU0j+POlcQUH/O6TnC4w2Pd8hFmtBdjFk3nhavz7FnfjmvITj/1gk9cVlycwLjY1ywL7jxjZUF/fpKWiUGwwi4X0hJL5TUo7uWi5BTlj0koX8HAI42YcXRhCwJS5cIGTI+lkrpXc8Dh8vf+Fqtn2BssUbPtekZ8VLe3/wYz2nTEUQ4y17aVUoot/dQl4tKQEt4TizqUgfMufPUZD+DW+Fe7JwEHvYoveqUn7uXx3V/3NejkUen8VmHojMLtHixo3Nnp3OHPO+lf8YZNz/SsZVuCMSBtlFtm9groXfJL0vzAURInDw4jmqm0ie+iYxYOwoDXH4Nx0p9bNqApAk/OVvq7Px+KOnnIBGBbv6KE3xnFzbivTWMIBS6QHx5B+HS+cCEBTeuAEh0jPR3XT3Pr7+o+PsfAfGpF0TnBQDfPxEThsHqCjMmmkCGwQXTmm3VmLS6OBHq8ugZLAr/u3yKcftNJDjR7qytqKOTM1ZebAqsb0wJEsE3vekwU+gByVG6bGSL5zCZryJzrOuK040Xho4FD18NFEqbfKSZMlIVt9eTP7VcPx4AM+I5oqLxD7MTMai5OsTWwTEDNWW2X+n7vXM4D3NULON/W6d8c2AUF1aQfXzV7Q2f5hg0nHvsl7GKdioHy9KEb1TcYJPzb7bq4dIiKgiasGTvZnZns35g3H2SxUOtn8FLpSglkXyOpfWQusFbHewRmJetwHZmGO+LS8fzfs25aPpFSiYTjb4WsUOJG7XJBjUry7OTapkqjYeH1nVC0807+l8zKBi4eKS2iEZC/VbOJoJdeKWt5vbsUxAKG5ec558ch0BvvyukqxrNHXDXfrM8R0QUcovn95Yjv9uo8mTcAIyRzVtbzXIbPcd7AA30ERB2c6NqXWAgWyFowXKRDYmjOfnGHg59I7bqt0OgG7Q9QD6o7QPHlSBDv8wbB80vqNeyTRZgUK7Y69/PwtswLlt2ODH1ITXZVNu8AaZQlFFRB9gHQ0ybWtN2HzTa2WERTfmLC5wQg4EEiFP4rraY0plzK7DbmYy+fdYJNZWDWB1NSr/xqBowhWHucawkXNDfw0YG1QxftHKStUe37HKJtYS/e6UBX4keXAMYfP1uhgbKclvEcoHcko106LQSKuAnFED7qJhfmqqFTeWPhZ96kJzFXRDeUki6qcBars6dL+uwQTBDmM4aCIoepRnE2lpeL6jX8GFCQ5/6qSM+EvUvxCmji+bSAQxn7Yr5jxMPnSRPWg+ehVcZ0LfKwhzvOv/ZLLhRS/LfIvqeCESUDk7SBLD11HlXvwSp7Sphj87WBSAkopaZFYOsOl/KfMyW8QHJnF0J/2szM59DrvJ2DNV+EQ+0cilog5A9bKT773LyBaZf7J0+kqUkFegFLLQ1E9FeurcExFVKdvRM10yADj9f58sVMB3SSSmvBA0YCgswZXve786BcI35KBWJSkqEnzqjRZkGNIShl0yz/dECNM4U8R4a8Mr25iwPPrBsZR8CNnVjVBaACduDWQ5zIblX/ffw1n0hxJZZqG1K8q3hDmXGk7YMIFYHvxKKZ0/vkCRp6sdA98kOp+0tNrqaltoNgUzKLeOKBHcr1DtKJtp594+9g1iuRrDs/8qWAcdli2G9/Gr+ryR4m0njQ0rECDJm/Uy8+6btYhok7vmrqRD00ljE1ee7Eg11+CK2Mi5RkVmygSIJ3FT5OONJFRjutRJNBikARUtVxTLoorQr+Pzq9lVN+JCVnYeGOgeH5uNMtr49MXCSui2A7keYnl1j3XZ8ixppwnEbL4bzIs3iRUSZumVzE26qLZSrfKgJdFkfF9ZiekVJiqFJmGxLfqmN2drFJb/ixIcVzCRqP3+UebspxSeC700nwW2ai6Hq6zc+z0qlrhpBzn/z8qtyNh9B0bGeGTBWLN622YlDLenSYQmHiXBVCyvYW0O5fE6mC5XafYaxkL9H9n4Z/HZpuqR7blkRLlpoFJzuQ7ffL/5UBLLlWOBXNp4YImpxbYTsvrtBwKurD0FsM7MmfJ958u9OZgw6iygizBt/rpSIQQBfTeJERkvNYK+D17jMeqZegZncku4TEcIkxYQlthzCICy6LsBciko5Xi3AhgWmKnm9TXfvEoOXjtZn5UJFA37O11VLttxE8rpjjJSaZavYkBZVGQ1COYT5j7S6pyCLTFKnnP2Sv0A5Rw5+C5kSFUEsuyg9vWj9VxrQorBcAXbUhfAVoo/IL4HpBifREfhn0W97/P02OE+NpexCe7DW2gi/JmT7w1wFdX8UGkhbxNlmTS2fAQrkwgMNOQs2N0OVat6xz9g5fti5dH1YG9vqZeJAd13PU+ecim7t0XU4wZ6A==);\n  --theme-background: var(--blue-mountain);\n}\n\nbody.background-settings-workplace-background-image.background-settings-workplace-theme-light-in-the-note.theme-light {\n  --in-the-note: url(data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAA1HbWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAANbwAAV/cAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAMv2lwcnAAAAyfaXBjbwAAABRpc3BlAAAAAAAABIgAAAMGAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQUMAAAADFRjb2xycHJvZgAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//wAAABNjb2xybmNseAABAA0ABoAAAAAYaXBtYQAAAAAAAAABAAEFAQKDBAUAAFf/bWRhdBIACgoZamQ+C8EBDQaEMuWvARHQAggggUD2WQ+bP4jJJDpYww12ENfxThQlaJIpWzgm7R8dBVwlaCE6xZec9T/dhIO8+sjiB6DoYcI0Mx9GYRMKTxk4SJg+YX9P4Wt4JVY43+2B0CbPOwcn4BWues7AMaXUS2hzknCPzfatIDj3WbNVlBwaL1GKM6vScWtbkzDv8+AhNtGOOPc/nev9x2Rr69oAkji9BcwMEDm1iwCCeguw+7IAw7C439oaXYlelFwj1c/pw+AvUa38GNyuuD5OafFVmGL7AlyCNfJYbeFzg2E9SR+8eXYeWDbMPDgsIjbLdvfSDhg2dLS+hTIqvHmN0qD5t7OqYVNZagY7oWcqBnCMSt+v7DVcYJ/bqPFXYdkgGGcCw2lzLrN74Mh4YPg9deWYWht+gKbkPvmyPvooIeSs+VIdD+ZdEUSk4OI5DXONws74mF/7G4o+IWbAYvoCBS05krZfL9PRRYf8vY2snF87MZftKooHTxbMUP39/zmkvPkxVC8YkQSn4iSleq9C4l8WwAHMxx8agmm1usQggKsRy4HHixfEJofkzXTDVZ2Hr4ijsmivFzXgyNXR6cuyrWCpQyPI7RfPMt9Oc7ViVej30UUPMUbdtHfqjug5p2xuIW23jeaXnSDGX2SteXD+cDjZ9lMFWHl6vKjeZCffOT4wAPuu+Bm7H4slxq4Grwz2rJ8EQzrQxpXgoD4WBVqkxmwNM2KmMEKS14nviLfMWcPGHtmSh2XONXImjDIN/x8GjK2fcFNVjWjp68G/dNCURfoMo4t8DlVazLPecZi6oYa8hfQRWQT1hp3jktuDMqGPrLi+Q6KCiRqtm3bo5N8mauYiGo+7HTF4dNxf5bclUD1DldcQYO3Fnt8ewclgshBasqT1pb8EjskQgE8oUA5BeLS3M4nNx0eMKWJP1RXba7ObQv0sdp/OOBywydo1tiXKr22v++snmYhLXV/3HCf2GtrWa+GqCKpBpr4vKbXX9v4dBl4i8vV/2vDcMfbEBWvuNMtjcexqd9wUjVILYDCC6pZaN1uoiteGoApSwjYn5qwZzutV0raqB+e0eu0Sa4xyFOf8sMYONHgVVwZpiJY1IM9VleiSKFMpa3GKWzXpx1NtxtXQcxGNu4DJW9LKgUqz25ujsyAg+VphLm/PDLY6R+YKKG3t2leWfDJH9fIxVq8a25RtOHOY4+7BtbrtAbAkD+9VWPk7DCEOrTkUZbehdsEixwqGBV5vbsukTT92o44u0/TugKgWiHZNLETtYf5ccOS0a5TQTmnG3K2AZkw47lAGlIX63+MUcg6UiIuFaRGOPd2iMxThgUCfXHh/11hczfKvdCVKX5nPdf0o2h3rP65CCY1TjgIxSHlpfX1L80MH2h0vD4TBX37NjS2GlNh/45gxNIrGNDdeEgBkwI+gvfh6cdQp4Xl7ObuV5s5njFT093t+FAjFhjRx3NqOlTFyMKgnTZKylMl7Nr24DhH1xB+g0OIlhEXeNURquZmuPGx5Y4oqTpBmbJWVKtak3LiEEM4Ck3VHUXdo2KPwcVanVpGGmD5WN5iF9BmNoH/WVXhgcrB2n/Wd4RaRlvwFEz4KCONb5B6SjmoupA3RJ6qPcvQSmYmFhK4WG0T4x9ADpswETCqVzL+NoJh8rd0ru3F7Zj94IrJTfjt+STBxnAUOLeH5Qpo/K+57Rn090wV0ixfIaaWt74QTLPXZBBxybV9mQtwp7acEftTvsnyPb/xRBSHpJfGbdsEZZnOtUcp2SGyUa0PeMtzZzyGOjWYNNqwN8cBq/xJCb//MkTuy/MGFo3BBVAjoODLwM7WhTbPOy6vXDXrLrh20xQKc/acTGmy5sz64PUbPFqLdpdZb5gnew2jJXVLFbQhUosnaOqqXZL0fQFniUC2EQEs9WizDVdfNwzVo7RbPqXj+iOfeWrRuj7ofISDha4hlY81EBTRpGB+kdcZIze/GFnyVCoalzseeR/hcFjvPh3kGLU3dOQGFbV7E6+9X0v0KH2HZD7jY8qi/seLp/+Xxux0ouoruWGAlWks9LI3GABeg0V6OsbAmQtPJd61F6v1J1JOKXOW0ZGKGPRASKXy0PMLXLEsHNQXnlpxypzc5NgsFAVj265I2bMfgAjYBGcFJ8feWJVBxn8sP+0+DKUFPbwzktjsbA4hr/g18lNAWpkaUyDqwrfb5kMehLH3jigK2SLvj9wMB4BzR9W1FNLQlrQ2pLhUXJ80CyktyJ/BkRKDHaHOHYBlzUYImLLo+TNJYhf5r8r8u8FyRjx85QAn4jNP2KB5JN3IzVCa6u5UOtSnXkBwVg6jay8WjLe8OqUW46jusd6xhoYS6H5VyyGbH8IHG7/JXzysZQi56ZwMM5J7M9FTE8XJbmPOb7oD0rrb+yZy2PrHsa1VYA7eV2b1AyvEdouewEeb8BqgE6tAZVgp/MM6cIKoH76qxZr0pyKQYuccRXVFebGPcsmeZ1yxEJanuQM0Ee/+OBTZte0wt6f7q+URe4kXktvIrvB1IiKOAJloif08qW6xaubg3SwKKSiwjXZAixD48aYVDAWqnCObh0UqP8heaNDHTmJj7yo1CP6cKioWQIN0ZDGW+pYjkAiaCiiUxUJtk0cYlty5MsBIahE/tU6f7rr2kU4BjGmnOupbFAKoMKBupOGQL68fHdu0+i1F23wfvx9dIl5ddGdU+gKZPehZjdAzXXmbFkpTcyX/ZwfWySFWtiJjYyBGjLrLWaC/X32jgPt0quDD51rv0hijZgkNH5B/7qaVV7hrtMlvAdHg3asDDMSNMLQstWHEJ7MtxFdmEWZXZHOgSt/cy7kc/Ue4ptLwd9SgW52Nq8mDlfHmB+L2leAgdKKRGrpmCRYTsixqtxqUls7VOn+kbd9HXm5UFmO8nyO8I4Telktk0L1LUBOQqlPYh3nvSRqyJ3uNLDWa6fH3PD7dYIT6TulktfxCVXia2EavWmI6QTu0BFrHBs4mmqR0QUzjJEtC/GFEgH8zn4RKmD6irX0liIhADUNDp1VIT2/LMunOumyVU51RRDRngDF96P+HsUzPj17fqYnLGmHik4MXjKtgX8xzoyB8QETwXFiy55+tcQfgLCfOFcB8J189/yFJLNnnlQBOpv1mz/Wovvz4s62xn1Zm6qvg23vfXZvNaWA4dD8IbAibQmOegAhT39dO1bPnfeXgurYXyNw3cxZ3dFmqrGOLdxpnYKV6XOXMrcrRykH8Ct7t9Jf4h1HtIVqGs8oBrmFNamCHFjg+ZmLCR5L8Bpy3HIGpHYBENJhcQkCLUQ83xBrY55WaFCnrZPxTNG9Z6ygYiR8i330ekBJxaAS/chhPqepKlpkmyVQe6eMNkQycIfJrO4kqhLiEqmtG126IKdoC8gbwDf6o+2T73t2MkPw1zV2XCr3yV44NXM0tV05ohKixxCnOQoMHTpaZYVYA1dmM1gHtpq5lITAMIFrTcXWvVx4+IQngWwVmTAJmxTbSBIDCRfU5lD//tfZAmM7z6EhJxFvswxoBe+Pcyrv5LDo4rLsaVItwV0xa+dx2xug+2pjJHC07XidPdw/yBchAMQ55Se639nNyDhb9FutKSlc+R0nyfj0g3meA6yanxrYM9x85G6+nyhtm6l+0q2JgoAULyfIWnQQq4hDLocyf8fQGTOHwb8DimmimzkbhLtCK1xIdpTTECoipUtD/6rmUEA9O2kuLUbyDBqmICNp8JbAdocOp+4R1tKjje/Q9YgSJxSxQ9Actbwiw50VkYfyXMwOBf1mz8wCit7nefF2XmbaeaVDon4ut+iGkCQfJSdeamUi2pzt8nqUzjZ1YCZSftuJ1jo1/KiHihBuWMrKOl7AoHT9GHvq6K/Y7GzMWy3FbXuwAHssiKJsq8lDGya2+rOClU/yphEsZGd2Y8SXRUJi1nPAHrs7lvQB438A8Qm9r8yYG4ok0kunVHYJApurU9SUxtTbbMSNzGymOqVRbBMTtSF7p8d8UcoKysaAZ/csWNbagKkF3rzAd39K2ZP0OKJhJpEfew3zAy6cvEHRMaDZIFLl3YhC/bf971wWekjGmS5istgtQuEDNsdCpNhPTHjiIjom4nIY1fV4/uWEgzmaIz7JXdM8BrI5yi4dpYAYwLsnDkdNI/hF3AYxyF5lKCIhy+htUHpPElTaVlN51bhlA10MK7S3VOfEFc1D7S1cLq3/VbPt/otGF3D1tSvTT3cV2xsEmcCbc+KrmE1/G3fgscMm6QKqmjlZuhbL+DfeAek5Fb5ZkwnQcFdJGrbHi1uVlsFUOHb9CPDOGa3fdFAgNAKQU7MeJw/sZ+HCgt3fRDMGU98i0wMABjwkaiirk05VBcOPl2KcYxioyNht0+yEp3zd0+ngWUs8FidJIbGRlnZkkZRGZGIrN/gQhFh79Qfe9fZjN1iwj75SWSmivdoXmqUWnE4ecrpcUTtviVURP55nwwR5NQ20sHgU5BiLMFApC0QfY+gdUU+jtgec1Wvbo1/OCEH3moQ294j6xxqEFpVVUHQrq3h+w0/c1yunYALy0zVsCK6Cg1ImVVfP9Y+l+9r/2VZ6bKel2hCAH/Jtc8XKqyrqDvT4W+08xI/lOmCct5dTrARJaEae6hkjTP3+1bGKo3eErgCPWuDQxcf1WVJ5fsqggUnFluQ2kxd2ih91lX8gWQZvvjwbEcx/bIIgi6PzEDB3oS+gqs3HgRnVQP4+Th3ZwNGWfwRF8cZyANgppUck30p8A55F7HA+h2eMSfvvB4ISItR0Kqd3keHJHxb02fw8ridf5IhzWZYLZLMhVXpIzhTHPj3A6NhyJprSwAWWbz8w0uZwW++fOrhNo5ug0FGFaz0AqaiUbt0V4yUndnltaIfjACZjP6h4ZjzzO6hC26qsdPOTYx4Lij7xnYgUfGsUXN8nQmMMANzTd5FGMvsu/6dUHNW1zRFlEeYbP3GL7/AXTEncD2RyXfOWgteLaIr7EnohNzp/UxkTwL3bMYOIPHbmvafRU8hp87Zsdq2+LjlMOgkApknxr/HNA3TVs3PKJitB/TZ/NuYx92va2Ty1bFxV80cQBg13+E4obWGYPZdZ4rdGTJLweyjxmUJeve5mSg1Edl5NfqIKAwOxQSGsCccw/9wPXwVDS425Aj8q+QheKdKrf697j0bfZllYLR2WvR9teRXdn9QZ46pnrw9V5NGTP+tLrueYuQg7AJZgJol/b56aNCarM4bph+Bvum2aNaIHrcKainxTLpetvSdJJz3WxQx0+FTXEw6rm/XNjOMDZ0090nA0VvnghyYY7YGsgRFoH6bITeyhFmOkjiSkHNWbm3bpJ1QV+3S1BI/TVxmj3SAPRC1QKTBVo8fRgr5Mwn1OEHbnpWJWOeMXQUaFKL1el29R3Nl6R/2CqVH/hKZZo4+QOZ9bDNXkw0hSNps0QL1F2RasTy7wYuPQLo5CkYBBf0lz/iSoCNwTS1k1j6eqA2qcJKkfUFjFeDlil+GsBEWca9uY3VLkPkCDYiErmJEO3lDz8ghg9Nnk7PxotO3mWoX+hRWTv+o+QKy5jXQGQaICRp00QPwUtJ/LIElhLD7uJPuucxm6/6E5htH2uAFrglC9VfWdNkplpm4F0yXozVnqYJJ5nXrbf+I7ziSegZcBC1dXCM2QMAgg+NzI5nk9o6ezRAJQ86tU0BHBUnrPU+lGZPjZUE5JpBhDqVmXgI/9Wax22R6/kyasz0vfE0xPYVo+WPeXVSq1BJH/NfeBJf6QYO6t1ha/pgEU0X9d7Wj3eadOyGx3hp0zyICoBijdJWsvZkv7G8Z3aAgxwBRZhGYe4DcYn+bvBip7PSYju/rwYMpJECqylntKjRGdSrb84gSvUU3wfEQ6ChUvJeiDp/9pv1sFQuOSkTY9uFmnSg+2XmkVDrlQffcOPwYhL6zXcUIZw+q2VkEcCPKtWSEeS1BGSxcPuVqKVN7eqWUA7YmO+BVByb5e/6a3HSAowJ52DNjNlpilGDkmzZuR8kqIgbpdn95U2PZU2I/S5R0dBZ2ZVzFvXt+iJnlto+kRwCn4zFAGofKzRCDDtpO+0YV93rSgrhBHVpyuEHXkEl6n/LoX0xXZIq+9ptu2GF4odzJlBfquSSENgRE+aheSAcGKilo6gOxDb3bXym9HUItF7p1o17z8zoE/3y1t73Pc5MMp8qNDTACzkuTRpcnCnp81+gjgDebaAI1Op02rtIY18GRlj1tZYrDx2VDuEdW53NBtSn9IBExyxZBPeVEowl62QcUJcyatZ/pdI4b/IKtn9z+BJ+6kM+JRPk9P+6CZ/JRlbnaIKrp8/t3S3G5hUylQwPU65HK95WoiXK+koCGjyNQKPcbLaGyzcT35UFcSjGHzZY49d859L1qI9MgGvYhKQJAlsbvmRL/SMtSMqwxgysCQatbH+6UHCb1x73JjB5nBMD5aTds5zk1fBnVu0+LA55MuU0dAF6wSJ82shwYxVLSFRskinvajbmSnZKzLkFr1qu7J9cOohdKH4nsQmJcrnEGJn/czP4DPirksb9oyXSzuUoEwcbdmKg4FEkZk8tUomcdNC931yQpSLzU00iwEzZFzWQYMLQCdvpKlO8tQ5vPdhg6KYE9PtwcEsr4Pp0thJMkmBBCnc0HcB4Wi/c3rtXgLvUKYsDsztj7QWCaOJJSrHPvzAghDwbqKd5I/37nDh9fjbGH1XkkSBTlFATa6vg3A2iMmCRNTJ+cT1UtmiGCofEV9WREyHHYxlp9iGrJZzKaHEMA3TV2lQjEP1s17h2lHhRpufJIxrMfOFmIylBe+D/nninu3z1osd25FENNEzux7Y3d7A1b9hjW4LaPVhDeKcqEsWQiy4obpgikiyQ/tQVcVr/LNpQv08oI0NyzBw6ePNYcGIxsyThU9Cw0zfLQzF4M63wAG0tihiIhuWc1iIllykq8GPQFN1stzMiDxJDGVNvMHcp6TuN+HXPLyqRQxm2dVfm/YnLm85u0IiC1k80oDjkW1k96TiU3SyszJCcX9JtFEhF+vEVrGqXqh1RrHuHWpX7azjs1H2Ra/9xJPygS6WJNf+PI/zQ9rF5GjfUkZOJ5GgruVYP8NatX4fugitJjIyI7KaVk361j4fkRYg1cU/pT2u4zBd3kz6BWsiDH/KTOzlxwgEtFMvwAgiT/J94hP6bq9A6BsIDS5vQFhuFmkXcIIfucO78ciez1OaMCvrWEhDj1ywFSCCgAhHRi8OQqJZ1KMHFcp+eZpTO+yPDu8gTEw817XjBhgFa6aEtz47gjaIWMFlApaWU/04KYUKGfcrwiQViPLZzTDqPDrj3iSQDEFHYHzxViJWlQaCHzYFBpFLWQ7Zvpjx+htDU7f/0FNmkuOsaPR0Ata5EL9f5XUHi+H4p2vSGXSU0EfxyayoEH9R3PRv4pyamU6NTbZOfymmyRchm2PS8Hxy8yTNv/QZ5z9V5O0EcudAZvscsyqfHDwYYj4SjyIT+niGqtS/KWiWIaHQd032FaFxBsYl0hGGO6/qd/WT0VGKASfvW8N0LE8wvD/VcabJPLl6x1I5OCLvBzqBhlXLbbx2Ep1nYjzSRisSXT/q/DNmwlxUROnEs1akM5s2hs3SWwi4J2XGOnYhZV7Bag0ASSMiaJDdxLVsbQQr32BZlM+6DUfT8s47L2ibB6xK2yoV3hxh0ETSOY6xm+yxjE9jg3ujwlW4rBrXpM9uZpYyrCzb39i3zeVMlvZCg5kd4mCPtiDi9wfxxuIjggWQAURhxmUMyVYblnG4fpECRS3P3iyurwXvQ/GJkiyCGugEjNEHaWtVsvGPhbYNsqhnFH4S0Au7ob9QUvPrGpdkfBvAgfunN5LsiRGHt5Hb/sgsO/7xhFeTqfEHvjnVdnWhnQfLOh4f6lb/+/ARUEZJfQqO3PnXcCRSMZomh6+XOUmW7M1Ug/Awgzu3mRQEyWsmjKJr0tuagULh7F3EJ4xj2BbgNPTwkE5QATiYUL77rJ2we7n6/BpO7StLKNE63GHVgqVORJ2NMwzobbRt2MdCuedDB98romjDsuCT/xA/6oZY1aFVQnk4D3nA2IC68+hwjy5YVcNFkcSu4bIPJSkMrkLYWAbX8W/7KWdk3L+hxjnkor5AQU083Cf3c9poHHBtWl8MHLXU+F9hFcsaNnCPJhQwGnSH7qO7sfgILY/tUXigQVrL+OoiyTWpLWveJRO7MWsZdlB8ckrMORJ7W/gYX3qVi8TDCm3jV/sS/lLPVeGY+saeJTx3UCGgwvFN1C+0xlMkZKr0uPGXdIKsqdhqSr9cHXbA6l8cMv6ZEf0iZATTGVfrRMwS1D+YlibjXj3grpUDFG3wEZShjCgnk+S+0w4VZcSy9w4NlS+JPFjWRI+zOBKHm7+FY+O7UbcfOwdeUjhuX4zkFcYD0RDaJc0dIighApz4N5QdrwfHJaQoEE0Jt6mhha3U6b2wOk/TiS6bMLo2C/iuaNR6422pXglDpPjmNq4AR3G7mbRF0b0yB+x8kUJx0sBD7uIRRWdPQKZjqdMExk06p6ERw/qKJemUZzIRrjwW+Co7Mgw93eMpHqYoeMlg3YOuPiPMYWVeqX4K8sjSu6WV9kUg1MzQ1F2ksidSfwQQCTcCyKx/pKXRsCTIm2+ZZFILLgp1F4Pz4jlY6/F8xkmYCQx+x0ahsaruagX0K3lv1u+v85T7URt/PKSq7paYmW8azSBNNEZQ4JGgO6cj+GnxsJelbxBBTMFmYoRGeya+MjlJUJ64v0xisXcE4FJLh83d96cSNfsdwIIfOA1xk8WvvS9VGZpiQjNI0StfW5PSfWzsbHzTX8Gkja2zzaLMg63R8M2pnYW03uH7BWnz3KJHFmsBJ9K/H5pl4jPhOGfIQTWJJ3ZFMzEeY4SBvfM5vetplmkzii07oIBgTbceKCd/7rrPFGsNpm96PKhiUeIx+1EhW8hHWkqoojtdu5786hFAFYsZoUbqPa1z1xJeUrXnVGm54pxoWEG3UOboT+Do/WOggeMKVETvnqDl5OHoOvPENv+d/sNRmyz3LAj5F/YLTQD0q3fxzC02lOj235AXqmktuPz/VwtVOzMLpcyKZ860/6y0Drm795qB2guWGkYCRHgOQQpAFMGRu8F00KmrwFiZ4Yt00V3U4Wz+fphHi83PuONZCKXwylr/YQU+Fcf1/7EP/ykK6c4fmc7wzBW/6s4dhaCqFwPWVxaRv2Nd2zsPOZCreA2JBHVfZYAd3Pz7CLNQkCK3RsprcnEWzPp1vGFD86LxW9TjaquwJ2L975jCXfwd4p26LYovgJijJfXIdW/9SFK8RtQ0H2hNH14Ut+xcgppPlC+4XPGHsLJHVUc0bUe332VP4E5f/gbrXszbCFIi+zFSKFxqlEIPEYzl3QPatQDrXZOeORIJcvyRC7OVlb6IoJSmVG6SiS3bn4CjXTGA29g39oYaTgoHVgaRqPNxtooE/OvzMaNSYULZ9yZVwxXKqo0Ed0kaiqyUvJW5/YLzHaDUPUydbeeY/6g4uf4woPMM6XYOSv+hlBJFHPsck5m2LtmZo7KkD6znkOQPAe+5feLZ8+lq7gN99c4B0hiWQUgv/3QPGUGt6ORVbhpsh0gJdYdSIDpcl3iZth8guXeIJ1MYrf/rfxwfpzCQ8JNeQx4OqpJdlKRm2okIhAkezEPV+Wzw2ZvrYq5QXinLpwwcFCtAQp4aev/rh22oo3RI2GSvzLU44c8WOQsNfIyplJjc0cOWVH661AkD5BNFEYrDLkQoU6xD8ycq4SpHcYNA7LcfYVkRCxwSL9rnPTydxkaOqcNk9i2KXotxRNGWeShMCShNC3uI2n3kczYvL+08pWjdGt1O7gwK81c91rAdrIGBjBdNJmDTqJ8OnS0sRvU1xfByAb42Fq2ttFWb9rTTemdoRlQS8kQuBZ6/ecDV9KaGSUyZhJkooN91VOK4j8Oe1Mi/e0L1vWwOw1sStIHWsiseZrIpMzFlBJphtmK7tr3stE/LY35u96Sv06xP0I4YNXscch9ilg7QwE+gxYaHThQK5aO0EII8F3qBsGJd87kh3RX6RhRwqiOgOohOEyi0fXEviobXVrsgU8Luf+x9d6Mlq9IedZ7AOe02pafjo5IYGuZkoPG2hC1mEFbl8/TAdSEQN3u0O9ucJgy2gD5lGF6BIRY4Syp2vMiLUdK66nQRUZFqdgz4/gsoL0biHLUcyB+Dh00oBXfTNkRxvhFhlRKyQvjKIm+GhrFsiN62S/tzgvYFCwUkYNQVi2TywofupOD9yuhHaVV8T/PAZ3dwk1U3xhETB37lfL6AQCmGcGjqcCAgLtFHt4auEFem7RqwpjaXQXRixZj41ihDRpOxwJgdbHyMukstE7MPbxbu7rVOPoOtIt0b5Gxf2Iv8PHmfYzo0QGjiRhChsaU1GW+iuZgT6QYDhTZ2+8Pw1nOX3kysQyhRuScwrZ0PpQ3jLgTKZRLwpgUIuxxYxadBz92ABGKVExE8JG8ShgUTd9TSpzg7fipMUIMa0/T/j+FHLqkOxopgf5vcOrGMok1tvJfLd3ZxXLbZ2R0ajpfkYkEl7L3w9sy7IZYCOt/F/dU8BiZjdgF+PRu/Schrk4wqklljVGJOrn0enpxR2npjkGC/bh/JaMSstxvxdnXc+MifnO7arVDj5jH+TzBjprHrzOJFy4kX711i7ws9EJ1AJKtQ2FNiZ/pBUIrYNC9oypfDdfdIQp2d/BegUKGa3WczJNQPQkMU4J72GAygHeXORhOKw4+tMkMosmxBj8Ew2aYe+vGNMSDKgi2kAqJRb9ju/RJ/rt/bmSo8RazevF+zRL+P62UBQUdZWG/lFxzJa3KC6BcjA6xZRYv0QpHbT1kRAVIm1b3AHnLNDuT7XFmpAwYCYFzGQlD0/6ZJWF8n7XnnTuuylZbDscy9D+Hhzk+SnD6RQp+bOKr454ZSoWDruolqE3vFR9BCCflhXzuLnrRVGmwujp8Lb7Uv/GKXcSH6RP8XRbCc3hy9HlEcHAlU6FxrHOloBZ33G5VPSfDpd6e3AlCv/ImfWcMdn/Uriej+OFhWgCmLXsnzLtxs/UppXaNU9XhewTRYIhXr6Xw+jHMRD/cAqlHSnSrqF1c8V8ETSrsqsuObx82a5YOYwllDF+Q9vULjAB3lqOX11avd3zlsMXJOl4ApgAPBTAjlf0zX59qhmH8UHLCoeXV275KUCfgfc0PLs7dGf/ZdA2w4ZpiVyWq/i9cfYWHBV7hurIm1ZQ1mkAcaBaMscuBgliMEhC8AnXt71WVH2ptyPt+TMWSbgtFqN9uGtIhqRPR9wUyGiRHtT3rmlUY90LmYKaCIkWTnQl9Pzj08YGS92fFTDiT+IyZvk79v+SE5djtt9BaaDluWnA8Wy/6OE9ljY3a2IMrBvk6lslMgBy476JIW8LeoAoohVcvOsOFUH6ySDHTDedN7qMwqQhpApYZmeQdvK6t8g7UMAfhhPSFV5F54Z2Cp5Vj5Xr1BsAyMhaNn48RtetH3Uj8KZRFGiIsYJgdWyhlVLPINQ3L2Fvf8s9hYxskjrXznL3pDQVl/Q+kmk2IjZjTM1NOJwNoUmD4A5G9NuC3Q/mu5QQqV4rAYKPeCw1ey/GLmzeQ7XN+BP+hBKK9Bl4KYBDtrSDo1leO8k8wUJWJLzB2uSguWGOJ3UZ3HNgvKR/rhC7JqqsRo0p/bTuMWEcokCOkavA8aYj2htRdSxVv4HSyOhFsLDe6I6aUsn3BcqeYUPm9DtjXBNtVRKOwZyhYa/38r80sW5gGfPUr9jaa5bvDALhRJUp5g7MNPNk5AdXmGo9fW9BHwrC7Z1w9X4FZKmvTlXdJL1wdIn8oUGqdkFIj+iFiLdNYlVkYbw5eRpWEQNMWjFa/3eX8Q1frDO2lWkAJYtbr/P2zeS/Qw9T6Y5m2lf+SuuPtSzjEUgkXv9SQFvGFVdyeWY2LtkRU0Os/R/Ws+DrFsJHiJBFtbE02fJPtylAY5bqcKMtyRsjP56//y2T8B6C9p6ejjHEzSeFfA9zeJiolNTjOaJNjmDWX2AZFgSsCZLttNb6zG57EH3qJJxDm0ILB5HfsiE8vhFcdXSoFK7QCQrmS0XCsEjiqjyMXSRS0poVJOSiC4o3eoOt9wgopcCmw30c63NvkUofhIx6wFHTvO4bDk7xAoNLpCsRaYjSAaXKVBSMl6Di8iBEac4wOb9iK52UBdqeYlBaPCh91hbW75ZV2YSdFYK7cafEbitxHr3HTqRPWOQ4WPB751VWUhZSiwt854llRrjScPueUuUrVLf/i5Y0QFNQnw7IoT77in+XzGwJo7TDgWTob3eNkRCPncO+e/z01jMTgXvTX98PNTpEV51cjLfN8jtMeP84akyLay1lHl1nogwxEL+KOKDSWqNP2c8aTuvCj9Vptq13uq6badYr/gO8TRvZPko1QXDbXiDbgro8rcYbfIsL5nsjMU3iz/HtguBkXzV/fRwP/ulZM8KEwxZc0Jxva1o15bEforPB7lRw8bvebk/KHsxFbge5nt9xUYypMmWarNo5nYgL4jvZMQd7LAEM7Rhhrxe5P9+ScPj64WVUvobBduXqHaHJYAzjjxtLr6gY4GKFm2jd2mLhIu3Egue4o1/DLa14taFKv913uHy/29bm0V3j4teV64nlwhPgqNqlx7broO88cwbUM4LKjaGYF4vmZoVVGChHuwvQiSL/zZ6dCE8FytBgvAf64h1bCgmAJNJPqZKWeRxXw9kvntwxlcT8+AWMGwAwKtw8e1/cjixEO1DcrW7Rmz1wUl5GxVcygHhyCB7Ohq60QmLkIojsXtg1syZmYzEezxedI0Hsbb0/FED9qtTYOehY7kMRaIZAQZ2/woFd/fGclIutdeX8BIlHJ0fYlyyobMd3Ql0zkYNpjpOIqX24e4DC6oAaaqawRdMZ8fvX6L7YnLBK2jnGwNEa/ieLZIyVzM33nZuhCGPaIruzmB8p11BQOlWu6b5sxz/kVpx5kSpdFZhZLs/+uT1hWY0SCymupBhx38NHX7ftRQrPp447MooNugrkgSl9IArwffItkR6O5JGgw9+27D49sR7bUHyJLhtdarPOStBT/iE8jnAiY9ny9KL9GbMMEoc8/z41uKJ2iTNI1+98nuapLmZeSr2O92R8/6UguF98KftZk7JykUKWgKeR+2LlBcbd+Tpg/Bd9ZRie2AM3VM7/OJr2VuKr5eyw0lJHFrgqRpyjdzcH1Vbspli2oIuIIcOev8bDZCEwH/2LBSwHi4+CdOOunXGI1q94uPTa3+gNeNzFY0z+in8rkVrEBskdRdZTo/8JBguoMyjGhLVXpQxX6W64cDKs2KBUn3BZlokcHkAk0FWx9LagzWbKl14m29/T55FiCcJRu20S+3l8zfOJDUqsLbHzp+ynro+MdhoTVG20ZzUOtHtaxn7yTqzy2P9kjLq56HXetYTNgkvxcj0ckq/qiV6D7MUqcg9Y04kZhoPkybOVKAW3VOuL2RXkPtYCHKVxEXvunAcccFwAoiciAr4oi8igA2dnwEf9oMJVptuI9Euyg3ZhMN0oaRpAkLquKHOMpMQxy6Hd8lhsiSuYDK3CtlXRclxY22k+3+KMqm6DK2PfN140OWNR8+nH9zAVNygLj6kI+LLh2IsiizOMBY2DZkSbR8uUEg23/xecAiKSn4y2g5XC9dEPFTeZIY6B7/f9MShHlgDJy1niRFYhV2KTGAqRpzHXATEj7WcrsD9jov9MJgiylf+1XcXzs/dDTYQDTgnassInDibsoeojfiAfQKGbFJ2wUS84U92JFW4KZcY/WgCyqq/3r4bsUTbSGa0M4Aan7YN/ot8SmBYkYrxemp8wPjcrMNSzrWRu1JEEmNiyi/wSGXCRTFjcB2zZ5n8lfhfeRN16vI7WBUz8P80FP4EvYXVhD3HTw7QRdQifoIxafADuD5OceQUnZsPXdA7kCB1cKRSjkBTCxlzLEtcLgaPyFftyfNJzk7owHnTDvIDhhm54z8OTSQ9X6odwJMhRfzYvRKLRhFEYVQ+ciY6eFws0p7hXvZ3WXQ2Q68/7Q0G1Q69uJLFqnVIAdOdqpAEWxmFpbjm82Iw6YMaVDUMyzLYcJr0ijsYih0uKCeRUgVXhIhjplbmbxb1famNLXiPx06aaGU0Bd/P6wa1GgknWZExi1NESgVuSZZPtcbwGsCILvkDsUGsRDXq9DyBwAMgDBl0olf6EWjeqepsMWt8dL5HFRtMczkRlAgUiIGyWS2iq1vhB9idBVDomHJv+z2DSfiqociRApEyG26zc9aREU8dkcTHYJQVSNJ8DGLIrjgTs3ongL4yNM4V424FJqLkVTnASc6hB0LAs9ZhZ/5e9OFDokVxD5k9qvGhgeMtz7GN1gbgrlGA/9wOQvHx/qHSnzAmSmE/4WAfruDrIU71vjAPUwE75JZb9k7I+SF6ygYYvsQh2DeFcfe+cJJnWz7WXU+Wpy7sHPAI9SXWwV6GFyMycS96mid72MftDxqVnW2AmhsYewHwL+iLhUyBvxWH1qI83l/DRjZYic15iRtL2+ZHBq93CyQEgI+L2YZvy26VWAJJa4jlTUJ7VMorDptPaOgkg7YkMCMLlWqka3Jls3rpBlYwNgvgbYfvo3cIsD5da6icufKE9K20mjPUY3hXJ1eIkt/EUQQ1mFkIo4yaLx9jCy0wmaiwNakDZWxRrzEDj5ahw9++zJ3f5hi2qdeg6Q2tpJd1m25EJonVYoqPYJ9/hZmLzOxr3/bDmSC8M4PbO/RG4aDM7ubXLdGC04xIaEdWBXbNpR4ScgVFmNCyt46tKniS0SeMy0VDrYm62Iz/1NM7eggiqLe1fxYuIQLFJq5K2kAnfxDJHWDNdpKIuA3tK7xvU0DmG+IVOHsJvMy7u6/Ac6XTFM8tUz3EOwF413IswkghUxhdqQt5SzoOWLJY9dZutcupCbaiB0Ke0pvhazsh0ZQsN36u0iKqokVeR8K7gufQpdTu95/Cf+u7AXWYpblkyhri6zZPAcrwYBr/itfNWv5UC1H+bsZWNPhzCAi8UJwNC+qj7KwZtAVGqA1Lkt1wFOoOIPJT0gFOdEUJo6ALM6c++iJ4B3fy+z1zyx4hicfB1K4wDoYNytP+nJKXVsb896Ph3coFVe5T5lwMqPrCgGgL7ip2ni9Yx8YW9HskuEMcKuZqC3dGZbaKHBBNYKrx5HdGQWAjlpIKHEJQwFGGLifvFxWXDeEcy3E/ImSHLnkPNGEDP1pCwo1NIVSUoAVsw11EBMsTECk1+PxNROpZkOPpYLwbJH5ld6o5641iA98MmcEqZvc8NxxgQSuhgEWkrJ4/E4nXWcagulD66p4kCb9u7lPyr/GyN3sWCYj8zQTw35i0uk6hW6gE243SfQMwlgl+0RlHdEvJdWeZdzUFtRjDhuECFtw0s//c59xuhwfF/PP9jjTeOHXZpJPz3v/zwXEY1UD1ExyLQtv5TwUpwZuZxXa6pTIDqPuYfAh96mvgVTvFms1IlzEUfd9FDMEuxS7lyF77QQO4g9/IUt/yw97SyRoQmj17jqKbgTtKa9BFXcadd9cUdJ3nqa7va0WFgilSrIskzbyHBMAXjfRdI3eh42lSZpWYKAOzFmGbNGTap4Lz7oVxPbmIif8JwgihUxBy019wlP3qhp0SCjxyOaffcpxnjhJRL9UesBWv3cDJolXnoRQHPl6/H4Eze8k7wtXOJDTnbHNQs3WPrYu87/Xx6N9hSzP+5Fs/Dpn0WS/oSxXJ+05t6SWPaqkty/YbYjOzEfgnDgpFsPpkS1Nm1iKfQYHbZJ1GaXOIMsN/HW8c6UMZ1i+1CTEk3V8G4Op6xQr+GaKM5/fXhdCwCPkO6+oBQroNges686LM+l3nv7GriQs1zm/gtAcBvTnM6/Oxk9uAECR94O0AsmkrmLPV4d4NuMYTx0LrP1teVn3Uq2FRW6CjY6pmnM2fMnu99VaLFGPElQU/BLMmod5azA+fP5OZGtGO8WHIz+ikc1neinATsH2IAUXusszDTk/l2SOFsqWI6VZl/KnQMGKhqB/mJC9UXm+cIRpPuTt5sBtq1cvs3bUBYoLlcmsSZO6DJWCb86LLulbmeOPIQuLPC0EAJgXe33Hd6pq485+OYQssFUamdqNmQRieHLx8/1W+viyAZvLALKvFO49BXTDV81+nZ90pgKyAfWcf6hsev7QSviBOZVifxw4At2rHva6zFjZdkwtT7PV/XKmJ9cWU+ksG8cwwUOU8AtTC+/kSWgJXKxq8QC6hWkbvnZVyRbj1l1vbyft8da3QwJr29VvsyESihZjYy7iDdHJKpQcOxRBf4mXP3AwYWQOGeQsTYGf0Z6SIsTUfMVl9ctcKaA6GBuYun5tgV1YyzHk/UT4BNR2FRG+u5CwRO3wKZH+zxBXrHKwyA5mGbStcOtBz5tB6Jneh0h4t9IycQKyRn0L9hYbNbn546TE6J4EUAKww23ZC6mOTtNi7biGOSRmcNF8BZCdpU5cFVxiOEvJ7C+Sp+DFEJLcZ9MShQYgObyBrYf8Riazu2tTmkFC8BeQJKIQNjKbHL67l8zqvrJPxXIG4MmdTyckwuc4751M6rLTJ7BYNh1UC7awFPQbQKBO4y+yqTRsJTwXrr0s10qjVlSiGwQXohfyBod9ZmK4NsoMkdVIjLWxL60DGB6l7KlBj8fENEr9X4s1kO5GxHZ/4XQ5c9/JoyTFbL4rd6ugc42Pb6IP2eEyGJfTxErxyGMXx1ESXyAJMv+ZVi1PpfuZsXTGVWtKYWiLCsCJM0PHMxqRypRT0P5vpkxsQCCA5guqRAqg/eCeWTuM5l8v8FNhD8ILRPAdptvlq9QJUnl/6HyHoMtqDB/uu4WU77HQGE0WrQIykGekV+z+kE7nIzEx762SUBXeTJpkZKTnyqnNTFegn8E6owy03WS83LIW+69QzA3jzLm3PFJOrR4nUYTvXuQw2wuA72hSWCrj1bHJCZmQugTLkkOxwYeLOmGcrtoc9QPegO66dhnW7Uj6r3bdJFcyO8wdNPBwTJPOh4k3HANHsl15e8ntQvPeNvrW74djlFkdon19jymU5mBnkQ9cz2qHhHU7ADp8ATdbRPzr4MV/kQVVXhRYWEdZAqTwyZ9DFoJ77Gu719Hc9bZ/pDWzCExLt+kPX4NtsiXQQfiR5hrvtX9hY9yBi1X/0+ATDE/Ac+2LeCZRhnQN3/XgdCaEKUn1Cj7LEoDpNEhWRN15AJ+x1SMBCqz+KEYKHElCIjtM621aAhj2JEDaruaxqr8ao0ONu/0TrwALiUWbelL62QLxfZ5X99aEnKobFNRYlod1q0bDb57lVEnjVO7GelMhZRwnaEQ2HIf70MwDL7D05J7Bk4k5kX4XpCwnMbjZ4dbUUnmNpIij9yMY3FMA6hx5l/6PjgSvF1v9/LmhMt9Tgs33AH+PBcbDyi3gPgkm+9ctw4BrEe6PlVN5ZQCoh8w5dAubwz7hF/ux/aIqw/W3pWUBCyXnynb5hEvhz572nrvfT6Bj/RjBvHv/3vl4o5Z8aJW9YrJKGQJ6qvmjBoEAZgpZgz+oAtmPlciD6DCMuzTvzQE/WTvoRBnIYcvw3nseKRm9mmF4wdEixiuEvqSNotjJTyXDatG+Eajq2C5fAvkPt1CtHr6TiBnoUUkUR7YReYlG+/zF7QU4RyC5a/5fiaJEJF2AeR3umR2n9WCJjsv892ZvGaN8oX9SQpFTZ6XiCKwXiuBnXdxy/B/WoMZ+5dhqEuKf/WT5DgK//2tk8tv+qt3Mqb12Vwc3fffT5spp068BsJNYBv6ZtRBAVYPFvWH/Z7Lxorlny5ujVBzoYL/o9e2LvMpd5n7tZl6ka3p3Ld41DFR1IEuFQJi2MRa2vmQ7FWDZID/x3KqPUWk8mcwxOsMlwbQzpNrUD3wAx8I9ogudugUYi2UhOpRP43+Jo45QBL7O1J2Wwje7JHe4c25+r8zUJBQBednzUEQKyC+Rx+znryqsj/OJp1+mLS2jU86GLofRTAr21Cbpxs7z+n0yoL51vLdXHLFigpNwIR8n8sATrfjdE9/JZal9p8wut6mEbxmLJ8aoQM2gHOE2L5m8u2ll9Sy6KSVIsuGgpAy+EY0j7PfvlY1wr53fpzCrAvwUt3YG6xd0PGtY23GnRyhFyKlg7LPIGbdvNtzcdrFEMgNXCD6i00LWfMUjqnNu+Km/PZynOTov+ITpLD9JrD2MTS3vuUO6v6as4WBuJX8XNM32+jek8Oz+GF1azQ5Ru7NRMheRmuZYyqoEBJ+s9SJjZOXJSCx4HwoSnT9erze2J9bOg4Alp5iREoHZJQt5wxK3GKKQtAil5I/qP+BhSM+dKfHGaPX1AlPy17ZlJ88zFyFozqAzx7mMa9VO//x9FMhTEjoVc4N2co3NNVgY9Iu7T7OMmvn4tK/5NRiwx56xNZnUIY/Rqo2yr/Vc0sNMac/QDd5//oBViVXmckiOpLTOThjmXZ+CXONOftGV+zwgB3rdYym0AeWN3HOPtUaCTU+AFUFB5Oy6tACnXjNfPByQdCAjCawD+KgLNmaJa9yGsRW4hR9QgIKVpQKNWjcSapaTZ/Jr7eiu49V5MA+AcV74TMkW9QavFTZYZJTBL/TUwgKouiQH1bcFRW8eIJ41x8akwWzqtlJ0JKqIcEwaBRCgaII3F6yg1mkRtMpvLb7RXYQ4RZZxA58VFZbCqgYrmH/suOQDEAM0cFVrlR9wDJ5b55D57/KZ4Ul4MtVlSYCUiaHRtN1g+JqBaHHMGtxLtX7aD/6g2mhjDGdmZ035aUuZwsR8j2gaO8jBHQIEmtDHIfgPUXh5Gt17WLH5y1t0VLAhYqKorfS8Z8ubLpUL8umbsNjWG+qrqCWBNaveTLLoICxsygype37m6c21YLI78ddQgFcPRxMAqmmIYHALUG1PtZPfGcDOcFHg1fefPL8wLdubOFpvi1e5UwMWekoHxfY99xBOW0AhBpVEg+jJih0ObV7caADC55qaPKx5MAf+E+ymVxgE4szxTdKe+4zKQBO6cFYpvvrxIUFDbNKG8n5AquQW/2rRtVBPdWRoyOY/o4izllN58zX2oeGBpiPNgnrx+Vq9VLfdw/eu9yMqm+9e4smWh5oTdZBd2Etp4r+TQ2aZD4jJ9p/Eq3ZfJz5qMMlL16a2AK2H8OG6EgeY7RK9FXqd8raCibnb9Ht3MsOAxpgsFtzVaaJurHCx/Md8G9Au8TtHipUcqKLJso7TnXP8TTa+UwOrqoqWRXvIs29HofzS8wTHj+Vb0A9nT4I/crHlLTQAq2PtMWkQ5+2xXL32c2Hu03Wyy8rmFKr7l9dPlrgCS7eYnUBp39pdqTF3zeSvBJD5EcSITiO4gH7UAXM8p63d8kHEBRmnutCcfZKlBqM7VeF2dqk2OISfvPQ29W53TcaOp8FdM8fnnWev1cpBCNZoOTUNyJPsFdcejkxUkAbEoPtfgOfbWi+d0WvbYt2m91T9fAn05NCisGD9iaInd3eYJIaBq3zDo/nzg0bWnBW4/HJpqwD0ZHJMc2zVhfxuvD6rCW/J3Oay80TwREkr/k4nvO7rknMT9It5Jk+3LFSqLxR+bz42CEWPxdulFsyPl+FrtxsjI5jxxBQ2Hsoan+zdO9MviDz4hjFdE5Mj7ir+mKssvGhzZAxgkv+d1o9YuvxZqX+MUNLkeySyDA1r8GJ0yyWJLgubZxFcVw2dOkBJ+1HXtk/LswO8EA3e0wJrI+ZzKRmq9hTSowKQZVHUU4jctjRjAGB/epnYw5GR12HbAkfkzTzeBb59kGPaupF8SRHjoL27OSwbZtTMwcghti4TK0tguJYNecHB+7IJiqyI3plEhReYYtwe2NVu6+QbUdMf4KmCIErvWuXwBNfdMbwpuPIAoKl4k1FM1pbf71EWZVaIFa636EAFkXb+ybDnBMPg/Lp8SDJw2fO0kQhlugkp3Cqo0MJzmpLXOaHZ4Bcuk9n2cOqsEsGlMa6Kcj9vvXQPRxt0mzXNPqSgfVfkIDr4su5TWY6nNfIBJ/pfYOcMAibihhfpnpUuYkqKZhGdt5S/kXk3i9wYCK9IoyxTrizR9jQu6Iwnn0OAcmiwBUlHHT0j7mW1iyj0XRnIe8ZCRrSrniMT5qaSjUr6TnIQT2pDD8s1WJpweMSROxFo4Q9AGCDUfrwrEbdMrPS+9iuFVy44B0e9zN4D53OIf4YYHLv8HBILycDxaTP4OFVvrpt6iZ8Mzq5xAYKrxvW2OBA/kq0gTE5QQl6C+H2iLH6fEFgj19ci0sbhjOBxIcBQbsvNK9GRJsrfb9gFgPfU/42jTxf6Np5TVcJ9+Do11uj+9dbtxDc+cEmAD0GXFj2HuDvcIVPwOSDh4UPmRS8PBw/P/uZdhZQc8rUh0gHVVICu0vAEHUUrxMkNnf9h3tZoyWyxMLMhG0TinpSiQpkB+iZZmLK7XkWwUHs9e9c5PFbx2oEbd+wBocBxlNv4eBOqnj0Z6ktzYg6AN+fTnyRXOqOmfaw76/pRmu/ZgiIktO9G2CclserXH3PNEjkN9wT0l78fXExWU5GCuLiF5Igm/taQHHfQnIVBLgqC53wqs3N4eUgO/QJeAKeIsJz1U2akgsJSA1NoKbjllzmDFgNR4dflgQqyoqlNehXQMUyTsQIIwzHKjoU8Rfki9gOIaKsGMsGyA081VTSCF5qTos7vRDz2IlP9HtuhaUydIIKNPMRywFJgP4M9mk6g00vvx2NeZSAzF8VRr72ypAh428gubHqz2giCBZOhi8LRhWwnlFld6sgYp/GUEK4e+V1c9rMllLByjeho71aJwdYryFlUHd99ynEEFpo+b+8U/PuG0hnp/qysqp0dkwnRUOiT76TvdqD+9OlMbXxJP8A9JGEYrrAGbrurEUrtGufcWVhBSFkssWwDtrmdImnSb5RvxpNuLpy1LE596nIAsG3mTazjhAKZVDuVN7hQSyw+MMVwFn5AQlVCQpmOwd6OYQVHPyx7Wf8PGYMky82pgT5G0ujNf68Ri8LIXa6Z8DR8zNLo4pStA7mLKBWEgGMwe/tEdwlstTSWxlHb/Y5FIeAEf2iBccql15BUU/gP1C42z6/omd7f/c9f0x+5438iM40OFJNE06ivBvSkMPuNyTAO7ZUP9xFsnE3dynJKYDNPqICnCCS172JmzQYiTkjKercW+3esCJunnvk8Ygu2xiYofefN9zvVm90lnawjQBmHCfSfr4lRnlth6rWphF9jqi7RatycAbCznMgAZxKh0LS377RDnZ3ELb+x6tj/vzlWJL53A6JQInbPNWuaBZ6EG77A+ELC9N3lWLb2+2gMvh5021jRmeP2KcMTis1TfhQeHhKypd20aMsb+rtiMcmkwDlV5uMUySNljRTPe3ml+L6AxBv1xzBugdyMMkmL5xhxJ1TK3ILd6gSDemL1s5Gd0hfKiu/TtYEQX2I5EJC7HY1OwGEuAAOEajbFv+aN9rt9vxdF2x5+o+G8Hl7p+sGUeaeK+iLXmjigWyq6DO4VRfyhh5fJDVO9Sir77ZR8tfTcGCTKuCQi4regydNqsnKV1s0+nvzH/29Wue6GEB5+e5cQrZPJfd1Q4UfRkKYyyRBF1ev26De3YJEvQuN9rQfhMqlje8brT74R7aJMTn+7pZdwmwlA6oqaZk0yAXNEnpNyLsdfGpSHIv8r4MykcDHz2DarDoU5lRAzpAUDG1uJTnca0kE18pI8V1eyD9nuGBQ/z1YUxiNiQ/OAo4qxi802M1GUW2XgW2f9p6Yh23eMUg9wIXC3tCUf0p+/Y+mUoJcXn/NJbUcISGsx3ZTe/tfGPsb2h8cQR3mmU2oSTtQkhWDyDIxit6hnrJPe97dFIZR1TVUsY0svDXGPjDk1Z+Z2mK6hIqP+RIPs3XNz/hzrl4lnljuMmLg5mHz7DivJlZlZ7L+yWAT8BBUI3uKeIPNlpMPAUbzHNOnDjsZuK1xQan1adGwXq0wBbn+xP7eG4zI52WzarrQg1Cnmo1Ysd/vcvXlCH2Fy6YAG8PfQbVS+dEvLAf9qHbkyaoTuZa7sp2xYsRv11jkT+yDV/AAkx9DahJKV22HKmpVrKlSJGvZ2JYKp/pwUf/9A5UXOWP5rf1rR8C/5DadggYjp8daLxomwt2HpY/MeJY35WofGa4jNY5euaOiNhQPMDXQ1KQ8njoxRUwTO2/1EkCFYKUE7BBfqR111hrhXRReUhovGKthJtCFJ/8YCfBS7WD4tC7H3qt8vY/FQ+NhQuZTsK5G5Z+roxIopbbvZsciKx5LlDhmFQuXc2OC0GHWnnESR5zp6HlhN3MOiwyDPtF3y6Yt5NzCQC8m1ken1kmdFPUHj96YhicGGyoIn2ne8dG4vmCPG+vxHMVAG77JEaU9q2vvPJyJB01jwKn9zaHap+RZLOv/qwLQbhRnSnRAiaId4R0tfN6SA/V81o5edhLnVlCKRAKFQMDrQedCW4oKxpqJ3u1+BW4HvEYh8ibxkQwnH0hKElVMbJwHRl2ElMPWygWENqlpf8YJyoxAxwilTCeWe/uedxke3ebvNBLK6d2rjd4+4Vwsqdg2brp4/XwTIpUB7smxNSCxSpsq/A88xuVsG3AapM4djngmIeDuP8nl5mjWYzFgir9y0c7uXX69q5Nm8nA1uo9NMifVjy1xYvgS69B5jUU5mm4jLuyKGCt20HTFFk14rNRClA1af4Tq8mxnvl58pSVsxvcb57QKAzzLju7rz+SrIrf2uHST3a3rqZjScJpkoswcAeXYnQQ2ZhF9K8/fMge4Fgg+qQNSnfzqFWvhdAYCzIQ3zaLNrC8+0DVrv+gHsJJN9yAso77ws1xcKKC900l4wYrxVctFhumuZP9N8eIwXxsuVKoo37c6L4n0rIjd+RjSEZx8mUFnkOtDZZVkQHDNsCOUfMumzzIQJyoIYejdBEai3OvL0sT9lr07YdPutyLqpx8pbKKuEAnjEQQ8HvqTDbWmDRFmZKDdkVRG7dUKR6N3liJKQGKvRjs1swWzPXwXKqxy3X6gke5QRqry9bqaPiqAD4qAsZyQcaQoX+WdwgZlieRPxnOHKTMxWkeOfAAWHWiMXe3YGZ8ovFF/WYzhc8GitHPEqpXeNOGYy03ynVzMcvX6gOmqQa5Kyvqby50K9WWB925CKjzxQyqHF5K9ggMGueMIg9Sen8U7wTuKLZ6SS1nYhtD7aW7/6xoCVoAky61DrFSsLJnLXS9r8M01oWNohYqgBo7wXcvP2EE2Tm4VF3tEi9m66OrebEhlZhtO0dGv6ou1aJmm82cAK54vl3b/m0ZYrMuxS0tRB4x/W31LIahUVYsf4mU8B0aaFR/nmBVpAEUp9rn5Cb0gcVqWCXR9b9W2Q65jcLXLmg994bDeXIPa+WXF40eFXHH2glMASZptudXZFH/dTizFRM7kk+hRDKMqraM5XcTLv3BhX37C8pD7dOCamtkzK3lWubM6u8Q2u1Aq5xsMmD2esbn8pwRGNsuG7qvV7uK6QTRgvJHhJ6/GYdR46MmNnhbY3ZXX2n4iBwipvw2lv9G0I1f+0kQWPFoP47QvxtN6/ixVZNtFFe41M/AdRb+itTSKBvKkQVxFTlbtnsB43gKjP+pExKurBierhx3Ku3bXKyIMfgRW4EKYd4DuZf7OhAQ6A9qYbC2a65EUQMxfuwhNt2AKpsAJsOL4eUyHGUtOwkgjWIki+yy3/dEhgpSUFQhQwmWTmB8wFu4Dh7RbPFAvZtCp5vpoPXwHLugoAB2Ho2s44WedzRqvXOYooU/YAj+9+h0hiD/xdRKvZPJeLI/YfMjQF8oHMXZbi722zzAwZEZh2I6L9NHNhPJ9+G04m+mL1jbJK0nriRm57dFWrgaDz4Om9O4YlRTNooJpRz6uk1M8M4arrcMFwJ8wqBj3mxHxWg/cgczvWvmDkCkNmJFtPo++yCnccMiX3PK/R68lqG5zTc6tkTWPYc+tLWiyEsDLUOgFJWljZKSd0M3EZP8cIsJcnHaWYsqN1kST1dWKHdryW3t410GOh68cTt0LJ1Xmkl1XxXQbx4NffmTaoQ4NQuCmBdc5KgvUC3/T9wlVRC6/4nMHmiiG7GDO9GhexHpjBtSbuk0M9lolmV2XjTYB14R21I10eHkXSLZdHVMLAUGTHe6pblpJBXkX6BcFr5Fush1hszicL13gwecbTt9ceO4QSPMNAkf8IQLbEJvk1Wu+/xbmyA3BQIXoiTMz1/mdDHOCKJHoSktMRUShE0R7Y2Y2Hg6QHyU9kMHTtP7F0wCc+qci/fAA2JSa06SfbXTmNvUlw3iIM30GV+ol8nVWBHSYb+597YR0ulTR3nmhWIsK3UVHAH2mFhvVwTnG10l4GlGkW6kyz+/7o3D90O1vrkFhmhMaYG7z2W9+cK7zhvwjLTDOGwqDcv70ADS5FNup+Xh4EeRlm264blggeHiC/sGvrEQIAinhhCHS6FIxkHvC4mWAMVFzGvN3GpmpJb1g9S1MZ8863WZb8xujxe7+o1531HgvYRgk/86a57JnbCgu8DyIsuP3A+fCuijMmkH+DEsQiBwXrvyOf7I3//zRpyIxQ2HapLZS7eabx8OCPipOl4q/chXCK1zIL1yIEi86zyZY0IAwFJ80zQET0SFNCGngSo5UUObpummdjDwIB0eTK9A4GXbn9O6m/o7nX4wOb8a7smTX40YNmw18RQcq04hbZnw1cwHoVY9FjsTUIdmJyDnRcbjYzwXtQ9SMBM2oVLqvBVau1cICeWMlrZ9EFqJ0MTXeZZOvEgHol2P+GBWu5jTkqw9jmnQT25k1m6r2qHlK2yMTgsti5ZEyNYUoNm5oUwq7zDXrFriwYixKcQe5tdxAuEGqLiPzsQMcp1VzXKAXCRl2wX2STrWCEqNJMshKRGvtpvEQ/o2Qpd54le15TaEOlwSuAxl5u1esHPwDzfxBOiCdI8F6dPusGyfLbYNBSwKOp9AFXZfV1VBTra/7nPQAKtrHGIVtCJTTqVekETmtbQa9cZu3NfyazSxxYA3Ptmd+jPqNRtOnMS27s4oAE+IzrF4u/RI85oi2CYtO6AIJrx7A/zrO18Ud7Qx540gh4CGdljUzCc2jsBM80Dc6qlvjuB3b6Cr3qdAsv2rB7hFdYoisVLLSB8zrhH02ylYltmHy0skP9jTEKX36JgXHX3tRiBYtasc432mQjtxYvF8Gi2DGsWKusuWT7tI2vy1tUJnm4IxwDM58lzTGkRDsFKNLbCH0mqDCnBxgLkJQHOmAEdqPY/SiWC5vwY1RhiD8hjHHurjqyH/eUYU4p8ut8SU/EAMKWlmkCXJ9tJxRp9/K3vtvR+JZ2ASLuVrF48w31ARS8xzXBv/gLdoqmpGtMrSK7zPn8bdUrLEB0ZTdS8TKGWQQoV1KY91hQXFvJ7lo5Wa+a8lS4p/oHPWgtbAwqMTrRAoUTHQ+ucZRkJ3O3RvEfJ3Yb6aQHZlRNreuHr+vZIjlZQdo8QnCR8V9BM1p+QPQDaXFlpA9lRVqxA7ZUhvw9wabUgEFVxZwQaITVtv7uvzIhHGCeKSk3EmcWlOgDT3wg8MVnIemGpEZINj+bVtzT9rLWR3aKv/JjMnKRRTJmNYwq+d13ouC8oQ/hoJYTJMSI4fYqB+WlbCR7FPmhI0uUWJy+1KtkygEVBRc5J33DuwkJ11gJxENe4MZxnoCZ2bnnvdtWuPGnErJhI8TMnswsSsb75M5ojH0RsXR+eEmjbOUnR6gjAFx9S3k25UI+1z//tQk1iCaj4gYUVmoHAEzhvqT7LefCfnRyK1T/1oLl1Fzg2vzs1hv4sA+wveBSYi8SQj8PMbnR8Q/OSYsh8BafuHCHxiBnd9fJRWzqx1apIXT/3QqDRJaDhDn+3ktWfM8TFNaT790btTQPkjZZvLoazbEkx8QSLp45O/4wvdWuuzcbqI0ZF644DEsutiyPCNRP/MFo9BM1UJcdSx2UX7J7oHJhwXX+y60LUm6OP6mYnG5IITwDw4qhDtJAEOZEnQV4kkcxGhDds18rpRoxPWb8ToO0ZLvHwBLw96Cg8F6GAMYQdn3u/TwiEETWwvVb5HJOil/Fx29GB6sK1R8NqHE8Q2qFxBNW01tyeY677sn5IaK75h3Noqp0oUiDupSgebnIFAyLf+rDXZsk0n86G0MSn/m1H/aAVZkniwKH26z88kUhteoYRLUUkX8peLZSAWQLQYh7WNBq3xzFsLWERK8vt7rB3m4I+chE0I97AKOTKrimnPw4eKHpct4aEIFtTxF88imfJszw4Q6O2D1VB+hDksSWmgsXVS987DWtjq7IZh3iCcX2YfFAu9WqbaWxcYVW8/iisQ9US96F/5xt/ZFgj/eSpHOfEN976a0Ltc5Du+8YmJ9b0SUlQAit1hGN01XHQDszJMpAsXumVsLloOysodyLE2Wzq+0UN6L0UsBfQssTgjSm0XhNtyDhihlIsJBHeWW05FhicBmsaoUyULIoMkLIe9QkSM9zTvlBVABT0J4hZ9qfk9/cgoe3sJHXYtl7WmAMUvg9+UlI+eKdueWJiQNUV2F2z6V04YunfmN5qnU4t9PRXf0UZE9LlYTmhjpjAVGYm90xeJLJzG4uhcuZzzI/GY88u4N9jpP5oehxzcCKmCK5xK5t/v173z4DIuKMSIPXhGpVXpYc3/xwAkDe8kbvBSO9SqAqOdsWYLMjk7rW+fbXncdxxqMWCwn9q7E7C7h1PZCFSfv9DgCT/6dbjGugCCZtvEoCKTV7/zHgGGsuLYg6U2ntOrH4Ws9qEwQepDlugecoaOtynQLgl5dmx7zAHnpYGNQlwbc+604FSsVIxetAxNJsxtYJVlZjwEsNnxjZVOpVcIZlAogcYnabZ4pCWgLQYlMwPjwzE7DQ47EqNk4jhC7arR5AyK392vJTSj6feCkE3L1svf/pcI93gyw7wz5YL+8F5egTlfcf2AsSpe/VI991zcMlOcQi1ZPqNlToO8xkfsk9Gr7PkisZdBmRcOWOJf9UntFVbvj674aawv6LwD6nm/R1A/hGSUxK+2571X5ThpZnlTtEFIoufBencQMKSsDDRFA5PUdgJuX5PH6KDYBBWCj4wHYjEFy8AV5/durqdWzDaFPI/AMrImfcgsKvRWUPIm1KR1E++9nbo7Cnx5q9AVXKKHgoKzYvaZEL7f1PUhlFUmR4MZVhL+Hj9tIQbtP04azKx+TNQ7gLbj4XvJuUHbehpL6cRCZqtzLLvYWkXpwUPjnaAq+VAoIagRTQaAf2q6eFEBuMuwNxSGyNpISjPeDbkcnUY9UvnMCCBWkYzgKFa5HuZile6leKdILVKMLrQogiGg1FVxapTsQWuz9luNoU0YuKhCjm2ZJDNIQ9COgzIxDSyk6nvp1c3mvvDAqJf3x+E16ZdszyFIKZuP0ZYtj+TWCHSNniFX5Rqyps4tLn4zF5Y7CHpMFxuh6rZl/z51EbvDjqpB3yWPK6FktCwgvFbXiO7686DhQsuYDxralplLTAlrgmC+vtyzjoyqe/0LtlAyi7sSvx+dqJiLi/Jc5aJG+4LueGvKdjhfUz06P0ZhPLuvN48C0niE0h6KONkH9Hu1z8VAXhZqxz4BCrKs+wwF9Ocht2rcLWQnJqYNU/Ln0Yhx/Nzy9rwsx546rzmMPSJQgyF+k9yqwGopVn0wB27cgC5xXJa1M1v1immOAFrhYUOktR7GjewLg4KnUSgkQufD2O5LbG40JiWSO//CVfM0jmB54Ez30yVfDZ+0jtX2xEjxRWP3gnriqGNxJ9YHTvkrmKRRuvsVOMZymMrl/hsUpRGbOJIZ2zLCEYy6xcltLMwJsyf2qQCdwJRSnQG2kKrC/FYHWvc5ROs0yBj68u76QyuoIrUIVN92BibsFaFgSkglnT1caFJXwAcxIaGuGyP2kXpdmOA7ZSaSiJQIundFTaKE04AkUgZXcMR5wMwb27sYufCPMBwZ1/q5DjeQVdXiMi8eWKo0er7S2TXHHB6mCvEyGPtUI1vks3oZY1FNxa2Nos0zxS0nkYqQwGmq9bB0fghtAThQgmNiEmLRzYW/qgApibQquriXT4yY/Z/EzC6uFajUBFLh33+i2rTDfecY45sgp/TTfkInDLwONRX4qiulZSFORPKwhme/uIXa6NfssIRZJi63AO403guQLql8oIbQsf84UW4/bK3XoJxFyMkKCMzRxbdeuBAa6Lv9Ie+L+Brfxaj3YCcr0a2T6TLTox4MCoTKtJylSDZXdTfUJGnM+w4ZPX94YZdg6KJFnlQbG89dIJL3shhdr6liNqYfTl7h2vnZmWkggwVc3XavMSL+b9aUaLBbEcSiT8VmQ5SGFGDLATvohz6RJsEA+zymZMgAxxNz7Iw/dH2aocDGDwrnyYKM+D0nxR+4FA4kITjHLX+DjkwJyoi5a4PXajj96jujVH2cNdxvLwdYG7eLHDZ1ZesyziPjos+eN+MgpLohgZKdRc0+3fXDeT92Q9G8VBTzMzsqkg4b6ouCjGtZ9frZVc4Kzeer4Jd+doFIF5oUkylbw1NG4L7tQ/1J/gurUvqs+hg6kCh1OQvkq/w9DMzier2KStfez7rFUdYzavVaFXZ6Thz6WhRHZy9vemc7UiK93rUJtp7UY4dzRSnjlrYHO563c4S1vjOiYY3a1Qo89F+GyFssKJsuBwz07gw+shIJyBSIzbLaZI0BN7m8bOPx/s8yfMn66zCCm/askI27MMpXGsP6Cfr+so1QUCXruLnaWDjnRT2/QtHKQsGg7J0hV+RZpc7KVTRU5xW7mO8fjZL81uDrUQnsGcAzZs5EwFRp7vxJP/7sgXtBpaATZsaYXc9eLlLfdTS1i0serPBUDkio/T7e/VBigiDE50v4809cSbHrFFUGI1OnLuGPBdnrTwLLzgofgywzWpbgh70PDJRUzYKLYsxWzK7N2IHYVs+ehY+i9IFGx52XeGLSZsAJqewKhkRxbhz40SfKEJuRxWoWUXBrUEzJSkyH4vWSGv3QYr2RDslATuufnpwsUqBiTSj6t4Gb1efuQUwuVSdKHykN6X/LHoRkmUdG86yCS9eFcG4VSftBYkQJl8flr09lq2CGAhA6U65TGJ8TdU86x2o3ne0VNqcPrynBHoVjKaXI/sslTf6+jPnZJVj4H/Pf+bv+Q4aFHOV/pJlqhtHAO5r6wPrjbFyDHmOMV3Ev7c5qEjZ5/KkzxAz+ifqYMQ+rF/1SWb0knBGlIRqWQ8mx5pCfshvcoBDWOypB/NzUWskPmu61zYNV/lZZsudgDmsoQ6AM6FllNjZLOxEoYP680y3hIbqWNV2MJqmGy5fSZ/y6vLcIK7m4/krrje4T49lzApm8/74n4EM6Ff37hBZHHO0yM9IKThSxz+Rpm7O8pDeD8IJQdX8U2Q27MaXHEkCFwfI5N8EDj23uQ3mejXq/FPM2vuI2wlZi8+yNmXrXzMviUnHgFtMDz1SVW9Osdc+JbSB2YONGkhJ+3X4ASYQ/Eov2kWtwG3yRHDNwnXVR1lcTFzSgoQtQBZ87o+t3Cmb7FjV3JgFa5TSfqTVKf8UFelX8j7uoLbqv+NBqQcsK7/c79sCf536vMT9rkpEn/rKoKkpzEa2+IkCPypg2dkZDogfn2IDU52aBnrRj+Fqthaxl8UyDYHPno839I5co+RzMI4i6btlIPzhr0PF2ZgM9E9HqobFPdtGe5BwxLsntN5ytiFlEPZiGgJZj/Wxl+7+aQwR81/gw+NQ6zI1hFhol+CNHpu2G62Gspq7CG8kCD5sGLueuZ0q0AA54h4RVMiBtq7pKjVyIffJ0OXmQEdZ1bxcBG2dobB9L0V3EmojG4khE28HM6ZA3Oyb2v5xAOzkxAyrW4hLRN6OQQpDj1cG9L75KTLUNeHMoiNNlB8yZs/PoKzVF1c4G4G6zLBls3RN59poup/+nlTzC451C6mDc75PpZPvQvCt/ulacctEo9CFyO4vMOpa+MzGXbcqv30EXfDlx+GZXKY/EPFbl6uj5zi/dUa5l7Xzsw0mTPhrFwSQXx5VEQIHh+VkaplVNPwPRjqiENANmhh8rW50O8yemZDniqc=);\n  --theme-background: var(--in-the-note);\n}\n\nbody.background-settings-workplace-background-image .workspace-tab-header-container\n{\n  border:none;\n}\nbody.background-settings-workplace-background-image.theme-dark {\n  --background-primary-bg-4-bt: #1414148a;\n  --background-secondary-bg-4-bt: #16161680;\n  --background-secondary-alt-bg-4-bt: #16161680;\n  --background-primary-alt-bg-4-bt: #1c1c1ccf;\n  --text-normal: #cccccc;\n  --page-border-bottom: var(--color-base-30);\n  --tab-background-active: transparent;\n  --tab-outline-width: transparent;\n}\n\nbody.background-settings-workplace-background-image .nav-folder.mod-root>.nav-folder-title {\n  background-color: transparent !important;\n}\n\nbody.background-settings-workplace-background-image.theme-dark.is-mobile  {\n  --background-primary-bg-4-bt: #1f1f1fbf;\n  --background-secondary-bg-4-bt: #00000069;\n  --background-secondary-alt-bg-4-bt: #16161680;\n  --background-primary-alt-bg-4-bt: #00000082;\n  --text-normal: #d4d4d4;\n  --page-border-bottom: var(--color-base-30);\n}\n\nbody.background-settings-workplace-background-image.background-settings-workplace-theme-dark-night-sky.theme-dark {\n  --night-sky: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAF5jcHJ0AAABXAAAAAt3dHB0AAABaAAAABRia3B0AAABfAAAABRyWFlaAAABkAAAABRnWFlaAAABpAAAABRiWFlaAAABuAAAABRyVFJDAAABzAAAAEBnVFJDAAABzAAAAEBiVFJDAAABzAAAAEBkZXNjAAAAAAAAAANjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAElYAABYWVogAAAAAAAA9tYAAQAAAADTLVhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAAaAAAAywHJA2MFkghrC/YQPxVRGzQh8SmQMhg7kkYFUXdd7WtwegWJsZp8rGm/fdPD6TD////bAQQQAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU4RAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU7/wgARCAHgAoADASIAAhEBAxEB/8QAGgABAQEBAQEBAAAAAAAAAAAAAAECAwQFB//aAAgBAQAAAAD81uiraqi1atq6a1U1N3rs0zjO9Xp27zXXOGPL55q85rlxzmZkSeS6Kq2irTRo1dXVk1pvWtxrOLbvv6mNejGJjz8cazjm44M5kieS2lqtCqtVV1pvWU11W63KyVfV3XtefLlnGDnnjnnkzJInktpVrSaFW1Vu2qkvTpWtLFwt9LprrryZxNc5ccuOcy5kkknmpaWqqirbTVa0zLvtHRdppzNdets5825zZxz5YJEzmHmtFWlU0mlqmrWsx26S26ttcs3r10Rzzbpxxx5xMmZEeaqKtLVtFsrPRdXeN7NNF0mM7626uZqNYzx5YzJISCeWrRSqtaUUztqt60a0qNMxrd1pnrvjnOefPOMxWUInltKVUtq2qKzurb0W7bTC3Ntu+lm9zjjnjGc5mVISSea0Fqo0ttFXN001q229JnKm+hrtdXDhjnyyznJSJGZ57QKti1VpbZNW3Wlt0yLda6dtZ6NzGfPjnykmJQiRJ51KlpoFLWhNW2701Wc2rda6+ntnMrPHjnHLOWJQSRJ56tBZaFKtot1bray5lqr06+nvMNOXCccYxhmCwkTPBaCigWrVpq2t7RlaNdunbt0jpnyYxwxmZxJKEQx56pQstItFN6saWtkLTfbr07erp1vzvN04+XGZMSQQQx5rVFS0BVWzV0GrdSFarfXt17+/fr4fMzv53n5yTCEQlM+UoopZQq6qqq2gVrWt9enX09/R2z4/Nw8/DnJmIhC2J4xQVVUSta0lsaAqta113vv32OV5+fjyxmSpBCpJ5FALVqmbdXbNFrK3SXet9/XejnjnN6zjljjjJKECR4ygLVtLLV0hVuTTQ3rp7ey58/Fres5nLnzkLmoQR45ShbS2pVKlotpbq4vT0d+lzz4xdMTMmMwJICL4goXVLQLFKltq6t3jPbv0rnMW1jMSTMgZBB46RS21aBCiirdrrbHTtIktJhEkiCQRFeQAtVpZbGUtKLWrq6urq4ljZLzkMoqzMCFnlBQtUaCZWlFt3obupmGqEzmyRRJAlHlBULaooshdaYa1vWRpWS2hMmYUkEAeWgCrQopV1az21c4ihC2gyiFSQAR5igU0JUpVtturrUyxLbZgtVTMICCRViecKCrRbmS21bbbrTCLrW+XFVqiIIEqRRJ51BRaKuQurLbbrWc1brd48RbVQQCKZFjPACilsqwW1VXdki3WtTPHJaoEVACQJwAFUotiW1auukyyutVJjMlqgCwgIB5wAWgpUtW272zmLdWQmcKoAsEAgecoAtgopVt11rOYq1C5xBVQqWWAiFecUApFKFq71qkzKUozmCgAEWRLZwBQAFKatulWpkK0kucxQCxUCAnAUUABVttpbbrOULayTMooAEAhwBSgALVtqrbZIFqQzAFAEsCVxAFAAWraVqkgqoMwigABAcgBQFIVbaFtSFUQkQAoCBBzAKCgQq6ssVSFVUSEQCgQCGAFAUCFtohbKLQkgiAoQAGCgVAoCLdIgtCqEkikAAAGCgAFAS22QFAtWEyAAEAGFWUABQRaCkAa0JMgBFEAGCqAACkVQEAtqoygACkAYFUhQAApQIhVUJAKQKQBgKAUABQoJAWgQBQKktgcwAoUAAoUSALSCUFAKocQAKKAAKKIgCgAKFFUcAAChQAFAEAKlAChSi8AABQUABQBAALKlCgqnEAACgoACgEgoAFChRyAAAUFAABSIFAAUKKcgAAAUFAAAEKAAFUHMAAACgUAACCgEoAqnMAAAAKCgABBQQCgKYAAAABQBQACUQhSgC4AAAAACgUABAgKUAZAAAAAAoBQBCpAUoB//8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECA//aAAgBAhAAAADdKpS22y3ZLdFYZmJJOdKUpdUuqF0EYxEywKKpVs2tqN1ms4zEjnRS0F0tomrqWTGYkMAVaFttsLdaTGJkI50ClFttFvSmM4mVRMUApVXSK300mMZzATnSgFpaLd71ZOMzAOQpQqlDWt9EvPnkgOQVQpRV111MrnOIWDkFoKFqzfRmWJIQOQtFgKttorKEA5FKAWW1UWpAIs5gtAtUEUIAOYLSKW2LWCgJYswBQpai1mKAA5lAVTSKJFAlIwKAW2kFkAAMAqKWlslEAAMAKC0AEUAMAoCigIAAyKAKhRUQACFQoABakAAgAoAAABUzQAoBCgBVOdlABQEKAKrmKABQIUANOYKABQQpCisAUAAUgBQyAFAAAAU//8QAGAEBAQEBAQAAAAAAAAAAAAAAAAECAwT/2gAIAQMQAAAA5yJkkkkmJc45xvOM25nZvXa61e8iSIkkzheecSmcot126at1e8iRIkjMl5TOZNzlGzp23bdu0iJJEJnMzmRN4xmy77dNLV7yESSIkmMzGrJnnnO+3XW6LrtCIiSGZiZWTn50d+vXW0XV7ZCESRnMwqTl5sXXbvverKt75IESMGZCZ4ccm/Xrdql9EIgZyiREzz4+drPp77tqxfSgzEuciWSTn5OeurPTr1oVfSRMoQhmTN5ed01Lq7q0r0CSRLUJM5zMKja2miu5CRCpLnEZVIuqLQ9CEQRMyYasmpEtpaDuQkS2ZZmLZl1SFFLF7BEQSTMtxm9NSALLTtAQhJOTaZrdQCizsQCGZnMtsi6sAFOogCZkZmrItoAK6AgEyklsStAAXYgBJASLVACtIADJUJFtABaQAIJRItFSgoEAIKQUlQDQBABKABEQ6wAQAAAIiOqABAApACI6EAAgAsACNhAAIAqFEDQEAAICgIP/xAApEAADAAIBAwQDAAIDAQAAAAAAARECECASITADMUBQE0FgUXAEYXGQ/9oACAEBAAE/APkzitsRYmJn69zHLuJ7u2PSIJCVZjVC4z3Hml2MXSUnSmhpZZRJpH40j1MFiZqjWkUpSja/yNj+gXFaW7pETShjXpC2ijY+4tJi90YY06MelH48WZ4xwxTQmdrTJpNjy/aZn3xMpB6SGM/bKZZaQ/o1tHco9oWO17n65Jl0j083hB5powzZ13MxRDqXdMydZkz8g6yEHpjGx/BXxEIb0i7pTFnfeI9foeoNTTE4dSeIs46Woxyhjm2epnMR5Vts6h5URUN7pm4NlLw76eqi/PpRM7ob1TE7zaY2JiHpDQ+xSibMRdimORlk29Z0T7dzq7RDJrJlMn3Mi8rpk8a8C8TEMWvYjfDAo3pMotXVOrsN0ohGPYp1ITGz9D13IQqRlkNpDY9Ub8M0vhTmxcb3Gk1UyCxROEXBMunvERWJsU08hVnREMRSjfZ0eSGN6v07FxXbiluj1S8UJlFpvsJUwQzLVHkZZFGxvi/lrwXSXFH6urq7QxsWqURCdxCFiQaMcRdhsbKN9xsb0x/U/sXFC5L2Ex5bu8UQhBGJDpJ23kxjG9XVf0VLyYvAtLVG+SFrHGn4zpjEkkMQxIzfYbKZPd09X6ReJNTudrq99tl5JiZizAWI8caZPXuQbiMmN0hkPg/oL4mLa0n329vldYmJgzFjQ9JDRkZd2QbMtP6a7pS77rdKWCzLiz/zT2uKF7GImYiILFtk9oZoyaZ/ky0+D8z+Mua3XpCG0IRS6vJGAhGBij8KXc9P0EzL/jvHGo9ZzsxYnR/0er2Q+DHueN+C/Cu0Xgk+FKUvJCMRCMF3QknEVuIwxSWLZ6+XaY9lazPBCS/fZGeWPeHq5dTiGN7fmg18lInCcGIpUUvJaSEhCMTAxyYvai9Sr3PyYVNunq5rIycM8uw2jJj1fJPiwhOKF4Lpf+jE/AkJGOJ0sSZjg2LBJFFkflUhl6z7RnW/8nUZ5DMhj+rXgWm+C09IQhHpqsWKFilqmWfceZ1nWJlGxmSo0ZD+nnBD5Xmh6QmJmKPTSxQmUplkZZDZRCZRsbOpGTHxnG/EnFeG8qXmhIaUPbWJhBMTGPIeXYb2tNjyKUo9zhPr7uaWmiGBjBHWkdY8i8WxvVGylH9utoQyGImPNnUUbKXdKNlLql+pfnWkIoiCGNlOoukUpSjKXhS8XzfzJ4JxQlxTKUbKUpRMpeDH4qNl1fl3lCE2kQhHpJixFgycqUpeNKXVLwvN/UTixYiQj2GPV1dt8bql+0viQ/BBou6Uv3yFpl3CEEhIzZfvF4EUb1eCFrPwXd+5S8KP0UY18e/VoXsPw0umT+BxXKbXKDX36FwfkY/vUhFKXbXG82vvEtUpeD8d0x/wT/kH5X9jPg3+Pv8AqG/Bv8RS8X/B3zP+KWr/ACV/0q/7afWzwX/6ff/EAB4RAAMAAwADAQEAAAAAAAAAAAABERAgQAJQYHAh/9oACAECAQE/AONbI/hMUtWWN8a1WFqtLp5PpWLm4QtmPqWy0ZRsvoYImGMb7bohImWx9d3QsvvuiEIomNDiQ8PvSEhLNGx96EeKw2UTLh+gRR+Q3ml9Cil1peyZpc34xD9EvkL8TP1Sfrf/xAAhEQADAAICAgMBAQAAAAAAAAAAARECECBAMVASITADgP/aAAgBAwEBPwD93pjHqCW3RfIWTGiJkjE9JGOJBdF6eoP60+Lo6KMf0TaMEJdWC1l51BrUYkND8kILwQokYrS0ugtsb0x6aEtZEIOITpKLESEuoh6e5pIhBspkylpiYoSF0pwfJIm8h5OloxGCMREF0ITU29NEITUIZGSEymAhIQua/Zj4MhNsyMj4oeCSMXFEfzryFpc0/wBbyhNseRk0ZOibKJfZhiInK/rdPm9MyM8m2OmGFFghoWIk0Yi7+Y8aLAWM2sSEF15wemeB/bPiQaIQhCE2urdNob3CEIQhBLU3CdCcqMQibhCE5TsMYltsx8k3CE7j4MgkJ9ucmLbJtd66mlzXqF6CE9RPWTgvUL/E3//Z);\n  --theme-background: var(--night-sky);\n}\n\nbody.background-settings-workplace-background-image.background-settings-workplace-theme-dark-dark-sky.theme-dark {\n  --dark-sky: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAF5jcHJ0AAABXAAAAAt3dHB0AAABaAAAABRia3B0AAABfAAAABRyWFlaAAABkAAAABRnWFlaAAABpAAAABRiWFlaAAABuAAAABRyVFJDAAABzAAAAEBnVFJDAAABzAAAAEBiVFJDAAABzAAAAEBkZXNjAAAAAAAAAANjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAElYAABYWVogAAAAAAAA9tYAAQAAAADTLVhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAAaAAAAywHJA2MFkghrC/YQPxVRGzQh8SmQMhg7kkYFUXdd7WtwegWJsZp8rGm/fdPD6TD////bAQQQAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU4RAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU7/wgARCAHgAoADASIAAhEBAxEB/8QAGgABAQEBAQEBAAAAAAAAAAAAAAECAwQFBv/aAAgBAQAAAAD81Gcc8SQSCSAUpaFUAlQoIJAaoPoRnDOcYkBEgKKtAFAAAQkBbQ+hDMkxxZIQQFoWhCgCkAREqEulPeJIzyZxCRSAtsLFRSFUCBIQqBdD21SsZmMZwRKENUCoAS2pBIQABar2WtWpJjOeecAEi1Q1IAF3MxGYgopFVa9da1skTDHPnM0iyIWqsABdsJJlEFKItqvYu90EkzjOMTIEkKtAFWTSJJJIFBC1a9t6btIQScuUzC5kkiqSqWiSkSSJApALT376aqkIqYznMqc85zIWBVUVIskiJAAgo+h16aTVQktmZlKxjGc5hEUoLSJJJECFERQ+h066jVtkmbJFmdJOWZM4hCpS1SSZZSEAUkA9XTv0zdXdjPPOY1dS3U5YSc8yALq0kkmZEiCFCID0XpdbutLZnOZFu9a6TnnJjOc5gNdBJMpJJIkABEK9A1u6uuhM84S7u+2meeUkyziQ10qZzIkiSSQQAgPRSrq9O1mOWFrV1ro1rPOZzGtM4zV1pnGJCZjMkIQAD0gXXTvefPElut1Yu9ZmcyOnW45UaM5xmGZJmQiAIK9ClTWuzjIW62ipdokkb6sYzd6RM4zlJmZiIgIBe9tg1dXnC26pVWqLk0zjnNdOkSTGJJM5JIgIA9C1S6Zg1bbStbLZNaIxz5Zb6azMyYMyZkSEBAXutoqBd20tt12utTHPptJnnjllqs5hEzJmJEQBCu6rQC63q01vbe9LJGkMcsYiY5wEkmUSIgCK7ltCl1ve9JrfTVaAgJnM54xy5wRJEiIkQAO5bRVu976a1W7dWgIkEyzx4YxlCSIhEiIAO6rQ106b3db1NbW6BCJmUk5+XjiCTMAhJEBBexbRd999LdrdabtIEhMZxMzjxzgJmQUhJIgA7pbVt326dJrbWrd2iBEkxyzz48+UKSSABJIiAO4Wtb1rt0utXerq6WSCVMYxjWOHk5xbqSEACSRADpaVW+m+mumm+mtXVMwBOPLLXLl5eUN6mQIVbJMyIA21VU10666a106at6TmtAZ445Zs8vLnldbzFVIWqkmcxANGlug69eut9J206Y5c+Xt0FTDlnPPzceeY1oLUhaCTMzEChbqqXbp22zd8Jvn6vVszOupnlM54+LnnK6opEtC1mZzJAgWtUFt2w61rXb19jM6as5xnl4OGItUCKC1kxmQMiqUFt1Yt31zfd23pdUmZnh5uHDFsWhAC2QmZBMFUAW0XV106dOvbfTroSZk4Y83DgCghSAJmBOaqAC2Rq6vo16vUXt2SJzxnGfP5OaACAhQmYDkoFAVFt3239D1atd2ZMfO4+S9d8ss4ARAgtJkI5FIUUUqt79n0O3p1WYnDx/I55l312ziAiCAqpIF81ogqqW0rV9Xu36vVb5Pk+v0+b5vi5pd76bzIEJAChBTyVUBVWratavfp6vX6eXz/AAcfRz58cQut9dMkEQCiBSzyBQFLbVq23r7OzzePniDEir16UQIhQRBZa8gCgFtpV1rt6s5vj4ZFkgt1rViiotISEIuvKAUAqqtutb05c8ZhSIq20paRRdIkJF4ACgFVVt1q3HOZkBAqil1IBdaqQmTkAFAUqrbrVYxiQEAoUtkA1dVCQ5AAoKVVuqusTGJACCihUAttoSOYAKClurdapnniZgAgKKACrVDLAAFFLbvda3vHPjzkgBAFKAAWipmAAUU1db73fSZxx588wEIQFUACFCkAEUULdb69+++PPlzc82pJGYQi0BREAUAACqFuumukmYQEmZERIWBRakggKUABQarWqjRCFSCSZkWAtXVZTMgDUFAltg0LoiqQQtlSZBAurdFYYyBECgXSItltCFIkkurQAFWhdMwkJnMStCS63EJC22yCIQKopQBSWl3jOYOZLrdMZb0DMi62JIkIEVSqFIlUQ2Ywt40a3UkW22Ii6okkREEpVKUBKtZlW3EvTxqW2pVWiK0CSQiCFKKoFCiC66zp6/giqpS0IttISIggCqUFUBQt6dd9Ph0VQpQhdUIREABVFlChC2LQ/8QAGgEAAwEBAQEAAAAAAAAAAAAAAAECAwQFBv/aAAgBAhAAAAD6acsss85SQDKoC2kaCmUQitGeslOGWWcoApvWYTbsZCmUgVaV6bpxGGGMgK27rOQL0nKYQADq/TrUCMcMoREFVaCqKzxmUDBU37GrBhGGZOWEMCtaCcoUoAQN+1uA2Spcc8Y5ym7uieeZQgAA7+q9KJzh3peERjlBW1qcsZlIAEB06Xeu6wh1ru84zRnN2ss8omUIQAdLqterDNXqDuYnTXFWTlllnMiEAG1utazLqiqpqh5YVtMZY5xIhABtVXYq0srTXRy2scJMZnOISQgA2d3TvXe3oAAwMeXmyUpJJIANy9Hv0a6NJAMbS5uOcpgEJIEG5Wm23TpSUgwHUcXCqmZACUgDSnWu/TtcpAwLieDgLECKqIkQUO6rffe0J2CdzwefLoZNaU88YQmDbHprO2unUiRuPN5qKEFXSzxgEDAbHp1de6gG74+OE0IY2sUiQBgxvq9Ckh58cbvOJlIQNxIZgDGOnp39COe/P5S+q4iUgAEM5wAY23WnfvyefKSK2cgACQisAAGMbrbbkyQIGxjAKEkQADBg6q5ylAgYDEFMESAAxlaa658sIBAAwAGDSAAY3Xd0Tz8uYJJAMAEAwAYAwrXWSEiUJSAMYkgKAYMBtgBIMQAOrbiJJAbRQJVZKEgGMYADd5QSFNDoRVEykCGDYAMRVa8IxgwCmJJAAMAYxMet/wD/xAAZAQADAQEBAAAAAAAAAAAAAAAAAQIDBAX/2gAIAQMQAAAA8F6Xd7U3QISzbWQ2ZDum7ZOMnC29L11pjCEc96OScyXV3TYxYRyJKq012tpuIMp1oZlnW122CBTnwrNN1eml0aUTENqYJ06LbATFK8zKQGVrQ9Om0CWEBW902AMEvJxEihtqtb10sRlmlXVbbAAA8/BRJVtKY1daa24xkrTot0DBMDmyzmcnpSUZK7bLcyaXvo6bABhzKIzx0smAU06iNHKq9N9LbBgBjCzyVkykSkAr1WTq+nW2MYAZTGUDmJFGcFJPTYd1WultsYAYmeeaWecqISGMb1226HVNjYwDEyyWWMTMzIBRbrbore6YDbADInHHPGJiZQxla109tZ3bAG2wDNTOOOOc5TFABvo+rvebYNKLumAkomcccc0tZ5hzWl9XoXMiKnHM16LYwSQjPCsYjjggqunv6ZJTZGUvbewpAAkLLl5+aMUXevV06NNsklPeh2gAEJcfBwwivQ9CsJq7umNkzpQaAAhJLLh5OLX0s/S6iePKtrbGCGI6AAQSKcuDLq9CignFUA0DbCOgABAhThz9urBgkCTBSMosABAImIvVsAAEDESA6AAQJZY46dtMAAAAASBsABAo8/Ctu6xsYAAAACaAAASxxo0bKY2wASbYAgECYkgENtIYAKMlOmtNsJGQNuYVsbAQhACJnPfQsSTJQyYLpsYIEgAltRGPpCECAJTG2AAhAIAIxz//xAAiEAACAgEFAQEBAQEAAAAAAAABEQACEgMQIDBAUBMEYBT/2gAIAQEAAQIA3MMISS86Xxh1GJIgg/4Ada2VgQj/AIV8laJEL7w4vgkiMTUhEdw6EfI2236kQQjU1Nexvmewbndv1jmQkakEEeJ9g+EAt0tkiDXA1SXtEJ9wHSkkQQa4pY44peAfDewA7kQarDDDEghEeB/CYlYPCtyCCCEQvpAgg7joeRs3xRBESII7ElxPsyrats8hZggtwwnJtvJ8DCFEQQuoBJbnY+0EXzFwchbLJ5Gxh3beQLBhiIURriakLkIOJ+I2DkCCOBJL4OCV3IWx2MWBpjikhskj8dsGsG5JLg5Ai+YtDDsyWwVjgapIQbkEEfGBqQXazJ4jixYXyJZ4CCw2sIOZBCI+KDWxJLfFtvccklKlu0ZsLPiQQuJ+Cz3rZJRLEBIww7ZVts9jDDxPuGz4jqQrjjjiRAMcccUQQdwAdiW/mAJJRAJACuArijXEVxxSIIIsElGTk2/lAAJJLEVwwFElEjUDZJGpoaYpGGH5oAAAqkkKioqklEkklxSwNURYEfKQAriKiqAQqKoRJeEyxyJPyhABUVFQEBsAkAkl0Jcry8MfyVUVAAEHBDZd5jN/0Or+ltY3J+QIoJWDcbgKAJJdhhisDDZt/JBEAEEBg3AQHeSbm21pcWhLbHyQQRBBAXBBsNl2GWLJBNibWsTwHgSS7h0CwsCCDBBBuIJaPMW6CSDS1QIZcmHgDD4Ul2Ntg8ARqVvllW0FgW62tf8AW+pXVqeD2IWNgjUi9SDwHlSXa2222DmL11RqZfv+/wD0/udXOpWlqC+5gI2RBCRrqUsDDuIPGdkQR42228yY62MrCK2qaV2RAA3INVia2GqCDsl5zyXU3xfER1KVTp3BBixA3IUMsL0NbBD0nmvE222CDWCtaV2BEXA7mWlq3pavqPuY2pHoxJCUiS2MMteuodr2uUvC+R94glSJo0FcPz/MUASUub/031DqDXr/AE5kJEfTWwggOhSsqaxJR7Wvq/03vnk2CLuGH7OlcXrfT1RbbWsf69L+s2OrrkltsEGtn859YI1a6tNSmtXVv/Tra2pGP6r6htbiwRap+g3wbbcpNOGfpqVvbIlmwsTyBrbN+dttvxtt7Nuacrc6p1T/AE3sS22+bYtk2224/CwX62DkCYYSe9tttsGNttvJvqfsGzZiI8Le7cbbbbBfyzD8JsFv4KxUGxJJ/wAKkltiQYY/8KIAoAhLAww/4UQCsNRpflhjaGWBESSSS+E/QCDWwtS1rm5ubQwhY444pKJRJdy+OICD+n6ZZdKSSSSS7kl8URtt8XySSSSSSSW6SQGJrjikvMu9t8W3k+KSSSSSxSSUQqarE1xxxxxxxS7AACNl6H0JJJJc3kzEQtkiFySS3AESSXNbLpS8bb3b3AIJbyb4iJIg7iDrEXzGLNEbJcQXlkz2EIVXyjxbhCEx5OPm+D+tXTOlXRpo97b2bY+rXU/6B/Sf6/C29mD8sltxtttv/8QAJRAAAwABAwMFAQEBAAAAAAAAAAERAhAhYCAwUAMSMUFwgFKQ/9oACAEBAAM/AP8AuGu6+EsY+Tr8XnI1+xL8tXElpfxida/aILgLIJ9q6Meu/kZohCF0LRaIRGXt7i8uzJafVIRa1bGV+dLRjUpel9imxPLMcH1TRNk71TN/PUY0yrv3gFGu9uVaLz1Wk6L1IxS+TDL4Yrq/O0iFqxp9Uxb0uNGZyUf2Y5FfnVU9EKdK6JUy0cnA9tU9dnGep6eUtF6m13LjaYuomTjq4JGMjKRiZhWqJfDFaR1Mzko39nu7N4A0ZfKGbThax1XthXwuD/kBsnC5xCj4dBaJcOg4Mv8ADKE+JUnD2XizfDfcMf2uHPEf2jH/ACYzbiP/xAAgEQACAgIDAQEBAQAAAAAAAAABAgARAxIQIDATQAQU/9oACAECAQECADDGUoQQe9VANalgmUQBUMrkngEGUeCKdShUjiqqAagSuBLBlcE2Td9AQZcqijIcZQrXFQGxBwRxVLKMLFru+wIMEHJGrIcZTTXUjgEHe+AtS2Jh73d3YAHWmQ4vl8mRkZey9CTD6Wh7WWhFFGUo2MqRyIBwYYfVci5xlGTfZmJ2DhwaZNWQoya0AorhoYfUEEMHVoSz3BFIe2BhMOI4tFFFSGBBHpdhgVIdnJgl7WH2JIiOYZsOCrKVYGH0HAgmxMAHQCtdQnz1YGK12WMaGH0EEHQALrqE+aY6hQCtWRsYUwtsXJMPqIOQqoqfMYwsuXd806uWh4J9gRAEVUCged75cjEww/gEUiJFgHF+LLljPuGJ9r4EVkcMGh5rsWZszHgE8VUoDQqR2vYNYZM4/pTP9Pqcgyo/FS4y5sbCCVVcAASmQrXe7vZXD7BlivxfF3mXLjruIODCCKqvGwQ+M4xDD2zTQrXW9t9iT+DGcSk7XBMuXJ/Sv9QzRhD4XZ5r0U4c6sVEOb/TnyXYbHkhhP57u1bCTlz5Gfa+Qwy77Xfhd36gq+zw97u7u7222v8AEAICxPnd9Lv3ECKgR0MP4rv2WIVQlyy6661X4L9Vf6/XYnkitaqutVrVedd7u5d3zVVWuoWKChxnHpqV5qoOKrgQLXvd3ewyFyL6XfcS7P4zyIcKfz+F3d3d+98XcsMM3+n/xAAkEQEAAgEDBAMBAQEAAAAAAAABABECECBAITAxUAMSUUEiYP/aAAgBAgEDPwDS++8vr6c1ewQ9C+hrfejpWlbzlG29Blbnh06XCYw0db9JW4g6kGXrXHphUt3ux0ElML5Fdi463tblmhyljKhCDAho61zA7RAhxL0vvhMZi+Hj1wHGOlnEqD3kfEWXZ23u1K8zGYpMf7Pj/ZhjB8Ry6O+59V7RoMO8kv8AulkslMvf9sZRzWXBaYBRvsmMOd0+24+MjlVT5D+wzOvOqAUzHOJA6scMm6SfGFk++VnjZZXPClmMxr/OUXckeck6Tq/8Y/kYMr0uKTAJiS/S1H9j7khUxmLPz07pikY945KzLyRfPp8iZz//xAAhEQEAAgIDAQEBAQEBAAAAAAABAhEAEgMQMCAEE0AUUP/aAAgBAwEBAgDDBJDFPu7xdrypAWKrgidh0jFwe7ikiY9Xd4uyuEjLcqUb26iUFV8JIruyRIkTJ30OJTj1Fu7ueWYQjGqr6RMcexuMiZMnvuS6SUf51jjK8qIYeNVVr82SJ77koyjLqu5PcQD0qQ/VB2SElHlJDfUleoph6yg8bDTTUArXVyyVkiUeTa2S31APZJRRimARrHHGODlZuT2WxGKI+iIxRNSNY9VjGu2J1XQiSimHo9Sxyg+lu7232HEqqMjhh6OOS7tVu2W8p7WTW9ozJ7GEdTjAw9XJdqyZbM2V3d3fdxYkcDA9pCrJZXeKt38XmukIRDDD/AkxyWSx6Vb+giDDI8ejAPaunJRlFEcceta7MjlBxB0h1d5bL+hIfqqY6yhLheCXE8f8I8H8eTjTKskJLjnFxy7sbWTlw5CV/dVVSg8ejFxjOObLZIeKXFO7y8Mtxx6MjIbu/GkePkJrNyWXhgDx4TjO/mtHj0CPu5ynNKUv6MsD8/BD8z+aXFh0YfaUd36TOXh5OGXHxcP/ADx/HwQymPJx4YHhXd+VUk4cocfBCMNa7YvB/IhrXhVa+qT42PHh4VVVVa661/iVxjGJ6V8VXu48k+TeEz/w5ZMZmQIS222v/fPjOH+Ogdje13f1e1+l/dV1VV1d3e22zLJJyx5jl32Jd7bY9XfTjMb9qqq0lxHHFr4rX4rpxiRP8Th24fo5P1fdVVVVVXtXVVlSi8D+T//EACERAAIBBAMBAAMAAAAAAAAAAAABEQIQIEAhMFAxEkFR/9oACAEDAQM/ANFZR2yrRpSjnONhZMY46FdC1XZCE8JQ7xi524Jzbwl7rQ8lhz4b2pyY1g9qLc9Cyas8XvxivLYyPCY2PUh6LKhq3Om+9u6YoEQ9SRrN5ITVoa612yT8KhpjfwqHIkKJRGcnC6W7ND7kxr9HBDtI5zhnNp2VZEEKSbRg4mLMaJ6Fqcn6Q0MmzY6vqImShjoY92SXapFUqUUV08UwytOGfiof28n4ud9jZU2ppEsk1DKRd0d6+kMULxUIXir+iGvjJifFqpqZVJUQceImIRBHrsqbKytH9E9FaiEyStMpmBC7XspFPxiXzxpKWUH/2Q==);\n  --theme-background: var(--dark-sky);\n}\n\nbody.background-settings-workplace-background-image.background-settings-workplace-theme-dark-in-the-sky.theme-dark {\n  --in-the-sky: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAF5jcHJ0AAABXAAAAAt3dHB0AAABaAAAABRia3B0AAABfAAAABRyWFlaAAABkAAAABRnWFlaAAABpAAAABRiWFlaAAABuAAAABRyVFJDAAABzAAAAEBnVFJDAAABzAAAAEBiVFJDAAABzAAAAEBkZXNjAAAAAAAAAANjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAElYAABYWVogAAAAAAAA9tYAAQAAAADTLVhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAAaAAAAywHJA2MFkghrC/YQPxVRGzQh8SmQMhg7kkYFUXdd7WtwegWJsZp8rGm/fdPD6TD////bAQQQAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU4RAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU7/wgARCAHgAoADASIAAhEBAxEB/8QAGwABAQEBAQEBAQAAAAAAAAAAAQACAwQFBgf/2gAIAQEAAAAA8dUszMzMyzTTTTTMszUzSzSzMFFT8XMzM0y0ss0000zM0stTMzMzMmWKp+LiZmaWZZmZppmalmZZpmZmZmoqqr4RLNNLK0yzTNMzS0szNMszM1NEVN8CZpaZVpmZmlpplmZlmaWaaZmoCq+DLUszK0tMzMzNMytLMyzTNLSkWczfBlppZllppWmWmaWWZlZqWWmZqACvhTUzMszSyzMzMzNMssrUsy0zMQEHwmpmZmaWWWmZZmmZllZmZZplqrMUfn9TNNLSzSszLLTTMzLMrMszMzUBUfntM0zTMtLLLTLTM0syysyyzS1VBUfnXS1M0tMzKy0tLTNMsrLMssy1VAVfnHS0tMzTMyyzMzM0zKzKyyzMzREMfnFWZmaZlpaWWZmlpmVllWZmaaoqj84rM0tMzMyzMtLM0zLLK2pmaaaqor822plpWmmWlpZmZZmmWVZWaZpqmKr80qsszTMzTMzLMyzMzKyyzMtNU0Vn84qszNMzMzUzKzMszMsrMszMzVMXk8fgVZWaaWWmpmZWZZaWWlllmZmmqvifnuP19KulmKl0szTLMsssstMzKyzTPO60x+K+Ry/RLp0rVKC6dM6tMyyrMyzNLLMs35ry31Pm/o/YtH5j8x5/0utOVW0kVl1rS66b0zMsyrSzM0syt4/x3h3ej9V9PvXh+X8L5PH9Gaszu3qimrWta6d+iszLLLNKzTMzz5eb8t83O/Z7D9X77z/mPgceGfstOpd6XTVad76d+m9stMrSzLMzTL4Py3n8/ny9/R9D9J7+nh/KfN8uOWPqaV1Ot9HWm09Om+3TppZmZmZpZZZqWx+I+VYznXXv6fZ6u/n+L5M7xy9rp1tdb302669+vTelaWaZmmmWVmaZ8H4Tz3WxkTfr9G/l+bLY92tOturpvpt6dunXW971qZpmmaWmWWaZvP8AA649nnx6fg/P4Z9Po8eOHPNn6KulV1vXTpvp07b69N706ZqZmmmZWZmmxjrqc/J+L8/wde3j4cgyfRVqlda3rW976dO3ftvpvTpppmmpZZmZprn+W+j0/NcExx8nHmRfa6+bI1M7db3re+nTt27ejfTWmZmpppaWZmp4/lvDwxrNHl8fLAN97WMWVp6Wunf0W++uvb1NtZmmZqmmWZpz5vx2unm44pLPHycOeSvu6resa673ufofc7fO3rLvTNNMzNNUzMzXzPzOvAWsZqrPDzcufMj7g61069OnTff0dPZ6tcZpabj5jj3+hummqZpo+D8zt8vGclZjMnE5efGQPtYJ3vXb09u/2s9d6rz+fw+zbzx4/m8jfb0fqPRNNTNPL5vi+V80ZZs5MlccBxxkzfUcTa3t19f6vu6TZ/LfP48tDrp1zjXo6+79Pppmpnj/AD/zEWpdTkzgM8LOeeTIe7ROunb1a5+/7Xq9E3H8T8rJOnfXocunr9f1N/Z76pZp/P8A4znp1MpreLOLHPjnMczIepl326fqNY+xz9jNeD8d8rDojXTerp6+3Y+j+h9HD0Mzef8AmnJnVqJsrnOMccZjEZura33+j5PofT4frK0yPm+D+d4HDBa1q3331129v6Lv7dScufg/C8853pmoxnWM2eWCMhZ9Fb6en9H9DfpvWmo3Vy/KeL5Pn5ita6a766e31/pfe418f4HDHh4+d7NZ1txgxztZ55iMzj9H5c+vjv8ARfc6aWZrl1/L/A8vDGMFMut+zrz79/R3scdPiufh8+9aA1psnPnlM5hTIffuly6fb+l9TzfL9f0u1V+Zz+e8nI1yxkrS9++zj2329PTXDlux4fJzrpE6nOc88SZkqL7HTXLO+nX6fPz793p+t768H4vxc+OrOM5LT0td7l0fQ3Xed83y+bjyNOU3ZzYyHS5kUmvfvvnWtm47O/X776Pi+Dy8HIyGQnXUz06Ght+rcYufi4ZlzY1YrG0sgUNe56dE6ZtZ69er00azz8GOfEM2Rd9InW93bmhD5+WBsmaSGzQgLH0bnrTq3nW+mjW+T0xy5c+WAbJWtS6ar1cubdeXDlmiIQaKYqm+rnGGjXSzrrrTi6XHFz545la1BLpNbu3q5mDzceeZCKqiqqar6EL3cZxYnVvWt3PGTmGMAu3VW9d97tGdefy8sTrOaxMwlVSl9ChdWoyYzTvpAZ55ozjKy7nfoM51qOHPE+jo8vPvrzx6+2PK1g6Yzvt36+EmqaEKmgqIbBvWsOo3vOZC5XVetmnVa6Vu32xvPXp16+f8xRVNFTSQRFLNVarW2zWHSqZGtauriZ1rT19P19eH8dFVVVEtFmiqqpnXTpb3u1vOUqmgznPVq3Rv2+7p05Y/DVVVLTQ2ZYolqZlZzbOdFitS6IYubUrnz10pmmmSaJaWZldOl1rSkFkDBFUFkqiAiOdLaqWakqWabVpXWnW9O1MwYM0QQWYACAguM6JZdVJDZVaa060rpdW5qjNmrNmIzAAFARwVVi1vWSdc0pJZnS6dPRemR3BiCyRBRmLNmgIODLtZN6znRVhrRJqWdrt2zsaMhmKCsOUMkRGUONaF2s7isaTEC6NOXZ0tO9VvWbLvOcwEOUAs0ZoCLhnWlaTdorQkRS2hVd2nPfnZmiKy50NjOsuctmixw73kddLctobWd5AUtTnUs6tLrazg1VjDkzWVrI4bFXHyXbr/AP/EABkBAQEBAQEBAAAAAAAAAAAAAAABAgMEBf/aAAgBAhAAAAD74AAQRCEIgO1AEAhEQRCA70AQgREIQiCu6gQQiCEhEIK70pAiIIRERCA9NAQiEEREREA9QBBEQgkSEQD1wAREQhCSIQD1oAgiIhESIQhv0kKkIIiIhEhCOnfQBJCIiJBETt1nn53vrVpSJJkiJCITp0015+XpvPqLTMkiEIkIX0xNSyS0trOZlEEQkJeka7y4xOkW1bJnEkRBCIb9d3OXPLqZHLW5mRCBES9/UpOXLLrdOeODprUXprHnhCa6ejeiJMc8zqqzli9OhdHLhiC++qEnPOcq1pjnF6aTWmrz83M17ltRM88yLbnEg6dc5W63ccb23nGqrOJmI6Ezvnzd9SSW71NWnPmqs5QjdLSaZyjVq6pnkQhAqrbaucSVS3Vk5wICNLVi2syRVu1YwQIQ2KFgRVBKqrCTjNgoAKAFCJjM3QClLS0QgSESUChVVVARCJDNCgUqqAQREMUpQUVQBAkTN//EABkBAQEBAQEBAAAAAAAAAAAAAAABAgMEBf/aAAgBAxAAAAD5oFFBVC1SgDhApRQKWqooDzBSlAqqpRVCPOApQqqLVKWkjzFiilVSlUqrRDygKVaFKq2lWkl8dAVVFUqrVqqQ8YUUpVKW1bVBU8YUUUqrVVbRSmPIWoqiltqqqqorl5NyKFqqtWrRVrh577Ok83DcgC3WqpbaKXly4nq7+TjoCrq21VUWqTwFmri2iK1rVtoUqrU5VjyjVWQFvTW6UUtKcvJObWqGrXec7u1SlCp5/IiW9LcyXr29LjjNueWd+qqGeXlzkhq60yhr07cOEIvo79KM/LIFturco3162zzciQd/V0TPzISi6ttid+mrTj5pSTLt2nHksC6Wrcpvrjr1vk4rSZiVF3CW6KMhG9c82iSElN0Wy0JCRZDSwiJF3aoAiIJC1USSGtWWooXMAgUQAICrr0XzBAAAAEqnXd89hCCCIAKKFNIEIEQAlClK0ggIIQABVK2kEBAkKgoUXef/xAAkEAACAQQCAwEBAQEBAAAAAAABEQIAAxASBCAFEzBAFFAVBv/aAAgBAQABAgDK/MuqX1WVhZSpYSWEuiWZD/IXwWEsLoqSS7pICj+FfFdl81hYXdUsLoklSpJf5Kwkl3SSwkuqSS/Esr8KyuqWVhJJJfFJLC/AsL/HXxWV1RH+Yvkvuu5pZSWV+xUv3pUuiS6L7L6pflVL4JKkkspfrX+GkuyohJdl8V+VfnXdUkvquy/Sl1XzXRdUsLKpIfnXxXZfjWUvikl8F8V9F+NfJfRL8S+K/wBBL6LK7KkvyJJfiWVhUspJJLCVLol+pZS6LuvwIn6Kl8F+VfqVKlXL5XH5P+avxLqu3P8AIcnlf2AsSbb6Nttt/jX4V9Ll21e7eSjIkg9W22+jEtttm28L6r8/kOX/ANW15O35m/zOHB9fM2ZmRbFPbbbZvD332e2wLBYIIoBfmS+nK5nK5RlG4TZhwuTaGefet87ncyRNb+wXfZtsJifsE9993h1s9hJ1ERA6L907k+Xc8jz+US41AwkIcGWL3I5/kjOcyXvttuJbbbbAt0C23gUKAjGMQAF1WF+Fdb/keRy7nIldMmKgRLi2rXCt265XM53JlUqMDGm8vAoZFJaiOkbIsDjxsCyIJJJYS/Tcl5Ge25lgEStzjzOP5bkeSteX5PMu3Tc22JIptjIoUKFAaoAQjbEAEsJKksrCXRJLCyqVLPkDfJiIW7UrPrNrV0KsSlV6c4kPbYnoCOgIInuJAiYkCKYkxhLKSXZL4L48m3Dw3/GPgrXip+J4niOT4rk8I2JRFWYTtyoykTk9mxLbbYS3jITFwXI3Y3RMTBBBb7JJfnUo6gJVIc6V7k3bc7dozvSlLoT2bbYltsJbiQkJiYmLkbsbsZsSEsrskuq+6q9OPkeH5O55m7fexBhcqUpSe2zq3GUZR+IoUKFChQoACIjGMI2xAAd13X4Qav3uRzHK5QBGCbhlRLy44uRFs20AtdBAW9BbFqHHHEPHjxo8X+aNiFkW9RDVJfs35163yIcu5ztpmmycGpVMEHDdCWxIoEw9cbYtCz6vT6Y2rPGscecDaFvWUBbEUvwr7c7yVvm8zntvYl4bZMjMGjR6AMS22jITBFChUKEYCBhcld+d6+PJDyk/K2eeJ/jlO754+Zh5yd04OTTezbMjNzo4SRDNN7CQmJxuxuxnaqNiVmMAM3rsOVLyg8p/04eTn5UeWvc67I0JCfss3uPd+9y/f8xc/wDQcrypkDT2ByTRptkyka2lRpvO2xLbBBB9kZ8S/Y5cJdH5K+Obc5Qve4Xvd7he9pkK3hdjHi8iB+t+7yOV7HlvDBycuRMttpGjlvbbbZgigIcc8X0W+ELXGhlXjzQSabEthITjMSMtoytXReteRt873jIPfz85Fgt9GahTwaRo1KjlmiaOW22DGoniciUbINr1DCWOR47ncCQwqbEhc2pwlGUZi4J8fm2uUoDvy4XIgYBbeGJSkJbkuRMiSScHJy26jUYRsC3x7gu8MinsMArVXuJ5HwV3xY4k7JommDtuJCcbkbnuE7U4XOHy9IjJPv8A7fKX5USZbAtt06JoVuZ7syJNNnDz6tNYwjGEfHwj40cH+e3xKWqQj0u3uR5KXk7twlttt7CW9upiM4XIXvH3RdMxe9vO5V0m5/TdqVSlCm9ttxIFyL2lIyB2JJbbw258Y29PTUIeOqJ+XurzHkP6rl4k0aOG26YOtoSFQkLsL4vcjmGXt90+STCN+pTJEhLbYyYltuS3IkvYy2bYNHoZg+2V527/ABuZa8gDyuRDykPLWb3Qi7eueT5nLEZUMGkRkYAhFxldoETE4ziRHa7QJpGd2ZNOMtns3T2MtjIkkFGnhtt0JxuGnQETDkQ8nPli5txebPy1jyAOLvH5RkNyRTNGlkUAAxOEpmJIgRL2e2Erk4Y2q5bIkDgEjAL2MtiTJnABJw8NsUxKMsRLoSMt4yiYCNQ5v9lvyd7mXhOErfrRLNE5FAgyFROxp03ExmRv7PYJ3DOpHApsltnBxGjSb+QMZ7bCQlKhMz2hT9gvQuSu+0XRK5UwZykS26NNsSjIltgg0DGUrm/u9uxM6lUhTBZLbdPam2/l6zFg7PYTJUa2EziMpz3E4zM5UYStkHqQsAttvbbbbaNStoSEpTJlTw28t/g2ZFLXEZCexnGYnvs9qjRM5VKRJEhTbYOuqw8IRFo2uPS1lAWJWpEk5RH4V1dJRogwNv16GFCW/sjPZgkkYNE1poYqmxLfZ4FAxoS3YMpQnK5KciaS1EZRSSSSWuqSykkiEsPZ7bPajEx1oSEtnsyCNU6INEVrqsPbaJgZnZiRnEzluZUgIWo2pQNjUWv5DYFmPFhxbnGlaFk8ccWfHjYjxp2NBYhxI8GPj3s9tttttttttm26b222222eHRjqI4QjqQwQTgFk7SogREdajOU3tQPs3YoRNLfaNwy1FSq3bZMrt282222222222222222223u0Ma6aes2TAQ9euunrMCKToA0DEskS2b2Et3E2jbt3+HLx7bbbbbbbfRd3lvoox1EAAKQrY0m6XVYJqIxroLfr0EVZhECv6ZeTl5J7Ntvu8vam9ttt9m3s8Nt7Na6+k2NDD0en1+vX1er1CGmqGVW2xKe/sF43xyf65ckxSbbb+CSWqSWq111S1QitVrrqI66iOmmuuqMUlqbXp9Hp9Pp9Pp9Hp9Pp9Pp9Wmuq1SSSwkh2VJKiKSXdUlQwKVICNCbbpLJykkkiEkl2VLsB0SQApAdEjSoCkqSFIYGGq2dCNayO+5lTJdHDwckKkQlSysHI6IUjQIkC5Ewy6XZtihTGBLAoFChiJYoFHsaTZJkDTp0TT+gNChhEa6gGGi1oyETgF0aWGI4BbdCkJKkCMRoEg4S2fQZdIURR7Ho8OjkEES2BeuxmSQSC6SVNuhTMgW6BbBoSjLbZ1IxmZCRoFtjDdOiTQwxTfxJYyKFPYgAitjgA4BPUgAYA67ijWuBQgQ0JGVSkZiRwSKdNujWxp5FJ0cOUhdBrd7ugVRpIRe++xy6Rw8mVOgBQqWIxiAMCiKjbNsWtNDExQjqiNdNUzQLNOVCmThu5IlWzKX//xAA7EAACAgAEBAQEBQMCBQUAAAAAAQIRAxAhURIgMUEEMGGRIkBScRMyUIGhQlNgYnIUIzNDsVSgosHR/9oACAEBAAM/AP8A2p8Y1b/w+Hh4PW5dkLEk54jSrpf+HPBxVhx6LqSxZttmLGNKVL/AktXyYeFG5yUUYeLfBK652vE4rbt2P/A8R4zStRjojGSriMfjTnN0YdvijIWP4ipSbjemyIRwo8LTW/PGMuPiVy+QX6nh+Ghcmr7I/FnJ0lbyZJ9CUZKTRGMOF0ludXdp8k8HBbgjAjCMpSbml/JLxMnJl5L5Nj/SYw6tGFCFt/sYS4eHU/HxpyWivkkqVCcbkTnJU9CSwowlrSq84YUJSb6E8bDcOwy+Z87GPy2xj/Q8DBm4N2yeLjSlx9ybSXFZKmk3yU7aHKqOKcfxKowVqldigqyhgLcnjztN1sPJsa+SY9iTGPJEV+iVFq6dFY+Ik716lO8m+XhdsnF2Y+HLWToxsXDhWJW9aD/CWHLV1Vs4oKOi7i7Z6ZL5CxIiJfpLjgSaHKbYxscuxLZ5SXZkkMYzinBPcisZpKkQ4aVXlXyizsr9IWLhSgXbmYUlQou/xLRhxi09TF1SqicMXixYWqMNxuC1JYauifXhdFZS4k1KiSbcpM1yv5hMQv0eyVaI0yWVpmHGMHLfocelKiE7ZT0NxuCi/nHmtxb5X+irDwsSe0WzxUE0sRkUuHGk29zwyhPgUnKtDExZXObk92PKLIbFeRSsjJajj5zHkxjGSJlIY/0FZQwMKU5dv5MfGtObp9V2EurLtLKys9B6+VaRfca8pk5dET7xY9iT7DKZQu4qWa/QIcXBxLi2vUeB4TGmutUv30MTCk3Ccosx4Tc440+LezxGLBQxMRySffK35F+VeaklTJbDyQsmNsuk0YUIqoohwttCbegkLNL9Dh4WX4ag5T4fYx8HGeLGVzfVvWzG8U/idRXSK5NPKfPS50+RC2IrsJISLVJci8jCwFeJNLZHhKtza9KPCu9ZexDphw/dkJOp6EWrUlXykYRcpSSS7sw0pqGE77Ns8V+Lxpr7djxSm3NQca/KfiScm9W/NofyLNLZF9xykkiTijhNOVYablJJEJRbSbMSGJXCqMHgTfU8NVts8LJNuTT2aMFOowciLX5KZiTdRfCrsxcSblObk9xpDyapjckQxYaXa0fyGFhf9TEjH7s8Pg4rw+Fyp02hJzUMC1ejbMbxUXCdKN3SQuR+Y38loM1Iww5W/ieiHKLUlVd2xTiny6XRL8a707E0qTHNUz1Huep6jzvKKISVNCVOLsxMOaaOKKluvOWDg4mK02oq6Ri4uLKU5ttjflX5OubfnQ4SUv6XqSUn8LJKVUyfwtp0QhgSfRuNE44MYz68s0lwr7k1iST3Hm+dsZRTGtUjHpNtM8S3TaevVkZOMYNSk126DzT8jFw8LA4HJJuSdP8ARlaMPEwoWqaVM/5icG3BqtSGJjVXxGlehL4b1iuZGBj25Q1on4fEaq12K8pZal9z1ympJqbX7mLCUXLEckYOKk1PKUJSb1T8jCn4bGjitKLg7b7FNmvm2+W18hZUHp2J3orMXCi48L1IKGsZ3Q/+Mi1dXkkRzT5MLGlGU+xCaniYL1WtHjIJy/DfDuY71UGSw1FyrVeVpk3SF3kU+o4yHOKg1brQxJzdtlKuStWzCSb41SPDd8VGHjeBxoYc05UmOxLzEa5UXnflSGhjeV0SjC5O0zDjiSkno+xGMk9iLi1RhYck4rNbZ1yIw8KEpSktFZiznNt1G9ESdpl6LovMjNHDTTKE0ShrBtM4sG5St93sQ0+Ja9NSKvVELac17kF/UqJz4oQ7bMxU6laJVZLo+hUmaZW/kE/JWUXqnSIi2Kw7ojsWzFw0k+Gi0vLw+JxvKcJfg4dxS6sn3m2ORfmS2ZS6Cop5zXSTRqneqJzkuKbJyjaZPvJ0SWqZOSpjQm25Eey6Lkt+RfyU5aNuhEY9IqyUlq8lB/lR4dq5KSfoYLlFNNW6sTVolgQbUVddzH7qLMNupYbTMPGjcH91ty2jGwp4mHFOTb1k+xiYGDGPFczE8TK51YzXzIqrEuaziVHCtWjo0NNvsxtpDi1aE2NXaXLr8hWenPQhNZSsscVRJIx1hpRnw6GJiQqc23fcqWrsV8SZLAm2ldqjFctJcP2MHEjcmoiaTWcVJzk6VPUTxZJXSKXKvMtZKuuSGiW5J0dh2mWmn1T0yjJaohVkSPI8tPmdeRclpj3OJHCkjFjg/hRnXr3PEf3pMw1hLjTc1t3HO5X8N/lHOfElb7kXBJrU9SQ15SzrJCayY8ovqQl0bscUk8ovqiN9cmnz6eQhfKMaLQyQzhQx2U8rVCjojiTKeSeSyXkR5bKYiF1Qk2kNDztkhvmXy7yp81ollTyt5NFxpjzdsaOJjQ+dj8tot2RnGkSTGPoNNM4hLlfzSeVqxoeTWeuTztFF5NlvkTK5kxMZIY+RkibVpE11Q02IVtCZxChu2J/oMRJCI7CYyRIfLfk2LJoazY+dotPJEBGgkyrobTvmY11z0+UQhc1CzQs2hj5VzPke5IkMYxjye4lkxruM15mcRwsjLqjR0xljSuydNpE9i4kK1IrVMaJNdCRiPomYkOsWTl2Jtk4Omh7E3/SzFf8AQybWsSd/MPNC5kIQryQllHbJPLUQt83tlEgR2KLzjsJdiRIZJj7s9S9jhVcKE+qEqojL8yRASSp6Cl2RGVUo/dnBKmk0KT+FMisOMHhxtf1dyU3bfb9Ivk9R5SZifST2JbEtslkyWxJdmMa7ZsebGPkYxsZPtFlNWjCxFbuzw84aNxktiXDpO39q+UYxj8l5seTyea5KyTI/Ty+h6ZemUdkLkY82yWxLYddBjRdWj0F9KMPDpSnCP3aR4RSp4+Ff+48N/wCpw7/3IluT3JkyZMmTJkyZMmTMTdGJuYu5ibmIu5ifUT+pk/qZPdkyZMnsiWyJ7InsiexPYn9JPYxPpMT6DF+n+DF+n+DG+n+DxGz9jxO8vY8S/wCqXseJ+qR4n65GM3bcrMWWrbbPE/3JHif7kzF3Zi7sxvrkY31y9zH+uXuYvqYvqYq3MddJy9zG68UjH+uRj/XIx1/3GY/9xmNovxHZjO/jZ4hKvxJe54n+7L3PEf3Ze5jvriS9zF+qXuYvaUvcx/7k/dnien4k/c8THpiTPFNU8SZ4xKljYnueMu/xsT3PFzVSxsRr7j2JbEtvkWMYxj85CFyvL1REiR9CJEj6ESJHZGF9KML6EYP0owfpRg/SYX0GF9CML6f5ML6f5MPb+WYez92Yez9zD2fuQ2fuQ9fcW7+WQs9C+rF8it8kI9D0z01ojrWSpJ1bRGkqI0vhVmmlHorHsslsj0QthbITFsREIQhCEvmNemTK0cc5vRIabQx7DHmslkhCy9TZjXcdCyQth9kzTVMi0v8A80QhtLo0Uf6SMFb/AJdHw6J+9EWnTNmJacQi1msvVZ+ghCExC+VvsV0RuLK+7F6mnRUVonlpZ6DPUe7Pvk1mxcrGuiH3E1rFMvZMkn+ZPLvUfYuk6Z90Ym6/eidu+El3imh+i9ybQz0f7jV2menJrV5IV9ULK/mGxvo2NdH/APEVmnUWwu2h6sVVwqyV9EkiXYru0JpUzdWLsxbjyebrsemf+k3iz0Y+0b/clX5E/wBytq+4n2tEWjS1K/uxuvhtejJdoqt7Pv8A+TukqJ7L3HTtu1sS13+xHZM0a4X7kI0+j9WRd/ENayYqepFCXdEZdGPujTmSPVWL5L15GOrQy7pr/wAC7v8Akv8ArO936j00RXbTbJpLQfThJJaplroLZiH5CG+kb/clt/IqbpsXdNGjG26bNRIrq1f3F2SY1HVqjt8K31I3piO66LUfVv3RxWn7Uav81GruGpevCv2VfyLsmOy30E1+RnoaZOzVs1yea7cllHqIXnojuiLpOiO6E6EtGiPaKH3TNLJvuiVfmJbv3KrW/wBxCEuhTy9D0F3Qq0WVDJOtRGyYlrf8Ggmqfvk9NClTirF9X20JOWjVepK/y2WtYtoa0blQqd4c3+1mHf5FYnomv2o11ZdfCzXo17l0kN6X0Ojyruy+jNdGIeWot7Z6kWJaNcmvOoq7G5clpiVaifTLcXaRvZfRM3Q6f/2dRdW6PVF9KZr1kv2HRLdIfI0qsQr68lPWSz060byZp1Z6iNfzI7JL7j7kmUtU0rLa4bruJR/LIXVzkvtKmLs5PX6i49/s2Qt/ElvdMw29OBsf5U0lslQ7qn+4vpafoQ3ZuiKbdKxMSKPv7l7+5ZG2qQvQ2o3aza3Y6VRG+2VC5Fw/ceVa3foJH//EACcRAAMAAQMDBAMAAwAAAAAAAAABEQIDEBIgITAxQEFRE1BhYGKA/9oACAECAQE/AP1C/wCP1i5f0+mk2Uv6DSx+WiY/QscU6kZppvZKuGGDxY37/DTb9RaeKKLbUzTUEm2Yaax7v1Gx9N6KcjkX2WPdrbuRncpMW/Q44rukNlG/BCE8NL4k4z8uQ9XI/NkYajfYm7fivQ0h+z09N5j08MlIYaeOHptDJjZehranI5GeusTT1ua9Dmch5F9gk8nEhaD5LuocV9ISSXZdDMh7rdpMeI0Wn40/UxSxUQu5wbOGX0cMvoWnkxaKndi0sDLSXqh9vAscn6Ix0c21ewtLBfAsccfRTrbGPelLu4NL430/s5HI5HIpSmpg8u6MsHj1YLlkkLsXw0vRSi2hm40N3dZNCzT3osilLtnprI4tNp7xsxxy5Ls/Xa9VKhsfTCbZNpnNjbZejHT+WypDe1KUTPgRngskfg/p+D/YxwWKmzL3ORTkUbGynIpetpMWHc4Y/Q9N3sNNbYzL48CZewmUvRkmMpSlORS9dLtSl2iY8MX8CSQ+pPal2RSlMum+W7UvS/DTuIhGMfmnTNu5drs/AtqUo3vxGmTbixp7x+Gl6KUvhpSl8UR22ZlnxMdTBlKUpSlKUpSlKUpSlKXasv8ACl/hf4cv4cv4cjkcjkcjkcmcx9x404L2MJ0zaEIRERCIhCIn+LX3166Up//EACgRAAICAQMDBAIDAQAAAAAAAAERAAIDECAhEjAxQEFQUQQTFFJgYv/aAAgBAwEBPwD4g/4NeuXzy+DWq0Xw6/wq7ahuAV8IOdc1jWoU5MUXdUUW1dvNcJAzqt9w5LHgmUIIC0JQJmXJW1dHHq/TLZfKK+OYc1oeSzoJixmpcJFQzMmU24Hjcoooop0wVnTFFqoou5YqpMPJ29dknOuxCJ7LjjjgPpCGFP01HtBhp9T9FG5lxVAfj0IJgJgcHosmQUC94MtqluXy2v51EAi2A6dM6DOgyn43V5mTAKJGfrnRBWLsLsWsKhmH8gGp45nVb7MNifJ2iDcCpW4lSGIlDlIlrGxZhKhyVEF6fc66f2hy1hz2fAn77yuc+DByAewb1r5Mt+RQDgsy2bIfeWvaw5L3qCDejKmwPEqbe51zHgDRRbcWQV4MrkrbdkPTQmFnuDVbAWJjDBgAGpqD5lsVgyPGxbHMeY1gsLAEasDyZe9em3IPHYUWg7FKgjmClYKgbbZgCQBCSYoootFrjydBn8jjxP5P/MvfrLJjO1RRaKKLYtlbkQ5QoMlvuDLVcwEHwdL9VPfuvUaKKKKdMUWg0XaFlBkI95Ym3fUGxRbF6Edlbh3n6ZRaAaOOOOOOOOOPvrsqKKKLtvSspj65fDl9uRFFFFFFFFFFFFFFFsUWzjRD7iH3EPuIRRRRRCIRCISpAgyrxP3W9YzGY4zGYzGY/wDLL4UQVEU//9k=);\n  --theme-background: var(--in-the-sky);\n}\n\nbody.background-settings-workplace-background-image.background-settings-workplace-waves-light.theme-light,\nbody.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark {\n  --wave-background: url(\"data:image/svg+xml, %3Csvg data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 120' preserveAspectRatio='none'%3E %3Cpath d='M0,0V46.29c47.79,22.2,103.59,32.17,158,28,70.36-5.37,136.33-33.31,206.8-37.5C438.64,32.43,512.34,53.67,583,72.05c69.27,18,138.3,24.88,209.4,13.08,36.15-6,69.85-17.84,104.45-29.34C989.49,25,1113-14.29,1200,52.47V0Z' opacity='.25' class='shape-fill'%3E%3C/path%3E %3Cpath d='M0,0V15.81C13,36.92,27.64,56.86,47.69,72.05,99.41,111.27,165,111,224.58,91.58c31.15-10.15,60.09-26.07,89.67-39.8,40.92-19,84.73-46,130.83-49.67,36.26-2.85,70.9,9.42,98.6,31.56,31.77,25.39,62.32,62,103.63,73,40.44,10.79,81.35-6.69,119.13-24.28s75.16-39,116.92-43.05c59.73-5.85,113.28,22.88,168.9,38.84,30.2,8.66,59,6.17,87.09-7.5,22.43-10.89,48-26.93,60.65-49.24V0Z' opacity='.5' class='shape-fill'%3E%3C/path%3E %3Cpath d='M0,0V5.63C149.93,59,314.09,71.32,475.83,42.57c43-7.64,84.23-20.12,127.61-26.46,59-8.63,112.48,12.24,165.56,35.4C827.93,77.22,886,95.24,951.2,90c86.53-7,172.46-45.71,248.8-84.81V0Z' class='shape-fill'%3E%3C/path%3E %3C/svg%3E\");\n  --theme-background: var(--wave-background);\n  --wave-background-color: var(--background-waves-color);\n}\nbody.background-settings-workplace-background-image.background-settings-workplace-waves2-light.theme-light,\nbody.background-settings-workplace-background-image.background-settings-workplace-waves2.theme-dark {\n  --wave2-background: url(\"data:image/svg+xml,%3Csvg width='100%25' height='100%25' id='svg' viewBox='0 0 1440 600' xmlns='http://www.w3.org/2000/svg' class='transition duration-300 ease-in-out delay-150'%3E%3Cstyle%3E .path-0%7B animation:pathAnim-0 4s; animation-timing-function: linear; animation-iteration-count: infinite; %7D @keyframes pathAnim-0%7B 0%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 81.35641025641027,172.9153846153846 162.71282051282054,195.83076923076922 252,194 C 341.28717948717946,192.16923076923078 438.50512820512824,165.59230769230766 511,146 C 583.4948717948718,126.40769230769234 631.2666666666665,113.80000000000004 703,116 C 774.7333333333335,118.19999999999996 870.428205128205,135.20769230769227 957,154 C 1043.571794871795,172.79230769230773 1121.0205128205127,193.3692307692308 1200,193 C 1278.9794871794873,192.6307692307692 1359.4897435897437,171.3153846153846 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D 25%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 93.78717948717946,117.86410256410255 187.57435897435892,85.72820512820512 265,105 C 342.4256410256411,124.27179487179488 403.4897435897436,194.95128205128205 488,191 C 572.5102564102564,187.04871794871795 680.4666666666668,108.46666666666668 760,108 C 839.5333333333332,107.53333333333332 890.6435897435897,185.18205128205128 968,201 C 1045.3564102564103,216.81794871794872 1148.9589743589743,170.8051282051282 1232,152 C 1315.0410256410257,133.1948717948718 1377.520512820513,141.5974358974359 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D 50%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 96.15641025641025,143.13589743589745 192.3128205128205,136.2717948717949 266,127 C 339.6871794871795,117.72820512820512 390.9051282051282,106.04871794871795 455,129 C 519.0948717948718,151.95128205128205 596.0666666666668,209.5333333333333 676,201 C 755.9333333333332,192.4666666666667 838.8282051282051,117.81794871794872 936,114 C 1033.1717948717949,110.18205128205128 1144.6205128205129,177.1948717948718 1231,195 C 1317.3794871794871,212.8051282051282 1378.6897435897436,181.4025641025641 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D 75%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 55.16923076923078,140.31538461538463 110.33846153846156,130.63076923076923 198,135 C 285.66153846153844,139.36923076923077 405.8153846153846,157.7923076923077 496,167 C 586.1846153846154,176.2076923076923 646.4000000000001,176.2 733,158 C 819.5999999999999,139.8 932.5846153846155,103.40769230769229 1001,104 C 1069.4153846153845,104.59230769230771 1093.2615384615385,142.16923076923078 1159,156 C 1224.7384615384615,169.83076923076922 1332.3692307692309,159.9153846153846 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D 100%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 81.35641025641027,172.9153846153846 162.71282051282054,195.83076923076922 252,194 C 341.28717948717946,192.16923076923078 438.50512820512824,165.59230769230766 511,146 C 583.4948717948718,126.40769230769234 631.2666666666665,113.80000000000004 703,116 C 774.7333333333335,118.19999999999996 870.428205128205,135.20769230769227 957,154 C 1043.571794871795,172.79230769230773 1121.0205128205127,193.3692307692308 1200,193 C 1278.9794871794873,192.6307692307692 1359.4897435897437,171.3153846153846 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D %7D%3C/style%3E%3Cdefs%3E%3ClinearGradient id='gradient' x1='0%25' y1='50%25' x2='100%25' y2='50%25'%3E%3Cstop offset='5%25' stop-color='%23002bdc66'%3E%3C/stop%3E%3Cstop offset='95%25' stop-color='%2332ded466'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M 0,600 C 0,600 0,150 0,150 C 81.35641025641027,172.9153846153846 162.71282051282054,195.83076923076922 252,194 C 341.28717948717946,192.16923076923078 438.50512820512824,165.59230769230766 511,146 C 583.4948717948718,126.40769230769234 631.2666666666665,113.80000000000004 703,116 C 774.7333333333335,118.19999999999996 870.428205128205,135.20769230769227 957,154 C 1043.571794871795,172.79230769230773 1121.0205128205127,193.3692307692308 1200,193 C 1278.9794871794873,192.6307692307692 1359.4897435897437,171.3153846153846 1440,150 C 1440,150 1440,600 1440,600 Z' stroke='none' stroke-width='0' fill='url(%23gradient)' class='transition-all duration-300 ease-in-out delay-150 path-0'%3E%3C/path%3E%3Cstyle%3E .path-1%7B animation:pathAnim-1 4s; animation-timing-function: linear; animation-iteration-count: infinite; %7D @keyframes pathAnim-1%7B 0%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 82.94102564102565,295.425641025641 165.8820512820513,290.85128205128206 257,284 C 348.1179487179487,277.14871794871794 447.41282051282053,268.02051282051286 514,267 C 580.5871794871795,265.97948717948714 614.4666666666667,273.06666666666666 676,278 C 737.5333333333333,282.93333333333334 826.7205128205128,285.71282051282054 921,295 C 1015.2794871794872,304.28717948717946 1114.6512820512821,320.0820512820513 1202,322 C 1289.3487179487179,323.9179487179487 1364.674358974359,311.9589743589744 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D 25%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 88.24102564102563,279.49487179487176 176.48205128205126,258.98974358974357 263,274 C 349.51794871794874,289.01025641025643 434.3128205128206,339.5358974358975 519,332 C 603.6871794871794,324.4641025641025 688.2666666666667,258.8666666666667 759,247 C 829.7333333333333,235.13333333333335 886.6205128205129,276.99743589743593 960,293 C 1033.3794871794871,309.00256410256407 1123.2512820512823,299.14358974358976 1206,296 C 1288.7487179487177,292.85641025641024 1364.374358974359,296.42820512820515 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D 50%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 77.61025641025643,301.1948717948718 155.22051282051285,302.38974358974355 229,309 C 302.77948717948715,315.61025641025645 372.7282051282051,327.63589743589745 455,315 C 537.2717948717949,302.36410256410255 631.8666666666667,265.0666666666667 730,264 C 828.1333333333333,262.9333333333333 929.8051282051283,298.0974358974359 1003,313 C 1076.1948717948717,327.9025641025641 1120.9128205128204,322.54358974358973 1189,317 C 1257.0871794871796,311.45641025641027 1348.5435897435898,305.7282051282051 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D 75%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 53.37692307692305,305.2846153846154 106.7538461538461,310.5692307692308 202,310 C 297.2461538461539,309.4307692307692 434.36153846153854,303.00769230769225 521,293 C 607.6384615384615,282.99230769230775 643.8,269.4 716,259 C 788.2,248.6 896.4384615384615,241.39230769230772 974,254 C 1051.5615384615385,266.6076923076923 1098.4461538461537,299.03076923076924 1171,310 C 1243.5538461538463,320.96923076923076 1341.7769230769231,310.4846153846154 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D 100%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 82.94102564102565,295.425641025641 165.8820512820513,290.85128205128206 257,284 C 348.1179487179487,277.14871794871794 447.41282051282053,268.02051282051286 514,267 C 580.5871794871795,265.97948717948714 614.4666666666667,273.06666666666666 676,278 C 737.5333333333333,282.93333333333334 826.7205128205128,285.71282051282054 921,295 C 1015.2794871794872,304.28717948717946 1114.6512820512821,320.0820512820513 1202,322 C 1289.3487179487179,323.9179487179487 1364.674358974359,311.9589743589744 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D %7D%3C/style%3E%3Cdefs%3E%3ClinearGradient id='gradient' x1='0%25' y1='50%25' x2='100%25' y2='50%25'%3E%3Cstop offset='5%25' stop-color='%23002bdc88'%3E%3C/stop%3E%3Cstop offset='95%25' stop-color='%2332ded488'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M 0,600 C 0,600 0,300 0,300 C 82.94102564102565,295.425641025641 165.8820512820513,290.85128205128206 257,284 C 348.1179487179487,277.14871794871794 447.41282051282053,268.02051282051286 514,267 C 580.5871794871795,265.97948717948714 614.4666666666667,273.06666666666666 676,278 C 737.5333333333333,282.93333333333334 826.7205128205128,285.71282051282054 921,295 C 1015.2794871794872,304.28717948717946 1114.6512820512821,320.0820512820513 1202,322 C 1289.3487179487179,323.9179487179487 1364.674358974359,311.9589743589744 1440,300 C 1440,300 1440,600 1440,600 Z' stroke='none' stroke-width='0' fill='url(%23gradient)' class='transition-all duration-300 ease-in-out delay-150 path-1'%3E%3C/path%3E%3Cstyle%3E .path-2%7B animation:pathAnim-2 4s; animation-timing-function: linear; animation-iteration-count: infinite; %7D @keyframes pathAnim-2%7B 0%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 76.1974358974359,467.39230769230767 152.3948717948718,484.7846153846154 220,481 C 287.6051282051282,477.2153846153846 346.6179487179487,452.25384615384615 441,452 C 535.3820512820513,451.74615384615385 665.1333333333334,476.2 762,477 C 858.8666666666666,477.8 922.8487179487179,454.94615384615383 984,443 C 1045.1512820512821,431.05384615384617 1103.4717948717948,430.0153846153846 1179,433 C 1254.5282051282052,435.9846153846154 1347.2641025641026,442.9923076923077 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D 25%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 86.80769230769232,454.0974358974359 173.61538461538464,458.1948717948718 262,469 C 350.38461538461536,479.8051282051282 440.3461538461538,497.3179487179487 508,488 C 575.6538461538462,478.6820512820513 621,442.53333333333336 697,418 C 773,393.46666666666664 879.6538461538462,380.5487179487179 972,401 C 1064.3461538461538,421.4512820512821 1142.3846153846155,475.2717948717949 1218,489 C 1293.6153846153845,502.7282051282051 1366.8076923076924,476.36410256410255 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D 50%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 79.76153846153846,435.7282051282051 159.52307692307693,421.45641025641027 229,422 C 298.4769230769231,422.54358974358973 357.6692307692308,437.9025641025641 443,442 C 528.3307692307692,446.0974358974359 639.8,438.93333333333334 720,424 C 800.2,409.06666666666666 849.1307692307691,386.36410256410255 925,394 C 1000.8692307692309,401.63589743589745 1103.676923076923,439.6102564102564 1194,454 C 1284.323076923077,468.3897435897436 1362.1615384615384,459.1948717948718 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D 75%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 72.5102564102564,462.1435897435897 145.0205128205128,474.28717948717946 236,478 C 326.9794871794872,481.71282051282054 436.42820512820515,476.9948717948718 503,459 C 569.5717948717949,441.0051282051282 593.2666666666667,409.7333333333333 677,408 C 760.7333333333333,406.2666666666667 904.5051282051284,434.07179487179496 998,437 C 1091.4948717948716,439.92820512820504 1134.7128205128206,417.9794871794872 1200,416 C 1265.2871794871794,414.0205128205128 1352.6435897435897,432.0102564102564 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D 100%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 76.1974358974359,467.39230769230767 152.3948717948718,484.7846153846154 220,481 C 287.6051282051282,477.2153846153846 346.6179487179487,452.25384615384615 441,452 C 535.3820512820513,451.74615384615385 665.1333333333334,476.2 762,477 C 858.8666666666666,477.8 922.8487179487179,454.94615384615383 984,443 C 1045.1512820512821,431.05384615384617 1103.4717948717948,430.0153846153846 1179,433 C 1254.5282051282052,435.9846153846154 1347.2641025641026,442.9923076923077 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D %7D%3C/style%3E%3Cdefs%3E%3ClinearGradient id='gradient' x1='0%25' y1='50%25' x2='100%25' y2='50%25'%3E%3Cstop offset='5%25' stop-color='%23002bdcff'%3E%3C/stop%3E%3Cstop offset='95%25' stop-color='%2332ded4ff'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M 0,600 C 0,600 0,450 0,450 C 76.1974358974359,467.39230769230767 152.3948717948718,484.7846153846154 220,481 C 287.6051282051282,477.2153846153846 346.6179487179487,452.25384615384615 441,452 C 535.3820512820513,451.74615384615385 665.1333333333334,476.2 762,477 C 858.8666666666666,477.8 922.8487179487179,454.94615384615383 984,443 C 1045.1512820512821,431.05384615384617 1103.4717948717948,430.0153846153846 1179,433 C 1254.5282051282052,435.9846153846154 1347.2641025641026,442.9923076923077 1440,450 C 1440,450 1440,600 1440,600 Z' stroke='none' stroke-width='0' fill='url(%23gradient)' class='transition-all duration-300 ease-in-out delay-150 path-2'%3E%3C/path%3E%3C/svg%3E\");\n  --theme-background: var(--wave2-background);\n  --wave2-background-color: var(--background-waves-color);\n}\n\nbody.is-mobile.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light).theme-light,\nbody.is-mobile.background-settings-workplace-background-image:is(.background-settings-workplace-waves,.background-settings-workplace-waves2).theme-dark {\n  --wave2-background-color: #001ae0;\n  --wave-background-color: #245eff;\n}\n\nbody.background-image-settings-command-palette-switch .modal-container .prompt::before {\n  background-size: cover;\n  content: '';\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  z-index:-1;\n}\n\nbody.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch .modal-container .prompt::before {\n  background-image: var(--theme-background);\n  filter: blur(var(--blur-depth-cp)) brightness(var(--brightness-4-bg-cp)) saturate(var(--saturate-4-bg-cp));\n  opacity: var(--opacity-cp);\n  z-index: -1;\n}\nbody.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch.background-settings-workplace-waves2-light .modal-container .prompt::before,\nbody.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch.background-settings-workplace-waves2 .modal-container .prompt::before {\n  top: 60%;\n}\n\nbody.theme-light.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch.background-settings-workplace-waves-light .modal-container .prompt::before,\nbody.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark .prompt:before {\n  transform: rotate(180deg);\n  top: 75%;\n  background-image:unset;\n  -webkit-mask-image: var(--theme-background);\n  background-size:100% 100%;\n  opacity:0.5;\n  background-color: var(--wave-background-color);\n}\n\nbody.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch .modal-container .prompt input.prompt-input,\nbody.background-image-settings-command-palette-switch:not(.background-image-settings-command-palette-same-as-workplace) .modal-container .prompt input.prompt-input {\n  background-color: transparent;\n}\n\nbody.background-image-settings-command-palette-custom.background-image-settings-command-palette-switch:not(.background-image-settings-command-palette-same-as-workplace).theme-light .modal-container .prompt::before {\n  background-image: var(--background-command-palette-theme-light-custom);\n}\n\nbody.background-image-settings-command-palette-custom.background-image-settings-command-palette-switch:not(.background-image-settings-command-palette-same-as-workplace).theme-dark .modal-container .prompt::before {\n  background-image: var(--background-command-palette-theme-dark-custom);\n}\nbody.background-image-settings-command-palette-custom.background-image-settings-command-palette-switch .modal-container .prompt::before {\n  background-size: auto;\n  filter: blur(var(--blur-depth-cp)) brightness(var(--brightness-4-bg-cp)) saturate(var(--saturate-4-bg-cp));\n  opacity: var(--opacity-cp);\n  z-index: -1;\n}\nbody.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-container-before.is-before-active .workspace-tab-header-inner,\nbody.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-container-after.is-after-active .workspace-tab-header-inner,\nbody.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-header.is-before-active .workspace-tab-header-inner,\nbody.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-header.is-after-active .workspace-tab-header-inner,\nbody.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-container-before.is-before-active,\nbody.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-container-after.is-after-active,\nbody.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-header.is-before-active,\nbody.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-header.is-after-active {\n  background-color: transparent;\n}\n\nbody.background-settings-workplace-background-image.background-settings-workplace-theme-light-custom-option.theme-light {\n  --theme-background: var(--background-settings-workplace-theme-light-custom);\n}\n\nbody.background-settings-workplace-background-image.background-settings-workplace-theme-dark-custom-option.theme-dark {\n  --theme-background: var(--background-settings-workplace-theme-dark-custom);\n}\n\n/*rectangle*/\nbody.layout-style-options-rectangle .workspace-tab-container-before.is-before-active .workspace-tab-header-inner,\nbody.layout-style-options-rectangle .workspace-tab-container-after.is-after-active .workspace-tab-header-inner,\nbody.layout-style-options-rectangle .workspace-tab-header.is-before-active .workspace-tab-header-inner,\nbody.layout-style-options-rectangle .workspace-tab-header.is-after-active .workspace-tab-header-inner,\nbody.layout-style-options-rectangle .workspace-tab-header,\nbody.layout-style-options-rectangle .workspace-tab-header-inner,\nbody.layout-style-options-rectangle .workspace-split.mod-left-split .view-content,\nbody.layout-style-options-rectangle .workspace-split.mod-right-split .view-content,\nbody.layout-style-options-rectangle .workspace-tab-header.is-after-active,\nbody.layout-style-options-rectangle .workspace-tab-header.is-before-active,\nbody.layout-style-options-rectangle .workspace-tab-container-before.is-before-active .workspace-tab-header-inner {\n  background-color: transparent;\n  border-radius: 0;\n}\n\nbody.layout-style-options-rectangle .workspace-split.mod-root>.workspace-leaf:first-of-type .workspace-leaf-content,\nbody.layout-style-options-rectangle .workspace-split.mod-root>.workspace-leaf:last-of-type .workspace-leaf-content {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\nbody.layout-style-options-rectangle .workspace-tab-header-inner {\n  padding: 3px 9px;\n}\n\nbody.layout-style-options-rectangle .workspace-tab-container-before,\nbody.layout-style-options-rectangle .workspace-tab-container-after {\n  width: 0;\n}\n\nbody.layout-style-options-rectangle .workspace-tab-header-container {\n  padding: 4px 0 0 4px;\n}\n\nbody.layout-style-options-rectangle .workspace-split.mod-right-split .workspace-tabs .workspace-leaf {\n  border-top-right-radius: 0;\n}\n\nbody.layout-style-options-rectangle .workspace-split.mod-left-split .workspace-tabs .workspace-leaf {\n  border-top-left-radius: 0;\n}\n\nbody.layout-style-options-rectangle .workspace-tab-header-container {\n  background-color: var(--background-secondary);\n  border-bottom: 1px solid var(--background-modifier-border-1);\n}\n\nbody.layout-style-options-rectangle .workspace-split.mod-left-split>.workspace-leaf-resize-handle:not(:hover),\nbody.layout-style-options-rectangle .workspace-split.mod-right-split>.workspace-leaf-resize-handle:not(:hover),\nbody.layout-style-options-rectangle .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:not(:hover) {\n  height: 100%;\n  background-color: var(--background-leaf-resize-handle);\n}\n\nbody.layout-style-options-rectangle .workspace-split.mod-left-split>.workspace-leaf-resize-handle:hover,\nbody.layout-style-options-rectangle .workspace-split.mod-right-split>.workspace-leaf-resize-handle:hover,\nbody.layout-style-options-rectangle .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:hover {\n  height: 100%;\n}\n\nbody.layout-style-options-rectangle .side-dock-ribbon-action {\n  padding: 3px 0;\n}\n\n/*-------- Eisenhower Matrix start--- */\n/* Eisenhower Matrix from Spectrum themes */\n\n/*for Blue Topaz theme-表格四象图分布 Modified  by cuman 2021-11-29*/\n/* 用法 yaml区域声明\ncssclass: matrix\n内容如下形式(表格内容最好使用嵌入形式)：\n\n|                   |             |\n| ----------------- | ----------- |\n| ![[#To-Do]]       | ![[#Doing]] |\n| ![[#Considering]] | ![[#Maybe]] |\n\n*/\n\n:root,\n.theme-dark,\n.theme-light {\n  --matrix-1: var(--p-kanban-color-2);\n  --matrix-2: var(--p-kanban-color-3);\n  --matrix-4: var(--p-kanban-color-5);\n  --matrix-5: var(--p-kanban-color-6);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr {\n  display: flex;\n}\n:is(.markdown-preview-view,.markdown-rendered).matrix table th {\n  background-color: transparent;\n  background-image: none;\n}\n:is(.markdown-preview-view,.markdown-rendered).matrix table tbody>tr {\n  background-color: transparent;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix .internal-embed:not(.image-embed) {\n  border: 1px solid;\n  border-radius: 10px;\n}\n:is(.markdown-preview-view,.markdown-rendered).matrix thead {\n  background-color: transparent;\n}\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr th,\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr td {\n  background-color: transparent;\n  padding-right: 0;\n  border: 0px;\n  width: 50%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n:is(.markdown-preview-view,.markdown-rendered).matrix .markdown-embed {\n  background-color: transparent;\n}\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr th > *,\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr td > * {\n  width: 100%;\n  height: 100%;\n  background-color: var(--background-secondary);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr td {\n  background-color: transparent;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(1n) td:nth-child(1) > * {\n  border-color: var(--matrix-1);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(1n) td:nth-child(1):hover {\n  background-color: var(--matrix-1);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(1n) td:nth-child(2) > * {\n  border-color: var(--matrix-2);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(1n) td:nth-child(2):hover {\n  background-color: var(--matrix-2);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(2n) td:nth-child(1) > * {\n  border-color: var(--matrix-4);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(2n) td:nth-child(1):hover {\n  background-color: var(--matrix-4);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(2n) td:nth-child(2) > * {\n  border-color: var(--matrix-5);\n}\n\n:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(2n) td:nth-child(2):hover {\n  background-color: var(--matrix-5);\n}\n/*-------- Eisenhower Matrix end--- */\n\n.recent-vaults-list-item:hover {\n  color: var(--theme-color) !important;\n}\n\nbody.plain-file-title.theme-light,\nbody.plain-file-title.theme-dark {\n  --color-view-header-gradient-1: var(--background-primary);\n  --color-view-header-gradient-2: var(--background-primary);\n}\n\nbody:not(:is(.default-loading-page,.is-popout-window)) .progress-bar-message {\n  visibility: hidden;\n}\n\nbody:not(.default-loading-page).loading-page-style-default .progress-bar-message:before {\n  content: \"\";\n  width: 80px;\n  height: 80px;\n  position: relative;\n  animation: shape 2.5s infinite alternate;\n  visibility: visible !important;\n  display: block;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).theme-light .progress-bar {\n  background-color: white;\n}\nbody:not(.default-loading-page).theme-dark .progress-bar {\n  background-color: #222222;\n}\n\n@keyframes shape {\n  0% {background-color: transparent; transform: translate(-50px, -50px); border-radius: 50%;}\n  10% {background-color: #53c7ff; transform: translate(-50px, -50px); border-radius: 50%;}\n  30% {background-color: #8fff7b; transform: translate(110px, -50px); border-radius: 0;}\n  50% {background-color: #ffe468; transform: translate(110px, 110px); border-radius: 50%;}\n  70% {background-color: #fe9289; transform: translate(-50px, 110px); border-radius: 0;}\n  90% {background-color: #53c7ff; transform: translate(-50px, -50px); border-radius: 50%;}\n  100% {background-color: transparent; transform: translate(-50px, -50px); border-radius: 50%;}\n}\n\n/* the gif animation was created by @Jake Fleming https://dribbble.com/shots/9948351-kitty-wiggle */\nbody:not(.default-loading-page).loading-animation-cat .progress-bar-message::before {\n  content: \"GIF creator: Jake Fleming\";\n  display: block;\n  background: no-repeat center/cover;\n  width: 800px;\n  height: 500px;\n  margin-top: -20px;\n  font-size: initial;\n  color: var(--text-muted);\n  filter: hue-rotate(-55deg) saturate(120%);\n  position: initial;\n  animation: unset;\n}\n\nbody:not(.default-loading-page).loading-animation-cat.theme-dark .progress-bar-message::before {\n  filter: invert(100%) hue-rotate(153deg) saturate(250%);\n}\n\nbody:not(.default-loading-page).loading-animation-cat.theme-light .progress-bar {\n  background-color: white;\n}\n\nbody:not(.default-loading-page).loading-animation-cat.theme-dark .progress-bar {\n  background-color: black;\n}\n\nbody:not(.default-loading-page).loading-animation-cat .progress-bar-message {\n  color: var(--text-normal);\n  font-size: 25px;\n  visibility: visible;\n}\n\nbody:not(.default-loading-page).loading-animation-custom .progress-bar-message::before {\n  position: initial;\n  animation: unset;\n  display: block;\n  content: var(--loading-page-custom-gif-caption);\n  background: no-repeat center/cover var(--loading-page-custom-gif-url);\n  width: 800px;\n  height: 600px;\n  margin-top: -20px;\n}\n\nbody:not(.default-loading-page).loading-shape-with-custom-gif .progress-bar-message:before {\n  display: block;\n  width: 250px;\n  height: 250px;\n  content: var(--loading-page-custom-gif-caption-alt);\n  background: no-repeat center/cover var(--loading-page-custom-gif-url-alt);\n  animation: shape-gif 2.5s infinite alternate;\n}\n\nbody:not(.default-loading-page).loading-shape-with-custom-gif.loading-shape-with-custom-high-contrast-bg.theme-light .progress-bar {\n  background-color: black;\n}\n\nbody:not(.default-loading-page).loading-shape-with-custom-gif.loading-shape-with-custom-high-contrast-bg.theme-dark .progress-bar {\n  background-color: white;\n}\n\nbody:not(.default-loading-page).loading-shape-with-custom-gif.loading-shape-with-custom-high-contrast-bg.theme-dark .progress-bar-message::before {\n  animation: shape-gif-dark 2.5s infinite alternate;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\n@keyframes shape-gif {\n  0% {filter: hue-rotate(0deg); transform: translate(-80px, -80px); border-radius: 50%;}\n  25% {filter: hue-rotate(90deg); transform: translate(80px, -80px); border-radius: 0;}\n  50% {filter: hue-rotate(180deg); transform: translate(80px, 80px); border-radius: 50%;}\n  75% {filter: hue-rotate(270deg); transform: translate(-80px, 80px); border-radius: 0;}\n  100% {filter: hue-rotate(360deg); transform: translate(-80px, -80px); border-radius: 50%;}\n}\n\n@keyframes shape-gif-dark {\n  0% {filter: hue-rotate(0deg) invert(100%); transform: translate(-80px, -80px); border-radius: 50%;}\n  25% {filter: hue-rotate(90deg) invert(100%); transform: translate(80px, -80px); border-radius: 0;}\n  50% {filter: hue-rotate(180deg) invert(100%); transform: translate(80px, 80px); border-radius: 50%;}\n  75% {filter: hue-rotate(270deg) invert(100%); transform: translate(-80px, 80px); border-radius: 0;}\n  100% {filter: hue-rotate(360deg) invert(100%); transform: translate(-80px, -80px); border-radius: 50%;}\n}\n\nbody:not(.default-loading-page).loading-add-icons .progress-bar-message {\n  all: initial;\n  font-size: var(--font-size-loading-add);\n  color: var(--loading-add-text-color);\n  animation: 1.5s infinite alternate;\n  animation-name: gradientChange, moving;\n}\n\n/*加载画面的文字*/\nbody:not(.default-loading-page).loading-add-icons .progress-bar-message::before {\n  all: initial;\n  color: var(--loading-add-text-color);\n  content: var(--loading-text-before);\n  animation: 2s infinite alternate;\n  animation-name: gradientChange;\n}\n\nbody:not(.default-loading-page).loading-add-icons .progress-bar-message::after {\n  all: initial;\n  color: var(--loading-add-text-color);\n  content: var(--loading-text-after);\n  animation: 2s infinite alternate;\n  animation-name: gradientChange;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\n@keyframes gradientChange {\n  100% { color: var(--loading-add-text-color-alt); }\n}\n@keyframes moving {\n  0% { transform: translateX(-100px); }\n  100% { transform: translateX(100px); }\n}\n\nbody:not(.default-loading-page).loading-custom-text .progress-bar-message::before {\n  all: initial;\n  content: var(--loading-diy-text);\n  font-family: var(--font-loading-text) !important;\n  visibility: visible !important;\n  display: block;\n  font-size: var(--font-size-loading-diy-text);\n  line-height: 2;\n  color: var(--loading-diy-text-color);\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-typing-style .progress-bar-message::before {\n  overflow: hidden;\n  white-space: nowrap;\n  border-right: 0.07em solid;\n  animation: typing-style 3s steps(23, end),\n    cursor-blink 0.3s step-end infinite alternate;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\n@keyframes cursor-blink {\n  50% {border-color: transparent;}\n}\n\n@keyframes typing-style {\n  0% {width: 0;}\n  100% {width: 42ch;}\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-moving-style .progress-bar-message::before {\n  animation: moving-style 3s ease-in-out infinite alternate;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\n@keyframes moving-style {\n  0% {-webkit-transform: translateX(-100px); transform: translateX(-100px);}\n  50% {-webkit-transform: translateX(100px); transform: translateX(100px);}\n  100% {-webkit-transform: translateX(-100px); transform: translateX(-100px)}\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-shinning-style .progress-bar-message::before {\n  animation: shinning-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\n@keyframes shinning-style {\n  0% { opacity: 1;}\n  45% { opacity: 0;}\n  90% { opacity: 1;}\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-color-changing-style .progress-bar-message::before {\n  animation: color-changing-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\n@keyframes color-changing-style {\n  0% { color: var(--text-blue);}\n  25% { color: var(--text-green);}\n  50% { color: var(--text-yellow);}\n  75% { color: var(--text-red);}\n  100% { color: var(--text-blue);}\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-moving-style .progress-bar-message::before {\n  animation:\n    typing-style 3s steps(26, end),\n    cursor-blink 0.3s step-end infinite alternate,\n    moving-style 3s ease-in-out infinite alternate;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-shinning-style .progress-bar-message::before {\n  animation:\n    typing-style 3s steps(26, end),\n    cursor-blink 0.3s step-end infinite alternate,\n    shinning-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-color-changing-style .progress-bar-message::before {\n  animation:\n    color-changing-style 3s infinite,\n    typing-style 3s steps(26, end),\n    cursor-blink 0.3s step-end infinite alternate;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-moving-style.loading-text-shinning-style .progress-bar-message::before {\n  animation:\n    typing-style 3s steps(26, end),\n    cursor-blink 0.3s step-end infinite alternate,\n    moving-style 3s ease-in-out infinite alternate,\n    shinning-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-moving-style.loading-text-shinning-style.loading-text-color-changing-style .progress-bar-message::before {\n  animation:\n    typing-style 3s steps(26, end),\n    cursor-blink 0.3s step-end infinite alternate,\n    moving-style 3s ease-in-out infinite alternate,\n    shinning-style 3s infinite,\n    color-changing-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-moving-style.loading-text-shinning-style .progress-bar-message::before {\n  animation:\n    moving-style 3s ease-in-out infinite alternate,\n    shinning-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-moving-style.loading-text-color-changing-style .progress-bar-message::before {\n  animation:\n    moving-style 3s ease-in-out infinite alternate,\n    color-changing-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-moving-style.loading-text-shinning-style.loading-text-color-changing-style .progress-bar-message::before {\n  animation:\n    moving-style 3s ease-in-out infinite alternate,\n    shinning-style 3s infinite,\n    color-changing-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\nbody:not(.default-loading-page).loading-custom-text.loading-text-shinning-style.loading-text-color-changing-style .progress-bar-message::before {\n  animation:\n    shinning-style 3s infinite,\n    color-changing-style 3s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\n/* the mario animation was created by @B.C.Rikko https://bcrikko.github.io/css-collection/other/mario/index.html */\n/* need mario snippets  */\nbody:not(.default-loading-page).loading-page-style-mario .progress-bar-message:before {\n  content: \"\";\n  position: relative;\n  visibility: visible !important;\n  display: block;\n  top: calc(var(--pixel) * -6);\n  left: calc(var(--pixel) * -6.5);\n  width: var(--pixel);\n  height: var(--pixel);\n  background: transparent;\n  animation: sprite 0.618s infinite, jump 0.618s infinite;\n  transform: translateZ(0);\n  -webkit-transform: translateZ(0);\n  will-change: transform;\n}\n\n@keyframes jump {\n  from, 25%, 75%, to {transform: translateY(0);}\n  50% {transform: translateY(calc(var(--pixel) * -8));}\n}\n\n@keyframes sprite {\n  from, 24%, 74%, to {\n    box-shadow:\n      /* r:1 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 1) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 1) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 1) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 1) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 1) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 13) calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 1) 0 transparent,\n\n      /* r:2 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 2) 0 transparent,\n\n      /* r:3 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 3) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 3) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 3) 0 var(--c-3),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 3) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 3) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 3) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 3) 0 var(--c-2),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 3) 0 transparent,\n\n      /* r:4 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 4) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 4) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 4) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 4) 0 transparent,\n\n      /* r:5 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 5) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 5) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 5) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 5) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 5) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 5) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 5) 0 var(--c-3),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 5) 0 var(--c-3),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 5) 0 transparent,\n\n      /* r:6 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 6) 0 transparent,\n\n      /* r:7 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 7) 0 transparent,\n\n      /* r:8 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 8) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 8) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 8) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 8) 0 var(--c-3),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 8) 0 var(--c-3),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 8) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 13) calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 8) 0 transparent,\n\n      /* r:9 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 9) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 9) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 9) 0 transparent,\n\n      /* r:10 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 10) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 10) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 10) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 10) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 10) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 10) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 10) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 10) 0 transparent,\n\n      /* r:11 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 11) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 11) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 11) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 11) 0 var(--c-2),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 11) 0 var(--c-2),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 11) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 11) 0 var(--c-2),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 11) 0 var(--c-2),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 11) 0 var(--c-3),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 11) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 11) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 11) 0 transparent,\n\n      /* r:12 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 12) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 12) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 12) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 12) 0 transparent,\n\n      /* r:13 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 13) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 13) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 13) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 13) 0 var(--c-2),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 13) 0 var(--c-2),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 13) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 13) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 13) 0 transparent,\n\n      /* r:14 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 10) calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 11) calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 14) 0 transparent,\n\n      /* r:15 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 10) calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 11) calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 12) calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 15) 0 transparent,\n\n      /* r:16 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 10) calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 11) calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 12) calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 16) 0 transparent;\n  }\n\n  25%, 75% {\n    box-shadow:\n      /* r:1 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 10) calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 11) calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 12) calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 13) calc(var(--pixel) * 1) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 1) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 1) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 1) 0 var(--c-2),\n\n      /* r:2 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 2) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 13) calc(var(--pixel) * 2) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 2) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 2) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 2) 0 var(--c-2),\n\n      /* r:3 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 3) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 3) 0 var(--c-1),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 3) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 3) 0 var(--c-2),\n\n      /* r:4 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 4) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 4) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 4) 0 var(--c-3),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 4) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 4) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 4) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 4) 0 var(--c-2),\n\n      /* r:5 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 5) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 5) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 5) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 5) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 5) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 5) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 5) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 5) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 5) 0 var(--c-3),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 5) 0 var(--c-3),\n\n      /* r:6 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 6) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 6) 0 var(--c-3),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 6) 0 var(--c-2),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 6) 0 var(--c-3),\n\n      /* r:7 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 7) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 7) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 7) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 7) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 7) 0 var(--c-3),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 7) 0 var(--c-3),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 7) 0 var(--c-3),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 7) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 7) 0 transparent,\n\n      /* r:8 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 8) 0 var(--c-2),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 8) 0 var(--c-2),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 8) 0 var(--c-2),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 8) 0 var(--c-2),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 8) 0 var(--c-2),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 8) 0 var(--c-2),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 8) 0 var(--c-2),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 8) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 8) 0 transparent,\n\n      /* r:9 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 9) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 9) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 9) 0 var(--c-3),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 9) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 9) 0 transparent,\n\n      /* r:10 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 10) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 10) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 10) 0 var(--c-3),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 10) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 10) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 10) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 10) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 10) 0 var(--c-3),\n\n      /* r:11 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 11) 0 var(--c-2),\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 11) 0 var(--c-2),\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 11) 0 var(--c-3),\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 11) 0 var(--c-3),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 11) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 11) 0 var(--c-3),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 11) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 11) 0 var(--c-3),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 11) 0 var(--c-1),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 11) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 11) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 11) 0 var(--c-3),\n\n      /* r:12 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 12) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 12) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 12) 0 var(--c-3),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 12) 0 var(--c-2),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 12) 0 var(--c-1),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 12) 0 var(--c-3),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 12) 0 var(--c-3),\n\n      /* r:13 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 13) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 13) 0 var(--c-2),\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 13) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 13) 0 var(--c-3),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 13) 0 transparent,\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 13) 0 var(--c-1),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 13) 0 var(--c-3),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 13) 0 var(--c-3),\n\n      /* r:14 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 14) 0 transparent,\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 14) 0 var(--c-3),\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 14) 0 var(--c-3),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 14) 0 var(--c-3),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 14) calc(var(--pixel) * 14) 0 var(--c-1),\n      calc(var(--pixel) * 15) calc(var(--pixel) * 14) 0 var(--c-3),\n      calc(var(--pixel) * 16) calc(var(--pixel) * 14) 0 var(--c-3),\n\n      /* r:15 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 15) 0 var(--c-3),\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 15) 0 var(--c-1),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 15) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 15) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 15) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 15) 0 var(--c-1),\n      calc(var(--pixel) * 10) calc(var(--pixel) * 15) 0 var(--c-1),\n      calc(var(--pixel) * 11) calc(var(--pixel) * 15) 0 var(--c-1),\n      calc(var(--pixel) * 12) calc(var(--pixel) * 15) 0 var(--c-1),\n      calc(var(--pixel) * 13) calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 15) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 15) 0 transparent,\n\n      /* r:16 */\n      calc(var(--pixel) * 1)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 2)  calc(var(--pixel) * 16) 0 var(--c-3),\n      calc(var(--pixel) * 3)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 4)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 5)  calc(var(--pixel) * 16) 0 var(--c-1),\n      calc(var(--pixel) * 6)  calc(var(--pixel) * 16) 0 var(--c-1),\n      calc(var(--pixel) * 7)  calc(var(--pixel) * 16) 0 var(--c-1),\n      calc(var(--pixel) * 8)  calc(var(--pixel) * 16) 0 var(--c-1),\n      calc(var(--pixel) * 9)  calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 10) calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 11) calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 12) calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 13) calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 14) calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 15) calc(var(--pixel) * 16) 0 transparent,\n      calc(var(--pixel) * 16) calc(var(--pixel) * 16) 0 transparent;\n  }\n}\n\n/*加载画面的进度条框*/\nbody:not(.default-loading-page) .progress-bar-line {\n  display: none;\n}\n\n/*加载画面的进度条*/\nbody:not(.default-loading-page) .progress-bar-subline {\n  display: none;\n}\n\n/* ================================== */\n/* ======= Banner ======= */\n/* ================================== */\n.obsidian-banner-wrapper {\n  margin-top: 0px;\n  padding-top: 0px;\n}\n.mod-header:has(+ .obsidian-banner-wrapper) .metadata-container\n{\n  display:none;\n}\n.mod-header:has(+ .obsidian-banner-wrapper) .inline-title\n{\n  display:none;\n}\n.mod-header:has(+ .obsidian-banner-wrapper) {\n  margin-top: var(--banner-height);\n \n}\n.show-inline-title .obsidian-banner-wrapper.has-banner-icon .obsidian-banner-icon.v-center, \n.show-inline-title  .obsidian-banner-wrapper.has-banner-icon .obsidian-banner-icon.v-custom {\n  margin-top: calc(-1em - 6px);\n}\n.show-inline-title .obsidian-banner-wrapper.has-banner-icon .obsidian-banner-icon.v-above {\n  margin-top: calc(-2em - 12px);\n}\n/* ====cssclass background 属性可以使得banner作为笔记背景  ===== */\n.markdown-preview-view.background .obsidian-banner-wrapper {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  background-size: cover;\n  z-index: -1;\n  opacity: 0.8;\n  background-attachment:fixed;\n}\n\n.markdown-preview-view.background .obsidian-banner {\n  top: -310px;\n  width: 100%;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n.is-live-preview.background .has-banner .obsidian-banner {\n  position: absolute!important;\n  width: 100%;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  background-size: cover;\n  z-index: -1;\n}\n.is-live-preview.background .has-banner .cm-hmd-frontmatter {\n  display: none;\n}\n.is-live-preview.background .has-banner .obsidian-banner.cm6-banner {\n  opacity: 0.5;\n  height: 100%;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) img.banner-image.full-width{\n  max-width: none;\n}\n/* ==修复新弹出窗口banner位置错位===================== */\nbody.is-popout-window {\n  --banner-height: 300px;\n  --banner-internal-embed-height: 200px;\n  --banner-preview-embed-height: 120px;\n}\n\n\n/* ================================== */\n/* =======Tasks======= */\n/* ================================== */\n:is(.markdown-preview-view,.markdown-rendered) .tasks-backlink>.internal-link.internal-link-short-mode {\n  font-size: 0;\n}\n:is(.markdown-preview-view,.markdown-rendered) .tasks-backlink>.internal-link.internal-link-short-mode::before {\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M330.97 451.71l-120.70 120.70a170.67 170.67 0 0 0 235.22 247.21l6.14-5.89 120.70-120.66 60.33 60.33-120.70 120.70A256 256 0 1 1 149.93 512l120.70-120.66 60.33 60.33z m301.70-60.33a42.67 42.67 0 0 1 0 60.33l-181.03 181.03a42.67 42.67 0 0 1-60.33-60.33l181.03-181.03a42.67 42.67 0 0 1 60.33 0z m241.37-241.37a256 256 0 0 1 0 362.03l-120.70 120.70-60.33-60.33 120.70-120.70a170.67 170.67 0 0 0-235.22-247.21l-6.14 5.85-120.70 120.70-60.33-60.33L512 150.02a256 256 0 0 1 362.03 0z' fill='%230061b0'/%3E%3C/svg%3E\");\n  background-size: 16px 16px;\n  transform: translate(0, 2px);\n  background-repeat: no-repeat;\n  display: inline-block;\n  height: 16px;\n  width: 16px;\n}\n\na.tasks-edit {\n  background-color: var(--text-accent);\n  mask-image: url(\"data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M247.47 851.91c-7.11 0-14.22-2.84-19.91-8.53-7.11-7.11-9.96-15.64-8.53-25.6l34.13-184.89c1.42-5.69 4.27-11.38 8.53-14.22l345.6-345.6c52.62-52.62 137.96-52.62 190.58 0 25.6 25.6 39.82 59.73 39.82 95.29s-14.22 69.69-39.82 95.29L453.69 809.24c-4.27 4.27-8.53 7.11-14.22 8.53l-184.89 34.13h-7.11z m186.31-62.58z m-125.16-137.96l-25.6 136.53 136.53-25.6 338.49-338.49c14.22-14.22 22.76-34.13 22.76-55.47s-8.53-39.82-22.76-55.47c-29.87-29.87-79.64-29.87-110.93 0L308.62 651.38z' fill='%230061b0'/%3E%3Cpath d='M739.56 510.58c-7.11 0-14.22-2.84-19.91-8.53L568.89 351.29c-11.38-11.38-11.38-28.44 0-39.82 11.38-11.38 28.44-11.38 39.82 0l150.76 150.76c11.38 11.38 11.38 28.44 0 39.82-4.27 5.69-12.8 8.53-19.91 8.53z' fill='%230061b0'/%3E%3Cpath d='M797.87 860.44H593.07c-15.64 0-28.44-12.8-28.44-28.44s12.8-28.44 28.44-28.44h204.8c15.64 0 28.44 12.8 28.44 28.44s-12.8 28.44-28.44 28.44z' fill='%230061b0'/%3E%3C/svg%3E\");\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M247.47 851.91c-7.11 0-14.22-2.84-19.91-8.53-7.11-7.11-9.96-15.64-8.53-25.6l34.13-184.89c1.42-5.69 4.27-11.38 8.53-14.22l345.6-345.6c52.62-52.62 137.96-52.62 190.58 0 25.6 25.6 39.82 59.73 39.82 95.29s-14.22 69.69-39.82 95.29L453.69 809.24c-4.27 4.27-8.53 7.11-14.22 8.53l-184.89 34.13h-7.11z m186.31-62.58z m-125.16-137.96l-25.6 136.53 136.53-25.6 338.49-338.49c14.22-14.22 22.76-34.13 22.76-55.47s-8.53-39.82-22.76-55.47c-29.87-29.87-79.64-29.87-110.93 0L308.62 651.38z' fill='%230061b0'/%3E%3Cpath d='M739.56 510.58c-7.11 0-14.22-2.84-19.91-8.53L568.89 351.29c-11.38-11.38-11.38-28.44 0-39.82 11.38-11.38 28.44-11.38 39.82 0l150.76 150.76c11.38 11.38 11.38 28.44 0 39.82-4.27 5.69-12.8 8.53-19.91 8.53z' fill='%230061b0'/%3E%3Cpath d='M797.87 860.44H593.07c-15.64 0-28.44-12.8-28.44-28.44s12.8-28.44 28.44-28.44h204.8c15.64 0 28.44 12.8 28.44 28.44s-12.8 28.44-28.44 28.44z' fill='%230061b0'/%3E%3C/svg%3E\");\n  display: inline-block;\n  transform: translate(0, -1px);\n  background-size: 25px 20px;\n  height: 20px;\n  width: 20px;\n  margin-left: -0.1em;\n  cursor: pointer;\n}\n\n/* ================================== */\n/* ======= Hover editor======= */\n/* ================================== */\nbody.theme-light .popover.hover-popover:not(.is-loaded) {\n  box-shadow: 0px 2.7px 3.1px rgba(0, 0, 0, 0.032),\n    0px 5.9px 8.7px rgba(0, 0, 0, 0.052),\n    0px 10.4px 18.1px rgba(0, 0, 0, 0.071),\n    0px 20px 40px rgba(0, 0, 0, 0.11);\n}\n\nbody .popover.hover-popover:not(.is-loaded) :is(.markdown-preview-view,.markdown-rendered),\n.popover.hover-popover:not(.is-loaded) .markdown-source-view .cm-scroller {\n  padding: 5px 32px 0;\n}\n\nbody.theme-dark .popover.hover-popover:not(.is-loaded) {\n  box-shadow: 0px 2.7px 3.1px rgba(0, 0, 0, 0.081),\n    0px 5.9px 8.7px rgba(0, 0, 0, 0.131),\n    0px 10.4px 18.1px rgba(0, 0, 0, 0.18),\n    0px 20px 40px rgba(0, 0, 0, 0.28);\n}\n\n/* ================================== */\n/* ======= custom cssclass ======= */\n/* ========fullwidth  noyaml noscroll================ */\n/*主页预览宽度*/\n:is(.markdown-preview-view,.markdown-rendered).fullwidth.is-readable-line-width .markdown-preview-sizer,\n.markdown-source-view.is-readable-line-width.fullwidth .CodeMirror,\n.is-readable-line-width.fullwidth :is(.markdown-preview-section,.markdown-rendered),\n.is-readable-line-width.fullwidth :is(.markdown-preview-section,.markdown-rendered) > div,\n:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width.fullwidth :is(.markdown-preview-section,.markdown-rendered) {\n  width: 100% !important;\n  max-width: 100% !important;\n  /* margin: 0 auto; */\n}\n\n\n/*隐藏backlinks区域*/\n:is(.markdown-preview-view,.markdown-rendered).nobacklinks .embedded-backlinks {\n  display: none;\n}\n/*隐藏yaml区域*/\n:is(.markdown-preview-view,.markdown-rendered).noyaml div>.language-yaml {\n  display: none;\n}\n:is(.markdown-preview-view,.markdown-rendered).noyaml div>:is(.metadata-container,.frontmatter-container) {\n  display: none;\n}\n/*隐藏滚动条*/\n:is(.markdown-preview-view,.markdown-rendered).noscroll::-webkit-scrollbar {\n  display: none;\n}\n/*无序列表分栏（配合伪看板使用）*/\n.theme-dark .gridlist ul>li a {\n  color:var(--text-folder-file) !important;\n}\n\n.gridlist ul ul {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(10px, 1fr));\n  gap: 0.5rem;\n}\n.gridlist ul>li:not(.task-list-item) {\n  padding:0.2em 1em 0.2em 0.8em;\n  margin: 0px!important;\n}\n.gridlist ul>li>p:not(.task-list-item) {\n  margin-top: 0.55em;\n  margin-bottom: 0.55em;\n}\n.gridlist ul>li strong::before {\n  content: '';\n  background-image: url(\"data:image/svg+xml,%3Csvg t='1626092983490' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3709' width='200' height='200'%3E%3Cpath d='M444.88192 549.376h529.72544v263.5776a48.83456 48.83456 0 0 1-48.7936 48.88064H303.48288v-170.80832A141.53216 141.53216 0 0 1 444.88192 549.376z' fill='%23F4CA1C' p-id='3710'%3E%3C/path%3E%3Cpath d='M890.83904 196.80256h-269.85984a2.23744 2.23744 0 0 1-1.024-0.24064l-160.48128-80.384A82.176 82.176 0 0 0 422.81984 107.52H133.16096A82.11968 82.11968 0 0 0 51.2 189.60896v644.78208A82.11968 82.11968 0 0 0 133.16096 916.48h757.67808A82.11968 82.11968 0 0 0 972.8 834.39104V278.89152a82.11968 82.11968 0 0 0-81.96096-82.08896z m-757.67808-9.472h289.65888a2.24768 2.24768 0 0 1 1.024 0.24064l160.49664 80.384a82.304 82.304 0 0 0 36.65408 8.66816h269.85984a2.2784 2.2784 0 0 1 2.27328 2.27328v91.51488H130.88768V189.60896a2.2784 2.2784 0 0 1 2.27328-2.2784z m757.67808 649.33888H133.16096a2.2784 2.2784 0 0 1-2.27328-2.2784V450.22208h762.22464v384.16896a2.2784 2.2784 0 0 1-2.27328 2.2784z' fill='%23595BB3' p-id='3711'%3E%3C/path%3E%3C/svg%3E\");\n  background-size: 14px 14px;\n  background-repeat: no-repeat;\n  display: inline-block;\n  height: 13px;\n  width: 13px;\n  margin-right: 5px;\n  margin-left:-5px;\n}\n\n.gridlist ul ul ul{\n  display:flex;\n}\n.gridlist ul ul li:hover {\n  background:  var(--background-secondary-translucent) !important;\n  border-color: var(--p-kanban-border-color) !important;\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n}\n\n\n.gridlist ul li a[href$=\".js\"]::before {\n  font-family:var(--font-family-inline-code);\n  content: 'JS';\n  color: var(--text-faint);\n  margin-right: 5px;\n  font-size:10px;\n}\n.gridlist ul li a[href$=\".css\"]::before {   \n  font-family:var(--font-family-inline-code);\n  content: 'CSS';\n  color: var(--text-faint);\n  margin-right: 5px;\n  font-size:10px;\n}\n\n.gridlist ul li a[href$=\".html\"]::before {\n  font-family:var(--font-family-inline-code);\n  content: 'HTML';\n  color: var(--text-faint);\n  margin-right: 5px;\n  font-size:10px;\n}\n\n.gridlist ul li a[href$=\".pdf\"]::before {\n  font-family:var(--font-family-inline-code);\n  content: 'PDF';\n  color: var(--text-faint);\n  margin-right: 5px;\n  font-size:10px;\n}\n.gridlist ul li a[href$=\".mp3\"]::before,\n.gridlist ul li a[href$=\".wav\"]::before,\n.gridlist ul li a[href$=\".m4a\"]::before,\n.gridlist ul li a[href$=\".ogg\"]::before,\n.gridlist ul li a[href$=\".3gp\"]::before,\n.gridlist ul li a[href$=\".flac\"]::before {\n  content: '';\n  background-size: 18px 18px;\n  background-repeat: no-repeat;\n  display: inline-block;\n  height: 18px;\n  width: 18px;\n  vertical-align: text-top;\n  margin-right: 5px;\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg t='1667450617533' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2116' width='32' height='32'%3E%3Cpath d='M512 900.8c214.4 0 388.9-174.4 388.9-388.9 0-54-11.1-105.4-31-152.1 10.1 106.6-34.1 271.1-172 382.9-143.8 116.6-375.7 80.7-477 26.6 71.2 80.6 175.3 131.5 291.1 131.5z' fill='%23FFD524' p-id='2117'%3E%3C/path%3E%3Cpath d='M512 64.2c-26.1 0-52.2 2.3-77.7 6.7-16 2.8-26.7 18.1-23.9 34.1 2.8 16 18.1 26.7 34.1 23.9 22.2-3.9 44.9-5.9 67.6-5.9 160.5 0 298.5 97.7 357.8 236.7 20 46.8 31 98.2 31 152.1 0 214.4-174.4 388.9-388.9 388.9-115.8 0-219.9-50.9-291.2-131.5-60.7-68.6-97.7-158.7-97.7-257.4 0-124.2 57.2-238 157.1-312.3 13-9.7 15.8-28.2 6.1-41.2-9.7-13-28.2-15.8-41.2-6.1C131.8 236.7 64.2 371.1 64.2 512c0 246.9 200.9 447.8 447.8 447.8S959.7 758.9 959.7 512 758.9 64.2 512 64.2z' fill='%23333333' p-id='2118'%3E%3C/path%3E%3Cpath d='M343.2 158.6c4 0 8-0.8 11.9-2.5 3.4-1.5 6.8-3 10.3-4.4 15-6.2 22.3-23.4 16.1-38.4-6.2-15-23.3-22.3-38.4-16.1-3.9 1.6-7.8 3.3-11.7 5-14.9 6.6-21.6 24-15 38.8 4.7 11 15.5 17.6 26.8 17.6zM394.6 787.4c66.2 0 120.9-50.5 127.4-115.1 0.4-2 0.7-4 0.7-6.1V313.6H663c-8 21.5-27.6 49.4-75.9 63.8-15.6 4.6-24.5 21-19.8 36.6 3.8 12.8 15.5 21.1 28.2 21.1 2.8 0 5.6-0.4 8.4-1.2C705.3 403.8 728.9 322 727.2 283c-0.7-15.8-13.6-28.2-29.4-28.2H493.3c-16.3 0-29.4 13.2-29.4 29.4v375.2c0 38.2-31.1 69.2-69.2 69.2s-69.2-31.1-69.2-69.2c0-38.2 31.1-69.2 69.2-69.2 16.3 0 29.4-13.2 29.4-29.4s-13.2-29.4-29.4-29.4c-70.6 0-128.1 57.5-128.1 128.1s57.4 127.9 128 127.9z' fill='%23333333' p-id='2119'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n.gridlist ul li a[href$=\".jpg\"]::before,\n.gridlist ul li a[href$=\".png\"]::before,\n.gridlist ul li a[href$=\".svg\"]::before,\n.gridlist ul li a[href$=\".gif\"]::before,\n.gridlist ul li a[href$=\".jpeg\"]::before,\n.gridlist ul li a[href$=\".bmp\"]::before {\n  content: '';\n  background-image: url(\"data:image/svg+xml,%3Csvg t='1626092464076' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3121' width='200' height='200'%3E%3Cpath d='M266.42944 804.352l123.3408-136.82688a37.93408 37.93408 0 0 1 53.39136-2.90304l81.6896 72.83712a37.92384 37.92384 0 0 0 56.43776-6.76864l99.92704-145.04448a37.91872 37.91872 0 0 1 58.15808-5.12l86.33856 87.31136 66.64704 72.65792-13.9264 60.18048-67.30752 25.46176-529.20832 11.5712z' fill='%23F4CA1C' p-id='3122'%3E%3C/path%3E%3Cpath d='M814.76096 148.48H209.23904A153.26208 153.26208 0 0 0 56.32 301.74208v415.40096A153.26208 153.26208 0 0 0 209.23904 870.4h605.52192A153.26208 153.26208 0 0 0 967.68 717.13792V301.74208A153.26208 153.26208 0 0 0 814.76096 148.48z m83.456 568.65792a83.62496 83.62496 0 0 1-83.456 83.62496H209.23904a83.62496 83.62496 0 0 1-83.456-83.62496V301.74208a83.62496 83.62496 0 0 1 83.456-83.63008h605.52192a83.62496 83.62496 0 0 1 83.456 83.61984v415.40096z m-137.728-298.55744a72.42752 72.42752 0 0 0-111.4112 9.87648l-99.712 145.46432a2.8672 2.8672 0 0 1-2.14528 1.29536 2.81088 2.81088 0 0 1-2.38592-0.75264L463.28832 501.41696a72.52992 72.52992 0 0 0-102.272 5.59104l-123.0848 137.216a34.77504 34.77504 0 1 0 51.67104 46.55616l123.0848-137.216a3.03104 3.03104 0 0 1 4.28544-0.2304l81.51552 73.04192a72.41728 72.41728 0 0 0 108.1088-13.02528l99.71712-145.4592a3.03104 3.03104 0 0 1 4.66432-0.41472l86.15936 87.552a34.78016 34.78016 0 1 0 49.47456-48.896z m-316.2368-33.32608a47.00672 47.00672 0 1 0-46.90432-47.00672 46.95552 46.95552 0 0 0 46.90432 47.00672z' fill='%23595BB3' p-id='3123'%3E%3C/path%3E%3C/svg%3E\");\n  background-size: 18px 16px;\n  background-repeat: no-repeat;\n  display: inline-block;\n  height: 18px;\n  width: 18px;\n  vertical-align: middle;\n  margin-right: 5px;\n}\n\n.gridlist ul li a[href*=\".excalidraw\"]::before {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23595BB3' d='M18.404 2.998c-.757-.754-2.077-.751-2.828.005l-1.784 1.791L11.586 7H7a.998.998 0 0 0-.939.658l-4 11c-.133.365-.042.774.232 1.049l2 2a.997.997 0 0 0 1.049.232l11-4A.998.998 0 0 0 17 17v-4.586l2.207-2.207v-.001h.001L21 8.409c.378-.378.586-.881.585-1.415 0-.535-.209-1.038-.588-1.415l-2.593-2.581zm-3.111 8.295A.996.996 0 0 0 15 12v4.3l-9.249 3.363 4.671-4.671c.026.001.052.008.078.008A1.5 1.5 0 1 0 9 13.5c0 .026.007.052.008.078l-4.671 4.671L7.7 9H12c.266 0 .52-.105.707-.293L14.5 6.914 17.086 9.5l-1.793 1.793zm3.206-3.208-2.586-2.586 1.079-1.084 2.593 2.581-1.086 1.089z '%3E%3C/path%3E%3C/svg%3E\");\n  content: '';\n  background-size: 14px 18px;\n  background-repeat: no-repeat;\n  display: inline-block;\n  height: 14px;\n  width: 14px;\n  margin-right: 5px;\n}\n\n/*PDF*/\n\n@media print {\n \n  code[class*='language-'],\n  pre[class*='language-'] {\n    word-wrap: break-word !important;\n    white-space: pre-wrap !important;\n  }\n\n  th,\n  td {\n    white-space: pre-wrap !important;\n    /* word-break: break-word !important;  */\n    overflow-wrap: break-word !important;\n  }\n  /* Page breaks */\n\n  h2, h3, h4, h5, h6 {\n    page-break-after: avoid;\n  }\n  pre, blockquote {\n    page-break-inside: avoid;\n  }\n\n  .print :not(font)>strong {\n    -webkit-print-color-adjust: exact;\n    color: var(--print-strong-color) !important;\n  }\n\n  .print :not(font):not(strong)>em {\n    color: var(--print-em-color) !important;\n  }\n\n  body.hr-for-pagination .markdown-rendered hr {\n    break-after: page;\n    visibility: hidden;\n  }\n\n  body.hr-for-pagination.fancy-hr-number .markdown-rendered hr:after {\n    break-after: page;\n    visibility: visible;\n  }\n\n  body.show-url-after-link a.external-link::after {\n    content: \" (\" attr(href) \") \";\n  }\n\n  body.fancy-hr-icon .markdown-rendered hr {\n    border-image-source: linear-gradient(to right, var(--background-primary) 0%, var(--hr-color-icon-1) 30%, var(--hr-color-icon-2) 46%, transparent 46%, transparent 54%, var(--hr-color-icon-3) 54%, var(--hr-color-icon-4) 70%, var(--background-primary) 100%);\n  }\n  body.fancy-hr-no-icon .markdown-rendered hr {\n    border-image: linear-gradient(to right, var(--background-primary) 0%, var(--hr-color-1) 20%, var(--hr-color-2) 40%, var(--hr-color-3) 60%, var(--hr-color-4) 80%, var(--background-primary) 100%) 1;\n  }\n\n  body.all-dark-pdf .print :is(.markdown-preview-view,.markdown-rendered) {\n    --background-primary:#202020;\n    -webkit-print-color-adjust: exact;\n    background-color: var(--background-primary) !important;\n  }\n  body.all-dark-pdf .print :is(.markdown-preview-view,.markdown-rendered) mark {\n    color: var(--text-highlight) !important;\n  }\n  body.all-dark-pdf .print .markdown-preview-view {\n    color: var(--text-normal) !important;\n  }\n\n  .print .markdown-preview-view .callout.callout[data-callout=\"timeline\"] >.callout-content {\n    display: grid !important;\n  }\n  .print .markdown-preview-view .callout.callout[data-callout=\"timeline\"] .callout-content hr {\n    visibility: visible;\n  }\n  .print .markdown-preview-view .admonition-flex .admonition-content {\n    display: flex !important;\n  }\n\n  body.text-indentation-two-em .print *:not(blockquote) > p {\n    text-indent: 2em;\n  }\n  body.text-indentation-two-em .print *:not(blockquote) > p>br {\n    content: ' ';\n    white-space: pre;\n    line-height: calc((var(--paragraph-spacing) + 0.3) * 1em);\n    display:unset;\n  }\n  body.text-indentation-two-em .print *:not(blockquote) > p>br::after {\n    content: '\\A\\9\\9'';\n  }\n  body.justify-align .print *:not(blockquote) > p {\n    text-align: justify;\n    hyphens: auto;\n  }\n}\n\nbody.pdf-style-invert-color-light.theme-light,\nbody.pdf-style-invert-color-dark.theme-dark {\n  --pdf-background: var(--background-secondary);\n  --pdf-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 8px transparent;\n  --pdf-thumbnail-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 8px transparent;\n}\nbody.pdf-style-invert-color-light.theme-light .pdf-viewer .canvasWrapper,\nbody.pdf-style-invert-color-dark.theme-dark .pdf-viewer .canvasWrapper,\nbody.pdf-style-invert-color.theme-light .pdf-thumbnail-view .thumbnailImage,\nbody.pdf-style-invert-color.theme-dark .pdf-thumbnail-view .thumbnailImage {\n  filter: invert(1) hue-rotate(180deg);\n}\n\nbody.pdf-style-green-bg-light.theme-light .pdf-viewer .textLayer,\nbody.pdf-style-green-bg-dark.theme-dark .pdf-viewer .textLayer {\n  background-color: #74c969;\n}\n\nbody.pdf-style-warm-bg-light.theme-light .pdf-viewer .textLayer,\nbody.pdf-style-warm-bg-dark.theme-dark .pdf-viewer .textLayer {\n  background-color: #f7b955;\n}\n\nbody.pdf-style-custom-bg.theme-dark {\n  --custom-bg-pdf-style: #;\n}\nbody.pdf-style-custom-bg.theme-light {\n  --custom-bg-pdf-style: #;\n}\n\nbody.pdf-style-custom-bg .pdf-viewer .textLayer {\n  background-color: var(--custom-bg-pdf-style);\n}\n\n/* ================================== */\n/* ======= Callout======= */\n/* ================================== */\nbody.admonition-bg-color-same .callout {\n  background-color: rgba(var(--callout-color), 0.1);\n  border-width: var(--callout-border-width);\n}\nbody.shade-callout-style .callout {\n  border:none;\n  box-shadow: inset 0 0 0 2px rgba(var(--callout-color), 0.25), 0px 0.5px 1px 0.5px rgba(0, 0, 0, 0.1) !important;\n}\nbody.shade-callout-style .callout .callout-title {\n  padding: 6px;\n  background-color: rgba(var(--callout-color), 0.4);\n}\n\nbody.border-callout-style .callout {\n  --callout-radius: 2px;\n  border-left: solid 4px rgb(var(--callout-color));\n}\n\nbody.border-callout-style .callout .callout-title {\n  padding: 6px;\n  background-color: rgba(var(--callout-color), 0.4);\n}\nbody.border-callout-style .callout .callout-content {\n  margin-bottom: 0px;\n  background-color: rgba(var(--callout-color), 0.1);\n}\nbody.border-callout-style .callout .callout-content p{\n  margin: 16px 0px; /*Fix the top margin is omitted, causing reading mode and live-preview is different. by LeCheena*/\n}\n.callout-title {\n  background-color: rgba(var(--callout-color), 0.15);\n}\n.callout {\n  padding: 0;\n  border-left: 4px solid rgba(var(--callout-color),0.15);\n  background-color:var(--admonition-bg-color);\n}\n\n.callout-content {\n  padding: 5px 15px;\n}\n.is-live-preview .admonition-content>* br {\n  display: unset;\n}\nbody.admonition-bg-color-same .callout-title {\n  color: rgb(var(--callout-color));\n  background-color:unset;\n}\n.callout-title {\n  padding: 8px 0 8px 12px;\n  color: unset;\n}\n.admonition-title .admonition-title-icon {\n  color: rgb(var(--callout-color));\n}\n\n.callout .callout-title-inner>img:not([class*=\"emoji\"]) {\n  border-radius: 1em !important;\n  margin: auto;\n  display: block;\n}\n\n.callout-title-inner.admonition-title-content svg {\n  height: 1em;\n  align-self: center;\n  width: 1em;\n}\n\n.callout-icon svg {\n  height: 1em;\n}\n\n.markdown-source-view.is-live-preview .admonition-content .callout-content :is(h1,h2,h3,h4,h5,h6,p) {\n  margin: 0;\n}\n\n.callout .callout-content p img {\n  display: block;\n}\n\n.is-live-preview .callout:not(.admonition) .callout-content {\n  padding-top: 0;\n  padding-bottom: 0;\n}\n.callout-content {\n  padding-left: 10px;\n  padding-right: 10px;\n}\n.callout img[alt*=circle] {\n  border-radius: 35px;\n  width: 70px;\n  height: 70px;\n}\n/* ===编辑代码块按钮调整============ */\n \n\n.markdown-source-view.mod-cm6 .edit-block-button {\n  padding: 0;\n  top: 0;\n  border-radius: var(--radius-s);\n  right: 10px;\n  opacity: 0.3;\n}\n.markdown-source-view.mod-cm6 .edit-block-button::before {\n  width: 25px;\n  font-size: 11px;\n  text-align: center;\n  content: '</>';\n  margin-left:1em;\n}\n.markdown-source-view.mod-cm6 .edit-block-button>svg {\n  display: none;\n}\n\n/*cards 视图*/\n:root{\n  --cards-width: 138px;\n}\n\n@media (max-width: 450px) {\n  :root{\n    --cards-width: 112.64px;\n  }\n}\n\n@media (max-width: 375px) {\n  :root{\n    --cards-width: 102.4px;\n  }\n}\n\n@media (max-width: 350px) {\n  :root{\n    --cards-width: 87.04px;\n  }\n}\n.callout.callout[data-callout*=cards] .callout-content {\n  padding: 0;\n}\n.callout.callout[data-callout*=cards] progress {\n  position: absolute;\n  width: var(--cards-width);\n  margin-top: -10px;\n  margin-left: calc(var(--cards-width) /2 * -1);\n  overflow: hidden;\n  height: 3px;\n  background: #f0ec05;\n}\n.callout.callout[data-callout*=cards] progress.yellow::-moz-progress-bar {\n  background: #e78f0c;\n}\n.callout.callout[data-callout*=cards] progress.yellow::-webkit-progress-value {\n  border-radius: 1em;\n  background: #e78f0c;\n}\n\n.callout.callout[data-callout*=cards] progress.hot::-moz-progress-bar {\n  background: #fa7131dc;\n}\n.callout.callout[data-callout*=cards] progress.hot::-webkit-progress-value {\n  border-radius: 1em;\n  background: #fa7131dc;\n}\n\n\n.callout.callout[data-callout*=cards] table.dataview tbody {\n  display: flex;\n  flex-flow: wrap;\n  margin-top: 20px;\n  margin-left: 0.5em;\n  width: 105%;\n}\n\n@media (max-width:1120px) {\n  .callout.callout[data-callout*=cards] table.dataview tbody {\n    margin-left: -40px;\n    padding: 0 40px\n  }\n}\n\n@media (max-width:960px) {\n  .callout.callout[data-callout*=cards] table.dataview tbody {\n    margin-left: -30px;\n    padding: 0 30px\n  }\n}\n\n@media (max-width:460px) {\n  .callout.callout[data-callout*=cards] table.dataview tbody {\n    padding: 0px;\n    margin-left: -20px;\n  }\n}\n\n.callout.callout[data-callout*=cards] table.dataview>tbody>tr {\n  display: block;\n  width:var(--cards-width);\n  height: auto;\n  margin-left: 1.2em;\n  margin-bottom: 44px;\n  background-color: transparent;\n}\n\n@media (max-width:1120px) {\n  .callout.callout[data-callout*=cards] table.dataview>tbody>tr {\n    margin-left: 40px;\n  }\n}\n\n@media (max-width:960px) {\n  .callout.callout[data-callout*=cards] table.dataview>tbody>tr {\n    margin-left: 30px;\n  }\n}\n\n@media (max-width:460px) {\n  .callout.callout[data-callout*=cards] table.dataview>tbody>tr {\n    margin-left: 20px;\n    margin-bottom: 20px;\n  }\n}\n\n.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:first-child,\n.markdown-source-view.mod-cm6.callout.callout[data-callout*=cards] .dataview.table-view-table>tbody>tr>td:first-child {\n  width: 100%;\n  display: block;\n  box-shadow: 0 2px 16px rgba(0, 0, 0, .2);\n  position: relative;\n  padding: 0;\n}\n\n.callout.callout[data-callout*=cards] table.dataview tbody>tr>td img {\n  vertical-align: top;\n  width: 100%;\n  height: calc(var(--cards-width) / 0.7 );\n  background-color:var(--background-secondary);\n  -o-object-fit: cover;\n  object-fit: cover;\n}\n.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:before {\n  display: none;\n}\n.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:first-child:after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background-image: linear-gradient(90deg, hsla(0, 0%, 63.1%, .25), rgba(21, 21, 20, .1) 1%, hsla(0, 0%, 100%, .15) 4%, hsla(0, 0%, 58%, .1) 8%, hsla(0, 0%, 89%, 0) 57%, rgba(223, 218, 218, .03) 91%, rgba(223, 218, 218, .05) 98%, hsla(0, 0%, 100%, .1));\n  box-shadow: inset 0 0 0 0 rgba(0, 0, 0, .1);\n}\n.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:not(:first-child),\n.markdown-source-view.mod-cm6.callout.callout[data-callout*=cards] .dataview.table-view-table>tbody>tr>td:not(:first-child) {\n  text-align: center;\n  padding: 0;\n  margin-top: 4px;\n  font-size: 15px;\n  color: var(--text-muted);\n  line-height: 18px;\n  overflow: hidden;\n  display: -webkit-box;\n  display: -moz-box;\n  -webkit-line-clamp: 2;\n  -moz-line-clamp: 2;\n  line-clamp: 2;\n  -webkit-box-orient: vertical;\n  -webkit-text-size-adjust: none;\n  box-orient: vertical;\n  height: auto;\n  font-size: 13px;\n  line-height: 1.1;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.callout.callout[data-callout*=cards] table.dataview tbody>tr>td>button {\n  font-size: 12px;\n  background-color: transparent;\n  padding: 0;\n}\n.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:nth-child(2) {\n  margin-top: 10px;\n}\n.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:nth-child(3) {\n  -webkit-text-stroke: 0.25px ;\n}\n/*------------*/\n\n.callout.callout[data-callout*=cards] table.dataview thead {\n  user-select: none;\n  width: 160px;\n  display: block;\n  float: right;\n  position: relative;\n  text-align: right;\n  padding-bottom: 4px\n}\n.callout.callout[data-callout*=cards] table.dataview thead:before {\n  content: '';\n  background-repeat: no-repeat;\n  cursor: var(--cursor);\n  text-align: right;\n  padding: 4px 10px;\n  margin-bottom: 2px;\n  border-radius: 5px;\n  font-weight: 500;\n  font-size: var(--font-adaptive-small);\n}\n.callout.callout[data-callout*=cards] table.dataview thead:before {\n  opacity: .25;\n  background-position: center center;\n  background-size: 18px;\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 100 100\"><path fill=\"white\" d=\"M49.792 33.125l-5.892 5.892L33.333 28.45V83.333H25V28.45L14.438 39.017L8.542 33.125L29.167 12.5l20.625 20.625zm41.667 33.75L70.833 87.5l-20.625 -20.625l5.892 -5.892l10.571 10.567L66.667 16.667h8.333v54.883l10.567 -10.567l5.892 5.892z\"></path></svg>');\n}\n.theme-light .callout.callout[data-callout*=cards] table.dataview thead:before {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 100 100\"><path fill=\"black\" d=\"M49.792 33.125l-5.892 5.892L33.333 28.45V83.333H25V28.45L14.438 39.017L8.542 33.125L29.167 12.5l20.625 20.625zm41.667 33.75L70.833 87.5l-20.625 -20.625l5.892 -5.892l10.571 10.567L66.667 16.667h8.333v54.883l10.567 -10.567l5.892 5.892z\"></path></svg>');\n}\n.callout.callout[data-callout*=cards] table.dataview thead:hover:before {\n  opacity: .5;\n}\n.callout.callout[data-callout*=cards] table.dataview thead>tr {\n  position: absolute;\n  display: none;\n  z-index: 9;\n  border: 1px solid var(--background-modifier-border);\n  background-color: var(--background-secondary);\n  box-shadow: 0 2px 8px var(--background-modifier-box-shadow);\n  padding: 6px;\n  border-radius: 6px;\n  flex-direction: column;\n  margin: 0;\n  width: 100%;\n}\n.callout.callout[data-callout*=cards] table.dataview thead:hover>tr {\n  display: flex;\n}\n.callout.callout[data-callout*=cards] table.dataview thead>tr>th {\n  display: block;\n  background-color: var(--background-primary);\n  padding: 3px 30px 3px 6px!important;\n  border-radius: 5px;\n  width: 100%;\n  font-weight: 400;\n  color: var(--text-muted);\n  border: none;\n  font-size: var(--font-adaptive-small);\n}\n.callout.callout[data-callout*=cards] table.dataview thead>tr>th[sortable-style=sortable-asc],\n.callout.callout[data-callout*=cards] table.dataview thead>tr>th[sortable-style=sortable-desc] {\n  color: var(--text-normal);\n}\n.callout.callout[data-callout*=cards] table.dataview thead>tr>th:hover {\n  color: var(--text-normal);\n  background-color: var(--background-secondary);\n}\n\n/*全透明callout*/\n.callout.callout[data-callout*=blank] {\n  box-shadow: none;\n  max-width: 100%;\n  background: transparent;\n  border: none;\n  background-color: transparent !important;\n  box-shadow: none !important;\n  margin: 0;\n}\n\n.callout.callout[data-callout*=blank].is-collapsed .callout-fold {\n  border: none;\n  padding: 5px 10px;\n}\n.callout.callout[data-callout*=blank] .callout-title,\n.callout.callout[data-callout*=blank] .callout-title :is(.callout-icon, .callout-title-inner) {\n  display: none;\n}\n.callout.callout[data-callout*=blank] .callout-content {\n  overflow: visible;\n  margin: 0;\n  padding: 0;\n  border: none;\n}\n\n/* ===段落自动缩进============ */\n/*支持两种写法\n    > [!note|indent]\n    > [!note indent]\n   */\n.callout.callout:is([data-callout-metadata*=\"indent\"],\n[data-callout*=indent]) .callout-content p br {\n  content: '';\n  white-space: pre;\n  line-height: calc((var(--paragraph-spacing) + 0.3) * 1em);\n  display: unset;\n}\n.callout.callout:is([data-callout-metadata*=\"indent\"],\n[data-callout*=indent]) .callout-content>p {\n  text-indent: 2em;\n}\n.callout.callout:is([data-callout-metadata*=\"indent\"],\n[data-callout*=indent]) .callout-content blockquote>p {\n  text-indent: 2em;\n}\n\n.callout.callout:is([data-callout-metadata*=\"indent\"],\n[data-callout*=indent]) .callout-content p br::after {\n  content: '\\A\\9\\9';\n}\n\n/* ===段落两端对齐============ */\n/*支持两种写法\n    > [!note|justify]\n    > [!note justify]\n   */\n.callout.callout:is([data-callout-metadata*=\"justify\"],\n[data-callout*=justify]) .callout-content>p {\n  text-align: justify;\n  hyphens: auto;\n  -webkit-hyphens: auto;\n}\n/* ===隐藏图标============ */\n.callout.callout:is([data-callout-metadata^=\"noicon\"],\n[data-callout*=noicon]) .callout-icon {\n  display: none;\n}\n\n/* ===隐藏边框============ */\n.callout.callout:is([data-callout-metadata*=\"noborder\"],\n[data-callout*=noborder]) {\n  border-left: none;\n  background-color: transparent;\n  box-shadow: none;\n}\n.callout.callout:is([data-callout-metadata*=\"noborder\"],\n[data-callout*=noborder]) .callout-content {\n  border-left: none;\n  background-color: transparent;\n  box-shadow: none;\n  border: none;\n}\n\n/* ===banner============ */\n.is-live-preview .admonition-flex .callout.callout[data-callout-metadata*=\"banner\"]:nth-child(2) {\n  margin-top: -1.5em;\n}\n\n.callout.callout[data-callout-metadata*=\"banner\"] {\n  border-left: 0;\n  background-color: transparent;\n  box-shadow: none !important;\n}\n.callout.callout[data-callout-metadata*=\"banner\"] .callout-content{\n  overflow: visible;\n}\n.callout.callout[data-callout-metadata*=\"banner\"] .callout-title {\n  background-color: transparent;\n  display: inline;\n}\n/* nested callout note for culumns | image used as tittle + centered */\n.callout.callout[data-callout-metadata*=\"banner\"] .callout-title img {\n  border-radius: 1em;\n  margin: auto;\n  display: block;\n}\n.callout.callout[data-callout-metadata*=\"banner\"] .callout-fold {\n  display: none;\n}\n.callout.callout[data-callout-metadata*=\"banner\"] .callout-icon {\n  display: none;\n}\n.callout.callout[data-callout-metadata*=\"banner\"] .callout-title h3 {\n  text-align: center;\n  line-height: 2;\n}\n.callout.callout[data-callout-metadata*=\"banner\"] .callout-title h3::before {\n  display: none;\n}\n/* ===隐藏标题============ */\n.callout.callout:is([data-callout-metadata*=\"notitle\"],\n[data-callout*=notitle]) .callout-title {\n  display:none;\n}\n/* ===支持 right left  center 语法============ */\n/*支持两种写法\n    > [!note|right]\n    > [!note right]\n   */\n.callout.callout:is([data-callout-metadata*=\"left\"],\n[data-callout*=left]) {\n  float: left !important;\n  margin: unset;\n}\n.callout.callout:is([data-callout-metadata*=\"right\"],\n[data-callout*=right]) {\n  float: right !important;\n  margin: unset;\n}\n\n.callout.callout:is([data-callout-metadata*=\"center\"],\n[data-callout*=center]) {\n  display: block;\n  margin: auto;\n  float: unset ;\n  text-align:center;\n}\n/* ===块内元素不换行============ */\n.callout.callout:is([data-callout-metadata*='nowrap'],\n[data-callout*='nowrap']) {\n  max-width: unset !important;\n  white-space: nowrap;\n  overflow: hidden;\n}\n.callout.callout:is([data-callout-metadata*='nowrap'],\n[data-callout*='nowrap']) thead > tr > th,\n.callout.callout:is([data-callout-metadata*='nowrap'],\n[data-callout*='nowrap']) tbody > tr > td {\n  white-space: nowrap;\n}\n.callout.callout:is([data-callout-metadata*='nowrap'],\n[data-callout*='nowrap']) .callout-content {\n  overflow-x: auto !important;\n}\n.callout.callout:is([data-callout-metadata*='nowrap'],\n[data-callout*='nowrap']) .callout-content p {\n  display: flex;\n  align-items: center;\n  margin-block-start: 0;\n  margin-block-end: 0;\n}\n.callout.callout:is([data-callout-metadata*='nowrap'],\n[data-callout*='nowrap']) .callout-content img {\n  max-width: unset !important;\n  display: table-cell;\n  vertical-align: middle;\n  padding: 1px;\n  max-height: 30vh;\n}\n\n/* ===块内元素网格布局============ */\n.callout.callout:is([data-callout-metadata*='grid'],\n[data-callout*='grid']) {\n  max-width: unset !important;\n  white-space: nowrap;\n  overflow: hidden;\n}\n.callout.callout:is([data-callout-metadata*='grid'],\n[data-callout*='grid']) .callout-content {\n  overflow-x: auto!important;\n}\n.callout.callout:is([data-callout-metadata*='grid'],\n[data-callout*='grid']) .callout-content p {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(0, auto));\n  grid-gap: 2px;\n}\n.callout.callout:is([data-callout-metadata*='grid'],\n[data-callout*='grid']) .callout-content ul {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(160px, auto));\n  grid-gap: 0 10px;\n}\n.callout.callout:is([data-callout-metadata*='grid'],\n[data-callout*='grid']) .callout-content ul li {\n  WHITE-SPACE: normal;\n  padding-left: 1em;\n  text-indent: -1em;\n}\n.callout.callout:is([data-callout-metadata*='grid'],\n[data-callout*='grid']) .callout-content ul li::before {\n  content: ' ' !important;\n}\n.callout.callout:is([data-callout-metadata*='grid'],\n[data-callout*='grid']) .callout-content img {\n  display: flex;\n  flex: 1;\n  align-self: stretch;\n  object-fit: cover;\n  margin: unset !important;\n}\n\n\n/* ===百分比宽度============ */\n/*支持两种写法\n  > [!note|30%]\n  > [!note 30%]\n*/\n.callout.callout:is([data-callout-metadata*='100%'],\n[data-callout*='100%']) {\n  width: 100%;\n}\n.callout.callout:is([data-callout-metadata*='95%'],\n[data-callout*='95%']) {\n  width: 95%;\n}\n.callout.callout:is([data-callout-metadata*='90%'],\n[data-callout*='90%']) {\n  width: 90%;\n}\n.callout.callout:is([data-callout-metadata*='85%'],\n[data-callout*='85%']) {\n  width: 85%;\n}\n.callout.callout:is([data-callout-metadata*='80%'],\n[data-callout*='80%']) {\n  width: 80%;\n}\n.callout.callout:is([data-callout-metadata*='75%'],\n[data-callout*='75%']) {\n  width: 75%;\n}\n.callout.callout:is([data-callout-metadata*='70%'],\n[data-callout*='70%']) {\n  width: 70%;\n}\n.callout.callout:is([data-callout-metadata*='65%'],\n[data-callout*='65%']) {\n  width: 65%;\n}\n.callout.callout:is([data-callout-metadata*='60%'],\n[data-callout*='60%']) {\n  width: 60%;\n}\n.callout.callout:is([data-callout-metadata*='55%'],\n[data-callout*='55%']) {\n  width: 55%;\n}\n.callout.callout:is([data-callout-metadata*='50%'],\n[data-callout*='50%']) {\n  width: 50%;\n}\n.callout.callout:is([data-callout-metadata*='45%'],\n[data-callout*='45%']) {\n  width: 45%;\n}\n.callout.callout:is([data-callout-metadata*='40%'],\n[data-callout*='40%']) {\n  width: 40%;\n}\n.callout.callout:is([data-callout-metadata*='35%'],\n[data-callout*='35%']) {\n  width: 35%;\n}\n.callout.callout:is([data-callout-metadata*='30%'],\n[data-callout*='30%']) {\n  width: 30%;\n}\n.callout.callout:is([data-callout-metadata*='25%'],\n[data-callout*='25%']) {\n  width: 25%;\n}\n.callout.callout:is([data-callout-metadata*='20%'],\n[data-callout*='20%']) {\n  width: 20%;\n}\n.callout.callout:is([data-callout-metadata*='15%'],\n[data-callout*='15%']) {\n  width: 15%;\n}\n.callout.callout:is([data-callout-metadata*='10%'],\n[data-callout*='10%']) {\n  width: 10%;\n}\n\n\n/* callout模糊文字效果*/\n.callout.callout[data-callout=cloze] {\n  border-left-width: 0;\n  filter: blur(4px);\n}\n\n.callout.callout[data-callout=cloze]:hover {\n  filter: none;\n}\n\n.callout.callout[data-callout=cloze] .callout-title {\n  display: none;\n}\n\n/* callout伪看板效果*/\n.callout.callout[data-callout*=\"kanban\"] ul {\n  display: flex;\n  flex-direction: row;\n  border: 0px solid var(--p-kanban-border-color);\n  padding: 0;\n  border-radius: var(--radius-m);\n  flex-wrap: wrap;\n}\n.callout.callout[data-callout*=\"kanban\"] li  .list-bullet{\n  display: none;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul>li {\n  flex: 1 1 20%;\n  padding: 0.1em 1em 0.1em 0.8em;\n  margin: 0 0.3em 0.3em 0 !important;\n  list-style: none;\n  border: 1px solid var(--p-kanban-border-color);\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul li.task-list-item .task-list-item-checkbox {\n  margin-left: auto;\n}\n\n\n.callout.callout[data-callout*=\"kanban\"] ul .list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  color: var(--text-accent);\n  transition: transform 10ms linear 0s;\n}\n\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(8n+1) {\n  background-color: var(--p-kanban-color-1);\n}\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(8n+2) {\n  background-color: var(--p-kanban-color-2);\n}\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(8n+3) {\n  background-color: var(--p-kanban-color-3);\n}\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(8n+4) {\n  background-color: var(--p-kanban-color-4);\n}\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(8n+5) {\n  background-color: var(--p-kanban-color-5);\n}\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(8n+6) {\n  background-color: var(--p-kanban-color-6);\n}\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(8n+7) {\n  background-color: var(--p-kanban-color-7);\n}\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(8n) {\n  background-color: var(--p-kanban-color-8);\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul>li:nth-of-type(n) {\n  background-color: var(--p-kanban-color-simple);\n  padding-left: 1em;\n}\n.callout.callout[data-callout*=\"kanban\"] .callout-content>ul:first-child>li:nth-of-type(8n+1) {\n  border-top: 6px solid var(--p-kanban-color-1) !important;\n}\n.callout.callout[data-callout*=\"kanban\"] .callout-content>ul:first-child>li:nth-of-type(8n+2) {\n  border-top: 6px solid var(--p-kanban-color-2) !important;\n}\n.callout.callout[data-callout*=\"kanban\"] .callout-content>ul:first-child>li:nth-of-type(8n+3) {\n  border-top: 6px solid var(--p-kanban-color-3) !important;\n}\n.callout.callout[data-callout*=\"kanban\"] .callout-content>ul:first-child>li:nth-of-type(8n+4) {\n  border-top: 6px solid var(--p-kanban-color-4) !important;\n}\n.callout.callout[data-callout*=\"kanban\"] .callout-content>ul:first-child>li:nth-of-type(8n+5) {\n  border-top: 6px solid var(--p-kanban-color-5) !important;\n}\n.callout.callout[data-callout*=\"kanban\"] .callout-content>ul:first-child>li:nth-of-type(8n+6) {\n  border-top: 6px solid var(--p-kanban-color-6) !important;\n}\n.callout.callout[data-callout*=\"kanban\"] .callout-content>ul:first-child>li:nth-of-type(8n+7) {\n  border-top: 6px solid var(--p-kanban-color-7) !important;\n}\n.callout.callout[data-callout*=\"kanban\"] .callout-content>ul:first-child>li:nth-of-type(8n) {\n  border-top: 6px solid var(--p-kanban-color-8) !important;\n}\nbody.simple-p-kanban .callout.callout[data-callout*=\"kanban\"] ul:first-child>li:nth-of-type(n) {\n  border-top: none !important;\n}\n\nbody:not(.remove-shadow-p-kanban) .callout.callout[data-callout*=\"kanban\"] ul>li:hover {\n  transition: box-shadow .2s cubic-bezier(.4, 0, 1, 1);\n  box-shadow: 0 3px 5px 0 var(--p-kanban-color-shadow), 0 3px 1px -3px var(--p-kanban-color-shadow), 2px 3px 3px 0 var(--p-kanban-color-shadow);\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul ul {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  padding: 0rem;\n  margin-top: 0.5rem;\n  border-radius: 0;\n  border: 0;\n  background: none;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul ul li:not(.task-list-item) {\n  width: 100%;\n  display: block;\n  background-color: var(--p-kanban-card-color-1) !important;\n}\n\nbody.remove-shadow-p-kanban .callout.callout[data-callout*=\"kanban\"] ul ul li:hover {\n  background: var(--p-kanban-card-color-2) !important;\n  border-color: var(--p-kanban-border-color) !important;\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n}\n\nbody.remove-shadow-p-kanban.theme-dark .callout.callout[data-callout*=\"kanban\"] ul ul li:hover {\n  border-color: #696969e1 !important;\n  border-left: 1px solid #696969e1 !important;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul ul li .task-list-item-checkbox {\n  margin-left: 1.5rem !important;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul ul ul {\n  margin-right: 0;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul ul::before {\n  border-left: 0;\n  border:0;\n}\n\n:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width.callout.callout[data-callout*=\"kanban\"] .markdown-preview-sizer>div>ul {\n  max-width: 100%;\n}\n\n.callout.callout[data-callout*=\"kanban\"] :is(ol,ul).contains-task-list :is(ol,ul) {\n  position: initial;\n}\n\n.callout.callout[data-callout*=\"kanban\"] :is(ol,ul).contains-task-list :is(ol,ul)::before {\n  all: initial;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul > li.task-list-item {\n  flex: 1 1 20%;\n  padding: 0.1em 0.1em 1em 2em;\n  list-style: none;\n  border: 1px solid var(--p-kanban-border-color);\n  border-left: 1px solid var(--p-kanban-border-color) !important;\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n  text-indent: 0.01em;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul ul li.task-list-item {\n  width: 100%;\n  display: block;\n  padding-left: 2em;\n  text-indent: -3em;\n  background-color: var(--p-kanban-card-color-1) !important;\n}\n\n.callout.callout[data-callout*=\"kanban\"] ul ul li.task-list-item .list-collapse-indicator.collapse-indicator.collapse-icon {\n  text-indent: -1em;\n}\n\nbody:not(.default-icons) .callout.callout[data-callout*=\"kanban\"] li.task-list-item .list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  margin-left: -0.2em;\n}\n\nbody:not(.default-icons) .callout.callout[data-callout*=\"kanban\"] li.task-list-item .task-list-item.is-collapsed .list-collapse-indicator.collapse-indicator.collapse-icon::before {\n  transform: translateX(-0.9em) translateY(-1em) rotate(-90deg);\n}\n\nbody.colorful-p-kanban .callout.callout[data-callout*=\"kanban\"] .task-list-item-checkbox {\n  border-color: var(--text-normal) !important;\n}\n\n/*callout hibox*/\n.callout.callout[data-callout*=\"hibox\"] {\n  background-color: transparent !important;\n  box-shadow: none !important;\n}\n\n.callout.callout[data-callout*=\"hibox\"] .callout-content *,\n.callout.callout[data-callout*=\"hibox\"] .callout-content *::before,\n.callout.callout[data-callout*=\"hibox\"] .callout-content *::marker {\n  visibility: hidden;\n}\n\n.callout.callout[data-callout*=\"hibox\"] .callout-content {\n  position: relative;\n  height: auto;\n  overflow: hidden;\n  background: radial-gradient(circle at 0px 0px, var(--background-modifier-box-shadow), 0, var(--background-modifier-box-shadow), var(--hibox), transparent var(--hibox), transparent 0);\n  transition: --hibox 0.6s linear;\n}\n\n.callout.callout[data-callout*=\"hibox\"] .callout-content:hover {\n  --hibox: 1500px;\n  box-shadow: 0 0.2rem 0.5rem var(--background-modifier-box-shadow) !important;\n}\n\n.callout.callout[data-callout*=\"hibox\"] .callout-content:hover *,\n.callout.callout[data-callout*=\"hibox\"] .callout-content:hover *::marker,\n.callout.callout[data-callout*=\"hibox\"] .callout-content:hover *::before {\n  border-color: inherit;\n  visibility: visible;\n}\n\n.callout.callout[data-callout*=\"hibox\"] .callout-content:hover ol:not(.contains-task-list)>li:not(.task-list-item) {\n  border-color: var(--list-ol-block-color) !important;\n}\n\n.callout.callout[data-callout*=\"hibox\"] .callout-content:hover ul>li:not(.task-list-item) {\n  border-color: var(--list-ul-block-color) !important;\n}\n\n.callout.callout[data-callout*=\"hibox\"] .callout-content:hover blockquote {\n  border-color: var(--theme-color) !important;\n  background-color: var(--background-blockquote) !important;\n}\n\n.callout.callout[data-callout*=\"hibox\"] .callout-content:hover {\n  border-color: var(--text-normal) !important;\n}\n\n/* callout infobox效果*/\n/*Infobox from https://github.com/SlRvb/Obsidian--ITS-Theme/blob/main/S%20-%20Callouts.css*/\n:is(.is-mobile, .is-live-preview) .callout[data-callout*=infobox] {\n  float: unset !important;\n  max-width: 100%;\n  margin: 0 !important;\n}\n\n.callout.callout[data-callout*=infobox] {\n  --callout-color: var(--interactive-accent-rgb);\n  background: transparent;\n  border: 0;\n  box-shadow: none !important;\n  margin: 0;\n  margin-left: 8px;\n  align-self: center;\n  float: right;\n}\n.callout.callout[data-callout*=infobox] .callout-title {\n  background-color: transparent;\n  padding: 0;\n  justify-content: center;\n}\n.callout.callout[data-callout*=infobox].is-collapsed .callout-fold {\n  padding: 3px 10px;\n}\n.callout.callout[data-callout*=infobox]:not(:hover):not(.is-collapsible) .callout-title, .callout.callout[data-callout*=infobox]:not(.is-collapsible) .callout-title :is(.callout-icon, .callout-fold,.callout-title-inner) {\n  display: none;\n}\n.callout.callout[data-callout*=infobox] .callout-content {\n  padding: 1px;\n  margin: 0;\n  border-radius: var(--radius, var(--co-radius));\n}\n.callout.callout[data-callout*=infobox] table {\n  width: 100%;\n}\n.callout.callout[data-callout*=infobox] :is(p, table) {\n  margin-block-start: 0;\n  margin-block-end: 0;\n  margin: 0;\n}\n.callout.callout[data-callout*=infobox] :is(h1, h2, h3, h4, h5, h6) {\n  text-align: center;\n  margin: 0;\n  padding: 2px;\n  color: var(--text-normal);\n}\n.callout.callout[data-callout*=infobox] p,\n.callout.callout[data-callout*=infobox] .internal-embed,\n.callout.callout[data-callout*=infobox] img {\n  margin: auto;\n  padding: auto;\n  text-align: center;\n}\n\n/******callout bookinfo*****/\n.callout.callout[data-callout*=\"bookinfo\"] {\n  --callout-color: 64, 201, 75;\n  --callout-icon: '<svg t=\"1648743111717\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2202\" ><path d=\"M559.936 144.064l0 745.344 42.112-51.84c6.4-7.872 18.112-9.216 26.176-3.008 1.152 0.896 2.112 1.856 3.008 3.008l0.064-0.128 38.016 46.656L669.312 115.392 559.936 144.064 559.936 144.064zM160.512 558.976C153.536 561.664 145.664 558.208 142.976 551.232 140.288 544.256 143.68 536.384 150.72 533.632c42.496-16.832 88.384-24.768 135.168-24.768 48.512 0 98.24 8.512 146.624 24.512 7.104 2.368 11.008 10.048 8.64 17.216C438.784 557.696 431.104 561.6 424 559.168 378.368 544.128 331.52 536.064 285.888 536.064 242.24 536.064 199.872 543.424 160.512 558.976L160.512 558.976zM160.512 472.064C153.536 474.752 145.664 471.36 142.976 464.32 140.288 457.344 143.68 449.408 150.72 446.72c42.496-16.896 88.384-24.832 135.168-24.832 48.512 0 98.24 8.512 146.624 24.512 7.104 2.368 11.008 10.048 8.64 17.216C438.784 470.784 431.104 474.688 424 472.32 378.368 457.216 331.52 449.152 285.888 449.152 242.24 449.152 199.872 456.448 160.512 472.064L160.512 472.064zM160.512 393.152C153.536 395.904 145.664 392.384 142.976 385.408 140.288 378.432 143.68 370.56 150.72 367.808c42.496-16.896 88.384-24.832 135.168-24.832 48.512 0 98.24 8.576 146.624 24.576 7.104 2.304 11.008 10.048 8.64 17.216C438.784 391.872 431.104 395.776 424 393.344 378.368 378.304 331.52 370.176 285.888 370.176 242.24 370.176 199.872 377.536 160.512 393.152L160.512 393.152zM160.512 310.08c-6.976 2.752-14.848-0.704-17.536-7.68C140.288 295.36 143.68 287.488 150.72 284.736c42.496-16.832 88.384-24.768 135.168-24.768 48.512 0 98.24 8.512 146.624 24.512 7.104 2.368 11.008 10.048 8.64 17.216C438.784 308.864 431.104 312.704 424 310.336 378.368 295.296 331.52 287.232 285.888 287.232 242.24 287.232 199.872 294.528 160.512 310.08L160.512 310.08zM160.512 234.816c-6.976 2.688-14.848-0.704-17.536-7.68C140.288 220.16 143.68 212.224 150.72 209.472 193.216 192.64 239.104 184.704 285.888 184.704c48.512 0 98.24 8.512 146.624 24.512 7.104 2.368 11.008 10.048 8.64 17.216C438.784 233.536 431.104 237.44 424 235.072 378.368 220.032 331.52 211.968 285.888 211.968 242.24 211.968 199.872 219.328 160.512 234.816L160.512 234.816zM983.36 202.56C1005.888 203.776 1024 222.08 1024 244.288l0 570.048c0 22.976-19.392 41.792-43.008 41.792l-274.24 0 0 80.128-0.064 0c0 5.248-2.432 10.624-7.04 14.144-8.128 6.336-19.84 4.992-26.24-2.88l-56.768-69.376-59.776 73.472C553.536 956.608 547.712 960 541.248 960c-10.368 0-18.752-8.256-18.752-18.24l0-85.632L43.008 856.128C19.392 856.128 0 837.312 0 814.336L0 244.288C0 223.36 16.064 205.824 36.8 202.944L36.8 147.008c0-11.904 7.232-22.208 17.728-26.752C135.552 80.448 214.976 62.848 293.12 64c73.984 1.152 146.112 19.072 216.704 50.88C586.944 78.848 662.656 62.912 737.28 64c78.336 1.216 154.624 21.248 229.12 56.64 10.752 5.12 17.024 15.552 17.024 26.368l0 0L983.424 202.56 983.36 202.56zM706.752 676.288c10.112-0.512 20.352-0.704 30.528-0.576 63.232 1.088 125.12 15.36 185.792 40.96l0-551.04c-61.504-27.008-123.776-42.176-186.816-43.2-9.792-0.128-19.648 0.064-29.504 0.64L706.752 676.288 706.752 676.288zM292.16 122.496C228.736 121.536 163.776 134.976 97.088 165.312l0 550.656c66.304-28.544 131.584-41.344 196.032-40.256 63.296 1.088 125.248 15.36 185.92 40.96l0-551.04C417.408 138.624 355.2 123.456 292.16 122.496z\" p-id=\"2203\" ></path></svg>';\n  overflow: unset;\n  border: 0;\n  width: auto;\n  padding: 0;\n}\n\n.callout.callout[data-callout*=bookinfo] .callout-title {\n  text-align: center;\n  display: flex;\n  justify-content: space-between;\n}\n\n.callout.callout[data-callout*=bookinfo] .callout-content {\n  display: flex;\n  justify-content: space-between;\n}\n\n.callout.callout[data-callout*=bookinfo] .callout-content table {\n  width: 68%;\n  margin-left: 2%;\n  word-break: normal;\n}\n.callout.callout[data-callout*=bookinfo] .callout-content table tr th {\n  padding-right: 5px;;\n}\n.callout.callout[data-callout*=bookinfo] .callout-content td:nth-child(2) {\n  display: table-cell;\n  overflow: hidden;\n}\n@media screen and (max-width: 768px) {\n  .callout.callout[data-callout*=bookinfo] .callout-content table {\n    width: 100%;\n  }\n  .callout.callout[data-callout*=bookinfo] .callout-content {\n    display: grid;\n  }\n}\n/******callout timeline*****/\n.callout.callout[data-callout=\"timeline\"] {\n  --callout-color: 31, 172, 139;\n  --callout-icon: '<svg t=\"1649346326592\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2210\"><path d=\"M384 170.666667m42.666667 0l512 0q42.666667 0 42.666666 42.666666l0 0q0 42.666667-42.666666 42.666667l-512 0q-42.666667 0-42.666667-42.666667l0 0q0-42.666667 42.666667-42.666666Z\" p-id=\"2211\"></path><path d=\"M384 469.333333m42.666667 0l512 0q42.666667 0 42.666666 42.666667l0 0q0 42.666667-42.666666 42.666667l-512 0q-42.666667 0-42.666667-42.666667l0 0q0-42.666667 42.666667-42.666667Z\" p-id=\"2212\"></path><path d=\"M384 768m42.666667 0l512 0q42.666667 0 42.666666 42.666667l0 0q0 42.666667-42.666666 42.666666l-512 0q-42.666667 0-42.666667-42.666666l0 0q0-42.666667 42.666667-42.666667Z\" p-id=\"2213\"></path><path d=\"M239.835143 127.973411m15.084945 15.084944l60.339779 60.339779q15.084945 15.084945 0 30.169889l-60.339779 60.339779q-15.084945 15.084945-30.169889 0l-60.339779-60.339779q-15.084945-15.084945 0-30.169889l60.339779-60.339779q15.084945-15.084945 30.169889 0Z\" p-id=\"2214\"></path><path d=\"M239.831988 426.647696m15.084944 15.084945l60.339779 60.339778q15.084945 15.084945 0 30.16989l-60.339779 60.339778q-15.084945 15.084945-30.169889 0l-60.339779-60.339778q-15.084945-15.084945 0-30.16989l60.339779-60.339778q15.084945-15.084945 30.169889 0Z\" p-id=\"2215\"></path><path d=\"M239.828832 725.321982m15.084944 15.084944l60.339779 60.339779q15.084945 15.084945 0 30.169889l-60.339779 60.339779q-15.084945 15.084945-30.169889 0l-60.339779-60.339779q-15.084945-15.084945 0-30.169889l60.339779-60.339779q15.084945-15.084945 30.169889 0Z\" p-id=\"2216\"></path><path d=\"M213.333333 853.333333H85.333333a42.666667 42.666667 0 0 1-42.666666-42.666666V213.333333a42.666667 42.666667 0 0 1 42.666666-42.666666h128v85.333333H138.666667a10.709333 10.709333 0 0 0-10.666667 10.666667v192a10.709333 10.709333 0 0 0 10.666667 10.666666H213.333333v85.333334H138.666667a10.709333 10.709333 0 0 0-10.666667 10.666666v192a10.709333 10.709333 0 0 0 10.666667 10.666667H213.333333v85.333333z\" p-id=\"2217\"></path></svg>';\n  border-left: none;\n  background-color: transparent;\n}\n\n.callout.callout[data-callout=\"timeline\"] >.callout-content {\n  border-left:none;\n  display: -ms-grid;\n  display: grid;\n  -ms-grid-columns: auto auto 1fr;\n  grid-template-columns: 0.3fr auto 1fr;\n  -webkit-column-gap: 1.5rem;\n  column-gap: 1.5rem;\n  row-gap: 0.25rem;\n  margin: 2.3rem 1rem 0 0;\n  padding: 0;\n}\n.callout.callout[data-callout=\"timeline\"] .callout-content hr::before {\n  display: none;\n}\n.callout.callout[data-callout=\"timeline\"] .callout-content hr {\n  height: 100%;\n  width: 0.5rem;\n  -ms-grid-column: 2;\n  -ms-grid-column-span: 1;\n  grid-column: 2 / span 1;\n  -ms-grid-row: 1;\n  grid-row-start: 1;\n  background-color: var(--text-normal);\n  opacity: 0.1;\n  grid-row-end: 9;\n  margin:auto;\n  border: none;\n  overflow: hidden;\n  border-radius: 10px;\n}\n.callout.callout[data-callout=\"timeline\"] .callout-content blockquote {\n  color: var(--text-on-accent);\n  display: block;\n  -ms-grid-column: 1;\n  -ms-grid-column-span: 1;\n  grid-column: 1 / span 1;\n  position: relative;\n  -ms-flex-item-align: start;\n  -ms-grid-row-align: start;\n  align-self: start;\n  text-align: left;\n  box-shadow: none;\n  margin: 0;\n  border: none;\n  padding: 0;\n  background-color: var(--interactive-accent);\n}\n.callout.callout[data-callout=\"timeline\"] .callout-content blockquote p::before {\n  display: none;\n}\n.callout.callout[data-callout=\"timeline\"] .callout-content blockquote,\n.callout.callout[data-callout=\"timeline\"] .callout-content blockquote + *:not(.callout),\n.callout.callout[data-callout=\"timeline\"] .callout-content hr+ *:not(.callout) {\n  padding-top: 0.2em;\n  padding-bottom: 0.2em;\n}\n.callout.callout[data-callout=\"timeline\"] .callout-content blockquote  .list-bullet::after{\n  color: var(--text-on-accent);\n  left:0;\n}\n.callout.callout[data-callout=\"timeline\"] .callout-content blockquote p {\n  display: block;\n  color: var(--text-on-accent);\n  background-color: var(--interactive-accent);\n  font-style: normal;\n  border-radius: 5px;\n}\n.callout.callout[data-callout=\"timeline\"] .callout-content>*:not(blockquote):not(hr) {\n  position: relative;\n  -ms-grid-column: 3;\n  -ms-grid-column-span: 1;\n  grid-column: 3 / span 1;\n  margin-block-start: 0;\n  margin-block-end: 0;\n}\n.callout.callout[data-callout=\"timeline\"] table {\n  font-size: 13px;\n}\n\n/******callout icon*****/\n.show-inline-title  .callout.callout:is([data-callout-metadata^='icon'],\n.show-inline-title [data-callout='icon']) {\n  margin-top: -7em;\n}\n.callout.callout:is([data-callout-metadata^='icon'],\n[data-callout='icon']) {\n  flex: none !important;\n  border-left: 0;\n  background-color: transparent;\n  box-shadow: none;\n  float: left;\n  margin-top: -4em;\n  margin-bottom: 0;\n}\n.is-live-preview .callout.callout:is([data-callout-metadata^='icon'],\n[data-callout='icon']) {\n  margin-top: -1.6em;\n}\n.callout.callout:is([data-callout-metadata^='icon'],\n[data-callout='icon']) .callout-title {\n  display: none;\n}\n.callout.callout:is([data-callout-metadata^='icon'],\n[data-callout='icon']) .callout {\n  overflow: visible;\n  margin: 0;\n}\n.callout.callout:is([data-callout-metadata^='icon'],\n[data-callout='icon']) > .callout-content {\n  padding: 0;\n}\n.callout.callout:is([data-callout-metadata^='icon'],\n[data-callout='icon']) > .callout-content>svg {\n  height: calc(1em + 12px);\n  padding: 6px;\n  border-radius: 4px;\n  pointer-events: initial;\n  transition: ease .2s background;\n  font-size: 4em;\n  margin-bottom: 0px;\n}\n\n/***Sticky notes  便签效果**/\n.callout[data-callout=\"stickies\"] {\n  box-shadow:none;\n  border-left:0px;\n  overflow: unset;\n}\n.callout[data-callout=\"stickies\"][data-callout-metadata*=\"left\"] {\n  width: max(180px, 30%);\n}\n\n.callout[data-callout=\"stickies\"][data-callout-metadata*=\"left\"]>.callout-content {\n  max-width: 100%;\n}\n.callout[data-callout=\"stickies\"] >.callout-title {\n  display: none;\n}\n\n.callout[data-callout=\"stickies\"] >.callout-content {\n  overflow:visible;\n  text-align: center;\n  transition: width 2s;\n  padding: 5px;\n  margin: 18px;\n  position: relative;\n  float: right;\n  right: -10px;\n  width: max(180px, 30%);\n  max-width: 50%;\n  background-color: var(--stickies-color-1);\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(2deg);\n  transition: all 2s ease;\n  z-index: 1;\n  padding-top: 10px;\n  padding-bottom: 10px;\n  border-radius: 0px;\n  color: black;\n}\n.callout[data-callout=\"stickies\"] >.callout-content::after {\n  content: \"\";\n  left: -5%;\n  top: -10px;\n  height: 40px;\n  width: 15px;\n  border-radius: var(--radius-l);\n  border: 3px solid #979797;\n  display: inline-block;\n  position: absolute;\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(-11deg);\n  z-index: 11;\n}\n.callout[data-callout=\"stickies\"] >.callout-content::before {\n  width: 11px;\n  height: 20px;\n  content: \"\";\n  display: inline-block;\n  position: absolute;\n  left: -3.5%;\n  top: -2px;\n  border-radius: var(--radius-l);\n  border: 3px solid #979797;\n  border-bottom: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  z-index: 10;\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(-11deg);\n}\n\n.callout[data-callout=\"stickies2\"] {\n  box-shadow: none;\n  border-left: none;\n}\n.callout[data-callout=\"stickies2\"] >.callout-title {\n  display: none;\n}\n\n.callout[data-callout=\"stickies2\"] >.callout-content {\n  overflow:visible;\n  position: relative;\n  float: left;\n  box-shadow: 0 10px 10px 2px #9191912d;\n  width: max(180px, 30%);\n  max-width: 50%;\n  background-color: var(--stickies-color-2);\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(-2deg);\n  transition: all 2s ease;\n  z-index: 1;\n  padding: 20px;\n  margin: 10px;\n  color: black;\n}\n.callout[data-callout=\"stickies2\"] >.callout-content::after {\n  content: \"\";\n  display: block;\n  height: 32px;\n  width: 2px;\n  position: absolute;\n  left: 50%;\n  top: -10px;\n  z-index: 1;\n  border-radius: 50%;\n  display: inline-block;\n  height: 15px;\n  width: 15px;\n  border: 1px;\n  box-shadow: inset -10px -10px 10px #f0b7a4, inset 3px 3px 5px;\n}\n.callout[data-callout=\"stickies2\"][data-callout-metadata*=\"right\"] {\n  width: max(180px, 30%);\n}\n.callout[data-callout=\"stickies2\"][data-callout-metadata*=\"right\"] >.callout-content {\n  float:right;\n  max-width: 100%;\n}\n\n.callout[data-callout=\"stickies3\"] {\n  background-color: transparent ;\n  box-shadow:none;\n  border-left:0px;\n  margin: 20px auto 0 auto !important;\n}\n.callout[data-callout=\"stickies3\"] >.callout-title {\n  display: none;\n}\n\n.callout[data-callout=\"stickies3\"] >.callout-content {\n  overflow:visible;\n  width: max(180px, 30%);\n  max-width: 235px;\n  min-height: 235px;\n  padding-top: 2.5em;\n  font-family: Arial;\n  margin-top: 20px;\n  margin-right: 25px;\n  position: relative;\n  vertical-align: top;\n  display: inline-block;\n  background: #F7E999;\n  text-align: center;\n  box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2);\n  color: black;\n  font-family: var(--font-family-vault);\n}\ndiv.is-live-preview .callout[data-callout=\"stickies3\"] >.callout-content {\n  padding: 20px 15px 10px 15px;\n}\n.markdown-preview-view .callout[data-callout=\"stickies3\"] >.callout-content p {\n  margin-block-start: 0.5em;\n  margin-block-end: 0.5em;\n}\ndiv.callout[data-callout=\"stickies3\"] >.callout-content ul {\n  text-align: left;\n  margin-left: auto;\n}\n.callout[data-callout=\"stickies3\"] >.callout-content::before {\n  display: block;\n  content: \"\";\n  background: rgba(227, 200, 114, 0.4);\n  width: 56%;\n  height: 28px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n  border-radius: 6px/18px 0;\n  position: absolute;\n  top: -13px;\n  left: 20%;\n  -webkit-transform: rotate(-2deg);\n  -moz-transform: rotate(-2deg);\n  -o-transform: rotate(-2deg);\n  -ms-transform: rotate(-2deg);\n  transform: rotate(-2deg);\n}\n.callout[data-callout=\"stickies3\"] >.callout-content a {\n  color: #6b824f;\n  -webkit-transition: all 0.4s ease;\n  -moz-transition: all 0.4s ease;\n  -o-transition: all 0.4s ease;\n  -ms-transition: all 0.4s ease;\n  transition: all 0.4s ease;\n}\n.callout[data-callout=\"stickies3\"] >.callout-content a:hover {\n  color: #D83A25;\n  background: transparent;\n}\n.callout[data-callout=\"stickies3\"] >.callout-content a::before {\n  content: \"\";\n}\n\n.markdown-preview-view .callout[data-callout=\"stickies3\"] >.callout-content span {\n  font-size: smaller;\n}\n\n.markdown-preview-view .callout[data-callout=\"stickies3\"] >.callout-content img {\n  max-height: 205px;\n  margin-top: -2.5em;\n}\n.markdown-preview-view .callout[data-callout=\"stickies3\"] >.callout-content {\n  font-size: smaller;\n}\n.theme-dark .markdown-preview-view .callout[data-callout=\"stickies3\"] >.callout-content blockquote {\n  color: var(--interactive-normal);\n}\n.theme-dark .markdown-preview-view .callout[data-callout=\"stickies3\"] >.callout-content em {\n  color: var(--interactive-accent);\n  -webkit-text-fill-color: unset;\n}\n.theme-dark .markdown-preview-view .callout[data-callout=\"stickies3\"] >.callout-content strong {\n  color: var(--interactive-accent)!important;\n}\n.markdown-preview-view .callout[data-callout=\"stickies3\"] >.callout-content .block-language-dataviewjs p {\n  max-height: 195px;\n}\n\n.callout:is([data-callout-metadata*='yellow']) .callout-content{\n  background: #F7E999;\n  -webkit-transform: rotate(2deg);\n  -moz-transform: rotate(2deg);\n  -o-transform: rotate(2deg);\n  -ms-transform: rotate(2deg);\n  transform: rotate(2deg);\n}\n\n.callout:is([data-callout-metadata*='blue']) .callout-content {\n  background: #b9dcf4;\n  -webkit-transform: rotate(-2deg);\n  -moz-transform: rotate(-2deg);\n  -o-transform: rotate(-2deg);\n  -ms-transform: rotate(-2deg);\n  transform: rotate(-2deg);\n}\n\n.callout:is([data-callout-metadata*='pink']) .callout-content {\n  background: #FFBDA3;\n  -webkit-transform: rotate(1deg);\n  -moz-transform: rotate(1deg);\n  -o-transform: rotate(1deg);\n  -ms-transform: rotate(1deg);\n  transform: rotate(1deg);\n}\n\n.callout:is([data-callout-metadata*='green']) .callout-content {\n  background: #CAF4B9;\n  -webkit-transform: rotate(-1deg);\n  -moz-transform: rotate(-1deg);\n  -o-transform: rotate(-1deg);\n  -ms-transform: rotate(-1deg);\n  transform: rotate(-1deg);\n}\n/*禁用点击超链接跳转 需要跳转 按ctrl+超链接即可*/\nbody.link-click  .cm-s-obsidian span.cm-link a {\n  pointer-events: none;\n}\n\n/*禁用实时预览点击标签跳转 需要跳转 点击#号即可*/\nbody.tag-click .cm-line span.cm-hashtag:not(.cm-formatting) {\n  pointer-events: none;\n}\n/*ob关闭按钮顺序调整*/\nbody.reversal-titlebar .titlebar-button-container.mod-right {\n  direction: rtl;\n}\nbody.is-hidden-frameless:not(.is-fullscreen).is-focused .titlebar-button-container.mod-right {\n  background-color:transparent;\n}\n\n\n/* funny LP headers animation 开启标题动画 ===\nfrom discord @sailKite https://cdn.discordapp.com/attachments/702656734631821413/1007258862606352424/FunnyHeaderAnimLP.css\n*/\nbody.funny-header-anim .is-live-preview .cm-line > :is(.cm-header, .cm-widgetBuffer) + .cm-header,\nbody.funny-header-anim.clutter-free-headings .cm-line > :is(.cm-header, .cm-widgetBuffer) + .cm-header {\n  display: inline-block;\n}\nbody.funny-header-anim .is-live-preview .cm-line:not(.cm-active) :is(.cm-header, .cm-widgetBuffer) + .cm-header,\nbody.funny-header-anim.clutter-free-headings .cm-line:not(.cm-active) :is(.cm-header, .cm-widgetBuffer) + .cm-header,\nbody.funny-header-anim .is-live-preview .cm-line:not(.cm-active) :is(.cm-header, .cm-widgetBuffer) + .cm-header ~ *,\nbody.funny-header-anim.clutter-free-headings .cm-line:not(.cm-active) :is(.cm-header, .cm-widgetBuffer) + .cm-header ~ * {\n  transform: translateX(0ch);\n  transition: transform 333ms;\n}\nbody.funny-header-anim .is-live-preview .cm-active :is(.cm-header, .cm-widgetBuffer) + .cm-header,\nbody.funny-header-anim.clutter-free-headings :is(.cm-header, .cm-widgetBuffer) + .cm-header ,\nbody.funny-header-anim .is-live-preview .cm-active :is(.cm-header, .cm-widgetBuffer) + .cm-header ~ *,\nbody.funny-header-anim.clutter-free-headings :is(.cm-header, .cm-widgetBuffer) + .cm-header ~ *{\n  transition: transform 333ms;\n  transform: translateX(30px);\n}\nbody.funny-header-anim .is-live-preview .cm-active :is(.cm-header) +.cm-widgetBuffer + .cm-html-embed,\nbody.funny-header-anim.clutter-free-headings .cm-active :is(.cm-header) + .cm-widgetBuffer + .cm-html-embed {\n  transition: margin-left 500ms;\n  margin-left: 30px;\n}\nbody.funny-header-anim .is-live-preview .cm-active :is(.cm-header, .cm-widgetBuffer) + .cm-bracket,\nbody.funny-header-anim.clutter-free-headings .cm-active :is(.cm-header, .cm-widgetBuffer) + .cm-bracket {\n  transition: margin-left 333ms;\n  margin-left: 30px;\n}\nbody.funny-header-anim .is-live-preview .cm-line:not(.cm-active) .cm-header:first-of-type,\nbody.funny-header-anim.clutter-free-headings .cm-line:not(.cm-active) .cm-header:first-of-type {\n  display: none;\n  opacity: 0;\n}\n\nbody.funny-header-anim .is-live-preview .cm-active .cm-formatting-header + .cm-header,\nbody.funny-header-anim.clutter-free-headings .cm-active .cm-formatting-header + .cm-header{\n  margin-left: -30px;\n}\n\nbody.funny-header-anim .is-live-preview .cm-active .cm-formatting-header ~ .cm-foldPlaceholder,\nbody.funny-header-anim.clutter-free-headings .cm-active .cm-formatting-header ~ .cm-foldPlaceholderr{\n  transition: margin-left 333ms;\n  margin-left: 30px;\n}\nbody.funny-header-anim .is-live-preview .cm-active .cm-header:first-of-type,\nbody.funny-header-anim.clutter-free-headings .cm-active .cm-header:first-of-type {\n  transform: translateX(0ch);\n  animation: opac 333ms;\n}\n\n@keyframes opac {\n  from {opacity: 0;}\n  to {opacity: 1;}\n}\n\n/* head-tag-style*/\nbody.head-tag-style :is(.cm-header) +.cm-widgetBuffer + .cm-html-embed>sup {\n  background-color: var(--text-accent-hover);\n  color: #fff;\n  vertical-align: top;\n  border-radius: 3px;\n  padding: 1px 6px;\n  font-size: 12px;\n  line-height: calc(var(--paragraph-spacing) + 0.7);\n  margin-left: 0.5em;\n  letter-spacing: .1em;\n  font-family:  var(--font-default);\n}\nbody.head-tag-style :is(.cm-header) +.cm-widgetBuffer + .cm-html-embed>sub {\n  background-color: var( --simple-orange);\n  color: #fff;\n  vertical-align: top;\n  border-radius: 3px;\n  padding: 1px 6px;\n  font-size: 12px;\n  line-height: calc(var(--paragraph-spacing) + 0.7);\n  margin-left: 0.5em;\n  letter-spacing: .1em;\n  font-family: var(--font-default);\n}\n\nbody.head-tag-style :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) sup {\n  background-color: var(--text-accent-hover);\n  color: #fff;\n  vertical-align: top;\n  border-radius: 3px;\n  padding: 1px 6px;\n  font-size: 12px;\n  margin-left: 0.5em;\n  letter-spacing: .1em;\n  margin-top: -0.2em;\n  line-height: calc(var(--line-height-main) - 0.7);\n}\n\nbody.head-tag-style :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) sub {\n  background-color: var( --simple-orange);\n  color: #fff;\n  vertical-align: top;\n  border-radius: 3px;\n  padding: 1px 6px;\n  font-size: 12px;\n  margin-left: 0.5em;\n  letter-spacing: .1em;\n  margin-top: -0.2em;\n  line-height: calc(var(--line-height-main) - 0.7);\n}\nbody.head-tag-style :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) :is(sub,sup)>.tag:not(.token) {\n  padding: 0;\n  background-color: transparent;\n}\n\nbody.head-tag-style .cm-s-obsidian .cm-header ~  span.cm-hashtag {\n  font-size: calc(var(--font-size-tag) - 0.3em)!important;\n  vertical-align: top;\n}\nbody.head-tag-style .cm-s-obsidian .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-header,\nbody.head-tag-style .cm-s-obsidian .cm-hashtag.cm-header {\n  vertical-align: top;\n}\n\n\nbody:not(.tag-default) .cm-s-obsidian .cm-header ~  span.cm-hashtag {\n  font-size: calc(var(--font-size-tag) - 0.3em)!important;\n}\n\n\nbody.head-tag-style :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) >.tag:not(.token) {\n  font-size: calc(var(--font-size-tag) - 0.3em);\n  vertical-align: top;\n}\n\n/*\n.cm-s-obsidian .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-header,\n.cm-s-obsidian .cm-hashtag.cm-header {\n  font-size: calc(var(--font-size-tag) - 0.3em) !important;\n  vertical-align: middle;\n  margin-top: -0.3em;\n}\n*/\n\nbody.head-tag-style .cm-s-obsidian .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-header,\nbody.head-tag-style .cm-s-obsidian .cm-hashtag.cm-header {\n  vertical-align: top;\n}\n\n:is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) >.tag:not(.token) {\n  font-size: calc(var(--font-size-tag) - 0.2em);\n  vertical-align: middle;\n}\n\n/****** 网络图片标题样式********/\n[data-dv-key=\"img-caption\"] + span.dataview>span {\n  margin: 0.5rem 0;\n  display: block;\n  caption-side: bottom;\n  text-align: center;\n  font-size: 0.85rem;\n}\n.dataview.inline-field-key[data-dv-key=\"img-caption\"] + .dataview.inline-field-value {\n  background-color:unset;\n  border-radius: 0px;\n  padding: 0;\n  font-family: var(--font-text);\n}\n\n.dataview.inline-field-key[data-dv-key=\"img-caption\"] {\n  display:none;\n  background-color:unset;\n  font-size: 0px;\n  padding: 0;\n  border-radius: 0px;\n}\n\n.dataview.inline-field-key[data-dv-key=\"img-caption\"] {\n  display:none;\n  background-color:unset;\n  font-size: 0px;\n  padding: 0;\n  border-radius: 0px;\n}\n\n\nbody:not(.remove-selectionbackground) .markdown-source-view.mod-cm6 .cm-editor .cm-selectionBackground {\n  background: transparent;\n}\n\n.clickable-icon.is-active,\n.clickable-icon.has-active-menu,\n.clickable-icon:active,\n.clickable-icon:hover {\n  background-color: var(--theme-color-translucent-015);\n}\n\n.workspace.is-left-sidedock-open .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button .clickable-icon,\n.workspace-split.mod-horizontal .sidebar-toggle-button .clickable-icon,\n.workspace.is-right-sidedock-open .sidebar-toggle-button.mod-right .clickable-icon {\n  color: var(--theme-color);\n}\n\n.workspace-tabs .view-header {\n  margin: 0;\n  padding: 0 var(--size-4-2);\n}\n\n.workspace-split.mod-root .workspace-tab-header.is-active {\n  z-index: var(--layer-popover);\n  color: var(--text-normal);\n  /*box-shadow: var(--window-shadow);*/\n}\n.is-mobile  .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  z-index: 29;\n}\n.is-focused .workspace-tab-header {\n  color: var(--text-muted);\n}\n\n\n/*\n.workspace-tabs.mod-stacked .view-header,\n.is-focused .workspace .mod-root .workspace-tabs.mod-stacked .workspace-leaf.mod-active .view-header {\n  background-color: var(--color-base-10);\n}*/\n.workspace-split.mod-root .workspace-tabs.mod-stacked .view-content {\n  backdrop-filter: blur(var(--stack-tabs-background-blur-depth));\n}\n.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header {\n  background-color: var(--background-primary);\n  border-right: 1px solid var(--page-border-bottom);\n  box-shadow: -1px 0 10px 0 var(--tab-stacked-shadow);\n  backdrop-filter: blur(6px);\n}\n.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:first-child {\n  border-left: 1px solid var(--page-border-bottom);\n}\n\n.titlebar-button:hover {\n  background-color: unset;\n}\n.markdown-rendered ul ul, .markdown-rendered ol ul, .markdown-rendered ul ol, .markdown-rendered ol ol\n{\n\n    margin-block-start: calc((var(--paragraph-spacing) - 1) * 1em);\n    margin-block-end: calc((var(--paragraph-spacing) - 1) * 1em);\n\n}\n/* body:not(.default-list-marker) .list-bullet::before {\n  display: none;\n} */\n\nbody:not(.default-list-marker) .markdown-rendered .list-bullet::after {\n  content: '\\2022';\n  font-size: var(--list-ul-marker-size);\n  font-family: Inter;\n  width: unset;\n  height: unset;\n  border: none;\n  background: transparent;\n  color: var(--list-ul-marker-color);\n  margin-left: 0.13em;\n  /* margin-top: calc(0.466em * var(--line-height-list) - 0.286em); */\n  line-height: 0.55;\n  transition: all 0.15s ease;\n}\n\nbody:not(.default-list-marker) .list-bullet::after {\n  content: '\\2022';\n  font-size: var(--list-ul-marker-size);\n  font-family: Inter;\n  width: unset;\n  border: none;\n  background: transparent;\n  color: var(--list-ul-marker-color);\n/*   margin-left: -0.03em;\n  margin-top: -0.15em; */\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n  height: 43%;\n  transition: all 0.15s ease;\n}\n\nbody.custom-unordered-list .markdown-rendered .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after,\nbody.custom-unordered-list .markdown-rendered .list-bullet::after {\n  content: var(--list-ul-marker-4);\n  font-size: var(--list-ul-marker-size-4);\n  color: var(--list-ul-marker-color-4,var(--list-marker-color));\n}\n\nbody.custom-unordered-list .markdown-source-view.mod-cm6 .list-bullet::after {\n  content: var(--list-ul-marker-4);\n  font-size: var(--list-ul-marker-size-4);\n  color: var(--list-ul-marker-color-4,var(--list-marker-color));\n}\n\nbody.custom-unordered-list .has-list-bullet .list-bullet::after,\nbody.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line>span.cm-formatting:first-of-type .list-bullet::after {\n  content: var(--list-ul-marker-1);\n  font-size: var(--list-ul-marker-size-1);\n  color: var(--list-ul-marker-color-1,var(--list-marker-color));\n}\n\nbody.custom-unordered-list .has-list-bullet .has-list-bullet .list-bullet::after,\nbody.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after {\n  content: var(--list-ul-marker-2);\n  font-size: var(--list-ul-marker-size-2);\n  color: var(--list-ul-marker-color-2,var(--list-marker-color));\n}\nbody.custom-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after,\nbody.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after {\n  content: var(--list-ul-marker-3);\n  font-size: var(--list-ul-marker-size-3);\n  color: var(--list-ul-marker-color-3,var(--list-marker-color));\n}\n\n\n.markdown-source-view.mod-cm6 .cm-indent::before {\n  margin-left: var(--bt-list-indentation-margin-left-editing, 0px);\n}\n.markdown-rendered.show-indentation-guide li > ul::before, \n.markdown-rendered.show-indentation-guide li > ol::before {\n  margin-left: var(--bt-list-indentation-margin-left-reading, 0);\n}\n\n.is-focused .mod-active .workspace-tab-header.is-active\n.workspace-tab-header-inner-icon {\n  color: var(--theme-color);\n}\n\nbody:not(.default-list-marker) .list-collapse-indicator:hover ~ .list-bullet:after,\nbody:not(.default-list-marker) .cm-fold-indicator:hover ~ .list-bullet:after,\nbody:not(.default-list-marker) .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after,\nbody:not(.default-list-marker) .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after {\n  box-shadow: -0.02em 0.058em 0 2px var(--background-modifier-hover);\n  background-color: var(--background-modifier-hover);\n}\n\nbody:not(.default-list-marker) li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after,\nbody:not(.default-list-marker) li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after,\nbody:not(.default-list-marker) .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after,\nbody:not(.default-list-marker) .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after,\nbody:not(.default-list-marker) li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after,\nbody:not(.default-list-marker) li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after,\nbody:not(.default-list-marker) .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after,\nbody:not(.default-list-marker) .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after,\n\nbody:not(.default-list-marker) li.is-collapsed .list-bullet:after,\nbody:not(.default-list-marker) .is-collapsed ~ .cm-formatting-list .list-bullet:after,\nbody:not(.default-list-marker) .markdown-rendered .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .is-collapsed .list-bullet::after {\n  color: var(--list-marker-color-collapsed);\n  box-shadow: -0.02em 0.058em 0 2px var(--background-modifier-active-hover);\n  background-color: var(--background-modifier-active-hover);\n}\n\n\nbody.colorful-unordered-list ul > li::marker {\n  color: var(--list-colorful-marker);\n}\nbody.colorful-unordered-list :is(ul, ol) ul li::marker {\n  color: hsl(calc(var(--accent-h) + 60),var(--accent-s),var(--accent-l));\n}\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) ul li::marker {\n  color: hsl(calc(var(--accent-h) + 120),var(--accent-s),calc(var(--accent-l) * 0.95));\n}\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) ul li::marker {\n  color: hsl(calc(var(--accent-h) + 180),var(--accent-s),calc(var(--accent-l) * 0.95));\n}\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ul li::marker {\n  color: hsl(calc(var(--accent-h) + 240),var(--accent-s),calc(var(--accent-l) * 0.95));\n}\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ul li::marker {\n  color: hsl(calc(var(--accent-h) + 300),var(--accent-s),calc(var(--accent-l) * 0.95));\n}\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ul li::marker {\n  color: hsl(calc(var(--accent-h) + 0), var(--accent-s), calc(var(--accent-l) * 0.95));\n}\n\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .list-bullet::after {\n  content: var(--list-ul-colorful-marker-content);\n}\n\nbody.colorful-unordered-list .has-list-bullet .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line>span.cm-formatting:first-of-type .list-bullet::after {\n  color: var(--list-colorful-marker);\n}\n\n\nbody.colorful-unordered-list .has-list-bullet .has-list-bullet .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(60deg);\n}\nbody.colorful-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(120deg);\n}\nbody.colorful-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-4.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-4.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(180deg);\n}\nbody.colorful-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-5.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-5.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(240deg);\n}\nbody.colorful-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-6.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after,\nbody.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-6.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(300deg);\n}\n\n\nbody.colorful-unordered-list li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after,\nbody.colorful-unordered-list li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after,\nbody.colorful-unordered-list .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after,\nbody.colorful-unordered-list .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after,\nbody.colorful-unordered-list li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after,\nbody.colorful-unordered-list li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after,\nbody.colorful-unordered-list .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after,\nbody.colorful-unordered-list .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after,\n\nbody.colorful-unordered-list li.is-collapsed .list-bullet:after,\nbody.colorful-unordered-list .is-collapsed ~ .cm-formatting-list .list-bullet:after,\nbody.colorful-unordered-list .markdown-rendered .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .is-collapsed .list-bullet::after {\n  color: var(--list-marker-color-collapsed);\n  box-shadow: -0.02em 0.058em 0 2px var(--background-modifier-active-hover);\n  background-color: var(--background-modifier-active-hover);\n}\n\n\n/*ordered-list-style-1*/\nbody.ordered-list-style-1 ol,\nbody.ordered-list-style-1 ol ol,\nbody.ordered-list-style-1 ol ol ol,\nbody.ordered-list-style-1 ol ul ol,\nbody.ordered-list-style-1 ol ol ol ol,\nbody.ordered-list-style-1 ol ol ul ol,\nbody.ordered-list-style-1 ol ul ol ol {\n  list-style: none;\n}\n\nbody.ordered-list-style-1 ol {\n  counter-reset: niceBT;\n}\n\nbody.ordered-list-style-1 ol>li {\n  counter-increment: niceBT;\n}\n\nbody.ordered-list-style-1 .markdown-rendered.show-indentation-guide li > ul::before {\n  left: -18px;\n}\nbody.ordered-list-style-1 .markdown-rendered.show-indentation-guide li > ol::before {\n  left: -11px;\n}\n\nbody.ordered-list-style-1 ol>li::before {\n  content: counters(niceBT, '.') '. ';\n  font-weight: bold;\n  font-family: Inter;\n  color: var(--list-ol-number-color);\n  display: inline-block;\n  white-space: pre;\n  margin-left: -0.7em;\n}\nbody.ordered-list-style-1 ul>li:not(.task-list-item)>p {\n  display: inline;\n}\nbody.ordered-list-style-1 ul>li:not(.task-list-item) {\n  list-style-position: inside;\n  padding-left: 0.25em;\n}\n\nbody.ordered-list-style-1 ol.contains-task-list>li.task-list-item {\n  margin-left: -1.2em;\n}\n\nbody.list-bracket-style .markdown-rendered.show-indentation-guide li:not(.task-list-item) > :is(ol,ul)::before{\n  border: none;\n}\n\nbody.list-bracket-style :is(.markdown-preview-view,.markdown-rendered) ul>li:not(.task-list-item)::marker {\n  font-size: 0.9em;\n}\n\n\nbody.list-bracket-style :is(.markdown-preview-view,.markdown-rendered):not(.kanban) li:not(.task-list-item) {\n  padding-left: 0.3rem;\n}\n\nbody.list-bracket-style :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ul>li:not(.task-list-item) {\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n  transition: all 300ms ease-in-out;\n  border-left: 0.125em solid var(--list-ul-block-color);\n}\n\nbody.list-bracket-style :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ul>li:not(.task-list-item):hover {\n  border-color: var(--list-ul-hover);\n}\n\n\n\nbody.list-bracket-style :is(.markdown-preview-view,.markdown-rendered) ol:not(.contains-task-list)>li:not(.task-list-item) {\n  border-left: 0.125em solid var(--list-ol-block-color);\n  border-radius: var(--radius-s);\n  padding-left: 0.3rem;\n  border-radius: var(--radius-s);\n  transition: all 300ms ease-in-out;\n}\n\nbody.list-bracket-style ol.contains-task-list ol li:not(.task-list-item) {\n  border-left: none !important;\n  padding-left: 0.25em;\n}\n\nbody.list-bracket-style :is(.markdown-preview-view,.markdown-rendered) ol:not(.contains-task-list)>li:not(.task-list-item):hover {\n  border-color: var(--list-ol-hover);\n}\n\n\nbody.list-bracket-style-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban) :is(ul,ol)>li:not(.task-list-item) {\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n  transition: all 300ms ease-in-out;\n  border-left: 0.125em solid var(--list-ul-block-color);\n}\n\nbody.list-bracket-style-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ol>li:not(.task-list-item) {\n  border-left: 0.125em solid var(--list-ol-block-color);\n}\n\nbody.list-bracket-style-two .markdown-rendered.show-indentation-guide li:not(.task-list-item) > ul::before, \nbody.list-bracket-style-two .markdown-rendered.show-indentation-guide li:not(.task-list-item) > ol::before {\n  border: none;\n}\n\n/*list-bracket-style-two*/\nbody.list-bracket-style-two ol,\nbody.list-bracket-style-two ol ol,\nbody.list-bracket-style-two ol ol ol,\nbody.list-bracket-style-two ol ul ol,\nbody.list-bracket-style-two ol ol ol ol,\nbody.list-bracket-style-two ol ol ul ol,\nbody.list-bracket-style-two ol ul ol ol {\n  list-style: none;\n}\n\nbody.list-bracket-style-two ol {\n  counter-reset: niceBT;\n}\n\nbody.list-bracket-style-two ol>li {\n  counter-increment: niceBT;\n}\n\nbody.list-bracket-style-two ol>li::before {\n  content: counters(niceBT, '.') '. ';\n  font-weight: bold;\n  font-family: Monaco;\n  font-size: 0.8em;\n  color: var(--list-ol-number-color);\n  display: inline-block;\n  white-space: pre;\n}\n\nbody.list-bracket-style-two ul>li:not(.task-list-item) {\n  padding-left: 1.1em;\n}\nbody.list-bracket-style-two ol>li:not(.task-list-item) {\n  padding-left: 0.4em;\n}\n\nbody.list-bracket-style-two .markdown-rendered .list-bullet {\n  left: 0.6em;\n}\n\nbody.list-bracket-style-three :is(.markdown-preview-view,.markdown-rendered):not(.kanban) :is(ul,ol):has(:is(ol,ul))>li:has(:is(ol,ul)):not(.task-list-item) {\n  border-radius: var(--radius-s);\n  word-wrap: break-word;\n  word-break: break-word;\n  transition: all 300ms ease-in-out;\n  border-left: 0.125em solid var(--list-ul-block-color);\n}\nbody.list-bracket-style-three :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ol:has(:is(ol,ul))>li:has(:is(ol,ul)):not(.task-list-item) {\n  border-left: 0.125em solid var(--list-ol-block-color);\n}\n\nbody.list-bracket-style-three :is(.markdown-preview-view,.markdown-rendered):not(.kanban) :is(ul,ol):has(:is(ol,ul))>li:has(:is(ol,ul)):not(.task-list-item) {\n  padding-left: 0.3em;\n}\n\nbody.list-bracket-style-three .markdown-rendered.show-indentation-guide li:not(.task-list-item) > ul::before, \nbody.list-bracket-style-three .markdown-rendered.show-indentation-guide li:not(.task-list-item) > ol::before {\n  border: none;\n}\nbody.list-bracket-style-three :is(.markdown-preview-view,.markdown-rendered):not(.kanban) li:not(.task-list-item) {\n  padding-left: 0.45rem;\n}\n\n\n/*list-vertical-line-one*/\nbody.list-vertical-line-one ol,\nbody.list-vertical-line-one ol ol,\nbody.list-vertical-line-one ol ol ol,\nbody.list-vertical-line-one ol ul ol,\nbody.list-vertical-line-one ol ol ol ol,\nbody.list-vertical-line-one ol ol ul ol,\nbody.list-vertical-line-one ol ul ol ol {\n  list-style: none;\n}\n\nbody.list-vertical-line-one ol {\n  counter-reset: niceBTT;\n}\n\nbody.list-vertical-line-one ol>li {\n  counter-increment: niceBTT;\n}\n\nbody.list-vertical-line-one ol>li::before {\n  content: counters(niceBTT, '.') '. ';\n  font-weight: bold;\n  color: var(--list-ol-number-color);\n  margin-left: -1.3em;\n  font-family: Monaco;\n  font-size: 0.9em;\n}\n\nbody.list-vertical-line-one :is(ol,ul) :is(ol,ul) {\n  position: relative;\n}\n\n:is(body.list-vertical-line-one,body.list-vertical-line-one, body.list-vertical-line-one) :is(.markdown-preview-view,.markdown-rendered) ul ol:not(.contains-task-list)>li:not(.task-list-item), \n:is(body.list-vertical-line-one,body.list-vertical-line-one, body.list-vertical-line-one) :is(.markdown-preview-view,.markdown-rendered) ul ol:not(.contains-task-list)+ul>li:not(.task-list-item), \n:is(body.list-vertical-line-one,body.list-vertical-line-one, body.list-vertical-line-one) :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ol ul>li:not(.task-list-item),\n:is(body.list-vertical-line-one,body.list-vertical-line-one, body.list-vertical-line-one) :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ol ul+ol>li:not(.task-list-item) {\n  margin-top: calc(var(--margin-list) * -0.25em);\n  padding-top: calc(var(--margin-list) * 0.25em);\n}\n\n\nbody.colorful-ordered-list ol li::marker,\nbody.colorful-ordered-list ol li::before,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol,\nbody.colorful-ordered-list .cm-formatting.cm-formatting-list.cm-formatting-list-ol,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol {\n  color: var(--list-colorful-marker);\n}\n\nbody.colorful-ordered-list :is(ul, ol) ol li::marker {\n  color: hsl(calc(var(--accent-h) + 60),var(--accent-s),var(--accent-l));\n}\nbody.colorful-ordered-list :is(ul, ol) ol li::before,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(60deg);\n}\n\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) ol li::marker {\n  color: hsl(calc(var(--accent-h) + 120),var(--accent-s),calc(var(--accent-l) * 0.95));\n}\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) ol li::before,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(120deg);\n}\n\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::marker {\n  color: hsl(calc(var(--accent-h) + 180),var(--accent-s),calc(var(--accent-l) * 0.95));\n}\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::before,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-4.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-4.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(180deg);\n}\n\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::marker {\n  color: hsl(calc(var(--accent-h) + 240),var(--accent-s),calc(var(--accent-l) * 0.95));\n}\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::before,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-5.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-5.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(240deg);\n}\n\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::marker {\n  color: hsl(calc(var(--accent-h) + 300),var(--accent-s),calc(var(--accent-l) * 0.95));\n}\n\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::before,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-6.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-6.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(300deg);\n}\n\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::marker {\n  color: hsl(calc(var(--accent-h) + 0), var(--accent-s), calc(var(--accent-l) * 0.95));\n}\n\nbody.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::before,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-7.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol,\nbody.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-7.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol {\n  color: var(--list-colorful-marker);\n  filter: hue-rotate(0deg);\n}\n\n\n@property --colorA {\n  syntax: '<color>';\n  inherits: false;\n  initial-value: #9800f021;\n}\n@property --colorB {\n  syntax: '<color>';\n  inherits: false;\n  initial-value: #0048f021;\n}\n@property --colorC {\n  syntax: '<color>';\n  inherits: false;\n  initial-value: #00f02c21;\n}\nbody.enable-icon-anima div.nav-header:hover {\n  background: linear-gradient(135deg,var(--colorA),var(--colorB),var(--colorC));\n  animation: rainbow-change 8s infinite linear;\n}\n\n@keyframes rainbow-change {\n  20% {\n    --colorA: #f0000015;\n    --colorB: #88f00015;\n    --colorC: #0048f015;\n  }\n  40% {\n    --colorA: #10f00015;\n    --colorB: #007cf015;\n    --colorC: #6400f015;\n  }\n  60% {\n    --colorA: #d4f00015;\n    --colorB: #f0780015;\n    --colorC: #f0003c15;\n  }\n  80% {\n    --colorA: #0060f015;\n    --colorB: #f0700015;\n    --colorC: #00d0f015;\n  }\n}\n\n\nbody.enable-icon-anima :is(.workspace-ribbon, .nav-header) .clickable-icon:before{\n  content: '';\n  background-color: var(--theme-color-translucent-01);\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  visibility: hidden;\n}\n\nbody.enable-icon-anima :is(.workspace-ribbon, .nav-header) .clickable-icon:hover:before {\n  animation: bead-1 1s;\n}\n\nbody.enable-icon-anima :is(.workspace-ribbon, .nav-header) .clickable-icon:after {\n  content: '';\n  background-color: var(--theme-color-translucent-01);\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  visibility: hidden;\n}\n\nbody.enable-icon-anima :is(.workspace-ribbon, .nav-header) .clickable-icon:hover:after {\n  animation: bead-2 1s;\n}\n\n@keyframes bead-1 {\n  0% {\n    transform: scale(1);\n    visibility: visible;\n  }\n  25% {\n    margin-left: 20px;\n    margin-top: 20px;\n    transform: scale(0);\n    visibility: hidden;\n  }\n  50% {\n    margin: 0px;\n    transform: scale(1);\n    visibility: visible;\n  }\n  100% {\n    margin-left: 20px;\n    margin-top: -20px;\n    transform: scale(0);\n    visibility: hidden;\n  }\n}\n\n@keyframes bead-2 {\n  0% {\n    transform: scale(1);\n    visibility: visible;\n  }\n  25% {\n    margin-left: -20px;\n    margin-top: -20px;\n    transform: scale(0);\n    visibility: hidden;\n  }\n  50% {\n    margin: 0px;\n    transform: scale(1);\n    visibility: visible;\n  }\n  100% {\n    margin-left: -20px;\n    margin-top: 20px;\n    transform: scale(0);\n    visibility: hidden;\n  }\n}\n\n/**ob 1.0 **/\n.is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right:hover {\n  background-color: var(--titlebar-background-focused);\n}\n.is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right {\n  background-color: transparent;\n}\n.is-hidden-frameless.mod-windows .titlebar-button {\n  background-color: transparent;\n}\n\n.markdown-preview-view progress, .markdown-rendered progress, .markdown-source-view.is-live-preview progress {\n  overflow: unset;\n  vertical-align: middle;\n}\n\nbody.title-justify-start .view-header-title-container {\n  justify-content: flex-start;\n}\n\n.search-input-container input:hover {\n  box-shadow: var(--window-shadow-hover);\n}\n \n\n\n.memo-context-menu{\n  background-color:var(--bg-color-settings-3);\n  backdrop-filter: blur(10px);\n}\n.cm-s-obsidian span.obsidian-search-match-highlight {\n  box-shadow: none;\n}\nselect:hover,\n.dropdown:hover,\nselect:focus,\n.dropdown:focus {\n  box-shadow: none;\n}\n\n.workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title, .workspace-leaf.mod-active .nav-file.has-focus > .nav-file-title {\n  box-shadow: none;\n}\n\n.nav-folder.mod-root > .nav-folder-children > .nav-file .nav-file-title {\n  padding-left: var(--size-2-3);\n}\n\n.nav-folder .nav-folder-children[style=\"height: 0px;\"] {\n  height: auto !important;\n}\n\ntextarea:active,\ninput[type='text']:active,\ninput[type='search']:active,\ninput[type='email']:active,\ninput[type='password']:active,\ninput[type='number']:active,\ntextarea:focus,\ninput[type='text']:focus,\ninput[type='search']:focus,\ninput[type='email']:focus,\ninput[type='password']:focus,\ninput[type='number']:focus,\ntextarea:focus-visible,\ninput[type='text']:focus-visible,\ninput[type='search']:focus-visible,\ninput[type='email']:focus-visible,\ninput[type='password']:focus-visible,\ninput[type='number']:focus-visible {\n  box-shadow: none;\n}\n\n\n@keyframes fancy-prompt-1 {\n  0% {\n    transform: scale(1.2) rotate(0);\n    opacity: 0;\n    box-shadow: 0 0 0 rgba(241, 241, 241, 0);\n  }\n  50% {\n    transform: scale(1) rotate(-0.2deg);\n    opacity: 1;\n    box-shadow: 0 0 0 rgba(241, 241, 241, 0.5);\n  }\n  75% {\n    transform: scale(1) rotate(0.2deg);\n    opacity: 1;\n    box-shadow: 0 0 250px rgba(241, 241, 241, 0.5);\n  }\n  100% {\n    transform: scale(1) rotate(0);\n    opacity: 1;\n    box-shadow: 0 0 500px rgba(241, 241, 241, 0);\n  }\n}\n\n.prompt {\n  backdrop-filter: blur(10px);\n  box-shadow: 0 0 10px 1px var(--prompt-box-shadow);\n  border: none;\n}\n \n\n@keyframes slideUpLarge {\n  0% {\n    transform: translateY(-100%);\n  }\n  100% {\n    transform: translateY(0%);\n  }\n}\n\n@keyframes quickScaleDown {\n  0% {\n    transform: scale(0);\n  }\n  20% {\n    transform: scale(0.2);\n  }\n\n  40% {\n    transform: scale(0.4);\n  }\n  60% {\n    transform: scale(0.6);\n  }\n  80% {\n    transform: scale(0.8);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n@keyframes blowUpModal {\n  0% {\n    transform: scale(0);\n    opacity: 0;\n  }\n  100% {\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n\n@keyframes roadRunnerIn {\n  0% {\n    transform: translateX(-1500px) skewX(30deg) scaleX(1.3);\n  }\n  70% {\n    transform: translateX(30px) skewX(0deg) scaleX(0.9);\n  }\n  100% {\n    transform: translateX(0px) skewX(0deg) scaleX(1);\n  }\n}\n\n@keyframes roadRunnerOut {\n  0% {\n    transform: translateX(400px) skewX(30deg) scaleX(1.3);\n  }\n  50% {\n    transform: translateX(-30px) skewX(0deg) scaleX(0.9);\n  }\n  100% {\n    transform: translateX(0px) skewX(0deg) scaleX(1);\n  }\n}\n\n@keyframes pop-swirl {\n  0% {\n    transform: scale(0) rotate(360deg);\n  }\n  60% {\n    transform: scale(0.8) rotate(-10deg);\n  }\n  100% {\n    transform: scale(1) rotate(0deg);\n  }\n}\n\n@keyframes unfoldIn {\n  0% {\n    transform: scaleY(0.005) scaleX(0);\n  }\n  50% {\n    transform: scaleY(0.005) scaleX(1);\n  }\n  100% {\n    transform: scaleY(1) scaleX(1);\n  }\n}\n\n[class=\"prompt\"] {\n  animation: var(--prompt-options) .5s ease-in;\n}\n\nbody.hide-left-ribbon .workspace-ribbon.mod-left:not(:hover):before,\nbody.hide-left-ribbon .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover),\nbody.hide-left-ribbon .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover) .sidebar-toggle-button.mod-left {\n  margin-left: calc(-1 * var(--ribbon-width) + 1px);\n}\n\n\n \nbody.hide-left-ribbon .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button.mod-left,\nbody.hide-left-ribbon .workspace-ribbon.mod-left:before,\nbody.hide-left-ribbon .workspace-ribbon.side-dock-ribbon.mod-left {\n  transition: all 350ms ease-in-out;\n}\n\nbody.hide-left-ribbon-retention-drawer.hide-titlebar-close-btn.is-hidden-frameless .titlebar-button.mod-logo {\n  display: none;\n}\n\nbody.hide-left-ribbon-retention-drawer.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.mod-left .sidebar-toggle-button {\n  padding-top: var(--size-4-2);\n}\nbody.hide-left-ribbon-retention-drawer .workspace-ribbon.mod-left:not(:hover) ~ .workspace-split .workspace-tabs.mod-top.mod-top-left-space .workspace-tab-header-container {\n  margin-left: 30px;\n  transition: all 350ms ease-in-out;\n}\nbody.hide-left-ribbon-retention-drawer .workspace-ribbon.mod-left:not(:hover):before,\nbody.hide-left-ribbon-retention-drawer .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover) {\n  margin-left: calc(-1 * var(--ribbon-width) + 1px);\n}\n\nbody.hide-left-ribbon-retention-drawer .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button.mod-left,\nbody.hide-left-ribbon-retention-drawer .workspace-ribbon.mod-left:before,\nbody.hide-left-ribbon-retention-drawer .workspace-ribbon.side-dock-ribbon.mod-left,\nbody.hide-left-ribbon-retention-drawer .workspace-ribbon.mod-left:hover ~ .workspace-split .workspace-tabs.mod-top .workspace-tab-header-container {\n  transition: all 350ms ease-in-out;\n}\nbody.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button.mod-left {\n  background: unset;\n}\n\n\nbody.hide-left-ribbon-retention-drawer:not(.background-settings-workplace-background-image) .workspace-tabs.mod-top {\n  background: var(--background-secondary-alt);\n}\nbody.stack-tab-text-ori-mixed .workspace-tab-header-inner-title {\n  text-orientation: mixed;\n}\n\nbody:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .side-dock-actions {\n  border-radius: 0 var(--radius-l) var(--radius-l) 0;\n}\nbody:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .side-dock-actions, \nbody:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .side-dock-settings {\n  border: 1px solid var(--tab-outline-color);\n  padding: 5px 0;\n  background-color: var(--background-primary);\n}\nbody:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .side-dock-settings {\n  border-radius: 0 var(--radius-l) 0 0;\n  margin-bottom: 0;\n}\nbody:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .workspace-ribbon {\n  padding: 0 3px 0 0;\n  border-right: none;\n}\n\nbody.bt-bubble-ribbon-hide-left .workspace-ribbon.mod-left:not(:hover):before,\nbody.bt-bubble-ribbon-hide-left .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover),\nbody.bt-bubble-ribbon-hide-left .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover) .sidebar-toggle-button.mod-left {\n  margin-left: calc(-1 * var(--ribbon-width) + 1px);\n}\n\nbody.bt-bubble-ribbon-hide-left .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button.mod-left,\nbody.bt-bubble-ribbon-hide-left .workspace-ribbon.mod-left:before,\nbody.bt-bubble-ribbon-hide-left .workspace-ribbon.side-dock-ribbon.mod-left {\n  transition: all 350ms ease-in-out;\n}\n\n\nbody.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header {\n  left: 16px;\n  border: none;\n  transform-origin: right center;\n  writing-mode: vertical-rl;\n  position: absolute;\n  padding: 0;\n  background: transparent;\n}\n\nbody.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header-nav-buttons {\n  margin-left: -12px;\n}\n\nbody.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header .view-actions {\n  margin-left: -13px;\n}\nbody.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header-title-container {\n  position: absolute;\n  top: 25vh;\n  left: -8px;\n  transform-origin: right center;\n  writing-mode: vertical-rl;\n  text-orientation: mixed;\n}\n\nbody.view-button-front.tab-title-bar-position .workspace-leaf-content .view-header .view-header-nav-buttons{\n  margin-left: -12px;\n  margin-top: 25px;\n}\n\nbody.view-button-front.tab-title-bar-position .workspace-leaf-content:is([data-mode=\"preview\"],\n[data-mode=\"source\"]) .view-header .view-actions>:is([aria-label^=\"该面板处于编辑视图中\"],\n[aria-label^=\"Current view: editing\"]) {\n  left: -10px;\n}\nbody.view-button-front.tab-title-bar-position .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^=\"该面板处于阅读视图中\"],[aria-label^=\"Current view: reading\"]) {\n  left: -10px;\n}\n\nbody.tab-title-bar-position  .markdown-preview-view {\n  padding-left: unset;\n}\n\nbody.tab-title-bar-position .workspace-split.mod-root .workspace-leaf-content[data-type='markdown'] .view-content {\n  padding-left: 2.5rem;\n}\n\nbody.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header-title-container.web-browser-header-bar {\n  top: unset;\n}\n\nbody.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .titlebar-button.mod-logo {\n  display: block;\n  margin-left: 5px;\n  margin-top: 6px;\n}\nbody.mod-windows.hide-titlebar-close-btn.is-hidden-frameless:not(.show-ribbon) .titlebar-button.mod-logo\n{\ndisplay: none;\n}\nbody.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer .view-header {\n  padding-left: 24px;\n}\nbody.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer.view-button-front .workspace-leaf-content:is([data-mode=\"preview\"],[data-mode=\"source\"]) .view-header .view-actions>:is([aria-label^=\"该面板处于编辑视图中\"],[aria-label^=\"Current view: editing\"]) {\n  left:30px\n}\nbody.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer.view-button-front .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^=\"该面板处于阅读视图中\"],[aria-label^=\"Current view: reading\"]) {\n  left: 30px;\n}\n\nbody.view-button-front:not(.tab-title-bar-position) .view-header {\n  padding-left: 32px !important;\n}\nbody.hide-titlebar-close-btn.hide-left-ribbon.is-hidden-frameless .titlebar-button.mod-logo {\n  display: none;\n}\n\nbody.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.side-dock-ribbon.mod-left {\n  padding-top: 26px;\n}\n\nbody.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.mod-left .sidebar-toggle-button {\n  padding-top: 56px;\n}\nbody.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.mod-left.is-collapsed .sidebar-toggle-button {\n  padding-top: 54px;\n}\nbody.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.mod-left .side-dock-actions {\n  padding-top: 12px;\n}\nbody.hide-titlebar-close-btn.is-hidden-frameless .titlebar-button-container.mod-right:not(:hover) {\n  transform: translateY(calc( -1 * var(--header-height) + 6px));\n  transition: all 0.6s linear;\n}\n\nbody.hide-titlebar-close-btn.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container:after {\n  top: -20px;\n}\n\nbody.hide-titlebar-close-btn.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container {\n  padding-right: unset;\n}\nbody.hide-titlebar-close-btn.is-hidden-frameless .titlebar-inner:hover .titlebar-button-container.mod-right {\n  transition: all 0.1s linear;\n  transform:translateY(-15px);\n  background: var(--titlebar-background-focused);\n  opacity: 0.8;\n}\nbody.hide-titlebar-close-btn.is-hidden-frameless.mod-linux .titlebar-button,\nbody.hide-titlebar-close-btn.is-hidden-frameless.mod-windows .titlebar-button {\n  padding-bottom: 6px;\n  align-items: flex-end;\n}\n\n.theme-light .view-header-title-container:is(.web-browser-header-bar,.wb-header-bar) input:is(.web-browser-search-bar,.wb-search-bar) {\n  background-image:  url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'  viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon lucide-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position:  4px 7.5px;\n  background-size: 14px;\n  opacity: 0.6;\n  padding: 0 0 0 22px;\n  border: none;\n}\n.theme-dark .view-header-title-container:is(.web-browser-header-bar,.wb-header-bar)  input:is(.web-browser-search-bar,.wb-search-bar) {\n  background-image:  url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'  viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon lucide-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: 4px 7.5px;\n  background-size: 14px;\n  opacity: 0.6;\n  padding: 0 0 0 22px;\n  border: none;\n  background-color: transparent;\n}\n.view-header-title-container:is(.web-browser-header-bar,.wb-header-bar)  input:is(.web-browser-search-bar,.wb-search-bar):focus {\n  opacity: 1;\n}\n.view-header .view-header-title-container:is(.web-browser-header-bar,.wb-header-bar):hover {\n  border:none;\n}\n\n.view-header-title-container:is(.web-browser-header-bar,.wb-header-bar)  .view-header-title-parent:before {\n  content: ' ';\n  margin-left: 10px;\n  color: var(--text-faint);\n  width:10px;\n  height: 6px;\n  background-color: var(--text-muted);\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'  viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon lucide-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E\");\n}\n/* ====web-browser==== */\n.wb-bookmark-bar {\n  overflow: unset;\n  border:none;\n  right: 7px;\n}\n.wb-page-search-bar-text {\n  font-family: var(--font-family-vault);\n}\n.workspace-leaf-content:is([data-type$=\"web-browser-view\"],[data-type=\"surfing-view\"]) .view-actions .view-action {\n  opacity: 1 !important;\n}\n.workspace-leaf-content[data-type$=\"web-browser-view\"] .view-actions>a:not([class*=\"-web-browser\"]) {\n  display: none;\n}\n.workspace-leaf-content:not([data-type$=\"web-browser-view\"]) .view-actions>a[class*=\"-web-browser\"]{\n  display: none;\n}\n.workspace-leaf-content[data-type=\"surfing-view\"] .view-actions>a:not(:is([class*=\"surfing\"],[aria-label^=\"Surfing\"],[aria-label=\"星标\"],[aria-label=\"设置\"],[aria-label=\"star\"],[aria-label=\"settings\"])) {\n  display: none;\n}\n.wb-bookmark-item, .wb-bookmark-folder {\n  width: auto;\n}\n.workspace-leaf-content:not([data-type=\"surfing-view\"]) .view-actions>a:is([class*=\"surfing\"],[aria-label^=\"Surfing\"]) {\n  display: none;\n}\n\n.wb-page-search-bar-input-container input.wb-page-search-bar-input{\n  background-color: var(--background-secondary);\n  box-shadow: var(--window-shadow2);\n}\n.wb-page-search-bar-input-container input.wb-page-search-bar-input:not(:hover){\n  border:none;\n}\n.view-header-title-container.web-browser-header-bar input {\n  padding: 0 10px 0 19px;\n  border: 0;\n  outline: none;\n  background: transparent;\n}\n\n.view-header-title-container.web-browser-header-bar:hover {\n  border: var(--input-border-width) solid;\n  color: var(--interactive-accent-hover);\n  border-radius: 6px;\n}\n/* ==End==web-browser==== */\n\n/* ====new style==== */\nbody.background-settings-workplace-background-image.workspace > .workspace-leaf {\n  background-color: transparent;\n}\nbody:not(.color-scheme-options-simplicity-topaz) .workspace > .workspace-split {\n  background-color: var(--background-secondary-alt);\n}\nbody:not(.color-scheme-options-simplicity-topaz).theme-light .workspace > .workspace-split.mod-left-split {\n  background-color: transparent;\n}\n\nbody.background-settings-workplace-background-image:not(.is-mobile) .workspace-tab-container-before.is-before-active,\nbody.background-settings-workplace-background-image:not(.is-mobile) .workspace-tab-container-after.is-after-active,\nbody.background-settings-workplace-background-image:not(.is-mobile) .workspace-tab-header.is-before-active,\nbody.background-settings-workplace-background-image:not(.is-mobile) .workspace-tab-header.is-after-active,\nbody.background-settings-workplace-background-image:not(.is-mobile) .workspace-split.mod-right-split .workspace-tabs .workspace-leaf,\nbody.background-settings-workplace-background-image:not(.is-mobile) .workspace-split.mod-left-split .workspace-tabs .workspace-leaf,\nbody.background-settings-workplace-background-image:not(.is-mobile) .workspace-leaf-resize-handle,\nbody.background-settings-workplace-background-image .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tab-header.is-active {\n  background-color: transparent;\n}\n\nbody.toggle-header-bottom-line .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header {\n  --page-border-bottom: transparent;\n}\nbody.toggle-header-bottom-line.show-view-header .view-header {\n  --page-border-bottom: transparent;\n  border-top-left-radius:var(--radius-m);\n  border-top-right-radius: var(--radius-m);\n}\n\n.workspace-split.mod-root .workspace-tab-header-container-inner .workspace-tab-header:first-child {\n  margin-left: 1rem;\n}\n\nbody.background-settings-workplace-background-image .workspace-split.mod-root .workspace-tab-header.is-active::before,\nbody.background-settings-workplace-background-image .workspace-split.mod-root .workspace-tab-header.is-active::after {\n  /* box-shadow: inset 0 0 0 var(--tab-outline-width) transparent, 0 0 0 calc(var(--tab-curve) * 4) var(--background-secondary); */\n}\n\nbody.theme-dark:not(.background-settings-workplace-background-image) .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tabs .workspace-leaf-resize-handle {\n  --divider-color: var(--background-primary);\n}\n.workspace-tabs:not(.mod-top) .workspace-tab-header-container {\n  background-color:transparent;\n}\n/*** emoji toolbar**/\n.callout  img.emoji {\n  display: inline-block!important;\n}\n/**emoji toolbar*****/\n\nbody.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header {\n  background-color: transparent;\n  box-shadow: none;\n}\nbody.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header::before,\nbody.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header::after {\n  display: none;\n}\nbody.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header.is-active {\n  border-radius: 0;\n  border-bottom: 2px solid var(--text-accent);\n  margin-bottom: 0px;\n  padding-bottom: 0px;\n}\nbody.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header.is-active .workspace-tab-header-inner {\n  border-radius: var(--tab-radius) var(--tab-radius) 0px 0px;\n  margin-top: 0.5px;\n  padding-bottom: 4px;\n}\nbody.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header ::after {\n  display: none;\n}\nbody.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header:hover .workspace-tab-header-inner {\n  background-color: var(--background-modifier-hover);\n}\n\nbody.safari-tab-style .workspace-tabs:not(.mod-stacked) .workspace-tab-header::before,\nbody.safari-tab-style .workspace-tabs:not(.mod-stacked) .workspace-tab-header::after,\nbody.safari-tab-style .workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner::after {\n  display: none;\n}\n\nbody.safari-tab-style .mod-vertical:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-container-inner,\nbody.safari-tab-style .mod-horizontal:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-container-inner {\n  align-items: center;\n  margin: 0;\n  width: 100%;\n}\n\nbody.safari-tab-style .mod-vertical:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header,\nbody.safari-tab-style .mod-horizontal:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header {\n  border-radius: 6px;\n  box-shadow: none;\n  height:  calc(var(--header-height) * 0.7);\n  margin-left: 12px;\n  padding: 0 !important;\n  transition: 400ms, background-color 150ms ease-in-out;\n}\n\nbody.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header {\n  transition: 400ms;\n}\n\nbody.safari-tab-style .workspace-tabs:not(.mod-stacked) .workspace-tab-header:first-child {\n  margin-left: 0;\n}\n\nbody.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner {\n  padding: 0 4px 0 8px;\n  transition: 400ms;\n}\nbody.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner,\nbody.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner-close-button,\nbody.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner-icon {\n  color: var(--text-muted);\n}\n\nbody.safari-tab-style .workspace .mod-root .workspace-tab-header-inner::after {\n  display: none;\n}\n\nbody.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active {\n  flex-grow: 1.67;\n  max-width: 300px;\n}\n\nbody.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked).mod-active .workspace-tab-header.is-active .workspace-tab-header-inner,\nbody.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked).mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-title,\nbody.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked).mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-close-button,\nbody.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked).mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-icon {\n  color: var(--text-noraml);\n  font-weight:bold;\n}\n\nbody.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active:hover {\n  background-color: var(--background-modifier-border);\n}\n\nbody.safari-tab-style.theme-light .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header {\n  border: 1px solid  var(--tab-outline-color);\n}\nbody.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header {\n  border: 1px solid  rgba(var(--mono-rgb-0), .25) ;\n}\n\nbody.transparent-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header {\n  --tab-background-active: transparent;\n  --tab-outline-width: transparent;\n}\nbody.transparent-tab-style.color-scheme-options-simplicity-topaz.theme-dark:not(.background-settings-workplace-background-image) .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  background-color: var(--tab-background-active);\n}\n\nbody.transparent-tab-style.theme-dark .workspace-split.mod-root .workspace-tab-header.is-active.mod-active {\n  background-color: var(--tab-background-active);\n}\n\n.is-mobilebody,\n.is-mobile .app-container,\n.is-mobile .horizontal-main-container {\n  background-color: var(--background-secondary);\n}\n\n.is-mobile.theme-light .mobile-toolbar {\n  background-color: var(--background-primary-alt);\n}\n\n.is-frameless:is(.is-mobile,.is-tablet).mod-windows {\n  background-color: var(--background-secondary-alt) !important;\n}\n\n.is-frameless:is(.is-mobile,.is-tablet).mod-windows::after {\n  content: \"\";\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  height: calc(var(--titlebar-height) / var(--zoom-factor));\n  width: 100%;\n  background-color: var(--background-mobile-padding-top);\n  --background-mobile-padding-top: var(--background-secondary-alt);\n}\n\nbody.background-settings-workplace-background-image.theme-light.is-frameless:is(.is-mobile,.is-tablet).mod-windows::after {\n  --background-mobile-padding-top: #f9f9f9;\n}\nbody.background-settings-workplace-background-image.theme-dark.is-frameless:is(.is-mobile,.is-tablet).mod-windows::after {\n  --background-mobile-padding-top: #000000;\n}\n\n.workspace-tab-header.mod-active .workspace-tab-header-inner-title {\n  font-weight: bold;\n}\n\n.theme-dark .mod-root .workspace-tabs .workspace-leaf {\n  background-color: transparent;\n}\n\n.workspace-tab-header-inner-icon img {\n  margin:auto;\n}\n\n.cm-s-obsidian span.cm-hmd-escape-char {\n  color: var(--text-muted);\n}\n\n\n/* ================================== */\n/* ========= Canvas ========= */\n/* ================================== */\n.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view {\n  padding: 0 0.5em;\n}\n\nbody.canvas-workplace-background .workspace-leaf-content[data-type=\"canvas\"],\nbody.canvas-workplace-background .canvas-wrapper {\n  --background-primary: var(--color-base-00);\n}\n\n/* hide canvas export grid */\nbody.toggle-canvas-grid .canvas-wrapper .canvas-background rect,\n.canvas-wrapper.is-screenshotting .canvas-background rect {\n  opacity: 0;\n}\n\n\n/*=======canvas-card-focus-mode========\n=====Modified by Cuman from boninall=====*/\n/*\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-1) .canvas-edges>:not(.mod-canvas-color-1),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-2) .canvas-edges>:not(.mod-canvas-color-2),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-3) .canvas-edges>:not(.mod-canvas-color-3),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-4) .canvas-edges>:not(.mod-canvas-color-4),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-5) .canvas-edges>:not(.mod-canvas-color-5),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-6) .canvas-edges>:not(.mod-canvas-color-6),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-custom) .canvas-edges>:not(.mod-canvas-color-custom),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-1) .canvas-node.is-themed:not(:is(.mod-canvas-color-1)),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-2) .canvas-node.is-themed:not(:is(.mod-canvas-color-2)),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-3) .canvas-node.is-themed:not(:is(.mod-canvas-color-3)),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-4) .canvas-node.is-themed:not(:is(.mod-canvas-color-4)),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-5) .canvas-node.is-themed:not(:is(.mod-canvas-color-5)),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-6) .canvas-node.is-themed:not(:is(.mod-canvas-color-6)),\nbody.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-custom) .canvas-node.is-themed:not(.mod-canvas-color-custom) {\n  filter:grayscale(0.9);\n}\n*/\n\n.canvas-node-content.markdown-embed table {\n  text-align: start;\n}\n\n \n\n.workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tab-container .workspace-leaf-content:not([data-type=\"file-properties\"]) \n:is(.metadata-container,.frontmatter-container) {\n  display: none;\n}\n\n.workspace-leaf-content[data-type=\"recent-files\"] .view-content {\n  overflow-x: hidden;\n}\n\n.canvas-node-container h1 {\n  font-size: calc(var(--h1-size) );\n  text-align: center;\n}\n\n.canvas-node-placeholder::after {\n  background-color: rgba(var(--canvas-color), 0.3);\n}\n.canvas-icon-placeholder svg {\n  opacity: 0.5;\n}\nbody.canvas-card-text-middle .canvas-node-container .canvas-node-content.markdown-embed:not(.is-loaded) {\n  text-align: center;\n}\n\ndiv#popup-search {\n  background-color: var(--color-base-10);\n}\n \nbody:not(.is-phone) .workspace-leaf.mod-active .tree-item-self.has-focus {\n  --background-modifier-border-focus: color-mix(in srgb, var(--theme-color), transparent 30%);\n}\n\n.tree-item-self {\n  align-items: center;\n}\n\nbody.bt-bubble-layout {\n  --divider-color: transparent;\n  --divider-color-hover: var(--backgrouund-modifier-border);\n}\n\nbody:not(.bt-bubble-layout) .setting-item[data-id=\"bt-bubble-settings\"],\nbody:not(.bt-bubble-layout) .setting-item[data-id=\"bt-bubble-not-file-tree\"],\nbody:not(.bt-bubble-layout) .setting-item[data-id=\"bt-bubble-layout-hide-borders\"],\nbody:not(.bt-bubble-layout) .setting-item[data-id=\"bt-bubble-buttons\"],\nbody:not(.bt-bubble-layout) .setting-item[data-id=\"bt-bubble-layout-padding\"],\nbody:not(.bt-bubble-layout) .setting-item[data-id=\"bt-bubble-radius\"] {\n  display: none;\n}\n\nbody.bt-bubble-layout .mod-vertical .workspace-tabs,\nbody.bt-bubble-layout .mod-left-split .workspace-tab-container,\nbody.bt-bubble-layout .mod-right-split .workspace-tab-container {\n  padding: 0 var(--bt-bubble-layout-padding);\n}\n\nbody.bt-bubble-layout .mod-left-split .workspace-tab-header.has-active-menu, \nbody.bt-bubble-layout .mod-right-split .workspace-tab-header.has-active-menu, \nbody.bt-bubble-layout .mod-left-split .workspace-tab-header.is-active, \nbody.bt-bubble-layout .mod-right-split .workspace-tab-header.is-active {\n  background-color: var(--background-primary);\n  border: 1px solid var(--bt-bubble-border-color);\n}\nbody.bt-bubble-layout   .workspace-tab-header-container\n{\n  background-color: transparent;\n  --tab-background-active: var(--background-primary);\n}\nbody.bt-bubble-layout.theme-dark.background-settings-workplace-background-image:not(.color-scheme-options-simplicity-topaz) .workspace-ribbon.side-dock-ribbon.mod-left\n{\n  background-color: var(--background-secondary-alt);\n}\n\n \nbody.background-settings-workplace-background-image.theme-dark:not(:is(.color-scheme-options-simplicity-topaz,.hide-left-ribbon,.hide-left-ribbon-retention-drawer,.bt-bubble-ribbon-hide-left)) .workspace-ribbon.mod-left:after {\n \n  width: var(--ribbon-width);\n \n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  background-color: var(--background-secondary-alt);\n  content: \" \";\n  pointer-events: none; \n}\n \n \nbody.bt-bubble-layout.bt-bubble-buttons .mod-left-split .workspace-tab-header-container-inner, \nbody.bt-bubble-layout.bt-bubble-buttons .mod-right-split .workspace-tab-header-container-inner {\n  padding: 4px;\n  margin: 4px 0 4px var(--bt-bubble-layout-padding);\n  border-radius: var(--radius-m);\n  background-color: color-mix(in srgb, var(--background-primary) 80%, transparent);\n}\nbody.bt-bubble-layout.bt-bubble-buttons .mod-left-split .workspace-tab-header.has-active-menu, \nbody.bt-bubble-layout.bt-bubble-buttons .mod-right-split .workspace-tab-header.has-active-menu, \nbody.bt-bubble-layout.bt-bubble-buttons .mod-left-split .workspace-tab-header.is-active, \nbody.bt-bubble-layout.bt-bubble-buttons .mod-right-split .workspace-tab-header.is-active {\n  background-color: color-mix(in srgb, lightgray, var(--background-secondary-alt) 75%);\n  border: 1px solid transparent;\n}\nbody.bt-bubble-layout.bt-bubble-not-file-tree .workspace-leaf-content:is([data-type=\"file-explorer\"],[data-type=\"mk-file-view\"]),\nbody.bt-bubble-layout .workspace-split .workspace-leaf-content:not(:is([data-type=\"file-explorer\"],[data-type=\"mk-file-view\"]))  {\n  border-radius: var(--bt-bubble-radius, var(--radius-l));\n  background-color: var(--background-primary);\n  border: 1px solid var(--bt-bubble-border-color);\n  margin-bottom: var(--bt-bubble-layout-padding);\n}\nbody.theme-dark.color-scheme-options-simplicity-topaz.bt-bubble-layout.bt-bubble-not-file-tree:not(.background-settings-workplace-background-image) .workspace-leaf-content:is([data-type=\"file-explorer\"],[data-type=\"mk-file-view\"]),\nbody.theme-dark.color-scheme-options-simplicity-topaz.bt-bubble-layout:not(.background-settings-workplace-background-image) .workspace-split\n .workspace-leaf-content:not(:is([data-type=\"file-explorer\"],[data-type=\"mk-file-view\"]))  {\n \n  background-color: var(--background-primary-alt);\n\n}\n\nbody.bt-bubble-layout.color-scheme-options-simplicity-topaz  .workspace-leaf-content .view-header,\nbody:not(.is-mobile).bt-bubble-layout.color-scheme-options-simplicity-topaz:not(.background-image-settings-switch) .workspace-split.mod-root .view-content\n{\n  background-color: transparent;\n}\nbody.bt-bubble-layout .workspace-split.mod-right-split .workspace-tabs .workspace-leaf, \nbody.bt-bubble-layout .workspace-split.mod-left-split .workspace-tabs .workspace-leaf,\nbody.bt-bubble-layout .mod-root .workspace-tabs .workspace-leaf {\n  background-color: transparent;\n}\nbody.bt-bubble-layout .workspace-tab-header-container, \nbody.bt-bubble-layout .workspace-ribbon.mod-left:before {\n  border-bottom: none;\n}\nbody.bt-bubble-layout:not(.background-settings-workplace-background-image) .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tabs .workspace-leaf-resize-handle {\n  --divider-color: transparent;\n}\n\nbody.bt-bubble-layout.bt-bubble-layout-hide-borders {\n  --bt-bubble-border-color: transparent;\n  --tab-outline-color: transparent;\n}\nbody.bt-bubble-layout.bt-bubble-layout-hide-borders .workspace-split .workspace-leaf-content\n{\n  border: none;\n}\nbody.bt-bubble-layout.bt-bubble-layout-hide-borders .menu {\n  border: 0 !important;\n}\n\nbody.bt-bubble-layout .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle,\nbody.bt-bubble-layout .workspace-split.mod-right-split > .workspace-leaf-resize-handle,\nbody.bt-bubble-layout .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, \nbody.bt-bubble-layout .workspace-split.mod-left-split > .workspace-leaf-resize-handle {\n  border: none;\n}\n\nbody.background-settings-workplace-background-image:not(.color-scheme-options-simplicity-topaz) .workspace-tabs.mod-active .view-header,\nbody.background-settings-workplace-background-image .workspace-split.mod-root .view-content,\nbody.background-settings-workplace-background-image:not(.color-scheme-options-simplicity-topaz) .workspace-tabs .view-header {\n  background-color: transparent;\n}\n\nbody.background-settings-workplace-background-image .workspace-tab-header-container-inner {\n  margin: 6px -5px 0;\n}\n\n/*Inspired by the OneNote theme in Siyuan software*/\n \n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container {\n  padding: 0 0 0 12px;\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder > .tree-item-children.nav-folder-children {\n  border-left: none;\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.default-tabs):not(.remove-arrow) .nav-folder-collapse-indicator::after {\n  display: none;\n}\n \nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-border .nav-files-container>div>.tree-item.nav-folder {\n  border: 1px solid var(--background-modifier-border);\n  margin: 5px 4px 5px 0;\n  border-radius: 3px;\n  border-left: 2px solid var(--tab-color);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .nav-files-container>div>.tree-item.nav-folder {\n  border: 1px solid color-mix(in srgb, var(--tab-color) 30%, var(--background-secondary));\n  margin: 5px 4px 5px 0;\n  border-radius: 3px;\n  border-left: 3px solid var(--tab-color);\n}\nbody.theme-dark.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .nav-files-container>div>.tree-item.nav-folder {\n  border: none;\n    /* 支持 color-mix 的浏览器使用 color-mix */\n    @supports (border: 1px solid color-mix(in srgb, var(--tab-color) 15%, var(--background-secondary))) {\n      border: 1px solid color-mix(in srgb, var(--tab-color) 15%, var(--background-secondary));\n    }\n  border-left: 3px solid var(--tab-color);\n}\nbody.is-mobile.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .nav-files-container>div>.tree-item.nav-folder {\n  border: 1px solid   var(--background-modifier-border);\n\n}\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.is-grabbing) .tree-item.nav-folder.is-collapsed:hover {\n  background-color: color-mix(in srgb, var(--tab-color) 30%, var(--background-secondary));\n \n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.is-grabbing) .tree-item.nav-folder.is-collapsed .tree-item-self.is-clickable.nav-folder-title:hover\n{\n  background-color:transparent;\n}\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.is-grabbing) .tree-item-self.is-clickable.nav-folder-title:hover {\n  background-color: color-mix(in srgb, var(--tab-color) 20%, var(--background-secondary));\n \n}\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.is-grabbing) .tree-item-self.is-clickable.nav-file-title.is-active, \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.is-grabbing) .tree-item-self.is-clickable.nav-file-title.is-active:hover, \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.is-grabbing) .tree-item-self.is-clickable.nav-file-title:hover {\n  background-color: color-mix(in srgb, var(--tab-color) 20%, var(--background-secondary));\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-border):not(.is-grabbing) .workspace-leaf-content[data-type=\"file-explorer\"] .nav-folder-title, \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-border):not(.is-grabbing) .workspace-leaf-content[data-type=\"file-explorer\"] .tree-item-self.is-clickable.nav-folder-title {\n \n  color:  color-mix(in hsl, var(--tab-color), black 20%);\n}\nbody.theme-dark.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-border):not(.is-grabbing) .workspace-leaf-content[data-type=\"file-explorer\"] .nav-folder-title, \nbody.theme-dark.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-border):not(.is-grabbing) .workspace-leaf-content[data-type=\"file-explorer\"] .tree-item-self.is-clickable.nav-folder-title {\n \n  color:  color-mix(in hsl, var(--tab-color), white 38%);\n}\nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .nav-files-container>div>.tree-item.nav-folder.is-collapsed>.tree-item-self.is-clickable.nav-folder-title::before {\n  content: \"\";\n  width: 6px;\n  height: 20px;\n  position: absolute;\n  margin-left: -30px;\n  border-radius: 3px 0px 0px 3px;\n  background-color: var(--tab-color);\n}\n  \nbody.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .nav-files-container>div>.tree-item.nav-folder>.tree-item-self.is-clickable.nav-folder-title::before {\n  content: \"\";\n  width: 13px;\n  height: 20px;\n  position: absolute;\n  margin-left: -37px;\n  border-radius: 3px 0px 0px 3px;\n  background-color: var(--tab-color);\n}\n  \n\n\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+2)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+2) {\n  --tab-color: var(--Fold0);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+3)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+3) {\n  --tab-color: var(--Fold1);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+4)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+4) {\n  --tab-color: var(--Fold2);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+5)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+5) {\n  --tab-color: var(--Fold3);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+6)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+6) {\n  --tab-color: var(--Fold4);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+7)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+7) {\n  --tab-color: var(--Fold5);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+8)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+8) {\n  --tab-color: var(--Fold6);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+9)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+9) {\n  --tab-color: var(--Fold7);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+10)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+10) {\n  --tab-color: var(--Fold8);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+11)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+11) {\n  --tab-color: var(--Fold9);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+12)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+12) {\n  --tab-color: var(--FoldA);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+13)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+13) {\n  --tab-color: var(--FoldB);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+14)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+14) {\n  --tab-color: var(--FoldC);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+15)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+15) {\n  --tab-color: var(--FoldD);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+16)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+16) {\n  --tab-color: var(--FoldE);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+17)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+17) {\n  --tab-color: var(--FoldF);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+18)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+18) {\n  --tab-color: var(--FoldG);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+19)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+19) {\n  --tab-color: var(--FoldH);\n}\n  \nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n) {\n  --tab-color: var(--FoldI);\n}\n  \n\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+1)::before,\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border) .nav-files-container>div>.tree-item.nav-folder:nth-child(20n+1) {\n  --tab-color: var(--FoldJ);\n}\n  \nbody.remove-first-folder-icon .nav-files-container>div>.tree-item.nav-folder>.tree-item-self.is-clickable.nav-folder-title .nav-folder-title-content::before\n{\n  display: none;\n}\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-title,.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border).folder-icons .nav-folder-children  .nav-folder-title-content::before\n{\n  background-color:var(--tab-color);\n  filter:none;\n  opacity:0.5;\n}\nbody.folder-colorful-custom.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-title,.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border).folder-icons .nav-folder-children  .nav-folder-title-content::before\n{\n  background-color:var(--folder-colorful-custom-color);\n \n}\nbody.folder-colorful-custom.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-title,.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.remove-file-icons) .nav-file-title .nav-file-title-content:not(.mk-tree-text)::before\n{\n  background-color:var(--folder-colorful-custom-color,var(--text-folder-file-icon));\n}\n\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-title,.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.remove-file-icons) .nav-file-title .nav-file-title-content:not(.mk-tree-text)::before\n{\n  background-color:var(--tab-color,var(--text-folder-file-icon));\n  filter:none;\n  opacity:0.5;\n}\nbody.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful-title,.folder-style-change-options-colorful-tab-liked,.folder-style-change-options-colorful-border):not(.default-icons):not(.remove-arrow) .nav-folder-collapse-indicator::before\n{\n  color:var(--tab-color);\n}\n.obsidian-icon-folder-icon {\n  margin: 0 0 0 -18px !important\n}\n\nbody.background-settings-workplace-background-image .workspace-split:not(.mod-root) .workspace-tab-container {\n  background-color: var(--bt-background-split-container);\n}\n\nbody.nowrap-edit-codebox .HyperMD-codeblock {\n  white-space: nowrap;\n}\n\n.modal.mod-settings .vertical-tab-content-container {\n  background: var(--bg-color-settings-6);\n \n}\n \n\n/***checkbox***/\n\n\n\nbody.enable-alternative-checkboxes input[data-task=\"\\\"\"]:checked,\nbody.enable-alternative-checkboxes input[data-task=\"“\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"\\\"\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"\\\"\"]>p>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"“\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"“\"]>p>input:checked {\n    background-position: 50% 50%;\n    background-color: var(--green);\n    border-color: var(--green);\n    background-size: 75%;\n    background-image: url('data:image/svg+xml,%3Csvg xmlns=\"http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg\" width=\"20\" height=\"20\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 24 24\"%3E%3Cpath fill=\"white\" d=\"M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z\"%2F%3E%3C%2Fsvg%3E')\n}\n\nbody.enable-alternative-checkboxes.theme-dark input[data-task=\"\\\"\"]:checked,\nbody.enable-alternative-checkboxes.theme-dark input[data-task=\"“\"]:checked,\nbody.enable-alternative-checkboxes.theme-dark li[data-task=\"\\\"\"]>input:checked,\nbody.enable-alternative-checkboxes.theme-dark li[data-task=\"\\\"\"]>p>input:checked,\nbody.enable-alternative-checkboxes.theme-dark li[data-task=\"“\"]>input:checked,\nbody.enable-alternative-checkboxes.theme-dark li[data-task=\"“\"]>p>input:checked {\n    background-image: url('data:image/svg+xml,%3Csvg xmlns=\"http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg\" width=\"20\" height=\"20\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 24 24\"%3E%3Cpath fill=\"black\" fill-opacity=\"0.7\" d=\"M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z\"%2F%3E%3C%2Fsvg%3E')\n}\n\n\nbody.enable-alternative-checkboxes:not(.tasks) .markdown-preview-view ul li[data-task=\"-\"].task-list-item.is-checked,\nbody.enable-alternative-checkboxes:not(.tasks) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task=\"-\"]),\nbody.enable-alternative-checkboxes:not(.tasks) li[data-task=\"-\"].task-list-item.is-checked {\n    color: var(--text-faint);\n    text-decoration: line-through solid var(--text-faint) 1px\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"*\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"*\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"*\"]>p>input:checked {\n    color: var(--yellow);\n    background-image: none;\n    background-color: currentColor;\n    -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z' /%3E%3C/svg%3E\")\n}\n\nbody.enable-alternative-checkboxes input[data-task=\"l\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"l\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"l\"]>p>input:checked {\n    color: var(--red);\n    background-image: none;\n    background-color: currentColor;\n    -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z' clip-rule='evenodd' /%3E%3C/svg%3E\")\n}\n\n \n\n/* n — Note */\n\nbody.enable-alternative-checkboxes input[data-task=n]:checked,\nbody.enable-alternative-checkboxes li[data-task=n] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=n] > p > input:checked {\n  cursor: default;\n  background-position: center;\n  background: none;\n  background-color: var(--blue);\n  transform: rotate(45deg);\n  -webkit-mask-size: 120%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' style='fill: white;transform: ;msFilter:;'%3E%3Cpath d='M15 11.586V6h2V4a2 2 0 0 0-2-2H9a2 2 0 0 0-2 2v2h2v5.586l-2.707 1.707A.996.996 0 0 0 6 14v2a1 1 0 0 0 1 1h4v3l1 2 1-2v-3h4a1 1 0 0 0 1-1v-2a.996.996 0 0 0-.293-.707L15 11.586z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n\nbody.enable-alternative-checkboxes input[data-task=\"S\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"S\"]>input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"S\"]>p>input:checked {\n    border-color: var(--green);\n    background-color: var(--green);\n    background-size: 100%;\n    background-image: url('data:image/svg+xml,%3Csvg xmlns=\"http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg\" width=\"20\" height=\"20\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 48 48\"%3E%3Cpath fill=\"white\" fill-rule=\"evenodd\" d=\"M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z\" clip-rule=\"evenodd\"%2F%3E%3C%2Fsvg%3E')\n}\n\nbody.enable-alternative-checkboxes.theme-dark input[data-task=\"S\"]:checked,\nbody.enable-alternative-checkboxes.theme-dark li[data-task=\"S\"]>input:checked,\nbody.enable-alternative-checkboxes.theme-dark li[data-task=\"S\"]>p>input:checked {\n    background-image: url('data:image/svg+xml,%3Csvg xmlns=\"http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg\" width=\"20\" height=\"20\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 48 48\"%3E%3Cpath fill-opacity=\"0.8\" fill=\"black\" fill-rule=\"evenodd\" d=\"M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z\" clip-rule=\"evenodd\"%2F%3E%3C%2Fsvg%3E')\n}\n\n\n\n/* i — Info */\n\nbody.enable-alternative-checkboxes input[data-task=i]:checked,\nbody.enable-alternative-checkboxes li[data-task=i] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=i] > p > input:checked {\n  cursor: default;\n  color:var(--text-normal);\n  background-position: center;\n  background-size:25%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='fill:  %23fff' viewBox='0 0 192 512'%3E%3C!--! Font Awesome Pro 6.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M160 448h-32V224c0-17.69-14.33-32-32-32L32 192c-17.67 0-32 14.31-32 32s14.33 31.1 32 31.1h32v192H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h128c17.67 0 32-14.31 32-32S177.7 448 160 448zM96 128c26.51 0 48-21.49 48-48S122.5 32.01 96 32.01s-48 21.49-48 48S69.49 128 96 128z'/%3E%3C/svg%3E\");\n}\n\n\n/* / — In Progress */\nbody.enable-alternative-checkboxes input[data-task=\"/\"],\nbody.enable-alternative-checkboxes li[data-task=\"/\"] > input,\nbody.enable-alternative-checkboxes li[data-task=\"/\"] > p > input {\n  border-radius: var(--ch-radius);\n}\nbody.enable-alternative-checkboxes input[data-task=\"/\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"/\"] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"/\"] > p > input:checked {\n  background-image: none;\n}\nbody.enable-alternative-checkboxes.theme-light input[data-task=\"/\"]:checked,\nbody.enable-alternative-checkboxes.theme-dark input[data-task=\"/\"]:checked,\nbody.enable-alternative-checkboxes.theme-light li[data-task=\"/\"] > input:checked,\nbody.enable-alternative-checkboxes.theme-dark li[data-task=\"/\"] > input:checked,\nbody.enable-alternative-checkboxes.theme-light li[data-task=\"/\"] > p > input:checked,\nbody.enable-alternative-checkboxes.theme-dark li[data-task=\"/\"] > p > input:checked {\n  background: var(--text-faint);\n}\n\n/* S — Amount */\n\nbody.enable-alternative-checkboxes input[data-task=S]:checked,\nbody.enable-alternative-checkboxes li[data-task=S] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=S] > p > input:checked {\n  cursor: default;\n  background-position: center;\n  background-size: 100%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' style='fill: white;transform: ;msFilter:;'%3E%3Cpath d='M15.999 8.5h2c0-2.837-2.755-4.131-5-4.429V2h-2v2.071c-2.245.298-5 1.592-5 4.429 0 2.706 2.666 4.113 5 4.43v4.97c-1.448-.251-3-1.024-3-2.4h-2c0 2.589 2.425 4.119 5 4.436V22h2v-2.07c2.245-.298 5-1.593 5-4.43s-2.755-4.131-5-4.429V6.1c1.33.239 3 .941 3 2.4zm-8 0c0-1.459 1.67-2.161 3-2.4v4.799c-1.371-.253-3-1.002-3-2.399zm8 7c0 1.459-1.67 2.161-3 2.4v-4.8c1.33.239 3 .941 3 2.4z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* \" — Quote */\nbody.enable-alternative-checkboxes input[data-task='\"']:checked,\nbody.enable-alternative-checkboxes li[data-task='\"'] > p > input:checked {\n  cursor: default;\n  background-position: center;\n  background-size: 80%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' style='fill: rgba(255, 255, 255, 1);transform: ;msFilter:;'%3E%3Cpath d='m21.95 8.721-.025-.168-.026.006A4.5 4.5 0 1 0 17.5 14c.223 0 .437-.034.65-.065-.069.232-.14.468-.254.68-.114.308-.292.575-.469.844-.148.291-.409.488-.601.737-.201.242-.475.403-.692.604-.213.21-.492.315-.714.463-.232.133-.434.28-.65.35l-.539.222-.474.197.484 1.939.597-.144c.191-.048.424-.104.689-.171.271-.05.56-.187.882-.312.317-.143.686-.238 1.028-.467.344-.218.741-.4 1.091-.692.339-.301.748-.562 1.05-.944.33-.358.656-.734.909-1.162.293-.408.492-.856.702-1.299.19-.443.343-.896.468-1.336.237-.882.343-1.72.384-2.437.034-.718.014-1.315-.028-1.747a7.028 7.028 0 0 0-.063-.539zm-11 0-.025-.168-.026.006A4.5 4.5 0 1 0 6.5 14c.223 0 .437-.034.65-.065-.069.232-.14.468-.254.68-.114.308-.292.575-.469.844-.148.291-.409.488-.601.737-.201.242-.475.403-.692.604-.213.21-.492.315-.714.463-.232.133-.434.28-.65.35l-.539.222c-.301.123-.473.195-.473.195l.484 1.939.597-.144c.191-.048.424-.104.689-.171.271-.05.56-.187.882-.312.317-.143.686-.238 1.028-.467.344-.218.741-.4 1.091-.692.339-.301.748-.562 1.05-.944.33-.358.656-.734.909-1.162.293-.408.492-.856.702-1.299.19-.443.343-.896.468-1.336.237-.882.343-1.72.384-2.437.034-.718.014-1.315-.028-1.747a7.571 7.571 0 0 0-.064-.537z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* I — Idea / Lightbulb */\n\nbody.enable-alternative-checkboxes input[data-task=I]:checked,\nbody.enable-alternative-checkboxes li[data-task=I] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=I] > p > input:checked {\n    background-color:var(--yellow);\n    background-image: none;\n    -webkit-mask-size: 100%;\n    -webkit-mask-position: 50% 50%;\n    -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='9' y1='18' x2='15' y2='18'%3E%3C/line%3E%3Cline x1='10' y1='22' x2='14' y2='22'%3E%3C/line%3E%3Cpath d='M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* p - Pro */\n\nbody.enable-alternative-checkboxes input[data-task=p]:checked,\nbody.enable-alternative-checkboxes li[data-task=p] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=p] > p > input:checked {\n  cursor: default;\n  background-color: var(--yellow);\n  background-image: none;\n  -webkit-mask-size: 90%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='36' height='36' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E&lt;!--! Atomicons Free 1.00 by @atisalab License - https://atomicons.com/license/ (Icons: CC BY 4.0) Copyright 2021 Atomicons --&gt;%3Cpath d='M7,9l4-7h.69a2,2,0,0,1,2,2.28L13,9h6.67a2,2,0,0,1,2,2.3l-1.39,9a2,2,0,0,1-2,1.7H7Z'%3E%3C/path%3E%3Cpath d='M2,11v9a2,2,0,0,0,2,2H7V9H4A2,2,0,0,0,2,11Z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* c - Con */\n\nbody.enable-alternative-checkboxes input[data-task=c]:checked,\nbody.enable-alternative-checkboxes li[data-task=c] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=c] > p > input:checked {\n  cursor: default;\n  background-image: none;\n  background-color: var(--text-faint);\n  -webkit-mask-size: 90%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='36' height='36' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E&lt;!--! Atomicons Free 1.00 by @atisalab License - https://atomicons.com/license/ (Icons: CC BY 4.0) Copyright 2021 Atomicons --&gt;%3Cpath d='M7,9l4-7h.69a2,2,0,0,1,2,2.28L13,9h6.67a2,2,0,0,1,2,2.3l-1.39,9a2,2,0,0,1-2,1.7H7Z'%3E%3C/path%3E%3Cpath d='M2,11v9a2,2,0,0,0,2,2H7V9H4A2,2,0,0,0,2,11Z'%3E%3C/path%3E%3C/svg%3E\");\n  transform: scaleY(-1);\n}\n\n\n/* b - Bookmark */\n\nbody.enable-alternative-checkboxes input[data-task=b]:checked,\nbody.enable-alternative-checkboxes li[data-task=b] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=b] > p > input:checked {\n  cursor: default;\n  background-image: none;\n  -webkit-mask-size: 100%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' style='fill: white;transform: ;msFilter:;'%3E%3Cpath d='M19 10.132v-6c0-1.103-.897-2-2-2H7c-1.103 0-2 .897-2 2V22l7-4.666L19 22V10.132z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* f - Fire */\nbody.enable-alternative-checkboxes input[data-task=f]:checked,\nbody.enable-alternative-checkboxes li[data-task=f] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=f] > p > input:checked {\n  cursor: default;\n  background-color: var(--red);\n  background-image: none;\n  -webkit-mask-size: 100%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' style='fill: white;transform: ;msFilter:;'%3E%3Cpath d='M16.5 8c0 1.5-.5 3.5-2.9 4.3.7-1.7.8-3.4.3-5-.7-2.1-3-3.7-4.6-4.6-.4-.3-1.1.1-1 .7 0 1.1-.3 2.7-2 4.4C4.1 10 3 12.3 3 14.5 3 17.4 5 21 9 21c-4-4-1-7.5-1-7.5.8 5.9 5 7.5 7 7.5 1.7 0 5-1.2 5-6.4 0-3.1-1.3-5.5-2.4-6.9-.3-.5-1-.2-1.1.3'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* w - Win */\n\nbody.enable-alternative-checkboxes input[data-task=w]:checked,\nbody.enable-alternative-checkboxes li[data-task=w] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=w] > p > input:checked {\n  cursor: default;\n  background-color: var(--yellow);\n  background-position: center;\n  background-image: none;\n  -webkit-mask-size: 100%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' style='fill: white;transform: ;msFilter:;'%3E%3Cpath d='M21 4h-3V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v1H3a1 1 0 0 0-1 1v3c0 4.31 1.8 6.91 4.82 7A6 6 0 0 0 11 17.91V20H9v2h6v-2h-2v-2.09A6 6 0 0 0 17.18 15c3-.1 4.82-2.7 4.82-7V5a1 1 0 0 0-1-1zM4 8V6h2v6.83C4.22 12.08 4 9.3 4 8zm14 4.83V6h2v2c0 1.3-.22 4.08-2 4.83z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n/* k - Key */\nbody.enable-alternative-checkboxes input[data-task=k]:checked,\nbody.enable-alternative-checkboxes li[data-task=k] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=k] > p > input:checked {\n  cursor: default;\n  background-color: var(--green);\n  background-position: center;\n  background-image: none;\n  -webkit-mask-size: 100%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' style='fill: white;transform: rotate(45deg);msFilter:;'%3E%3Cpath d='M7 17a5.007 5.007 0 0 0 4.898-4H14v2h2v-2h2v3h2v-3h1v-2h-9.102A5.007 5.007 0 0 0 7 7c-2.757 0-5 2.243-5 5s2.243 5 5 5zm0-8c1.654 0 3 1.346 3 3s-1.346 3-3 3-3-1.346-3-3 1.346-3 3-3z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* u - Up */\nbody.enable-alternative-checkboxes input[data-task=u]:checked,\nbody.enable-alternative-checkboxes li[data-task=u] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=u] > p > input:checked {\n  cursor: default;\n  background-color: var(--green);\n  background-position: center center;\n  background-size: 85%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='transform: rotate(-10deg);' fill='white' viewBox='0 0 576 512'%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M384 160C366.3 160 352 145.7 352 128C352 110.3 366.3 96 384 96H544C561.7 96 576 110.3 576 128V288C576 305.7 561.7 320 544 320C526.3 320 512 305.7 512 288V205.3L342.6 374.6C330.1 387.1 309.9 387.1 297.4 374.6L191.1 269.3L54.63 406.6C42.13 419.1 21.87 419.1 9.372 406.6C-3.124 394.1-3.124 373.9 9.372 361.4L169.4 201.4C181.9 188.9 202.1 188.9 214.6 201.4L320 306.7L466.7 159.1L384 160z'/%3E%3C/svg%3E\");\n}\n\n\n/* d - Down */\nbody.enable-alternative-checkboxes input[data-task=d]:checked,\nbody.enable-alternative-checkboxes li[data-task=d] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=d] > p > input:checked {\n  cursor: default;\n  background-color: var(--blue);\n  background-position: center center;\n  background-size: 85%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='transform: rotate(10deg) scaleY(-1);' fill='white' viewBox='0 0 576 512'%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M384 160C366.3 160 352 145.7 352 128C352 110.3 366.3 96 384 96H544C561.7 96 576 110.3 576 128V288C576 305.7 561.7 320 544 320C526.3 320 512 305.7 512 288V205.3L342.6 374.6C330.1 387.1 309.9 387.1 297.4 374.6L191.1 269.3L54.63 406.6C42.13 419.1 21.87 419.1 9.372 406.6C-3.124 394.1-3.124 373.9 9.372 361.4L169.4 201.4C181.9 188.9 202.1 188.9 214.6 201.4L320 306.7L466.7 159.1L384 160z'/%3E%3C/svg%3E\");\n}\n\n\n/* r - Rule/Law */\n\nbody.enable-alternative-checkboxes input[data-task=r]:checked,\nbody.enable-alternative-checkboxes li[data-task=r] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=r] > p > input:checked {\n  cursor: default;\n  background-color:var(--green);\n  background-image: none;\n  -webkit-mask-size: 100%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m16 16 3-8 3.001 8A5.002 5.002 0 0 1 16 16z'%3E%3C/path%3E%3Cpath d='m2 16 3-8 3.001 8A5.002 5.002 0 0 1 2 16z'%3E%3C/path%3E%3Cpath d='M7 21h10'%3E%3C/path%3E%3Cpath d='M12 3v18'%3E%3C/path%3E%3Cpath d='M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n/* m - Measure */\n\nbody.enable-alternative-checkboxes input[data-task=m]:checked,\nbody.enable-alternative-checkboxes li[data-task=m] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=m] > p > input:checked {\n  cursor: default;\n  background-color:var(--blue);\n  background-image: none;\n  -webkit-mask-size: 100%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m16 2 6 6L8 22l-6-6L16 2'%3E%3C/path%3E%3Cpath d='m7.5 10.5 2 2'%3E%3C/path%3E%3Cpath d='m10.5 7.5 2 2'%3E%3C/path%3E%3Cpath d='m13.5 4.5 2 2'%3E%3C/path%3E%3Cpath d='m4.5 13.5 2 2'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* M - Medical */\nbody.enable-alternative-checkboxes input[data-task=M]:checked,\nbody.enable-alternative-checkboxes li[data-task=M] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=M] > p > input:checked {\n  cursor: default;\n  background-color: var(--red);\n  background-position: center center;\n  background-size: 75%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' style='fill: white;transform: ;msFilter:;'%3E%3Cpath d='M15 2.013H9V9H2v6h7v6.987h6V15h7V9h-7z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* t - Time */\n\nbody.enable-alternative-checkboxes input[data-task=t]:checked,\nbody.enable-alternative-checkboxes li[data-task=t] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=t] > p > input:checked {\n  cursor: default;\n  background-color:var(--text-accent);\n  background-position: center center;\n  background-size: 90%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E\");\n}\n\n\n/* T - Telephone */\n\nbody.enable-alternative-checkboxes input[data-task=T]:checked,\nbody.enable-alternative-checkboxes li[data-task=T] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=T] > p > input:checked {\n  cursor: default;\n  background-color:var(--blue);\n  background-image: none;\n  -webkit-mask-size: 95%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n/* P - Person */\n\nbody.enable-alternative-checkboxes input[data-task=P]:checked,\nbody.enable-alternative-checkboxes li[data-task=P] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=P] > p > input:checked {\n  cursor: default;\n  background-position: center center;\n  background-size: 90%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E\");\n}\n\n\nbody.enable-alternative-checkboxes input[data-task=\"#\"]:checked,\nbody.enable-alternative-checkboxes li[data-task=\"#\"] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=\"#\"] > p > input:checked {\n  cursor: default;\n  background-color:var(--green);\n  background-image: none;\n  -webkit-mask-size: 100%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 12V2h10l9.44 9.44a2 2 0 0 1 0 2.82l-7.18 7.18a2 2 0 0 1-2.82 0L2 12Z'%3E%3C/path%3E%3Cpath d='M7 7h.01'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\nbody.enable-alternative-checkboxes input[data-task=F]:checked,\nbody.enable-alternative-checkboxes li[data-task=F] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=F] > p > input:checked {\n  cursor: default;\n  background-color:var(--yellow);\n  background-image: none;\n  -webkit-mask-size: 100%;\n  -webkit-mask-position: 50% 50%;\n  -webkit-mask-image : url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='white' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='13 2 3 14 12 14 11 22 21 10 12 10 13 2'%3E%3C/polygon%3E%3C/svg%3E\");\n}\n\n/* L - Translate/Language */\nbody.enable-alternative-checkboxes input[data-task=L]:checked,\nbody.enable-alternative-checkboxes li[data-task=L] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=L] > p > input:checked {\n  cursor: default;\n  background-color: var(--green);\n  background-position: center center;\n  background-size: 80%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 8 6 6'%3E%3C/path%3E%3Cpath d='m4 14 6-6 2-3'%3E%3C/path%3E%3Cpath d='M2 5h12'%3E%3C/path%3E%3Cpath d='M7 2h1'%3E%3C/path%3E%3Cpath d='m22 22-5-10-5 10'%3E%3C/path%3E%3Cpath d='M14 18h6'%3E%3C/path%3E%3C/svg%3E\");\n}\n\nbody.enable-alternative-checkboxes input[data-task=W]:checked,\nbody.enable-alternative-checkboxes li[data-task=W] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=W] > p > input:checked {\n  cursor: default;\n  background-position: center center;\n  background-size: 100%;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' style='fill: white;transform: ;msFilter:;'%3E%3Cpath d='M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.514 2 12 2zM4 12c0-.899.156-1.762.431-2.569L6 11l2 2v2l2 2 1 1v1.931C7.061 19.436 4 16.072 4 12zm14.33 4.873C17.677 16.347 16.687 16 16 16v-1a2 2 0 0 0-2-2h-4v-3a2 2 0 0 0 2-2V7h1a2 2 0 0 0 2-2v-.411C17.928 5.778 20 8.65 20 12a7.947 7.947 0 0 1-1.67 4.873z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\nbody.enable-alternative-checkboxes input[data-task=U]:checked,\nbody.enable-alternative-checkboxes li[data-task=U] > input:checked,\nbody.enable-alternative-checkboxes li[data-task=U] > p > input:checked {\n  cursor: default;\n  background-position: center center;\n  background-size: 95%;\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAADKklEQVRYhe2XXWhPcRjHv8fbZLa2yLu8LVaSvNzRyIW0xPJyQYgiN7hCwiQpbsgNygWSQlIkRYrVWiJvIZrCYt5aFPs3NrOPi/Mc/2f//ue/s9mdPTfn/3x/3+f7fc7L7znnL/3vEXS1EJgiaZGkMkmlkook/ZaUknRf0mlJV4MgoBv6/GsaAIuAuySLC0Df7jIfA9zMMEgBT4Aa4BHQkqWJQ91hvgD4boK/gRPAPCAvg9cfWA18dQ20AiX/Yr4a+GViT4GZCWpmmXEUu7tqXu7MrwOFnag96xq40xXzUqDRBK4CfdzafOAiUG/3/Q2wwz9wwFLXwHvDhlre0JF5H+Ceke8D+YYPIHyy4+Ko05jh8GbDSix/11ED24yYAiYalgdU5TAHaHQacxz+1bDplr+MeL2ymA+StNPSXUEQvAQCSSclzcnZueQv7Xj3+4sdx9nxR2wDkrYpnGq1ko4ZtlfSSseplTRV0qSM2tPud4X7/diOpXZ8k8VXAvJJ7+Hlhs0m3PtRvAZG2Np8hz/C5oLd62a3tsnwM5YfiGtggxFeAb2BfsAzJ/QRmGDcycBnwx/arYt0/MRsBgYb/tywlXENRA/ZVsu3O6FfQJnh04AGwx8AxU5jJ+3jlOEjLW8DhmUzH0Z4qVuBEYRbsd4JVRpvCPDe4ZOcxhoziCIFjLS1zYY9iTv7FUaotnyJE2ogPQvOZ5xhGVAMVNJ+/AKsd/rRXKmMa+C4EfZYfskJHXS8FMniuKuJZkILMDyugWojLbD8nRNb7HgfEpgfIZwd0TdEpH0uq7kRPxlptOV+G811vMM5jD8CyzJ0N9paEzA2VwM/jdjf8i9OeJXj5QH7gTqrqSN8U64DBmZoVpD+SNkTax7T0C3XwJVOFevvQxxdxSo6+2kGbHENtGGTMUFdPnCM9HZsN6Q600CB3dMoWoF9uKGTwS8ifIu+dTU34vhR5PwsB8olXZbkL1+TpBpJLxS+1QolzZA0zfGaFL7ADgVB0JbgfHM2sZD0zO8ovhFuwVFJ9RP9MQEKJK2VVC5psqThkholtUiqk/RA0m1J14Ig+BGn0xM9kS3+AIVhhF9MAbHFAAAAAElFTkSuQmCC\");\n}\n\n/****end checkbox****/\n\n\n "
  },
  {
    "path": ".obsidian/workspace.json",
    "content": "{\n  \"main\": {\n    \"id\": \"8a102c2d24869213\",\n    \"type\": \"split\",\n    \"children\": [\n      {\n        \"id\": \"650072354ba3ed0a\",\n        \"type\": \"tabs\",\n        \"children\": [\n          {\n            \"id\": \"b673a08f489141e6\",\n            \"type\": \"leaf\",\n            \"state\": {\n              \"type\": \"markdown\",\n              \"state\": {\n                \"file\": \"Algorithm/二维空间中的点坐标旋转关系.md\",\n                \"mode\": \"source\",\n                \"source\": false,\n                \"backlinks\": false\n              },\n              \"icon\": \"lucide-file\",\n              \"title\": \"二维空间中的点坐标旋转关系\"\n            }\n          },\n          {\n            \"id\": \"342406e2a37143a0\",\n            \"type\": \"leaf\",\n            \"state\": {\n              \"type\": \"release-notes\",\n              \"state\": {\n                \"currentVersion\": \"1.9.10\"\n              },\n              \"icon\": \"lucide-book-up\",\n              \"title\": \"版本说明 1.9.10\"\n            }\n          }\n        ]\n      }\n    ],\n    \"direction\": \"vertical\"\n  },\n  \"left\": {\n    \"id\": \"8eefcc8842d94a28\",\n    \"type\": \"split\",\n    \"children\": [\n      {\n        \"id\": \"fec465c585784149\",\n        \"type\": \"tabs\",\n        \"children\": [\n          {\n            \"id\": \"530bec23dec8aa9b\",\n            \"type\": \"leaf\",\n            \"state\": {\n              \"type\": \"search\",\n              \"state\": {\n                \"query\": \"\",\n                \"matchingCase\": false,\n                \"explainSearch\": false,\n                \"collapseAll\": false,\n                \"extraContext\": false,\n                \"sortOrder\": \"alphabetical\"\n              },\n              \"icon\": \"lucide-search\",\n              \"title\": \"搜索\"\n            }\n          },\n          {\n            \"id\": \"72cd9620b9a13c19\",\n            \"type\": \"leaf\",\n            \"state\": {\n              \"type\": \"bookmarks\",\n              \"state\": {},\n              \"icon\": \"lucide-bookmark\",\n              \"title\": \"书签\"\n            }\n          },\n          {\n            \"id\": \"42828ef04d5832c9\",\n            \"type\": \"leaf\",\n            \"state\": {\n              \"type\": \"file-explorer\",\n              \"state\": {\n                \"sortOrder\": \"alphabetical\",\n                \"autoReveal\": true\n              },\n              \"icon\": \"lucide-folder-closed\",\n              \"title\": \"文件列表\"\n            }\n          }\n        ],\n        \"currentTab\": 2\n      }\n    ],\n    \"direction\": \"horizontal\",\n    \"width\": 343.5\n  },\n  \"right\": {\n    \"id\": \"3887574f99ec0f4e\",\n    \"type\": \"split\",\n    \"children\": [\n      {\n        \"id\": \"e3d41acedb03dcf7\",\n        \"type\": \"tabs\",\n        \"children\": [\n          {\n            \"id\": \"66fe0aad68687e38\",\n            \"type\": \"leaf\",\n            \"state\": {\n              \"type\": \"tag\",\n              \"state\": {\n                \"sortOrder\": \"frequency\",\n                \"useHierarchy\": false,\n                \"showSearch\": false,\n                \"searchQuery\": \"\"\n              },\n              \"icon\": \"lucide-tags\",\n              \"title\": \"标签\"\n            }\n          },\n          {\n            \"id\": \"20fa75cf5ce0e5a0\",\n            \"type\": \"leaf\",\n            \"state\": {\n              \"type\": \"outgoing-link\",\n              \"state\": {\n                \"file\": \"Algorithm/ROS2 Launch文件简介.md\",\n                \"linksCollapsed\": false,\n                \"unlinkedCollapsed\": true\n              },\n              \"icon\": \"links-going-out\",\n              \"title\": \"ROS2 Launch文件简介 的出链列表\"\n            }\n          },\n          {\n            \"id\": \"0420b99078fc5c52\",\n            \"type\": \"leaf\",\n            \"state\": {\n              \"type\": \"outline\",\n              \"state\": {\n                \"file\": \"Algorithm/ROS2_command.md\",\n                \"followCursor\": false,\n                \"showSearch\": false,\n                \"searchQuery\": \"\"\n              },\n              \"icon\": \"lucide-list\",\n              \"title\": \"ROS2_command 的大纲\"\n            }\n          }\n        ],\n        \"currentTab\": 2\n      }\n    ],\n    \"direction\": \"horizontal\",\n    \"width\": 300,\n    \"collapsed\": true\n  },\n  \"left-ribbon\": {\n    \"hiddenItems\": {\n      \"bases:创建新数据库\": false,\n      \"switcher:打开快速切换\": false,\n      \"graph:查看关系图谱\": false,\n      \"canvas:新建白板\": false,\n      \"templates:插入模板\": false,\n      \"command-palette:打开命令面板\": false,\n      \"i18n:I18N\": false\n    }\n  },\n  \"active\": \"b673a08f489141e6\",\n  \"lastOpenFiles\": [\n    \"README.md\",\n    \"Algorithm/欧拉角与坐标系旋转变换.md\",\n    \"slam_config/VSCode使用Clangd.md\",\n    \"slam_config/Matlab标定单目相机内参.md\",\n    \"Algorithm/ROS2_command.md\",\n    \"Algorithm/ros2_cost_function.md\",\n    \"Algorithm/Voronoi Graph.md\",\n    \"Algorithm/media/image-20250804115152515.png\",\n    \"Algorithm/media/image-20250804115131196.png\",\n    \"Algorithm/media/image-20250804115059584.png\",\n    \"Algorithm/media/image-20250804115041054.png\",\n    \"Algorithm/media/image-20250804115017437.png\",\n    \"Algorithm/Theta_star-Any-Angle-Path-Planning-on-Grids.md\",\n    \"Algorithm/media/file-20250804114842372.png\",\n    \"Algorithm/cartographer相关参数解析.md\",\n    \"Algorithm/ROS2的Launch文件简介.md\",\n    \"Algorithm/ROS2 command.md\",\n    \"Algorithm/ROS2 Launch文件简介.md\",\n    \"C++/Eigen几何模块的引入.md\",\n    \"C++/EigenGeometry.md\",\n    \"C++/const成员函数.md\",\n    \"Algorithm/IMU预积分.md\",\n    \"Algorithm/旋转下激光雷达数据与地图产生错位的问题.md\",\n    \"Algorithm/ORBSLAM3学习.md\",\n    \"Algorithm/双目立体视觉SAD匹配算法.md\",\n    \"Algorithm/SVD与非线性优化在最小二乘问题中的区别.md\",\n    \"something_else/如何在Linux中使用Clash.md\",\n    \"Algorithm/重投影误差.md\",\n    \"Algorithm/ROS激光雷达信息、点云信息和PCL信息之间的转换.md\",\n    \"Algorithm/ROSparam的使用.md\",\n    \"Algorithm/Ros中Remap(话题重映射)的两种使用方法.md\",\n    \"Algorithm/ROSNodehandle句柄的理解.md\",\n    \"Algorithm/图优化g2o.pdf\",\n    \"C++/media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS1hOWIzZmMyZWQxNmY2MWU1LnBuZw.png\",\n    \"C++/media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS01NjYzNTk5ZTg0MzNmNWI4LnBuZw.png\",\n    \"slam_config/激光+imu标定(lidar_align​).pdf\",\n    \"Algorithm/lidar_calibration_cn.pdf\",\n    \"Algorithm/media/9.png\",\n    \"Algorithm/media/10.png\",\n    \"未命名.canvas\",\n    \"slam_config/激光雷达+相机标定.pdf\"\n  ]\n}"
  },
  {
    "path": ".obsidian/workspaces.json",
    "content": "{\n  \"workspaces\": {},\n  \"active\": \"\"\n}"
  },
  {
    "path": "Algorithm/2d激光雷达运动补偿方法(去畸变).md",
    "content": "# 2d激光雷达运动补偿方法(去畸变)\n\n## 1.点云畸变原理\n\n我们以VLP-16为例，纵向排列着16个激光发射器和接收器。VLP-16的垂直测量角度从-15°到+15°，每条激光线之间的角分辨率为2°，在10Hz扫描频率下，水平角分辨率是0.2°，理论上一帧有28800个点。\n\n![](media/v2-4dbde4dcd15fd45edec4c09eeea059bf_720w.webp)\n\n#### **下面我们先了解下VLP-16的扫描模式：**\n\nVLP-16中单个线束为一个Scan，全部16线组成的一帧点云称为一个Sweep，一帧内所有的点，都是按顺序串行扫描的，同一个时间点，只会有一次发送，紧接着一次接收。先从水平第一个角度，一般在0°左右扫描这个水平角度上竖直方向所有16个点(对应16个SCAN)的深度，当然这16个点也是串行按顺序的，然后转到下一个水平角度，比如0.3°开始，水平分辨率0.4°，那么下个角度就是0.7°，然后1.1°。一直顺时针扫完一圈，完成一个Sweep数据的采集。\n\n由于垂直角分辨率是2°，VLP-16激光雷达水平安装，我们可以看到地面上的点云有6~7圈。如下图所示：\n\n![](media/2022-10-1817-18-03屏幕截图.png)\n\n在静止的场景中，即激光雷达载体本身静止且环境中没有运动物体，那么采集到的一帧点云没有畸变，如下图所示，每一条线束打到地面上形成一个闭合的圆形：\n\n![](media/v2-985562f15e754452321a2d0dc206ad70_720w.webp)\n\n在运动的场景中，即激光雷达载体运动或者环境中存在运动物体，采集到的点云数据有畸变现象，如下图所示：激光雷达向前运动，物体相对运动，同一种颜色的线表示一条激光打到地面的线束。采集一帧数据起始点时的雷达原点位置和采集一帧数据终止点时的雷达原点位置出现了位移，三维环境信息出现了拉伸的畸变。（运动物体同理）\n\n![](media/v2-0c1267f8d79420fb94c8a5a521f9289e_720w.webp)\n\n#### **由此得出机械式激光点云的畸变产生原因：**\n\n- 激光点的数据不是瞬时获得的\n- 激光测量时伴随载体或目标的运动\n- 激光帧率较低时，载体或目标运动畸变不能忽略\n\n由于雷达计算激光点坐标时，都是以接收到激光束时刻的雷达自身坐标系为基础的，所以载体运动过程中，每一列激光点的基准坐标系都是不一样的，但是他们在同一帧点云里，我们希望能统一在同一个坐标系下，所以我们需要知道每次采集时的坐标系相对于初始时刻坐标系的转换关系。\n\n## 2.去除运动畸变的原理\n\n去除激光雷达运动畸变的原理是把一帧激光雷达数据的每个激光点对应的激光雷达坐标转换到不同时刻的机器人里程计上（近似对应的里程计的位置，达到尽可能去除畸变的目的）。\n\n## 3.畸变补偿方法\n\n点云的畸变是由于一帧数据的采集过程中，雷达载体进行运动导致，因此我们需要先计算采集过程中雷达的运动，然后在每帧中根据每个点的相对时间进行补偿这个运动量，包括旋转和平移的补偿。\n\n#### **点云去畸变的方法包括：**\n\n- 纯估计方法（ICP/VICP）\n- 传感器辅助方法（IMU/ODOM）\n- 融合的方法（用里程计与icp的方法共同使用，即为融合方法）\n\n本文介绍一种利用odom进行畸变校正的方法，相关代码已经上传到[我的仓库](https://github.com/hanlin-cheng/lidar_undistortion_2d)\n\n![](media/v2-e3a66f60807a7f4599f6eab7c814ecb9_720w.webp)\n\n![](media/v2-f6ff6f353dbee518467f058ecec97a31_720w.webp)\n\n![](media/v2-938427f59fe65b9588c0ff31a32ed02b_720w.webp)\n\n## 4.Code\n\n相关实现代码可以在以下仓库中找到\n\nhttps://github.com/hanlin-cheng/lidar_undistortion_2d\n\n## 5.reference\n\nhttps://zhuanlan.zhihu.com/p/351109327\n\nhttps://zhuanlan.zhihu.com/p/470795318"
  },
  {
    "path": "Algorithm/IMU预积分.md",
    "content": "# IMU预积分\n\n## 简述\t\t\n\n​\t\t惯性导航的核心原理基于牛顿第二定律，即位置的导数等于速度，速度的导数等于加速度。如果我们假设参考坐标系下载体的初始速度和初始位置已知，利用载体运动过程中参考系下的加速度信息，就可以不断地进行积分运算，更新实时的速度和位置。\n\n​\t\t传感器总是存在噪声的，惯性导航这种积分运算，必然使得 IMU 器件中的测量噪声不断的累积，从而造成定位和姿态误差。IMU中主要的误差有两种，分别为零偏和噪声。\n\n#### 1.零偏（Bias, Bias Drift, or Offset）\n\n**定义**：零偏是指当 IMU 的传感器（加速度计或陀螺仪）在没有任何运动或旋转的情况下，输出的非零信号。理想情况下，当传感器没有受到加速度或角速度时，它的输出应该是零。然而，由于制造误差、温度变化和电路的不稳定性，传感器在静止状态下仍会产生一些非零输出，这种误差就是零偏。\n\n**影响**：零偏会导致累计误差，特别是在长期积分（如计算位置或角度）时。这是因为零偏引入了一个恒定的误差，即使没有任何实际运动，IMU 也会产生虚假的信号。\n\n**漂移**：零偏不是恒定的，它可能随着时间、温度、震动等环境因素的变化而漂移。因此，在使用 IMU 时，通常需要定期校准以减少零偏对测量精度的影响。\n\n#### 2.噪声（Noise）\n\n**定义**：噪声是指 IMU 输出信号中随机的波动或不规则的变化。噪声来源于电子元器件的热噪声、电磁干扰、量子噪声等。噪声本质上是高频的随机误差，通常以标准差或均方根（RMS）形式量化。\n\n**影响**：噪声会使 IMU 的输出信号变得不稳定，在短时间内造成读数的波动。尽管噪声在单次测量中的影响可能较小，但在进行积分操作（例如计算速度和位置）时，噪声会被累积，从而导致测量结果的精度降低。\n\n**处理方法**：为了减少噪声的影响，常使用滤波器（如卡尔曼滤波器）来平滑信号，并在设计中选择低噪声的传感器。\n\n#### 3.总结\n\n**零偏** 是一种系统性的误差，通常需要通过校准和补偿来处理。\n\n**噪声** 是一种随机误差，通常通过滤波和信号处理来减小影响。\n\n## 为什么要进行IMU预积分\n\n​\tIMU的频率一般在100Hz ~ 1kHz之间，在如此高的数据输出频率下，如果利用好数据，如何高效的利用数据是非常具有挑战任务的，这对于实时性要求比较好的slam系统来说十分重要。IMU测量的角速度和加速度过多次积分可以得到旋转角度和位移量， 那么以什么样的频率积分呢？如果对每个IMU数据都进行积分， 那么计算量将是非常可怕的， 而且也没必要。 所以通常的做法是对两个图像帧之间的IMU数据进行积分， 从而构建图像帧之间的相对位姿约束。 这时就出现了一个问题， 两个图像帧之间的IMU积分需要给定第一个帧的状态估计量作为积分初始条件。 而每次优化迭代， 这些状态估计量都会更新， 这就需要不断重复地进行所有帧之间的IMU积分。IMU预积分就是为了解决这个问题提出的， 它用某种巧妙的设计避免了重复积分， 进而可以推导出优化所需的雅可比矩阵的解析表达式， 比较完美地解决了如何利用好数据和如何高效地利用数据的问题。\n\n## IMU模型和运动积分\n\n\n\n## 附注\n\n![image-20250316235910043](./media/image-20250316235910043.png)\n\n![Snipaste_2024-08-25_20-17-16](./media/Snipaste_2024-08-25_20-17-16.png)\n"
  },
  {
    "path": "Algorithm/ORBSLAM3学习.md",
    "content": "# 1. ORB-SLAM3中为什么要进行三次IMU初始化\n## 1.1 三次初始化的概述\n1.1.1 第一次初始化 (IMU第一阶段)\n- 发生在InitializeIMU()函数中\n\t- 主要目标：\n\t\t- 估计初始重力方向\n\t\t- 计算初始速度\n\t\t- 获得IMU偏置的初始值\n\t\t- 对尺度进行粗略估计\n\t- 条件：\n\t\t- 关键帧数量要足够（>10帧）\n\t\t- 时间跨度要足够（单目>2s，其他>1s）\n1.1.2 第二次初始化 (VIBA 1)\n- 代码中称为Visual-Inertial BA 1\n\t- 主要目标：\n\t\t- 优化第一次初始化的结果\n\t\t- 进一步改善重力方向、速度和尺度估计\n\t- 条件：\n\t\t- 地图已经完成第一次IMU初始化\n\t\t- 跟踪状态正常（Tracking::OK）\n\t\t- 累计时间差大于5s（mTinit>5.0f）\n1.1.3 第三次初始化 (VIBA 2)\n- 代码中称为Visual-Inertial BA 2\n\t- 主要目标：\n\t\t- 进行最终的精细优化\n\t\t- 得到最准确的状态估计\n\t- 条件：\n\t\t- 已完成VIBA 1\n\t\t- 累计时间差大于15s（mTinit>15.0f）\n## 1.2 为什么需要三次初始化\n1.2.1 渐进式优化的需要\n1.2.2 数据积累的需要\n- 第一次：使用最少的数据快速获得初始值\n- 第二次：有了更多数据后进行优化\n- 第三次：积累足够多的数据后进行最终优化\n1.2.3 稳定性考虑\n- IMU数据容易受噪声影响\n- 多次优化可以逐步提高估计的准确性\n- 避免初始化不稳定导致的系统崩溃\n1.2.4 精度提升的需要"
  },
  {
    "path": "Algorithm/ROS2_command.md",
    "content": "## 1. 创建功能包\n```\n$ cd ~/dev_ws/src\n$ ros2 pkg create --build-type ament_cmake learning_pkg_c # C++\n$ ros2 pkg create --build-type ament_python learning_pkg_python # Python\n```\n## 2. colcon build\n\t--packages-select：编译工作空间下面的某一个功能包\n```\ncolcon build --packages-select <package_name>\n```\n## 3. ros2 bag\n### 3.1 常用命令\n| 功能      | 命令                                           |\n| ------- | -------------------------------------------- |\n| 录制话题    | `ros2 bag record <topic1> <topic2> ...`      |\n| 回放数据    | `ros2 bag play <bag_path>`                   |\n| 查看信息    | `ros2 bag info <bag_path>`                   |\n| 转换格式    | `ros2 bag convert <bag_path>`                |\n| 压缩 / 解压 | `--compression-mode`, `--compression-format` |\n\n### 3.2 录制数据\n```\nros2 bag record /topic1 /topic2 //只录制了指定的话题\n```\n\n| 选项        | 说明       |\n| --------- | -------- |\n| -o <name> | 指定输出文件夹名 |\n| -a        | 记录所有话题   |\n\n### 示例：\n```\nros2 bag record -o my_bag /scan /tf --compression-mode file --compression-format zstd\n```\n### 3.3 回放数据\n```\nros2 bag play my_bag\n```\n\n| 选项         | 说明                               |\n| ---------- | -------------------------------- |\n| --rate <n> | 以 `n` 倍速度播放（默认 1.0）              |\n| --loop     | 循环播放                             |\n| --topics   | 指定回放话题                           |\n| --clock    | 发布 `/clock` 话题（支持 `use_sim_time` |\n```\nros2 bag play my_bag --rate 0.5 --loop --clock\n```\n#### 回访数据并重映射\n```\nros2 bag play my_lidar_bag --remap /scan:=/my_scan\n```\n意思是：播放时把 bag 文件里的 `/scan` 映射为 `/my_scan` 来发出\n可以映射多个：\n```\nros2 bag play my_lidar_bag \\\n  --remap /scan:=/lidar_undistorted \\\n  --remap /odom:=/odom_filtered\n```\n### 3.4 查看信息\n```\nros2 bag info my_bag\n```\n## 4. ros2 topic\n\n| 选项   | 说明                 |\n| ---- | ------------------ |\n| list | 查看当前所有话题           |\n| echo | 实时打印话题内容           |\n| info | 查看某个话题的消息类型和接收发布数量 |\n| type | 查看某个话题的消息类型        |\n### 4.1 ros2 topic list\n示例：\n```\nros2 topic list\n```\n输出：\n```\n/tf\n/odom\n/scan\n/camera/image_raw\n```\n### 4.2 ros2 topic type\n示例：\n```\nros2 topic type /odom\n```\n输出：\n```\nnav_msgs/msg/Odometry\n```\n### 4.3 ros2 topic echo\n示例：\n```\nros2 topic echo /odom\n```\n输出：\n```\nheader:\n  stamp:\n    sec: 1646903840\n    nanosec: 123456789\n  frame_id: \"odom\"\nchild_frame_id: \"base_link\"\npose:\n  pose:\n    position:\n      x: 1.0\n      y: 2.0\n      z: 0.0\n    orientation:\n      x: 0.0\n      y: 0.0\n      z: 0.0\n      w: 1.0\n...\n```\n### 4.4 ros2 topic info\n示例：\n```\nros2 topic info /odom\n```\n输出：\n```\nType: nav_msgs/msg/Odometry\nPublisher count: 1\nSubscription count: 2\n```\n## 5. tf变换\n### 5.1 查看/tf主题（所有的实时变换）\n```\nros2 topic echo /tf\n```\n### 5.2 查看/tf_static主题（所有的静态变换）\n```\nros2 topic echo /tf_static\n```\n### 5.3 查看两个坐标系之间的变换\n```\nros2 run tf2_tools tf2_echo <frame1> <frame2>\n```\n### 5.4 监控整个系统中的tf状态\n```\nros2 run tf2_tools tf2_monitor\n```\n## 6. 查看消息类型的字段结构\n```\nros2 interface show <消息类型>\n```\n示例：\n```\nros2 interface show sensor_msgs/msg/LaserScan\n```\n输出：\n```\nstd_msgs/Header header\n  builtin_interfaces/Time stamp\n  string frame_id\nfloat32 angle_min\nfloat32 angle_max\nfloat32 angle_increment\n...\n```\n## 7. ros2 param\n### 7.1 列出某个节点的参数\n```\nros2 param list /node_name\n```\n### 7.2 获取某个参数值\n```\nros2 param get /node_name param_name\n```\n示例：\n```\nros2 param get /amcl use_map_topic\n```\n### 7.3 设置参数值（实时修改）\n```\nros2 param set /node_name param_name value\n```\n示例：\n```\nros2 param set /amcl use_map_topic true\n```\n### 7.4 描述参数信息\n```\nros2 param describe /node_name param_name\n```\n### 7.5 加载参数文件\n```\nros2 param load /node_name params.yaml\n```\n### 7.6 删除参数\n```\nros2 param delete /node_name param_name\n```"
  },
  {
    "path": "Algorithm/ROS2的Launch文件简介.md",
    "content": "## 1. 基本用法\n```\nfrom launch import LaunchDescription\nfrom launch.actions import DeclareLaunchArgument\nfrom launch.substitutions import LaunchConfiguration\nfrom launch_ros.actions import Node\n\ndef generate_launch_description():\n    return LaunchDescription([\n        DeclareLaunchArgument(\n            'use_sim_time',\n            default_value='false',\n            description='Use simulation clock (Gazebo)'\n        ),\n\n\t\tDeclareLaunchArgument(\n\t        'master_id',\n\t        default_value='0',\n\t        description='ID of the master LiDAR'\n\t    ),\n        \n        Node(\n            package='robot_state_publisher',\n            executable='robot_state_publisher',\n            name='state_publisher',\n            parameters=[{\n                'use_sim_time': LaunchConfiguration('use_sim_time'),\n                'master_id': LaunchConfiguration('master_id')\n            }]\n        )\n    ])\n```\n### ==return LaunchDescription([...])==\n这是你写的 Python 启动文件的最终返回结果，**告诉 ROS 该启动哪些节点/动作**。\n```\ndef generate_launch_description():\n    return LaunchDescription([\n        # 所有的 launch 动作、参数声明等，都在这个列表里\n    ])\n```\n### ==DeclareLaunchArgument(...)==\n这个用来**声明可以从命令行传进来的参数**。比如你要让用户可以指定 `use_sim_time`、`map` 等值。\n```\nDeclareLaunchArgument(\n    'use_sim_time',\n    default_value='false',\n    description='Use simulation (Gazebo) clock if true'\n)\n```\n这个声明的是：你可以传 `use_sim_time:=true` 给这个 launch 文件。\n### ==LaunchConfiguration(...)==\n这个是**用来“获取”一个参数值**，它可以是你刚刚声明的 `DeclareLaunchArgument`，也可以是外部传进来的。\n```\nLaunchConfiguration('use_sim_time')\n```\n## 2. launch文件的套用\nROS 2 的 `launch` 框架支持**加载另一个 Python 格式的 launch 文件**的工具，它让你可以在一个 launch 文件中调用另一个 `.py` 的 launch 文件，就像 include 的概念一样。\n\n| 工具                                          | 作用                       |\n| ------------------------------------------- | ------------------------ |\n| `IncludeLaunchDescription`                  | 用于嵌套加载 launch 文件         |\n| `PythonLaunchDescriptionSource`             | 指明被 include 的是 Python 格式 |\n| `PathJoinSubstitution` + `FindPackageShare` | 用于定位 launch 文件路径         |\n| `launch_arguments={}`                       | 可传递参数到被 include 的 launch |\n\n```\nfrom launch import LaunchDescription\nfrom launch.launch_description_sources import PythonLaunchDescriptionSource\nfrom launch.actions import IncludeLaunchDescription\nfrom launch.substitutions import PathJoinSubstitution\nfrom launch_ros.substitutions import FindPackageShare\n\ndef generate_launch_description():\n    return LaunchDescription([\n        IncludeLaunchDescription(\n            PythonLaunchDescriptionSource(\n                PathJoinSubstitution([\n                    FindPackageShare('my_robot_bringup'),\n                    'launch',\n                    'lidar.launch.py'\n                ])\n            ),\n            launch_arguments={\n                'use_sim_time': 'true'\n            }.items()\n        )\n    ])\n```\n## 3. 运行launch文件\n```\nros2 launch my_launch.launch.py use_sim_time:=true\n```"
  },
  {
    "path": "Algorithm/ROSNodehandle句柄的理解.md",
    "content": "# ROS Nodehandle句柄的理解\n\n## 1、句柄可以让你通过构造函数指定命名空间\n\n```\nros::NodeHandle nh(\"my_namespace\");\n```\n\n这使得使用该句柄的任何相对名字都是相对<node_namespace>/my_namespace，而不是只相对<node_namespace>\n\n你也可以指定一个父句柄和追加的命名空间\n\n```\nros::NodeHandle nh1(\"ns1\");\nros::NodeHandle nh2(nh1,\"ns2\");\n```\n\n这将把nh2放入到<node_namespace>/ns1/ns2命名空间\n\n## 2、也可以指定全局名字，使用“/”（全局命名空间）\n\n```\nros::NodeHandle nh(\"/my_global_namespace\");\n```\n\n这种做法并不推荐，因为这样会使得节点无法被放入别的命名空间。只是有时在代码中使用全局名字有用。\n\n## 3、私有名字，使用“～”（私有命名空间）\n\n使用私有名字比直接调用有私有名的句柄方法更有技巧，你可以在一个私有命名空间中直接创建一个新的句柄。\n\n```\nros::NodeHandle nh(\"~my_private_namespace\");\nros::Subscriber sub = nh.subscribe(\"my_private_topic\",....);\n```\n\n以上例子会订阅<node_name>/my_private_namespace/my_private_topic\n\n注意：理解的重点上文中标注的部分，node_namespace和node_name是两回事！\n\n```\nnode_name = node_namespace + nodename\n```\n\n\n\n## for example:\n\n```\n// launch 文件中 ns==\"node_namespace\"\n \nros::init(argc, argv, \"node_name\"); // node name\n \nros::NodeHandle n; //n 命名空间为/node_namespace\n \nros::NodeHandle n1(\"sub\"); // n1命名空间为/node_namespace/sub\n \nros::NodeHandle n2(n1,\"sub2\");// n2命名空间为/node_namespace/sub/sub2\n \nros::NodeHandle pn1(\"~\"); //pn1 命名空间为/node_namespace/node_name\n \nros::NodeHandle pn2(\"~sub\"); //pn2 命名空间为/node_namespace/node_name/sub\n \nros::NodeHandle pn3(\"~/sub\"); //pn3 命名空间为/node_namespace/node_name/sub\n \nros::NodeHandle gn(\"/global\"); // gn 命名空间为/global\n```\n\n"
  },
  {
    "path": "Algorithm/ROSparam的使用.md",
    "content": "# ROS param 的使用\n\n## 一、rosparam 命令行操作\n\n1. 列出当前的所有参数：\n\n   ```\n   rosparam list\n   ```\n\n2. 显示某个参数的值\n\n   ```\n   rosparam get param_key\n   ```\n\n3. 设置某个参数的值\n\n   ```\n   rosparam set param_key param_value\n   ```\n\n4. 保存参数到文件\n\n   ```\n   rosparam dump file_name\n   ```\n\n5. 从文件读取参数\n\n   ```\n   rosparam load file_name\n   ```\n\n   ```\n   注意这里的文件必须是YAML格式：\n   \n   YAML格式举例：\n   name：‘ZhangSan’\n   age:20\n   gender:‘M’\n   score:{Chinese:80, Math:90}\n   score_history:[85,82,88,90]\n   ```\n\n6. 删除某个参数\n\n   ```\n   rosparam delete param_key\n   ```\n\n## 二、launch 文件载入param\n\n1. 通过param 标签设置参数的值\n\n   ```launch\n   <launch>\n   \t<param name=\"publish_frequency\" value=\"20.0\"/>\n   </launch>\n   ```\n\n2. 通过加载yaml文件来设置param：\n   下面这句指令也就是执行了 load 命令来实现装载文件的命令。\n\n   ```launch\n   <launch>\n   \t<!-- 把关节控制的配置信息读取到参数服务器 -->\n   \t<rosparam file=\"$(find robot_sim_demo)/param/xbot-u_control.yaml\" command=\"load\"/>\n   </launch>\n   ```\n\n3. 加载URDF 文件\n   下面这句指令是 xacro.py 执行了 robot.xacro 之后输出的结果作为值赋给 robot_description。\n\n   ```launch\n   <launch>\n   \t<!-- URDF and TF support -->\n     <param name=\"robot_description\" command=\"$(find xacro)/xacro.py $(find robot_sim_demo)/urdf/robot.xacro\" />\n   </launch>\n   ```\n\n**launch 文件操作param 示例：**\n\n```launch\n<launch>\n\t<!--param参数配置-->\n\t<param name=\"param1\" value=\"1\" />\n\t<param name=\"param2\" value=\"2\" />\n\t<!--param name=\"table_description\" command=\"$(find xacro)/xacro.py $(find gazebo_worlds)/objects/table.urdf.xacro\" /-->\n\t<!--rosparam参数配置-->\n\t<rosparam>   \n        param3: 3\n        param4: 4\n        param5: 5\n    </rosparam>\n\t<!--以上写法将参数转成YAML文件加载，注意param前面必须为空格，不能用Tab，否则YAML解析错误-->\n\t<!--rosparam file=\"$(find robot_sim_demo)/config/xbot-u_control.yaml\" command=\"load\" /-->\n\t<node pkg=\"param_demo\" type=\"param_demo\" name=\"param_demo\" output=\"screen\" >\n\t</node>\n</launch>\n```\n\n## 三、c++ 中操作 param\n\n```c++\n#include<ros/ros.h>\n\nint main(int argc, char **argv){\n\tros::init(argc, argv, \"param_demo\");\n\tros::NodeHandle nh;\n\tint parameter1, parameter2, parameter3, parameter4, parameter5;\n\t\n\t//Get Param的三种方法\n\t//① ros::param::get()获取参数“param1”的value，写入到parameter1上\n\tbool ifget1 = ros::param::get(\"param1\", parameter1);\n\t\n\t//② ros::NodeHandle::getParam()获取参数，与①作用相同\n\tbool ifget2 = nh.getParam(\"param2\",parameter2);\n\t\n\t//③ ros::NodeHandle::param()类似于①和②\n\t//但如果get不到指定的param，它可以给param指定一个默认值(如33333)\n        nh.param(\"param3\", parameter3, 33333);//parameter3 = nh.param(\"param3\", 33333); //这两种方式都可以获取参数\n\t\t\n\tif(ifget1)\n\t\tROS_INFO(\"Get param1 = %d\", parameter1);\n\telse\n\t\tROS_WARN(\"Didn't retrieve param1\");\n\tif(ifget2)\n\t\tROS_INFO(\"Get param2 = %d\", parameter2);\n\telse\n\t\tROS_WARN(\"Didn't retrieve param2\");\n\tif(nh.hasParam(\"param3\"))\n\t\tROS_INFO(\"Get param3 = %d\", parameter3);\n\telse\n\t\tROS_WARN(\"Didn't retrieve param3\");\n\n\n    //Set Param的两种方法\n\t//① ros::param::set()设置参数\n\tparameter4 = 4;\n\tros::param::set(\"param4\", parameter4);\n\n\t//② ros::NodeHandle::setParam()设置参数\n\tparameter5 = 5;\n\tnh.setParam(\"param5\",parameter5);\n\t\n\tROS_INFO(\"Param4 is set to be %d\", parameter4);\n\tROS_INFO(\"Param5 is set to be %d\", parameter5);\n\n\n\t//Check Param的两种方法\n\t//① ros::NodeHandle::hasParam()\n\tbool ifparam5 = nh.hasParam(\"param5\");\n\n\t//② ros::param::has()\n\tbool ifparam6 = ros::param::has(\"param6\");\n\n\tif(ifparam5) \n\t\tROS_INFO(\"Param5 exists\");\n\telse\n\t\tROS_INFO(\"Param5 doesn't exist\");\n\tif(ifparam6) \n\t\tROS_INFO(\"Param6 exists\");\n\telse\n\t\tROS_INFO(\"Param6 doesn't exist\");\n\n\n\t//Delete Param的两种方法\n\t//① ros::NodeHandle::deleteParam()\n\tbool ifdeleted5 = nh.deleteParam(\"param5\");\n\n\t//② ros::param::del()\n\tbool ifdeleted6 = ros::param::del(\"param6\");\n\t\n\n\tif(ifdeleted5)\n\t\tROS_INFO(\"Param5 deleted\");\n\telse\n\t\tROS_INFO(\"Param5 not deleted\");\n\tif(ifdeleted6)\n\t\tROS_INFO(\"Param6 deleted\");\n\telse\n\t\tROS_INFO(\"Param6 not deleted\");\n\n\n\tros::Rate rate(0.3);\n\twhile(ros::ok()){\n\t\tint parameter = 0;\n\t\t\n\t\tROS_INFO(\"=============Loop==============\");\n\t\t//roscpp中尚未有ros::param::getallparams()之类的方法\n\t\tif(ros::param::get(\"param1\", parameter))\n\t\t\tROS_INFO(\"parameter param1 = %d\", parameter);\n\t\tif(ros::param::get(\"param2\", parameter))\n\t\t\tROS_INFO(\"parameter param2 = %d\", parameter);\n\t\tif(ros::param::get(\"param3\", parameter))\n\t\t\tROS_INFO(\"parameter param3 = %d\", parameter);\n\t\tif(ros::param::get(\"param4\", parameter))\n\t\t\tROS_INFO(\"parameter param4 = %d\", parameter);\n\t\tif(ros::param::get(\"param5\", parameter))\n\t\t\tROS_INFO(\"parameter param5 = %d\", parameter);\n\t\tif(ros::param::get(\"param6\", parameter))\n\t\t\tROS_INFO(\"parameter param6 = %d\", parameter);\n\t\trate.sleep();\n\t}\n}\n```\n\n按照这样的配置运行launch文件，输出结果为：\n\n```shell\n[ INFO] [1599227480.007106576]: Get param1 = 1\n[ INFO] [1599227480.007183637]: Get param2 = 2\n[ INFO] [1599227480.008421688]: Get param3 = 3\n[ INFO] [1599227480.013664463]: Param4 is set to be 4\n[ INFO] [1599227480.013728307]: Param5 is set to be 5\n[ INFO] [1599227480.016448700]: Param5 exists\n[ INFO] [1599227480.016485628]: Param6 doesn't exist\n[ INFO] [1599227480.018160277]: Param5 deleted\n[ INFO] [1599227480.018213034]: Param6 not deleted\n[ INFO] [1599227480.018256838]: =============Loop==============\n[ INFO] [1599227480.019019334]: parameter param1 = 1\n[ INFO] [1599227480.019704553]: parameter param2 = 2\n[ INFO] [1599227480.020431854]: parameter param3 = 3\n[ INFO] [1599227480.021171333]: parameter param4 = 4\n[ INFO] [1599227483.351733159]: =============Loop==============\n[ INFO] [1599227483.354448047]: parameter param1 = 1\n[ INFO] [1599227483.355546242]: parameter param2 = 2\n[ INFO] [1599227483.356730625]: parameter param3 = 3\n[ INFO] [1599227483.357654706]: parameter param4 = 4\n.......\n```\n\n## 四、操作 param 时注意命名空间\n\n在 c++ 操作参数的时候，我们经常会看到\n`ros::NodeHandle nh`; 和 `ros::NodeHandle nh(\"~\")`; 两种用法。\n主要是全局命名空间和局部命名空间的不同。\n`ros::NodeHandle nh` 是 全局命名空间，\n`ros::NodeHandle nh(\"~\")` 是 局部命名空间。\n\n```launch\n<launch>\n\t<!-- 全局的 test_param -->\n\t<param name=\"param1\" value=\"1\" />\n\t<param name=\"param2\" value=\"2\" />\n\t\n\t<node pkg=\"param_demo\" type=\"param_demo\" name=\"param_demo\" output=\"screen\" >\n\t\t<!-- 局部的 test_param -->\n\t\t<param name=\"param3\" value=\"3\" />\n\t\t<param name=\"param4\" value=\"4\" />\n\t</node>\n</launch>\n```\n\n\n那么对应到cpp中，对于这两种param的获取方式有所不同：\n\n```c++\n#include<ros/ros.h>\n\nint main(int argc, char **argv){\n\tros::init(argc, argv, \"param_demo\");\n\tros::NodeHandle nh_global;\n\tros::NodeHandle nh_local(\"~\");\n\tint parameter1, parameter2, parameter3, parameter4;\n\t\n\tparameter1 = nh_global.param(\"param1\", 1111);\n\tparameter3 = nh_global.param(\"param_demo/param3\", 1111);\t//获取局部参数，需要增加节点名\n\n\tparameter2 = nh_local.param(\"/param2\", 2222);\t//获取全局参数，需要增加 \"/\"\"\n\tparameter4 = nh_local.param(\"param4\", 2222);\n\t\n\tROS_INFO(\"parameter param1 = %d\", parameter1);\n\tROS_INFO(\"parameter param2 = %d\", parameter2);\n\tROS_INFO(\"parameter param3 = %d\", parameter3);\n\tROS_INFO(\"parameter param4 = %d\", parameter4);\n\n\t\n\tros::spin();\n    return 0;\n}\n```\n\n按照这样的配置运行launch文件，输出结果为：\n\n```shell\n[ INFO] [1599231214.229291485]: parameter param1 = 1\n[ INFO] [1599231214.229367939]: parameter param2 = 2\n[ INFO] [1599231214.229398017]: parameter param3 = 3\n[ INFO] [1599231214.229421101]: parameter param4 = 4\n```\n\n"
  },
  {
    "path": "Algorithm/ROS激光雷达信息、点云信息和PCL信息之间的转换.md",
    "content": "# ROS激光雷达信息、点云信息和PCL信息之间的转换\n\n## 一、消息类型\n\n```\nsensor_msgs::LaserScan                      // ROS激光雷达信息\nsensor_msgs::PointCloud                  // ROS点云信息\nsensor_msgs::PointCloud2                  // ROS点云信息\npcl::PointCloud<pcl::PointXYZ>         // PCL点云信息\n```\n\n## 二、sensor_msgs::LaserScan 与sensor_msgs::PointCloud之间的转换\n\n```\n sensor_msgs::LaserScan::ConstPtr& scan_msg;\n laser_geometry::LaserProjection projector_;\n sensor_msgs::PointCloud laser_point_cloud;\n // LaserScan转换到pointcloud2 类型\n projector_.projectLaser(*scan_msg,laser_point_cloud);\n```\n\n##  三、 sensor_msgs::PointCloud2与 pcl::PointCloud<pcl::PointXYZ>之间的转换\n\n```\n sensor_msgs::PointCloud2 laser_point_cloud;\n pcl::PointCloud<pcl::PointXYZ> pclCloud;\n pcl::fromROSMsg(laser_point_cloud,pclCloud); // ROS转pcl\n pcl::toROSMsg(pclCloud,laser_point_cloud);   // pcl转ROS\n```\n\n"
  },
  {
    "path": "Algorithm/Ros中Remap(话题重映射)的两种使用方法.md",
    "content": "# Ros中Remap(话题重映射)的两种使用方法\n\n- remap在node之外的作用域是他之后的所有节点，在node中的作用域是当前节点，此外要注意想要remap的话题是这个节点要接收的还是要发布的。\n- 如果是要remap一个该节点发布的**source_topic**到**target_topic**,应该是`<remap from=\"/source_topic\" to=\"/target_topic\" />`\n- 如果是要remap一个该节点想要接收的的**target_topic**，而实际被另外一个节点发布的话题是**source_topic**,应该是`<remap from=\"/target_topic\" to=\"/source_topic\" />`\n  **举两个例子！要注意区分两种使用情况！**\n\n### 1、remap要发布的话题\n\n节点中通过ros::Publisher发布了base/joint_states，head/joint_states，torso/joint_states，想要把发布出来的话题重映射到joint_states上，可以这么写：\n\n```launch\n<?xml version=\"1.0\"?>\n<launch>\n \n    <group ns=\"dhrobot\">\n        <remap from=\"base/joint_states\" to=\"joint_states\" />\n        <remap from=\"head/joint_states\" to=\"joint_states\" />\n        <remap from=\"torso/joint_states\" to=\"joint_states\" /> \n        <node name=\"robot_driver\" pkg=\"dhrobot_driver\" type=\"robot_driver\" />\n    </group>\n \n</launch>\n```\n\nrostopic list一下可以看到话题：\n\n`/dhrobot/joint_states`\n\n### ２、remap要接收的话题\n\n节点中通过Ros::Subscriber**想要**接收/image话题，但是实际摄像头发布的话题是/kinect2/hd/image_color，所以需要这样处理：\n\n```launch\n<?xml version=\"1.0\"?>\n<launch>\n   <node name=\"robot_visual\" pkg=\"dhrobot_demo\" type=\"robot_visual\" >\n    <remap from=\"/image\" to=\"/kinect2/hd/image_color\" />\n  </node>\n</launch>\n```\n\n\n\n- 最后附一下在终端中节点启动时的remap方法,还是举两个例子，一个发布一个接收：\n\n```\nrosrun joint_state_pub base/joint_states:=joint_states\nrosrun robot_state_publisher /joint_states:=/base/joint_states\n```\n\n"
  },
  {
    "path": "Algorithm/SLAM中的位姿变换与轨迹评价指标.md",
    "content": "# SLAM中的位姿变换与轨迹评价指标:APE、RPE、ATE、RTE\n\n## 1.位姿变换的表示\n\n这里首先需要说明的是，当我们说一个位姿的时候，一定是相对于某个参考系的。它并不会独立于参考系而存在，即使有些时候我们没有显式地说明参考系。比如，我们说天上有只鸟在飞。在我们说这句话的时候其实默认参考系是我们自己，然后才会有鸟“在天上”这样的概念。\n\n然后，我们需要了解的是，“位姿”包含位置和姿态两部分内容，是位置(位移)+姿态(旋转)的简称，不是打错的“位置”。一般情况下，旋转可以用旋转矩阵R表示，平移可以用平移向量t表示。当然我们也可以把旋转和位移统一在一个变换矩阵T中，以此来表示位姿。需要注意的一点是，位姿和位姿的变化都是用旋转平移或者变换来表示。这类似于在坐标系中的坐标点与向量，如果我们从坐标角度看，它就是一个状态、一个点，而如果我们从向量的角度来看，它就是一个矢量。前面说了，位姿一定是相对于某个参考系的。而位姿的变化(位移+旋转)除了相对于参考系，还有一个重要的属性就是方向。任何一个位姿的变化必然有方向，不然就没有意义了。例如，我们说旋转30°，这个旋转可以是顺时针，也可以是逆时针，缺少了方向就会产生歧义。因此我们可以说位姿的变换包含两个要素：参考系和方向。当我们判断两个变换是不是相同时就可以看它们的这两个要素是不是相同。这个概念需要在后面介绍内容的时候时刻记住，不然就容易把自己绕晕了。\n\n上面，我们说了，位姿的变换包含参考系和方向。如下图所示，对于两个状态A和B，从A到B的变换和从B到A的变换就是两个相反的变换。因为从A到B的变换参考系是A，而从B到A的变换参考系是B。\n\n![img](media/2021-05-14-01.png)\n\n下面再从数学的角度介绍一下旋转矩阵、平移向量和变换矩阵的一些性质。对于旋转矩阵，三维旋转就是一个3×3的正交矩阵，也就是说矩阵的逆等于矩阵的转置。而且矩阵的逆等于一个逆变换。例如$\\R_{AB}^{-1}=R_{AB}^{T}=R_{BA}$。而对于变换矩阵$T$，按下式构成。\n$$\nT = \\begin{bmatrix}\n\\mathbf{R} & \\mathbf{t}\\\\\n\\mathbf{0} & 1\n\\end{bmatrix}=\\begin{bmatrix}\nR_{1,1} & R_{1,2} & R_{1,3} & t_{1}\\\\ \nR_{2,1} & R_{2,2} & R_{2,3} & t_{2}\\\\ \nR_{3,1} & R_{3,2} & R_{3,3} & t_{3}\\\\ \n0 & 0 & 0 & 1\n\\end{bmatrix}\n$$\n与旋转矩阵类似的，变换矩阵的逆表示一个反变换，所以$T_{AB}=T_{BA}^{-1}$。具体而言，如果我们有一个变换矩阵T，我们当然可以直接用矩阵求逆，得到$T^{-1}$，这没有错。但这里需要说明的一点是，我们并不能想当然地以为是对各部分求逆或取负,尤其是对于平移部分，当有旋转的时候，不能直接添加一个负号作为其逆变换。下面解释为什么。对于一个由$R$和$t$构成的变换矩阵$T$，其逆变换矩阵$T^{-1}$表示为：\n$$\nT^{-1} = \\begin{bmatrix}\n\\mathbf{R^{T}} & -\\mathbf{R^{T}}\\mathbf{t}\\\\\n\\mathbf{0^{T}} & 1\n\\end{bmatrix}\n$$\n这里旋转部分都比较好理解，关键在于平移部分，并不是我们想当然地直接添个负号，而是还会乘一个旋转矩阵的逆(转置)。对于这一部分要如何理解呢？我们可以先从简单的情况看起，如下图所示。\n\n![img](media/2021-05-14-02.png)\n\n我们先忽视旋转，认为只有平移。在A状态，其在世界坐标系下的位置是$(10,8,6)$，其经过一个变换$T_{AB}$，变换到了B状态，B状态在世界坐标系下的位置是(14,10,4)。求变换矩阵$T_{AB}$以及逆变换矩阵$T_{BA}$。由于没有旋转，很容易可以看出，我们在A的基础上，$x$坐标加上4，$y$坐标加上2，$z$坐标减去2就可以得到B状态。所以可以十分简单地构造出从A到B的变换矩阵$T_{AB}$。还记得我们上面说的位姿变换的两个要素吗？用更数学一点的话来描述上面的这句话就是，$T_{AB}$这个变换的参考系是A状态，变换方向是从A到B。参考系决定了变换的尺度或者说大小，比如说这里变换的尺度是$x$方向为4，$y$方向为2，$z$方向也为2。但正如前面说的，仅有尺度是不够的，还得有方向，更进一步说就是运算的顺序：是$B$状态减去$A$状态还是$A$状态减去$B$状态。一般而言，对于一个从A到B的变换，我们习惯用B状态(终止状态)减去A状态(起始状态)来作为运算顺序。这样我们可以得到平移向量为$t=(4,2,−2)$。因此，根据上面的介绍，我们可以写出：\n$$\nT_{AB}=\\begin{bmatrix}\n1 & 0 & 0 & 4\\\\ \n0 & 1 & 0 & 2\\\\ \n0 & 0 & 1 & -2\\\\ \n0 & 0 & 0 & 1\n\\end{bmatrix}\n$$\n而对于逆变换，我们有两种求法。一种就是简单粗暴地直接对$T_{AB}$求逆，比如，对上面的矩阵求逆如下：\n$$\nT_{BA}=T_{AB}^{-1}=\\begin{bmatrix}\n1 & 0 & 0 & -4\\\\ \n0 & 1 & 0 & -2\\\\ \n0 & 0 & 1 & 2\\\\ \n0 & 0 & 0 & 1\n\\end{bmatrix}\n$$\n另一种是根据上面提到的$T^{-1}$和$R、t$的关系来构造。从A到B的过程，由于我们认为只有平移，所以旋转矩阵$R=I$，为一个3×3的单位阵。平移向量$t=(4,2,−2)$，所以，自然地，我们可以构造出如下矩阵：\n$$\nT_{BA}=\\begin{bmatrix}\n\\mathbf{R^{T}} & -\\mathbf{R^{T}}\\mathbf{t}\\\\\n\\mathbf{0^{T}} & 1\n\\end{bmatrix}=\\begin{bmatrix}\n1 & 0 & 0 & -4\\\\ \n0 & 1 & 0 & -2\\\\ \n0 & 0 & 1 & 2\\\\ \n0 & 0 & 0 & 1\n\\end{bmatrix}\n$$\n对于$-\\mathbf{R^{T}}\\mathbf{t}$这部分可能不是很好理解。这里因为R为单位阵，所以该部分就是−t。为什么会有负号呢？还是按照刚刚我们说的变换两要素就可以明白了。我们要进行的是一个由B到A的变换，参考系是B状态。因此，按照终止状态减去起始状态的原则，我们可以得到t=(10−14,8−10,6−4)=(−4,−2,2)，而这恰恰就是从A到B变换的平移向量取负号。这也就是$T^{-1}$公式中负号的来历。可以发现，两者殊途同归，得到了同样的结果。\n\n上面的例子比较简单，因为我们没有考虑旋转的情况。接下来我们就单独考虑一下纯旋转的情况，看看会发生什么，如下图所示。\n\n![img](media/2021-05-14-03.png)\n\n我们从A状态开始，绕着x轴顺时针旋转45°，求A到B的变换矩阵TAB。对于旋转，我们可以使用以前几何学的知识，比如在A状态时y轴上的某个点(0,1,0)，旋转45度之后，它的位置就变成了(0,√2/2,√2/2)。根据这个映射关系，就可以很容易得到旋转矩阵R如下。\n$$\nR=\\begin{bmatrix}\n1 & 0 & 0\\\\ \n0 & \\sqrt{2}/2 & -\\sqrt{2}/2\\\\ \n0 & \\sqrt{2}/2 & \\sqrt{2}/2\\\\ \n\\end{bmatrix}\n$$\n当然，这里涉及到了一些方向余弦相关的内容。而且只要涉及到旋转需要注意的地方就多一些。首先，在这里其实我们无形之中规定了顺时针旋转为正。这种定义的不同会导致旋转矩阵的反对角线元素的负号相反。感兴趣的话可以参考[这篇博客](http://zhaoxuhui.top/blog/2018/03/13/RelationBetweenQ4&R&Euler.html#23d旋转)。 然后，由于是绕x轴旋转，所以旋转矩阵的x轴所在的行和列应该就是1，0，0。再结合sinθ和cosθ就可以很容易得到上面的旋转矩阵。而由于没有平移，所以t=(0,0,0)。所以$T_{AB}$为：\n$$\nT_{AB} = \\begin{bmatrix}\n\\mathbf{R} & \\mathbf{t}\\\\\n\\mathbf{0} & 1\n\\end{bmatrix}=\\begin{bmatrix}\n1 & 0 & 0 & 0\\\\ \n0 & \\sqrt{2}/2 & -\\sqrt{2}/2 & 0\\\\ \n0 & \\sqrt{2}/2 & \\sqrt{2}/2 & 0\\\\ \n0 & 0 & 0 & 1\n\\end{bmatrix}\n$$\n对于由B到A的逆变换，我们同样可以用矩阵求逆的方式得到$T_{BA}$，如下：\n$$\nT_{BA}=T_{AB}^{-1}=\\begin{bmatrix}\n1 & 0 & 0 & 0\\\\ \n0 & \\sqrt{2}/2 & \\sqrt{2}/2 & 0\\\\ \n0 & -\\sqrt{2}/2 & \\sqrt{2}/2 & 0\\\\ \n0 & 0 & 0 & 1\n\\end{bmatrix}\n$$\n由于我们知道R、t，所以我们可以用第二种方法对上面的结果进行验证。\n$$\nT_{BA}=\\begin{bmatrix}\n\\mathbf{R^{T}} & -\\mathbf{R^{T}}\\mathbf{t}\\\\\n\\mathbf{0^{T}} & 1\n\\end{bmatrix}=\\begin{bmatrix}\n1 & 0 & 0 & 0\\\\ \n0 & \\sqrt{2}/2 & \\sqrt{2}/2 & 0\\\\ \n0 & -\\sqrt{2}/2 & \\sqrt{2}/2 & 0\\\\ \n0 & 0 & 0 & 1\n\\end{bmatrix}\n$$\n可以看到，结果还是一模一样的。这里，由于平移向量t为0，所以最终变换矩阵平移部分也为0。\n\n最后，我们同时考虑旋转和平移，并解释$T^{-1}$的公式的平移部分为什么是长这个样子。\n\n![img](media/2021-05-14-04.png)\n\n如图所示，从A状态变换到B状态既有平移又有旋转。根据上面的知识，可以很自然地得到A到B的变换矩阵$T_{AB}$。\n$$\nT_{AB} = \\begin{bmatrix}\n\\mathbf{R} & \\mathbf{t}\\\\\n\\mathbf{0} & 1\n\\end{bmatrix}\n$$\n\n同时，根据上面的经验，$T_{BA}$肯定等于$T_{AB}$的逆。对于一个变换矩阵T，对其求逆就可以得到一个逆变换。当然，如果你事先知道R、t，也可以根据$T^{-1}$公式直接求出，无需求逆。\n\n另外需要提醒一点的是，在对两个状态做差的时候，一定要明确各自的参考系，其数据一定要是同一个参考系下的才有意义。如果参考系不同，需要转换统一以后再运算。比如在坐标系A下某点的坐标是(10,20)，在坐标系B下另一个点的坐标也为(10,20)。但显然，它们并不在同一位置。我们需要把它们都统一到一个坐标系下后再比较。比如我们知道坐标系A到坐标系B仅存在平移，平移向量为t=(2,6)。那么我们就有两种方法，一种是将A中的坐标变换到B中比较，另一种则是将B中的坐标变换到A中比较。先看第一种，A的坐标变换到B以后为(12,26)，用终止状态(10,20)减去起始状态(12,26)，所以它们的差异为(-2，-6)。第二种情况，B中的坐标变换到A中，为(8,14)，终止(10,20)减起始(8,14)，结果为(2,6)。如果我们忽略方向上的差异，只看大小，它们是一样的。\n\n另外，我们可以从两个角度推导得出$T^{-1}$公式。一是从纯矩阵求逆的法则，二是从从变换的基本原理出发。\n\n首先从矩阵求逆角度，T是一个4×4的矩阵，如下。我们可以分块来看，把它就看做是一个2×2的矩阵。\n$$\nT = \\begin{bmatrix}\n\\mathbf{R} & \\mathbf{t}\\\\\n\\mathbf{0} & 1\n\\end{bmatrix}\n$$\n我们要求一个矩阵x，使得：\n$$\nTx = \\begin{bmatrix}\n\\mathbf{R} & \\mathbf{t}\\\\\n\\mathbf{0} & 1\n\\end{bmatrix} x =I\n$$\n根据矩阵求逆法则，可以得到：\n$$\n\\left\\{\\begin{matrix}\nRx_{1}+tx_{2}=I\\\\ \nRx_{3}+tx_{4}=0\\\\ \nx_{2}=0\\\\ \nx_{4}=I\\\\ \n\\end{matrix}\\right.\n$$\n所以，可以顺利求解矩阵x的各个元素：\n$$\n\\left\\{\\begin{matrix}\nx_{1}=R^{-1}\\\\ \nx_{2}=0\\\\ \nx_{3}=-R^{-1}t\\\\ \nx_{4}=I\\\\ \n\\end{matrix}\\right.\n$$\n再把它们拼接起来，就得到了$T^{-1}$公式。\n$$\nx = \\begin{bmatrix}\nR^{-1} & -R^{-1}t\\\\\n\\mathbf{0} & I\n\\end{bmatrix}\n$$\n这是第一种方法。另一种方法是从变换的原理进行推导。而对于逆变换，由于同时有平移和旋转，所以处理起来稍微复杂一些。\n\n从A状态变换到B状态，旋转为$R_{AB}$，平移为$t_{AB}$，它们共同构成了变换$T_{AB}$。当我们求反变换$T_{BA}$的时候，除了直接对$T_{AB}$求逆，还可以根据物理意义求解。变换由旋转和平移构成，所以只要得到对应部分，填到变换矩阵T的对应位置就可以了。对于旋转部分，根据上面说的，逆旋转等于对旋转矩阵求逆，而旋转矩阵的逆又等于转置。所以旋转部分，就是$R^{T}$。比较麻烦的是平移部分，根据上面的介绍，只有当两个坐标或平移的参考系相同时运算才有意义。对于现在我们已知的平移$t_{AB}$，其参考系是旋转了$R_{AB}$以后的A坐标系，方向是从A到B。B是在这个坐标系下按照平移向量移动得到的，所以B坐标系在旋转$R_{AB}$后的A坐标系下的坐标就是$t_{AB}$。我们对其添加一个负号，得到$-t_{AB}$，即表示从B到A的平移。所以，对其乘上一个旋转矩阵的逆，就可以得到其在原始A坐标系下的坐标。最终也就写成了$-\\mathbf{R^{T}t}$，这也就是$T^{-1}$公式里的平移部分了。至此，我们也就推导得到了$T^{-1}$公式。\n\n另外，需要说明的是，对于同时有平移和旋转的变换而言，其实有两种变换顺序。一种是先平移再旋转，另一种是先旋转再平移。我们可以分别推导看看，这两种方式最后得到的结果是否一样。对于某个从A到B的变换T，由旋转R和平移t组成。对于A中的某个坐标点$x_{A}$，按照先旋转再平移的顺序，有如下公式。\n$$\nx_{B}=R x_{A} + t\n$$\n而按照先平移再旋转，则可以得到。\n$$\nx_{B}=R(x_{A} + t)\n$$\n可以看到，公式是不一样的。但这里需要注意的是，平移t也是不一样的。按照前面说的，两个坐标运算，一定要在同一个参考系下。对于第一种情况，其平移向量的参考系是旋转以后的A坐标系。而对于第二种情况，其参考系则是原始A坐标系。所以对于旋转和平移的顺序问题，也需要明确一下。一般而言，在SLAM中，都是先旋转再平移的顺序。\n\n最后，简单小结一下。对于旋转，通过3×3的正交阵表示，它的逆等于它的转置，通过矩阵求逆得到其逆旋转。对于平移，通过1×3的向量表示，通过添加正负号表示平移方向。对于变换，通过4×4的矩阵表示，通过矩阵求逆得到其逆变换。\n\n## 2.位姿评价指标\n\n在明确了位姿的表示之后，我们需要思考下一个问题。如何求解两个位姿之间的变化。其实这也非常简单，和上面介绍的是一样的。我们只需要求解得到两个位姿之间的变换矩阵即可，这个矩阵就可以作为两个位姿之间的变化(误差)度量。如果这个变换矩阵旋转部分为单位阵，平移部分为0，则说明这两个位姿是一样的，没有误差(变化)。秉持着这个基本思想，我们进一步需要思考，如何实现它。为了方便，这里所有的位姿都用变换矩阵T来表示。如下图所示。\n\n![img](media/2021-05-14-05.png)\n\n有两个位姿$T_{1}$和$T_{2}$，这里$T_{1}$、$T_{2}$都是在一个全局统一的参考系下。要求解它们之间的差异，其实就可以看作是求解$T_{2}$相对于$T_{1}$的位姿变换，也就是图中问号对应的变换。回想一下变换的合成公式：\n$$\n\\begin{matrix}\nb=T_{1}a\\\\ \nc=T_{2}b\\\\ \nc=T_{2}b=T_{2}T_{1}a\n\\end{matrix}\n$$\n可以看到，变换的合成都是不停地左乘变换矩阵。所以在这里，我们同样可以有类似的式子。我们不妨设要求的变换为x，则有：\n$$\n\\begin{matrix}\nT_{1}=T_{1}I\\\\ \nT_{2}=xT_{1}\\\\ \n\\end{matrix}\n$$\n对于上面这个式子，等式两边左乘$T_{1}^{-1}$就可以得到$x=T_{1}^{-1}T_{2}$。这便是对于两个位姿之间变换的求解，我们进一步可以对其分解，得到旋转和平移。当然了，这里还是需要强调一下，$T_{1}$和$T_{2}$都是在同一参考系下的，如果不在同一参考系下，需要先将它们转化到同一参考系后再计算。有了以上的理解，再看下面的东西就会容易很多了。\n\n### (1) APE\n\n如下图所示，是EVO中计算APE的算法。Absolute Pose Error可以用于评价SLAM轨迹的整体一致性。\n\n![img](media/2021-05-14-06.png)\n\n在i时刻，我们现在有两个位姿，$P_{est,i}$和$P_{ref,i}$。前者是我们估计的位姿，后者是真值。根据上面我们得到的结论，要求解它们之间的差异，也就是求它们之间的变换。而它们之间的变换直接可以根据上面推导得到的公式计算。只不过这里$T_{1}$变成了$P_{ref,i}$，$T_{2}$变成了$P_{est,i}$。所以我们自然就能得到下面的式子：\n$$\nE_{i}=P_{ref,i}^{-1}P_{est,i}\n$$\n它也就和EVO文档里给出的公式是对应的了，而且我们可以看到它求解的这个变换的方向是从$P_{ref,i}$到$P_{est,i}$。得到了变换$E_{i}$之后，我们就可以按需取出各个部分进行分析了。例如取出平移部分、旋转部分等，就比较好理解了。最后的RMSE求解公式也都比较好理解。需要注意的是，这里用到了矩阵的F范数，F范数是矩阵是把矩阵中每个元素的平方求和后开根号。这其实和之前在我的毕业设计论文里用到的思路是一致的，只不过差了个平方而已，如下图所示。\n\n![img](media/2021-05-14-07.png)\n\n另外，除了RMSE还有和方差(SSE)、均方差(MSE)等不同统计量，计算其实也都非常简单，彼此之间的关系如下式所示。\n$$\nRMSE = \\sqrt{MSE} = \\sqrt{SSE/n} = \\sqrt{\\frac{1}{n}\\sum_{i=1}^{n}w_{i}(y_{i}-\\hat{y_{i}})^2}\n$$\n如果想了解更多内容可以参考[这个网页](https://blog.csdn.net/hellocsz/article/details/91490787)。\n\n### (2) RPE\n\n在明白了APE的计算之后，其实RPE就更好理解了。\n\n![img](media/2021-05-14-08.png)\n\nRelative Pose Error虽然说是相对误差，但是其实计算方式是和APE一样的。我们依然还是要计算两个位姿之间的变换关系，但不同的是，这两个位姿并不是估计的绝对位姿，而是两个绝对位姿之间的差异。再简单一点说，RPE计算的是两个绝对位姿差异之间的差异。而如果你细心的话，会发现APE算的就是两个绝对位姿之间的差异。所以从这个角度来说RPE计算的是两个APE之间的差异，如下图所示。\n\n![img](media/2021-05-14-09.png)\n\n根据计算方式，其实我们也就很容易知道RPE的好处了，RPE只使用位姿的变化而不关心估计的绝对位姿，因此消除了估计的绝对位置对于最终结果的影响。所以我们再看EVO文档中计算RPE的公式，就会比较好理解了。首先，我们求解$P_{ref,i}$和$P_{ref,j}$之间的位姿变化$APE_{ref}$(以$P_{ref,i}$为参考系)、$P_{est,i}$和$P_{est,j}$之间的位姿变化$APE_{est}$(以$P_{est,i}$为参考系)。然后，我们再比较这两个APE之间的的差异。同理，按照计算APE的方式，可以自然地得到$APE_{ref}^{-1}APE_{est}$。而这也就是EVO文档中RPE的计算公式了。其它的几个指标和APE都是一样的，这里就不多介绍了。\n\n最后需要强调一下的是，不管是APE还是RPE，求解的都是位姿和位姿之间的关系，而不是整个轨迹上的总误差。总误差可以用上面给出的RMSE公式对求出的各个APE或RPE进行累加计算。\n\n最后，是一个用Python写的计算APE和RPE的脚本，以供参考。\n\n```python\nimport numpy as np\nimport math\n\n\ndef composeTransMat(rot_mat, trans_vec):\n    trans_mat = np.array([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]], np.float)\n    trans_mat[0, 0] = rot_mat[0, 0]\n    trans_mat[0, 1] = rot_mat[0, 1]\n    trans_mat[0, 2] = rot_mat[0, 2]\n    trans_mat[1, 0] = rot_mat[1, 0]\n    trans_mat[1, 1] = rot_mat[1, 1]\n    trans_mat[1, 2] = rot_mat[1, 2]\n    trans_mat[2, 0] = rot_mat[2, 0]\n    trans_mat[2, 1] = rot_mat[2, 1]\n    trans_mat[2, 2] = rot_mat[2, 2]\n\n    trans_mat[0, 3] = trans_vec[0]\n    trans_mat[1, 3] = trans_vec[1]\n    trans_mat[2, 3] = trans_vec[2]\n    return trans_mat\n\n\ndef decomposeTransMat(trans_mat):\n    trans_vec = np.array([0, 0, 0], np.float)\n    rot_mat = np.array([[0, 0, 0], [0, 0, 0], [0, 0, 0]], np.float)\n\n    rot_mat[0, 0] = trans_mat[0, 0]\n    rot_mat[0, 1] = trans_mat[0, 1]\n    rot_mat[0, 2] = trans_mat[0, 2]\n    rot_mat[1, 0] = trans_mat[1, 0]\n    rot_mat[1, 1] = trans_mat[1, 1]\n    rot_mat[1, 2] = trans_mat[1, 2]\n    rot_mat[2, 0] = trans_mat[2, 0]\n    rot_mat[2, 1] = trans_mat[2, 1]\n    rot_mat[2, 2] = trans_mat[2, 2]\n\n    trans_vec[0] = trans_mat[0, 3]\n    trans_vec[1] = trans_mat[1, 3]\n    trans_vec[2] = trans_mat[2, 3]\n    return rot_mat, trans_vec\n\n\ndef quat2rot(qx, qy, qz, qw):\n    # 求四元数的模长\n    qmod = math.sqrt(qx * qx + qy * qy + qz * qz + qw * qw)\n    # 四元数归一化\n    qx = qx / qmod\n    qy = qy / qmod\n    qz = qz / qmod\n    qw = qw / qmod\n\n    # 计算旋转矩阵\n    rot = np.array([[0, 0, 0], [0, 0, 0], [0, 0, 0]], np.float)\n    rot[0, 0] = 1 - 2 * (qy * qy + qz * qz)\n    rot[0, 1] = 2 * (qx * qy - qw * qz)\n    rot[0, 2] = 2 * (qx * qz + qw * qy)\n    rot[1, 0] = 2 * (qx * qy + qw * qz)\n    rot[1, 1] = 1 - 2 * (qx * qx + qz * qz)\n    rot[1, 2] = 2 * (qy * qz - qw * qx)\n    rot[2, 0] = 2 * (qx * qz - qw * qy)\n    rot[2, 1] = 2 * (qy * qz + qw * qx)\n    rot[2, 2] = 1 - 2 * (qx * qx + qy * qy)\n    # 返回旋转矩阵(与Matlab quat2dcm函数保持一致)\n    return rot.transpose()\n\n\nif __name__ == '__main__':\n    # Poses: qx,qy,qz,qw,x,y,z\n    pose_ref1 = [-0.757610, -0.348629, -0.497711, 0.238261, 4.460675, -1.680515, 0.579614]\n    pose_ref2 = [-0.518605, -0.636519, -0.358444, 0.444310, 3.704039, 1.424990, 1.403680]\n    pose_est1 = [-0.757610, -0.348629, -0.497711, 0.238261, 4.460675, -1.680515, 0.579614]\n    pose_est2 = [-0.518605, -0.636519, -0.358444, 0.444310, 3.704039, 1.424990, 1.403680]\n\n    # 不同的姿态可以观察不同的结果\n    # pose_est2 = [-0.518605, -0.636519, -0.358444, 0.444310, 3.704039, 5.424990, 1.403680]\n\n    rot_ref1 = quat2rot(pose_ref1[0], pose_ref1[1], pose_ref1[2], pose_ref1[3])\n    rot_ref2 = quat2rot(pose_ref2[0], pose_ref2[1], pose_ref2[2], pose_ref2[3])\n    rot_est1 = quat2rot(pose_est1[0], pose_est1[1], pose_est1[2], pose_est1[3])\n    rot_est2 = quat2rot(pose_est2[0], pose_est2[1], pose_est2[2], pose_est2[3])\n\n    trans_ref1 = composeTransMat(rot_ref1, pose_ref1[4:])\n    trans_ref2 = composeTransMat(rot_ref2, pose_ref2[4:])\n    trans_est1 = composeTransMat(rot_est1, pose_est1[4:])\n    trans_est2 = composeTransMat(rot_est2, pose_est2[4:])\n\n    ape_est1 = np.matmul(np.linalg.inv(trans_ref1), trans_est1)\n    ape1_rot, ape1_trans = decomposeTransMat(ape_est1)\n    ape_est2 = np.matmul(np.linalg.pinv(trans_ref2), trans_est2)\n    ape2_rot, ape2_trans = decomposeTransMat(ape_est2)\n\n    diff_ref = np.matmul(np.linalg.inv(trans_ref1), trans_ref2)\n    diff_est = np.matmul(np.linalg.inv(trans_est1), trans_est2)\n    rpe = np.matmul(np.linalg.inv(diff_ref), diff_est)\n    rpe_rot, rpe_trans = decomposeTransMat(rpe)\n\n    print(\"\\nAPE1:\")\n    print(ape_est1)\n    print(\"APE rotation part:\")\n    print(ape1_rot)\n    print(\"APE translation part:\")\n    print(ape1_trans)\n\n    print(\"\\nAPE2:\")\n    print(ape_est2)\n    print(\"APE rotation part:\")\n    print(ape2_rot)\n    print(\"APE translation part:\")\n    print(ape2_trans)\n\n    print(\"\\nRPE:\")\n    print(rpe)\n    print(\"RPE rotation part:\")\n    print(rpe_rot)\n    print(\"RPE translation part:\")\n    print(rpe_trans)\n```\n\n代码中有ref1、ref2、est1、est2四个状态，以便我们计算。首先，我们可以计算我们估计的est1的APE，它是ref1和est1之间的差异，同理再计算ref2和est2的APE。最后，再计算从1到2这段的RPE。我们可以把从1到2真值的位姿差异当做是一种APE，这样，我们只需要再计算两个APE，最后就可以得到RPE了。可以这样理解：某时刻，位姿真值是ref1，但是我们估计得到的是ref2，求它们之间的变换。\n\n### (3) ATE与RTE\n\n最后，再来说一下ATE和RTE，来自于《A Tutorial on Quantitative Trajectory Evaluation for Visual(-Inertial) Odometry》这篇文章。它们是Absolute Trajectory Error和Relative Trajectory Error的简称。那么它们和上面的APE和RPE有什么不同呢？其实从本质上来说，它们没有什么不同。如果硬要说的话，上面说的APE和RPE更像是一种计算ATE和RTE的基础或原子操作。而计算ATE和RTE的最大区别在于，我们需要对于轨迹进行对齐。而我们在计算APE和RPE的时候则不用考虑这些，拿到位姿直接算就完了。但对于轨迹而言，则不能这样。因为很简单的，即使是两段完全相同的轨迹，如果放在不同的地方，然后直接计算它们对应的位姿差异，也会有非常大的差异，如下图所示。\n\n![img](media/2021-05-14-10.png)\n\n左边是未对齐直接计算轨迹的误差，可以看到差异非常大。右边是对齐以后的误差。所以轨迹对齐在计算ATE和RTE的时候是十分重要的预处理步骤。\n\n绝对轨迹误差(ATE):将对齐后的轨迹直接与真值比较，求取每个状态的RMSE作为整段轨迹总误差。其计算步骤主要包含两个：(1)轨迹对齐 (2)在对齐轨迹与真值之间计算RMSE。这里需要注意的是对于角度的处理。在得到旋转误差的旋转矩阵后，有多种办法衡量角度误差：(1)将旋转矩阵转成角轴，以“角”作为误差(2)将旋转矩阵转为欧拉角，依次计算三轴误差。具体可见论文里的计算公式23、24。\n\n相对轨迹误差(RTE):将整段轨迹按一定规则截取成若干小段。取每一小段的第一个状态求取与真值的变换，利用这个变换将最后一个状态与真值对齐，计算误差。该计算结果即作为该段的误差。重复上述步骤即可以得到多段误差。计算步骤主要包含：(1)轨迹分段 (2)利用小段的的一个状态对齐轨迹 (3)计算小段最后一个状态与真值的差异 (4)在每一小段上重复上述步骤 (5)对于不同分段方法重复上述步骤。这便是RTE。RTE是一串数，可以对其进行统计分析，评价算法的一致性等等。具体见论文公式25、26、27。根据定义，虽然每一小段都有多个状态，但其实我们只用每一小段的起始与终止状态计算。它的中间状态并没有参与计算。不是想当然地在每一小段上进行轨迹对齐然后计算ATE作为该段结果，这个需要注意。\n\n最后，简单提一下轨迹对齐。轨迹对齐有非常多的方法，一个简单的方法是获得各自轨迹起始位姿，然后求解它们起始位姿之间的变换，以此作为全部轨迹之间的变换，将其应用到其它位姿上。这样的好处是十分方便、简单，容易理解。问题也很明显，非常容易受误差影响。而且必须要保证求解变换的两个位姿要是对应的，一旦不对应就会有问题。另一种思路就是求解多个对应位姿之间的变换矩阵，然后取均值。而一个看起来更“可靠”的办法是进行迭代。我们以初始状态求得的位姿间的变换作为迭代的初值，然后得到一个变换就用该变换计算一下这两个轨迹之间的ATE。以此作为判断条件，不断迭代，直到ATE收敛为止。我们认为此时的变换就是最可靠的了。而关于如何判断两个位姿是否对应，可以通过时间窗口来判断。对于位姿A所对应的时间t，如果在t±Δt时刻内在另一个轨迹上可以找到位姿B，则取B作为对应位姿。如果直接找不到对应位姿，则寻找距离这个时间窗口最近的两个位姿，然后进行内插，得到t时刻的位姿。\n\n\n\n\n\n> 本文转载自：http://zhaoxuhui.top/blog/2021/05/14/APE-RPE-ATE-RTE-Mmetric-in-SLAM.html"
  },
  {
    "path": "Algorithm/SVD与非线性优化在最小二乘问题中的区别.md",
    "content": "## SVD与非线性优化在最小二乘问题中的区别\n\n最小二乘问题可以用 **SVD** 和 **非线性优化** 来求解，但它们适用于不同的场景。下面是它们的 **原理**、**区别** 和 **应用场景**。\n\n---\n\n## 1. SVD 解决最小二乘问题\n\n### **原理**\n\nSVD 主要用于 **线性最小二乘问题**，即：\n\n$min_x \\|Ax - b\\|_2$\n\n其中矩阵 A是 **线性系统**，未知变量是 x。SVD 分解$A = U \\Sigma V^T$并通过伪逆求解：\n\n$x = V \\Sigma^+ U^T b$\n\n这种方法 **直接得到全局最优解**，并且计算稳定。\n\n---\n\n## 2. 非线性优化求解最小二乘\n\n### **原理**\n\n当方程组是 **非线性** 时，最小二乘问题变为：\n\n$min_x \\sum_{i} \\| f_i(x) - b_i \\|^2$\n\n其中 $f_i(x)$ 是非线性函数（例如涉及对数、指数、三角函数等）。常见的优化方法包括：\n\n- **高斯-牛顿法（Gauss-Newton）**：假设误差较小，线性近似求解。\n- **Levenberg-Marquardt（LM）算法**：结合梯度下降和高斯-牛顿法，适用于更复杂的非线性问题。\n- **梯度下降（SGD, Adam 等）**：用于大规模机器学习问题。\n\n这些方法依赖 **迭代计算**，收敛速度取决于初始值、优化算法和问题本身的性质。\n\n---\n\n## 3. SVD 和非线性优化的区别\n\n| 比较项       | **SVD 求解**         | **非线性优化求解**          |\n| --------- | ------------------ | -------------------- |\n| **适用范围**  | 线性最小二乘问题           | 非线性最小二乘问题            |\n| **计算方式**  | 直接计算，基于矩阵分解        | 迭代优化，逐步逼近最优解         |\n| **全局最优性** | 直接得到全局最优解          | 可能陷入局部最优，依赖初值        |\n| **计算复杂度** | 一次矩阵分解，通常 $O(n^3)$ | 多次迭代，每次计算梯度，复杂度因问题而异 |\n| **收敛速度**  | 计算稳定，适用于小中型问题      | 依赖算法选择，可能收敛慢或不收敛     |\n| **数值稳定性** | 适用于病态矩阵            | 可能因梯度消失或爆炸而不稳定       |\n\n---\n\n## 4. 应用场景\n\n### **SVD 适用场景**\n\n✅ **线性系统求解**\n\n- 计算 **线性最小二乘问题**，如 $Ax = b$\n- 计算 **Moore-Penrose 伪逆**，解决欠定或超定问题。\n- 计算 **主成分分析（PCA）**，用于数据降维。\n\n✅ **数值稳定性要求高的情况**\n\n- 处理病态矩阵，避免直接求逆带来的误差。\n\n✅ **不需要迭代求解**\n\n- 适用于 **小中规模问题**，一次 SVD 分解即可求解。\n\n---\n\n### **非线性优化适用场景**\n\n✅ **非线性方程求解**\n\n- 计算机视觉中的 **相机标定**（比如 Zhang’s 方法）。\n- **非线性回归**（如指数拟合、幂律拟合）。\n- **机器人运动学优化**，求解复杂多变量系统。\n\n✅ **迭代逼近更优解**\n\n- **深度学习训练**（梯度下降 + 反向传播）。\n- **结构光三维重建**（优化误差函数）。\n\n✅ **模型复杂，无法直接求解**\n\n- 如 **Bundle Adjustment（捆绑调整）**，用于多视角几何优化。\n\n---\n\n## 5. 总结\n\n- **SVD 适用于线性最小二乘问题**，计算稳定，适合中小规模问题，**一次性求解最优解**。\n- **非线性优化适用于非线性问题**，需要迭代优化，**可能陷入局部最优**，但适用于更复杂的系统。\n\n如果问题是 **线性的**，SVD 是最快且最可靠的方法；如果问题是 **非线性的**，就需要使用 **非线性优化**（如 LM 算法）。\n\n##### refrence\n[线性和非线性最小二乘问题的各种解法](https://www.zhihu.com/tardis/bd/art/555298443)"
  },
  {
    "path": "Algorithm/Theta_star-Any-Angle-Path-Planning-on-Grids.md",
    "content": "# Theta*: Any-Angle Path Planning on Grids\n\n你可以在这里下载到原[论文](https://arxiv.org/ftp/arxiv/papers/1401/1401.3843.pdf)，并且在这里找到ros2中所实现的theta*[注释版本](https://github.com/hanlin-cheng/Basic_Theta_star_planner)\n\n## 简介\n\n在机器人和视频游戏中，具有被阻挡和未被阻挡两种单元格的网格通常被用于表示地形。然而，网格边形成的路径可能比实际地形中真正的最短路径长，因为它们的方向受到人为约束。\n\n![image-20230105182232760](media/image-20230105182232760.png)\n\n如图所示，A* 可以快速找到网格路径（即约束到网格边缘的路径），但网格路径通常不是真正的最短路径（即地形中的最短路线），因为它们的潜在航向被人为地约束为45度的倍数，这一缺点导致引入了所谓的任意角度路径规划。Basic Theta* 和Angle-Propagation Theta* 都是A* 的变体，它们沿着网格边缘传播信息（以实现短运行时间），而不限制到网格边缘的路径（以找到任何角度路径）。其中Basic Theta* 易于理解和实现，速度快，可找到短路径。值得注意的是，与可见性图上的A*不同，它们并不能保证找到真正的最短路径。\n\n我们通过实验证明，Theta* 找到的路径比A* with post-smoothed paths和D* （我们所知的唯一一个沿着网格边缘传播信息而不将路径约束到网格边缘的A* 版本）更短，运行时间与网格上的A*相当。\n\n## 现有路径规划算法\n\n简单介绍一些现有的路径规划算法，**所有这些算法都是A*的变体**\n\n### A*\n\n你可以在这里找到A* 算法得原理介绍\n\nA*算法通过下面这个函数来计算每个节点的优先级。\n$$\nf(n) = g(n) + h(n)\n$$\n其中：\n\n- **f(n)** 是节点n的综合优先级。当我们选择下一个要遍历的节点时，我们总会选取综合优先级最高（值最小）的节点。\n- **g(n)** 是节点n距离起点的代价。\n- **h(n)** 是节点n距离终点的预计代价，这也就是A*算法的启发函数。关于启发函数我们在下面详细讲解。\n\nA*算法在运算过程中，每次从优先队列中选取f(n)值最小（优先级最高）的节点作为下一个待遍历的节点。\n\n下图是A*算法的伪代码\n\n![image-20230105200349426](media/image-20230105200349426.png)\n\n##### 注：路径提取（伪代码中未显示）遵循从目标顶点到起始顶点的父级，以反向检索从起始顶点到目标顶点的路径。\n\n在网格顶点和边给出的图形上运行A* 。生成的路径被人为地约束为由网格的边缘形成，如图1（a）所示。因此，a* 在网格上找到的路径并不等同于真正的最短路径，而且看起来不现实，因为它们要么与真正的`最短路径`有很大的偏差，要么有更多的`航向变化`，这为平滑它们提供了动力。\n\n### A* with Post-Smoothed Paths (A* PS)\n\nA* PS在网格上运行A*，然后在后处理步骤中平滑生成的路径，这虽然会缩短路径长度但是会导致运行时间增加。常见的平滑算法如图所示\n\n![image-20230105201756001](media/image-20230105201756001.png)\n\nA* PS使用路径上的第一个顶点作为当前顶点。然后，它检查当前顶点s0是否具有到路径上其继任者的继任者s2的视线。如果是，A* PS会从路径中删除中间顶点s1，从而缩短其长度。A* PS然后通过再次检查当前顶点s0是否与路径上的后继顶点s3有视线等方式重复此过程。一旦当前顶点与路径上后继顶点的后继顶点没有视线，A* PS前进当前顶点并重复此过程，直到它到达路径的末端。\n\nA* PS通常在网格上找到比A* 更短的路径，但不能保证找到真正的最短路径。下图显示了一个示例。A* PS不能保证找到真正的最短路径，因为它只考虑A* 搜索期间的网格路径，因此无法在A* 搜索过程中做出关于其他路径的明智决策。\n\n![image-20230105202240108](media/image-20230105202240108.png)\n\n### Field D* (FD*)\n\nFD* 沿着网格边缘传播信息，而不将路径限制到网格边缘。\n\n![image-20230105202445560](media/image-20230105202445560.png)\n\n当FD* 更新顶点s的未展开的可见邻居s′的g值和父级时，它考虑从起始顶点到顶点s′的周界上的任何点X（不一定是顶点）的所有路径。图4显示了一个示例。\n\nFD* 不知道点X的g值，因为它只存储顶点的g值。它使用周长上与点X相邻的两个顶点的g值之间的线性插值来计算g值。即使顶点B3和C3的g值都等于它们的真实开始距离，计算的点X的g值也不同于其真实开始距离[＝2.55]。这个错误的原因很简单。存在从起始顶点通过顶点C3或顶点B3到目标顶点的真实最短路径。因此，线性插值假设预测还必须存在从起始顶点到沿着连接顶点B3和C3到目标顶点的边缘的任何点的短路径。然而，事实并非如此，因为路径需要绕过阻塞的格子B2-B3-C3-C2，这使得路径比预期的更长。由于错误计算了点X的g值，FD* 将顶点B4的父节点设置为点X，导致路径在点X处具有不必要的航向变化，甚至比最短的栅格路径更长。\n\nFD* 的作者认识到，FD* 发现的路径经常有不必要的航向变化。有一些前瞻算法可以避免一些不必要的航向变化，如图4所示，但并不能消除所有这些变化。图5以红色显示了FD* 路径的示例，以蓝色显示了相应的真实最短路径。**FD* 路径仍有许多不必要的航向更改**。\n\n### A* on Visibility Graphs\n\n可见性图上的A* 可以找到真正的最短路径。如图所示。真正的最短路径只在被阻挡的单元格的角落有方向变化，而A* 在网格、A* PS和FD* 上找到的路径可能有不必要的方向变化。另一方面，可见性图上的A* **可能很慢**。它沿着可见性图边缘传播信息，其数量会随着单元格的数量呈二次方增长，而网格上的A* 、A* PS和FD* 沿着网格边缘传播信息耗时则要短一些。\n\n![image-20230105203131811](media/image-20230105203131811.png)\n\n### 以上算法对比\n\n我们简单描述了依据A* 算法的几种现有路径规划算法，下图描述了它们如何在两个冲突的标准（即运行时间和路径长度）之间进行权衡\n\n![image-20230105203432503](media/image-20230105203432503.png)\n\n## Theta *\n\n在本节中，我们将介绍Theta* ，它的路径只比真正的最短路径稍长，但只比网格上的A* 略慢。**Theta* 和A* 之间的关键区别在于，当使用Theta* 时，顶点的父对象可以是任何顶点，而当使用A* 时，该顶点的父节点必须是该顶点的邻居。** 我们首先介绍Basic Theta* ，它是Theta* 的简单版本。\n\n### Basic Theta*\n\n算法3显示了Basic Theta* 的伪代码。过程Main与算法1中的A* 相同，因此未示出。\n\n![image-20230106100016396](media/image-20230106100016396.png)\n\n基本Theta* 很简单。它与A* 相同，不同之处在于，当它在过程Update Vertex中更新顶点s的未展开可见邻居s′的g值和父级时，它考虑两条路径而不是仅由A* 考虑的一条路径。\n\n![](media/image-20230106100432305.png)\n\n如图(a)显示了一个示例。基本Theta* 正在用父级A4扩展顶点B3，并且需要更新未扩展的可见邻居C3的g值和父级。基本Theta* 考虑两条路径：\n\n**路径1**：基本Theta* 考虑从起始顶点到顶点s和从顶点s到顶点s′的直线路径，导致长度为g[Line52]。路径1是A* 考虑的路径。它对应于（a）中的红色虚线路径[A4，B3，C3]。\n\n**路径2:** Basic Theta* 还考虑了从起始顶点到顶点s的父节点以及从顶点s的母节点到顶点s′的的路径，从而得到长度[Line 44]。A* 不考虑路径2，不允许Basic Theta*构造任何角度路径。它对应于图中的蓝色实线路径[A4，C3]。\n\n#### 示例(Basic Theta*)\n\n![image-20230106101238741](media/image-20230106101238741.png)\n\n上图显示了Basic Theta* 的跟踪示例。每个顶点用其g值和父对象标记。箭头指向他们的父节点。红色圆圈表示正在展开的顶点，蓝色箭头表示在当前展开期间生成的顶点。\n\n1. 首先，Basic Theta* 用父顶点A4展开起始顶点A4，如图（a）所示。它将顶点A4的未展开可见邻居的父对象设置为顶点A4，这和A* 所做的一样。\n2. 其次，Basic Theta* 使用父节点A4展开顶点B3，如图（b）所示。顶点B2是顶点B3的未展开的可见邻居，不具有到顶点A4的视线。基本Theta* 因此根据路径1更新它，并将其父节点设置为顶点B3。另一方面，顶点C2、C3和C4是顶点B3的未展开可见邻居并且具有到顶点A4的视线的。因此，Basic Theta* 根据路径2更新它们，并将它们的父对象设置为顶点A4。（顶点B3的其他未展开的可见邻居的g值和父级不会更新。）\n3. 第三，Basic Theta* 用父级B3展开顶点B2，如图（c）所示。坐标A1和A2是顶点B2的未展开的可见邻居，其不具有到顶点B3的视线。因此基本Theta* 根据路径1更新它们，并将它们的父对象设置为顶点B2。另一方面，顶点B1和C1是顶点B2的未展开的可见邻居，它们具有到顶点B3的视线。因此基本Theta* 根据路径2更新它们，并将它们的父对象设置为顶点B3。\n4. 第四，Basic Theta* 用父节点B3扩展目标顶点C1并终止，如图（d）所示。然后，路径提取跟随从目标顶点C1到起始顶点A4的父节点，反向检索得到从起始顶点到目标顶点的真实最短路径[A4，B3，C1]。\n5. 在每次迭代期间，它都会展开openlist列表中的一个顶点。在此过程中，它将从openlist中删除顶点，然后再也不能将其插入openlist中。由于顶点的数量是有限的，openlist最终会变为空，如果Basic Theta* 还没有提前终止，则必须终止。\n\n#### Basic Theta* 的性质\n\n这一部分定理都比较符合常识，并且不存在数学推理，因此不做过多论述，有兴趣的可以参考[原论文](https://arxiv.org/ftp/arxiv/papers/1401/1401.3843.pdf)\n\n#### 对Basic Theta* 性能的一些总结与讨论\n\n![image-20230106104130416](media/image-20230106104130416.png)\n\nBasic Theta* 并不是最优的（也就是说，它不能保证找到真正的最短路径），因为**顶点的父对象必须是顶点的可见邻居或可见邻居的父对象**，而对于真正的最短路并不总是这样。图（a）显示了一个示例，其中红色虚线路径[E1，B9]是从起始顶点E1到顶点B9的真正最短路径，因为顶点E1具有到顶点B9的视线。然而，顶点E1既不是顶点B9的可见邻居，也不是其可见邻居的父对象，因为顶点E1对这些顶点没有视线（以红色突出显示）。因此，Basic Theta* 无法将顶点B9的父节点设置为顶点E1，并且无法找到从顶点E1到顶点B9之间的真正最短路径。类似地，图（b）显示了一个示例，其中红色虚线路径[E1，D8，C10]是从顶点E1到顶点C10的真实最短路径。然而，顶点D8既不是顶点C10的可见邻居，也不是其可见邻居的父节点，因为起始顶点E1要么对其具有视线，要么Basic Theta* 找到了从顶点E1到它们的路径，而这些路径并不包含顶点D8。事实上，从顶点E1到顶点C10的所有可见邻居（顶点E1没有视线在其上方（而不是下方）移动）的真正最短路径阻塞了单元格C7-C8-D8-D7。因此，Basic Theta* 无法将顶点C10的父节点设置为顶点D8，因此无法找到从顶点E1到顶点C10之间的真正最短路径。图（a）中从顶点E1到顶点B9的蓝色实线路径和图（b）中从点E1到顶点C10的蓝色虚线路径比实际最短路径长1.002倍。\n\n![image-20230106104536141](media/image-20230106104536141.png)\n\nBasic Theta* 利用这样一个事实：**即真正的最短路径只在被阻挡的单元格的角落处有方向变化。然而，Basic Theta* 发现的路径有时会有不必要的航向变化。**上图显示了一个示例，其中Basic Theta* 找到从顶点A1到顶点D6的实心蓝色路径[A1，D5，D6]。这个错误的原因很简单。假设开放列表包含顶点C5和D5。顶点C5的f值为f（C5）=g（C5）+h（C5）=4.61+1.41=6.02，其父顶点为顶点C4。顶点D5的f值为f（D5）=5.00+1.00=6.00，其父顶点为顶点A1。因此，Basic Theta* 在顶点C5之前展开顶点D5（因为其f值较小）。当Basic Theta* 用父对象A1展开顶点D5时，它将生成顶点D6。顶点D6是顶点D5的未展开的可见邻居，其不具有到顶点A1的视线。因此，Basic Theta* 根据路径1对其进行更新，将其f值设置为f（D6）=6.00+0.00=6.00，将其父对象设置为顶点D5，并将其插入到打开列表中。因此，基本Theta*在顶点C5之前扩展目标顶点D6（因为其f值较小）并终止。\n\n然后，路径提取跟随从目标顶点D6到起始顶点A1的父对象，以检索蓝色实心路径[A1，D5，D6]。因此我们发现，Basic Theta* 从不扩展顶点C5，扩展顶点C5才会导致它根据路径2将顶点D6的父级设置为顶点C4，路径提取才能检索红色虚线路径[A1，C4，D6]，这是真正的最短路径。图中从顶点A1到顶点D6的蓝色实线路径比实际最短路径长1.027倍。\n\n### Angle-Propagation Theta* (AP Theta*)\n\nAP Theta* 将Basic Theta* 每个顶点扩展的运行时间从线性减少到恒定。**AP Theta* 和Basic Theta* 之间的关键区别在于，AP Theta* 传播角度范围，并使用它们来确定两个顶点是否具有视线。**\n\n如果顶点处有光源，光线无法通过被阻挡的单元格，则阴影中的单元格没有顶点的视线，而所有其他单元格都有顶点的视线。下图显示了一个示例，其中由两个角度边界θ1和θ2定义的红色角度范围内的所有点都具有到顶点的视线。AP Theta* 在顶点展开时计算顶点的角度范围，由于角度范围可以在恒定时间内传播，并且视线检查也可以在恒定的时间内执行。\n\n![image-20230106112403692](media/image-20230106112403692.png)\n\n算法4显示了AP Theta* 的伪码。过程Main与算法1中的A* 相同，因此未示出。将执行第13行。\n\n![image-20230106112544371](media/image-20230106112544371.png)\n\n#### 角度范围的定义\n\n我们现在讨论角度范围的关键概念。AP Theta* 为每个顶点s添加两个附加值，即顶点s的下角边界lb（s）和顶点s的上角边界ub（s），它们一起形成顶点s的角度范围[lb(s)，ub(s)]。角度边界对应于源自顶点s的父级的光线的方向（以度为单位）。从顶点s的父对象到顶点s的光线方向为零度。\n\n![image-20230106112817002](media/image-20230106112817002.png)\n\n上图显示了一个示例，其中顶点C3与父顶点A4的角度范围为[-18，27]。因此，确保了红色区域中顶点C3的所有可见邻居具有到顶点C3的父对象的视线。例如，顶点C4具有到顶点C3的父对象的视线，但顶点B2没有。因此，AP Theta* 假设顶点B2与顶点C3的父对象没有视线。\n\nΘ（s，p，s′）∈[−90，90]，是从顶点p到顶点s的光线与从顶点p到点s′的光线之间的角度（以度为单位）。如果从顶点p到顶点s的光线是从顶点p至顶点s′的光线的顺时针方向，则为正；如果从顶点p到顶点s的光线与从顶点p至顶点s′的光线具有相同的航向，则为零；如果从点p到点s的光线从顶点p至点s′的射线是逆时针方向，那么为负。\n\n#### 角度范围更新\n\n如上图算法UpdateBounds(s)所示，这里不做细节论述，感兴趣的可以参考[原论文](https://arxiv.org/ftp/arxiv/papers/1401/1401.3843.pdf)。\n\n#### 对AP Theta* 性能的一些总结与讨论\n\nAP Theta* 的操作方式与Basic Theta* 相同，因此具有与Basic Theta* 类似的属性。例如，AP Theta* 正确且完整。**它不能保证找到真正的最短路径，而且它的路径有时会有不必要的方向更改。**\n\nAP Theta* 有时会对角度范围进行超出必要的限制，以确保其找到未阻塞的路径，这意味着其视线检查有时会失败，在这种情况下，它必须根据路径1而不是路径2更新顶点。AP Theta* 仍然是完整的，因为如果所有视线检查都失败，它会找到一条未阻塞的网格路径，**因为如果存在未阻塞的任何角度路径，则始终存在一条未堵塞的网格路径。**\n\n![image-20230106121259887](media/image-20230106121259887.png)\n\n**AP Theta* 发现的路径可能比Basic Theta* 找到的路径更长。**上图显示了一个示例。当AP Theta* 用父顶点B1展开顶点C4并计算顶点C4的角度范围时，顶点C3未展开，因此不在闭合列表中。这意味着AP Theta* 没有足够的C3顶点信息。例如它不知道单元C2-C3-D3-D2是否畅通。AP Theta* 因此不能精确地确定顶点C4的角度范围，并且保守地假设顶点C3几乎没有到顶点B1的视线。然后，它使用得到的角度范围来确定顶点C4的未扩展的可见邻居D4不保证具有到顶点B1的视线。然而事实上，如果单元格C2-C3-D3-D2未被阻挡，则顶点D4与顶点B1是有视线的。AP Theta* 最终找到从起始顶点B1到顶点D4的蓝色实线路径[B1，C3，D4]，而Basic Theta* 找到的红色虚线路径[B1、D4]是真正的最短路径。\n\n## 实验结果对比\n\n在本节中，我们将Basic Theta* 和AP Theta* 与网格上的A* 、A* PS、FD* 和可见性图上的A* 的路径长度、顶点展开次数、运行时间（以秒为单位）和航向变化次数进行比较。\n\n作者在100×100和500×500网格上比较了这些路径规划算法，这些网格具有不同百分比的随机阻挡单元和来自实时策略游戏Baldur's Gate II（游戏地图）的缩放地图。\n\n![image-20230106122014894](media/image-20230106122014894.png)\n\n![image-20230106122027361](media/image-20230106122027361.png)\n\n![image-20230106122042849](media/image-20230106122042849.png)\n\n![image-20230106122055594](media/image-20230106122055594.png)\n\n![image-20230106122147272](media/image-20230106122147272.png)\n\n1.作者对路径长度进行了以下观察：\n\n- 路径规划算法按路径长度增加的顺序排列为：可见性图上的A* （找到真正的最短路径），网格上的Basic Theta* 、AP Theta* ，FD* 、A* PS和A* 。在随机的500×500网格中，20%的单元格被阻挡，Basic Theta* 在70%的时间内发现比AP Theta* 更短的路径，97%的时间内找到比FD* 97%更短的路径。\n- Basic Theta* 和AP Theta* 发现的路径几乎与真正的最短路径一样短，即使AP Theta* 有时限制角度范围超过了必要范围。例如，它们平均比100×100网格上的真实最短路径长1.003倍。\n- Basic Theta* 比FD* 和A* PS更容易找到真正的最短路径。下图显示了一个示例，其中中心的浅绿色顶点是起始顶点，红色、绿色和蓝色顶点分别表示目标顶点，FD* 、A* PS和Basic Theta* 分别找到的路径。\n\n![image-20230106130636020](media/image-20230106130636020.png)\n\n2.作者对运行时进行了以下观察。按运行时间增加的顺序排列的路径规划算法是：网格上的A* 、Basic Theta* 、AP Theta* ，A* PS、FD* 和可见性图上的A* 。\n\n3.作者对顶点展开的数量进行了以下观察。路径规划算法按顶点展开次数增加的顺序排列：可见性图上的A* ，网格上的A* ，AP Theta* ，Basic Theta* 、FD* 和A* PS。\n\n4.最后，作者对航向变化的次数进行了以下观察。按航向变化次数增加的顺序排列的路径规划算法通常为：A* PS、A* （可见性图）、Basic Theta* 、AP Theta* 、A* 和FD* 。\n\n上述趋势有一些例外。因此进行配对t检验。他们以置信水平α=0.01表明，**Basic Theta* 确实比AP Theta* 、A* PS和FD* 找到更短的路径，并且Basic Theta* 确实比AP Theta* 、A* PS和FD* 具有更短的运行时间。**\n\n**总之，可见性图上的A* 可以找到真正的最短路径，但速度很慢。另一方面，网格上的A*可以找到很长的路径，但速度很快。任何角度的路径规划都介于这两个极端之间。**\n\n因此，尽管作者也报告了一些AP Theta* 的实验结果，但在论文的剩余部分中，作者以Basic Theta* 为基础。然而，AP Theta* 将Basic Theta* 每个顶点扩展的运行时间从线性减少到常数。目前还不知道是否可以设计出使AP Theta* 比Basic Theta* 更快的恒定时间视线检查。这是未来研究的一个有趣领域，因为AP Theta*可能是通过更复杂的视线检查显著减少任何角度路径规划运行时间的第一步。\n\n## Basic Theta* 的扩展\n\n到目前为止，Basic Theta* 已经在网格上找到了路径，这些路径包含未阻塞的单元格，并且遍历成本相同。**在遍历成本相同这种情况下，真正的最短路径仅在被阻挡的单元格的角部具有方向变化，**并且三角形不等式成立，这意味着路径2不长于路径1。我们现在讨论Basic Theta* 的一个版本，该版本通过适当计算和比较路径长度（现在是路径成本）来查找包含未阻塞单元格且遍历成本不均匀的网格上的路径。\n\n在这种情况下，真正的最短路径也可能在具有不同遍历成本的未阻塞单元格之间的边界处具有方向变化，并且三角形不等式不再保证成立，这意味着路径2可能比路径1更昂贵。因此，如果路径2未阻塞，Basic Theta* 不再无条件地选择路径2而不是选择路径1，而是选择成本较小的路径。它使用计算机图形学中的标准Cohen Sutherland裁剪算法来计算视线检查期间路径2的成本。如下图显示了从顶点C1到顶点A6的路径段C1-A6的示例。此直线在与单元边界相交的点处被分割为线段。路径段的成本是其每个线段的成本之和，**每个线段的成本是它的长度和相应未阻塞单元的遍历成本的乘积。**\n\n![image-20230106174717136](media/image-20230106174717136.png)\n\n我们发现，将算法3中第52行的测试从“严格小于”改为“小于或等于”会略微减少Basic Theta* 的运行时间。这是由于计算路径1相对应的路径段的成本比计算路径2相对应的路径段的成本更快，因为路径1往往由更少的线段组成。\n\n我们比较了和上的Basic Theta* 和网格上的A* 和FD* 的路径成本和运行时间（以秒为单位），因为A* 可以很容易地适应包含非均匀遍历成本的未阻塞单元的网格，而FD* 就是为这种情况而设计的。我们在1000×1000网格上比较了这些路径规划算法，其中每个单元被分配了1到15（对应于未阻塞单元）和无穷大（对应于阻塞单元）的整数遍历成本。\n\n![image-20230106180705236](media/image-20230106180705236.png)\n\n表（a）显示，如果以统一的概率选择每个遍历成本，则会产生统一遍历成本的小连续区域。FD* 的路径成本和运行时间都小于Basic Theta* 。A* 在网格上的路径成本仅比FD* 大1%左右，尽管其运行时间比FD* 小得多。因此，与网格上的a* 相比，任何角度规划都没有太大的优势。表（b）显示，如果以50%的概率选择遍历成本，并且以统一的概率选择所有其他遍历成本，则会产生具有统一遍历成本的大型连续区域。Basic Theta* 的路径成本现在小于FD* ，其运行时间与FD* 大致相同。FD* 发现的路径在具有相同遍历成本的区域中具有比Basic Theta* 更多的不必要的方向变化，这超过了Basic Theta* 发现的在具有不同遍历成本的两个单元格之间的边界上没有必要的方向改变的路径。A* 在网格上的路径成本比Basic Theta* 大3%以上。\n\n**因此，任何角度规划现在都比网格上的A* 具有更大的优势**。\n\n### 利用h值权衡运行时间和路径长度\n\nA* 和Basic Theta* 共享一些可以在运行时间和路径长度之间进行权衡的策略。\n\n需要注意的是，即使两种算法具有非常相似的伪代码，它们的行为也可能拥有非常大的不同。在本节中，我们扩展了Basic Theta* 的版本，这些版本可能能够在运行时间增加的同时找到更短的路径，**包括使用权重小于1的加权h值，打破开放列表中具有相同f值的顶点之间的联系支持具有较小g值的顶点（当它们决定下一个展开哪个顶点时），重新展开f值已降低的顶点**。\n\n我们使用的所有路径规划算法具有一致h值。那么网格上的A* 具有以下属性：**在根据路径1更新任何未展开的可见相邻顶点之后，任何展开顶点的f值都不大于其未展开的相邻顶点的f，**这意味着在某个其他顶点之前展开的任何顶点的f都不大于该其他顶点的f值。因此，在搜索过程中的任何时间点，一旦展开了顶点，跟随从展开顶点到起始顶点的父对象，将反向检索从起始顶点到展开顶点的最短路径，**这意味着a* 无法通过多次展开顶点来找到较短路径。**\n\nBasic Theta* 具有不同的属性：在根据路径2更新一个或多个未展开的可见相邻顶点之后，展开顶点的f值可以大于它们的f值，这意味着在某个其他顶点之前展开的顶点的f值可能会更大。因此，在搜索过程中的任何时间点，一旦顶点展开，从展开的顶点到起始顶点的父对象的跟随不能保证反向检索从起始顶点到顶点的最短路径，这意味着Basic Theta*可能会通过多次展开顶点找到更短的路径。\n\n![image-20230106183533341](media/image-20230106183533341.png)\n\n上图显示了一个示例。当Basic Theta* 用父顶点C1展开起始顶点C1时，它将生成顶点B2。顶点B2是顶点C1的未展开的可见邻居，其具有到顶点C1的视线。因此，Basic Theta* 根据路径2（在本例中与路径1相同）对其进行更新，将其f值设置为f（B2）=1.41+3.16=4.57，将其父对象设置为顶点C1并将其插入开放列表（图（a））。当Basic Theta* 稍后用父级C1展开顶点B2时，它将生成顶点B3。V顶点B3是顶点B2的未展开的可见邻居，其具有到顶点C1的视线。因此，Basic Theta* 根据路径2对其进行更新，将其f值设置为f（B3）=2.24+2.24=4.48，将其父级设置为顶点C1并将其插入打开列表（图（b））。因此，在根据路径2对其进行更新之后，扩展顶点B2的f值确实大于其未扩展可见邻居B3的f值，因为从顶点B2到顶点B3的g值的增加[＝0.83]小于从顶点B2至顶点B3的h值的减少[＝0.92]。当Basic Theta* 稍后展开顶点B3时，在顶点B3之前展开的顶点B2[=4.57]的f值确实大于顶点B3[=4.48]的f值。\n\n这些属性表明，Basic Theta* 可能能够通过重新扩展顶点或扩展其他顶点（例如使用权重小于1的加权h值）在运行时间增加时找到更短的路径，而A* 则不能。同时，减少A* 运行时间的标准优化也可能会减少Basic Theta*的运行时间（例如，支持具有较大g值的顶点来打破开放列表中具有相同f值的顶点之间的联系）。\n\n#### 启发函数加权h\n\n具有一致h值的A* 可以找到相同长度的路径，无论h值有多小或多大。减小h值通常会增加A* 的顶点展开数。因此，我们现在讨论Basic Theta* 的一个版本，该版本通过使用权重小于1的加权h值，可以在运行时间增加时找到更短的路径。该版本的Basic Theta* 使用给定权重0 ≤ w < 1的h值，h（s）=w × c（s，sgoal）。图（a）显示了对顶点展开数和路径长度的影响示例。权重为1.00的Basic Theta* （目前使用）展开橙色顶点并找到红色路径。权重为0.75的Basic Theta* 展开蓝色顶点并找到蓝色路径。\n\n![image-20230106190344944](media/image-20230106190344944.png)\n\n因此，Basic Theta*使用权重0.75比权重1.00时的路径短。\n\n![image-20230106190548471](media/image-20230106190548471.png)\n\n图（b）报告了不同权重对Basic Theta* 和AP Theta*在随机500×500网格上的路径长度和顶点扩展数的影响，其中20%的网格被阻挡。\n\n（图表上Basic Theta* 和AP Theta* 的顶点展开次数几乎一致。）随着减小权重会减小路径长度，顶点展开次数和运行时间都会增加，。AP Theta* 的路径长度比Basic Theta* 减少得更多，因为AP Theta* 可以对角度范围进行更多的限制，从而从两个方面受益来扩展更多的顶点。**然而，Basic Theta* 和AP Theta* 都不能保证找到真正的最短路径，即使它们的权重为零。**\n\n### Tie Breaking\n\n作者讨论了Basic Theta* 的一个版本，该版本可以通过打破联系选择具有较小g值的顶点，在运行时间增加时找到更短的路径。下图的示例显示了对路径长度产生的影响。\n\n![image-20230106192358694](media/image-20230106192358694.png)\n\n顶点C4和B4具有相同的f值，但顶点B4具有更大的g值，因为f（C4）= 3.83 + 1.41 = 5.24，f（B4）= 4.24 + 1 = 5.24。\n\n如果Basic Theta* 趋向选择具有更大g值的顶点，那么它将在顶点C4与父顶点C3之间展开顶点B4，并最终将目标顶点与父顶点B4展开并终止。然后，路径提取跟随从目标顶点B5到起始顶点E1，以检索出红色虚线路径[E1，B4，B5]。然而，如果Basic Theta* 趋向选择具有较小g值的顶点，则它在扩展顶点B4之前扩展具有父级C3的顶点C4，并最终扩展具有父级C3视野的目标顶点并终止。然后，路径提取跟随从目标顶点B5到起始顶点E1，以检索出较短的蓝色实心路径[E1，C3，B5]。\n\n![image-20230106192928942](media/image-20230106192928942.png)\n\n上表报告了在具有20%阻挡单元的随机500×500网格上，打破连接方案对Basic Theta* 和AP Theta* 的路径长度、顶点扩展数和运行时间的影响。**选择具有较小g值的顶点既不会显著改变路径长度、顶点展开次数，也不会显著改变运行时间。**由于Basic Theta* 和AP Theta* 在网格上具有相同f值的顶点比A* 的顶点少，因此效果很小。\n\n### 重新展开顶点\n\n到目前为止，Basic Theta* 使用了一个封闭列表来确保它最多扩展一次每个顶点。具有一致h值的A* 不会重新展开顶点，无论它是否使用封闭列表，因为在展开顶点后，它无法找到从起始顶点到顶点的较短路径。另一方面，如果Basic Theta* 不使用封闭列表，它可以重新展开顶点，因为它可以在展开顶点后找到从起始顶点到顶点的较短路径。然后将顶点重新插入打开列表并最终重新展开他们。\n\n![image-20230106193924373](media/image-20230106193924373.png)\n\n上图显示了顶点重新展开对路径长度的影响。没有顶点重新展开的Basic Theta* 最终用父节点D4展开顶点C8。顶点C9是顶点C8的未展开可见邻居，其具有到顶点D4的视线。因此，没有顶点重新展开的Basic Theta* 根据路径2更新它，并将其父对象设置为顶点D4。终止后，路径提取跟随从目标顶点B9到起始顶点E1，以检索红色虚线路径[E1，D4，C9，B9]。然而，顶点重新展开的Basic Theta* 最终用父节点D4展开顶点C8，然后用父E1重新展开顶点C8。节点C9是顶点C8的可见邻居，其具有到顶点E1的视线。具有顶点重新展开的Basic Theta* 因此根据路径2更新它，并将其父对象设置为顶点E1。终止后，路径提取跟随从目标顶点B9到起始顶点E1，以检索较短的蓝色实心路径[E1，C9，B9]。\n\n## 总结\n\n可见性图上的A* 可以找到真正的最短路径，但速度较慢。另一方面，网格上的A* 可以找到很长的路径，但速度很快。任何角度路径规划算法都介于这两个极端之间。在运行时间和路径长度之间的权衡方面，Basic Theta* 与AP Theta* 、A* PS和FD* 相比占据优势。\n\n## 附录A Line-of-Sight\n\n![image-20230106195109898](media/image-20230106195109898.png)"
  },
  {
    "path": "Algorithm/Voronoi Graph.md",
    "content": "可视化图表来展示脊线扩展算法前后地图的变化过程\n\n![image-20250804115017437](media/image-20250804115017437.png)\n\n![image-20250804115041054](media/image-20250804115041054.png)\n\n![image-20250804115059584](media/image-20250804115059584.png)\n\n![image-20250804115131196](media/image-20250804115131196.png)\n\n![image-20250804115152515](media/image-20250804115152515.png)"
  },
  {
    "path": "Algorithm/cartographer相关参数解析.md",
    "content": "# cartographer相关参数解析\n\n## 1.MAP_BUILDER\n\n`MAP_BUILDER` 是 Cartographer 的 **总体管理器**，它负责多个轨迹的管理、地图的生成、线程分配、后端优化等。\n\n| 参数                        | 说明                                                         |\n| --------------------------- | ------------------------------------------------------------ |\n| `use_trajectory_builder_2d` | 设置是否使用 2D 构建器                                       |\n| `num_background_threads`    | 后台线程数量（用于优化和子任务）                             |\n| `collate_by_trajectory`     | 多轨迹数据是否按轨迹聚合                                     |\n| `pose_graph`                | 与 Pose Graph（后端优化）相关的配置（如：约束构建、优化频率） |\n|                             |                                                              |\n\n\n\n## 2.TRAJECTORY_BUILDER_2D\n\n`TRAJECTORY_BUILDER_2D` 是 **局部前端模块**，负责处理单条轨迹的激光帧匹配、里程计融合、子图生成等。\n\n| 参数                                 | 说明                           |\n| ------------------------------------ | ------------------------------ |\n| `min_range`, `max_range`             | 激光最小/最大距离              |\n| `use_imu_data`                       | 是否使用 IMU                   |\n| `num_accumulated_range_data`         | 每多少帧合并为一次匹配         |\n| `motion_filter`                      | 运动过滤器（减少计算）         |\n| `submaps.num_range_data`             | 每个子图包含的激光帧数量       |\n| `ceres_scan_matcher`                 | 非线性优化匹配器（用于精匹配） |\n| `real_time_correlative_scan_matcher` | 实时相关匹配器（粗匹配）       |\n|                                      |                                |\n\n\n\n## 3.POSE_GRAPH\n\n`POSE_GRAPH` 是地图构建和纯定位过程中的 **后端优化模块（后端）**，用于管理 **轨迹节点（Nodes）** 与 **子图（Submaps）**，执行 **回环检测**，建立并优化 **约束图（Constraint Graph）**，通过非线性优化生成一致的全局地图等。\n\n| 参数                                       | 说明                               |\n| ------------------------------------------ | ---------------------------------- |\n| `optimize_every_n_nodes`                   | 每积累多少节点后执行一次优化       |\n| `constraint_builder.sampling_ratio`        | 构建约束的采样率，影响速度和精度   |\n| `constraint_builder.min_score`             | 匹配分数阈值，控制是否建立约束     |\n| `global_sampling_ratio`                    | 全局匹配尝试的频率（回环）         |\n| `global_constraint_search_after_n_seconds` | 节点添加后多久进行全局约束搜索     |\n| `max_num_final_iterations`                 | Ceres 优化的最大迭代次数           |\n| `huber_scale`                              | 鲁棒核函数参数，影响异常匹配的权重 |\n| `matcher_translation_weight`               | 优化时平移项的权重                 |\n| `matcher_rotation_weight`                  | 优化时旋转项的权重                 |\n|                                            |                                    |"
  },
  {
    "path": "Algorithm/media/math",
    "content": "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"5.472ex\" height=\"2.843ex\" style=\"vertical-align: -0.838ex;\" viewBox=\"0 -863.1 2355.9 1223.9\" role=\"img\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" aria-labelledby=\"MathJax-SVG-1-Title\">\n<title id=\"MathJax-SVG-1-Title\">f(x_{0})</title>\n<defs aria-hidden=\"true\">\n<path stroke-width=\"1\" id=\"E1-MJMATHI-66\" d=\"M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z\"></path>\n<path stroke-width=\"1\" id=\"E1-MJMAIN-28\" d=\"M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z\"></path>\n<path stroke-width=\"1\" id=\"E1-MJMATHI-78\" d=\"M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z\"></path>\n<path stroke-width=\"1\" id=\"E1-MJMAIN-30\" d=\"M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z\"></path>\n<path stroke-width=\"1\" id=\"E1-MJMAIN-29\" d=\"M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z\"></path>\n</defs>\n<g stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" transform=\"matrix(1 0 0 -1 0 0)\" aria-hidden=\"true\">\n <use xlink:href=\"#E1-MJMATHI-66\" x=\"0\" y=\"0\"></use>\n <use xlink:href=\"#E1-MJMAIN-28\" x=\"550\" y=\"0\"></use>\n<g transform=\"translate(940,0)\">\n <use xlink:href=\"#E1-MJMATHI-78\" x=\"0\" y=\"0\"></use>\n <use transform=\"scale(0.707)\" xlink:href=\"#E1-MJMAIN-30\" x=\"809\" y=\"-213\"></use>\n</g>\n <use xlink:href=\"#E1-MJMAIN-29\" x=\"1966\" y=\"0\"></use>\n</g>\n</svg>"
  },
  {
    "path": "Algorithm/ros2_cost_function.md",
    "content": "# ros2 cost function\n\n### Twirling\n\n##### brief:防止机器人运动过程中旋转过大，惩罚角速度\n```c++\ndouble TwirlingCritic::scoreTrajectory(const dwb_msgs::msg::Trajectory2D & traj)\n{\n  return fabs(traj.velocity.theta);  // add cost for making the robot spin\n}\n}  // namespace dwb_critics\n```\n\n### Oscillation\n\n##### brief:防止机器人只是前后移动，轨迹振荡\n场景1：机器人向前移动一米，然后向后移动两毫米。另一个向前运动将被认为是振荡的，因为x维度将从正翻转到负，然后再翻转到负。因此，当对不同的轨迹进行评分时，正速度命令将得到oscillation_score（-5.0，或无效），只有负速度命令将被视为有效。\n\n场景2：机器人向前移动一米，然后向后移动一米。因此，机器人在翻转x方向的符号后移动了一米，该符号大于我们的oscillation_reset_dist，因此它不被认为是振荡的，因此所有轨迹都被认为是有效的。\n\n### RotateToGoal\n\n##### brief:当机器人足够接近目标，才允许机器人旋转到目标方向\n存在有三个不同的阶段。\n\n1） 如果当前姿势在距离目标姿势的xy_goal_tolerance LINEAR距离之外，该评论家将只返回0.0分。\n\n2） 如果在xy_goal_tolerance范围内，且机器人仍以非零线性运动移动，则该评论家将仅允许比当前速度慢的轨迹来停止机器人（在机器人的加速度限制内）。返回的分数将是机器人的线速度的平方，乘以slowing_factor参数（默认值5.0），再加上scoreRotation的结果。\n\n3） 如果在xy_goal_tolerance范围内，且机器人的线性运动足够小，则该评论家会将线性运动的轨迹评分为无效，并根据scoreRotation方法的结果对其余轨迹进行评分\n\n### PreferForward\n\n##### brief:向前移动的轨迹得分会更高\n有三种不同的评分条件：\n\n1） 如果轨迹的x速度为负，则返回惩罚\n\n2） 如果轨迹的x较低，θ也较低，则返回惩罚。\n\n3） 否则，返回轨迹θ的缩放版本。\n\n```c++\nif (traj.velocity.x < 0.0) {\n    return penalty_;\n  }\n  // strafing motions also bad on such a robot\n  if (traj.velocity.x < strafe_x_ && fabs(traj.velocity.theta) < strafe_theta_) {\n    return penalty_;\n  }\n\n  // the more we rotate, the less we progress forward\n  return fabs(traj.velocity.theta) * theta_scale_;\n }\n```\n\n## BaseObstacleCritic\n\n##### brief:基于路径经过cosmap的位置对轨迹进行评分\n```c++\ndouble score = 0.0;\nfor (unsigned int i = 0; i < traj.poses.size(); ++i) {\ndouble pose_score = scorePose(traj.poses[i]);\nscore = static_cast<double>(sum_scores_) * score + pose_score;\n}\n```\n\n## ObstacleFootprintCritic\n\n##### brief:机器人足迹上的所有点都没有接触到costmap中的障碍物来对轨迹进行评分，防压脚\n检查足迹的边界是否有与物体发生碰撞\n\n### GoalDistCritic\n\n##### brief:挑选接近目标位姿的轨迹\n先将path根据地图分辨率进行插值，以path最靠近local cost map边界的点为目标，所在格子的cost为0，计算每个格子到目标的曼哈顿距离作为cost，相邻的格子cost依次加1。将每条轨迹经过的格子cost相加（或者取最后一个，或者相乘）\n\n### GoalAlignCritic\n\n##### brief:根据机器人是否指向目标点挑选相应的的轨迹\n用每个轨迹采样点正前方一定距离的格子来计算cost，继承自GoalDistCritic\n\n### PathDistCritic\n\n##### brief:挑选离Path最近的轨迹\n先将path根据地图分辨率进行插值，path所在的格子cost为0，往四周扩展，计算每个格子到目标的曼哈顿距离作为cost，相邻的格子cost依次加1。\n\n### PathAlign\n\n##### brief:挑选朝向Path的轨迹\n用每个轨迹采样点正前方一定距离的格子来计算cost，继承自PathDistCritic"
  },
  {
    "path": "Algorithm/为什么使用齐次坐标.md",
    "content": "# 为什么使用齐次坐标\n\n在计算机图形学里面会经常碰到几何体的平移,旋转,缩放以及投影变换. 一般情况下会涉及到齐次坐标与变换矩阵. 为了后续对变换矩阵内容的讲解, 在这里先简要的介绍一下什么是齐次坐标.\n\n## 问题:两条平行线可以相交?\n\n在欧氏空间（几何学）中，同一平面上的两条平行线不能相交，或者说不能永远相交。这是一个大家都熟悉的常识。\n\n但是，在投影空间中就不一样了，比如，下图上的火车铁路在远离眼睛的时候会变得更窄。最后，两条平行的铁轨在地平线处相交，也就是无限远处的一点。\n\n![image-20220828213045659](media/image-20220828213045659.png)\n\n铁路变窄，在地平线处相交。\n\n欧氏空间（或笛卡尔空间）能很好地描述我们的2D/3D几何，但它们不足以处理投影空间（实际上，欧氏几何是投影几何的一个子集）。一个2D点的笛卡尔坐标可以表示为（x，y）。\n\n如果这个点远去到无穷远呢？无穷远处的点在欧氏空间中无法具体展示。在投影空间中，平行线会在无穷远处相遇，但在欧氏空间中却做不到。\n\n那么数学家如何用数学的方法来描述这个问题呢?\n\n## 解决方案: 齐次坐标\n\n由 August Ferdinand Möbius(不错,就是那个莫比乌斯圈的那位) 提出的齐次坐标，使图形和几何学的计算在投影空间中成为可能。齐次坐标是用N+1个数来表示N维坐标的一种方式。\n\n要制作二维齐次坐标，我们只需在现有坐标中增加一个额外的变量w。因此，笛卡尔坐标中的一点，(X，Y)在齐次坐标中就变成了(x，y，w)。而笛卡儿坐标中的X和Y在齐次坐标中的x、y和w则重新表达为\n\nX = x/w\n\nY = y/w\n\n## 为什么叫 “齐次”呢？\n\n如前所述，为了将齐次坐标（x，y，w）转换为笛卡尔坐标，我们只需将x和y除以w即可。\n\n ![image-20220828213322558](media/image-20220828213322558.png)\n\n将Homogeneous转换为Cartesian，我们可以发现一个重要的事实。让我们看看下面的例子。\n\n ![image-20220828213342198](media/image-20220828213342198.png)\n\n如你所见 (1, 2, 3), (2, 4, 6)和(4, 8, 12)这三个点对应于同一个欧氏点(1/3, 2/3). 而任何乘以a的数（1a，2a，3a）与欧氏空间中的（1/3，2/3）是同一个点。因此，这些点是 “homogeneous/齐次 “的，因为它们在欧氏空间（或笛卡尔空间）中代表同一个点。换句话说，齐次坐标是与乘数a不相关的。\n\n ![image-20220828213355588](media/image-20220828213355588.png)\n\n## 数学证明: 两条平行线可以相交\n\n考虑以下欧氏空间的线性系统。\n\n ![image-20220828213408371](media/image-20220828213408371.png)\n\n而我们知道，由于C≠D，所以上述方程没有解。 如果C=D，那么两条线是相同的（重叠的）。\n\n让我们重写投影空间的方程，将x和y分别替换为x/w，y/w。\n\n ![image-20220828213418367](media/image-20220828213418367.png)\n\n现在，我们有一个解，(x，y，0)，因为(C-D)w=0，∴w=0. 因此，两条平行线在(x，y，0)处相交.\n\n(x,y,0)在几何上代表一条没有起点与终点, 也没有长度的射线，它只有方向。\n\n## 齐次坐标的应用\n\n齐次坐标在计算机图形学中是非常有用的基本概念，通过增加一个额外的维度W后，可以用来对几何体进行缩放,旋转,平移,透视投影的矩阵变换.\n\n任何N维度齐次坐标，只要W不为0，都可以通过将每一个分量除以W来转换到 W=1的向量, 然后获得其N-1维的欧式空间的点值。\n\n而当W=0时，这个坐标表示无限长的一个向量，通常表示N-1维的矢量。"
  },
  {
    "path": "Algorithm/二维空间中的点坐标旋转关系.md",
    "content": "# 二维空间中的点坐标旋转关系\n\n## 坐标点旋转后的点坐标\n\n问：坐标系不变，某点绕坐标系（原点）旋转θ 角度，求旋转后点的坐标：\n\n$x$，$y$表示旋转前的坐标\n\n$x_1$，$x_1$表示旋转后的坐标\n\nθ某点绕坐标系（原点）逆时针旋转θ角度\n\n则逆时针旋转公式：\n$x_1 = xcos(θ) - ysin(θ)$\n$y_1 = xsin(θ) + ycos(θ)$\n\n如果是顺时针方向旋转，把θ变成负的即可：-θ\n\n![这里写图片描述](media/20180524193743628)\n\n## 坐标点A绕着坐标点点B旋转后的点坐标\n\n$x_b$，$y_b$表示点B的坐标\n\n$x$，$y$表示点A旋转前的坐标\n\n$x_1$，$y_1$表示点A旋转后的坐标\n\nθ表示某点绕坐标系（原点）逆时针旋转θ角度\n\n逆时针旋转公式：\n\n$x_1=(x-x_b)cosθ - (y-y_b)sinθ + x_b$\n\n$y_1=(y-y_b)cosθ + (x-x_b)sinθ + y_b$\n\n如果是顺时针方向旋转，把θ变成负的即可：-θ\n\n## 坐标系旋转后的点坐标\n\n问：坐标系A绕着原点逆时针方向旋转了θ 度，形成新的坐标系B。\n\n$x$，$y$表示旋转前的坐标\n\n$x_1$，$y_1$表示旋转后的坐标\n\nθ 表示两个坐标系旋转相差的角度\n\n逆时针旋转 公式：\n\n$x_1 = xcos(θ) + ysin(θ)$\n\n$y_1 = -xsin(θ) + ycos(θ)$\n\n如果是顺时针方向旋转，把θ变成负的即可：-θ\n\n\n![这里写图片描述](media/20180524193644787)\n\n![这里写图片描述](media/20180524193731616)\n\n![image-20250827112425435](media/image-20250827112425435.png)\n"
  },
  {
    "path": "Algorithm/匈牙利算法.md",
    "content": "# 匈牙利算法\n\n## 1.为什么需要匈牙利算法\n\n因为在目标跟踪中，不同时刻，物体的位置等信息会发生变化，但我们需要让它保持同一个ID\n\n**eg:**\n\n假设本来视频帧只出现一辆车，那么我们一直采用目标检测的方法也没有问题，可以一直把该黄车标成ID = 1\n\n![img](media/v2-3285595c53bf4f943a1bb3287b20c262_720w.jpg)\n\n但如果出现了另外一台车，而且我们的目标检测器只有分类出“车”这个能力的话，我们便无法知道这个黄车的ID是否等于1了\n\n![img](media/v2-67ae439aeae72922b1a8c458846c5a64_720w.jpg)\n\n## 2. 算法简易图解\n\n我们先来一个定性的理解\n\n匈牙利算法会建立一个图，其中有当前帧`t=1` 和前一帧`t=0` 的节点。然后会计算两帧节点互相的距离，易得，这个距离越小，那么当前帧的物体与前一帧相同的概率越大\n\n如下图，（虽然不理解这个人怎么走的比车还快：）\n\n![](media/v2-4d87f7bef79e4c6e535cb20bcbb907f8_720w.jpg)\n\n至此，我们得到了一个这个算法的关键：**得到了距离的话我们怎么选出来呢**\n\n## 3. 解决优化任务问题（抽象例子）\n\n我们来举一个具体的例子：\n\n![](media/v2-6d927643217a7da1b53207afa51e0209_720w.jpg)\n\n假设我们现在就有两帧的图片，第一帧我们看到图片中有CarA, CarB, CarC, 并且通过我们的目标检测器找到了这三辆车；第二帧，同样，也看到了三辆车，CarD, CarE, CarF，两帧都只存在这三辆车，但由于目标检测器只能分辨出他们是车，而不能分辨出CarD对应的是CarA还是其它车\n\n但我们可以测量出两帧之间他们对应的**距离（如，第二帧看到的CarF离第一帧看到的CarA有9m）**，如上图数字所示\n\n接下来我们就采用匈牙利算法来进行这个**匹配**\n\n### （1）**第一步：每行减去最小值**\n\n如：第一行最小的是9，那么我们减去9，以此类推\n\n最后变为：\n\n![](media/v2-700980140cb4b0ec5697b47c0246811b_720w.jpg)\n\n### （2）**第二步：每列减去最小值**\n\n如：第一列最小的是1，那么我们减去1，以此类推\n\n最后变为：\n\n![](media/v2-90f544b12d6a2f18285e5fb2a5f51439_720w.jpg)\n\n### （3）**第三步：以最少数量的线条划掉所有零**\n\n划掉所有零有不少方式，如下图：\n\n![](media/v2-982783c1d6a2ba8aed96e81c98c6ef26_720w.jpg)\n\n但明显最少的方式应该是两条：\n\n![](media/v2-2fc83acafcf8b6efb7f1d7750f27c23a_720w.jpg)\n\n如果这个数量大于等于矩阵的行列数，那么跳到**第五步**\n\n### （4）**第四步：在剩下的矩阵中，减去最小值；如果有零被交叉，那么把这个最小值加上去**\n\n剩下的矩阵为【【3， 7】，【2， 5】】，都减去2\n\n然后右上角交叉的0加上2\n\n变成：\n\n![](media/v2-7094f38bfd0e1025697e4cab95dd5060_720w.jpg)\n\n然后重复**第三步**\n\n变为：\n\n![v2-fa1bcb777fcba599e4d42f53ca980b0f_720w](media/v2-fa1bcb777fcba599e4d42f53ca980b0f_720w.jpg)\n\n这时我们有3条线了，那么跳到第五步\n\n### （5）**第五步：从只有一个零的行开始一一对应，对应完则整个行列删除**\n\n第二行只有一个零，那么**Car F 对应了car B**，然后**删掉行列**\n\n![](media/v2-c172a9aacef38c58e612e6fbb70a68e2_720w.jpg)\n\n第三行，Car C对应了Car D\n\n![](media/v2-9efc8442e0ec92198a85812d6f944ae0_720w.jpg)\n\n剩下就是**Car A**对应**Car E**了\n\n最终结果：\n\n![](media/v2-0dffe120d42031e1cfdadf45aaad2311_720w.jpg)\n\n## 4. 目标框的距离计算\n\n那在实际的目标跟踪当中，我们获取到了前一帧的跟踪框`track` 和当前帧的检测框`detection` ，之间的距离`Cost Metric` 如何计算的呢？\n\n> 检测框则是当前帧的目标检测器检测出来的bounding box, 跟踪框是上一帧最后输出预测出来的框，并不是检测框\n\n下面介绍三种方法：\n\n### 欧式距离\n\n我们可以把两帧的目标框的中心点进行一个距离的计算：\n$$\nd = √[(x2 – x1)^2 + (y2 – y1)^2]\n$$\n![](media/v2-29cbc868c5df209ed4c6496064333132_720w.jpg)\n\n这种方法最简单了，但如果目标的形状发生了变化，或者目标与其他发生了重叠，会有不少问题\n\n### IOU匹配\n\n![](media/v2-345bf13ce1c7cfc91bae31973e6a6b3f_720w.jpg)\n\n看图可得\n\n这种方法有个问题，就是我们现在不是求最小，而是求最大，所以会与上述说的方法有一些出入\n\n### 外观相似度（Convolutional Cost）\n\nIOU匹配是很常用的，但是如果出现了目标的重叠阻挡等问题，目标框也会发生变化，IOU匹配也会不准确\n\n但即使目标有遮挡，但如果我们一样能检测其中一部分，那么我们能不能用一个卷积网络提取其中的特征，然后和原本的框的特征进行相比呢？如下图\n\n![](media/v2-4cc8ad2ba4c01b569a4fcf966e4331db_720w.jpg)\n\n这里也是DeepSort相比Sort的其中一个创新点，加入了外观信息，借用了ReID领域模型来提取特征，减少了ID switch\n\n在我们所应用的DeepSort里面，我们把**IOU匹配**和**外观相似度**这两个`cost metric`结合了起来一起计算这个“距离”\n\n## 5. 特例考虑\n\n### NxN vs NxM\n\n刚刚我们的矩阵的行列数是相等的，那是因为两帧的图片都只出现了三辆车，那么如果第一帧三辆车，第二帧出现了四辆车呢？\n\n如果出现这种情况，我们只需要添加一个新的边缘给我们的图标，这个值是我们原先的最大值就可以了。\n\n![](media/v2-e90d6211e074cec2b7643f2a79c6584a_720w.jpg)\n\n### 最大值 vs 最小值\n\n如果我们使用IOU匹配的话，我们需要优化的是最大值\n\n我们只需要在第一步进行一个转换\n\n![](media/v2-7f40319631bf68ad0f24b63cc7f66d05_720w.jpg)\n\n比如在Detenction 4, Tracking 1中（行4列1），cost metric 只有10，如果是IOU匹配的话，表示这个匹配度很低，我们把所有的值都让最大值减去这个值，比如10，我们让90 - 10 = 80\n\n这样就可以啦\n\n## 总结\n\n- 匈牙利算法可以帮助您匹配由cost metric计算后的两组元素\n- 跟踪边界框时，成本可以是 IOU、欧几里德距离、卷积相似度或您自己的损失函数（可结合）\n- 该算法分 5 步工作：我们首先对矩阵进行缩减，然后交叉 0，最后再次缩减，直到我们可以对元素进行配对\n- 如果你有一个最大化问题，比如 IOU，你总是可以把它变成一个最小化问题\n- 如果您有 NxM 矩阵，则可以通过添加具有最大值的列来使其成为 NxN 矩阵\n- 编码时，可以通过矩阵调用sklearn中的函数linear_assignment()，直接得到算法的输出"
  },
  {
    "path": "Algorithm/协方差矩阵.md",
    "content": "# 协方差矩阵\n\n![](media/11.png)\n\n![](media/12.png)\n\n![](media/13.png)\n\n![](media/14.png)\n\n![](media/15.png)\n\n协方差矩阵（Covariance Matrix）在概率统计和机器学习中有许多重要作用，主要用于描述多个随机变量之间的相关性和分布情况。它的核心作用包括：\n\n### 1. **描述变量间的相关性**\n\n- 协方差矩阵的元素表示不同随机变量之间的协方差。\n    \n- 对角线元素是各变量的方差，表示变量自身的离散程度。\n    \n- 非对角线元素表示不同变量之间的协方差，反映它们的相关性：\n    \n    - 正协方差：两个变量呈正相关（一个增大，另一个也增大）。\n        \n    - 负协方差：两个变量呈负相关（一个增大，另一个减小）。\n        \n    - 0 协方差：两个变量无线性相关性。\n        \n\n### 2. **衡量数据分布的形状**\n\n- 协方差矩阵可以用于描述多维数据的分布特征，如数据的伸展方向和主轴。\n    \n- 在机器学习中，PCA（主成分分析）利用协方差矩阵找到数据的主方向，以降低维度。\n    \n\n### 3. **不确定性建模（如卡尔曼滤波）**\n\n- 在状态估计（如 SLAM、机器人定位）中，协方差矩阵用于衡量状态变量的不确定性。\n    \n- 例如，卡尔曼滤波（Kalman Filter）使用协方差矩阵来量化预测误差和观测误差，进而优化状态估计。\n    \n\n### 4. **特征分析与数据降维**\n\n- 协方差矩阵的特征值和特征向量可用于分析数据的主方向，如 PCA 方法。\n    \n- 通过计算协方差矩阵并对其进行特征分解，可以找到数据最主要的变化方向，从而降维。\n    \n\n### 5. **正态分布与马哈拉诺比斯距离**\n\n- 在多元正态分布中，协方差矩阵用于描述数据的分布情况。\n    \n- 马哈拉诺比斯距离（Mahalanobis Distance）利用协方差矩阵来衡量数据点与均值之间的相似性，考虑数据的相关性和尺度。\n\n![[file-20250325134659505.png]]"
  },
  {
    "path": "Algorithm/单目视觉的尺度等价性.md",
    "content": "# 单目视觉的尺度等价性\n\n视觉SLAM根据传感器硬件可以分为不同的流派，如单目，双目，深度相机等。其中，单目SLAM的难度较其它传感器实现的SLAM要困难许多，原因在于纯粹的单目相机缺乏真实的深度信息，会出现尺度等价性问题。\n\n单目相机的初始化往往由对极几何约束完成。对极几何约束应用的场景是已知两幅图像之间若干匹配点，求解两幅图像之间的相机运动，是一个2D-2D的问题。详细的推导过程可以参考《视觉SLAM14讲》中的过程，其核心求解是一个本质矩阵E（或者带有内参矩阵的基础矩阵），本质矩阵E的特点是具有尺度等价性。位姿R和t是由E通过奇异值分解得到的，其中R是正交矩阵，其逆等于自身的转置，相当于自身的约束可以克服掉尺度等价性；但是t没有办法克服尺度等价性，即这个t乘上任意一个非零的正数，都能满足对极几何约束。\n\n![image-20220828213602415](media/image-20220828213602415.png)\n\n对极几何约束的几何意义是O1，O2和P三点共面，纯旋转情况下O1，O2共点，t为0，本质矩阵也为0,无法分解出R。\n\n通常的初始化做法是，将t归一化，让其长度等于1，并作为单位计算相机的运动和图像特征点对应的3D点位置。初始化之后，便可以利用3D-2D的PnP方法，求解后续相邻帧的运动位姿。\n\n至于这个长度1对应到真实世界中的长度可能是5cm,也可能是40m，这就需要额外的深度信息介入进行确定，这个以t的长度作为单位的尺度世界只和真实世界之间相差一个尺度因子。"
  },
  {
    "path": "Algorithm/占据栅格地图构建.md",
    "content": "# 占据栅格地图构建（Occupancy Grid Map）\n\n![image-20201012155653393](media/e9a301c65ff1edb7d6fe58e6049113e7.png)\n\n### 1、地图的分类\n\n移动机器人常见的地图有三种：尺度地图、拓扑地图、语义地图。\n\n![image-20201012163652699](media/bc9ad891445f758279dc9967f00984ed.png)\n\n**尺度地图**：具有真实的物理尺寸，如**栅格地图、特征地图、点云地图**；常用于地图构建、定位、SLAM、小规模路径规划。 **拓扑地图**：不具备真实的物理尺寸，只表示不同地点的连通关系和距离，如铁路网，常用于超大规模的机器人路径规划。 **语义地图**：加标签的尺度地图，公认SLAM的未来—SLAM和深度学习的结合，常用于人机交互。 其中对尺度地图进行补充说明，如下图所示。\n\n![image-20201012171710015](media/13f1962dfff89bcc41cbd1520d6db7e1.png)\n\n### 2、占据栅格地图构建算法\n\n顾名思义，占据栅格地图构建算法当然构建的是栅格地图。\n\n#### 2.1、为什么使用占用栅格地图构建算法构建地图?\n\n在开始讲解之前，我们要明确一些事情。 **第一**，构建栅格地图需要使用激光雷达传感器。 **第二**，激光雷达传感器是有噪声存在的，通俗的说，**“不一定准”**。 **举个例子**，机器人在同一位姿下的不同时刻，通过激光雷达对一个固定的障碍物的探测距离不一致，一帧为5m，一帧为5.1m，我们难道要把5m和5.1m的位置都标记为障碍物？**这也就是使用占据栅格地图构建算法的原因。**\n\n#### 2.2、什么是占据栅格地图构建算法？\n\n为了解决这一问题，我们引入**占据栅格地图**（Occupancy Grid Map）的概念。我们将地图栅格化，对于每一个栅格的状态要么占用，要么空闲，要么未知（即初始化状态）。\n\n![image-20201012175433660](media/90ff3180e53ed06f2cbe20c19399f484.png)\n\n关于占据栅格地图构建算法的引出、推导、演化，从下面的图片得出。（哈哈，图省事，在word里推导的）\n\n![image-20201012225630926](media/4d588f81052b1f7a7fd6c84afdb8cac5.png)\n\n![image-20201012225810841](media/88910f7fd458ce76bb4d94eb7e8e23dc.png)\n\n![image-20201012225943012](media/2f63b02ceb943ad47650de6c01427d52.png)\n\n![image-20201012230042062](media/cf8412d2b39c68250f41379fe7cca2d7.png)\n\n#### 2.3、举个例子验证占据栅格地图构建算法\n\n首先，我们假设 looccu = 0.9，lofree = -0.7。那么，显而易见，一个栅格状态的数值越大，就越表示该栅格为占据状态，相反数值越小，就表示改栅格为空闲状态。**（这也就解决了此前文中提出的激光雷达观测值”不一定准”的问题）**\n\n![image-20201012231231222](media/0582f69b0e918882aa14f62fc8468a79.png)](https://img-blog.csd\n\n上图是用两次激光扫描数据更新地图的过程。在结果中，颜色越深越表示栅格是空闲的，颜色越浅越表示是占据的。这里要区分常用的激光SLAM算法中的地图，只是表述方式的不同，没有对错之分。\n\n#### 2.4、cell value\n\n![image-20240622141952419](media/image-20240622141952419.png)\n\n### 3、如何通过激光数据构建栅格地图？\n\n#### 3.1、算法核心依据\n\n通过上述的讲解，你是否了抓住算法实现的的重要依据是什么？要是没有，你就要反思一下自己是否仔细读了这篇文章？ 显然，整篇文章得出的一个结论就是下图所示，这里假设lofree和looccu为确定的数值，一般情况下一正一负。\n\n![image-20201012232519649](media/ff5f9c4e6759d4ba1d90e71f937ff8cb.png)\n\n然后，我们通过激光雷达数据栅格进行判断，如果判定栅格是空闲，就执行上面公式；如果判定栅格是占据，就执行下面的公式。在经过许多帧激光雷达数据的洗礼之后，每一个栅格都存储了一个值，此时我们可以自己设定阈值与该值比较，来做栅格最终状态的判定。\n\n#### 3.2、算法输入数据\n\n激光雷达数据包（每个扫描点包含角度（逆时针为正方向）和距离，每帧激光数据包含若干扫描点，激光雷达数据包包含若干帧激光雷达数据） 机器人位姿数据包（每一个位姿包含世界坐标系下的机器人位置和航向角，初始航向角与世界坐标系X轴正方向重合，逆时针为正方向） 地图参数（需要构建地图的高度和宽度，构建地图的起始点，lofree和looccu的设定值，地图的分辨率） 假设激光雷达坐标系和机器人坐标系重合\n\n#### 3.3、算法步骤\n\n这里以处理第一帧激光雷达为例，从上向下依次介绍。 （1）读取一帧激光雷达数据和该帧对应的机器人位姿\n\n```cpp\n//获取每一帧的激光雷达、机器人位姿数据\nGeneralLaserScan scan = scans[i];\nEigen::Vector3d robotPose = robot_poses[i];\n```\n\n（2）计算该帧机器人位置的栅格序号\n\n```cpp\n//获取该帧机器人位姿的栅格序号\nGridIndex robotIndex = ConvertWorld2GridIndex(robotPose(0),robotPose(1));\n```\n\n即从世界坐标系转入栅格坐标系，每个栅格序号有x，y两个数字。这里与地图分辨率有关，比如说：地图分辨率为0.05，也就是1m用20个栅格表示。 例如：世界坐标系下机器人位置（1,1）对应栅格坐标系的（20,20）。 **注意**：世界坐标系与像素坐标系区分开来，他们之间的y轴方向相反，其他都一致，地图的显示使用的像素坐标系（栅格坐标系）。 （3）遍历该帧激光雷达数据的所有扫描点执行以下操作 计算每一个激光点击中栅格在像素坐标系下的栅格序号\n\n```cpp\n//明确这里的世界坐标系world_x，不是真实的世界坐标系，而是像素坐标系，y轴与真实的世界坐标系相反，这样是laser_y加负号的原因\ndouble laser_x =   dist * cos(theta + angle);\ndouble laser_y =  -dist * sin(theta + angle);\n\n//得到该激光扫描点，在世界坐标系下（像素坐标系下）的位置\ndouble world_x = laser_x + robotPose(0);\ndouble world_y = laser_y + robotPose(1);\n\n//将该激光扫描点在世界坐标系下的位置，转化为栅格序号\nGridIndex mapIndex = ConvertWorld2GridIndex(world_x,world_y);\n```\n\n从当前机器人位姿的栅格序号到该激光扫描点的栅格序号划线，找出所有空闲的栅格序号\n\n```cpp\n//从机器人的栅格序号到该激光扫描点的栅格序号划线\n//目的：找到两点之间途径的空闲栅格，将栅格序号存入std::vector<GridIndex>中\nstd::vector<GridIndex> freeIndex = TraceLine(robotIndex.x,robotIndex.y,mapIndex.x,mapIndex.y);\n```\n\n![image-20201013001705858](media/377b47dd5440c5ec565e0fba35703b90.png)\n\n遍历所有空闲的栅格更新空闲栅格状态 \n\n```cpp\ndata += mapParams.log_free;//log_free=-1，data将变小\n```\n\n更新该激光扫描点击中的栅格状态 \n\n```cpp\ndata += mapParams.log_occ;//log_occ=2，data将变大\n```\n\n（4）结束\n\n### 4、占据栅格地图构建算法c++实现\n\n```c++\n//占据栅格地图构建算法\n//输入激光雷达数据和机器人位姿数据\n//目的：通过遍历所有帧数据，为pMap[]中的每个穿过的空闲栅格或者击中栅格赋新值，中间有个计算方法，也就是占用栅格地图构建的理论实现\nvoid OccupanyMapping(std::vector<GeneralLaserScan>& scans,std::vector<Eigen::Vector3d>& robot_poses)\n{\n  std::cout <<\"Scans Size:\"<<scans.size()<<std::endl;\n  std::cout <<\"Poses Size:\"<<robot_poses.size()<<std::endl;\n \n  //遍历所有帧激光雷达数据\n  for(int i = 0; i < scans.size();i++)\n  {\n    //获取每一帧的激光雷达、机器人位姿数据\n    GeneralLaserScan scan = scans[i];\n    Eigen::Vector3d robotPose = robot_poses[i];\n \n    //获取该帧机器人位姿的栅格序号\n    GridIndex robotIndex = ConvertWorld2GridIndex(robotPose(0),robotPose(1));\n \n    //判断该帧机器人位姿的栅格序号，是否在自己设定的栅格地图范围内\n    if(isValidGridIndex(robotIndex) == false) continue;\n \n    //遍历该帧激光雷达数据所有扫描点\n    for(int id = 0; id < scan.range_readings.size();id++)\n    {\n      //取出该激光雷达扫描点的距离和角度\n      double dist = scan.range_readings[id];\n      double angle = scan.angle_readings[id];\n      //剔除异常数据，跳过该次循环，不作处理\n      if(std::isinf(dist) || std::isnan(dist)) continue;\n      //机器人航向角，机器人x轴与世界坐标系x轴夹角\n      double theta = robotPose(2);\n \n      //在旋转过后（与世界坐标系（像素坐标系下）平行）的激光雷达坐标系下的坐标x,y\n      //该开始一直不理解这个为啥laser_y要加一个负号\n      //明确激光雷达数据的角度逆时针变化\n      //明确机器人航向角与世界坐标系x轴呈逆时针变化\n      //明确这里的世界坐标系world_x，不是真实的世界坐标系，而是像素坐标系，y轴与真实的世界坐标系相反，这样是laser_y加负号的原因\n      double laser_x =   dist * cos(theta + angle);\n      double laser_y =  -dist * sin(theta + angle);\n \n      //得到该激光扫描点，在世界坐标系下（像素坐标系下）的位置\n      double world_x = laser_x + robotPose(0);\n      double world_y = laser_y + robotPose(1);\n \n      //将该激光扫描点在世界坐标系下的位置，转化为栅格序号\n      GridIndex mapIndex = ConvertWorld2GridIndex(world_x,world_y);\n \n      //判断该激光扫描点的栅格序号，是否在自己设定的栅格地图900x900范围内，如果不在则跳过\n      if(isValidGridIndex(mapIndex) == false)continue;\n \n      //从机器人的栅格序号到该激光扫描点的栅格序号划线\n      //目的：找到两点之间途径的空闲栅格，将栅格序号存入std::vector<GridIndex>中\n      std::vector<GridIndex> freeIndex = TraceLine(robotIndex.x,robotIndex.y,mapIndex.x,mapIndex.y);\n \n      //遍历该扫描激光点通过的所有空闲栅格\n      for(int k = 0; k < freeIndex.size();k++)\n      {\n        GridIndex tmpIndex = freeIndex[k];\n        //将空闲栅格的栅格序号，转化到数组序号,该数组用于存储每一个栅格的数据\n        int linearIndex = GridIndexToLinearIndex(tmpIndex);\n        //取出该栅格代表的数据\n        int data = pMap[linearIndex];\n        //根据栅格空闲规则，执行data += mapParams.log_free;\n        if(data > 0)//默认data=50\n          data += mapParams.log_free;//log_free=-1，data将变小\n        else\n          data = 0;\n        //给该空闲栅格赋新值，最小为0\n        pMap[linearIndex] = data;\n      }\n      //更新该激光扫描点集中的栅格，\n      int tmpIndex = GridIndexToLinearIndex(mapIndex);\n      int data = pMap[tmpIndex];\n      //根据栅格击中规则，执行data += mapParams.log_occ;\n      if(data < 100)//默认data=50\n        data += mapParams.log_occ;//log_occ=2，data将变大\n      else\n        data = 100;\n      //给击中的栅格赋新值，最大100\n      pMap[tmpIndex] = data;\n      //到这里，对一个位姿下的一个激光扫描数据经过的空闲栅格和击中栅格的pMap进行了重新赋值\n    }\n    //到这里，对一个位姿下的一帧激光扫描数据经过的空闲栅格和击中栅格进行了重新赋值\n  }\n  //到这里，对所有帧激光扫描数据经过的空闲栅格和击中栅格进行了重新赋值\n}\n \n//从世界坐标系转换到栅格坐标系，主要是存在一个分辨率\n//比如resolution = 0.04，世界坐标系下，单位1在栅格坐标系可以表示1/resolution=25个栅格\n//目的：将机器人的实际位置，在900x900的栅格地图中找到对应的栅格序号，返回GridIndex对象\nGridIndex ConvertWorld2GridIndex(double x,double y)\n{\n    GridIndex index;\n    //ceil()向上取整函数\n    index.x = std::ceil((x - mapParams.origin_x) / mapParams.resolution) + mapParams.offset_x;\n    index.y = std::ceil((y - mapParams.origin_y) / mapParams.resolution) + mapParams.offset_y;\n \n    return index;\n}\n```\n\n```c++\n//2D画线算法　来进行计算两个点之间的grid cell\n//目的：找到两点之间途径的空闲栅格，将栅格序号存入std::vector<GridIndex>中\nstd::vector<GridIndex> TraceLine(int x0, int y0, int x1, int y1)\n{\n  GridIndex tmpIndex;\n  std::vector<GridIndex> gridIndexVector;\n \n  bool steep = abs(y1 - y0) > abs(x1 - x0);\n  if (steep)\n  {\n    std::swap(x0, y0);\n    std::swap(x1, y1);\n  }\n  if (x0 > x1)\n  {\n    std::swap(x0, x1);\n    std::swap(y0, y1);\n  }\n \n  int deltaX = x1 - x0;\n  int deltaY = abs(y1 - y0);\n  int error = 0;\n  int ystep;\n  int y = y0;\n \n  if (y0 < y1)\n  {\n    ystep = 1;\n  }\n  else\n  {\n    ystep = -1;\n  }\n \n  int pointX;\n  int pointY;\n  for (int x = x0; x <= x1; x++)\n  {\n    if (steep)\n    {\n      pointX = y;\n      pointY = x;\n    }\n    else\n    {\n      pointX = x;\n      pointY = y;\n    }\n \n    error += deltaY;\n \n    if (2 * error >= deltaX)\n    {\n      y += ystep;\n      error -= deltaX;\n    }\n \n    //不包含最后一个点．\n    if(pointX == x1 && pointY == y1) continue;\n \n    //保存所有的点\n    tmpIndex.SetIndex(pointX,pointY);\n \n    gridIndexVector.push_back(tmpIndex);\n  }\n \n  return gridIndexVector;\n}\n```\n\n"
  },
  {
    "path": "Algorithm/双目立体视觉SAD匹配算法.md",
    "content": "# 双目立体视觉SAD匹配算法\n\n**1.算法原理**\n    SAD(Sum of absolute differences)是一种图像匹配算法。基本思想：差的绝对值之和。此算法常用于图像块匹配，将每个像素对应数值之差的绝对值求和，据此评估两个图像块的相似度。该算法快速、但并不精确，通常用于多级处理的初步筛选。\n\n2.基本流程\n输入：两幅图像，一幅Left-Image，一幅Right-Image\n\n对左图，依次扫描，选定一个锚点：\n\n（1）构造一个小窗口,类似于卷积核；\n（2）用窗口覆盖左边的图像,选择出窗口覆盖区域内的所有像素点；\n（3）同样用窗口覆盖右边的图像并选择出覆盖区域的像素点；\n（4）左边覆盖区域减去右边覆盖区域，并求出所有像素点灰度差的绝对值之和；\n（5）移动右边图像的窗口，重复（3）-（4）的处理（这里有个搜索范围,超过这个范围跳出）；\n（6）找到这个范围内SAD值最小的窗口,即找到了左图锚点的最佳匹配的像素块。\n![img](media/20160519202841069)\n\n```c++\n#include\"iostream\"\n#include\"opencv2/opencv.hpp\"\n#include\"iomanip\"\nusing namespace std;\nusing namespace cv;\n \nclass SAD\n{\n\tpublic:\n\t\tSAD():winSize(7),DSR(30){}\n\t\tSAD(int _winSize,int _DSR):winSize(_winSize),DSR(_DSR){}\n\t\tMat computerSAD(Mat &L,Mat &R); //计算SAD\n\tprivate:\n\t\tint winSize; //卷积核的尺寸\n\t\tint DSR;     //视差搜索范围\n\t\n};\n \n Mat SAD::computerSAD(Mat &L,Mat &R)\n\t{\n\t\tint Height=L.rows;\n\t    int Width=L.cols;\n\t\tMat Kernel_L(Size(winSize,winSize),CV_8U,Scalar::all(0));\n\t    Mat Kernel_R(Size(winSize,winSize),CV_8U,Scalar::all(0));\n\t    Mat Disparity(Height,Width,CV_8U,Scalar(0)); //视差图\n \n\t\tfor(int i=0;i<Width-winSize;i++)  //左图从DSR开始遍历\n\t\t{\n\t\t\tfor(int j=0;j<Height-winSize;j++)\n\t\t\t{\n\t\t\t\tKernel_L=L(Rect(i,j,winSize,winSize));\n\t\t\t    Mat MM(1,DSR,CV_32F,Scalar(0)); //\n \n\t\t\t\tfor(int k=0;k<DSR;k++)\n\t\t\t\t{\n\t\t\t\t\tint x=i-k;\n\t\t\t\t\tif(x>=0)\n\t\t\t\t\t{\n\t\t\t\t\tKernel_R=R(Rect(x,j,winSize,winSize));\n\t\t\t\t\tMat Dif;\n\t\t\t        absdiff(Kernel_L, Kernel_R, Dif);//\n\t\t\t\t\tScalar ADD=sum(Dif);\n\t\t\t\t\tfloat a=ADD[0];\n\t\t\t\t\tMM.at<float>(k)=a;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tPoint minLoc;\n                minMaxLoc(MM, NULL, NULL,&minLoc,NULL);\n\t\t\t    \n\t\t\t\tint loc=minLoc.x;\n\t\t\t\t//int loc=DSR-loc;\n\t\t\t\tDisparity.at<char>(j,i)=loc*16;\n\t\t\t\t\n\t\t\t}\n\t\t\tdouble rate=double(i)/(Width);\n\t\t\tcout<<\"已完成\"<<setprecision(2)<<rate*100<<\"%\"<<endl; //处理进度\n\t\t}\n\t\treturn Disparity;\n\t}\n```\n\n```c++\n// MySAD.cpp : 定义控制台应用程序的入口点。\n//\n#include \"stdafx.h\"\n#include\"SAD.h\"\nint _tmain(int argc, _TCHAR* argv[])\n{\n\tMat Img_L=imread(\"imL.png\",0);\n\tMat Img_R=imread(\"imR.png\",0);\n    Mat Disparity;    //视差图\n    \n\t//SAD mySAD;\n\tSAD mySAD(7,30);\n\tDisparity=mySAD.computerSAD(Img_L,Img_R);\n \n\timshow(\"Img_L\",Img_L);\n\timshow(\"Img_R\",Img_R);\n\timshow(\"Disparity\",Disparity);\n\twaitKey();\n\treturn 0;\n}\n```\n\n"
  },
  {
    "path": "Algorithm/向量积(矢积)与数量积(标积)的区别.md",
    "content": "# **向量积(矢积)与数量积(标积)的区别**\n\n \n\n| 名称                              | 标积/内积/数量积/点积                     | 矢积/外积/向量积/叉积                                        |\n| --------------------------------- | ----------------------------------------- | ------------------------------------------------------------ |\n| 运算式（a，b和c粗体字，表示向量） | a·b=\\|a\\|\\|b\\|·cosθ                       | a×b=c，其中\\|c\\|=\\|a\\|\\|b\\|·sinθ，c的方向遵守右手定则        |\n| 几何意义                          | 向量a在向量b方向上的投影与向量b的模的乘积 | c是垂直a、b所在平面，且以\\|b\\|·sinθ为高、\\|a\\|为底的平行四边形的面积 |\n| 运算结果的区别                    | 标量（常用于物理）/数量（常用于数学）     | 矢量（常用于物理）/向量（常用于数学）                        |\n\n\n\n"
  },
  {
    "path": "Algorithm/多元函数的泰勒展开式.md",
    "content": "# 多元函数的泰勒展开式\n\n![](media/asdg.png)\n\n![](media/asdg1.png)\n\n![image-20240701183630892](media/image-20240701183630892.png)\n\n![img](media/8576381-02135acffd23603b.png)\n\n![image-20240701183652679](media/image-20240701183652679.png)\n\n![img](media/8576381-8cb69c7d91f1a481.png)\n\n![image-20240701183715915](media/image-20240701183715915.png)\n\n![image-20240701183725741](media/image-20240701183725741.png)\n\n![image-20240701183737196](media/image-20240701183737196.png)\n\n![image-20240701183747746](media/image-20240701183747746.png)\n\n![image-20240701183808137](media/image-20240701183808137.png)\n\n![image-20240701183817982](media/image-20240701183817982.png)\n\n![image-20240701183834409](media/image-20240701183834409.png)\n\n![image-20240701183849084](media/image-20240701183849084.png)\n\n![image-20240701183901181](media/image-20240701183901181.png)\n\n![image-20240701183931881](media/image-20240701183931881.png)\n\n![image-20240701183942520](media/image-20240701183942520.png)\n\n![image-20240701184006521](media/image-20240701184006521.png)\n\n![img](media/8576381-e21b08ec5255fed0.png)\n\n递归求fx的高阶导函数值\n\n![img](media/8576381-b89d5e7ae7f1aaa9.png)\n\n计算fx的N阶泰勒公式函数值\n\n> 参考：https://www.jianshu.com/p/06c50e3d3212\n\n"
  },
  {
    "path": "Algorithm/多维高斯分布.md",
    "content": "# 多维高斯分布 \n\n![](media/GetImage9.png)\n\n![](media/GetImage10.png)\n\n![](media/GetImage11.png)\n\n![GetImage (1)](media/GetImage(11).png)"
  },
  {
    "path": "Algorithm/局部规划算法DWA.md",
    "content": "# 局部规划算法：DWA算法原理\n\n> DWA算法（dynamic window approach），其原理主要是在速度空间（v,w）中**采样多组速度**，并模拟出这些速度在一定时间内的**运动轨迹**，并通过**评价函数**对这些轨迹进行评价，**选取最优轨迹**对应的（v,w）驱动机器人运动。\n>\n> 注：速度空间（v,w）：速度搜索空间，受到各种限制条件，后面会详细谈到。评价函数可以根据自己的需求进行更改，原始论文和ROS中的评价函数不一样。\n>\n> **优点：**\n>\n> - **计算复杂度低**：考虑到速度和加速度的限制，只有安全的轨迹会被考虑，且每次采样的时间较短，因此轨迹空间较小\n> - **可以实现避障**：可以实时避障，但是避障效果一般\n> - **适用于两轮差分和全向移动模型**\n>\n> **缺点：**\n>\n> - **前瞻性不足**：只模拟并评价了下一步，如在机器人前段遇见“C”字形障碍时，不能很好的避障\n> - **动态避障效果差：** 模拟运动轨迹断，动态避障效果差\n> - **非全局最优路径：** 每次都选择下一步的最佳路径，而非全局最优路径\n> - **不适用于阿克曼模型**\n\n![img](media/20150410185658311)\n\n![img](media/20150410192038912)\n\n![img](media/20150410192044388)\n\n![img](media/20150410190447182)\n\n![img](media/20150410190429698)\n\n![img](media/20150410190527758)\n\n![请添加图片描述](media/e65b31e0353f44528cde953e1cc27787.png)\n\n![img](media/20150410190553592)\n\n```\n首先在V_m∩V_d的范围内采样速度：\nallowable_v = generateWindow(robotV, robotModel)\nallowable_w  = generateWindow(robotW, robotModel)\n然后根据能否及时刹车剔除不安全的速度：\n    for each v in allowable_v\n       for each w in allowable_w\n       dist = find_dist(v,w,laserscan,robotModel)\n       breakDist = calculateBreakingDistance(v)//刹车距离\n       if (dist > breakDist)  //如果能够及时刹车，该对速度可接收\n\t如果这组速度可接受，接下来利用评价函数对其评价，找到最优的速度组\n```\n\n![img](media/20150410190721891)\n\n![img](media/20150410190821152)\n\n![img](media/20150410191017918)\n\n```\n来源:http://adrianboeing.blogspot.com/2012/05/dynamic-window-algorithm-motion.html\nBEGIN DWA(robotPose,robotGoal,robotModel)\n   laserscan = readScanner()\n   allowable_v = generateWindow(robotV, robotModel)\n   allowable_w  = generateWindow(robotW, robotModel)\n   for each v in allowable_v\n      for each w in allowable_w\n      dist = find_dist(v,w,laserscan,robotModel)\n      breakDist = calculateBreakingDistance(v)\n      if (dist > breakDist)  //can stop in time\n         heading = hDiff(robotPose,goalPose, v,w) \n          //clearance与原论文稍不一样\n         clearance = (dist-breakDist)/(dmax - breakDist) \n         cost = costFunction(heading,clearance, abs(desired_v - v))\n         if (cost > optimal)\n            best_v = v\n            best_w = w\n            optimal = cost\n    set robot trajectory to best_v, best_w\nEND\n```\n\n![img](media/20150410191146168)\n\n## 参考资料：\n\nhttps://www.guyuehome.com/5500\n\nhttps://heyijia.blog.csdn.net/article/details/44983551\n\nhttps://zhuanlan.zhihu.com/p/519958218"
  },
  {
    "path": "Algorithm/归一化与标准化.md",
    "content": "# 归一化与标准化 \n\n## 1. 线性函数归一化(Min-Max scaling)\n线性函数将原始数据线性化的方法转换到[0 1]的范围，归一化公式如下：\n\n![](./media/Get1.png)\n\n该方法实现对原始数据的等比例缩放，其中Xnorm为归一化后的数据，X为原始数据，Xmax、Xmin分别为原始数据集的最大值和最小值。 \n\n## 2.0 均值标准化(Z-score standardization)\n0均值归一化方法将原始数据集归一化为均值为0、方差1的数据集，归一化公式如下：\n\n![](./media/GetImage18.png)\n\n其中，μ、σ分别为原始数据集的均值和方法。该种归一化方式要求原始数据的分布可以近似为高斯分布，否则归一化的效果会变得很糟糕。 \n\n以上为两种比较普通但是常用的归一化技术，那这两种归一化的应用场景是怎么样的呢？什么时候第一种方法比较好、什么时候第二种方法比较好呢？下面做一个简要的分析概括： \n\n- 在分类、聚类算法中，需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候，第二种方法(Z-score standardization)表现更好。 \n\n- 在不涉及距离度量、协方差计算、数据不符合正太分布的时候，可以使用第一种方法或其他归一化方法。比如图像处理中，将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。 \n## 3.优点\n不同的评价指标往往具有不同的量纲（例如：对于评价房价来说量纲指：面积、房价数、楼层等；对于预测某个人患病率来说量纲指：身高、体重等。）和量纲单位（例如：面积单位：平方米、平方厘米等；身高：米、厘米等），这样的情况会影响到数据分析的结果，为了消除指标之间量纲的影响，需要进行数据标准化处理，以解决数据指标之间的可比性。原始数据经过数据标准化处理后，各指标处于同一数量级，适合进行综合对比评价。 \n\n- 归一化后加快了梯度下降求最优解的速度。 \n\n- 归一化有可能提高精度（归一化是让不同维度之间的特征在数值上有一定的比较性）。 "
  },
  {
    "path": "Algorithm/旋转下激光雷达数据与地图产生错位的问题.md",
    "content": "# 旋转下激光雷达数据与地图产生错位的问题\n这是一个典型的机器人运动和传感器数据变换中的问题，涉及到 **卡尔曼滤波**、**`base_footprint` 坐标系的变换** 和 **激光扫描数据的同步问题**。\n## 1. 机器人顺时针旋转\n- 机器人正在进行顺时针旋转，也就是说，机器人在运动过程中不断改变其朝向，旋转角度在不断变化。\n## 2. 卡尔曼滤波之后的 `base_footprint` 发布频率较高\n- **卡尔曼滤波**：卡尔曼滤波常用于机器人的定位和姿态估计，目的是通过融合传感器数据（如IMU、里程计、激光雷达等）来估计机器人的位置和姿态。\n- 这里的意思是，经过卡尔曼滤波处理之后，`base_footprint`（机器人底部位置的坐标系）会以较高的频率进行发布。这意味着在每次卡尔曼滤波计算后，`base_footprint` 的位置和姿态会以较高的频率进行更新。\n- 这通常是因为卡尔曼滤波依赖于来自 IMU（惯性测量单元）或者其他快速更新的传感器数据，能实时估计机器人的位置和朝向。\n## 3. `tf` 变换马上就被发布\n- `tf`（坐标变换）用于表示不同坐标系之间的位置和姿态关系，通常是通过转换一个坐标系的坐标到另一个坐标系中。\n- 这部分的意思是，`base_footprint` 的坐标变换（即机器人底部在某个坐标系中的位置和方向）会随着每个卡尔曼滤波后的数据更新而进行更新，并马上发布这个变换。\n## 4. 激光的频率只有几赫兹\n- 激光雷达的扫描频率通常较低，假设在这个场景中，激光的频率可能是 5Hz 或 10Hz，即每秒钟扫描 5 到 10 次。\n- 这意味着激光数据的更新频率远低于卡尔曼滤波更新 `base_footprint` 的频率。\n## 5. 激光扫描到的地图相对于 `base_footprint` 是上一时刻的数据\n- 由于激光雷达的数据更新频率较低，激光雷达扫描到的环境数据相对于 `base_footprint` 来说，是较早的时刻的数据。\n- 举个例子，假设机器人正在旋转，卡尔曼滤波每 10ms 就发布一次 `base_footprint` 的更新，而激光雷达每 200ms 才进行一次扫描。这样，激光雷达扫描到的环境数据会相对滞后于机器人当前的状态。\n## 6. `base_footprint` 变换带着激光一起进行了顺时针旋转\n- 由于卡尔曼滤波器发布的是较新的 `base_footprint` 数据，而激光扫描的数据滞后，因此在将激光数据与 `base_footprint` 进行坐标变换时，机器人已经旋转了很多，但激光数据仍然来自旧的时间戳。\n- 如果你不对激光数据做时间补偿和插值，激光扫描数据会直接使用当前的 `base_footprint` 进行变换。由于 `base_footprint` 在更新时已经发生了旋转，变换过程会将激光数据“带着”旋转过去，从而导致激光数据相对于环境的 **错位**。\n## 7. 错位问题的出现\n- 因为激光数据是滞后的，它与当前机器人状态（`base_footprint`）的坐标变换不匹配，所以被错误地旋转，导致它和真实的地图环境产生了错位。\n- 这个问题的根本原因是数据同步的问题。激光数据与机器人姿态的变化没有精确对齐，因此在变换时出现了误差。\n## 解决方法：\n为了避免这种错位问题，通常会采取以下几种方法来同步数据：\n1. **时间同步**：确保激光数据的时间戳和卡尔曼滤波后的 `base_footprint` 数据是同步的，可以根据激光的时间戳来选择对应时刻的机器人姿态，而不是直接使用当前时刻的姿态。\n2. **插值**：可以对激光数据和机器人姿态之间的时间差进行插值处理。例如，如果激光扫描的数据是从 200ms 前的一个时刻获取的，可以通过插值来估算机器人在该时刻的姿态，而不是直接使用当前时刻的姿态。\n3. **时间补偿**：对激光数据进行时间补偿，即使用激光数据的时间戳来进行正确的姿态变换，而不是使用当前机器人的姿态。\n总结来说，这段话描述了一个由于 **传感器数据频率不同** 和 **时间同步问题** 引发的 **数据错位** 问题，主要是由于机器人姿态（`base_footprint`）更新频率较高，而激光数据更新较慢，导致变换时出现了误差。"
  },
  {
    "path": "Algorithm/本质矩阵基础矩阵的自由度及其解法.md",
    "content": "# 本质矩阵，基础矩阵，自由度及其解法 \n\n## **常用重要性质：** \n\n### **（1）正交矩阵相乘仍然是正交矩阵** \n\n *A**、**B*是正交矩阵,那么*AA'=E BB'=E* \n\n $(AB)\\*(AB)'=AB\\*B'A'=A(BB')A'=AEA'=AA'=E$* $\n\n### **（2）一个矩阵乘以正交矩阵，范数不变**（保范性）\n\n *||Ux||^2=(Ux)^T(Ux)=x^TU^TUx=x^Tx=||x||^2* \n\n### **（3）一个矩阵乘以可逆矩阵秩不变** \n\n### **（4）初等变换只是不影响矩阵的秩，其他的特性都改变了。对于计算矩阵的行列式，不能进行初等变换，但是可以做行列的进加减，不能乘以系数。** \n\n### **（5）矩阵的迹：矩阵的主对角线上各个元素的总和，是矩阵所有特征值的和** \n\n### **（6）对角矩阵的特征值是其对角线上的各个元素** \n\n### **（7）矩阵的秩等于非零奇异值的个数，等于非零特征值的个数** \n\n### **（8）任意矩阵都能进行奇异值分解，只有方阵才可以进行特征值分解** \n\n####  **特征值分解：** \n\n如果一个向量 *v* 是方阵 *A*的特征向量，将可以表示成下面的形式： *Av= λv*，λ称为特征向量 *v* 对应的特征值，并且一个矩阵的一组特征向量是一组正交向量。 \n\n特征值分解：**Q**是这个矩阵A的特征向量组成的矩阵，**Σ**是一个对角阵，每一个对角线上的元素就是一个特征值\n\n![](./media/GetImage24.png)\n\n#### **奇异值分解：** \n\n假设*A*是一个N * M的矩阵，*U*是一个N * N的方阵（正交矩阵），*Σ* 是一个N * M的矩阵（对角线上的元素为奇异值），*VT*是一个M * M的矩阵（正交矩阵） \n\n![](./media/GetImage25.png)\n\n#### **特征值和奇异值的关系：** \n\n![](./media/GetImage26.png)\n\n（1）*U*的列向量，是 *AA^T*的特征向量； \n\n（2）*V*的列向量，是 *A^TA* 的特征向量； \n\n（3）*A*的奇异值（*Σ*的非零对角元素）则是 $AA^T$ 或者$ $A^TA$ 的非零特征值的平方根。 \n\n### **（9）秩与自由度（ 方阵A(n\\*n) ）** \n\n 矩阵的秩，指的是经过初等变换之后的非零行（列）的个数，若不存在零行（列），则为满秩矩阵（Rank(A)=n；关于矩阵的秩的另一种理解：A矩阵将n维空间中的向量映射到k（k<=n）维空间中，k=Rank(A) \n\n 矩阵（参数矩阵）的自由度，指的是要想求解出矩阵的所有元素至少需要列几个线性方程组。若矩阵本身带有 x 个约束，则只需要列n*n-x个方程组即可求出所有参数，即矩阵A的自由度为n*n-x。 \n\n### **（10）齐次线性方程组求解（秩表示可以列几个方程）** \n\n1.r(A)=未知数个数n（约束较强） \n\n该解空间只含有零向量 \n\n2.r(A)<未知数个数n（约束不够） \n\n由齐次线性方程组解空间维数 = n - r(A) >0，所以该齐次线性方程组有非零解，而且不唯一，存在一个基础解系（基础解系中的向量个数为 n - r(A)个)。 \n\n \n\n## **一：为什么本质矩阵(E)的秩为2？** \n\n**（1）因为一个矩阵乘以可逆矩阵秩不变，因为可逆矩阵可以表示为初等矩阵的乘积，而初等变换不改变矩阵的秩。** \n\n对于一个矩阵施行一次初等**列变换**相当于在这个矩阵**右乘**一个相应的初等矩阵 \n\n对于一个矩阵施行一次初等**行变换**相当于在这个矩阵**左乘**一个相应的初等矩阵 \n\n![](./media/GetImage27.png)\n\n*Rank(R)=3,*可逆矩阵\n\n*Rank(t^)=2* \n\n![](./media/GetImage28.jpeg)\n\nR不会改变矩阵的秩，因此E矩阵的秩为2. \n\n*Rank(E)=Rank(t^)=2* \n\n**（2）因为本质矩阵 E 的奇异值必定是 [σ, σ, 0] T 的形式，矩阵的秩等于非零奇异值的个数** \n\n**证明一：三维反对称矩阵的分解** \n\n![](./media/GetImage29.jpeg)\n\n**证明二：SVD分解与矩阵的迹** \n\n![](./media/GetImage30.jpeg)\n\n## **二：为什么基础矩阵(F)的秩为2**\n\n![](./media/GetImage31.png)\n\n两个相机内参矩阵和旋转矩阵R都是满秩矩阵（可逆矩阵），[T]x是一个秩为2的矩阵，同样，矩阵乘以可逆矩阵秩不变，因为可逆矩阵可以表示为初等矩阵的乘积，而初等变换不改变矩阵的秩（左乘-行变换，右乘-列变换）。 \n\n \n\n## **三：为什么尺度等价性要减少一个自由度？** \n\n以本质矩阵为例，表达两帧的相机归一化坐标之间的对应关系\n\n![](./media/GetImage32.png)\n\n将矩阵写成向量，转化为下式： \n\n![](./media/GetImage33.png)\n\n由于等式右侧是0，所以上面两式子乘以任意常数以后还是表示同样两点之间的变换，所以E是尺度等价的。 \n\n由于尺度等价性，所以对于9个参数的向量e，我们只需要通过8个方程计算出其中8个未知数即可， 8个数都用第9个数表示，由于尺度等价，所以第9个数取什么值都是对的。 \n\n \n\n## **四：为什么基础矩阵自由度是7？** \n\n![](./media/GetImage34.png)\n\n左右相机内参的待定参数各为4，平移[T]x的待定参数是3，旋转矩阵R的自由度是3，加在一起是14个参数，也就是正常来说把14个参数都确定了才能确定F，但是实际上F是一个3*3的矩阵，只包含9个参数，所以计算F的自由度最大是9，也就是9个参数就可以确定F。 \n\n同时F满足下面两个约束，所以F的自由度是9-2=7. \n\n（1）尺度等价性 \n\n（2）秩为2，行列式为0，det(F)=0 \n\n \n\n## **五：为什么本质矩阵自由度是5？** \n\n平移[T]x的自由度是3，旋转矩阵R的自由度是3，加在一起是6个参数，也就是要想确定E矩阵，确定6个参数就够了，不用考虑E矩阵的所有9个参数 \n\n同时E满足下面约束，所以E的自由度是6-1=5. \n\n（1）尺度等价性 \n\n \n\n## **六：为什么单应矩阵自由度是8？** \n\n单应矩阵也具有尺度等价性：9-1=8 \n\n![](./media/GetImage35.jpeg)\n\n## **七：计算基础矩阵** \n\n### **1. 基于代数误差的线性估计** \n\n#### **(1) 8点法，线性最小二乘法** \n\n **a. 线性解** \n\n计算基础矩阵 *f*, 8组对应坐标点构成系数矩阵A，维度为8*9。 \n\n![](./media/GetImage36.png)\n\n若A的秩正好为8，则 *f* 存在唯一解，可以通过线性算法求解 *f*，将 *f* 确定到只差一个常数因子。 \n\n但是实际上，不可能得到精确的图像点对应，所以需要构建多于8个图像点的对应关系，构成一个超定方程，即不一定存在 *f* 使得上式成立，需要通过最小二乘法求解。 \n\n根据多视图几何P412 A3.4.2，对于上述方程，若 *f* 是一个解，则k*f*也是解，一个合理的约束是只求|| *f* ||=1的解。 \n\n**问题转化为求使得|| Af||最小化并满足||** **f** **||=1的** **f** **:** \n\n![](./media/GetImage37.png)\n\n**结论：** **f** **的最小二乘解是对应于A的最小奇异值的奇异向量** \n\n **b. 强迫约束（因为方程的个数>自由度）：用最接近F的矩阵F’ 代替F** \n\n上述求得的 **f** 转化为的矩阵**F**一般不满足秩为2的约束，所以需要对**F**进行修正，将**F**的三个奇异值修正为2个，就**F**满足了秩为2的约束。 \n\n所以需要对**F**进行SVD分解，然后修正中间的奇异值矩阵 \n\n![](./media/GetImage38.png)\n\n#### **(2) 归一化 8点法**（ORB-SLAM：FindFundamental）（OpenCV：findFundamentalMat—runkenel—run8point） \n\n8点法成功的关键是在构造解的方程之前应对输入的数据认真进行适当的归 一化，图像点的一个简单变换(平移或变尺度)将使这个问题的条件极大地改善，从而提高结果的稳定性 \n\n**算法步骤：** \n\n![](./media/GetImage39.png)\n\n**a. 归一化变换** \n\n![](./media/GetImage40.png)\n\n**b. 求解基础矩阵F，步骤在8点法里** \n\n **c. 解除归一化** \n\n![](./media/GetImage41.jpeg)\n\n#### **(3) 最小点对应算法** \n\n **a. 7-点：仅用 7 组点对应来估计 F**（OpenCV：findFundamentalMat—runkenel—run7point） \n\n 好处（1）：因为考虑7自由度，必定生成 一 个秩 2 的矩阵，从而无需添加强迫约束 \n\n 好处（2）：保证一个高概率的没有野值的结果所需的采样次数是样本集大小的指数函数，例如，8 组时达 99% 的监性度时所需的采样数是 7 组时所需采样数的两倍 \n\n 坏处：它可能给出 F 的 3 个实数解，且所有 3 个解都要通过检验来选择 \n\n 对于**Af=0** **，**Rank(A)=7**f1, f2** , \n\n即为**A=U∑VT**中**VT**的最后两行. **f1=VT(7), f2=VT(8)** ， 则方程组的基础解系 **f=k\\*f1+(1-k)\\*f2** ，由 **f, f1, f2**组成的矩阵 **F**也满足这个关系：**F=k\\*F1+(1-k)\\*F2**，再加入**det(F)=0**的约束， \n\n即**det(k\\*F1+(1-k)\\*F2)=0** ，得到一个关于**k**的三次多项式，可以求解出来三个可能的**F**解。 \n\n \n\n**b. 6-点：根据基础矩阵与单应矩阵的关系** \n\n![](./media/GetImage42.jpeg)\n\n### **2. 基于几何误差的非线性估计** \n\n将估计基本矩阵的问题化为数学的最优化问题，然后使用某种优化迭代算法求解。算法如下: \n\n(1) 构造基于几何意义的目标函数 \n\n(2) 选取8点算法的结果作为迭代算法的初始值 \n\n(3) 选取一种迭代方法(L-M方法)， 迭代求解最小化问题 \n\n构造基于几何意义的目标函数 \n\n常用准则: \n\n#### **(1)点到对应极线距离的平方和（一般是通过数值求解之后出F矩阵之后用这个判断是否满足要求）** \n\n![](./media/GetImage43.jpeg)\n\n#### **(2)反投影距离** \n\n**就是最常见的重投影误差** \n\n![](./media/GetImage 44.png)\n\n## **八：计算本质矩阵（ORBSLAM是先计算基础矩阵F，然后通过相机内参计算E，没有直接计算E）**\n\n![](./media/GetImage45.png)\n\n**（1）8点法** \n\n基本做法与基础矩阵8点法相同，不同之处在于第二步：强迫约束 \n\n![](./media/GetImage46.jpeg)\n\n**（2）5点法**（OpenCV：findEssentialMat—EMEstimatorCallback—runkenel） \n\n原理参考文献：An Efficient Solution to the Five-Point Relative Pose Problem \n\n具体步骤为： \n\n![GetImage47](./media/GetImage47.png)\n\n## **九：计算单应矩阵** \n\n **归一化4点法** \n\n![](./media/GetImage48.png)\n\n将第三个约束带入前两个： \n\n![](./media/GetImage49.png)\n\n因为H有8个自由度，所以分为以下两种方式计算单应矩阵 \n\n**a. 设置** **h9=1** \n\n这样一组匹配点对就可以构造出两项约束，于是自由度为 8 的单应矩阵可以通过 4 对匹配特征点算出(注意:这些特征点不能有三点共线的情况) \n\n![](./media/GetImage50.png)\n\n![](./media/GetImage51.png)\n\n**b. 设置** **||h9||=1**\n\n![](./media/GetImage51.jpeg)\n\n## **十：本质矩阵的分解** \n\n**（1）分解出四种可能的 (R,t) 组合** \n\n![](./media/GetImage52.png)\n\n![](./media/GetImage53.png)\n\n **b. 检查3D点和两个相机的视差** \n\n![](./media/GetImage54.png)\n\n**c. 检查3D点的深度** \n\n![](./media/GetImage55.png)\n\n **d. 检查3D点在两个相机的重投影误差，在误差允许范围内的计算内点数** \n\n \n\n## **十一：单应矩阵的分解** \n\n**8. 单应矩阵的推导** \n\n**（1）3D景物平面π的表达** ( *n^TX*=*d* ) \n\n![](./media/GetImage56.jpeg)\n\n过相机1的光心 **O1** **(0,0,0)** 向景物平面作垂线，该垂线即可表示平面的单位法向量 **n**，垂线与平面的交点记为 **X1, **|O1X1| = d 为景物平面到相机1的距离 **，**对于景物平面上的任意一个3D点**X**，与相机1的光心 **O1** 连线形成向量 **O1X=X-O1=X** **。**可以得到以下公式：\n\n![](./media/GetImage57.jpeg)\n\n![](./media/GetImage58.jpeg)\n\n两个向量的点乘**O1X** **·** **O1X1** 表示**O1X** 在**O1X1** 上的投影，由图上的几何关系可知，该投影的距离为 **|O1X1| = d，** 所以可以推出平面π在相机O1坐标下的方程：\n\n![](./media/GetImage59.jpeg)\n\n**（2）单应矩阵的推导** ( *p*2=*H p*1 )\n\n![](./media/GetImage111.jpeg)\n\n**（3）单应矩阵的分解** \n\n a. 将A进行SVD分解，取对角矩阵构造*R',t',d',n'，*再根据对应的公式计算*R,t,d,n* \n\n![](./media/GetImage61.jpeg)\n\n b. 将法向量表示成基坐标的形式，消去 *t'* \n\n![](./media/GetImage62.jpeg)\n\n c. 等式两边取范数，消去 *R'* *，*根据*x1,x2,x3*具有非零解得出系数矩阵行列式*=0，*从而推出*d'=±d2* \n\n![](./media/GetImage63.jpeg)\n\nc. 根据 *d',d1,d2,d3* 的大小关系，讨论可能的6种情况 \n\n![](./media/GetImage64.jpeg)\n\nd. 对第一种情况（11）进行求解*R',t',d',n'*，后续对（12）,（13）求解发现是（11）的特例，所以实际上只有（11）这一种情况，（11）计算出来的（R,t）组合有四种可能的情况 \n\n是根据法向量 *n* 的坐标*x1,x3* 的正负决定的，所以四种情况分别对应*x1,x3取* (+,+),(+,-),(-,+),(-,-) \n\n![](.y/media/GetImage65.jpeg)\n\n![](./media/GetImage66.jpeg)\n\ne. 对第二种情况（14）进行求解 *R',t',d',n'*，与第一种情况同理，（15）,（16）是（14）的特例，所以计算的（R,t）组合实际上就是（14）对应的四种可能，、 \n\n是根据法向量 *n* 的坐标*x1,x3* 的正负决定的，所以四种情况分别对应*x1,x3取* (+,+),(+,-),(-,+),(-,-) \n\n![](./media/GetImage67.jpeg)\n\n![](./media/GetImage68.jpeg)\n\nf. 综上所述，H分解能够得到可能的运动组合（R,t）一共8组，分别是d'=d2 对应4组，d'=-d2 对应4组 ，得到R', t'后根据定义式转化回R,t \n\n![](./media/GetImage69.jpeg)"
  },
  {
    "path": "Algorithm/欧拉角与坐标系旋转变换.md",
    "content": "# 欧拉角与坐标系旋转变换\n\n## 总结：\n\n​\t**在slam中，对于一个旋转$p_{ab}$，表示将b坐标下的点旋转到a坐标系下（处理的是坐之间的变换关系），也可以理解为将坐标系a旋转一定角度得到坐标系b（处理的是坐标轴之间的变换）。**\n\n## 坐标系旋转变换，内在旋转，外在旋转\n\n从一个坐标系到另一个坐标系的转换有多种方法：欧拉角法、方向余弦矩阵法、四元数法等。\n其中欧拉角法的核心思想是：一个坐标系可以用另一个参考坐标系的三次空间旋转来表达。旋转坐标系的方法又有两种：\n\n- Proper Euler angles, 第一次与第三次旋转相同的坐标轴（z-x-z,x-y-x, y-z-y,z-y-z, x-z-x, y-x-y）。\n- Tait–Bryan angles, 依次旋转三个不同的坐标轴（x-y-z,y-z-x, z-x-y,x-z-y, z-y-x, y-x-z）；\n  Tait–Bryan angles are 也叫作 Cardan angles; nautical angles; heading, elevation, and bank; or yaw, pitch, and roll. 有时候这两种变换序列都叫做 \"Euler angles\". 这种情况下，前者叫做 proper or classic Euler angles.\n\n对于每个旋转序列，又有内在旋转（intrinsic rotations）和外在旋转（extrinsic rotations）两种方式。设有两个坐标系 P1和 P2，P1 是固定不动的参考系，P2 是需要被旋转的坐标系，初始时两个坐标系重合。内在旋转指每次旋转的旋转轴都是上次变换后新系 P2的坐标轴，外在旋转指每次旋转的旋转轴都是固定参考系 P1 的坐标轴。\n\n![在这里插入图片描述](media/20190927174150276.png)\n\n###  **使用旋转角度是左手系还是右手系**\n\n使用右手的大拇指指向旋转轴，其他4个手指在握拳过程中的指向便是正的角度\n\n- 右手系是逆时针\n- 左手系是顺时针\n\n## 绕一个坐标轴旋转的转动矩阵\n\n绕不同轴的旋转结果**（注意这是从初始坐标系旋转到目标坐标系的旋转矩阵，也可以理解为将目标坐标系的点转换到初始坐标系中）**\n$$\n[R(X,\\theta)] = \n\\left[\n\\begin{matrix}\n1 & 0 & 0 \\\\\n0 & \\cos\\theta & -\\sin\\theta \\\\\n0 & \\sin\\theta & \\cos\\theta\n\\end{matrix}\n\\right] \\tag{1-6}\n$$\n\n$$\n[R(Y,\\theta)] = \n\\left[\n\\begin{matrix}\n\\cos\\theta & 0 & \\sin\\theta \\\\\n0 & 1 & 0 \\\\\n-\\sin\\theta & 0 & \\cos\\theta\n\\end{matrix}\n\\right] \\tag{1-7}\n$$\n\n$$\n[R(Z,\\theta)] = \n\\left[\n\\begin{matrix}\n\\cos\\theta & -\\sin\\theta & 0 \\\\\n\\sin\\theta & \\cos\\theta & 0 \\\\\n0 & 0 & 1\n\\end{matrix}\n\\right] \\tag{1-8}\n$$\n\n举例说明：\n\n假设有一个坐标系 $b$（其上有一个点 $p$（点和向量是空间中一样东西，只有当选取坐标系时才讨论它的的坐标），坐标也用 $p$ 表示），它要绕X轴逆时针转 α 角度，那么在旋转之后的坐标系下点$p$的坐标（记为，$p'$）变成了多少？做一下数学转换得到：\n$$\np=R_x∗p'\n$$\n再举例：\n\n以 A 系为参考系，绕 *z* 轴旋转 θ到 B 系（这里是旋转的逆矩阵）\n$$\nP_B =\n\\left[\n\\begin{matrix}\n\\cos\\theta & \\sin\\theta & 0 \\\\\n-\\sin\\theta & \\cos\\theta & 0 \\\\\n0 & 0 & 1\n\\end{matrix}\n\\right]\nP_A\n$$\n则 B 系坐标 *$P_B$* 变换到 A 系为（转动矩阵为正交阵，逆矩阵等于转置矩阵）：\n$$\nP_A =\n\\left[\n\\begin{matrix}\n\\cos\\theta & -\\sin\\theta & 0 \\\\\n\\sin\\theta & \\cos\\theta & 0 \\\\\n0 & 0 & 1\n\\end{matrix}\n\\right]\nP_B\n$$\n绕 *x, y* 轴同理。\n\n## 旋转的本质\n\n### 内在旋转\n\n坐标系 b1(其上有一个点p，坐标也用p表示)，先绕X轴转 α 角度，再绕Y轴转 β ，再绕Z轴转 γ ，得到 b2坐标系:\n\n1）先绕X轴转 α\n$$\np=R_x∗p'\n$$\n2）再绕Y轴转 β\n$$\np'=R_y∗p''\n$$\n3）再绕Z轴转 γ\n$$\np''=R_z∗p'''\n$$\n所以合并之后可得：\n$$\np = R_xR_yR_z * p'''\n$$\n反之可得\n$$\np''' = R_z^TR_y^TR_x^T * p\n$$\n可见，**内在旋转要将绕各轴的旋转矩阵从左至右连乘**。\n\n### 外在旋转\n\n因为每次都是绕固定的坐标系（记为，P）进行旋转，那么不管旋转之后的 P' 系在哪里，都可以认为 P 和 P' 系是刚性连接的（第一次旋转之前，可认为P 和 P' 是重合的），当发生了旋转之后，那么它们之间就会相差了一个旋转矩阵外参：假设先对 P 做了一次绕 X 轴的旋转，接着再对 P 做一次绕Y轴的旋转，再绕 P 做一次绕Z轴的旋转，直接给出结论：\n$$\nP = R_zR_yR_xp'''\n$$\n可知，**外在旋转要将绕各轴的旋转矩阵从右至左连乘**\n\n并且可知，`绕固定轴旋转的XYZ旋转顺序`和`绕旋转之后的轴的ZYX旋转顺序`是等价的,也就是`改变第一三次旋转顺序`之后旋转矩阵是等价的。\n\n### 由以上推导我们可以总结出结论\n\n1. **内在旋转，转动矩阵右乘；外在旋转，转动矩阵左乘；内在旋转与外在旋转的绕轴旋转序列倒序时，两者等效。**\n2. **内在旋转与外在旋转颠倒第一三次旋转顺序得到的旋转矩阵是相等的，也就是说绕固定轴旋转的XYZ旋转顺序和绕旋转之后的轴的ZYX旋转顺序是等价的，得到的旋转矩阵相同。**\n\n\n\n**注释：**\n\n![img](media/f89b2b5aaaf84e2b8a2ee78ef7ab76bb.png)\n\n\n\n#### 参考资料\n\nhttps://blog.csdn.net/hzwwpgmwy/article/details/101547949\n\nhttps://www.cnblogs.com/armme/p/10596697.html\n\n[欧拉角与旋转矩阵的转换关系_欧拉角转旋转矩阵-CSDN博客](https://blog.csdn.net/hzwwpgmwy/article/details/101547949?ops_request_misc=&request_id=&biz_id=102&utm_term=欧拉角旋转&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-101547949.142^v100^pc_search_result_base4&spm=1018.2226.3001.4187)\n\n[【自动驾驶】欧拉角和旋转矩阵之间的转换_欧拉角 一般是内旋还是外旋-CSDN博客](https://blog.csdn.net/qq_39523365/article/details/127442350?ops_request_misc=%7B%22request%5Fid%22%3A%22171570376116800182119406%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=171570376116800182119406&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-127442350-null-null.142^v100^pc_search_result_base4&utm_term=欧拉角旋转&spm=1018.2226.3001.4187)"
  },
  {
    "path": "Algorithm/正态分布.md",
    "content": "# 正态分布 \n\n**正态分布**（**Normal distribution**）又名**高斯分布**（**Gaussian distribution**），是一个在[数学](http://zh.wikipedia.org/wiki/數學)、[物理](http://zh.wikipedia.org/wiki/物理)及[工程](http://zh.wikipedia.org/wiki/工程)等[领域](http://zh.wikipedia.org/w/index.php?title=領域&action=edit&redlink=1)都非常重要的概率分布，在统计学的许多方面有着重大的影响力。 \n\n若[随机变量](http://zh.wikipedia.org/wiki/隨機變量)*X*服从一个[数学期望](http://zh.wikipedia.org/wiki/数学期望)为μ、[标准方差](http://zh.wikipedia.org/wiki/标准方差)为σ2的高斯分布，记为： \n\n *X*∼*N*(μ,σ2), \n\n则其[概率密度函数](http://zh.wikipedia.org/wiki/概率密度函数)为 \n\n![](media/GetImage.png)\n\n正态分布的[期望值](http://zh.wikipedia.org/wiki/期望值)μ决定了其位置，其[标准差](http://zh.wikipedia.org/wiki/標準差)σ决定了分布的幅度。因其曲线呈钟形，因此人们又经常称之为**钟形曲线**。我们通常所说的**标准正态分布**是μ = 0,σ = 1的正态分布（见右图中绿色曲线）。 \n\n \n\n## **概要** \n\n正态分布是[自然科学](http://zh.wikipedia.org/wiki/自然科學)与[行为科学](http://zh.wikipedia.org/wiki/行為科學)中的定量现象的一个方便模型。各种各样的[心理学](http://zh.wikipedia.org/wiki/心理學)测试分数和[物理](http://zh.wikipedia.org/wiki/物理)现象比如[光子](http://zh.wikipedia.org/wiki/光子)计数都被发现近似地服从正态分布。尽管这些现象的根本原因经常是未知的， 理论上可以证明如果把许多小作用加起来看做一个变量，那么这个变量服从正态分布(在R.N.Bracewell的Fourier transform and its application中可以找到一种简单的证明)。正态分布出现在许多区域[统计](http://zh.wikipedia.org/wiki/統計):例如, [采样分布](http://zh.wikipedia.org/w/index.php?title=採樣分佈&action=edit&redlink=1)[均值](http://zh.wikipedia.org/w/index.php?title=均值&action=edit&redlink=1)是近似地正态的，既使被采样的样本总体并不服从正态分布。另外，常态分布[信息熵](http://zh.wikipedia.org/wiki/信息熵)在所有的已知均值及方差的分布中最大，这使得它作为一种[均值](http://zh.wikipedia.org/w/index.php?title=均值&action=edit&redlink=1)以及[方差](http://zh.wikipedia.org/wiki/方差)已知的分布的自然选择。正态分布是在统计以及许多统计测试中最广泛应用的一类分布。在[概率论](http://zh.wikipedia.org/wiki/概率論)，正态分布是几种连续以及离散分布的[极限分布](http://zh.wikipedia.org/w/index.php?title=極限分佈&action=edit&redlink=1)。 \n\n \n\n## **历史** \n\n常态分布最早是[亚伯拉罕·棣莫弗](http://zh.wikipedia.org/wiki/亞伯拉罕·棣莫弗)在[1734年](http://zh.wikipedia.org/wiki/1734年)发表的一篇关于[二项分布](http://zh.wikipedia.org/wiki/二項分佈)文章中提出的。[拉普拉斯](http://zh.wikipedia.org/wiki/拉普拉斯)在1812年发表的《分析概率论》（*Theorie Analytique des Probabilites*）中对棣莫佛的结论作了扩展。现在这一结论通常被称为[棣莫佛－拉普拉斯定理](http://zh.wikipedia.org/wiki/中心極限定理#.E6.A3.A3.E8.8E.AB.E4.BD.9B.EF.BC.8D.E6.8B.89.E6.99.AE.E6.8B.89.E6.96.AF.E5.AE.9A.E7.90.86)。 \n\n拉普拉斯在[误差分析](http://zh.wikipedia.org/w/index.php?title=誤差分析&action=edit&redlink=1)试验中使用了正态分布。[勒让德](http://zh.wikipedia.org/wiki/勒讓德)于[1805年](http://zh.wikipedia.org/wiki/1805年)引入[最小二乘法](http://zh.wikipedia.org/wiki/最小二乘法)这一重要方法；而[高斯](http://zh.wikipedia.org/wiki/高斯)则宣称他早在[1794年](http://zh.wikipedia.org/wiki/1794年)就使用了该方法，并通过假设误差服从正态分布给出了严格的证明。 \n\n“钟形曲线”这个名字可以追溯到[Jouffret](http://zh.wikipedia.org/w/index.php?title=Jouffret&action=edit&redlink=1)他在[1872年](http://zh.wikipedia.org/wiki/1872年)首次提出这个术语\"钟形曲面\"，用来指代[二元正态分布](http://zh.wikipedia.org/w/index.php?title=多元正态分布&action=edit&redlink=1)（[bivariate normal](http://zh.wikipedia.org/w/index.php?title=Multivariate_normal_distribution&action=edit&redlink=1)）。正态分布这个名字还被[Charles S. Peirce](http://zh.wikipedia.org/w/index.php?title=Charles_S._Peirce&action=edit&redlink=1)、[Francis Galton](http://zh.wikipedia.org/wiki/Francis_Galton)、[Wilhelm Lexis](http://zh.wikipedia.org/w/index.php?title=Wilhelm_Lexis&action=edit&redlink=1)在1875分布独立的使用。这个术语是不幸的，因为它反应和鼓励了一种谬误，即很多概率分布都是正态的。（请参考下面的“实例”） \n\n这个分布被称为“正态”或者“高斯”正好是[Stigler名字由来法则](http://zh.wikipedia.org/w/index.php?title=Stigler名字由來法則&action=edit&redlink=1)的一个例子，这个法则说“没有科学发现是以它最初的发现者命名的”。 \n\n \n\n## **正态分布的定义** \n\n有几种不同的方法用来说明一个随机变量。最直观的方法是[概率密度函数](http://zh.wikipedia.org/wiki/概率密度函数)，这种方法能够表示随机变量每个取值有多大的可能性。[累积分布函数](http://zh.wikipedia.org/wiki/累积分布函数)是一种概率上更加清楚的方法，但是非专业人士看起来不直观（请看下边的例子）。还有一些其他的等价方法，例如[cumulant](http://zh.wikipedia.org/w/index.php?title=Cumulant&action=edit&redlink=1)、[特征函数](http://zh.wikipedia.org/wiki/特徵函數)、[动差生成函数](http://zh.wikipedia.org/wiki/動差生成函數)以及cumulant-[生成函数](http://zh.wikipedia.org/wiki/生成函數)。这些方法中有一些对于理论工作非常有用，但是不够直观。请参考关于[概率分布](http://zh.wikipedia.org/wiki/概率分布)的讨论。 \n\n \n\n## **概率密度函数** \n\n**正态分布**的[概率密度函数](http://zh.wikipedia.org/wiki/概率密度函数)均值为μ [方差](http://zh.wikipedia.org/wiki/方差)为σ2 (或[标准差](http://zh.wikipedia.org/wiki/標準差)σ)是[高斯函数](http://zh.wikipedia.org/wiki/高斯函數)的一个实例： \n\n ![](media/GetImage(1).png)\n\n(*请看*[*指数函数*](http://zh.wikipedia.org/wiki/指數函數)*以及π.*) \n\n如果一个[随机变量](http://zh.wikipedia.org/wiki/隨機變量)*X*服从这个分布，我们写作 *X* ~ *N*(μ,σ2). 如果μ = 0并且σ = 1，这个分布被称为*标准正态分布*，这个分布能够简化为 \n\n![](media/GetImage2.png)\n\n右边是给出了不同参数的正态分布的函数图。 \n\n正态分布中一些值得注意的量： \n\n- 密度函数关于平均值对称 \n- 平均值是它的[众数](http://zh.wikipedia.org/wiki/众数_(数学))（statistical mode）以及[中位数](http://zh.wikipedia.org/wiki/中位數)（median） \n- 函数曲线下68.268949%的面积在平均值左右的一个[标准差](http://zh.wikipedia.org/wiki/標準差)范围内 \n- 95.449974%的面积在平均值左右两个标准差2σ的范围内 \n- 99.730020%的面积在平均值左右三个标准差3σ的范围内 \n- 99.993666%的面积在平均值左右四个标准差4σ的范围内 \n- [反曲点](http://zh.wikipedia.org/wiki/反曲點)（inflection point）在离平均值的距离为标准差之处 \n\n**累积分布函数**\n\n![](media/GetImage3.png)\n\n上图所示的概率密度函数的累积分布函数  \n\n[累积分布函数](http://zh.wikipedia.org/wiki/累积分布函数)是指随机变量*X*小于或等于*x*的概率，用密度函数表示为 \n\n![](media/GetImage4.png)\n\n正态分布的累积分布函数能够由一个叫做[误差函数](http://zh.wikipedia.org/wiki/误差函数)的[特殊函数](http://zh.wikipedia.org/wiki/特殊函数)表示：\n\n![](media/GetImage5.png)\n\n标准正态分布的累积分布函数习惯上记为Φ，它仅仅是指μ = 0，σ = 1时的值， \n\n![](media/GetImage6.png)\n\n将一般正态分布用[误差函数](http://zh.wikipedia.org/wiki/误差函数)表示的公式简化，可得： \n\n![](media/GetImage7.png)\n\n它的[反函数](http://zh.wikipedia.org/wiki/反函數)被称为反误差函数，为： \n\n![](media/GetImage8.png)\n\n该分位数函数有时也被称为[probit](http://zh.wikipedia.org/w/index.php?title=Probit&action=edit&redlink=1)函数。[probit](http://zh.wikipedia.org/w/index.php?title=Probit&action=edit&redlink=1)函数已被证明没有初等原函数。 \n\n正态分布的[分布函数](http://zh.wikipedia.org/w/index.php?title=分佈函數&action=edit&redlink=1)Φ(*x*)没有解析表达式，它的值可以通过[数值积分](http://zh.wikipedia.org/wiki/數值積分)、[泰勒级数](http://zh.wikipedia.org/wiki/泰勒级数)或者[渐进序列](http://zh.wikipedia.org/w/index.php?title=漸進序列&action=edit&redlink=1)近似得到 "
  },
  {
    "path": "Algorithm/激光雷达与相机外参联合标定调研.md",
    "content": "# 激光雷达与相机外参联合标定调研\n\n## 相机的内参标定原理：\n\n#### 张正友标定法:\n\nhttps://zhuanlan.zhihu.com/p/668358597\n\n## 一些比较通用的3D激光雷达和RGB相机外参标定算法：\n\n### 1. Autoware\n\nhttps://github.com/autowarefoundation/autoware\n\n### 2. cam_lidar_calibration\n\nhttps://github.com/acfr/cam_lidar_calibration\n\n### 3. direct_visual_lidar_calibration\n\nhttps://github.com/koide3/direct_visual_lidar_calibration\n\n### 4. Apollo\n\n这个工具要求相对较高，需要广角相机，里程计和惯导，而且求用户提供初始外参值作为参考.\n\n由于Camera-to-LiDAR标定方法用于自然环境，因此良好的地点可以显着提高标定的准确性。 建议选择包含树木，电线杆，路灯，交通标志，静止物体和清晰交通线等物体的标定场地。\n\n### 5. but_velodyne\n\nhttps://github.com/robofit/but_velodyne\n\n这是一个最简单、最单纯的lidar和cam联合标定的方案，但是需要openCV2.4.9\n\n### 6. lidar_camera_calibration\n\nhttps://github.com/ankitdhall/lidar_camera_calibration\n\n## 激光雷达与相机外参标定原理浅析：\n\n激光雷达与相机之间的外参标定方法一共分为了**四大类**：手动有目标标定（Manual target-based）、自动有目标标定（Automatic target-based）、手动无目标标定（Manual targetless）和自动无目标标定（Automatic targetless）。\n\n有目标即标定过程中需要用到一些辅助工具如标定板、ArUco 标签、标定球等，相应的无目标标定方法则是标定时不依赖特定的工具，直接利用周围的场景信息进行标定。自动标定的方法在标定过程中无需人工干预，算法自动寻找对应点。\n\n### 自动有目标标定\n\nhttps://github.com/MegviiRobot/CamLaserCalibraTool\n\nhttps://blog.csdn.net/weixin_41010198/article/details/115672711\n\n对于传统有目标标定类，标定激光和相机之间的外参数有两类方法：一类是利用 3D-3D 的约束，即利用激光测量的三维激光点 和相机测量的标定板三维坐标点两者来构建约束；另一类是利用 3D-2D 的约束，即利用激光测量的三维激光点和图像二维特征（2D、点特征、线段特征）来构建约束。**标定过程的通常做法是先利用少量观测求解外参数的初始值，然后利用多帧数据的约束进行最小二乘优化对初始值进行优化。**\n\n#### 3D-3D 约束求解**2D激光和相机外参数初始值求解**\n\n这是旷视做的一个关于2D激光雷达和相机的联合标定算法，在看这个标定算法之前，你可以先看下关于相机的内参标定原理\n\n该方法基于 ROS 的单线激光和相机外参数自动标定代码。标定原理如下图所示，相机通过二维码估计标定板平面在相机坐标系下的平面方程，由于激光点云落在平面上，将点云通过激光坐标系到相机坐标系的外参数转换到相机坐标系，构建点到平面的距离作为误差，使用非线性最小二乘进行求解。\n\n基于平面约束的2D激光雷达和相机标定原理：https://zhuanlan.zhihu.com/p/137501892\n基于平面约束的2D激光雷达和相机标定原理：https://heyijia.blog.csdn.net/article/details/85000943\n论文内容：https://blog.csdn.net/Zkangsen/article/details/95224935\n对CamLaserCalibraTool修改的版本代码：https://blog.csdn.net/HERO_CJN/article/details/87644816\n论文：Extrinsic Calibration of a Camera and Laser Range Finder (improves camera calibration)：http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.80.7118&rep=rep1&type=pdf\n\n![img](media/v2-eee0cc857cb113cff95cbf3aedb8d230_r.jpg)\n\n假设标定板平面在相机坐标系 $c$中的参数为$\\pi^c =[{\\mathbb n}^c, d] \\in \\mathbb R^4$,其中$\\mathbb n^c \\in \\mathbb R^3$是平面的三维法向量， $d$是相机坐标系原点到平面的距离。平面上的一个三维点在相机坐标系下的坐标为$\\textbf P^c \\in \\mathbb R^3$，点在平面上满足：\n$$\n\\mathbf{n}^{c\\top}\\mathbf{P}^{c} + d = 0\\\\\n$$\n假设从激光坐标系 $l$ 到相机坐标系之间的旋转和平移为$\\textbf R_{cl}$,$\\textbf t_{cl}$。如果知道激光坐标系中某个激光点$\\textbf P^l$落在标定板上，则通过点在平面上这个约束能够构建关于外参数的方程：\n$$\n\\mathbf{n}^{c\\top}\\left(\\mathbf{R}_{cl}\\mathbf{P}^{l}+\\mathbf{t}_{cl}\\right) + d^c= 0\\quad(1)\\\\\n$$\n上述方程能够提供一个约束，通过多个这样的约束就能求解外参数。\n\n算法估计的参数为从相机坐标系到激光坐标系的变换矩阵$\\textbf R_{cl}$,$\\textbf t_{cl}$，由此激光点从激光坐标系变换到相机坐标系为：\n$$\n\\mathbf{P}^{c} = \\mathbf{R}_{lc}^{\\top}\\left(\\mathbf{P}^{l}-\\mathbf{t}_{lc}\\right)\\\\\n$$\n考虑到激光为 2D 激光，激光束形成的平面不妨假设为 xy 平面，即$z=0$，此时有$\\textbf P^l=[x,y,0]^{\\top}$，则上述坐标系变换可以写成更紧凑的形式：\n$$\n\\mathbf{P}^{c} = \\mathbf{R}_{lc}^{\\top}\\left(\\begin{bmatrix}x\\\\y\\\\0\\end{bmatrix}-\\mathbf{t}_{lc}\\right)=\\underbrace{\\mathbf{R}_{lc}^{\\top}\\begin{bmatrix} 1 & 0 & \\\\0 & 1 &-\\mathbf{t}_{lc} \\\\ 0 & 0 & \\end{bmatrix}}_{\\mathbf{H}} \\begin{bmatrix}x \\\\ y \\\\1\\end{bmatrix} = \\mathbf{H}\\bar{\\mathbf{P}}^{l}\n$$\n由此可以将公式 (1) 也写成紧凑形式：\n$$\n\\mathbf{n}^{c\\top}\\mathbf{H}\\bar{\\mathbf{P}}^{l} = -d^{c}\\\\\n$$\n如果把 3 乘 3 的$\\textbf H$ 矩阵当做新的未知量（ 9 个参数）进行估计，那上述约束就变成了一个**线性**最小二乘问题。对于单线激光而言，一帧激光可以提供两个有效约束（直线上两个点在平面上即能确定直线在平面上），因此大于等于 5 帧激光（不同姿态）就能得到 10 个以上的约束，来直接求得 9 参数的$\\textbf H$。然后恢复出 $\\textbf R_{cl}$,$\\textbf t_{cl}$:\n$$\n\\begin{split} \\mathbf{R}_{lc} &= \\begin{bmatrix}\\mathbf{h}_1 & \\mathbf{h}_2 & \\mathbf{h}_1\\times \\mathbf{h}_2 \\end{bmatrix}^{\\top} \\\\ \\mathbf{t}_{lc} &= -\\begin{bmatrix}\\mathbf{h}_1 & \\mathbf{h}_2 & \\mathbf{h}_1\\times \\mathbf{h}_2 \\end{bmatrix}^{\\top}\\mathbf{h}_3 \\\\ \\end{split}\\\\\n$$\n但是，利用上述方式求得的旋转矩阵并不满足旋转矩阵的性质 $\\textbf R^{\\top} \\textbf R=\\textbf I_{3\\times3}$。假设期望的旋转矩阵为$\\hat {\\textbf R}_{lc}$ ，则可以通过计算带约束的最小化 Frobenius norm 问题来估计 $\\hat {\\textbf R}_{lc}$：\n$$\n\\arg \\min \\left\\| \\hat{\\mathbf{R}}_{lc} - {\\mathbf{R}}_{lc} \\right\\|_{F},\\quad \\text{subject to} \\ \\hat{\\mathbf{R}}^{\\top}_{lc}\\hat{\\mathbf{R}}_{lc} = \\mathbf{I}\\\\\n$$\n\n#### **外参数优化**\n\n通过上述方式计算出外参数的初始值之后，再对采集的 $N$组数据进行联合优化得到最优估计，假设第$i$帧激光有$N_i$个激光点落在标定板上，同时第$i$帧激光对应的标定板平面方程在相机坐标系的表示为$[\\textbf n^c_i, d^c_i]^\\top$:\n$$\n\\hat{\\mathbf{R}}_{cl},\\hat{\\mathbf{t}}_{cl}=\\arg\\min_{\\mathbf{R}_{cl},\\mathbf{t}_{cl}}\\sum_{i=1}^{N}\\frac{1}{N_i}\\sum_{m=1}^{N_i}\\left\\|\\mathbf{n}_i^{c\\top}\\left(\\mathbf{R}_{cl}\\mathbf{P}_{im}^{l}+\\mathbf{t}_{cl}\\right)+d_i^{c}\\right\\|^2\\\\\n$$\n\n\n而 3D-2D 这一方法其实就是获取激光雷达坐标系和相机坐标系之间的变换矩阵（外参），其本质还是一个PnP问题。\n\nPnP问题即给定**空间中n个点的三维坐标**以及其在**图像平面上的投影点的像素坐标**，求解**该图像对应的相机的位姿**。换句话说，空间中的点先转换至相机坐标系下，然后通过相机的内参投影到2D图像平面坐标系下得到图像上的一个点，相机的视野范围内的所有空间点通过这样一个流程，就可以生成一张完整的2D图像。\n\n如果**把激光雷达坐标系设为空间的全局坐标系**，那么上述过程中**空间点向相机坐标系转换时就需要用到激光雷达和相机之间的外参**。所以当外参未知时，我们只要知道**空间点、相机内参以及这些空间点对应的图像位置**，就可以建立数学模型求出外参。\n\n所以将外参标定问题转换为PnP问题后，解决问题的核心在于如何有效准确的找到**空间点和图像点之间的对应关系**，不少工作都是在用各种方法尽可能的提高对应点的匹配率。\n\n### 自动无目标标定\n\n对于自动无目标类，可以进一步分为四类：基于信息论方法（Information theory based methods）、基于特征的方法（Feature based methods）、基于自运动的方法（Ego‑motion based methods）和基于学习的方法（Learning based methods）。\n\n- **基于信息论的方法**通过比较激光雷达和相机生成数据的相似性来优化外参标定结果，比如可用的信息有：激光雷达生成点云的反射率（强度信息）、平面法向量、梯度大小和方向、语义信息等和相机图像的灰度值强度、梯度大小和方向、像素语义信息等。基于各自的数据信息，使用信息论的一些方法来计算彼此之间的距离，通过各种优化方法改变外参提高两者的相似性来得到最佳的标定结果。\n\n  https://github.com/koide3/direct_visual_lidar_calibration\n\n  https://staff.aist.go.jp/k.koide/assets/pdf/icra2023.pdf\n\n  \n\n- **基于特征的方法**通过提取点云与图片之间的特征，并对他们进行匹配来实现标定，整个流程可具体分为特征提取、特征匹配和外参估计三个步骤。在特征提取步骤中可以利用点（Sobel算子、SIFT算法、Förstner算子等）、边缘（深度信息、3D线、Canny算法等）和语义（天际线、车道和电线杆等）这些信息作为特征，然后对这些特征进行匹配并计算外参。\n\n  https://github.com/hku-mars/livox_camera_calib\n\n  https://arxiv.org/abs/2103.01627\n\n  - \n\n- **基于自运动的方法**利用激光雷达和相机自身的特性产生冗余的数据进行标定，例如通过激光SLAM算法估计时刻1到时刻2的激光雷达运动位姿，同时使用SfM算法估计相机从时刻1到时刻2的位姿，利用两者相同时间内的运动轨迹估计出外参参数，再进一步使用优化算法得到更精确的外参。\n\n  \n\n- **基于学习的方法**即使用近些年很火的深度学习算法进行标定，有端到端的方法（输入点云和图片数据，输出标定外参），也有在整个标定过程中的某一步使用深度学习方法处理（特征提取、特征匹配等）。"
  },
  {
    "path": "Algorithm/激光雷达性能指标.md",
    "content": "# 激光雷达性能指标\n\n激光雷达的性能指标主要包括线数，波长，激光安全等级，测距能力和盲区，精度，视场角FOV，角分辨率，帧率，转速，出点数以及其他部分。\n\n##  线数\n\n车载激光雷达一般使用多线雷达，就是在垂直方向上具有多个发射器和接收器。对于激光雷达来说，线数越多、越密意味着可以更清晰、更完善的收集各类物体3D轮廓，目前自动驾驶车辆上大多使用16线、32线、64线、128线等。在类似于测绘，自动驾驶等场景下，激光雷达肯定是线数越高越好。\n\n## 波长\n\n两者相比之下，波长为1550nm的激光雷达所使用的铟镓砷(InGaAs)近红外探测器要比波长为905nm所使用的硅基光电探测器更贵，所以二者的成本会有区别，所谓一分价钱一分货，1550nm激光雷达的激光器功率是传统905nm硅光电系统的40倍；还有效解决了905纳米对雨雾的穿透力的不足的问题，因此在复杂气候天气下也能将有效探测距离保持在200米以上。\n\n同时1550nm波长的激光也更加安全，对人眼没有危害。原因在于，要让激光雷达「看得更远」，就必须发射更强的光脉冲，然而波长越长能量越低，距离可见光越远。905纳米的激光，这对于人类来说是不可见的。但是如果它集中到了一个真人的眼球，而且具有足够的能量时，就会损伤人类的视网膜。相比之下1550纳米的激光，它在光谱的红外线部分距离可见光波段更远，因此无法穿透人的眼球。\n\n## 激光安全等级\n\n上述有提到了激光对人眼的伤害，其实国际电工委员会（IEC）已经制定了安全标准，它依据激光产品的波长、最大输出激光功率或能量，将激光产品分为7大安全等级，车载激光雷达一般要求人眼安全级别为Class1。\n\n![img](media/429.jpg)\n\n## 测距能力和盲区\n\n这两个我们放一起谈，首先测距能力（量程），即能有效检测到最近和最远距离，另外目标的反射率越高则测量距离越远，目标的反射率越低则测量距离越近。\n\n比如参数表中的“200m@10%反射率”意思是激光雷达发射光束到200米的距离可以看清最低10%光线反射率的物体，比如一张白纸。\n\n盲区，顾名思义是激光雷达无法接收到激光回波信号的距离。一句话概括就是在可视范围之外即为盲区。\n\n而盲区也会因为距离过近而产生，比如当物体紧贴激光雷达光罩时，性能好的激光雷达产品依然能够有效探测，做到“零盲区”，而有的激光雷达在0.2米时就产生盲区无法成像了。\n\n## 精度\n\n精度，即雷达可以感知的距离最小变化值。通常来说目标距离激光雷达越远测距准确度越低。以人眼为例，10米距离上我们可以清晰看到一个酒瓶盖大小的物体，而200米后就看不见了。\n\n##  视场角FOV\n\n视场角FOV（Field of View），即有效扫描角度，在该角度范围内目标物体可被检测到，它分为水平视场角和垂直视场角。以人眼为例，就是你直视前方时可以看到的上下和左右范围。\n\n水平视场角，即是水平面上所侦测的范围，以64线激光雷达为例，单纯的64线激光束的范围是远远不够的，但如果增加线束的范围又会大大增加成本，所以诞生了安装马达的机械旋转式激光雷达，这样就可以配合旋转的动作形成360°水平视场角，而固态式激光雷达只能看到正前方某些度数（例如60°至120°）；\n\n垂直视场角，垂直方位角指的是激光雷达垂直方向的检测角度，一般在40°以内。而且光束也不是垂直均匀分布的，而是中间密，两边稀疏，而且激光光束会尽量向下偏置一定的角度，这也是为了扫描到更多的障碍物，在一定程度上可弥补上面说过的近处盲区。\n\n![img](media/488.jpg)\n\n![img](media/c75c10385343fbf2601562e25509718764388fb2.jpeg@f_auto)\n\n## 角分辨率\n\n角分辨率，表示两个相邻测距点的角度。如下图，它也分为水平角分辨率和垂直角分辨率，如上面的FOV一样，水平角分辨率和垂直角分辨率分别表示水平面上点的夹角以及垂直面上点的夹角，这里就不过多赘述。\n\n![img](media/493.jpg)\n\n另外，角分辨率大小决定了一次扫描能返回的样本点数以及该激光雷达所能检测的最小障碍物大小，比如2个激光光束相邻测距点的角度为0.4°，那么当探测距离为200m的时候，2个激光光束之间的距离为200m*tan0.4°≈1.4m。也就是说在200m之后，只能检测到高于1.4m的障碍物了。\n\n![img](media/494.jpg)\n\n帧率帧率，扫描频率表示一秒内雷达进行多少次扫描，其计量单位是HZ（赫兹是电，磁，声波和机械振动周期循环时频率的单位。即每秒的周期次数“周期/秒”）。扫描频率越大，设备对外界环境的感知速度越快，系统实时性更高。\n\n## 转速\n\n转速，转速的国际标准单位为rps (转/秒)或 rpm (转/分)，1200rpm意思是当前激光雷达的马达引擎转速是每分钟转1200圈。与帧率一样，转速越高设备对外界环境的感知速度越快。\n\n## 出点数\n\n出点数（分单回波模式和双回波模式），就是单位时间内激光雷达可以扫描多少个点位。\n\n我们以128线机械旋转激光雷达为例计算一下出点数：\n\n已知：\n\n机械旋转式激光雷达是360°水平视场角\n\n10Hz帧率（每秒扫描转10圈）,也就是每100ms(10Hz)转360度\n\n水平角分辨率为0.2°\n\n所以，当水平角分辨率为0.2°，旋转一周将会产生360/0.2=1800个点\n\n最终，出点数为128线*1800个点*10HZ=2304000点/秒（pts/s）\n\n## 其他部分\n\n对于车厂来说，车上所有电器元件的供电电压、产品功率、产品工作温度、IP防尘风水等防护等级都是非常重要的采购指标，这里就不是我们需要关注的啦。\n\n\n\n> 参考：https://www.thepaper.cn/newsDetail_forward_11023962\n\n"
  },
  {
    "path": "Algorithm/灰度质心法.md",
    "content": "# 灰度质心法 \n\n![](media/GetImage19.png)\n\n![](media/GetImage20.png)\n\n![](media/GetImage21.png)\n\n![](media/GetImage22.png)\n\n![](media/GetImage23.png)"
  },
  {
    "path": "Algorithm/相机参数DKPR的解释.md",
    "content": "# 相机参数DKPR的解释\n\n## 矩阵D：\n\n是相机的失真系数，包括(k1,k2,t1,t2)\n\n## 矩阵K：\n\n即相机的内参矩阵\n\n## 矩阵R：\n\n3*3的旋转矩阵，仅对双目相机有效，使左右极线平行\n\n## 矩阵P：\n\n是相机的投影矩阵，在单目相机中，T x = T y = 0\n\n\n"
  },
  {
    "path": "Algorithm/矩阵的奇异值分解.md",
    "content": "# 矩阵的奇异值分解\n\n![image-20220828214605614](media/image-20220828214605614.png)\n\n![image-20220828214613714](media/image-20220828214613714.png)\n\n![image-20220828214620137](media/image-20220828214620137.png)\n\n![image-20220828214625367](media/image-20220828214625367.png)\n\n![image-20220828214630394](media/image-20220828214630394.png)\n\n![image-20220828214653288](media/image-20220828214653288.png)\n\n![image-20220828214659888](media/image-20220828214659888.png)\n\n![image-20220828214705339](media/image-20220828214705339.png)\n\n![image-20220828214710593](media/image-20220828214710593.png)\n\n![image-20220828214715343](media/image-20220828214715343.png)\n\n![image-20220828214720521](media/image-20220828214720521.png)\n\n![image-20220828214725448](media/image-20220828214725448.png)\n\n![image-20220828214730397](media/image-20220828214730397.png)"
  },
  {
    "path": "Algorithm/超定方程组的最小二乘解.md",
    "content": "# 超定方程组的最小二乘解\n\n![](media/1.png)\n\n![](media/2.png)\n\n![](media/3.png)\n\n![](media/4.png)\n\n![](media/5.png)\n\n![](media/6.png)\n\n![](media/7.png)\n\n![](media/8.png)\n\n"
  },
  {
    "path": "Algorithm/路径规划之A-star算法.md",
    "content": "# 路径规划之A*算法\n\nA*（念做：A Star）算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度。本文在讲解算法的同时也会提供C++语言的代码实现\n\nhttps://github.com/hanlin-cheng/A-Star-algorithm\n\n# 算法介绍\n\nA*算法最初发表于1968年，由Stanford研究院的Peter Hart, Nils Nilsson以及Bertram Raphael发表。它可以被认为是Dijkstra算法的扩展。\n\n由于借助启发函数的引导，A*算法通常拥有更好的性能。\n\n# 广度优先搜索\n\n为了更好的理解A*算法，我们首先从广度优先（Breadth First）算法讲起。\n\n正如其名称所示，广度优先搜索以广度做为优先级进行搜索。\n\n从起点开始，首先遍历起点周围邻近的点，然后再遍历已经遍历过的点邻近的点，逐步的向外扩散，直到找到终点。\n\n这种算法就像洪水（Flood fill）一样向外扩张，算法的过程如下图所示：\n\n![img](https://qiangbo-workspace.oss-cn-shanghai.aliyuncs.com/2019-02-05-a-star-algorithm/breadth_first.gif)\n\n在上面这幅动态图中，算法遍历了图中所有的点，这通常没有必要。对于有明确终点的问题来说，一旦到达终点便可以提前终止算法，下面这幅图对比了这种情况：\n\n![img](https://qiangbo-workspace.oss-cn-shanghai.aliyuncs.com/2019-02-05-a-star-algorithm/early_exit.png)\n\n在执行算法的过程中，每个点需要记录达到该点的前一个点的位置 – 可以称之为父节点。这样做之后，一旦到达终点，便可以从终点开始，反过来顺着父节点的顺序找到起点，由此就构成了一条路径。\n\n# Dijkstra算法\n\nDijkstra算法是由计算机科学家[Edsger W. Dijkstra](https://en.wikipedia.org/wiki/Edsger_W._Dijkstra)在1956年提出的。\n\nDijkstra算法用来寻找图形中节点之间的最短路径。\n\n考虑这样一种场景，在一些情况下，图形中相邻节点之间的移动代价并不相等。例如，游戏中的一幅图，既有平地也有山脉，那么游戏中的角色在平地和山脉中移动的速度通常是不相等的。\n\n在Dijkstra算法中，需要计算每一个节点距离起点的总移动代价。同时，还需要一个优先队列结构。对于所有待遍历的节点，放入优先队列中会按照代价进行排序。\n\n在算法运行的过程中，每次都从优先队列中选出代价最小的作为下一个遍历的节点。直到到达终点为止。\n\n下面对比了不考虑节点移动代价差异的广度优先搜索与考虑移动代价的Dijkstra算法的运算结果：\n\n![img](https://qiangbo-workspace.oss-cn-shanghai.aliyuncs.com/2019-02-05-a-star-algorithm/dijkstra.gif)\n\n> 当图形为网格图，并且每个节点之间的移动代价是相等的，那么Dijkstra算法将和广度优先算法变得一样。\n\n# 最佳优先搜索\n\n在一些情况下，如果我们可以预先计算出每个节点到终点的距离，则我们可以利用这个信息更快的到达终点。\n\n其原理也很简单。与Dijkstra算法类似，我们也使用一个优先队列，但此时以每个节点到达终点的距离作为优先级，每次始终选取到终点移动代价最小（离终点最近）的节点作为下一个遍历的节点。这种算法称之为最佳优先（Best First）算法。\n\n这样做可以大大加快路径的搜索速度，如下图所示：\n\n![img](https://qiangbo-workspace.oss-cn-shanghai.aliyuncs.com/2019-02-05-a-star-algorithm/best_first.gif)\n\n但这种算法会不会有什么缺点呢？答案是肯定的。\n\n因为，如果起点和终点之间存在障碍物，则最佳优先算法找到的很可能不是最短路径，下图描述了这种情况。\n\n![img](https://qiangbo-workspace.oss-cn-shanghai.aliyuncs.com/2019-02-05-a-star-algorithm/best_first_2.gif)\n\n# A*算法\n\n对比了上面几种算法，最后终于可以讲解本文的重点：A*算法了。\n\n下面的描述我们将看到，A*算法实际上是综合上面这些算法的特点于一身的。\n\nA*算法通过下面这个函数来计算每个节点的优先级。\n$$\nf(n)=g(n)+h(n)\n$$\n其中：\n\n- **f(n)** 是节点n的综合优先级。当我们选择下一个要遍历的节点时，我们总会选取综合优先级最高（值最小）的节点。\n- **g(n)** 是节点n距离起点的代价。\n- **h(n)** 是节点n距离终点的预计代价，这也就是A*算法的启发函数。关于启发函数我们在下面详细讲解。\n\nA*算法在运算过程中，每次从优先队列中选取f(n)f(n)值最小（优先级最高）的节点作为下一个待遍历的节点。\n\n另外，A*算法使用两个集合来表示待遍历的节点，与已经遍历过的节点，这通常称之为`open_set`和`close_set`。\n\n完整的A*算法描述如下：\n\n```\n* 初始化open_set和close_set；\n* 将起点加入open_set中，并设置优先级为0（优先级最高）；\n* 如果open_set不为空，则从open_set中选取优先级最高的节点n：\n    * 如果节点n为终点，则：\n        * 从终点开始逐步追踪parent节点，一直达到起点；\n        * 返回找到的结果路径，算法结束；\n    * 如果节点n不是终点，则：\n        * 将节点n从open_set中删除，并加入close_set中；\n        * 遍历节点n所有的邻近节点：\n            * 如果邻近节点m在close_set中，则：\n                * 跳过，选取下一个邻近节点\n            * 如果邻近节点m也不在open_set中，则：\n                * 设置节点m的parent为节点n\n                * 计算节点m的优先级\n                * 将节点m加入open_set中\n```\n\n## 启发函数\n\n上面已经提到，启发函数会影响A*算法的行为。\n\n- 在极端情况下，当启发函数**h(n)**始终为0，则将由**g(n)**决定节点的优先级，此时算法就退化成了Dijkstra算法。\n- 如果**h(n)**始终小于等于节点n到终点的代价，则A*算法保证一定能够找到最短路径。但是当**h(n)**的值越小，算法将遍历越多的节点，也就导致算法越慢。\n- 如果**h(n)**完全等于节点n到终点的代价，则A*算法将找到最佳路径，并且速度很快。可惜的是，并非所有场景下都能做到这一点。因为在没有达到终点之前，我们很难确切算出距离终点还有多远。\n- 如果**h(n)**的值比节点n到终点的代价要大，则A*算法不能保证找到最短路径，不过此时会很快。\n- 在另外一个极端情况下，如果**h(n)**相较于g(n)**大很多**，则此时只有**h(n)**产生效果，这也就变成了最佳优先搜索。\n\n由上面这些信息我们可以知道，通过调节启发函数我们可以控制算法的速度和精确度。因为在一些情况，我们可能未必需要最短路径，而是希望能够尽快找到一个路径即可。这也是A*算法比较灵活的地方。\n\n对于网格形式的图，有以下这些启发函数可以使用：\n\n- 如果图形中只允许朝上下左右四个方向移动，则可以使用曼哈顿距离（Manhattan distance）。\n- 如果图形中允许朝八个方向移动，则可以使用对角距离。\n- 如果图形中允许朝任何方向移动，则可以使用欧几里得距离（Euclidean distance）。\n\n## 关于距离\n\n### 曼哈顿距离\n\n如果图形中只允许朝上下左右四个方向移动，则启发函数可以使用曼哈顿距离，它的计算方法如下图所示：\n\n![img](https://qiangbo-workspace.oss-cn-shanghai.aliyuncs.com/2019-02-05-a-star-algorithm/Manhattan_dis.png)\n\n计算曼哈顿距离的函数如下，这里的D是指两个相邻节点之间的移动代价，通常是一个固定的常数。\n\n```\nfunction heuristic(node) =\n    dx = abs(node.x - goal.x)\n    dy = abs(node.y - goal.y)\n    return D * (dx + dy)\n```\n\n### 对角距离\n\n如果图形中允许斜着朝邻近的节点移动，则启发函数可以使用对角距离。它的计算方法如下：\n\n![img](https://qiangbo-workspace.oss-cn-shanghai.aliyuncs.com/2019-02-05-a-star-algorithm/Diagonal_dis.png)\n\n计算对角距离的函数如下，这里的D2指的是两个斜着相邻节点之间的移动代价。如果所有节点都正方形，则其值就是\n$$\n\\sqrt{2} * D\n$$\n\n```\nfunction heuristic(node) =\n    dx = abs(node.x - goal.x)\n    dy = abs(node.y - goal.y)\n    return D * (dx + dy) + (D2 - 2 * D) * min(dx, dy)\n```\n\n### 欧几里得距离\n\n如果图形中允许朝任意方向移动，则可以使用欧几里得距离。\n\n欧几里得距离是指两个节点之间的直线距离，因此其计算方法也是我们比较熟悉的：\n$$\n\\sqrt{(p2.x-p1.x)^2 + (p2.y-p1.y)^2}\n$$\n其函数表示如下：\n\n```\nfunction heuristic(node) =\n    dx = abs(node.x - goal.x)\n    dy = abs(node.y - goal.y)\n    return D * sqrt(dx * dx + dy * dy)\n```\n\n## 参考\n\nhttp://theory.stanford.edu/~amitp/GameProgramming/\n\nhttps://paul.pub/a-star-algorithm/\n\nhttps://blog.csdn.net/hitwhylz/article/details/23089415"
  },
  {
    "path": "Algorithm/重投影误差.md",
    "content": "## 重投影误差\n\n![](media/9.png)\n\n![](media/10.png)"
  },
  {
    "path": "Algorithm/雅克比矩阵和海塞矩阵.md",
    "content": "# 雅克比矩阵和海塞矩阵 \n\n## **雅可比（Jacobian）矩阵**  \n\n（雅克比算子又称为行偏导算子） \n\n在向量分析中, 雅可比矩阵是**一阶偏导数**以**一定方式排列**成的**矩阵**。其行列式称为雅可比行列式。还有, 在代数几何中, 代数曲线的雅可比量表示雅可比簇：伴随该曲线的一个代数群, 曲线可以嵌入其中. 它们全部都以数学家卡尔·雅可比(Carl Jacob, 1804年10月4日－1851年2月18日)命名。 \n\n雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近. 因此, 雅可比矩阵类似于多元函数的导数。 \n\n![](media/GetImage12.png)\n\n \n\n表示为: \n\n![](media/GetImage13.png)\n\n如果p是Rn中的一点, F在p点可微分, 那么在这一点的导数由*JF(p)*给出(这是求该点导数最简便的方法). 在此情况下, 由F(p)描述的线性算子即接近点p的F的最优线性逼近, x逼近于p: \n\n![](media/GetImage14.png)\n\n## 海塞矩阵（Hessian）\n\nHessian Matrix（黑塞矩阵、海森矩阵、海瑟矩阵、海塞矩阵 etc.）,它是一个多元函数的二阶偏导数构成的方阵，用以描述函数的局部曲率。黑塞矩阵最早于19世纪由德国数学家Ludwig Otto Hesse提出，并以其名字命名。黑塞矩阵常用于[牛顿法](http://baike.baidu.com/view/1504001.htm)解决优化问题。 \n\n在[数学](http://zh.wikipedia.org/wiki/数学)中，**海塞矩阵**（*Hessian matrix* 或 *Hessian*）是一个自变量为向量的实值函数的二阶[偏导数](http://zh.wikipedia.org/wiki/偏导数)组成的[方块矩阵](http://zh.wikipedia.org/wiki/方块矩阵)，此函数如下： \n\n![](media/GetImage15.png)\n\n如果 *f* 所有的二阶导数都存在，那么 *f* 的海塞矩阵即： \n\n其中  \n\n![](media/GetImage16.png)\n\n ，即 \n\n![](media/GetImage17.png)\n\n二阶偏导数矩阵也就所谓的海赛矩阵(Hessian matrix) \n\n一元函数就是二阶导，多元函数就是二阶偏导组成的矩阵 \n\n求向量函数最小值时用的，矩阵正定是最小值存在的充分条件。 \n\n经济学中常常遇到求最优的问题，目标函数是多元非线性函数的极值问题尚无一般的求解方法，但判定局部极小值的方法是有的，就是用海赛矩阵，是变量向量二阶偏导数构成的矩阵，矩阵正定是局部极小点的充分条件。 "
  },
  {
    "path": "Algorithm/高斯牛顿法.md",
    "content": "# 高斯牛顿法 \n\n## **手写高斯牛顿法**\n\n**CMakeLists**\n\n```cmake\ncmake_minimum_required(VERSION 3.15) \nproject(GuassNewton) \n\nset(CMAKE_CXX_STANDARD 14) \n\n#OpenCV \nfind_package(OpenCV REQUIRED) \ninclude_directories(${OpenCV_INCLUDE_DIRS}) \n\n#Eigen \ninclude_directories(\"/usr/include/eigen3\") \n\nadd_executable(GuassNewton main.cpp) \ntarget_link_libraries(GuassNewton ${OpenCV_LIBS}) \n```\n\n**.cpp文件**\n\n```c++\n#include <iostream> \n#include <chrono> \n#include <opencv2/opencv.hpp> \n#include <Eigen/Core> \n#include <Eigen/Dense> \n\nusing namespace std; \nusing namespace Eigen; \n\nint main() { \n    //设定曲线真实参数 \n    double ar = 1.0, br = 2.0, cr = 1.0; \n    //给定曲线参数优化初始估计值 \n    double ae = 2.0, be = -1.0, ce = 5.0; \n    //设定数据点个数 \n    int N = 100; \n    //设定噪声服从的正态分布的sigma值 \n    double w_sigma = 1.0; \n    //计算sigma的倒数，之后用于误差归一化 \n    double inv_sigma = 1.0 / w_sigma; \n    //OpenCV随机数产生器 \n    cv::RNG rng; \n\n    //初始化数据容器，容器内元素类型为double \n    vector<double> x_data, y_data; \n    //生成N个数据点 \n    for (int i=0; i < N; ++i){ \n        //x在0-1之间均匀取100个值 \n        double x = i / 100.0; \n        x_data.push_back(x); \n        //y用真实函数生成再加上高斯噪声 \n        y_data.push_back(exp(ar*x*x+br*x+cr)+rng.gaussian(w_sigma * w_sigma)); \n    } \n\n    //开始高斯牛顿迭代 \n    //设定迭代次数 \n    int iterations = 100; \n    //本次迭代和上次迭代的cost \n    double cost = 0, lastcost = 0; \n\n    //开始及时，当前时间点存储到t1中 \n    chrono::steady_clock::time_point t1 = chrono::steady_clock::now(); \n\n    //牛顿高斯算法迭代iterations次 \n    for (int iter = 0; iter < iterations; ++iter) { \n        //初始化H矩阵，b矩阵,雅克比矩阵J和cost \n        Matrix3d H = Matrix3d::Zero(); \n        Vector3d b = Vector3d::Zero(); \n        cost = 0; \n\n        //对N个数据点进行处理，列出总的增量方程，计算初始误差 \n        for (int i = 0; i < N; ++i) { \n            double xi = x_data[i], yi = y_data[i]; \n            double error = yi - exp(ae * xi * xi + be * xi + ce); \n            //计算雅克比矩阵在该点取值 \n            Vector3d J; \n            J[0] = -xi * xi * exp(ae * xi * xi + be * xi + ce);  // de/da \n            J[1] = -xi * exp(ae * xi * xi + be * xi + ce);   // de/db \n            J[2] = -exp(ae * xi * xi + be * xi + ce);   // de/dc \n\n            H += inv_sigma * inv_sigma * J * J.transpose();   //这里除以sigma是归一化 \n            b += -inv_sigma * inv_sigma * error * J; \n\n            cost += error * error; \n        } \n\n        //求解线性方程Hx=b \n        Vector3d dx = H.ldlt().solve(b); \n        //如果方程无解，那么dx[0]是非法字符nan，退出迭代 \n        if (isnan(dx[0])) { \n            cout << \"result is nan!\" << endl; \n            break; \n        } \n\n        //如果本次迭代误差大于上次误差，算法结束，退出迭代 \n        if(iter > 0 && cost >= lastcost){ \n            cout << \"cost:\" << cost << \">=\" << lastcost << \",break.\" << endl; \n            break; \n        } \n\n \n        //进行估计参数的增量更新，存储本次代价 \n        ae += dx[0]; \n        be += dx[1]; \n        ce += dx[2]; \n\n        lastcost = cost; \n        //输出本次迭代信息 \n        cout << \"total cost:\" << cost << \",\\t\\tupdate:\" << dx.transpose() << \"\\t\\testimatec:\" << ae << \",\" << be << \n        \",\" << ce << endl; \n    } \n\n    //及时结束，获取当前时间赋给t2 \n    chrono::steady_clock::time_point t2 = chrono::steady_clock::now(); \n    //计算算法耗时并输出 \n    chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>(t2 - t1); \n    cout << \"solve time cost = \" << time_used.count() << \" seconds. \" << endl; \n\n    //输出最终算法迭代结果 \n    cout << \"estimated abc = \" << ae << \", \" << be << \", \" << ce << endl; \n    return 0; \n} \n```\n\n"
  },
  {
    "path": "C++/C++11chrono库.md",
    "content": "# C++11:chrono库 (日期和时间库)\n\n> ​\tC++11标准已经支持std::chrono了，但是为了兼容老编译系统现在很多C++库和程序都使用boost::chrono作为时间类库(还有的原因就std::chrono没有收录boost::chrono的所有功能，比如统计CPU使用时间、自定义时间输出格式等)，Boost::Chrono的时间类型分为duration和time_point，也就是时长和时刻两类，很多概念和接口都是围绕这两个维度去定义和实现的。\n\nchrono库主要包含了三种类型:\n时间间隔Duration\n时钟Clocks\n时间点Time point\n\n## **Duration**\n\nduration表示一段时间间隔，用来记录时间长度，可以表示几秒钟、几分钟或者几个小时的时间间隔。\n\n其原型:\n\n```c++\ntemplate<class Rep,class Period = std::ration<1>> class duration;\n```\n\n第一个模板参数Rep是一个数值类型，表明存储所用的数据类型(int、long、double等)；第二个模板参数是一个默认模板参数std::ratio，它的原型是：\n\n```c++\ntemplate<std::intmax_t Num, std::intmax_t Denom = 1> class ratio;\n```\n\n第一个模板参数Rep是一个数值类型，表明存储所用的数据类型(int、long、double等)；第二个模板参数是一个默认模板参数std::ratio，它的原型是：\n\n它表示每个时钟周期的秒数，其中第一个模板参数Num代表分子，Denom代表分母，分母默认为1，ratio代表的是一个分子除以分母的分数值，比如ratio<2>代表一个时钟周期是两秒，ratio<60>代表了一分钟，ratio<60 * 60>代表一个小时，ratio<60 * 60 * 24>代表一天。而ratio<1, 1000>代表的则是1/1000秒即一毫秒，ratio<1, 1000000>代表一微秒，ratio<1, 1000000000>代表一纳秒。\n\n标准库为了方便使用，就定义了一些常用的时间间隔，如时、分、秒、毫秒、微秒和纳秒，在chrono命名空间下，它们的定义如下：\n\n```c++\ntypedef duration <Rep, ratio<3600,1>> hours;\n\ntypedef duration <Rep, ratio<60,1>> minutes;\n\ntypedef duration <Rep, ratio<1,1>> seconds;\n\ntypedef duration <Rep, ratio<1,1000>> milliseconds;\n\ntypedef duration <Rep, ratio<1,1000000>> microseconds;\n\ntypedef duration <Rep, ratio<1,1000000000>> nanoseconds;\n```\n\n```c++\n#include <chrono>\n#include <iostream>\nusing namespace std;\nint main()\n{\n    chrono::hours h(1); // 一小时\n    chrono::milliseconds ms{ 3 }; // 3 毫秒\n    chrono::duration<int, ratio<1000>> ks(3); // 3000 秒\n\n    // chrono::duration<int, ratio<1000>> d3(3.5); // error\n    chrono::duration<double> dd(6.6); // 6.6 秒\n\n    // 使用小数表示时钟周期的次数\n    chrono::duration<double, std::ratio<1, 30>> hz(3.5);\n    return 0;\n}\n\n/*********************************************************************\nh(1) 时钟周期为 1 小时，共有 1 个时钟周期，所以 h 表示的时间间隔为 1 小时\nms(3) 时钟周期为 1 毫秒，共有 3 个时钟周期，所以 ms 表示的时间间隔为 3 毫秒\nks(3) 时钟周期为 1000 秒，一共有三个时钟周期，所以 ks 表示的时间间隔为 3000 秒\nd3(3.5) 时钟周期为 1000 秒，时钟周期数量只能用整形来表示，但是此处指定的是浮点数，因此语法错误\ndd(6.6) 时钟周期为默认的 1 秒，共有 6.6 个时钟周期，所以 dd 表示的时间间隔为 6.6 秒\nhz(3.5) 时钟周期为 1/30 秒，共有 3.5 个时钟周期，所以 hz 表示的时间间隔为 1/30*3.5 秒\nchrono 库中根据 duration 类封装了不同长度的时钟周期（也可以自定义），基于这个时钟周期再进行周期次数的设置就可以得到总的时间间隔了（时钟周期 * 周期次数 = 总的时间间隔）。\n*************************************************************************/\n```\n\nchrono还提供了获取时间间隔的时钟周期个数的方法count()，它的基本用法：\n\n```c++\n#include <chrono>\n#include <iostream>\nint main()\n{\n    std::chrono::milliseconds ms{ 3 }; // 3 毫秒\n    std::chrono::microseconds us = 2 * ms; // 6000 微秒\n    // 时间间隔周期为 1/30 秒\n    std::chrono::duration<double, std::ratio<1, 30>> hz(3.5);\n\n    std::cout << \"3 ms duration has \" << ms.count() << \" ticks\\n\"\n        << \"6000 us duration has \" << us.count() << \" ticks\\n\"\n        << \"3.5 hz duration has \" << hz.count() << \" ticks\\n\";\n    return 0;\n}\n```\n\n```c++\n3 ms duration has 3 ticks\n6000 us duration has 6000 ticks\n3.5 hz duration has 3.5 ticks\n\nms 时间单位为毫秒，初始化操作 ms{3} 表示时间间隔为 3 毫秒，一共有 3 个时间周期，每个周期为 1 毫秒\nus 时间单位为微秒，初始化操作 2*ms 表示时间间隔为 6000 微秒，一共有 6000 个时间周期，每个周期为 1 微秒\nhz 时间单位为秒，初始化操作 hz(3.5) 表示时间间隔为 1/30*3.5 秒，一共有 3.5 个时间周期，每个周期为 1/30 秒\n```\n\n通过定义这些常用的时间间隔类型，我们能方便的使用它们，比如线程的休眠:\n\n```c++\nstd::this_thread::sleep_for(std::chrono::seconds(3)); //休眠三秒\n\nstd::this_thread::sleep_for(std::chrono:: milliseconds (100)); //休眠100毫秒\n```\n\n由于在 duration 类内部做了操作符重载，因此时间间隔之间可以直接进行算术运算，比如我们要计算两个时间间隔的差值，就可以在代码中做如下处理：\n\n```c++\n#include <iostream>\n#include <chrono>\nusing namespace boost;\n\nint main()\n{\n    chrono::minutes t1(10);\n    chrono::seconds t2(60);\n    chrono::seconds t3 = t1 - t2;\n    cout << t3.count() << \" second\" << endl;\n    return 0;\n}\n```\n\n```c++\n540 second\n```\n\n在上面的测试程序中，t1 代表 10 分钟，t2 代表 60 秒，t3 是 t1 减去 t2，也就是 60*10-60=540，这个 540 表示的时钟周期，每个时钟周期是 1 秒，因此两个时间间隔之间的差值为 540 秒。\n\n注意事项：duration 的加减运算有一定的规则，当两个 duration 时钟周期不相同的时候，会先统一成一种时钟，然后再进行算术运算.\n\n因为类型表示的维度不一，粗粒度的时长肯定能用细粒度的类型表示，反之则可能丢失精度，所以需要使用`chrono::duration_cast()`函数做显式的转换。将当前的时钟周期转换为其它的时钟周期，比如我可以把秒的时钟周期转换为分钟的时钟周期，然后通过count来获取转换后的分钟时间间隔：\n\n```c++\ncout << chrono::duration_cast<chrono::minutes>( t3 ).count() <<” minutes”<< endl;\n\n将会输出:\n9 minutes\n```\n\n## **Time point**\n\ntime_point表示一个时间点，用来获取1970.1.1以来的秒数和当前的时间, 可以做一些时间的比较和算术运算，可以和ctime库结合起来显示时间。time_point必须要clock来计时，\n\ntime_point有一个函数`time_from_eproch()`用来获得1970年1月1日到time_point时间经过的duration。\n\n有一个`chrono::time_point_cast`转换函数，可以显式从高粒度向低粒度对time_point进行转换。\n\n下面的例子计算当前时间距离1970年1月1日有多少天：\n\n```c++\n#include <iostream>\n#include <ratio>\n#include <chrono>\n\nint main ()\n{\n  using namespace std::chrono;\n  typedef duration<int,std::ratio<60*60*24>> days_type;\n  time_point<system_clock,days_type> today = time_point_cast<days_type>(system_clock::now());\n  std::cout << today.time_since_epoch().count() << \" days since epoch\" << std::endl;\n\n  return 0;\n}\n```\n\ntime_point还支持一些算术元算，比如两个time_point的差值时钟周期数，还可以和duration相加减。下面的例子输出前一天和后一天的日期：\n\n```c++\n#include <iostream>\n#include <iomanip>\n#include <ctime>\n#include <chrono>\n\nint main()\n{\n    using namespace std::chrono;\n    system_clock::time_point now = system_clock::now();\n    std::time_t last = system_clock::to_time_t(now - std::chrono::hours(24));\n\n　　std::time_t next= system_clock::to_time_t(now - std::chrono::hours(24));\n\n    std::cout << \"One day ago, the time was \"<< std::put_time(std::localtime(&last), \"%F %T\") << '\\n';\n\n　　std::cout << \"Next day, the time was \"<< std::put_time(std::localtime(&next), \"%F %T\") << '\\n';\n\n}\n\n输出：\nOne day ago, the time was 2014-3-2622:38:27\nNext day, the time was 2014-3-2822:38:27\n```\n\n## **Clocks**\n\nclock是Chrono中的重要概念，而且这些clock都包含一个`now()`的成员函数，用于返回当前的time_point。Boost.Chrono包含的clock类型有：\n\n　　(1) `chrono::system_clock` 代表系统时间，比如电脑上显示的当前时间，其特点是这个时间可以被用户手动设置更新，所以这个时钟是可以和外部时钟源同步的。\n\n　　(2) `chrono::steady_clock` 其特点是时间是单调增长的，后一个时刻访问得到的时间点肯定比之前时刻得到的时间点要晚，即使我们手动将系统时间向前调整了也不会改变这个时钟稳步向前推行累计，其也被称为monotonic time，该时钟是均匀增长且不能被调整，其特性对于很多不允许时间错乱的系统是十分重要的。`chrono::steady_clock`通常是基于系统启动时间来计时的，而且常常用来进行耗时、等待等工作使用。**steady_clock可以获取稳定可靠的时间间隔，后一次调用now()的值和前一次的差值是不因为修改了系统时间而改变，它保证了稳定的时间间隔。它的用法和system用法一样。**\n\n　　(3) `chrono::high_resolution_clock `依赖于系统实现，通常是上面两种时钟的某个宏定义，取决于哪个时钟源更为的精确，所以其输出也决定于取决于上面哪个clock来实现的。\n\n　　(4) `chrono::process_real_cpu_clock `表示自进程启动以来使用的CPU时间，而这个数据也可以通过使用std::clock()来获得。`chrono::process_user_cpu_clock`、`boost::chrono::process_system_cpu_clock`表示自进程启动以来，在用户态、内核态所花费的时间，而所有的这些事件可以通过`chrono::process_cpu_clock`来获得，他返回上面所有时间组成的一个tuple结构。\n\n　　(5) `chrono::thread_clock` 返回基于线程统计的花费时间，而且不区分用户态、内核态的时间。\n\n在这些时钟类的内部有 time_point、duration、Rep、Period 等信息，基于这些信息来获取当前时间。\n\n可以通过now()来获取当前时间点：\n\n```c++\n#include <iostream>\n#include <chrono>\n\nint main()\n{\nstd::chrono::steady_clock::time_point t1 = std::chrono::system_clock::now();\n\nstd::cout << \"Hello World\\n\";\nstd::chrono::steady_clock::time_point t2 = std::chrono:: system_clock::now();\n\nstd::cout << (t2-t1).count()<<” tick count”<<endl;\n}\n\n输出：\nHello World\n20801tick count\n```\n\n通过时钟获取两个时间点之相差多少个时钟周期，我们可以通过duration_cast将其转换为其它时钟周期的duration：\n\n```c++\ncout << std::chrono::duration_cast<std::chrono::microseconds>( t2-t1 ).count() <<” microseconds”<< endl;\n\n输出：\n20 microseconds\n```\n\n还可以实现 `time_t` 和 `time_point` 之间的相互转换。\n\n```c++\n//system_clock的to_time_t方法可以将一个time_point转换为ctime：\nstd::time_t now_c = std::chrono::system_clock::to_time_t(time_point);\n//而from_time_t方法则是相反的，它将ctime转换为time_point。\n```\n\n```c++\n#include <chrono>\n#include <iostream>\nusing namespace std;\nusing namespace std::chrono;\nint main()\n{\n    // 新纪元1970.1.1时间\n    system_clock::time_point epoch;\n\n    duration<int, ratio<60 * 60 * 24>> day(1);\n    // 新纪元1970.1.1时间 + 1天\n    system_clock::time_point ppt(day);\n\n    using dday = duration<int, ratio<60 * 60 * 24>>;\n    // 新纪元1970.1.1时间 + 10天\n    time_point<system_clock, dday> t(dday(10));\n\n    // 系统当前时间\n    system_clock::time_point today = system_clock::now();\n\n    // 转换为time_t时间类型\n    time_t tm = system_clock::to_time_t(today);\n    cout << \"今天的日期是: \" << ctime(&tm);\n\n    time_t tm1 = system_clock::to_time_t(today + day);\n    cout << \"明天的日期是: \" << ctime(&tm1);\n\n    time_t tm2 = system_clock::to_time_t(epoch);\n    cout << \"新纪元时间: \" << ctime(&tm2);\n\n    time_t tm3 = system_clock::to_time_t(ppt);\n    cout << \"新纪元时间+1天: \" << ctime(&tm3);\n\n    time_t tm4 = system_clock::to_time_t(t);\n    cout << \"新纪元时间+10天: \" << ctime(&tm4);\n    return 0;\n}\n```\n\n```c++\n今天的日期是: Thu Apr 8 11:09:49 2021\n明天的日期是: Fri Apr 9 11:09:49 2021\n新纪元时间: Thu Jan 1 08:00:00 1970\n新纪元时间+1天: Fri Jan 2 08:00:00 1970\n新纪元时间+10天: Sun Jan 11 08:00:00 1970\n```\n\n### 参考链接\n\nhttps://blog.csdn.net/weixin_42907473/article/details/90278426\n\nhttps://www.cnblogs.com/Galesaur-wcy/p/15380832.html\n\nhttps://www.jb51.net/article/122979.htm"
  },
  {
    "path": "C++/C++下const增强.md",
    "content": "# C++下const增强\n\n### 全局const间接修改\n\n```c++\nconst int m_a = 100;\t//分配到常量区\nvoid fun()\n{\n\tint * p = (int *)&m_a;\n\t*p = 200;\n}\n```\n\n结论：编译成功，但是运行失败，修改失败\n\n###  局部const间接修改\n\n```c++\nvoid fun()\n{\n\tconst int m_b = 100;\t//分配到栈上\n\tint * p = (int *)&m_b;\n\t*p = 200; \n    cout << m_b << endl;\n}\n```\n\n结论：运行成功，修改失败\n\n### 原因分析：\n\n![c++const修饰的局部变量分配到符号表上](media/c++const%E4%BF%AE%E9%A5%B0%E7%9A%84%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F%E5%88%86%E9%85%8D%E5%88%B0%E7%AC%A6%E5%8F%B7%E8%A1%A8%E4%B8%8A.png)\n\n`因此c++ const可以称为常量`\n\n### 链接属性\n\nconst变量默认是内部链接属性，加extern可以提高作用域\n\n### 内存分配\n\n```c++\nvoid fun()\n{\n\tconst int m_b = 100;\t//分配到栈上\n\tint * p = (int *)&m_b;\n\t*p = 200; \n}\n```\n\n同上分配的临时内存\n\n```c++\nvoid fun()\n{\n\tint a = 10;\n\tconst int m_b = a;\t//分配到栈上\n\tint * p = (int *)&m_b;\n\t*p = 200; \n}\n```\n\n修改成功，因为分配了内存\n\n```c++\nstruct Person\n{\n\tstring m_Name;\n\tint m_Age;\n};\nvoid test03()\n{\n\tconst Person p;\n\t//p.m_Age = 10;      //直接修改失败\n\n\tPerson * pp = (Person *)&p;\n\t(*pp).m_Name = \"Tom\";\n\tpp->m_Age = 10;\n\n\tcout << \"姓名 \" << p.m_Name << \" 年龄\" << p.m_Age << endl;\n}\n```\n\n间接修改成功，分配了内存"
  },
  {
    "path": "C++/CMakeLists简易模板.md",
    "content": "# CMakeLists简易模板\n\n```cmake\ncmake_minimum_required(VERSION 2.8)\nPROJECT(ndt_mapping)\n\n#dboost\nadd_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)\n\nfind_package(OpenCV 4.5.2 QUIET)\nif(NOT OpenCV_FOUND)\n    find_package(OpenCV 2.4.3 QUIET)\n    if(NOT OpenCV_FOUND)\n        message(FATAL_ERROR \"OpenCV > 2.4.3 not found.\")\n    endif()\nendif()\n\nfind_package(Eigen3 3.1.0 REQUIRED NO_MODULE)\nfind_package(PCL REQUIRED)\n\ninclude_directories(\n        ${PROJECT_SOURCE_DIR}\n        ${PROJECT_SOURCE_DIR}/src\n        ${OpenCV_INCLUDE_DIRS}\n        #eigen库只包含头文件\n        #${EIGEN3_INCLUDE_DIR}\n        ${PCL_INCLUDE_DIRS}\n)\n\nadd_library(async_buffer SHARED\n        src/async_buffer.cc\n        src/async_buffer.h)\n\ntarget_link_libraries(async_buffer\n        ${OpenCV_LIBRARIES}\n        ${PCL_LIBRARIES}\n        #gflags可以直接链接\n        gflags)\n\nadd_executable(ndt_mapping src/ndt_mapping.cc)\ntarget_link_libraries(ndt_mapping async_buffer)\n\n#设置了CMake变量OpenCV_DIR为OpenCV库的配置文件所在路径，正是通过载入这个路径下的OpenCVConfig.cmake配置文件才能配置好OpenCV库，\n#然后在OpenCVConfig.cmake配置文件中定义了变量OpenCV_INCLUDE_DIRS为OpenCV库头文件包含路径，这样我们才能才在代码中\n#使用#include <opencv2/opencv.hpp>而不会出现编译错误，同时定义了变量OpenCV_LIBS为OpenCV链接库路径，这样我们才能正确链接到\n#OpenCV中的库文件，而不会出现类似未定义的引用这样的链接错误。\nmessage(STATUS \"OpenCV_DIR = ${OpenCV_DIR}\")\nmessage(STATUS \"OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}\")\nmessage(STATUS \"OpenCV_LIBS = ${OpenCV_LIBS}\")\nmessage(STATUS \"OpenCV_LIBRARIES = ${OpenCV_LIBRARIES}\")\n\nmessage(STATUS \"PCL_DIR = ${PCL_DIR}\")\nmessage(STATUS \"Gflags_DIR = ${Gflags_DIR}\")\n```"
  },
  {
    "path": "C++/CMakelists基础指令.md",
    "content": "# CMakelists基础指令 \n\n## （1）include_directories \n\n用于设置头文件的相对路径。全局路径默认是功能包所在目录，一般会放在功能包根目录下的include文件夹中，所以此处需要添加该文件夹。此外，该配置项还包含ROS catkin编译器默认包含的其他头文件路径${catkin_INCLUDE_DIRS}，比如ROS默认安装路径、Linux系统路径等。在本例中，所用的是ROS默认安装路径下的头文件。 \n\n##  （2）add_executable \n\n用于设置需要编译的代码和生成的可执行文件。第一个参数为期望生成的可执行文件的名称，后边的参数为参与编译的源码文件（cpp），如果需要多个代码文件，则可在后面依次列出，中间用空格进行分隔。 \n\n##  （3）target_link_libraries \n\n用于设置链接库。很多功能需要使用系统或者第三方的库函数，通过该选项可以配置 执行文件链接的库文件，第一个参数是可执行文件的名称，后面依次列出需要链接的库。此处编译没有使用其他库，添加默认链接库${catkin_LIBRARIES}即可。 \n\n##  （4）add_dependencies \n\n用于设置依赖。在很多应用中，我们需要定义语言无关的消息类型，消息类型会在编译过程中产生相应语言的代码，如果编译的可执行文件依赖这些动态生成的代码，则需要使用add_dependencies添加${PROJECT_NAME}_generate_messages_cpp 配置，即该功能包动态产生的消息代码。该编译规则也可以添加其他需要依赖的功能包。 "
  },
  {
    "path": "C++/EigenGeometry.md",
    "content": "# EigenGeometry \n\n```c++\n#include<iostream> \n#include<cmath> \n\nusing namespace std; \n\n#include<Eigen/Core> \n#include<Eigen/Geometry> \n\nusing namespace Eigen; \n\n//本程序演示了Eigen几何模块的使用方法 \nint main(intargc,char**argv){ \n    //Eigen/Geometry模块提供了各种旋转和平移的表示 \n    //3D旋转矩阵直接使用Matrix3d或Matrix3f \n    Matrix3drotation_matrix=Matrix3d::Identity();//单位矩阵 \n\n    //旋转向量使用AngleAxis,它底层不直接是Matrix，但运算可以当作矩阵（因为重载了运算符） \n    AngleAxisdrotation_vector(M_PI/4,Vector3d(0,0,1));//沿Z轴旋转45度 \n\n    cout.precision(3); \n    cout<<\"rotationmatrix=\\n\"<<rotation_vector.matrix()<<endl;//用matrix()转换成矩阵 \n\n    //也可以直接赋值 \n    rotation_matrix=rotation_vector.toRotationMatrix(); \n\n    //用AngleAxis可以进行坐标变换 \n    Vector3dv(1,0,0); \n    Vector3dv_rotated=rotation_vector*v; \n    cout<<\"(1,0,0)afterrotation(byangleaxis)=\"<<v_rotated.transpose()<<endl; \n\n    //或者用旋转矩阵 \n    v_rotated=rotation_matrix*v; \n    cout<<\"(1,0,0)afterrotation(bymatrix)=\"<<v_rotated.transpose()<<endl; \n\n    //欧拉角:可以将旋转矩阵直接转换成欧拉角 \n    Vector3deuler_angles=rotation_matrix.eulerAngles(2,1,0);//ZYX顺序，即yaw-pitch-roll顺序 \n    cout<<\"yawpitchroll=\"<<euler_angles.transpose()<<endl; \n    \n    //欧氏变换矩阵使用Eigen::Isometry \n    Isometry3dT=Isometry3d::Identity();//虽然称为3d，实质上是4＊4的矩阵 \n    T.rotate(rotation_vector);//按照rotation_vector进行旋转 \n    T.pretranslate(Vector3d(1,3,4));//把平移向量设成(1,3,4) \n    cout<<\"Transformmatrix=\\n\"<<T.matrix()<<endl; \n\n    //用变换矩阵进行坐标变换 \n    Vector3dv_transformed=T*v;//相当于R*v+t \n    cout<<\"vtranformed=\"<<v_transformed.transpose()<<endl; \n\n    //对于仿射和射影变换，使用Eigen::Affine3d和Eigen::Projective3d即可，略 \n    ##都是调用了有参构造函数 \n    //四元数 \n    //可以直接把AngleAxis赋值给四元数，反之亦然 \n    Quaterniondq=Quaterniond(rotation_vector); \n    cout<<\"quaternionfromrotationvector=\"<<q.coeffs().transpose()<<endl;//请注意coeffs的顺序是(x,y,z,w),w为实部，前三者为虚部 \n\n    //也可以把旋转矩阵赋给它 \n    q=Quaterniond(rotation_matrix); \n    cout<<\"quaternionfromrotationmatrix=\"<<q.coeffs().transpose()<<endl; \n\n    //使用四元数旋转一个向量，使用重载的乘法即可 \n    v_rotated=q*v;//注意数学上是qvq^{-1} \n    cout<<\"(1,0,0)afterrotation=\"<<v_rotated.transpose()<<endl; \n\n    //用常规向量乘法表示，则应该如下计算 \n    cout<<\"shouldbeequalto\"<<(q*Quaterniond(0,1,0,0)*q.inverse()).coeffs().transpose()<<endl; \n\n    return0; \n\n} \n```\n\n"
  },
  {
    "path": "C++/Eigen几何模块的引入.md",
    "content": "# Eigen几何模块的引入 \n\n## 1、在CMakeLists文件中添加 \n\n```\ninclude_directories(\"/usr/include/eigen3\") \n```\n\n## 2、在main.cpp中添加 \n\n```\n#include <cmath>             //c++的标准数学函数库，不是Eigen中的，但一般要用到 \n#include <Eigen/Core> \n#include <Eigen/Geometry> \nusing namespace Eigen; \n```\n\n## 二、Eigen几何模块的使用 \n\n### 1、定义 \n\n#### 1）三维空间坐标定义 \n\n```\nVector3d v(1,0,0); \n//使用三维纵向量Vector3d定义 \n```\n\n#### 2）旋转矩阵定义 \n\n```\nMatrix3d rotation_matrix = Matrix3d::Identity(); \n//使用Matrix3d或者Matrix3f定义，Matrix3d::Identity()是三阶单位阵\n```\n\n#### 3）旋转向量定义 \n\n```\nAngleAxisd rotation_vector(M_PI / 4,Vector3d(0,0,1)); \n//沿Z轴旋转45度 \n//使用AngleAxisd定义，AngleAxisd（旋转角度，旋转轴单位向量Vector3d） \n//AngleAxisd的底层不直接是Matrix，但由于重载了运算符，因此仍可以当做矩阵运算\n```\n\n注意：AngleAxisd不能用cout输出，以该定义为例，要用rotation_vector.matrix()转换成矩阵形式才能输出，但转换后不再是旋转向量形式，而是3x3的旋转矩阵形式。 \n\n**注意：使用AngleAxisd定义旋转向量时候，C++中M_PI的精度是二十位，并不是真正数学意义上的π \\piπ,因此在计算过程中会引入误差。例子如下：** \n\n```\nAngleAxisd angle_vector = AngleAxisd(M_PI/2,Vector3d(0, 0, 1)); \ncout << angle_vector.matrix() << endl; \n```\n\n数学理论上所出来的angle_vector对应的矩阵应该为： \n\n[0 -1 0] \n\n[1 0 0] \n\n[0 0 1] \n\n但程序输出为： \n\n6.12323e-17 -1 0 \n\n1 6.12323e-17 0 \n\n0 0 1 \n\n将程序中精度由d改成f后，程序输出为： \n\n-4.37114e-08 -1 0 \n\n1 -4.37114e-08 0 \n\n0 0 1 \n\n其中，本应该矩阵中应该为0的元素出现了一个极小值，而且该极小值会随着精度的变化而变化，不过目前发现的影响只有对0元素的影响，这个极小值可以看成0. \n\n#### 4）欧拉角定义 \n\n```\nVector3d eulerangles(0,0,0); \n//使用三维纵向量Vector3d定义\n```\n\n#### 5）欧氏变换矩阵定义 \n\n```\nIsometry3d T = Isometry3d::Identity(); \n//使用Isometry3d定义，虽然叫3d，但实际上是4x4矩阵 \n//Isometry3d::Identity()是将欧氏矩阵初始化为单位矩阵 \nIsometry3d T(q); \n//使用四元数初始化欧氏变换矩阵 \n```\n\n注意：欧氏变换矩阵不能直接用cout输出，以该定义为例，要使用 \n\nT.matrix()转换为矩阵形式输出，转换后仍为4x4的欧氏变换矩阵 \n\n#### 6）四元数定义 \n\n```\nQuaterniond q(Vector4d(1,2,3,4)); \n//使用Vector4d定义，定义格式为（x,y,z,w) \nQuaterniond q((1,2,3,4)); \n//直接赋值，定义格式为(w,x,y,z) \n```\n\n注意：该定义方法下，Vector中四个元素对应关系为（x,y,z,w)，即最后以为才是四元数的实部 \n\n注意：四元数不能直接用cout输出，以该定义为例，输出格式为 \n\n```\ncout << q.coeffs() << endl;  //输出格式为（x,y,z,w)\n```\n\n注意：四元数在使用前要进行归一化，这样由四元数转化出来的旋转矩阵才满足正交性。归一化方法为： \n\n```\nq.normalize(); \n```\n\n### 2、各种变换表达形式之间的转换 \n\n#### 1）旋转向量与旋转矩阵之间的变换 \n\n显示转换 \n\n```\nrotation_matrix = rotation_vector.toRotationMatrix(); \n或 \nrotation_matrix = rotation_vector.matrix(); \n```\n\n注意：此处也存在M_PI引入的误差问题，详讲1-3）旋转向量定义。 \n\n隐式转换（直接赋值） \n\n```\nrotation_matrix = rotation_vector; \nrotation_vector = rotation_matrix; \n```\n\n#### 2）旋转矩阵与欧拉角的变换 \n\n```\neulerangles = rotation_matrix.eulerAngles(2,1,0); \n//参数（2.1.0）表示这是ZYX顺序，即roll pitch yaw \n```\n\n#### 3）欧氏变换矩阵按照旋转向量或旋转矩阵旋转 \n\n```\nT.rotate(rotation_matrix);   //在原来T的基础上按照旋转矩阵进行旋转，然后返回T。就是讲旋转矩阵的变换整合到T中 \nT.rotate(rotation_vector);   //按照旋转向量进行旋转\n```\n\n#### 4）欧氏变换矩阵平移 \n\n```\nT.pretranslate(Vector3d(1,3,4));   //按照向量Vector3d(1,3,4)平移\n```\n\n#### 5）四元数与旋转向量旋转矩阵之间的转换 \n\n显式转换 \n\n```\n q = Quaterniond(rotation_vector)\n q = Quaterniond(rotation_matrix)\n```\n\n隐式转换 \n\n```\nrotation_vector = q\nrotation_matrix = q\nq = rotation_matrix\nq = rotation_vector\n```\n\n### 3、坐标变换 \n\n```\nVector3d v(1,0,0); //定义初始坐标v \nVector3d v_rotated； //定义坐标转换后坐标v_rotated\n```\n\n#### 1）使用旋转矩阵 \n\n```\nv_rotated = rotation_matrix * v \n```\n\n#### 2）使用旋转向量 \n\n```\nv_rotated = rotation_vector * v \n```\n\n#### 3）使用变换矩阵 \n\n```\nVector3d v_tranformed = T * v\n```\n\n#### 4）使用四元数 \n\n```\nv_rotated = q*v\n```\n\n"
  },
  {
    "path": "C++/Find_package.md",
    "content": "# Find_package \n\n## **1、find_packakge命令基本介绍** \n\n> ​\t\t在我们实际开发过程中，经常不可避免会使用到第三方开源库，这些开源库可能是通过apt-get install命令自动安装到系统目录中，也可能是由我们自己下载库的源码然后通过编译安装到指令目录下的。\n>\n> ​\t\t不管哪种方式安装的库文件，如果我们需要自己的项目中使用这些库，首先面临的第一个问题就是如何找到这些库。所谓“找到”这些库，其实是根据我们的需要找到指定版本的库头文件包含路径、链接库路径等，从而能够满足我们开发项目的编译链接需要。\n>\n> ​\t\t在没有CMake的时代，这种库查找链接的工作都需要借助MakeFile中的各种命令来完成，非常的繁琐，而且不方便移植，到了CMake时代，CMake给我们提供了find_package()命令用来查找依赖包，理想情况下，一句find_package()命令就能把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到，后续只管用就好了。但实际使用过程可能会出现这样那样的问题，因此需要我们对find_package这个强大的命令有个大概的理解。 \n\n## **2、一个使用find_package命令的例子** \n\n为了能够帮助大家理解find_package命令的用法，此处首先用OpenCV库举例子，示范如何通过find_pakcage命令找到OpenCV库并配置，从而能够在我们自己的项目中调用OpenCV库，实现特定的功能。 \n\n**opencv_test.cpp:** \n\n```\n#include <cstdio> \n#include <iostream> \n#include <opencv2/opencv.hpp> \n\nusing namespace cv; \n\nint main() { \n  Mat image; \n  image = imread(\"../opencv_test.jpg\"); \n \n  if (!image.data) { \n    printf(\"No image data\\n\"); \n    return -1; \n  } \n\n  namedWindow(\"Display Image\", CV_WINDOW_AUTOSIZE); \n  imshow(\"Display Image\", image); \n  waitKey(0); \n  return 0; \n} \n```\n\n**CMakeLists.txt:** \n\n```\ncmake_minimum_required(VERSION 2.8) \nproject(find_package_learning) \nfind_package(OpenCV 3 REQUIRED) \n\n \nmessage(STATUS \"OpenCV_DIR = ${OpenCV_DIR}\") \nmessage(STATUS \"OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}\") \nmessage(STATUS \"OpenCV_LIBS = ${OpenCV_LIBS}\") \n\n \ninclude_directories(${OPENCV_INCLUDE_DIRS})   \nadd_executable(opencv_test opencv_test.cpp)   \ntarget_link_libraries(opencv_test ${OpenCV_LIBS}) \n```\n\n### **2.1**编译输出与分析\n\n```\n-- The C compiler identification is GNU 7.5.0 \n-- The CXX compiler identification is GNU 7.5.0 \n-- Check for working C compiler: /usr/bin/cc \n-- Check for working C compiler: /usr/bin/cc -- works \n-- Detecting C compiler ABI info \n-- Detecting C compiler ABI info - done \n-- Detecting C compile features \n-- Detecting C compile features - done \n-- Check for working CXX compiler: /usr/bin/c++ \n-- Check for working CXX compiler: /usr/bin/c++ -- works \n-- Detecting CXX compiler ABI info \n-- Detecting CXX compiler ABI info - done \n-- Detecting CXX compile features \n-- Detecting CXX compile features - done \n-- Found OpenCV: /usr/local (found suitable version \"3.4.4\", minimum required is \"3\")  \n-- OpenCV_DIR = /usr/local/share/OpenCV \n-- OpenCV_INCLUDE_DIRS = /usr/local/include;/usr/local/include/opencv \n-- OpenCV_LIBS = opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_viz;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_cvv;opencv_datasets;opencv_dnn_objdetect;opencv_dpm;opencv_face;opencv_freetype;opencv_fuzzy;opencv_hdf;opencv_hfs;opencv_img_hash;opencv_line_descriptor;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_reg;opencv_rgbd;opencv_saliency;opencv_stereo;opencv_structured_light;opencv_surface_matching;opencv_text;opencv_tracking;opencv_xfeatures2d;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto \n-- Configuring done \n-- Generating done \n-- Build files have been written to: /home/zhanghm/Programming/programming-learning-examples/cmake_learning/learn_cmake_easily/find_package_learning/build \n```\n\n重点看下其中OpenCV_DIR、OpenCV_INCLUDE_DIRS和OpenCV_LIBS打印的结果，这是我在CMakeLists.txt中用message命令输出这三个变量的值的结果。 \n\n可以看到在执行find_package(OpenCV 3 REQUIRED)命令后，CMake找到了我们安装的位于/usr/local下的OpenCV库，并设置了CMake变量OpenCV_DIR为OpenCV库的配置文件所在路径，正是通过载入这个路径下的OpenCVConfig.cmake配置文件才能配置好OpenCV库，然后在OpenCVConfig.cmake配置文件中定义了变量OpenCV_INCLUDE_DIRS为OpenCV库头文件包含路径，这样我们才能才在代码中使用#include <opencv2/opencv.hpp>而不会出现编译错误，同时定义了变量OpenCV_LIBS为OpenCV链接库路径，这样我们才能正确链接到OpenCV中的库文件，而不会出现类似未定义的引用这样的链接错误。 \n\n![](media/GetImage.png)\n\n通过这个例子就可以看出find_package本质上就是一个搜包的命令，通过一些特定的规则找到<package_name>Config.cmake包配置文件，通过执行该配置文件，从而定义了一系列的变量，通过这些变量就可以准确定位到OpenCV库的头文件和库文件，完成编译。 \n\n那么关键的问题来了，find_package命令是怎么能够定位并载入指定库的配置文件的呢？这就需要梳理一下find_package命令的搜包过程。 \n\n## **3、find_package命令搜包过程** \n\n首先我们需要明确一点，CMake本身不提供任何搜索库的便捷方法，所有搜索库并给变量赋值的操作必须由CMake代码完成，也就是上述中的XXXConfig.cmake以及下面将要提到的FindXXX.cmake配置文件。只不过，库的作者通常会提供这两个文件，以方便使用者调用。\n\n### **3.1 find_package工作模式** \n\nfind_package命令有两种工作模式，这两种工作模式的不同决定了其搜包路径的不同： \n\n`Module模式` \n\nfind_package命令基础工作模式(Basic Signature)，也是默认工作模式。 \n\n`Config模式` \n\nfind_package命令高级工作模式(Full Signature)。 只有在find_package()中指定CONFIG、NO_MODULE等关键字，或者Module模式查找失败后才会进入到Config模式。 \n\n因此find_package工作模式流程图为： \n\n![](media/GetImage(1).png)\n\n### **3.2 Module模式用法** \n\n**Module**模式的参数为：\n\n```\nfind_package(<package> [version] [EXACT] [QUIET] [MODULE] \n             [REQUIRED] [[COMPONENTS] [components...]] \n             [OPTIONAL_COMPONENTS components...] \n             [NO_POLICY_SCOPE]) \n```\n\n参数解释： \n\n`package`：必填参数。需要查找的包名，注意大小写。 \n\n`version`和`EXACT`：可选参数，version指定的是版本，如果指定就必须检查找到的包的版本是否和version兼容。如果指定EXACT则表示必须完全匹配的版本而不是兼容版本就可以。 \n\n`QUIET`：可选参数，表示如果查找失败，不会在屏幕进行输出（但是如果指定了REQUIRED字段，则QUIET无效，仍然会输出查找失败提示语）。 \n\n`MODULE`：可选字段。前面提到说“如果Module模式查找失败则回退到Config模式进行查找”，但是假如加入了MODULE选项，那么就只在Module模式查找，如果Module模式下查找失败并不切换到Config模式查找。 \n\n`REQUIRED`：可选字段。表示一定要找到包，找不到的话就立即停掉整个CMake。而如果不指定REQUIRED则CMake会继续执行。 \n\n`COMPONENTS`，components：可选字段，表示查找的包中必须要找到的组件(components），如果有任何一个找不到就算失败，类似于REQUIRED，导致CMake停止执行。 \n\n**Module模式查找顺序** \n\nModule模式下是要查找到名为Find<PackageName>.cmake的配置文件。 \n\nModule模式只有两个查找路径：`CMAKE_MODULE_PATH`和`CMake安装路径下的Modules目录`， \n\n搜包路径依次为： \n\n```\nCMAKE_MODULE_PATH \nCMAKE_ROOT\n```\n\n先在CMAKE_MODULE_PATH变量对应的路径中查找。如果路径为空，或者路径中查找失败，则在CMake安装目录（即CMAKE_ROOT变量）下的Modules目录下（通常为/usr/share/cmake-3.10/Modules，3.10是我的CMake版本）查找。这两个变量可以在CMakeLists.txt文件中打印查看具体内容： \n\n```\nmessage(STATUS \"CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}\") \nmessage(STATUS \"CMAKE_ROOT = ${CMAKE_ROOT}\") \n```\n\n其中**CMAKE_MODULE_PATH**默认为空，可以利用set命令赋值。 \n\n在安装CMake时，CMake为我们提供了很多开发库的FindXXX.cmake模块文件，可以通过命令查询： \n\n```\ncmake --help-module-list | grep -E ^Find \n```\n\n### 3.3 Config模式用法 \n\nConfig模式的完整命令参数为： \n\n```\nfind_package(<package> [version] [EXACT] [QUIET] \n             [REQUIRED] [[COMPONENTS] [components...]] \n             [CONFIG|NO_MODULE] \n             [NO_POLICY_SCOPE] \n             [NAMES name1 [name2 ...]] \n             [CONFIGS config1 [config2 ...]] \n             [HINTS path1 [path2 ... ]] \n             [PATHS path1 [path2 ... ]] \n             [PATH_SUFFIXES suffix1 [suffix2 ...]] \n             [NO_DEFAULT_PATH] \n             [NO_CMAKE_ENVIRONMENT_PATH] \n             [NO_CMAKE_PATH] \n             [NO_SYSTEM_ENVIRONMENT_PATH] \n             [NO_CMAKE_PACKAGE_REGISTRY] \n             [NO_CMAKE_BUILDS_PATH] # Deprecated; does nothing. \n             [NO_CMAKE_SYSTEM_PATH] \n             [NO_CMAKE_SYSTEM_PACKAGE_REGISTRY] \n             [CMAKE_FIND_ROOT_PATH_BOTH | \n              ONLY_CMAKE_FIND_ROOT_PATH | \n              NO_CMAKE_FIND_ROOT_PATH]) \n```\n\n相比于Module模式，Config模式的参数更多，也更复杂，但实际在使用过程中我们并不会用到所有参数，大部分参数都是可选的，我们只需要掌握基本的参数用法即可。 \n\n其中具体查找库并给XXX_INCLUDE_DIRS和XXX_LIBRARIES两个变量赋值的操作由XXXConfig.cmake模块完成。 \n\n两种模式看起来似乎差不多，不过CMake默认采取Module模式，如果Module模式未找到库，才会采取Config模式。如果XXX_DIR路径下找不到XXXConfig.cmake文件，则会找/usr/local/lib/cmake/XXX/中的XXXConfig.cmake文件。总之，Config模式是一个备选策略。通常，库安装时会拷贝一份XXXConfig.cmake到系统目录中，因此在没有显式指定搜索路径时也可以顺利找到。 \n\n#### Config模式查找顺序 \n\nConfig模式下是要查找名为<PackageName>Config.cmake或<lower-case-package-name>-config.cmake的模块文件。  \n\n搜包路径依次为： \n\n与Module模式不同，Config模式需要查找的路径非常多，也要匹配很多的可能性，因此有些路径是首先作为根目录，然后进行子目录的匹配，我会进行说明。  \n\n具体查找顺序为： \n\n1、名为<PackageName>_DIR的CMake变量或环境变量路径 \n\n默认为空。 \n\n这个路径是非根目录路径，需要指定到<PackageName>Config.cmake或<lower-case-package-name>-config.cmake文件所在目录才能找到。 \n\n2、名为CMAKE_PREFIX_PATH、CMAKE_FRAMEWORK_PATH、CMAKE_APPBUNDLE_PATH的CMake变量或环境变量路径 \n\n根目录，默认都为空。 \n\n注意如果你电脑中安装了ROS并配置好之后，你在终端执行echo $CMAKE_PREFIX_PATH会发现ROS会将CMAKE_PREFIX_PATH这个变量设置为ROS中的库的路径，意思是会首先查找ROS安装的库，如果恰好你在ROS中安装了OpenCV库，就会发现首先找到的是ROS中的OpenCV，而不是你自己安装到系统中的OpenCV。 \n\n3、PATH环境变量路径 \n\n根目录，默认为系统环境PATH环境变量值。 \n\n其实这个路径才是Config模式大部分情况下能够查找到安装到系统中各种库的原因。 \n\n这个路径的查找规则为： \n\n遍历PATH环境变量中的各路径，如果该路径如果以bin或sbin结尾，则自动回退到上一级目录得到根目录。例如我的PATH路径包括： \n\n```\n$ echo $PATH \n/home/zhanghm/.local/bin:/usr/local/cuda-10.1/bin:/opt/ros/melodic/bin:/home/zhanghm/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin\n```\n\n在上述指明的是根目录路径时，CMake会首先检查这些根目录路径下是否有名为<PackageName>Config.cmake或<lower-case-package-name>-config.cmake的模块文件，如果没有，CMake会继续检查或匹配这些根目录下的以下路径（<PackageName>_DIR路径不是根目录路径）： \n\n```\n<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/ \n<prefix>/(lib/<arch>|lib|share)/<name>*/  \n<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/\n```\n\n其中为系统架构名，如Ubuntu下一般为：/usr/lib/x86_64-linux-gnu，整个(lib/<arch>|lib|share)为可选路径，例如OpenCV库而言会检查或匹配<prefix>/OpenCV/、<prefix>/lib/x86_64-linux-gnu/OpenCV/、<prefix>/lib/share/OpenCV/、<prefix>/share/OpenCV/等路径；name为包名，不区分大小写<name>*意思是包名后接一些版本后等字符也是合法的，如pcl-1.9也会被找到。\n\n### **3.4 查找指定包建议** \n\n上面的查找规则整体看起来好像很复杂，但其实我们在安装库的时候都会自动配置安装到对的位置，一般都不会出现问题。如果我们需要指定特定的库，我们也只需要设置优先级最高的几个变量名即可。包括下面两种情况： \n\n1、如果你明确知道想要查找的库<PackageName>Config.cmake或<lower-case-package-name>-config.cmake文件所在路径，为了能够准确定位到这个包，可以直接设置变量<PackageName>_DIR为具体路径，如： \n\n```\nset(OpenCV_DIR \"/home/zhanghm/Softwares/enviroment_config/opencv3_4_4/opencv/build\") \n```\n\n就可以明确需要查找的OpenCV包的路径了。 \n\n2、如果你有多个包的配置文件需要查找，可以将这些配置文件都统一放在一个命名为cmake的文件夹下，然后设置变量CMAKE_PREFIX_PATH变量指向这个cmake文件夹路径，需要注意根据上述的匹配规则，此时每个包的配置文件需要单独放置在命名为包名的文件夹下（文件夹名不区分大小写），否则会提示找不到。 \n\n## **4、总结** \n\n通过前面的描述，我相信大家已经能够基本掌握find_package命令的各种用法了，也能够在出现各种问题时自己进行问题定位。但还有一个我们需要注意的点是我们能够在自己的项目中使用find_package命令便捷进行依赖包配置的前提是这个包的开发者也是用CMake配置好了这个包，并提供了<PackageName>Config.cmake或Find<PackageName>.cmake的配置文件。 \n\n## **参考** \n\nhttps://blog.csdn.net/zhanghm1995/article/details/105466372 \n\nhttps://cmake.org/cmake/help/v3.5/command/find_package.html （官网介绍） \n\nhttps://zhuanlan.zhihu.com/p/50829542 \n\nhttps://seanzhengw.github.io/blog/cmake/2018/04/23/cmake-find-package.html \n\nhttps://blog.csdn.net/bytxl/article/details/50637277 "
  },
  {
    "path": "C++/GoogleTest.md",
    "content": "# GoogleTest\n\n## GoogleTest运行特定的测试用例\n\n通常GoogleTest的单元测试，直接执行，就全跑一遍，很耗时，有时候需要只测试某个case。\n\n先列出所有case：\n\n```\nD:\\my_workspace\\build\\Debug>hello_test.exe --gtest_list_tests\nRunning main() from D:\\my_workspace\\build\\_deps\\googletest-src\\googletest\\src\\gtest_main.cc\nHelloTest.\n  MyTest\n  MyTest2\nFactorialTest.\n  Negative\n  Zero\n  Positive\nIsPrimeTest.\n  Negative\n  Trivial\n```\n\n然后执行特定case：\n\n```\nhello_test.exe --gtest_filter=\"HelloTest*\"\n```\n\n或者：\n\n```\nhello_test.exe --gtest_filter=\"HelloTest.MyTest2\"\n```\n\n如果你的测试程序加这些后缀无效，可能是你的main函数写错了，把main函数删除，GoogleTest默认有main函数的，可以编译过。"
  },
  {
    "path": "C++/Opencv_Mat.md",
    "content": "# Opencv Mat\n\n\n\n## **Mat_\\<\\>()**\n\n```\nMat k = (Mat_<double>(3,3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);\n```\n\n\n\n## **Mat.at\\<\\>()**\n\n```\nk.at<double>(0,0) = 1;\n```\n\n\n\n## **Mat::eye**\n\n返回一个恒等指定大小和类型矩阵。\n\n```\nC++: static MatExpr Mat::eye(int rows, int cols, inttype)\n\nC++: static MatExpr Mat::eye(Size size, int type)\n```\n\n**参数**\n\n**rows** –的行数。\n\n**cols**– 的列数。\n\n**size** –替代矩阵大小规格Size(cols, rows)的方法。\n\n**type** – 创建的矩阵的类型。\n\n该方法返回 Matlab 式恒等矩阵初始值设定项，类似 Mat::zeros()和 Mat::ones()，你可以用缩放操作高效地创建缩放的恒等矩阵：\n\n/ / 创建4 x 4 的对角矩阵并在对角线上以0.1的比率缩小。\n\n```\nMat A = Mat::eye(4, 4, CV_32F) * 0.1;\n```\n\n\n\n## **Mat::create**\n\n分配新的阵列数据 （如果需要）。\n\n```\nC++: void Mat::create(int rows, int cols, int type)\n\nC++: void Mat::create(Size size, int type)\n\nC++: void Mat::create(int ndims, const int\\* sizes, inttype)\n```\n\n**参数**\n\n**ndims** – 新数组的维数。\n\n**rows** –新的行数。\n\n**cols** – 新的列数。\n\n**size** – 替代新矩阵大小规格：Size(cols, rows)。\n\n**sizes** – 指定一个新的阵列形状的整数数组。\n\n**type** – 新矩阵的类型。\n\n这是关键的Mat方法之一。大多数新样式 OpenCV 函数和产生阵列的方法每个输出数组都调用这个方法。此方法使用如下算法：\n\n1.如果当前数组形状和类型匹配新的请立即返回。否则，通过调用 Mat::release()取消引用以前的数据。\n\n2.初始化新矩阵头。\n\n3.分配新的 total()\\*elemSize() 个字节的数据空间。\n\n4.分配新的关联数据的引用计数并将其设置为 1。\n"
  },
  {
    "path": "C++/Protocol_Buffers基本使用.md",
    "content": "# Protocol Buffers基本使用\n\n> - Protocol Buffer 和 XML、JSON一样都是结构数据序列化的工具，但它们的数据格式有比较大的区别：\n>   - 首先，Protocol Buffer 序列化之后得到的数据不是可读的字符串，而是二进制流\n>   - 其次，XML 和 JSON 格式的数据信息都包含在了序列化之后的数据中，不需要任何其它信息就能还原序列化之后的数据；但使用 Protocol Buffer 需要事先定义数据的格式(.proto 协议文件)，还原一个序列化之后的数据需要使用到这个定义好的数据格式\n>   - 最后，在传输数据量较大的需求场景下，Protocol Buffer 比 XML、JSON 更小（3到10倍）、更快（20到100倍）、使用 & 维护更简单；而且 Protocol Buffer 可以跨平台、跨语音使用\n> - Protobuf 安装：\n>   - 安装 protobuf： apt-get install protobuf-compiler\n>   - 安装 protobuf 的 python 模块：pip3 install protobuf==3.13.0\n>   - 源码方式安装：可参考 Protobuf 安装及使用 && https://github.com/protocolbuffers/protobuf/blob/main/src/README.md\n> - Protobuf 版本查看：\n>   - protoc --version\n>   - import google.protobuf as gp, gp.__version__\n\n## Protocol Buffer 的作用\n\n- 通过将结构化的数据（拥有多种属性）进行序列化，从而实现（内存与硬盘之间）数据存储和交换的功能\n  - 序列化： 按照 `.proto` 协议文件将`数据结构或对象`转换成`二进制流`的过程\n  - 反序列化：将在序列化过程中所生成的`二进制流`转换成`数据结构或对象`的过程\n\n![Protocol Buffer 特点](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS1hOWIzZmMyZWQxNmY2MWU1LnBuZw.png)\n\n## Protocol Buffer 语法\n\n![](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS01NjYzNTk5ZTg0MzNmNWI4LnBuZw.png)\n\n### 关注1：包名\n\n```protobuf\npackage protocobuff_Demo;\n// 关注1：包名\n```\n\n- 作用：防止不同 .proto 项目间命名 发生冲突\n\n- Protocol buffer包的解析过程如下：\n\n  1. Protocol buffer 的类型名称解析与 C++ 一致：从 最内部 开始查找，依次向外进行每个包会被看作是其父类包的内部类\n  2. Protocol buffer 编译器会解析 .proto文件中定义的所有类型名\n  3. 生成器会根据 不同语言 生成 对应语言 的代码文件\n\n  > a. 即对 不同语言 使用了 不同的规则 进行处理\n  >\n  > b. Protoco Buffer提供 C++、Java、Python 三种语言的 API\n\n### 关注2：Option选项\n\n```protobuf\noption java_package = \"com.carson.proto\";\noption java_outer_classname = \"Demo\";\n// 关注2：option选项\n```\n\n- 作用：影响 特定环境下 的处理方式\n\n- 常用Option选项如下：\n\n  ```protobuf\n  option java_package = \"com.carson.proto\";\n  // 定义：Java包名\n  // 作用：指定生成的类应该放在什么Java包名下\n  // 注：如不显式指定，默认包名为：按照应用名称倒序方式进行排序\n  \n  option java_outer_classname = \"Demo\";\n  // 定义：类名\n  // 作用：生成对应.java 文件的类名（不能跟下面message的类名相同）\n  // 注：如不显式指定，则默认为把.proto文件名转换为首字母大写来生成\n  // 如.proto文件名=\"my_proto.proto\"，默认情况下，将使用 \"MyProto\" 做为类名\n  \n  option optimize_for = ***;\n  // 作用：影响 C++  & java 代码的生成\n  // ***参数如下：\n  // 1. SPEED (默认):：protocol buffer编译器将通过在消息类型上执行序列化、语法分析及其他通用的操作。（最优方式）\n  // 2. CODE_SIZE:：编译器将会产生最少量的类，通过共享或基于反射的代码来实现序列化、语法分析及各种其它操作。\n    // 特点：采用该方式产生的代码将比SPEED要少很多， 但是效率较低；\n    // 使用场景：常用在 包含大量.proto文件 但 不追求效率 的应用中。\n  //3.  LITE_RUNTIME:：编译器依赖于运行时 核心类库 来生成代码（即采用libprotobuf-lite 替代libprotobuf）。\n    // 特点：这种核心类库要比全类库小得多（忽略了 一些描述符及反射 ）；编译器采用该模式产生的方法实现与SPEED模式不相上下，产生的类通过实现 MessageLite接口，但它仅仅是Messager接口的一个子集。\n    // 应用场景：移动手机平台应用\n  \n  option cc_generic_services = false;\n  option java_generic_services = false;\n  option py_generic_services = false;\n  // 作用：定义在C++、java、python中，protocol buffer编译器是否应该 基于服务定义 产生 抽象服务代码（2.3.0版本前该值默认 = true）\n  // 自2.3.0版本以来，官方认为通过提供 代码生成器插件 来对 RPC实现 更可取，而不是依赖于“抽象”服务\n  \n  optional repeated int32 samples = 4 [packed=true];\n  // 如果该选项在一个整型基本类型上被设置为真，则采用更紧凑的编码方式（不会对数值造成损失）\n  // 在2.3.0版本前，解析器将会忽略 非期望的包装值。因此，它不可能在 不破坏现有框架的兼容性上 而 改变压缩格式。\n  // 在2.3.0之后，这种改变将是安全的，解析器能够接受上述两种格式。\n  \n  optional int32 old_field = 6 [deprecated=true];\n  // 作用：判断该字段是否已经被弃用\n  // 作用同 在java中的注解@Deprecated\n  ```\n\n### 关注3：消息模型\n\n- 作用：真正用于描述 数据结构\n\n```protobuf\n// 消息对象用message修饰\nmessage Person {\n\n  required string name = 1;\n  required int32 id = 2;\n  optional string email = 3;\n\n  enum PhoneType {\n    MOBILE = 0;\n    HOME = 1;\n    WORK = 2;\n  }\n\n  message PhoneNumber {\n    optional PhoneType type = 2 [default = HOME];\n  }\n\n  repeated PhoneNumber phone = 4;\n}\n\nmessage AddressBook {\n  repeated Person person = 1;\n}\n```\n\n- 组成：在ProtocolBuffers中：\n  1. 一个 `.proto` 消息模型 = 一个 `.proto`文件 = 消息对象 + 字段\n  2. 一个消息对象（`Message`） = 一个 结构化数据\n  3. 消息对象（`Message`）里的 字段 = 结构化数据 里的成员变量\n\n![](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS0wM2ViZDRkZjlkZTVkNTU1LnBuZw.png)\n\n下面会详细介绍 `.proto` 消息模型里的 消息对象 & 字段\n\n![](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS03ZGJhY2Q4N2Y0NDlkYmI4LnBuZw.png)\n\n#### 1. 消息对象\n\n在 `ProtocolBuffers` 中：\n\n- 一个消息对象（`Message`） = 一个 结构化数据\n- 消息对象用 修饰符 `message` 修饰\n- 消息对象 含有 字段：消息对象（`Message`）里的 字段 = 结构化数据 里的成员变量\n\n![](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS0wM2ViZDRkZjlkZTVkNTU1LnBuZw.png)\n\n![](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS1iNDg4YzYyMDk0NTE2ZTBjLnBuZw.png)\n\n##### a. 添加：在一个 .proto文件 中可定义多个 消息对象\n\n- 应用场景：尽可能将与 某一消息类型 对应的响应消息格式 定义到相同的 `.proto`文件 中\n- 实例：\n\n```protobuf\nmessage SearchRequest {\n\n  required string query = 1;\n  optional int32 page_number = 2;\n  optional int32 result_per_page = 3;\n\n}\n\n// 与SearchRequest消息类型 对应的 响应消息类型SearchResponse\nmessage SearchResponse {\n …\n}\n```\n\n##### b. 一个消息对象 里 可以定义 另外一个消息对象（即嵌套）\n\n```\nmessage Person {\n  required string name = 1;\n  required int32 id = 2;\n  optional string email = 3;\n\n// 该消息类型 定义在 Person消息类型的内部\n// 即Person消息类型 是 PhoneNumber消息类型的父消息类型\n  message PhoneNumber {\n    required string number = 1;\n  }\n}\n\n<-- 多重嵌套 -->\nmessage Outer {   // Level 0\n  message MiddleAA {  // Level 1\n    message Inner {   // Level 2\n      required int64 ival = 1;\n      optional bool  booly = 2;\n    }\n  }\n}\n```\n\n#### 2. 字段\n\n- 消息对象的字段 组成主要是：**字段 = 字段修饰符 + 字段类型 +字段名 +标识号**\n\n![](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS03ZGI3ZTczMjExYjRjODliLnBuZw.png)\n\n##### **a. 字段修饰符**\n\n- 作用：设置该字段解析时的规则\n\n- 具体类型如下：\n\n  ![](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS1iZjE3MjU0NTIwOWI4N2UxLnBuZw.png)\n\n**b. 字段类型**\n字段类型主要有 三 类：\n\n- 基本数据 类型\n- 枚举 类型\n- 消息对象 类型\n\n```protobuf\nmessage Person {\n\n  // 基本数据类型 字段\n  required string name = 1;\n  required int32 id = 2;\n  optional string email = 3;\n\n  enum PhoneType {\n    MOBILE = 0;\n    HOME = 1;\n    WORK = 2;\n  }\n\n  message PhoneNumber {\n    optional PhoneType type = 2 [default = HOME];\n    // 枚举类型 字段\n  }\n\n  repeated PhoneNumber phone = 4;\n  // 消息类型 字段\n}\n```\n\n###### 1.基本数据类型\n\n| .proto中的类型 | 注意                                                         | C++中类型 | java中类型 |\n| -------------- | ------------------------------------------------------------ | --------- | ---------- |\n| double         |                                                              | double    | double     |\n| float          |                                                              | float     | float      |\n| int32          | 自动调整编码长度，如果需要保存负数，请使用sint32             | int32     | int        |\n| int64          | 自动调整编码长度，如果需要保存负数，请使用sint64             | int64     | long       |\n| uint32         | 自动调整编码长度                                             | uint32    | int        |\n| uint64         | 自动调整编码长度                                             | uint64    | long       |\n| sint32         | 自动调整编码长度，表示有符号数，负数的编码效率高于int32      | int32     | int        |\n| sint64         | 自动调整编码长度，表示有符号数，负数的编码效率高于int64      | int64     | long       |\n| fixed32        | 固定使用4bytes编码，在编码大数(228228)的时候比uint32更有效率 | int32     | int        |\n| fixed32        | 固定使用8bytes编码，在编码大数(256256)的时候比uint64更有效率 | int42     | long       |\n| sfixed32       | 固定使用4bytes编码                                           | int32     | int        |\n| sfixed64       | 固定使用8bytes编码                                           | int64     | long       |\n| bool           |                                                              | bool      | boolean    |\n| string         | string只能包含UTF-8和7-bit ASCII文本                         | string    | String     |\n| bytes          | 包含任意长度的bytes                                          | string    | ByteString |\n\n###### 2. 枚举类型\n\n- 作用：为字段指定一个 可能取值的字段集合\n\n> 该字段只能从 该指定的字段集合里 取值\n\n- 说明：如下面例子，电话号码 可能是手机号、家庭电话号或工作电话号的其中一个，那么就将`PhoneType`定义为枚举类型，并将加入电话的集合（ `MOBILE`、 `HOME`、`WORK`）\n\n```protobuf\n// 枚举类型需要先定义才能进行使用\n\n// 枚举类型 定义\n enum PhoneType {\n    MOBILE = 0;\n    HOME = 1;\n    WORK = 2;\n// 电话类型字段 只能从 这个集合里 取值\n  }\n\n// 特别注意：\n// 1. 枚举类型的定义可在一个消息对象的内部或外部\n// 2. 都可以在 同一.proto文件 中的任何消息对象里使用\n// 3. 当枚举类型是在一消息内部定义，希望在 另一个消息中 使用时，需要采用MessageType.EnumType的语法格式\n\n  message PhoneNumber {\n    required string number = 1;\n    optional PhoneType type = 2 [default = HOME];\n    // 使用枚举类型的字段（设置了默认值）\n  }\n\n// 特别注意：\n// 1.  枚举常量必须在32位整型值的范围内\n// 2. 不推荐在enum中使用负数：因为enum值是使用可变编码方式的，对负数不够高\n```\n\n###### 3. 消息对象 类型\n\n一个消息对象 可以将 其他消息对象类型 用作字段类型，情况如下：\n\n![](media/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk0NDM2NS04Nzc5YmMwOWE1M2ViNDBjLnBuZw.png)\n\n- **使用 内部消息类型**\n\n  - 先在 消息类型 中定义 其他消息类型 ，然后再使用\n\n  ```protobuf\n  message Person {\n    required string name = 1;\n    required int32 id = 2;\n    optional string email = 3;\n  \n  // 该消息类型 定义在 Person消息类型的内部\n  // 即Person消息类型 是 PhoneNumber消息类型的父消息类型\n    message PhoneNumber {\n      required string number = 1;\n    }\n  \n    repeated PhoneNumber phone = 4;\n    // 直接使用内部消息类型\n  }\n  ```\n\n- **使用** **外部消息类型**\n\n  - 即外部重用，需要 用作字段类型的消息类型 定义在 该消息类型外部\n\n  ```protobuf\n  message Person {\n    required string name = 1;\n    required int32 id = 2;\n    optional string email = 3;\n  }\n  \n  message AddressBook {\n    repeated Person person = 1;\n    // 直接使用了 Person消息类型作为消息字段\n  }\n  ```\n\n- **使用** **外部消息的内部消息类型**\n\n  ```protobuf\n  message Person {\n    required string name = 1;\n    required int32 id = 2;\n    optional string email = 3;\n  \n  // PhoneNumber消息类型 是 Person消息类型的内部消息类型\n    message PhoneNumber {\n      required string number = 1;\n      optional PhoneType type = 2 [default = HOME];\n    }\n  }\n  \n  // 若父消息类型外部的消息类型需要重用该内部消息类型\n  // 需要以 Parent.Type 的形式去使用\n  // Parent = 需要使用消息类型的父消息类型，Type = 需要使用的消息类型\n  \n  // PhoneNumber父消息类型Person 的外部 OtherMessage消息类型 需要使用 PhoneNumber消息类型\n  message OtherMessage {\n    optional Person.PhoneNumber phonenumber = 1;\n  // 以 Parent.Type = Person.PhoneNumber  的形式去使用\n  \n  }\n  ```\n\n- **使用不同** .**proto** **文件里的消息类型**\n\n  - 目的：需要在 `A.proto`文件 使用 `B.proto`文件里的消息类型\n\n  - 解决方案：在 `A.proto`文件 通过导入（ `import`） `B.proto`文件中来使用 `B.proto`文件 里的消息类型\n\n    ```protobuf\n    import \"myproject/other_protos.proto\"\n    // 在A.proto 文件中添加 B.proto文件路径的导入声明\n    // ProtocolBuffer编译器 会在 该目录中 查找需要被导入的 .proto文件\n    // 如果不提供参数，编译器就在 其调用的目录下 查找\n    ```\n\n    "
  },
  {
    "path": "C++/ROS指令.md",
    "content": "# ROS指令\n\n## ROS Shell命令\n\n| 命令               | 功能                                                |\n| ------------------ | --------------------------------------------------- |\n| roscd              | 移动到指定的ROS软件包目录                           |\n| rosls              | 显示ROS软件包的文件与目录                           |\n| rosed              | 编辑ROS软件包的文件                                 |\n| roscp              | 复制ROS软件包的文件                                 |\n| rospd              | 添加目录至ROS目录索引                               |\n| rosd               | 显示ROS目录索引中的目录                             |\n| roscd [功能包名称] | 使用它，无需再使用cd一层层到查找，进入功能包里      |\n| rosls [功能包名称] | 等价与roscd+ls。查看ROS功能包的文件列表更方便，快捷 |\n| rosed [功能包名称] | 用于编辑功能包中的特定文件，优点也是快捷，修改容易  |\n\n## ROS执行命令\n\n| 命令                                  | 功能                                                         |\n| ------------------------------------- | ------------------------------------------------------------ |\n| roscore                               | 开启Master(ROS名称服务)                                      |\n| rosrun                                | 运行单个节点                                                 |\n| roslaunch                             | 运行多个节点及设置运行选项                                   |\n| rosclean                              | 检查或删除ROS日志文件                                        |\n| roscore [选项]。                      | 运行主节点，主节点管理节点之间的消息通信中的连接信息。关于主节点的具体作用就不累述了 |\n| rosrun [功能包名称] [节点名称]。      | 执行指定的功能包中的一个节点的命令(rosrun rqt_graph rqt_graph 可查看当前系统的运行情况) |\n| roslaunch [功能包名称] [launch文件名] | 类似dat批命令，是运行指定功能包中一个或设置执行选项的命令    |\n| rosclean [选项]                       | 运行roscore时，对所有节点的记录都会写入日志文件，随着时间的推移，需要定期使用rosclean命令删除这些记录 |\n\n## ROS信息命令 \n\n| 命令       | 功能                    |\n| ---------- | ----------------------- |\n| rostopic   | 查看ROS话题信息         |\n| rosservice | 查看ROS服务信息         |\n| rosnode    | 查看ROS节点信息         |\n| rosparam   | 确认和修改ROS参数信息   |\n| rosbag     | 记录和回放ROS消息       |\n| rosmsg     | 显示ROS消息类型         |\n| rossrv     | 显示ROS服务类型         |\n| rosversion | 显示ROS功能包的版本信息 |\n| roswtf     | 检查ROS系统             |\n\n### **rostopic [选项]** \n\nlist - 列出活动话题 \n\necho [话题名称] - 实时显示指定话题的消息内容 \n\nfind [类型名称] - 显示使用指定类型的消息的话题 \n\ntype [话题名称] - 显示指定话题的消息类型 \n\nbw [话题名称] - 显示指定话题的消息类型 \n\nhz [话题名称] - 显示指定话题的消息数据发布周期 \n\ninfo [话题名称] - 显示指定话题的消息 \n\npub [话题名称] [消息类型] [参数] - 用指定的话题名称发布消息，许多时候另开一个终端操作 例：rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]”[0.0, 0.0, 0.0]’ \n\n\n\n### **rosservice [选项]** \n\nlist - 显示活动的服务信息 \n\ninfo [服务名称] - 显示指定服务的信息 \n\ntype [服务名称] - 显示服务类型 \n\nfind [服务类型] - 查找指定服务类型的服务 \n\nuri [服务名称] - 显示ROSRPC URI服务 \n\nargs [服务名称] - 显示服务参数 \n\ncall [服务名称] [参数] - 用输入的参数请求服务，通常用于测试服务 \n\n \n\n### **rosnode [选项]** \n\nlist - 查看活动的节点列表 \n\nping [节点名称] - 与指定的节点进行连接测试 \n\ninfo [节点名称] - 查看指定节点的信息 \n\nmachine [PC名称或IP] - 查看该PC中运行的节点列表 \n\nkill [节点名称] - 停止指定节点的运行 \n\ncleanup - 删除失连节点的注册信息 \n\n\n\n### **rosparam [参数]** \n\nlist - 查看参数列表 \n\nget [参数名称] - 获取参数值 \n\nset [参数名称] - 设置参数值 \n\ndump [文件名称] - 将参数保存到指定文件 \n\nload [文件名称] - 获取保存在指定文件中的参数，经常使用。 \n\ndelete [参数名称] - 删除参数 \n\n \n\n### **rosmsg [参数]** \n\nlist - 显示所有消息 \n\nshow [消息名称] - 显示指定消息 \n\nmd5 [消息名称] - 显示md5sum \n\npackage [功能包名称] - 显示用于指定功能包的所有消息 \n\npackages - 显示使用消息的所有功能包 \n\n \n\n### **rossrv [参数]** \n\nlist -显示所以服务 \n\nshow [服务名称] - 显示指定的服务信息 \n\nmd5 [服务名称] - 显示md5sum \n\npackage [功能包名称] - 显示指定的功能包中用到的所有服务 \n\npackages - 显示使用服务的所有功能包 \n\n \n\n### rosbag [参数] \n\nrecord [选项] [话题名称] - 将指定话题的消息记录到bag文件 \n\ninfo [文件名称] - 查看bag文件的信息 \n\nplay [文件名称] - 回放指定的bag文件，这个使用玩的也多。 \n\ncompress [文件名称] - 压缩指定的bag文件 \n\ndecompress [文件名称] - 解压指定的bag文件 \n\nfilter [输入文件] [输出文件] [选项] - 生成一个删除了指定内容的新的bag文件 \n\nreindex bag [文件名称] - 刷新索引 \n\ncheck bag [文件名称] - 检查指定的bag文件是否能在当前系统中回放 \n\nfix [输入文件] [输出文件] [选项] - 将由于版本不同而无法回放的bag文件修改可以回放的文件 \n\n## ROS catkin命令\n\ncatkin_create_pkg - 自动生成功能包（示例命令：catkin_create_pkg [功能包名称] [依赖性功能包1] [依赖性功能包2]….）。 \n\ncatkin_make - 基于catkin构建系统的构建 （示例：catkin_make –pkg [包名] 只构建一部分功能包）。 \n\ncatkin_eclipse - 对于用catkin构建系统生成的功能包进行修改，使其能在Eclipse环境中使用。 \n\ncatkin_prepare_release - 在发布时用到的日志整理和版本标记。 \n\ncatkin_generate_changelog - 在发布时生成或更新CHANGLOG.rst文件。 \n\ncatkin_init_workspace - 初始化catkin构建统的工作目录。 \n\ncatkin_find - 搜素catkin，找到并显示工作空间。 \n\n## ROS功能包命令 \n\nrospack [选项] [功能包名称] - 查看与ROS功能包相关的信息(可以使用find, list, depend-on, depends和profile等选项)。 \n\nrosinstall - 安装ROS附加功能包。 \n\nrosdep [选项] - 安装该功能包的依赖性文件（check, install, init, update）。 \n\nroslocate [选项] [功能包名称] - ROS功能包信息相关命令（可用的选项是info, vcs, type, uri和repo等）。 \n\n## 常用的一些指令\n\n| 指令                                  |        含义        |\n| :------------------------------------ | :----------------: |\n| rosrun map_server map_saver           | rviz保存生成的地图 |\n| rosrun map_server map_server map.yaml | rviz加载生成的地图 |\n| rostopic echo <topic> --noarr         |  详细显示话题信息  |\n\n"
  },
  {
    "path": "C++/STL容器使用时机.md",
    "content": "# STL容器使用时机\n\n|              | vector   | deque    | list     | set    | multiset | map             | multimap      |\n|--------------|----------|----------|----------|--------|----------|-----------------|---------------|\n| 典型内存结构 | 单端数组 | 双端数组 | 双向链表 | 二叉树 | 二叉树   | 二叉树          | 二叉树        |\n| 可随机存取   | 是       | 是       | 否       | 否     | 否       | 对key而言：不是 | 否            |\n| 元素搜寻速度 | 慢       | 慢       | 非常慢   | 快     | 快       | 对key而言：快   | 对key而言：快 |\n| 元素安插移除 | 尾端     | 头尾两端 | 任何位置 | -      | -        | -               | -             |\n\n## vector的使用场景：\n\n比如软件历史操作记录的存储，我们经常要查看历史记录，比如上一次的记录，上上次的记录，但却不会去删除记录，因为记录是事实的描述。\n\n\n\n## deque的使用场景：\n\n比如排队购票系统，对排队者的存储可以采用deque，支持头端的快速移除，尾端的快速添加。如果采用vector，则头端移除时，会移动大量的数据，速度慢。\n\n\n\n## vector与deque的比较：\n\n1. vector.at()比deque.at()效率高，比如vector.at(0)是固定的，deque的开始位置 却是不固定的。\n2. 如果有大量释放操作的话，vector花的时间更少，这跟二者的内部实现有关。\n3. deque支持头部的快速插入与快速移除，这是deque的优点。\n\n\n\n## list的使用场景：\n\n比如公交车乘客的存储，随时可能有乘客下车，支持频繁的不确实位置元素的移除插入。\n\n\n\n## set的使用场景：\n\n比如对手机游戏的个人得分记录的存储，存储要求从高分到低分的顺序排列。\n\n\n\n## map的使用场景：\n\n比如按ID号存储十万个用户，想要快速要通过ID查找对应的用户。二叉树的查找效率，这时就体现出来了。如果是vector容器，最坏的情况下可能要遍历完整个容器才能找到该用户。"
  },
  {
    "path": "C++/boostcondition_variable.md",
    "content": "# boost::condition_variable\n\nboost::condition 和 boost::condition_variable 都是 Boost 库中用于实现条件变量的类。条件变量是一种同步原语，通常用于实现等待/通知机制，以便在多线程环境中协调线程之间的操作。\n\nboost::condition 是较早的类，而 boost::condition_variable 是较新的类，并被视为 boost::condition 的超集。下面是它们之间的主要区别：\n\n使用方式：boost::condition 通常与 boost::mutex 或其他互斥量类型一起使用，用于保护共享数据的访问。它提供了 wait(), wait_for(), wait_until() 等方法来等待条件满足。\n\n\n```\nboost::mutex mtx;  \nboost::condition cond;  \nbool ready = false;  \n  \n// 生产者线程  \nvoid producer() {  \n    // 做一些工作...  \n    mtx.lock();  \n    ready = true;  \n    cond.notify_one(); // 通知等待的线程  \n    mtx.unlock();  \n}  \n  \n// 消费者线程  \nvoid consumer() {  \n    mtx.lock();  \n    while (!ready) { // 等待条件满足  \n        cond.wait(mtx);  \n    }  \n    // 做一些工作...  \n    mtx.unlock();  \n}\n```\n\n如果需要使用超时等待，可以使用 `wait_for` 方法：\n\n```\n#include <iostream>\n#include <thread>\n#include <mutex>\n#include <boost/thread.hpp>\n#include <boost/chrono.hpp>\n\nboost::mutex mtx;\nboost::condition_variable cv;\nbool ready = false;\n\nvoid print_id(int id) {\n    boost::unique_lock<boost::mutex> lck(mtx);\n    while (!ready) {\n        if(cv.wait_for(lck, boost::chrono::seconds(1)) == boost::cv_status::timeout) {\n            std::cout << \"Thread \" << id << \" timed out.\\n\";\n            return;\n        }\n    }\n    // 唤醒后，继续执行\n    std::cout << \"Thread \" << id << '\\n';\n}\n\nvoid go() {\n    boost::unique_lock<boost::mutex> lck(mtx);\n    ready = true;\n    cv.notify_all();\n}\n\nint main() {\n    boost::thread threads[10];\n    // 创建10个线程\n    for (int i = 0; i < 10; ++i) {\n        threads[i] = boost::thread(print_id, i);\n    }\n\n    std::cout << \"10 threads ready to race...\\n\";\n    boost::this_thread::sleep_for(boost::chrono::seconds(2));\n    go(); // 唤醒所有线程\n\n    // 等待所有线程完成\n    for (auto& th : threads) {\n        th.join();\n    }\n\n    return 0;\n}\n```\n\n在这个示例中，`wait_for` 方法在每次等待时都设置一个1秒的超时时间。如果线程在1秒内没有被唤醒，它将输出一个超时信息并返回。这对于需要超时控制的场景非常有用。\n\n相比之下，boost::condition_variable 也与 boost::mutex 或其他互斥量类型一起使用，但提供了更现代的接口和更多的功能。它提供了与 std::condition_variable 类似的接口，包括 wait(), wait_for(), wait_until() 等方法。\n\n接口：boost::condition_variable 具有更现代的接口，并提供了更多的功能，例如 notify_all() 方法，用于通知所有等待的线程。此外，它还支持在通知之前设置一个谓词（即一个返回布尔值的函数），以便只有在谓词为真时才通知等待的线程。这提供了更大的灵活性。\n性能：boost::condition_variable 在某些实现中可能比 boost::condition 具有更好的性能。这主要是因为它使用了更现代的同步原语和更优化的内部逻辑。\n可移植性：由于 boost::condition_variable 是较新的类，它与更多的编译器和平台兼容性更好。然而，这可能会因具体的 Boost 版本和平台而异。\n总的来说，如果您正在使用较新的 Boost 版本并且想要使用更现代的条件变量接口，那么 boost::condition_variable 是一个更好的选择。如果您正在使用较旧的 Boost 版本或者需要与特定的编译器和平台兼容，那么 boost::condition 可能是一个更合适的选择。\n"
  },
  {
    "path": "C++/c++_boost_circular_buffer.md",
    "content": "# c++ boost circular_buffer\n\n## 一、概述\n\nBoost.Circular_buffer维护了一块连续内存块作为缓存区，当缓存区内的数据存满时，继续存入数据就覆盖掉旧的数据。\n它是一个与STL兼容的容器，类似于 std::list或std::deque,并且支持随机存取。circular_buffer 被特别设计为提供固定容量的存储大小。当其容量被用完时，新插入的元素会覆盖缓冲区头部或尾部(取决于使用何种插入操作)的元素。逻辑存储结构如图\n\n![这里写图片描述](media/20170322112825204)\n\ncircular_buffer为了效率考虑，使用了连续内存块保存元素\n\n1. 使用固定内存，没有隐式或者非期望的内存分配\n2. 快速在circular_buffer头或者尾部插入，删除元素，并且是常量时间复杂度\n3. 常量时间访问元素\n4. 适合实时和对性能要求苛刻的应用\n\n## 二、代码\n\n头文件：\n\n```\n#include <boost/circular_buffer.hpp> \n```\n\n示例：\n\n```c++\n#include <boost/circular_buffer.hpp>\n#include <numeric>\n#include <assert.h>\n\nint main(int /*argc*/, char* /*argv*/[])\n{\n    // 创建一个容量为3的循环缓冲区\n    boost::circular_buffer<int> cb(3);\n\n    // 插入一些元素到循环缓冲区\n    cb.push_back(1);\n    cb.push_back(2);\n\n    // 断言\n    assert(cb[0] == 1);\n    assert(cb[1] == 2);\n    assert(!cb.full());\n    assert(cb.size() == 2);\n    assert(cb.capacity() == 3);\n\n    // 再插入其它元素\n    cb.push_back(3);\n    cb.push_back(4);\n\n    // 求和\n    int sum = std::accumulate(cb.begin(), cb.end(), 0);\n\n    // 断言\n    assert(cb[0] == 2);\n    assert(cb[1] == 3);\n    assert(cb[2] == 4);\n    assert(*cb.begin() == 2);\n    assert(cb.front() == 2);\n    assert(cb.back() == 4);\n    assert(sum == 9);\n    assert(cb.full());\n    assert(cb.size() == 3);\n    assert(cb.capacity() == 3);\n\n    return 0;\n}c++\n```\n\n## 三、分析过程\n\n从使用上看，它和普通的STL容器没什么两样。circular_buffer在执行本例代码过程状态如下：\n\n```c\n// 创建一个容量为3的循环缓冲区 \n boost::circular_buffer cb(3);\n```\n\n这时里面是没有数据的:\ncb.size() == 0;\ncb.capacity()==3;\ncb.empty()==true;\ncb.full()==false;\n![这里写图片描述](media/20170322113142191)\n\n// 插入一些元素到循环缓冲区\ncb.push_back(1);\ncb.size() == 1;\ncb.capacity()==3;\ncb.empty()==false;\ncb.full()==false;\n\n![这里写图片描述](media/20170322113220859)\n\ncb.push_back(2);\ncb.size() == 2;\ncb.capacity()==3;\ncb.empty()==false;\ncb.full()==false;\n\n![这里写图片描述](media/20170322113301504)\n\n// 再插入其它元素\ncb.push_back(3);\ncb.size() == 3;\ncb.capacity()==3;\ncb.empty()==false;\ncb.full()==true;\n\n![这里写图片描述](media/20170322113321860)\n\ncb.push_back(4);\ncb.size() == 3;\ncb.capacity()==3;\ncb.empty()==false;\ncb.full()==true;\n因为已到容量上限，所以数据4覆盖了旧数据1，并且begin()和end()都向前移一格。所以这时：\ncb[0]==2;\ncb[1]==3;\ncb[2]==4;\n\n![这里写图片描述](media/20170322113338489)\n\n我们也可以把它设想为一个定长的队列，当在队列满的情况下再向队尾放入数据时，就把队首“挤”出队列，反之亦然。\n\n## 四、示例\n\n```c++\n#include<iostream>\nusing namespace std;\n#include<boost/circular_buffer.hpp>\nusing namespace  boost;\n\nint main()\n{\n    // 定义并初始化一个循环缓冲区\n    circular_buffer<int>  cb(3);//容量为3\n    \n\tcout << cb.capacity() << endl; // 3\n    cout << cb.size() << endl;  // 0\n    cb.push_back(1);//从尾部插入\n    cb.push_back(2);//\n    cb.push_back(3);//容量已满\n    cout << cb.capacity() << endl; // 3\n    cout << cb.size() << endl; // 3\n\n    //cb.push_front(1);//从头插入\n    //cb.push_front(2);//\n    //cb.push_front(3);//容量已满\n\n    for (int i = 0; i < cb.size(); ++i) \tcout << cb[i] << \"   \";\n    cout << endl;\n\n\n    //容量已满，尾部插入，踢出头部元素\n    cb.push_back(4);\n    for (int i = 0; i < cb.size(); ++i) \tcout << cb[i] << \"   \";\n    cout << endl;\n\n    //容量已满，头部插入，踢出尾部元素\n    cb.push_front(5);\n    for (int i = 0; i < cb.size(); ++i) \tcout << cb[i] << \"   \";\n    cout << endl;\n\n    cb.pop_back();//删除尾部的元素\n    for (int i = 0; i < cb.size(); ++i) \tcout << cb[i] << \"   \";\n    cout << endl;\n\n    cb.pop_front();//删除头部的元素\n    for (int i = 0; i < cb.size(); ++i) \tcout << cb[i] << \"   \";\n    cout << endl;\n\n    return 0;\n}\n```\n\n## 五、可能适用的场景\n\n1. 可存储最新接收到的samples，当更新的samples到来，覆写最老的元素\n2. 可用作底层容器实现固定大小buffer\n3. 可作为一种cache，保存一定数量的最新插入的元素\n4. 高效的固定大小先进先出队列\n5. 高效的后进先去队列，当队列满时，移除最老的元素（也就是第一个插入的元素）"
  },
  {
    "path": "C++/c++并发与多线程.md",
    "content": "# c++并发与多线程\n\n显示转换在主线程中构造，没有问题，隐式转换在子线程中构造，会出现问题\n\n![/ / 二 ： 互 斥 量 的 用 氵 去  / / （ 2 ． 1) lock() ， unlock()  / / 步 驶 ： 先 1 。 ck() ， 操 作 共 享 据 ， unlock() ：  / 过 。 ck() 和 un ck() 要 成 对 使 用 ， 有 1 。 ck() 必 然 要 有 unl 。 Ck ， 每 调 用 一 次 1 。 ck() ， 必 然 应 该 调 用 一 次 unl 。 Ck 的  ： / 环 应 该 也 不 允 许 调 用 1 次 1 。 ck() 去 卩 调 用 了 2 次 unl 。 Ck 的 也 不 允 许 调 用 2 次 c 轻 卩 调 用 眩 unl 。 ck(), 这 些 菲 对 称 却 量 调 月  / / 有 1 。 Ck ， 忘 记 unl 。 Ck 的 问 题 ， 非 常 睢 排 查 3  / / 为 了 防 止 大 家 忘 记 unl 。 Ck 的 引 入 了 一 个 叫 std ： nock-guard 的 类模栀 ： 你 忘 记 。 Ck 不 要 我 苗 你 unl 。 ck() ，  / / 学 习 过 智 能 指 针 (unique-ptr\\<\\>) ： 你 忘 记 霹 放 内 存 不 要 我 给 你 释 放 3 保 姆 3 ](media/4c410326f68b9c901ae092e6d1bee594.png)\n\n\n\n## std::lock_guard（）\n\nstd::lock_guard\\<std::mutex\\> sbguard(my_mutex);\n\n自动帮你进行lock and unlock\n\n\n\n## std::lock()\n\nstd::lock(my_mutex1,my_mutex2)            #手动unlock\n\n一次性锁住两个或者两个以上的互斥量，至少两个。如果互斥量中有一个没锁住，它就在那里等着，等所有互斥量都锁住，他才能往下走；要么互斥量都锁住，要么两个互斥量都没有锁住。\n\n![std: : lock (my_mutexl, my_mutex2) : lock ( ) :  std: : sbguardl (my_mutexl, std: : adopt_lock) :  std: : :mutex\\> sbguard2 (my_mutex2, std: : adopt \\_ lock) ](media/7186eb58ef60fc61dc55f573da016c01.png)\n\n![4) std: : lock_guardfistd: : adopt \\_  // std: : adopt\\_  std: : lock ard\\<std:  mutex.@i  T ock ](media/b80e022befbbb1f86356f354c265237d.png)\n\n这样也不需要手动unlock（）\n\n\n\n## unique_lock()\n\n![： unique—lockÅR 代 lock—guard  / / un 三 que 一 1 。 Ck 罡 个 类 栀 ， 工 作 中 ， \\*lock-guard （ 推 荐 使 用 ） lock—guard4R 代 了 mutex 的 lock() 和 unlock() ：  //unique-lock 比 lock-guard\\*\\$äffl\\$ 效 粼 上 差 一 点 ， 内 存 占 用 多 一 点 。  ： unique—lockfi% 二 个  / 过 。 Ck 一 guard 可 以 带 第 二 个 孬 数 ： ](media/c48e58454fc351e9fe69d2891a001cae.png)\n\n![彐  //adopt-lock 标 记 作 用 3  /std: :lock_guard\\<std: :mutex 〉 sbguardl (my_mutexl ， std: :adopt_lock):  / / （ 2 ． 0 std: •.adopt-lock ： 表 示 这 个 互 斥 量 已 经 裰 Ck 了 （ 你 必 须 要 把 互 斥 量 提 前 1 。 Ck 了 ， 否 则 会 报 异 常 ）  //std: ： ad 。 pt 过 ock 标 记 的 效 果 就 罡 “ 假 调 用 方 线 程 已 经 拥 有 了 互 斥 的 所 有 椤 （ 已 经 ck() 成 功 了 ）  / / 通 知 1 。 Ck 一 guar 环 需 要 在 构 造 函 中 1 。 Ck 这 个 互 斥 量 了  //unique-lock 也 可 以 ästd: :adopt-lock 标 记 ， 含 义 相 同 ， 就 罡 不 希 望 再 unique 过 。 ck() 的 构 造 函 中 1 。 Ck 这 个 。  / / 用 这 个 ad 。 pt 一 1 。 Ck 前 提 罡 ， 你 需 要 自 己 先 把 “ 先 1 。 Ck 上 3  / / （ 2 ． 2 ） std: :try_to_lock  / / 我 们 会 雲 试 用 的 1 。 ck() 去 锁 定 这 个 ， 但 如 果 没 有 锁 定 成 功 ， 我 也 会 立 即 返 回 ， 不 会 咀 塞 在 那 里  / / 用 这 个 try 一 t 。 一 1 。 Ck 的 前 提 罡 你 自 己 不 能 先 去 1 。 Ck 。  / / （ 2 ． 3 ） std: :defer_lock  / / 用 这 个 defer 一 1 。 Ck 的 前 提 罡 你 不 能 自 己 先 Ck ， 否 则 会 报 异 常 。  //defer-lock 的 意思 就 是 没 有 给 皿 ut 加 锁 ： 初 始 化 了 一 个 没 有 加 锁 的 ex 。  defer lock 、  —unique lock ](media/e3b2ae52a820296728e9a11336313dcd.png)\n\n![： unique-lock 的 成员函颛  / / （ 3 ． 0 lock(), 加 锁  / / （ 3 ． 2 冫 unlock() ， 解 锁 ；  / / （ 3 ． 3 ） try_lock() ， 當 试 结 互 斥 量 加 锁 ， 如 果 蓽 不 到 锁 ， 则 返 回 fa 这 e ， 如 果 蓽 到 了 锁 ， 返 回 true ， 这 个 函 不 咀 塞 的 3  / / （ 3 ， 4 ） release(), 返 回 它 所 管 理 的 对 源 指 针 ， 放 所 有 权 也 就 罡 说 ， 这 个 不 再 有 关 孚 。  / 俨 格 区 分 。 ck() 和 release() 的 区 别 ， 不 要 后 。  / / 如 果 ， 原 来 匚 对 象 处 于 加 锁 状 态 ， 你 有 责 任 接 管 过 来 员 责 解 锁 。 ()e leaseifi 回 的 是 ， 原 始 mute 黑 t 的 指 针 ）  / / 为 什 之 有 时 候 需 要 unlock() ： 因 为 你 1 。 Ck 锁 住 的 代 码 越 少 ， 执 行 越 快 ， 整 个 程 序 运 行 效 率 越 高  07 有 人 也 把 锁 头 锁 住 的 代 码 多 少 称 为 锁 的 粒 廛 ， 粒 廛 一 船 用 粗 細 来 描 述  / / a ） 锁 住 的 代 码 少 ， 这 个 粒 度 叫 细 。 执 行 、 率 高  / / b ） 锁 住 的 代 码 多 ， 粒 度 叫 粗 ， 那 执 行 0 就 低  / / 要 学 会 尽 量 选 择 合 适 粒 度 的 代 码 进 行 保 护 ， 粒 度 太 细 ， 可 能 漏 掉 共 享 据 的 保 护 0 立 廛 太 粗 ， 影 响 效 率 。  / / 选 擇 合 适 的 粒 度 ， 罡 高 程 序 员 的 能 力 和 实 力 的 忭 现 3 ](media/f1a009c02af2e121f29b74a8c7899747.png)\n\n\n"
  },
  {
    "path": "C++/cin与get()getline()输入问题.md",
    "content": "\n\n# cin与get（）getline（）输入问题\n\n\n\ngetline和get这两个函数都读取一行输入直到到达换行符，然而不同的是getline丢弃换行符，而get将换行符保留在输入流中。\n\n```c++\n#include <string> \n#include <iostream>\nusing namespace std;\n \nint main() {\nchar a;\nint b;\nfloat c;\nstring str;\ncin>>a>>b>>c>>str;\ncout<<a<<\" \"<<b<<\" \"<<c<<\" \"<<str<<endl;\n \nstring test;\ngetline(cin,test);        //不阻塞\ncout<<\"test:\"<<test<<endl;\nreturn 0;\n}\n\n```\n\n输出：\n\n![这里写图片描述](media/1dc08fc545592a16bdd4e69456f7603f.png)\n\n\n\n输入：\n\n```c++\nString a;\ncin >> a;\ncout << a << endl;\nstring h;\ncin >> h;\ncout << h << endl;\n \nstring b;\nchar g;\ngetline(cin, b, ':');\ncout << b << endl;\n//cin.get();\ncin.get(g);\ncout << \"g=\" << g << endl;\n\n```\n\n输出：\n\n```\nasd zxc\nasd\nzxc\nasd:zxc\n \nasd\ng=z\n```\n\n当 cin\\>\\> 从缓冲区中读取数据时，若缓冲区中第一个字符是空格、tab或换行这些分隔符时，cin\\>\\> 会将其忽略并清除，继续读取下一个字符，若缓冲区为空，则继续等待。但是如果读取成功，字符后面的分隔符是残留在缓冲区的，cin\\>\\> 不做处理。\n\n从结果可以看出，cin\\>\\> 对缓冲区中的第一个换行符视而不见，采取的措施是忽略清除，继续阻塞等待缓冲区有效数据的到来。但是，getline() 读取数据时，并非像 cin\\>\\> 那样忽略第一个换行符，getline() 发现 cin 的缓冲区中有一个残留的换行符，不阻塞请求键盘输入，直接读取，送入目标字符串后，因为读取的内容为空，所以程序中的变量 test 为空串。\n\n当getline（）采用特定字符作为标识符时，标识符后面的回车和其他输入字符串会保留在输入流中。\n\n\n"
  },
  {
    "path": "C++/const成员函数.md",
    "content": "# const成员函数\n\nconst成员函数，只要类方法不修改调用对象，就应该将其声明为const\n\n```\nvoid show（）const \n```\n\n\n"
  },
  {
    "path": "C++/gflags使用.md",
    "content": "# gflags使用\n\n## 简单用法\n\n### 1.加上 `gflags` 头文件\n\n```\n#include <gflags/gflags.h>\n```\n\n### 2.将需要命令行参数变量进行定义\n\n用法如下：\n\n```\nDEFINE_string(变量名，默认值，描述);\n```\n\n`DEFINE_string` 只是其中一种类型，其他类型还有：\n\n| gflags 定义类型 | 描述             |\n| --------------- | ---------------- |\n| DEFINE_bool     | 布尔类型         |\n| DEFINE_int32    | 32 位整数        |\n| EFINE_int64     | 64 位整数        |\n| DEFINE_uint64   | 无符号 64 位整数 |\n| EFINE_double    | 浮点类型 double  |\n| DEFINE_string   | C++ string 类型  |\n\n### 3.在main函数加入如下解析命令行参数，一般都放在 main 开始位置\n\n```\ngflags::ParseCommandLineFlags(&argc, &argv, true);\n```\n\n### 4.访问参数\n\n```\nstd::cout << \"MYSTR is: \" << FLAGS_mystr << endl;\n```\n\n**注意使用`FLAGS_` + `DEFINE_string` 中申明的变量名即可调用**\n\n### 5.使用\n\n```\ng++ gflags_test.cc -o gflags_test -lgflags -lpthread \t\t#-l 链接库进行编译\n./gflags_test -mystr=\"this is a value of gflags' member \"\t# 使用\nMYSTR is: this is a value of gflags' member  \t\t\t\t# 输出\n```\n\n\n每一种类型的定义和使用都跟上面我们的例子相似，有所不同的是 bool 参数，bool 参数在命令行可以不指定值也可以指定值，假如我们定义了一个 bool 参数 debug_bool，可以在命令行这样指定2：\n\n```\n./gflags_test -debug_bool \t\t# 这样就是 true\n./gflags_test -debug_bool=true\t# 这样也是 true\n./gflags_test -debug_bool=1 \t\t# 这样也是 true\n./gflags_test -debug_bool=false \t# 0是false\n```\n\n## 简单使用实例\n\n```\n#include <iostream>\n#include <gflags/gflags.h>\n\nDEFINE_string(name, \"zhang san\", \"your name\");\nDEFINE_int32(age, 18, \"your age\");\n\nint main(int argc, char** argv) {\n\tgflags::ParseCommandLineFlags(&argc, &argv, true);\n\tstd::cout << \"your name is : \" << FLAGS_name\n        << \", your age is: \" << FLAGS_name << std::endl;\n    return 0;\n}\n```\n\n## 进阶使用\n\n### 1.跨文件调用\n\n如果你想要访问在另一个文件定义的 gflags 变量呢？使用 DECLARE_，它的作用就相当于用 extern 声明变量。为了方便的管理变量，我们推荐在 .cc 或者 .cpp文件中DEFINE 变量，然后只在对应.h 中或者单元测试中 DECLARE 变量。\n\n例如，在foo.cc 定义了一个 gflags 变量 DEFINE_string(name, 'bob', '')，假如你需要在其他文件中使用该变量，那么在 foo.h 中声明 DECLARE_string(name)，然后在使用该变量的文件中 include \"foo.h\" 就可以。当然，这只是为了更好地管理文件关联，如果你不想遵循也是可以的。\n\n## 2.参数检查\n\n使用方法如下：\n\n#### 定义校验函数：\n\n```\nstatic bool ValidatePort(const char* flagname, int32 value) {\n\tif (value > 0 && value < 200)   \n     \treturn true;\n   \tprintf(\"Invalid value for --%s: %d\\n\", flagname, (int)value);\n   \treturn false;\n}\n```\n\n### 使用全局 static 变量来注册函数，static 变量会在 main 函数开始时就调用, 在DEFINE下定义\n\n```\nDEFINE_int32(age, 18, \"your age\");\nstatic const bool port_dummy = gflags::RegisterFlagValidator(&FLAGS_port, &ValidatePort);\n```\n\n### 在输入不合法是就会报错\n\n### 3.flagfile 使用配置文件\n\n在一个配置文件中写上，在此将其命名为 user.flags:\n\n```\n--name=\"zhangsan\"\n--age=18\n```\n\n使用\n\n```\n./gflags_test --flagfile  user.flags \n```\n\n"
  },
  {
    "path": "C++/string和cstring头文件的区别.md",
    "content": "# string和cstring头文件的区别\n\n\n\n-   \\<**string.h**\\> 是C语言标准库的头文件之一，包含了一些字符串/内存处理相关的函数（如 strcpy，memcpy 等）。\n-   **\\<cstring\\>** 是C++语言标准库的头文件之一，基本上就是 \\<string.h\\> 的C++版本，当编写C++程序时如果需要使用 \\<string.h\\>，则应当用 \\<cstring\\> 代替，并加上 std:: 前缀（如 std::strcpy，std::memcpy 等）。\n-   **\\<string\\>** 是C++语言标准库的头文件之一，主要包含了 std::basic_string 模板及其相关函数\n"
  },
  {
    "path": "C++/二叉树遍历.md",
    "content": "# 二叉树遍历\n\n2022年1月17日\n\n13:47\n\n![D  c  D  c  c  D  c  void recursion (BinaryNode \\* node)  if (node NULL)  return;  recursion (node-\\> IChi 1 d)  cout node-\\>data endl ,  recursion (node-\\>rChi 1 d)  DLR  (tR)BiBD  LDR  LRDe  DLR  LDR  LRD  — EJ\\*Ü, ](media/90765ad142ae9c04739fde85d776f281.png)\n"
  },
  {
    "path": "C++/内联函数.md",
    "content": "# 内联函数\n\n\n\n**内联仅仅只是给编译器一个建议，编译器不一定会接受这种建议，如果你没有将函数声明为内联函数，那么编译器也可能将此函数做内联编译。一个好的编译器将会内联小的、简单的函数。**"
  },
  {
    "path": "C++/函数指针的定义方式.md",
    "content": "# 函数指针的定义方式\n\n```c++\nvoid func(inta,charc)\n{\n\tprintf(\"helloworld\\n\");\n}\n \nvoid test01()\n{\n\t//1、先定义出函数类型，再通过类型定义函数指针\n\ttypedef void(FUNC_TYPE)(int,char);\n \n\tFUNC_TYPE * pFunc = func;\n\t//pFunc(10,'a');\n \n\t//2、定义出函数指针类型，通过类型定义函数指针变量\n\ttypedefvoid( * FUNC_TYPE2)(int,char);\n \n\tFUNC_TYPE2p Func2 = func;\n\t//pFunc2(20,'b');\n \n \n\t//3、直接定义函数指针变量\n\tvoid( * pFunc3)(int,char) = func;\n\tpFunc3(30,'c');\n \n\t//函数指针和指针函数区别？\n\t//函数指针指向了函数的指针\n\t//指针函数函数返回值是指针的函数\n}\n\n```\n\n\n"
  },
  {
    "path": "C++/单例模式.md",
    "content": "# 单例模式\n\n\n\n## 1.构造函数私有化\n\n![- class  ChairMan  public:  static  ChairMar1 \\* getlnstacne  return singleMan,  private:  Chairman  b) 01  Chai rM const ChairMan  // public:  private:  static  ChairMart  \\* singleMan,  thairMar1  Chairman • :singleMan -  Chairman  new ](media/82e528c1d8aeb1e85113f6a7d826cdfd.png)\n\n## 2.\n\n![ChairMan \\* cl = Chairhan: •.åetlnstacne()  Chairlan \\* c2 = Chairhan: ; ](media/f700387f242b93abd4799aae4384a23a.png)\n"
  },
  {
    "path": "C++/如何正确使用resize和reserve.md",
    "content": "`resize` 和 `reserve` 都是 `std::vector` 提供的用于修改容器大小的方法，但它们的作用和使用场景有所不同。\n\n### 1. `reserve`：\n\n- **作用**：`reserve` 用于预留空间，它会调整 `vector` 的容量（`capacity`），但是不会改变 `vector` 的大小（`size`）。\n- **目的**：通过预先分配足够的内存空间，避免在插入数据时频繁重新分配内存，减少内存分配的开销。它不会改变现有的数据，只是确保 `vector` 有足够的内存空间来存储指定数量的元素。\n- **使用场景**：当你知道 `vector` 最终的元素数量时，可以调用 `reserve` 提前分配内存，这样在插入元素时就不会因为 `vector` 扩展容量而频繁进行内存重新分配，提高性能。\n\n```\nstd::vector<int> v; \nv.reserve(1000); // 预留1000个元素的空间，避免之后频繁扩容\n```\n\n### 2. `resize`：\n\n- **作用**：`resize` 用于改变 `vector` 的大小（`size`），如果增加的元素数超过当前 `vector` 的大小，它会默认初始化新元素；如果减少大小，超出部分的元素将被销毁。\n- **目的**：用来改变 `vector` 的实际元素数量。如果你需要保证 `vector` 的元素数量，使用 `resize`。\n- **使用场景**：当你需要调整 `vector` 的实际大小时，可以使用 `resize`。如果增加大小时没有提供初始值，新的元素会被默认初始化为 `0` 或 `nullptr`（如果是指针类型）。\n\n```\nstd::vector<int> v(5, 10); \n// 初始5个元素，每个值为10 v.resize(8, 20);  \n// 增加到8个元素，新元素值为20\n```\n\n### 3. 总结：\n\n- `reserve` 用来增加容量，但不改变元素数量。通常用于优化性能，避免频繁的内存重新分配。\n- `resize` 用来改变容器的实际元素数量。如果增加元素，新的元素会被默认初始化。\n\n### 如何正确使用以节约内存和运行时间：\n\n- **避免频繁的内存重新分配**：如果你知道 `vector` 可能会存储多少个元素，最好先调用 `reserve` 来预先分配好足够的内存。这样在后续的插入操作时，就不需要每次都进行内存重新分配。\n- **避免多次调用 `resize`**：当增加元素时，尽量避免多次调用 `resize`。最好通过一次性 `resize` 来设置所需的大小，或在知道元素数量时使用 `reserve` 来避免后续调整大小。\n\n### 示例：合理使用 `reserve` 和 `resize`\n\n```\nstd::vector<int> v;\n\n// 预估需要存储至少1000个元素 \nv.reserve(1000);  \n// 提前分配内存 \n// 插入元素 \nfor (int i = 0; i < 1000; ++i) \n{ \n\tv.push_back(i); \n}  \n// 调整大小（如果需要）\nv.resize(1200, 0);  \n// 将大小调整为1200，如果元素少则用0填充\n```\n通过 `reserve`，我们避免了在插入过程中频繁的内存新分配，确保了 `vector` 的容量始终足够大，而 `resize` 用来确保我们最终的 `vector` 尺寸。"
  },
  {
    "path": "C++/左值与右值.md",
    "content": "# 一、左值与右值\n\n- 啥是左值和右值呢？\n\n  左值：在[内存](https://so.csdn.net/so/search?q=内存&spm=1001.2101.3001.7020)有确定存储地址、有变量名，表达式结束依然存在的值，简单来说左值就是非临时对象。\n  右值：就是在内存没有确定存储地址、没有变量名，[表达式](https://so.csdn.net/so/search?q=表达式&spm=1001.2101.3001.7020)结束就会销毁的值，简单来说右值就是临时对象。\n\n  ```\n  int a = 0;  // 在这条语句中，a 是左值，0 是临时值，就是右值。\n  ```\n\n- 左值可以分为两类：非常量左值和常量左值；\n\n  ```\n  int a=10;              \t// a 为非常量左值（有确定存储地址，也有变量名）\n  const int a1=10;      //a1 为常量左值（有确定存储地址，也有变量名）\n  const int a2=20;      //a2 为常量左值（有确定存储地址，也有变量名）\n  ```\n\n- 同理，右值也可以分为两类：非常量右值和常量右值。\n\n  ```\n   int a=10;              \t// 10 为非常量右值\n  const int a1=10;      \n  const int a2=20;      \n  a1+a2               \t// (a1+a2) 为常量右值\n  ```\n\n# 二、左值引用于右值引用\n\n- **知道了左值与右值了，那啥是左值引用与右值引用呢？**\n\n  左值引用：其实就是绑定到左值的引用，通过&来获得左值引用。\n\n  - 左值引用举例：\n\n    ```\n    int a=10;              //非常量左值（有确定存储地址，也有变量名）\n    const int a1=10;       //常量左值（有确定存储地址，也有变量名）\n    const int a2=20;       //常量左值（有确定存储地址，也有变量名）\n     \n    //非常量左值引用\n    int &b1=a;            //正确，a是一个非常量左值，可以被非常量左值引用绑定\n    int &b2=a1;           //错误,a1是一个常量左值，不可以被非常量左值引用绑定\n    int &b3=10;           //错误，10是一个非常量右值，不可以被非常量左值引用绑定\n    int &b4=a1+a2;        //错误,（a1+a2）是一个常量右值，不可以被非常量左值引用绑定\n    \n    //常量左值引用\n    const int &c1=a;      //正确，a是一个非常量左值，可以被非常量右值引用绑定\n    const int &c2=a1;     //正确,a1是一个常量左值，可以被非常量右值引用绑定\n    const int &c3=a+a1;   //正确，（a+a1）是一个非常量右值，可以被常量右值引用绑定\n    const int &c4=a1+a2;  //正确,（a1+a2）是一个常量右值，可以被非常量右值引用绑定\n    ```\n\n  - 总结归纳：非常量左值引用只能绑定到非常量左值上；常量左值引用可以绑定到非常量左值、常量左值、非常量右值、常量右值等所有的值类型。\n\n  右值引用：其实也是绑定到右值的引用，通过&&来获得右值引用。\n\n  - 右值引用举例：\n\n    ```\n    int a=10;             //非常量左值（有确定存储地址，也有变量名）\n    const int a1=20;      //常量左值（有确定存储地址，也有变量名）\n    const int a2=20;      //常量左值（有确定存储地址，也有变量名）\n    \n    //非常量右值引用\n    int &&b1=a;            //错误，a是一个非常量左值，不可以被非常量右值引用绑定\n    int &&b2=a1;           //错误,a1是一个常量左值，不可以被非常量右值引用绑定\n    int &&b3=10;           //正确，10是一个非常量右值，可以被非常量右值引用绑定\n    int &&b4=a1+a2;        //错误,（a1+a2）是一个常量右值，不可以被非常量右值引用绑定\n    \n    //常量右值引用\n    const int &&c1=a;      //错误，a是一个非常量左值，不可以被常量右值引用绑定\n    const int &&c2=a1;     //错误,a1是一个常量左值，不可以被常量右值引用绑定\n    const int &&c3=a+a1;   //正确，（a+a1）是一个非常量右值，可以被常量右值引用绑定\n    const int &&c4=a1+a2;  //正确,（a1+a2）是一个常量右值，不可以被常量右值引用绑定\n    ```\n\n  - 总结归纳：非常量右值引用只能绑定到非常量右值上；常量右值引用可以绑定到非常量右值、常量右值上。\n\n    ![](./media/3d9e381b93fe4df790357680b15d4635.png)\n\n    **从上述可以发现，常量左值引用可以绑定到右值上，但右值引用不能绑定任何类型的左值，若想利用右值引用绑定左值该怎么办呢？**\n\n- C++11中提供了一个标准库move函数获得绑定到左值上的右值引用，即直接调用std::move告诉编译器将左值像对待同类型右值一样处理，但是被调用后的左值将不能再被使用。\n\n  - **std::move()函数举例**\n\n    ```\n    int a=10;                 //非常量左值（有确定存储地址，也有变量名）\n    const int a1=20;          //常量左值（有确定存储地址，也有变量名）\n    \n    //非常量右值引用\n    int &&d1=std::move(a);    //正确，将非常量左值a转换为非常量右值，可以被非常量右值引用绑定\n    int &&d2=std::move(a1);    //错误,将常量左值a1转换为常量右值，不可以被非常量右值引用绑定\n    \n    //常量右值引用\n    const int &&c1=std::move(a);      //正确，将非常量左值a转换为非常量右值，可以被常量右值引用绑定\n    const int &&c2=std::move(a1);     //正确,将常量左值a1转换为常量右值，可以被常量右值引用绑定\n    ```\n\n    最后可以发现，编译器利用std::move将左值强制转换为相同类型的右值之后，引用情况跟右值是一模一样的。\n\n# 三、右值引用与左值引用的区别\n\n- 1、左值引用绑定到有确定存储空间以及变量名的对象上，表达式结束后对象依然存在；\n\n- 2、右值引用绑定到要求转换的表达式、字面常量、返回右值的表达式等临时对象上，赋值表达式结束后就对象就会被销毁。\n\n- 3、左值引用后可以利用别名修改左值对象；右值引用绑定的值不能修改。\n\n# 四、引入右值引用的原因\n\n- 1、替代需要销毁对象的拷贝，提高效率：某些情况下，需要拷贝一个对象然后将其销毁，如：临时类对象的拷贝就要先将旧内存的资源拷贝到新内存，然后释放旧内存，引入右值引用后，就可以让新对象直接使用旧内存并且销毁原对象，这样就减少了内存和运算资源的使用，从而提高了运行效率；\n\n- 2、移动含有不能共享资源的类对象：像IO、unique_ptr这样的类包含不能被共享的资源（如：IO缓冲、指针），因此，这些类对象不能拷贝但可以移动。这种情况，需要先调用std::move将左值强制转换为右值，再进行右值引用。\n"
  },
  {
    "path": "C++/常用函数.md",
    "content": "# 常用函数\n\n- ## **swap（）：**\n\n  **@brief：**用于元素的交换\n\n  ```\n  swap(a, b)\n  ```\n\n  \n\n- ## **substr（）:**\n\n  **形式 ：** s.substr(pos, len)\n\n  **返回值：** string，包含s中从pos开始的len个字符的拷贝（pos的默认值是0，len的默认值是s.size() - pos，即不加参数会默认拷贝整个s）\n\n  substr有2种常用用法：\n\n  假设：string s = “0123456789”;\n\n  ```\n  string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾：sub1 = “56789”\n  \n  string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位：sub2 = “567”\n  ```\n\n  \n\n- ## **compare():**\n\n  **@brief：**两个字符串相同，返回0。\n\n  ​\t\t\t\t调用字符串小与被调用字符串，返回-1。\n\n  ​\t\t\t\t调用字符串大于被调用字符串，返回1。\n\n  ```\n  int compare(const string &s) const;\n  \n  int conpare(const char *s) const;\n  ```\n\n  ![1  2  3  4  5  6  7  8  9  le  11  12  13  14  15  16  17  18  19  2e  21  22  23  using namespace std;  int main()  string  string ;  int b=sl. 14+2 ,  cout\\<\\<b\\<\\<endl;  int c=sl.  cout\\<\\<c\\<\\<endl;  int d=sl.  ; //sl +\\*Öando\\$LJs2  string s3=\"abc\";  string s4=\"abc\";  int  cout\\<\\<e\\<\\<endl;  return e; ](media/a5f23af609c2c0cc2c6cfe51f1ca22f0.png)\n\n  \n\n-   ## **reverse():**\n\n    **@brief：**reverse函数用于反转 [ first , last ）范围内的顺序\n\n    ![string a = ihello\";  string b •world';  a.end());  b.end()); ](media/899e5f1f4f1d4a5651454501e4b6a19c.png)\n\n- ## round():\n\n  **@brief：**round()函数仅仅保留到整数位，即仅仅对小数点后一位四舍五入\n\n  ```c++\n  round(1.5) = 2.000000\n  round(1.56) = 2.000000\n  round(-1.5) = -2.000000\n  round(-1.56) = -2.000000\n  ```\n\n- ## std::numeric_limits：\n\n  **@brief：**提供关于不同平台编译的算术类型(整型、[浮点型](https://so.csdn.net/so/search?q=浮点型&spm=1001.2101.3001.7020))的属性信息，如int型的最大最小值，位宽等信息。 因此该模板素有成员函\t\t\t\t数、成员变量均为静态函数\n\n  ```c++\n  #include <iostream>     // std::cout\n  #include <limits>       // std::numeric_limits\n  \n  int main () {\n    std::cout << std::boolalpha;\n    std::cout << \"Minimum value for int: \" << std::numeric_limits<int>::min() << '\\n';\n    std::cout << \"Maximum value for int: \" << std::numeric_limits<int>::max() << '\\n';\n    std::cout << \"int is signed: \" << std::numeric_limits<int>::is_signed << '\\n';\n    std::cout << \"Non-sign bits in int: \" << std::numeric_limits<int>::digits << '\\n';\n    std::cout << \"int has infinity: \" << std::numeric_limits<int>::has_infinity << '\\n';\n    return 0;\n  }\n  ```\n\n  "
  },
  {
    "path": "C++/常规函数与内联函数.md",
    "content": "# 常规函数与内联函数\n\n\n\n常规函数调用将程序流程转到独立的函数就行运行\n\n\n\n内敛函数用相应的代码段替换函数调用，因此内联函数运行较快，但是更加占用内存\n"
  },
  {
    "path": "C++/数据类型字节数.md",
    "content": "# 数据类型字节数\n\n\n\n![](media/b5d733fac8312c1270eb8bc87d58c555.png)\n\n1个字节 = 8位  n表示位\n\n整数有符号取值范围：[-2^(n-1), 2^(n-1) -1]\n\n整数无符号取值范围：[0, 2^n -1]\n\n```\n一、整型(int、short、long、long long)\n1、有符号整型\n有符号整型的数据类型通常包括 int、short、long、long long 四种，因为是有符号类型，所以前面要加上 signed ，但是通常省略，也就是说在代码中直接打出 int 类型就代表是有符号类型的。\n\n（1）int类型\n数据类型大小是 4 字节，能表示的数值范围是\n-2^(32-1) – 2^(32-1)-1 （即 -2147483648 ~ 2147483647）\n打印类型是 %d ，使用格式为 int 名 = 值;\n\n（2）short类型\n数据类型大小是 2 字节，能表示的数值范围是\n-2^(16-1) – 2^(16-1) -1 （即 -32768 ~ 32767）\n打印类型是 %hd ，使用格式为 short 名 = 值;\n\n（3）long类型\n数据类型大小是 4 字节，能表示的数值范围是\n-2^(32-1) – 2^(32-1)-1 （即 -2147483648 ~ 2147483647）\n打印类型是 %ld ，使用格式为 long 名 = 值;\n\n（4）long long类型\n数据类型大小是 8 字节，能表示的数值范围是\n-2^(64-1) ~ 2^(64-1)-1\n\n打印类型是 %lld ，使用格式为 long long 名 = 值;\n\n2、无符号整型\n无符号数用 unsigned 表示 ，只表示数据量，而没有方向（没有正负，且无符号数最高位不是符号位，而就是数的一部分，无符号数不可能是负数。\n\n（1）unsigned int 类型\n数据类型大小是 4 字节，能表示的数值范围是\n0 – 2^(32）-1 （即 0~4294967295）\n打印类型是 %u ，使用格式为 unsigned int 名 = 值;\n\n（2）unsigned short 类型\n数据类型大小是 2 字节，能表示的数值范围是\n0 ~ 2^16 -1 （即 0~65535）\n打印类型是 %hu ，使用格式为 unsigned short 名 = 值;\n\n（3）unsigned long 类型\n数据类型大小是 4 字节，能表示的数值范围是\n0 – 2^(32）-1 （即 0~4294967295）\n打印类型是 %lu ，使用格式为 unsigned long 名 = 值;\n\n（4）unsigned long long 类型\n数据类型大小是 8 字节，能表示的数值范围是\n0~2^64-1\n打印类型是 %llu ，使用格式为 unsigned long long 名 = 值;\n```\n\n"
  },
  {
    "path": "C++/构造函数的调用时机.md",
    "content": "# 构造函数的调用时机\n\n```c++\n//1. 无参构造调用方式\nvoid test01(){\n    \n    //调用无参构造函数\n    Person person1; \n    person1.PrintPerson();\n \n    //无参构造函数错误调用方式\n    //Person person2();\n    //person2.PrintPerson();\n}\n//2. 调用有参构造函数\nvoid test02(){\n    \n    //第一种 括号法，最常用\n    Person person01(100);\n    person01.PrintPerson();\n \n    //调用拷贝构造函数\n    Person person02(person01);\n    person02.PrintPerson();\n \n    //第二种 匿名对象(显示调用构造函数)\n    Person(200); //匿名对象，没有名字的对象\n \n    Person person03 = Person(300);\n    person03.PrintPerson();\n \n    //注意: 使用匿名对象初始化判断调用哪一个构造函数，要看匿名对象的参数类型\n    Person person06(Person(400)); //等价于 Person person06 = Person(400);\n    person06.PrintPerson();\n \n    //第三种 =号法 隐式转换\n    Person person04 = 100; //Person person04 =  Person(100)\n    person04.PrintPerson();\n \n    //调用拷贝构造\n    Person person05 = person04; //Person person05 =  Person(person04)\n    person05.PrintPerson();\n}\n\n```\n\n\n"
  },
  {
    "path": "C++/类知识点.md",
    "content": "# 类知识点\n\n1. 类声明描述如何分配内存，但是并不分配内存\n\n   \n\n2. 对于静态成员函数，在类外进行初始化\n\n   \n\n3. 构造函数用于创建对象\n\n   \n\n4. 函数返回对象时会调用拷贝构造函数\n\n   \n\n5. 一个类的所有对象共享一组类方法\n\n   \n\n6. 继承类可以重新定义在父类中的函数，并且使用虚函数语法时，可以使用父类指针或者引用指向继承类对象，会根据指向的对象类型来选择函数方法，如果不使用虚函数，则只会根据引用或者指针类型选择函数方法，这样就会造成冲突。也就是使用了动态联编，而后者则是静态联编。\n\n   \n\n7. 最好对类数据成员采用私有访问控制，不要使用保护访问控制；同时使用基类方法使派生类能够访问基类数据。\n\n   \n\n8. 包含动态内存分配时（new delete）要考虑深浅拷贝问题！默认复制构造函数对于动态内存分配来说是不合适的，容易造成内存的泄露。\n\n   \n\n9. 一般使用对象作为函数参数时，应该按照引用传递而不是值传递，这样是为了提高效率，按值传递对象涉及到生成临时拷贝。返回对象与返回引用与参数时情况相似。\n\n   \n\n10. 使用explicit来防止单参数构造函数的隐式转换，使用const方法防止修改数据\n\n    ```\n    class t(int a);\n    t = 10; 存在隐式转换\n    ```\n\n    \n\n11. 派生类的成员可以直接访问基类的保护成员，但是不能直接访问基类的私有成员"
  },
  {
    "path": "C++/计算时间.md",
    "content": "# 计算时间\n\n```c++\n#include<chrono>\nstd::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();\nstd::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();\ndouble ttrack = std::chrono::duration_cast< std::chrono::duration<double>>(t2-t1).count();\n```\n\n\n"
  },
  {
    "path": "C++/设计模式之生产者-消费者模型.md",
    "content": "# 设计模式之生产者-消费者模型\n\n### 一、什么是生产者-消费者模型\n\n1、简单理解生产者-消费者模型\n假设有两个进程（或线程）A、B和一个固定大小的缓冲区，A进程生产数据放入缓冲区，B进程从缓冲区中取出数据进行计算，这就是一个简单的生产者-消费者模型。这里的A进程相当于生产者，B进程相当于消费者。\n![在这里插入图片描述](media/d6ca82565cfb4370a021b391b02e93ea.png)\n\n2、为什么要使用生产者-消费者模型\n在多线程开发中，如果生产者生产数据的速度很快，而消费者消费数据的速度很慢，那么生产者就必须等待消费者消费完数据才能够继续生产数据，因为生产过多的数据可能会导致存储不足；同理如果消费者的速度大于生产者那么消费者就会经常处理等待状态，所以为了达到生产者和消费者生产数据和消费数据之间的平衡，那么就需要一个缓冲区用来存储生产者生产的数据，所以就引入了生产者-消费者模式\n简单来说，这里缓冲区的作用就是为了平衡生产者和消费者的数据处理能力，一方面起到缓存作用，另一方面达到解耦合作用。\n3、生产者-消费者模型特点\n保证生产者不会在缓冲区满的时候继续向缓冲区放入数据，而消费者也不会在缓冲区空的时候，消耗数据\n当缓冲区满的时候，生产者会进入休眠状态，当下次消费者开始消耗缓冲区的数据时，生产者才会被唤醒，开始往缓冲区中添加数据；当缓冲区空的时候，消费者也会进入休眠状态，直到生产者往缓冲区中添加数据时才会被唤醒\n![在这里插入图片描述](media/c82db2f4acae4beca4e03132627cf710.png)\n\n4、生产者-消费者模型的应用场景\n生产者-消费者模型一般用于将生产数据的一方和消费数据的一方分割开来，将生产数据与消费数据的过程解耦开来。\n1）Excutor任务执行框架：\n通过将任务的提交和任务的执行解耦开来，提交任务的操作相当于生产者，执行任务的操作相当于消费者；例如使用Excutor构建web服务器，用于处理线程的请求：生产者将任务提交给线程池，线程池创建线程处理任务，如果需要运行的任务数大于线程池的基本线程数，那么就把任务扔到阻塞队列（通过线程池 + 阻塞队列的方式比只使用一个阻塞队列的效率高很多，因为消费者能够处理就直接处理掉了，不用每个消费者都要先从阻塞队列中取出任务再执行）\n2）消息中间件active MQ：\n双十一的时候，会产生大量的订单，那么不可能同时处理那么多的订单，需要将订单放入一个队列里面，然后由专门的线程处理订单。这里用户下单就是生产者，处理订单的线程就是消费者；再比如12306的抢票功能，先由一个容器存储用户提交的订单，然后再由专门处理订单的线程慢慢处理，这样可以在短时间内支持高并发服务\n3）任务的处理时间比较长的情况下：\n比如上传附近并处理，那么这个时候可以将用户上传和处理附件分成两个过程，用一个队列暂时存储用户上传的附近，然后立刻返回用户上传成功，然后有专门的线程处理队列中的附近\n5、生产者-消费者模型的优点\n1）解耦合：将生产者类和消费者类进行解耦，消除代码之间的依赖性，简化工作负载的管理。\n2）复用：通过将生产者类和消费者类独立开来，那么可以对生产者类和消费者类进行独立的复用与扩展。\n3）调整并发数：由于生产者和消费者的处理速度是不一样的，可以调整并发数，给予慢的一方多的并发数，来提高任务的处理速度。\n4）异步：对于生产者和消费者来说能够各司其职，生产者只需要关心缓冲区是否还有数据，不需要等待消费者处理完；同样的对于消费者来说，也只需要关注缓冲区的内容，不需要关注生产者，通过异步的方式支持高并发，将一个耗时的流程拆成生产和消费两个阶段，这样生产者因为执行 put() 的时间比较短，而支持高并发。\n5）支持分布式：生产者和消费者通过队列进行通讯，所以不需要运行在同一台机器上，在分布式环境中可以通过 redis 的 list 作为队列，而消费者只需要轮询队列中是否有数据。同时还能支持集群的伸缩性，当某台机器宕掉的时候，不会导致整个集群宕掉。\n### 二、C++实现生产者-消费者模型\n\n1、依赖\n1）C++11 提供的 thread 库\n\n2）互斥锁 mutex\n\n3）条件变量 condition_variable\n\n4）队列 queue\n\n5）原子操作 atomic\n\n6）Windows 临界区\n\n2、实现细节\n1）具体的实现逻辑是构建一个queue来存储生产的数据，queue不满时可以生产，不空时可以消费。对于这个队列，采用阻塞队列的实现思路。\n\n2）先实现构造函数，初始化一个unique_lock供condition_variable使用。如何在类里面使用unique_lock等需要初始化，并且初始化会加锁的对象。这要研究下。尝试构造列表初始化，然后函数体里unlock。\n\n3）对于条件变量，申请两个，分别控制consumer和producer。\n\n4）入队和出队列的细节。\n\n5）首先加锁。\n\n6）循环判断一下目前的队列情况，对于各自的特殊情况（队满和队空）进行处理。\n\n6）唤醒一个线程来处理特殊情况。\n\n7）等待处理完毕。\n\n8）处理入和出队列操作。\n\n9）最后释放锁。\n\n10）对于输出 std::cout 可能因为多线程紊乱的问题，加入了临界区。另外因为 std::cout 缓存问题，可能存在其他问题。\n\n3、问题\n1）出现的 Bug：在多个 consumer 线程情况下，会出现有线程无法退出情况。在析构函数里，加入 stop，并且唤醒因条件变量阻塞的线程。在 pop 函数中，加入对 stop 的判断，当队列为空并且 stop 时，退出 pop 函数。对 consumer 的条件变量 wait 调用加入 pred，队列为空或者没有停止时阻塞。\n\n2）条件变量的 wait 函数理解：单参数版本，此时传入一个 unique_lock 类型的变量，并且已经加锁，调用 wait 之后释放锁，并阻塞等待 notify 唤醒，唤醒后加锁，要注意的是被唤醒后有可能加锁失败，此时继续阻塞；双参数版本，此时需要再加入一个 Predicate 类型的变量，应该是一个返回 bool 的函数，可用 lamda 表达式代替，返回 false 阻塞，true 解除，要注意这里的意思是即使 notify 了，如果后面的条件不满足，也不会解除阻塞。\n\n3）对于多 consumer 的消息同步暂时搁置，是在外部程序完成调用的 stop。\n\n4、代码\n1）阻塞队列\n\n```\n// BlockQueue.h\n#pragma  once\n#include <iostream>\n#include <queue>\n#include <thread>\n#include <mutex>\n#include <atomic>\n#include <condition_variable>\n\n#define TASK_NUM 8\n\nusing namespace std;\n\nclass CBlockQueue\n{\nprivate:\n    mutex _mt;\n    condition_variable _cv_con;\n    condition_variable _cv_prod;\n    queue<int>   _tasks;\n    atomic<bool> _stopped;\n\n    const int _capacity;\n    \n    bool stopped() \n    {\n        return _stopped.load();\n    }\n\n    bool empty() \n    {\n        return _tasks.size() == 0 ? true : false;\n    }\n\n    bool full()\n    {\n        return _tasks.size() == _capacity ? true : false;\n    }\n    \npublic:\n    CBlockQueue();\n    ~CBlockQueue();\n\n    void stop()\n    {\n        _stopped.store(true);\n        _cv_con.notify_all();\n    }\n\n    bool available()\n    {\n        return !stopped() || !empty();\n    }\n\n    void push(const int &data);\n    void pop(int &data);\n};\n\n```\n\n```\n// BlockQueue.cpp\n#include \"BlockQueue.h\"\n\nCBlockQueue::CBlockQueue() : _capacity(TASK_NUM), _stopped(false) {}\n\nCBlockQueue::~CBlockQueue()\n{\n    stop();\n    _cv_con.notify_all();\n    _cv_prod.notify_all();\n}\n\nvoid CBlockQueue::push(const int &data) \n{\n    unique_lock<mutex> _lck(_mt);\n    while (full()) \n    {\n        _cv_con.notify_one();\n        // cout << \"Task Queue is full, notify one consumer...\\n\";\n        _cv_prod.wait(_lck);\n    }\n\n    _tasks.push(data);\n    _cv_con.notify_one();\n}\n\nvoid CBlockQueue::pop(int &data) \n{\n    unique_lock<mutex> _lck(_mt);\n    while (empty())\n    {\n        if (this->stopped()) \n            return;\n\n        _cv_prod.notify_one();\n        // cout << \"Task Queue is empty, notify one producer...\\n\";\n        _cv_con.wait(_lck, [this]() { return this->stopped() || !this->empty(); });\n    }\n\n    data = _tasks.front();\n    _tasks.pop();\n    _cv_prod.notify_one();\n}\n\n```\n\n2）主函数\n\n```\n#include <iostream>\n#include \"BlockQueue.h\"\n\n#ifdef WIN32\n#include <windows.h>\n#define sleep(x) (Sleep((x) * 1000))\n#else\n#include <unistd.h>\n#endif\n\nCRITICAL_SECTION cs;\n// mutex mt_prod;\n\nvoid consumer(CBlockQueue *bq)\n{\n    // CBlockQueue *bq = static_cast<CBlockQueue *>(arg);\n    while (bq->available())\n    {\n        int data = -1;\n        bq->pop(data);\n        EnterCriticalSection(&cs);\n        cout << \"<\" << this_thread::get_id() << \">: \" << data << \" comsumed.\\n\";\n        LeaveCriticalSection(&cs);\n        // sleep(0.5);\n    }\n\n    cout << \"<\" << this_thread::get_id() << \">: \" << \"consumer is done.\\n\";\n}\n\nvoid producer(CBlockQueue *bq, int start, int maxNum) \n{\n    // CBlockQueue *bq = static_cast<CBlockQueue *>(arg);\n    // unique_lock<mutex> lck(mt_prod);\n\n    int i = 0;\n    while (i++ < maxNum) \n    {\n        // int data = rand() % 1024;\n        int data = i + start;\n        bq->push(data);\n        EnterCriticalSection(&cs);\n        cout << \"[\" << this_thread::get_id() << \"]: \" << data << \" produced.\\n\";\n        LeaveCriticalSection(&cs);\n        // sleep(0.2);\n    }\n\n    // if(start + i >= maxNum) bq->stop();\n    cout << \"[\" << this_thread::get_id() << \"]: \" << \"producer is done.\\n\";\n}\n\nint main()\n{\n    CBlockQueue bqueue;\n    InitializeCriticalSection(&cs);\n\n    vector<thread> th_prods;\n    const int num_prod = 3;\n    for (int i = 0; i < num_prod; ++i) \n    {\n        th_prods.emplace_back(producer, &bqueue, i * 100, num_prod * 100);\n    }\n\n    vector<thread> th_cons;\n    const int num_con = 3;\n    for (int i = 0; i < num_con; ++i)\n    {\n        th_cons.emplace_back(consumer, &bqueue);\n    }\n\n    for (auto &t : th_prods) \n    {\n        t.join();\n    }\n    bqueue.stop();\n    for (auto &t : th_cons)\n    {\n        t.join();\n    }\n    \n    DeleteCriticalSection(&cs);\n    \n    return 0;\n}\n\n```\n\n### 三、Reference\n\n1、深入理解生产者消费者模型：https://blog.csdn.net/xiaoqiu_cr/article/details/95756625\n\n2、C++版本的生产者消费者模型：https://blog.csdn.net/h_WuLingFei/article/details/104897449\n\n3、多线程与原子操作和无锁编程：https://guoqiang.blog.csdn.net/article/details/112253541\n"
  },
  {
    "path": "C++/转换.md",
    "content": "# 转换\n\n## int to string \n\n```c++\nstring = to_string(int a)\n```\n\n\n\n## string to char\n\n```c++\n*.c_str()\n```\n\n\n\n## char\\* to double \n\n```c++\nstd::atof()\n```\n\n"
  },
  {
    "path": "Linux/Shell的变量功能.md",
    "content": "## ![大标题的图示](http://cn.linux.vbird.org/image/logo.png)**Shell 的变量功能**\n\n变量是 bash 环境中非常重要的一个玩意儿，我们知道 Linux 是多人多任务的环境，每个人登陆系统都能取得一个 bash ， 每个人都能够使用 bash 下达 mail 这个命令来收受『自己』的邮件，问题是， bash 是如何得知你的邮件信箱是哪个文件？ 这就需要『变量』的帮助啦！所以，你说变量重不重要呢？底下我们将介绍重要的环境变量、变量的取用与配置等数据， 呼呼！动动脑时间又来到啰！^_^\n\n\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**什么是变量？**\n\n那么，什么是『变量』呢？简单的说，就是让某一个特定字符串代表不固定的内容就是了。举个大家在国中都会学到的数学例子， 那就是：『 y = ax + b 』这东西，在等号左边的(y)就是变量，在等号右边的(ax+b)就是变量内容。 要注意的是，左边是未知数，右边是已知数喔！ 讲的更简单一点，我们可以『用一个简单的 \"字眼\" 来取代另一个比较复杂或者是容易变动的数据』。这有什么好处啊？最大的好处就是『方便！』。\n\n\n\n------\n\n- ### 变量的可变性与方便性\n\n\n\n举例来说，我们每个账号的邮件信箱默认是以 MAIL 这个变量来进行存取的， 当 dmtsai 这个使用者登陆时，他便会取得 MAIL 这个变量，而这个变量的内容其实就是 /var/spool/mail/dmtsai， 那如果 vbird 登陆呢？他取得的 MAIL 这个变量的内容其实就是 /var/spool/mail/vbird 。 而我们使用信件读取命令 mail 来读取自己的邮件信箱时，嘿嘿，这支程序可以直接读取 MAIL 这个变量的内容， 就能够自动的分辨出属于自己的信箱信件啰！这样一来，设计程序的设计师就真的很方便的啦！\n\n![程序、变量与不同用户的关系](media/var_01.gif)\n图 2.1.1、程序、变量与不同用户的关系\n\n如上图所示，由于系统已经帮我们规划好 MAIL 这个变量，所以用户只要知道 mail 这个命令如何使用即可， mail 会主动的取用 MAIL 这个变量，就能够如上图所示的取得自己的邮件信箱了！(注意大小写，小写的 mail 是命令， 大写的 MAIL 则是变量名称喔！)\n\n那么使用变量真的比较好吗？这是当然的！想象一个例子，如果 mail 这个命令将 root 收信的邮件信箱 (mailbox) 档名为 /var/spool/mail/root 直接写入程序代码中。那么当 dmtsai 要使用 mail 时，将会取得 /var/spool/mail/root 这个文件的内容！ 不合理吧！所以你就需要帮 dmtsai 也设计一个 mail 的程序，将 /var/spool/mail/dmtsai 写死到 mail 的程序代码当中！ 天吶！那系统要有多少个 mail 命令啊？反过来说，使用变量就变的很简单了！因为你不需要更动到程序代码啊！ 只要将 MAIL 这个变量带入不同的内容即可让所有使用者透过 mail 取得自己的信件！当然简单多了！\n\n\n\n------\n\n- ### 影响 bash 环境操作的变量\n\n某些特定变量会影响到 bash 的环境喔！举例来说，我们前面已经提到过很多次的那个 PATH 变量！ 你能不能在任何目录下运行某个命令，与 PATH 这个变量有很大的关系。例如你下达 ls 这个命令时，系统就是透过 PATH 这个变量里面的内容所记录的路径顺序来搜寻命令的呢！如果在搜寻完 PATH 变量内的路径还找不到 ls 这个命令时， 就会在屏幕上显示『 command not found 』的错误信息了。\n\n如果说的学理一点，那么由于在 Linux System 下面，所有的线程都是需要一个运行码， 而就如同上面提到的，你『真正以 shell 来跟 Linux 沟通，是在正确的登陆 Linux 之后！』这个时候你就有一个 bash 的运行程序，也才可以真正的经由 bash 来跟系统沟通啰！而在进入 shell 之前，也正如同上面提到的，由于系统需要一些变量来提供他数据的存取 (或者是一些环境的配置参数值， 例如是否要显示彩色等等的) ，所以就有一些所谓的『环境变量』 需要来读入系统中了！这些环境变量例如 PATH、HOME、MAIL、SHELL 等等，都是很重要的， 为了区别与自定义变量的不同，环境变量通常以大写字符来表示呢！\n\n\n\n------\n\n- ### 脚本程序设计 (shell script) 的好帮手\n\n这些还都只是系统默认的变量的目的，如果是个人的配置方面的应用呢：例如你要写一个大型的 script 时，有些数据因为可能由于用户习惯的不同而有差异，比如说路径好了，由于该路径在 script 被使用在相当多的地方，如果下次换了一部主机，都要修改 script 里面的所有路径，那么我一定会疯掉！ 这个时候如果使用变量，而将该变量的定义写在最前面，后面相关的路径名称都以变量来取代， 嘿嘿！那么你只要修改一行就等于修改整篇 script 了！方便的很！所以，良好的程序设计师都会善用变量的定义！\n\n![变量应用于 shell script 的示意图](media/var_02.gif)\n图 2.1.2、变量应用于 shell script 的示意图\n\n最后我们就简单的对『什么是变量』作个简单定义好了： 『变量就是以一组文字或符号等，来取代一些配置或者是一串保留的数据！』， 例如：我配置了『myname』就是『VBird』，所以当你读取 myname 这个变量的时候，系统自然就会知道！哈！那就是 VBird 啦！ 那么如何『显示变量』呢？这就需要使用到 echo 这个命令啦！\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**变量的取用与配置：echo, 变量配置守则, unset**\n\n说的口沫横飞的，也不知道『变量』与『变量代表的内容』有啥关系？ 那我们就将『变量』的『内容』拿出来给您瞧瞧好了。你可以利用 echo 这个命令来取用变量， 但是，变量在被取用时，前面必须要加上钱字号『 $ 』才行，举例来说，要知道 PATH 的内容，该如何是好？\n\n\n\n\n\n------\n\n- ### 变量的取用: echo\n\n```\n[root@www ~]# echo $variable [root@www ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@www ~]# echo ${PATH} \n```\n\n变量的取用就如同上面的范例，利用 echo 就能够读出，只是需要在变量名称前面加上 $ ， 或者是以 ${变量} 的方式来取用都可以！当然啦，那个 echo 的功能可是很多的， 我们这里单纯是拿 echo 来读出变量的内容而已，更多的 echo 使用，请自行给他 man echo 吧！ ^_^\n\n例题：请在屏幕上面显示出您的环境变量 HOME 与 MAIL：答：echo $HOME 或者是 echo ${HOME} echo $MAIL 或者是 echo ${MAIL}\n\n\n\n现在我们知道了变量与变量内容之间的相关性了，好了，那么我要如何『配置』或者是『修改』 某个变量的内容啊？很简单啦！用『等号(=)』连接变量与他的内容就好啦！举例来说： 我要将 myname 这个变量名称的内容配置为 VBird ，那么：\n\n```\n[root@www ~]# echo $myname       <==这里并没有任何数据～因为这个变量尚未被配置！是空的！ [root@www ~]# myname=VBird [root@www ~]# echo $myname VBird  <==出现了！因为这个变量已经被配置了！ \n```\n\n瞧！如此一来，这个变量名称 myname 的内容就带有 VBird 这个数据啰～ 而由上面的例子当中，我们也可以知道： 在 bash 当中，当一个变量名称尚未被配置时，默认的内容是『空』的。 另外，变量在配置时，还是需要符合某些规定的，否则会配置失败喔！ 这些守则如下所示啊！\n\n\n\n\n\n------\n\n- ### 变量的配置守则\n\n1. 变量与变量内容以一个等号『=』来连结，如下所示：\n   『myname=VBird』\n\n   \n\n2. 等号两边不能直接接空格符，如下所示为错误：\n   『myname = VBird』或『myname=VBird Tsai』\n\n   \n\n3. 变量名称只能是英文字母与数字，但是开头字符不能是数字，如下为错误：\n   『2myname=VBird』\n\n   \n\n4. 变量内容若有空格符可使用双引号『\"』或单引号『'』将变量内容结合起来，但\n\n   - 双引号内的特殊字符如 $ 等，可以保有原本的特性，如下所示：\n     『var=\"lang is $LANG\"』则『echo $var』可得『lang is en_US』\n   - 单引号内的特殊字符则仅为一般字符 (纯文本)，如下所示：\n     『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』\n\n5. 可用跳脱字符『 \\ 』将特殊符号(如 [Enter], $, \\, 空格符, '等)变成一般字符；\n\n   \n\n6. 在一串命令中，还需要藉由其他的命令提供的信息，可以使用反单引号『`命令`』或 『$(命令)』。特别注意，那个 ` 是键盘上方的数字键 1 左边那个按键，而不是单引号！ 例如想要取得核心版本的配置：\n   『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』\n\n   \n\n7. 若该变量为扩增变量内容时，则可用 \"$变量名称\" 或 ${变量} 累加内容，如下所示：\n   『PATH=\"$PATH\":/home/bin』\n\n   \n\n8. 若该变量需要在其他子程序运行，则需要以 export 来使变量变成环境变量：\n   『export PATH』\n\n   \n\n9. 通常大写字符为系统默认变量，自行配置变量可以使用小写字符，方便判断 (纯粹依照使用者兴趣与嗜好) ；\n\n   \n\n10. 取消变量的方法为使用 unset ：『unset 变量名称』例如取消 myname 的配置：\n    『unset myname』\n\n底下让鸟哥举几个例子来让你试看看，就知道怎么配置好你的变量啰！\n\n```\n范例一：配置一变量 name ，且内容为 VBird\n[root@www ~]# 12name=VBird\n-bash: 12name=VBird: command not found  <==屏幕会显示错误！因为不能以数字开头！\n[root@www ~]# name = VBird            <==还是错误！因为有空白！\n[root@www ~]# name=VBird              <==OK 的啦！\n\n范例二：承上题，若变量内容为 VBird's name 呢，就是变量内容含有特殊符号时：\n[root@www ~]# name=VBird's name  \n# 单引号与双引号必须要成对，在上面的配置中仅有一个单引号，因此当你按下 enter 后，\n# 你还可以继续输入变量内容。这与我们所需要的功能不同，失败啦！\n# 记得，失败后要复原请按下 [ctrl]-c 结束！\n[root@www ~]# name=\"VBird's name\"    <==OK 的啦！\n# 命令是由左边向右找→，先遇到的引号先有用，因此如上所示，单引号会失效！\n[root@www ~]# name='VBird's name'    <==失败的啦！\n# 因为前两个单引号已成对，后面就多了一个不成对的单引号了！因此也就失败了！\n[root@www ~]# name=VBird\\'s\\ name     <==OK 的啦！\n# 利用反斜杠 (\\) 跳脱特殊字符，例如单引号与空格键，这也是 OK 的啦！\n\n范例三：我要在 PATH 这个变量当中『累加』:/home/dmtsai/bin 这个目录\n[root@www ~]# PATH=$PATH:/home/dmtsai/bin\n[root@www ~]# PATH=\"$PATH\":/home/dmtsai/bin\n[root@www ~]# PATH=${PATH}:/home/dmtsai/bin\n# 上面这三种格式在 PATH 里头的配置都是 OK 的！但是底下的例子就不见得啰！\n\n范例四：承范例三，我要将 name 的内容多出 \"yes\" 呢？\n[root@www ~]# name=$nameyes  \n# 知道了吧？如果没有双引号，那么变量成了啥？name 的内容是 $nameyes 这个变量！\n# 呵呵！我们可没有配置过 nameyes 这个变量吶！所以，应该是底下这样才对！\n[root@www ~]# name=\"$name\"yes\n[root@www ~]# name=${name}yes  <==以此例较佳！\n\n范例五：如何让我刚刚配置的 name=VBird 可以用在下个 shell 的程序？\n[root@www ~]# name=VBird\n[root@www ~]# bash        <==进入到所谓的子程序\n[root@www ~]# echo $name  <==子程序：再次的 echo 一下；\n       <==嘿嘿！并没有刚刚配置的内容喔！\n[root@www ~]# exit        <==子程序：离开这个子程序\n[root@www ~]# export name\n[root@www ~]# bash        <==进入到所谓的子程序\n[root@www ~]# echo $name  <==子程序：在此运行！\nVBird  <==看吧！出现配置值了！\n[root@www ~]# exit        <==子程序：离开这个子程序\n```\n\n什么是『子程序』呢？就是说，在我目前这个 shell 的情况下，去激活另一个新的 shell ，新的那个 shell 就是子程序啦！在一般的状态下，父程序的自定义变量是无法在子程序内使用的。但是透过 export 将变量变成环境变量后，就能够在子程序底下应用了！很不赖吧！至于程序的相关概念， 我们会在[第十七章程序管理](http://cn.linux.vbird.org/linux_basic/0440processcontrol.php)当中提到的喔！\n\n```\n范例六：如何进入到您目前核心的模块目录？ [root@www ~]# cd /lib/modules/`uname -r`/kernel [root@www ~]# cd /lib/modules/$(uname -r)/kernel \n```\n\n每个 Linux 都能够拥有多个核心版本，且几乎 distribution 的核心版本都不相同。以 CentOS 5.3 (未升级前) 为例，他的默认核心版本是 2.6.18-128.el5 ，所以核心模块目录在 /lib/modules/2.6.18-128.el5/kernel/ 内。 也由于每个 distributions 的这个值都不相同，但是我们却可以利用 uname -r 这个命令先取得版本信息。所以啰，就可以透过上面命令当中的内含命令 `uname -r` 先取得版本输出到 cd ... 那个命令当中，就能够顺利的进入目前核心的驱动程序所放置的目录啰！很方便吧！\n\n其实上面的命令可以说是作了两次动作，亦即是：\n\n1. 先进行反单引号内的动作『uname -r』并得到核心版本为 2.6.18-128.el5\n2. 将上述的结果带入原命令，故得命令为：『cd /lib/modules/2.6.18-128.el5/kernel/』\n\n```\n范例七：取消刚刚配置的 name 这个变量内容 [root@www ~]# unset name \n```\n\n根据上面的案例你可以试试看！就可以了解变量的配置啰！这个是很重要的呦！请勤加练习！ 其中，较为重要的一些特殊符号的使用啰！例如单引号、双引号、跳脱字符、钱字号、反单引号等等，底下的例题想一想吧！\n\n例题：在变量的配置当中，单引号与双引号的用途有何不同？ 答：单引号与双引号的最大不同在于双引号仍然可以保有变量的内容，但单引号内仅能是一般字符 ，而不会有特殊符号。我们以底下的例子做说明：假设您定义了一个变量， name=VBird ，现在想以 name 这个变量的内容定义出 myname 显示 VBird its me 这个内容，要如何订定呢？[root@www ~]# name=VBird [root@www ~]# echo $name VBird [root@www ~]# myname=\"$name its me\" [root@www ~]# echo $myname VBird its me [root@www ~]# myname='$name its me' [root@www ~]# echo $myname $name its me发现了吗？没错！使用了单引号的时候，那么 $name 将失去原有的变量内容，仅为一般字符的显示型态而已！这里必需要特别小心在意！\n\n\n\n例题：在命令下达的过程中，反单引号( )这个符号代表的意义为何？答：在一串命令中，在 之内的命令将会被先运行，而其运行出来的结果将做为外部的输入信息！例如 uname -r 会显示出目前的核心版本，而我们的核心版本在 /lib/modules 里面，因此，你可以先运行 uname -r 找出核心版本，然后再以『 cd 目录』到该目录下，当然也可以运行如同上面范例六的运行内容啰。  另外再举个例子，我们也知道， [locate](http://cn.linux.vbird.org/linux_basic/0220filemanager.php#locate) 命令可以列出所有的相关文件档名，但是，如果我想要知道各个文件的权限呢？举例来说，我想要知道每个 crontab 相关档名的权限：[root@www ~]# ls -l `locate crontab`如此一来，先以 locate 将文件名数据都列出来，再以 ls 命令来处理的意思啦！瞭了吗？ ^_^\n\n\n\n例题：若你有一个常去的工作目录名称为：『/cluster/server/work/taiwan_2005/003/』，如何进行该目录的简化？答：在一般的情况下，如果你想要进入上述的目录得要『cd /cluster/server/work/taiwan_2005/003/』， 以鸟哥自己的案例来说，鸟哥跑数值模式常常会配置很长的目录名称(避免忘记)，但如此一来变换目录就很麻烦。 此时，鸟哥习惯利用底下的方式来降低命令下达错误的问题：[root@www ~]# work=\"/cluster/server/work/taiwan_2005/003/\" [root@www ~]# cd $work未来我想要使用其他目录作为我的模式工作目录时，只要变更 work 这个变量即可！而这个变量又可以在 [bash 的配置文件](http://cn.linux.vbird.org/linux_basic/0320bash_2.php#settings_bashrc)中直接指定，那我每次登陆只要运行『 cd $work 』就能够去到数值模式仿真的工作目录了！是否很方便呢？ ^_^\n\n\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**环境变量的功能**\n\n环境变量可以帮我们达到很多功能～包括家目录的变换啊、提示字符的显示啊、运行文件搜寻的路径啊等等的， 还有很多很多啦！那么，既然环境变量有那么多的功能，问一下，目前我的 shell 环境中， 有多少默认的环境变量啊？我们可以利用两个命令来查阅，分别是 env 与 export 呢！\n\n\n\n\n\n------\n\n- ### 用 env 观察环境变量与常见环境变量说明\n\n```\n范例一：列出目前的 shell 环境下的所有环境变量与其内容。\n[root@www ~]# env\nHOSTNAME=www.vbird.tsai    <== 这部主机的主机名\nTERM=xterm                 <== 这个终端机使用的环境是什么类型\nSHELL=/bin/bash            <== 目前这个环境下，使用的 Shell 是哪一个程序？\nHISTSIZE=1000              <== 『记录命令的笔数』在 CentOS 默认可记录 1000 笔\nUSER=root                  <== 使用者的名称啊！\nLS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:\nor=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=0\n0;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=\n00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;3\n1:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00\n;35:*.xpm=00;35:*.png=00;35:*.tif=00;35: <== 一些颜色显示\nMAIL=/var/spool/mail/root  <== 这个用户所取用的 mailbox 位置\nPATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:\n/root/bin                  <== 不再多讲啊！是运行文件命令搜寻路径\nINPUTRC=/etc/inputrc       <== 与键盘按键功能有关。可以配置特殊按键！\nPWD=/root                  <== 目前用户所在的工作目录 (利用 pwd 取出！)\nLANG=en_US                 <== 这个与语系有关，底下会再介绍！\nHOME=/root                 <== 这个用户的家目录啊！\n_=/bin/env                 <== 上一次使用的命令的最后一个参数(或命令本身)\n```\n\nenv 是 environment (环境) 的简写啊，上面的例子当中，是列出来所有的环境变量。当然，如果使用 export 也会是一样的内容～ 只不过， export 还有其他额外的功能就是了，我们等一下再提这个 export 命令。 那么上面这些变量有些什么功用呢？底下我们就一个一个来分析分析！\n\n- **HOME**\n  代表用户的家目录。还记得我们可以使用 cd ~ 去到自己的家目录吗？或者利用 cd 就可以直接回到用户家目录了。那就是取用这个变量啦～ 有很多程序都可能会取用到这个变量的值！\n\n  \n\n- **SHELL**\n  告知我们，目前这个环境使用的 SHELL 是哪支程序？ Linux 默认使用 /bin/bash 的啦！\n\n  \n\n- **HISTSIZE**\n  这个与『历史命令』有关，亦即是， 我们曾经下达过的命令可以被系统记录下来，而记录的『笔数』则是由这个值来配置的。\n\n  \n\n- **MAIL**\n  当我们使用 mail 这个命令在收信时，系统会去读取的邮件信箱文件 (mailbox)。\n\n  \n\n- **PATH**\n  就是运行文件搜寻的路径啦～目录与目录中间以冒号(:)分隔， 由于文件的搜寻是依序由 PATH 的变量内的目录来查询，所以，目录的顺序也是重要的喔。\n\n  \n\n- **LANG**\n  这个重要！就是语系数据啰～很多信息都会用到他， 举例来说，当我们在启动某些 perl 的程序语言文件时，他会主动的去分析语系数据文件， 如果发现有他无法解析的编码语系，可能会产生错误喔！一般来说，我们中文编码通常是 zh_TW.Big5 或者是 zh_TW.UTF-8，这两个编码偏偏不容易被解译出来，所以，有的时候，可能需要修订一下语系数据。 这部分我们会在下个小节做介绍的！\n\n  \n\n- **RANDOM**\n\n  这个玩意儿就是『随机随机数』的变量啦！目前大多数的 distributions 都会有随机数生成器，那就是\n\n   /dev/random\n\n   \n\n  这个文件。 我们可以透过这个随机数文件相关的变量 ($RANDOM) 来随机取得随机数值喔。在 BASH 的环境下，这个 RANDOM 变量的内容，介于 0~32767 之间，所以，你只要 echo $RANDOM 时，系统就会主动的随机取出一个介于 0~32767 的数值。万一我想要使用 0~9 之间的数值呢？呵呵～利用 declare 宣告数值类型， 然后这样做就可以了：\n\n  ```\n  [root@www ~]# declare -i number=$RANDOM*10/32768 ; \n  echo $number \n  8   <== 此时会随机取出 0~9 之间的数值喔！ \n  ```\n  \n  \n\n大致上是有这些环境变量啦～里面有些比较重要的参数，在底下我们都会另外进行一些说明的～\n\n\n\n\n\n------\n\n- ### 用 set 观察所有变量 (含环境变量与自定义变量)\n\nbash 可不只有环境变量喔，还有一些与 bash 操作接口有关的变量，以及用户自己定义的变量存在的。 那么这些变量如何观察呢？这个时候就得要使用 set 这个命令了。 set 除了环境变量之外， 还会将其他在 bash 内的变量通通显示出来哩！信息很多，底下鸟哥仅列出几个重要的内容：\n\n```\n[root@www ~]# set\nBASH=/bin/bash           <== bash 的主程序放置路径\nBASH_VERSINFO=([0]=\"3\" [1]=\"2\" [2]=\"25\" [3]=\"1\" [4]=\"release\" \n[5]=\"i686-redhat-linux-gnu\")      <== bash 的版本啊！\nBASH_VERSION='3.2.25(1)-release'  <== 也是 bash 的版本啊！\nCOLORS=/etc/DIR_COLORS.xterm      <== 使用的颜色纪录文件\nCOLUMNS=115              <== 在目前的终端机环境下，使用的字段有几个字符长度\nHISTFILE=/root/.bash_history      <== 历史命令记录的放置文件，隐藏档\nHISTFILESIZE=1000        <== 存起来(与上个变量有关)的文件之命令的最大纪录笔数。\nHISTSIZE=1000            <== 目前环境下，可记录的历史命令最大笔数。\nHOSTTYPE=i686            <== 主机安装的软件主要类型。我们用的是 i686 兼容机器软件\nIFS=$' \\t\\n'             <== 默认的分隔符\nLINES=35                 <== 目前的终端机下的最大行数\nMACHTYPE=i686-redhat-linux-gnu    <== 安装的机器类型\nMAILCHECK=60             <== 与邮件有关。每 60 秒去扫瞄一次信箱有无新信！\nOLDPWD=/home             <== 上个工作目录。我们可以用 cd - 来取用这个变量。\nOSTYPE=linux-gnu         <== 操作系统的类型！\nPPID=20025               <== 父程序的 PID (会在后续章节才介绍)\nPS1='[\\u@\\h \\W]\\$ '      <== PS1 就厉害了。这个是命令提示字符，也就是我们常见的\n                             [root@www ~]# 或 [dmtsai ~]$ 的配置值啦！可以更动的！\nPS2='> '                 <== 如果你使用跳脱符号 (\\) 第二行以后的提示字符也\nname=VBird               <== 刚刚配置的自定义变量也可以被列出来喔！\n$                        <== 目前这个 shell 所使用的 PID\n?                        <== 刚刚运行完命令的回传值。\n```\n\n一般来说，不论是否为环境变量，只要跟我们目前这个 shell 的操作接口有关的变量， 通常都会被配置为大写字符，也就是说，『基本上，在 Linux 默认的情况中，使用{大写的字母}来配置的变量一般为系统内定需要的变量』。 OK！OK！那么上头那些变量当中，有哪些是比较重要的？大概有这几个吧！\n\n- PS1\n\n  ：(提示字符的配置)\n\n  这是 PS1 (数字的 1 不是英文字母)，这个东西就是我们的『\n\n  命令提示字符\n\n  』喔！ 当我们每次按下 [Enter] 按键去运行某个命令后，最后要再次出现提示字符时， 就会主动去读取这个变量值了。上头 PS1 内显示的是一些特殊符号，这些特殊符号可以显示不同的信息， 每个 distributions 的 bash 默认的 PS1 变量内容可能有些许的差异，不要紧，『习惯你自己的习惯』就好了。 你可以用 man bash (\n\n  注3\n\n  )去查询一下 PS1 的相关说明，以理解底下的一些符号意义。\n\n  - \\d ：可显示出『星期 月 日』的日期格式，如：\"Mon Feb 2\"\n  - \\H ：完整的主机名。举例来说，鸟哥的练习机为『www.vbird.tsai』\n  - \\h ：仅取主机名在第一个小数点之前的名字，如鸟哥主机则为『www』后面省略\n  - \\t ：显示时间，为 24 小时格式的『HH:MM:SS』\n  - \\T ：显示时间，为 12 小时格式的『HH:MM:SS』\n  - \\A ：显示时间，为 24 小时格式的『HH:MM』\n  - \\@ ：显示时间，为 12 小时格式的『am/pm』样式\n  - \\u ：目前使用者的账号名称，如『root』；\n  - \\v ：BASH 的版本信息，如鸟哥的测试主板本为 3.2.25(1)，仅取『3.2』显示\n  - \\w ：完整的工作目录名称，由根目录写起的目录名称。但家目录会以 ~ 取代；\n  - \\W ：利用 basename 函数取得工作目录名称，所以仅会列出最后一个目录名。\n  - \\# ：下达的第几个命令。\n  - \\$ ：提示字符，如果是 root 时，提示字符为 # ，否则就是 $ 啰～\n\n  好了，让我们来看看 CentOS 默认的 PS1 内容吧：『[\\u@\\h \\W]\\$ 』，现在你知道那些反斜杠后的数据意义了吧？ 要注意喔！那个反斜杠后的数据为 PS1 的特殊功能，与 bash 的变量配置没关系啦！不要搞混了喔！ 那你现在知道为何你的命令提示字符是：『 [root@www ~]# 』了吧？ 好了，那么假设我想要有类似底下的提示字符：\n\n  > [root@www /home/dmtsai 16:50 #12]#\n\n  那个 # 代表第 12 次下达的命令。那么应该如何配置 PS1 呢？可以这样啊：\n\n  ```\n  [root@www ~ ]# cd /home\n  [root@www home]# PS1='[\\u@\\h \\w \\A #\\#]\\$ '\n  [root@www /home 17:02 #85]# \n  # 看到了吗？提示字符变了！变的很有趣吧！其中，那个 #85 比较有趣，\n  # 如果您再随便输入几次 ls 后，该数字就会添加喔！为啥？上面有说明滴！\n  ```\n\n  \n\n- **$**：(关于本 shell 的 PID)\n\n  钱字号本身也是个变量喔！这个咚咚代表的是『目前这个 Shell 的线程代号』，亦即是所谓的 PID (Process ID)。 更多的程序观念，我们会在第四篇的时候提及。想要知道我们的 shell 的 PID ，就可以用：『 echo $$ 』即可！出现的数字就是你的 PID 号码。\n\n  \n\n- ?\n\n  ：(关于上个运行命令的回传值)\n\n  什么？问号也是一个特殊的变量？没错！在 bash 里面这个变量可重要的很！ 这个变量是：『上一个运行的命令所回传的值』， 上面这句话的重点是『上一个命令』与『回传值』两个地方。当我们运行某些命令时， 这些命令都会回传一个运行后的代码。一般来说，如果成功的运行该命令， 则会回传一个 0 值，如果运行过程发生错误，就会回传『错误代码』才对！一般就是以非为 0 的数值来取代。 我们以底下的例子来看看：\n\n  ```\n  [root@www ~]# echo $SHELL\n  /bin/bash                                  <==可顺利显示！没有错误！\n  [root@www ~]# echo $?\n  0                                          <==因为没问题，所以回传值为 0\n  [root@www ~]# 12name=VBird\n  -bash: 12name=VBird: command not found     <==发生错误了！bash回报有问题\n  [root@www ~]# echo $?\n  127                                        <==因为有问题，回传错误代码(非为0)\n  # 错误代码回传值依据软件而有不同，我们可以利用这个代码来搜寻错误的原因喔！\n  [root@www ~]# echo $?\n  0\n  # 咦！怎么又变成正确了？这是因为 \"?\" 只与『上一个运行命令』有关，\n  # 所以，我们上一个命令是运行『 echo $? 』，当然没有错误，所以是 0 没错！\n  ```\n\n  \n\n- **OSTYPE, HOSTTYPE, MACHTYPE**：(主机硬件与核心的等级)\n\n  我们在[第零章、计算器概论内的 CPU 等级](http://cn.linux.vbird.org/linux_basic/0105computers.php#pc_cpu)说明中谈过 CPU ， 目前个人计算机的 CPU 主要分为 32/64 位，其中 32 位又可分为 i386, i586, i686，而 64 位则称为 x86_64。 由于不同等级的 CPU 命令集不太相同，因此你的软件可能会针对某些 CPU 进行优化，以求取较佳的软件性能。 所以软件就有 i386, i686 及 x86_64 之分。以目前 (2009) 的主流硬件来说，几乎都是 x86_64 的天下！ 但是毕竟旧机器还是非常多，以鸟哥的环境来说，我用 P-III 等级的计算机，所以上头就发现我的等级是 i686 啦！\n\n  要留意的是，较高阶的硬件通常会向下兼容旧有的软件，但较高阶的软件可能无法在旧机器上面安装！ 我们在[第三章](http://cn.linux.vbird.org/linux_basic/0130designlinux.php#beforeinstall_distro)就曾说明过， 这里再强调一次，你可以在 x86_64 的硬件上安装 i386 的 Linux 操作系统，但是你无法在 i686 的硬件上安装 x86_64 的 Linux 操作系统！这点得要牢记在心！\n\n  \n\n\n\n------\n\n- **export**： **自定义变量转成环境变量**\n\n谈了 env 与 set 现在知道有所谓的环境变量与自定义变量，那么这两者之间有啥差异呢？其实这两者的差异在于『 该变量是否会被子程序所继续引用』啦！唔！那么啥是父程序？子程序？ 这就得要了解一下命令的下达行为了。\n\n当你登陆 Linux 并取得一个 bash 之后，你的 bash 就是一个独立的程序，被称为 PID 的就是。 接下来你在这个 bash 底下所下达的任何命令都是由这个 bash 所衍生出来的，那些被下达的命令就被称为子程序了。 我们可以用底下的图示来简单的说明一下父程序与子程序的概念：\n\n![程序相关性示意图](media/ppid.gif)\n图 2.3.1、程序相关性示意图\n\n如上所示，我们在原本的 bash 底下运行另一个 bash ，结果操作的环境接口会跑到第二个 bash 去(就是子程序)， 那原本的 bash 就会在暂停的情况 (睡着了，就是 sleep)。整个命令运行的环境是实线的部分！若要回到原本的 bash 去， 就只有将第二个 bash 结束掉 (下达 exit 或 logout) 才行。更多的程序概念我们会在第四篇谈及，这里只要有这个概念即可。\n\n这个程序概念与变量有啥关系啊？关系可大了！因为子程序仅会继承父程序的环境变量， 子程序不会继承父程序的自定义变量啦！所以你在原本 bash 的自定义变量在进入了子程序后就会消失不见， 一直到你离开子程序并回到原本的父程序后，这个变量才会又出现！\n\n换个角度来想，也就是说，如果我能将自定义变量变成环境变量的话，那不就可以让该变量值继续存在于子程序了？ 呵呵！没错！此时，那个 export 命令就很有用啦！如你想要让该变量内容继续的在子程序中使用，那么就请运行：\n\n```\n[root@www ~]# export 变量名称 \n```\n\n这东西用在『分享自己的变量配置给后来呼叫的文件或其他程序』啦！ 像鸟哥常常在自己的主控文件后面呼叫其他附属文件(类似函式的功能)，但是主控文件与附属文件内都有相同的变量名称， 若一再重复配置时，要修改也很麻烦，此时只要在原本的第一个文件内配置好『 export 变量 』， 后面所呼叫的文件就能够使用这个变量配置了！而不需要重复配置，这非常实用于 shell script 当中喔！ 如果仅下达 export 而没有接变量时，那么此时将会把所有的『环境变量』秀出来喔！例如：\n\n```\n[root@www ~]# export declare -x HISTSIZE=\"1000\" declare -x HOME=\"/root\" declare -x HOSTNAME=\"www.vbird.tsai\" declare -x INPUTRC=\"/etc/inputrc\" declare -x LANG=\"en_US\" declare -x LOGNAME=\"root\" # 后面的鸟哥就都直接省略了！不然....浪费版面～ ^_^ \n```\n\n那如何将环境变量转成自定义变量呢？可以使用本章后续介绍的 [declare](http://cn.linux.vbird.org/linux_basic/0320bash_2.php#declare) 呢！\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**影响显示结果的语系变量 (locale)**\n\n还记得我们在[第五章里面提到的语系问题](http://cn.linux.vbird.org/linux_basic/0160startlinux.php#cmd_cmd_lang)吗？ 就是当我们使用 man command 的方式去查询某个数据的说明文件时，该说明档的内容可能会因为我们使用的语系不同而产生乱码。 另外，利用 ls 查询文件的时间时，也可能会有乱码出现在时间的部分。那个问题其实就是语系的问题啦。\n\n目前大多数的 Linux distributions 已经都是支持日渐流行的万国码了，也都支持大部分的国家语系。 这有赖于 [i18n (注4)](http://cn.linux.vbird.org/linux_basic/0320bash_2.php#ps4) 支持的帮助呢！ 那么我们的 Linux 到底支持了多少的语系呢？这可以由 locale 这个命令来查询到喔！\n\n```\n[root@www ~]# locale -a\n....(前面省略)....\nzh_TW\nzh_TW.big5     <==大五码的中文编码\nzh_TW.euctw\nzh_TW.utf8     <==万国码的中文编码\nzu_ZA\nzu_ZA.iso88591\nzu_ZA.utf8\n```\n\n正体中文语系至少支持了两种以上的编码，一种是目前还是很常见的 big5 ，另一种则是越来越热门的 utf-8 编码。 那么我们如何修订这些编码呢？其实可以透过底下这些变量的说：\n\n```\n[root@www ~]# locale  <==后面不加任何选项与参数即可！\nLANG=en_US                   <==主语言的环境\nLC_CTYPE=\"en_US\"             <==字符(文字)辨识的编码\nLC_NUMERIC=\"en_US\"           <==数字系统的显示信息\nLC_TIME=\"en_US\"              <==时间系统的显示数据\nLC_COLLATE=\"en_US\"           <==字符串的比较与排序等\nLC_MONETARY=\"en_US\"          <==币值格式的显示等\nLC_MESSAGES=\"en_US\"          <==信息显示的内容，如菜单、错误信息等\nLC_ALL=                      <==整体语系的环境\n....(后面省略)....\n```\n\n基本上，你可以逐一配置每个与语系有关的变量数据，但事实上，如果其他的语系变量都未配置， 且你有配置 LANG 或者是 LC_ALL 时，则其他的语系变量就会被这两个变量所取代！ 这也是为什么我们在 Linux 当中，通常说明仅配置 LANG 这个变量而已，因为他是最主要的配置变量！ 好了，那么你应该要觉得奇怪的是，为什么在 Linux 主机的终端机接口 (tty1 ~ tty6) 的环境下，如果配置『 LANG=zh_TW.big5 』这个配置值生效后，使用 man 或者其他信息输出时， 都会有一堆乱码，尤其是使用 ls -l 这个参数时？\n\n因为在 Linux 主机的终端机接口环境下是无法显示像中文这么复杂的编码文字， 所以就会产生乱码了。也就是如此，我们才会必须要在 tty1 ~ tty6 的环境下， 加装一些中文化接口的软件，才能够看到中文啊！不过，如果你是在 MS Windows 主机以远程联机服务器的软件联机到主机的话，那么，嘿嘿！其实文字接口确实是可以看到中文的。 此时反而你得要在 LANG 配置中文编码才好呢！\n\n你当然可以让每个使用者自己去调整自己喜好的语系，但是整体系统默认的语系定义在哪里呢？ 其实就是在 /etc/sysconfig/i18n 啰！这个文件在 CentOS 5.x 的内容有点像这样：\n\n```\n[root@www ~]# cat /etc/sysconfig/i18n \nLANG=\"zh_TW.UTF-8\" \n```\n\n因为鸟哥在[第四章的安装时](http://cn.linux.vbird.org/linux_basic/0157installcentos5.php)选择的是中文语系安装画面， 所以这个文件默认就会使用中文编码啦！你也可以自行将他改成你想要的语系编码即可。\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**变量的有效范围**\n\n什么？变量也有使用的『范围』？没错啊～我们在上头的 [export](http://cn.linux.vbird.org/linux_basic/0320bash_2.php#export) 命令说明中，就提到了这个概念了。如果在跑程序的时候，有父程序与子程序的不同程序关系时， 则『变量』可否被引用与 export 有关。被 export 后的变量，我们可以称他为『环境变量』！ 环境变量可以被子程序所引用，但是其他的自定义变量内容就不会存在于子程序中。\n\n在学理方面，为什么环境变量的数据可以被子程序所引用呢？这是因为内存配置的关系！理论上是这样的：\n\n- 当启动一个 shell，操作系统会分配一记忆区块给 shell 使用，此内存内之变量可让子程序取用\n- 若在父程序利用 export 功能，可以让自定义变量的内容写到上述的记忆区块当中(环境变量)；\n- 当加载另一个 shell 时 (亦即启动子程序，而离开原本的父程序了)，子 shell 可以将父 shell 的环境变量所在的记忆区块导入自己的环境变量区块当中。\n\n透过这样的关系，我们就可以让某些变量在相关的程序之间存在，以帮助自己更方便的操作环境喔！ 不过要提醒的是，这个『环境变量』与『bash 的操作环境』意思不太一样，举例来说， PS1 并不是环境变量， 但是这个 PS1 会影响到 bash 的接口 (提示字符嘛)！相关性要厘清喔！^_^\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**变量键盘读取、数组与宣告： read, array, declare**\n\n我们上面提到的变量配置功能，都是由命令列直接配置的，那么，可不可以让用户能够经由键盘输入？ 什么意思呢？是否记得某些程序运行的过程当中，会等待使用者输入 \"yes/no\" 之类的信息啊？ 在 bash 里面也有相对应的功能喔！此外，我们还可以宣告这个变量的属性， 例如：数组或者是数字等等的。底下就来看看吧！\n\n\n\n\n\n------\n\n- ### read\n\n要读取来自键盘输入的变量，就是用 read 这个命令了。这个命令最常被用在 shell script 的撰写当中， 想要跟使用者对谈？用这个命令就对了。关于 script 的写法，我们会在第十三章介绍，底下先来瞧一瞧 read 的相关语法吧！\n\n```\n[root@www ~]# read [-pt] variable\n选项与参数：\n-p  ：后面可以接提示字符！\n-t  ：后面可以接等待的『秒数！』这个比较有趣～不会一直等待使用者啦！\n\n范例一：让用户由键盘输入一内容，将该内容变成名为 atest 的变量\n[root@www ~]# read atest\nThis is a test        <==此时光标会等待你输入！请输入左侧文字看看\n[root@www ~]# echo $atest\nThis is a test          <==你刚刚输入的数据已经变成一个变量内容！\n\n范例二：提示使用者 30 秒内输入自己的大名，将该输入字符串作为名为 named 的变量内容\n[root@www ~]# read -p \"Please keyin your name: \" -t 30 named\nPlease keyin your name: VBird Tsai   <==注意看，会有提示字符喔！\n[root@www ~]# echo $named\nVBird Tsai        <==输入的数据又变成一个变量的内容了！\n```\n\nread 之后不加任何参数，直接加上变量名称，那么底下就会主动出现一个空白行等待你的输入(如范例一)。 如果加上 -t 后面接秒数，例如上面的范例二，那么 30 秒之内没有任何动作时， 该命令就会自动略过了～如果是加上 -p ，嘿嘿！在输入的光标前就会有比较多可以用的提示字符给我们参考！ 在命令的下达里面，比较美观啦！ ^_^\n\n\n\n\n\n------\n\n- ### declare / typeset\n\ndeclare 或 typeset 是一样的功能，就是在『宣告变量的类型』。如果使用 declare 后面并没有接任何参数，那么 bash 就会主动的将所有的变量名称与内容通通叫出来，就好像使用 set 一样啦！ 那么 declare 还有什么语法呢？看看先：\n\n```\n[root@www ~]# declare [-aixr] variable\n选项与参数：\n-a  ：将后面名为 variable 的变量定义成为数组 (array) 类型\n-i  ：将后面名为 variable 的变量定义成为整数数字 (integer) 类型\n-x  ：用法与 export 一样，就是将后面的 variable 变成环境变量；\n-r  ：将变量配置成为 readonly 类型，该变量不可被更改内容，也不能 unset\n\n范例一：让变量 sum 进行 100+300+50 的加总结果\n[root@www ~]# sum=100+300+50\n[root@www ~]# echo $sum\n100+300+50  <==咦！怎么没有帮我计算加总？因为这是文字型态的变量属性啊！\n[root@www ~]# declare -i sum=100+300+50\n[root@www ~]# echo $sum\n450         <==瞭乎？？\n```\n\n由于在默认的情况底下， bash 对于变量有几个基本的定义：\n\n- 变量类型默认为『字符串』，所以若不指定变量类型，则 1+2 为一个『字符串』而不是『计算式』。 所以上述第一个运行的结果才会出现那个情况的；\n- bash 环境中的数值运算，默认最多仅能到达整数形态，所以 1/3 结果是 0；\n\n现在你晓得为啥你需要进行变量宣告了吧？如果需要非字符串类型的变量，那就得要进行变量的宣告才行啦！ 底下继续来玩些其他的 declare 功能。\n\n```\n范例二：将 sum 变成环境变量\n[root@www ~]# declare -x sum\n[root@www ~]# export | grep sum\ndeclare -ix sum=\"450\"  <==果然出现了！包括有 i 与 x 的宣告！\n\n范例三：让 sum 变成只读属性，不可更动！\n[root@www ~]# declare -r sum\n[root@www ~]# sum=tesgting\n-bash: sum: readonly variable  <==老天爷～不能改这个变量了！\n\n范例四：让 sum 变成非环境变量的自定义变量吧！\n[root@www ~]# declare +x sum  <== 将 - 变成 + 可以进行『取消』动作\n[root@www ~]# declare -p sum  <== -p 可以单独列出变量的类型\ndeclare -ir sum=\"450\" <== 看吧！只剩下 i, r 的类型，不具有 x 啰！\n```\n\ndeclare 也是个很有用的功能～尤其是当我们需要使用到底下的数组功能时， 他也可以帮我们宣告数组的属性喔！不过，老话一句，数组也是在 shell script 比较常用的啦！ 比较有趣的是，如果你不小心将变量配置为『只读』，通常得要注销再登陆才能复原该变量的类型了！ @_@\n\n\n\n\n\n------\n\n- ### 数组 (array) 变量类型\n\n某些时候，我们必须使用数组来宣告一些变量，这有什么好处啊？在一般人的使用上， 果然是看不出来有什么好处的！不过，如果您曾经写过程序的话，那才会比较了解数组的意义～ 数组对写数值程序的设计师来说，可是不能错过学习的重点之一哩！好！不啰唆～ 那么要如何配置数组的变量与内容呢？在 bash 里头，数组的配置方式是：\n\n> var[index]=content\n\n意思是说，我有一个数组名为 var ，而这个数组的内容为 var[1]=小明， var[2]=大明， var[3]=好明 .... 等等，那个 index 就是一些数字啦，重点是用中刮号 ([ ]) 来配置的。 目前我们 bash 提供的是一维数组。老实说，如果您不必写一些复杂的程序， 那么这个数组的地方，可以先略过，等到有需要再来学习即可！因为要制作出数组， 通常与循环或者其他判断式交互使用才有比较高的存在意义！\n\n```\n范例：配置上面提到的 var[1] ～ var[3] 的变量。\n[root@www ~]# var[1]=\"small min\"\n[root@www ~]# var[2]=\"big min\"\n[root@www ~]# var[3]=\"nice min\"\n[root@www ~]# echo \"${var[1]}, ${var[2]}, ${var[3]}\"\nsmall min, big min, nice min\n```\n\n数组的变量类型比较有趣的地方在于『读取』，一般来说，建议直接以 ${数组} 的方式来读取，比较正确无误的啦！\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**与文件系统及程序的限制关系： ulimit**\n\n想象一个状况：我的 Linux 主机里面同时登陆了十个人，这十个人不知怎么搞的， 同时开启了 100 个文件，每个文件的大小约 10MBytes ，请问一下， 我的 Linux 主机的内存要有多大才够？ 10*100*10 = 10000 MBytes = 10GBytes ... 老天爷，这样，系统不挂点才有鬼哩！为了要预防这个情况的发生，所以我们的 bash 是可以『限制用户的某些系统资源』的，包括可以开启的文件数量， 可以使用的 CPU 时间，可以使用的内存总量等等。如何配置？用 ulimit 吧！\n\n```\n\n[root@www ~]# ulimit [-SHacdfltu] [配额]\n选项与参数：\n-H  ：hard limit ，严格的配置，必定不能超过这个配置的数值；\n-S  ：soft limit ，警告的配置，可以超过这个配置值，但是若超过则有警告信息。\n      在配置上，通常 soft 会比 hard 小，举例来说，soft 可配置为 80 而 hard \n      配置为 100，那么你可以使用到 90 (因为没有超过 100)，但介于 80~100 之间时，\n      系统会有警告信息通知你！\n-a  ：后面不接任何选项与参数，可列出所有的限制额度；\n-c  ：当某些程序发生错误时，系统可能会将该程序在内存中的信息写成文件(除错用)，\n      这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。\n-f  ：此 shell 可以创建的最大文件容量(一般可能配置为 2GB)单位为 Kbytes\n-d  ：程序可使用的最大断裂内存(segment)容量；\n-l  ：可用于锁定 (lock) 的内存量\n-t  ：可使用的最大 CPU 时间 (单位为秒)\n-u  ：单一用户可以使用的最大程序(process)数量。\n\n范例一：列出你目前身份(假设为root)的所有限制数据数值\n[root@www ~]# ulimit -a\ncore file size          (blocks, -c) 0          <==只要是 0 就代表没限制\ndata seg size           (kbytes, -d) unlimited\nscheduling priority             (-e) 0\nfile size               (blocks, -f) unlimited  <==可创建的单一文件的大小\npending signals                 (-i) 11774\nmax locked memory       (kbytes, -l) 32\nmax memory size         (kbytes, -m) unlimited\nopen files                      (-n) 1024       <==同时可开启的文件数量\npipe size            (512 bytes, -p) 8\nPOSIX message queues     (bytes, -q) 819200\nreal-time priority              (-r) 0\nstack size              (kbytes, -s) 10240\ncpu time               (seconds, -t) unlimited\nmax user processes              (-u) 11774\nvirtual memory          (kbytes, -v) unlimited\nfile locks                      (-x) unlimited\n\n范例二：限制用户仅能创建 10MBytes 以下的容量的文件\n[root@www ~]# ulimit -f 10240\n[root@www ~]# ulimit -a\nfile size               (blocks, -f) 10240 <==最大量为10240Kbyes，相当10Mbytes\n[root@www ~]# dd if=/dev/zero of=123 bs=1M count=20\nFile size limit exceeded <==尝试创建 20MB 的文件，结果失败了！\n```\n\n还记得我们在[第八章 Linux 磁盘文件系统](http://cn.linux.vbird.org/linux_basic/0230filesystem.php)里面提到过，单一 filesystem 能够支持的单一文件大小与 block 的大小有关。例如 block size 为 1024 byte 时，单一文件可达 16GB 的容量。但是，我们可以用 ulimit 来限制使用者可以创建的文件大小喔！ 利用 ulimit -f 就可以来配置了！例如上面的范例二，要注意单位喔！单位是 Kbytes。 若改天你一直无法创建一个大容量的文件，记得瞧一瞧 ulimit 的信息喔！\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**变量内容的删除、取代与替换**\n\n变量除了可以直接配置来修改原本的内容之外，有没有办法透过简单的动作来将变量的内容进行微调呢？ 举例来说，进行变量内容的删除、取代与替换等！是可以的！我们可以透过几个简单的小步骤来进行变量内容的微调喔！ 底下就来试试看！\n\n\n\n\n\n------\n\n- ### 变量内容的删除与取代\n\n变量的内容可以很简单的透过几个咚咚来进行删除喔！我们使用 PATH 这个变量的内容来做测试好了。 请你依序进行底下的几个例子来玩玩，比较容易感受的到鸟哥在这里想要表达的意义：\n\n```\n范例一：先让小写的 path 自定义变量配置的与 PATH 内容相同\n[root@www ~]# path=${PATH}\n[root@www ~]# echo $path\n/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:\n/usr/sbin:/usr/bin:/root/bin  <==这两行其实是同一行啦！\n\n范例二：假设我不喜欢 kerberos，所以要将前两个目录删除掉，如何显示？\n[root@www ~]# echo ${path#/*kerberos/bin:}\n/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin\n```\n\n上面这个范例很有趣的！他的重点可以用底下这张表格来说明：\n\n```\n${variable#/*kerberos/bin:}\n   上面的特殊字体部分是关键词！用在这种删除模式所必须存在的\n\n${variable#/*kerberos/bin:}\n   这就是原本的变量名称，以上面范例二来说，这里就填写 path 这个『变量名称』啦！\n\n${variable#/*kerberos/bin:}\n   这是重点！代表『从变量内容的最前面开始向右删除』，且仅删除最短的那个\n\n${variable#/*kerberos/bin:}\n   代表要被删除的部分，由于 # 代表由前面开始删除，所以这里便由开始的 / 写起。\n   需要注意的是，我们还可以透过通配符 * 来取代 0 到无穷多个任意字符\n\n   以上面范例二的结果来看， path 这个变量被删除的内容如下所示：\n/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:\n/usr/sbin:/usr/bin:/root/bin  <==这两行其实是同一行啦！\n```\n\n很有趣吧！这样了解了 # 的功能了吗？接下来让我们来看看底下的范例三！\n\n```\n范例三：我想要删除前面所有的目录，仅保留最后一个目录\n[root@www ~]# echo ${path#/*:}\n/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:\n/root/bin     <==这两行其实是同一行啦！\n# 由于一个 # 仅删除掉最短的那个，因此他删除的情况可以用底下的删除线来看：\n# /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:\n# /usr/sbin:/usr/bin:/root/bin  <==这两行其实是同一行啦！\n\n[root@www ~]# echo ${path##/*:}\n/root/bin\n# 嘿！多加了一个 # 变成 ## 之后，他变成『删除掉最长的那个数据』！亦即是：\n# /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:\n# /usr/sbin:/usr/bin:/root/bin  <==这两行其实是同一行啦！\n```\n\n非常有趣！不是吗？因为在 PATH 这个变量的内容中，每个目录都是以冒号『:』隔开的， 所以要从头删除掉目录就是介于斜线 (/) 到冒号 (:) 之间的数据！但是 PATH 中不止一个冒号 (:) 啊！ 所以 # 与 ## 就分别代表：\n\n- \\# ：符合取代文字的『最短的』那一个；\n- \\##：符合取代文字的『最长的』那一个\n\n上面谈到的是『从前面开始删除变量内容』，那么如果想要『从后面向前删除变量内容』呢？ 这个时候就得使用百分比 (%) 符号了！来看看范例四怎么做吧！\n\n```\n范例四：我想要删除最后面那个目录，亦即从 : 到 bin 为止的字符串\n[root@www ~]# echo ${path%:*bin}\n/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:\n/usr/sbin:/usr/bin  <==注意啊！最后面一个目录不见去！\n# 这个 % 符号代表由最后面开始向前删除！所以上面得到的结果其实是来自如下：\n# /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:\n# /usr/sbin:/usr/bin:/root/bin  <==这两行其实是同一行啦！\n\n范例五：那如果我只想要保留第一个目录呢？\n[root@www ~]# echo ${path%%:*bin}\n/usr/kerberos/sbin\n# 同样的， %% 代表的则是最长的符合字符串，所以结果其实是来自如下：\n# /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:\n# /usr/sbin:/usr/bin:/root/bin  <==这两行其实是同一行啦！\n```\n\n由于我是想要由变量内容的后面向前面删除，而我这个变量内容最后面的结尾是『/root/bin』， 所以你可以看到上面我删除的数据最终一定是『bin』，亦即是『:*bin』那个 * 代表通配符！ 至于 % 与 %% 的意义其实与 # 及 ## 类似！这样理解否？\n\n了解了删除功能后，接下来谈谈取代吧！继续玩玩范例六啰！\n\n```\n\n范例六：将 path 的变量内容内的 sbin 取代成大写 SBIN：\n[root@www ~]# echo ${path/sbin/SBIN}\n/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:\n/usr/sbin:/usr/bin:/root/bin\n# 这个部分就容易理解的多了！关键词在于那两个斜线，两斜线中间的是旧字符串\n# 后面的是新字符串，所以结果就会出现如上述的特殊字体部分啰！\n\n[root@www ~]# echo ${path//sbin/SBIN}\n/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:\n/usr/SBIN:/usr/bin:/root/bin\n# 如果是两条斜线，那么就变成所有符合的内容都会被取代喔！\n```\n\n我们将这部份作个总结说明一下：\n\n| 变量配置方式                                         | 说明                                                         |\n| ---------------------------------------------------- | ------------------------------------------------------------ |\n| ${变量#关键词} ${变量##关键词}                       | 若变量内容从头开始的数据符合『关键词』，则将符合的最短数据删除 若变量内容从头开始的数据符合『关键词』，则将符合的最长数据删除 |\n| ${变量%关键词} ${变量%%关键词}                       | 若变量内容从尾向前的数据符合『关键词』，则将符合的最短数据删除 若变量内容从尾向前的数据符合『关键词』，则将符合的最长数据删除 |\n| ${变量/旧字符串/新字符串} ${变量//旧字符串/新字符串} | 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』 若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』 |\n\n\n\n------\n\n- ### 变量的测试与内容替换\n\n在某些时刻我们常常需要『判断』某个变量是否存在，若变量存在则使用既有的配置，若变量不存在则给予一个常用的配置。 我们举底下的例子来说明好了，看看能不能较容易被你所理解呢！\n\n```\n范例一：测试一下是否存在 username 这个变量，若不存在则给予 username 内容为 root [root@www ~]# echo $username           <==由于出现空白，所以 username 可能不存在，也可能是空字符串 [root@www ~]# username=${username-root} [root@www ~]# echo $username root       <==因为 username 没有配置，所以主动给予名为 root 的内容。 [root@www ~]# username=\"vbird tsai\" <==主动配置 username 的内容 [root@www ~]# username=${username-root} [root@www ~]# echo $username vbird tsai <==因为 username 已经配置了，所以使用旧有的配置而不以 root 取代 \n```\n\n在上面的范例中，重点在于减号『 - 』后面接的关键词！基本上你可以这样理解：\n\n```\nnew_var=${old_var-content}   新的变量，主要用来取代旧变量。新旧变量名称其实常常是一样的 new_var=${old_var-content}   这是本范例中的关键词部分！必须要存在的哩！ new_var=${old_var-content}   旧的变量，被测试的项目！ new_var=${old_var-content}   变量的『内容』，在本范例中，这个部分是在『给予未配置变量的内容』 \n```\n\n不过这还是有点问题！因为 username 可能已经被配置为『空字符串』了！果真如此的话，那你还可以使用底下的范例来给予 username 的内容成为 root 喔！\n\n```\n范例二：若 username 未配置或为空字符串，则将 username 内容配置为 root [root@www ~]# username=\"\" [root@www ~]# username=${username-root} [root@www ~]# echo $username      <==因为 username 被配置为空字符串了！所以当然还是保留为空字符串！ [root@www ~]# username=${username:-root} [root@www ~]# echo $username root  <==加上『 : 』后若变量内容为空或者是未配置，都能够以后面的内容替换！ \n```\n\n在大括号内有没有冒号『 : 』的差别是很大的！加上冒号后，被测试的变量未被配置或者是已被配置为空字符串时， 都能够用后面的内容 (本例中是使用 root 为内容) 来替换与配置！这样可以了解了吗？除了这样的测试之外， 还有其他的测试方法喔！鸟哥将他整理如下：\n\n| **Tips:** 底下的例子当中，那个 var 与 str 为变量，我们想要针对 str 是否有配置来决定 var 的值喔！ 一般来说， str: 代表『str 没配置或为空的字符串时』；至于 str 则仅为『没有该变量』。 | ![鸟哥的图示](http://cn.linux.vbird.org/linux_basic/0320bash_files/vbird_face.gif) |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n|                                                              |                                                              |\n\n\n\n| 变量配置方式     | str 没有配置       | str 为空字符串     | str 已配置非为空字符串 |\n| ---------------- | ------------------ | ------------------ | ---------------------- |\n| var=${str-expr}  | var=expr           | var=               | var=$str               |\n| var=${str:-expr} | var=expr           | var=expr           | var=$str               |\n| var=${str+expr}  | var=               | var=expr           | var=expr               |\n| var=${str:+expr} | var=               | var=               | var=expr               |\n| var=${str=expr}  | str=expr var=expr  | str 不变 var=      | str 不变 var=$str      |\n| var=${str:=expr} | str=expr var=expr  | str=expr var=expr  | str 不变 var=$str      |\n| var=${str?expr}  | expr 输出至 stderr | var=               | var=$str               |\n| var=${str:?expr} | expr 输出至 stderr | expr 输出至 stderr | var=$str               |\n\n\n\n根据上面这张表，我们来进行几个范例的练习吧！ ^_^！首先让我们来测试一下，如果旧变量 (str) 不存在时， 我们要给予新变量一个内容，若旧变量存在则新变量内容以旧变量来替换，结果如下：\n\n```\n范例一：测试一下是否存在 username 这个变量，若不存在则给予 username 内容为 root\n[root@www ~]# echo $username\n           <==由于出现空白，所以 username 可能不存在，也可能是空字符串\n[root@www ~]# username=${username-root}\n[root@www ~]# echo $username\nroot       <==因为 username 没有配置，所以主动给予名为 root 的内容。\n[root@www ~]# username=\"vbird tsai\" <==主动配置 username 的内容\n[root@www ~]# username=${username-root}\n[root@www ~]# echo $username\nvbird tsai <==因为 username 已经配置了，所以使用旧有的配置而不以 root 取代\n```\n\n关于减号 (-) 其实上面我们谈过了！这里的测试只是要让你更加了解，这个减号的测试并不会影响到旧变量的内容。 如果你想要将旧变量内容也一起替换掉的话，那么就使用等号 (=) 吧！\n\n```\nnew_var=${old_var-content}\n   新的变量，主要用来取代旧变量。新旧变量名称其实常常是一样的\n\nnew_var=${old_var-content}\n   这是本范例中的关键词部分！必须要存在的哩！\n\nnew_var=${old_var-content}\n   旧的变量，被测试的项目！\n\nnew_var=${old_var-content}\n   变量的『内容』，在本范例中，这个部分是在『给予未配置变量的内容』\n```\n\n那如果我只是想知道，如果旧变量不存在时，整个测试就告知我『有错误』，此时就能够使用问号『 ? 』的帮忙啦！ 底下这个测试练习一下先！\n\n```\n测试：若 str 不存在时，则 var 的测试结果直接显示 \"无此变量\"\n[root@www ~]# unset str; var=${str?无此变量}\n-bash: str: 无此变量    <==因为 str 不存在，所以输出错误信息 \n\n测试：若 str 存在时，则 var 的内容会与 str 相同！\n[root@www ~]# str=\"oldvar\"; var=${str?novar}\n[root@www ~]# echo var=\"$var\", str=\"$str\"\nvar=oldvar, str=oldvar  <==因为 str 存在，所以 var 等于 str 的内容\n```\n\n基本上这种变量的测试也能够透过 shell script 内的 if...then... 来处理， 不过既然 bash 有提供这么简单的方法来测试变量，那我们也可以多学一些嘛！ 不过这种变量测试通常是在程序设计当中比较容易出现，如果这里看不懂就先略过，未来有用到判断变量值时，再回来看看吧！ ^_^"
  },
  {
    "path": "Linux/认识BASH这个Shell.md",
    "content": "# **认识BASH这个Shell**\n\n## ![大标题的图示](http://cn.linux.vbird.org/image/logo.png)**认识 BASH 这个 Shell**\n\n我们在[第一章 Linux 是什么](http://cn.linux.vbird.org/linux_basic/0110whatislinux.php)当中提到了： 管理整个计算机硬件的其实是操作系统的核心 (kernel)，这个核心是需要被保护的！ 所以我们一般使用者就只能透过 shell 来跟核心沟通，以让核心达到我们所想要达到的工作。 那么系统有多少 shell 可用呢？为什么我们要使用 bash 啊？底下分别来谈一谈喔！\n\n\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**硬件、核心与 Shell**\n\n这应该是个蛮有趣的话题：『什么是 Shell 』？相信只要摸过计算机，对于操作系统 (不论是 Linux 、 Unix 或者是 Windows) 有点概念的朋友们大多听过这个名词，因为只要有『操作系统』那么就离不开 Shell 这个东西。不过，在讨论 Shell 之前，我们先来了解一下计算机的运行状况吧！ 举个例子来说：当你要计算机传输出来『音乐』的时候，你的计算机需要什么东西呢？\n\n1. 硬件：当然就是需要你的硬件有『声卡芯片』这个配备，否则怎么会有声音；\n2. 核心管理：操作系统的核心可以支持这个芯片组，当然还需要提供芯片的驱动程序啰；\n3. 应用程序：需要使用者 (就是你) 输入发生声音的命令啰！\n\n这就是基本的一个输出声音所需要的步骤！也就是说，你必须要『输入』一个命令之后， 『硬件』才会透过你下达的命令来工作！那么硬件如何知道你下达的命令呢？那就是 kernel (核心) 的控制工作了！也就是说，我们必须要透过『 Shell 』将我们输入的命令与 Kernel 沟通，好让 Kernel 可以控制硬件来正确无误的工作！ 基本上，我们可以透过底下这张图来说明一下：\n\n![硬件、核心与用户的相关性图标](./media/0320bash_1.jpg)\n图 1.1.1、硬件、核心与用户的相关性图示\n\n我们在[第零章内的操作系统小节](http://cn.linux.vbird.org/linux_basic/0105computers.php#program_os)曾经提到过， 操作系统其实是一组软件，由于这组软件在控制整个硬件与管理系统的活动监测， 如果这组软件能被用户随意的操作，若使用者应用不当，将会使得整个系统崩溃！因为操作系统管理的就是整个硬件功能嘛！ 所以当然不能够随便被一些没有管理能力的终端用户随意使用啰！\n\n但是我们总是需要让用户操作系统的，所以就有了在操作系统上面发展的应用程序啦！用户可以透过应用程序来指挥核心， 让核心达成我们所需要的硬件任务！如果考虑如[第零章所提供的操作系统图标(图4.2.1)](http://cn.linux.vbird.org/linux_basic/0105computers/os_01.gif)， 我们可以发现应用程序其实是在最外层，就如同鸡蛋的外壳一样，因此这个咚咚也就被称呼为壳程序 (shell) 啰！\n\n其实壳程序的功能只是提供用户操作系统的一个接口，因此这个壳程序需要可以呼叫其他软件才好。 我们在第五章到第十章提到过很多命令，包括 man, chmod, chown, vi, fdisk, mkfs 等等命令，这些命令都是独立的应用程序， 但是我们可以透过壳程序 (就是命令列模式) 来操作这些应用程序，让这些应用程序呼叫核心来运行所需的工作哩！ 这样对于壳程序是否有了一定的概念了？\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**为何要学文字接口的 shell？**\n\n文字接口的 shell 是很不好学的，但是学了之后好处多多！所以， 在这里鸟哥要先对您进行一些心理建设，先来了解一下为啥学习 shell 是有好处的，这样你才会有信心继续玩下去 ^_^\n\n\n\n------\n\n- ### 文字接口的 shell：大家都一样！\n\n鸟哥常常听到这个问题：『我干嘛要学习 shell 呢？ 不是已经有很多的工具可以提供我配置我的主机了？我为何要花这么多时间去学命令呢？不是以 X Window 按一按几个按钮就可以搞定了吗？』唉～还是得一再地强调， X Window 还有 Web 接口的配置工具例如 Webmin ([注1](http://cn.linux.vbird.org/linux_basic/0320bash_1.php#ps1)) 是真的好用的家伙， 他真的可以帮助我们很简易的配置好我们的主机，甚至是一些很进阶的配置都可以帮我们搞定。\n\n但是鸟哥在前面的章节里面也已经提到过相当多次了， X Window 与 web 接口的工具，他的接口虽然亲善，功能虽然强大， 但毕竟他是将所有利用到的软件都整合在一起的一组应用程序而已， 并非是一个完整的套件，所以某些时候当你升级或者是使用其他套件管理模块 (例如 tarball 而非 rpm 文件等等) 时，就会造成配置的困扰了。甚至不同的 distribution 所设计的 X window 接口也都不相同，这样也造成学习方面的困扰。\n\n文字接口的 shell 就不同了！几乎各家 distributions 使用的 bash 都是一样的！如此一来， 你就能够轻轻松松的转换不同的 distributions ，就像武侠小说里面提到的『一法通、万法通！』\n\n\n\n------\n\n- ### 远程管理：文字接口就是比较快！\n\n此外，Linux 的管理常常需要透过远程联机，而联机时文字接口的传输速度一定比较快， 而且，较不容易出现断线或者是信息外流的问题，因此，shell 真的是得学习的一项工具。而且，他可以让您更深入 Linux ，更了解他，而不是只会按一按鼠标而已！所谓『天助自助者！』多摸一点文本模式的东西，会让你与 Linux 更亲近呢！\n\n\n\n------\n\n- ### Linux 的任督二脉： shell 是也！\n\n有些朋友也很可爱，常会说：『我学这么多干什么？ 又不常用，也用不到！』嘿嘿！有没有听过『书到用时方恨少？』 当你的主机一切安然无恙的时候，您当然会觉得好像学这么多的东西一点帮助也没有呀！ 万一，某一天真的不幸给他中标了，您该如何是好？是直接重新安装？ 还是先追踪入侵来源后进行漏洞的修补？或者是干脆就关站好了？这当然涉及很多的考虑， 但就以鸟哥的观点来看，多学一点总是好的，尤其我们可以有备而无患嘛！甚至学的不精也没有关系，了解概念也就 OK 啦！毕竟没有人要您一定要背这么多的内容啦！了解概念就很了不起了！\n\n此外，如果你真的有心想要将您的主机管理的好，那么良好的 shell 程序编写是一定需要的啦！就鸟哥自己来说，鸟哥管理的主机虽然还不算多， 只有区区不到十部，但是如果每部主机都要花上几十分钟来查阅他的登录文件信息以及相关的信息， 那么鸟哥可能会疯掉！基本上，也太没有效率了！这个时候，如果能够藉由 shell 提供的数据流重导向以及管线命令，呵呵！ 那么鸟哥分析登录信息只要花费不到十分钟就可以看完所有的主机之重要信息了！相当的好用呢！\n\n由于学习 shell 的好处真的是多多啦！所以，如果你是个系统管理员，或者有心想要管理系统的话，那么 shell 与 shell scripts 这个东西真的有必要看一看！因为他就像『打通任督二脉，任何武功都能随你应用』的说！\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**系统的合法 shell 与 /etc/shells 功能**\n\n知道什么是 Shell 之后，那么我们来了解一下 Linux 使用的是哪一个 shell 呢？什么！哪一个？难道说 shell 不就是『一个 shell 吗？』哈哈！那可不！由于早年的 Unix 年代，发展者众，所以由于 shell 依据发展者的不同就有许多的版本，例如常听到的 Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等，每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』，这个 Shell 是 Bourne Shell 的增强版本，也是基准于 GNU 的架构下发展出来的呦！\n\n在介绍 shell 的优点之前，先来说一说 shell 的简单历史吧([注2](http://cn.linux.vbird.org/linux_basic/0320bash_1.php#ps2))：第一个流行的 shell 是由 Steven Bourne 发展出来的，为了纪念他所以就称为 Bourne shell ，或直接简称为 sh ！而后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ，这个 shell 的语法有点类似 C 语言，所以才得名为 C shell ，简称为 csh ！由于在学术界 Sun 主机势力相当的庞大，而 Sun 主要是 BSD 的分支之一，所以 C shell 也是另一个很重要而且流传很广的 shell 之一 。\n\n那么目前我们的 Linux (以 CentOS 5.x 为例) 有多少我们可以使用的 shells 呢？ 你可以检查一下 /etc/shells 这个文件，至少就有底下这几个可以用的 shells：\n\n- /bin/sh (已经被 /bin/bash 所取代)\n- /bin/bash (就是 Linux 默认的 shell)\n- /bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的，兼容于 bash)\n- /bin/tcsh (整合 C Shell ，提供更多的功能)\n- /bin/csh (已经被 /bin/tcsh 所取代)\n- /bin/zsh (基于 ksh 发展出来的，功能更强大的 shell)\n\n虽然各家 shell 的功能都差不多，但是在某些语法的下达方面则有所不同，因此建议你还是得要选择某一种 shell 来熟悉一下较佳。 Linux 默认就是使用 bash ，所以最初你只要学会 bash 就非常了不起了！ ^_^！ 另外，咦！为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件啊？ 这是因为系统某些服务在运行过程中，会去检查使用者能够使用的 shells ，而这些 shell 的查询就是藉由 /etc/shells 这个文件啰！\n\n举例来说，某些 FTP 网站会去检查使用者的可用 shell ，而如果你不想要让这些使用者使用 FTP 以外的主机资源时，可能会给予该使用者一些怪怪的 shell，让使用者无法以其他服务登陆主机。 这个时候，你就得将那些怪怪的 shell 写到 /etc/shells 当中了。举例来说，我们的 CentOS 5.x 的 /etc/shells 里头就有个 /sbin/nologin 文件的存在，这个就是我们说的怪怪的 shell 啰～\n\n那么，再想一想，我这个使用者什么时候可以取得 shell 来工作呢？还有， 我这个使用者默认会取得哪一个 shell 啊？还记得我们在[第五章的在终端界面登陆linux小节](http://cn.linux.vbird.org/linux_basic/0160startlinux.php#start_cmd)当中提到的登陆动作吧？ 当我登陆的时候，系统就会给我一个 shell 让我来工作了。 而这个登陆取得的 shell 就记录在 /etc/passwd 这个文件内！这个文件的内容是啥？\n\n```\n[root@www ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(底下省略)..... \n```\n\n如上所示，在每一行的最后一个数据，就是你登陆后可以取得的默认的 shell 啦！那你也会看到， root 是 /bin/bash ，不过，系统账号 bin 与 daemon 等等，就使用那个怪怪的 /sbin/nologin 啰～关于使用者这部分的内容，我们留在[第十四章的账号管理](http://cn.linux.vbird.org/linux_basic/0410accountmanager.php)时提供更多的说明。\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**Bash shell 的功能**\n\n既然 /bin/bash 是 Linux 默认的 shell ，那么总是得了解一下这个玩意儿吧！bash 是 GNU 计划中重要的工具软件之一，目前也是 Linux distributions 的标准 shell 。 bash 主要兼容于 sh ，并且依据一些使用者需求，而加强的 shell 版本。不论你使用的是那个 distribution ，你都难逃需要学习 bash 的宿命啦！那么这个 shell 有什么好处，干嘛 Linux 要使用他作为默认的 shell 呢？ bash 主要的优点有底下几个：\n\n\n\n------\n\n- ### 命令编修能力 (history)：\n\nbash 的功能里头，鸟哥个人认为相当棒的一个就是『他能记忆使用过的命令！』 这功能真的相当的棒！因为我只要在命令列按『上下键』就可以找到前/后一个输入的命令！而在很多 distribution 里头，默认的命令记忆功能可以到达 1000 个！也就是说， 你曾经下达过的命令几乎都被记录下来了。\n\n这么多的命令记录在哪里呢？在你的家目录内的 .bash_history 啦！ 不过，需要留意的是，~/.bash_history 记录的是前一次登陆以前所运行过的命令， 而至于这一次登陆所运行的命令都被缓存在内存中，当你成功的注销系统后，该命令记忆才会记录到 .bash_history 当中！\n\n这有什么功能呢？最大的好处就是可以『查询曾经做过的举动！』 如此可以知道你的运行步骤，那么就可以追踪你曾下达过的命令，以作为除错的工具！ 但如此一来也有个烦恼，就是如果被黑客入侵了，那么他只要翻你曾经运行过的命令， 刚好你的命令又跟系统有关 (例如直接输入 MySQL 的密码在命令列上面)，那你的主机可就伤脑筋了！ 到底记录命令的数目越多还是越少越好？这部份是见仁见智啦，没有一定的答案的。\n\n\n\n\n\n------\n\n- ### 命令与文件补全功能： ([tab] 按键的好处)\n\n还记得我们在[第五章内的重要的几个热键小节](http://cn.linux.vbird.org/linux_basic/0160startlinux.php#cmd_hkey)当中提到的 [tab] 这个按键吗？这个按键的功能就是在 bash 里头才有的啦！常常在 bash 环境中使用 [tab] 是个很棒的习惯喔！因为至少可以让你 1)少打很多字； 2)确定输入的数据是正确的！ 使用 [tab] 按键的时机依据 [tab] 接在命令后或参数后而有所不同。我们再复习一次：\n\n- [Tab] 接在一串命令的第一个字的后面，则为命令补全；\n- [Tab] 接在一串命令的第二个字以后时，则为『文件补齐』！\n\n所以说，如果我想要知道我的环境中，所有可以运行的命令有几个？ 就直接在 bash 的提示字符后面连续按两次 [tab] 按键就能够显示所有的可运行命令了。 那如果想要知道系统当中所有以 c 为开头的命令呢？就按下『 c[tab][tab] 』就好啦！ ^_^\n\n是的！真的是很方便的功能，所以，有事没事，在 bash shell 底下，多按几次 [tab] 是一个不错的习惯啦！\n\n\n\n------\n\n- ### 命令别名配置功能： (alias)\n\n假如我需要知道这个目录底下的所有文件 (包含隐藏档) 及所有的文件属性，那么我就必须要下达『 ls -al 』这样的命令串，唉！真麻烦，有没有更快的取代方式？呵呵！就使用命令别名呀！例如鸟哥最喜欢直接以 lm 这个自定义的命令来取代上面的命令，也就是说， lm 会等于 ls -al 这样的一个功能，嘿！那么要如何作呢？就使用 alias 即可！你可以在命令列输入 alias 就可以知道目前的命令别名有哪些了！也可以直接下达命令来配置别名呦：\n\n> alias lm='ls -al'\n\n\n\n------\n\n- ### 工作控制、前景背景控制： (job control, foreground, background)\n\n这部分我们在[第十七章 Linux 过程控制](http://cn.linux.vbird.org/linux_basic/0440processcontrol.php)中再提及！ 使用前、背景的控制可以让工作进行的更为顺利！至于工作控制(jobs)的用途则更广， 可以让我们随时将工作丢到背景中运行！而不怕不小心使用了 [Ctrl] + c 来停掉该程序！真是好样的！此外，也可以在单一登录的环境中，达到多任务的目的呢！\n\n\n\n------\n\n- ### 程序化脚本： (shell scripts)\n\n在 DOS 年代还记得将一堆命令写在一起的所谓的『批处理文件』吧？在 Linux 底下的 shell scripts 则发挥更为强大的功能，可以将你平时管理系统常需要下达的连续命令写成一个文件， 该文件并且可以透过对谈交互式的方式来进行主机的侦测工作！也可以藉由 shell 提供的环境变量及相关命令来进行设计，哇！整个设计下来几乎就是一个小型的程序语言了！该 scripts 的功能真的是超乎我的想象之外！以前在 DOS 底下需要程序语言才能写的东西，在 Linux 底下使用简单的 shell scripts 就可以帮你达成了！真的厉害！这部分我们在[第十三章](http://cn.linux.vbird.org/linux_basic/0340bashshell-scripts.php)再来谈！\n\n\n\n------\n\n- ### 通配符： (Wildcard)\n\n除了完整的字符串之外， bash 还支持许多的通配符来帮助用户查询与命令下达。 举例来说，想要知道 /usr/bin 底下有多少以 X 为开头的文件吗？使用：『 ls -l /usr/bin/X* 』就能够知道啰～此外，还有其他可供利用的通配符， 这些都能够加快使用者的操作呢！\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**Bash shell 的内建命令： type**\n\n我们在[第五章](http://cn.linux.vbird.org/linux_basic/0160startlinux.php)提到关于 [Linux 的联机帮助文件](http://cn.linux.vbird.org/linux_basic/0160startlinux.php#manual_man)部分，也就是 man page 的内容，那么 bash 有没有什么说明文件啊？开玩笑～ 这么棒的东西怎么可能没有说明文件！请你在 shell 的环境下，直接输入 man bash 瞧一瞧， 嘿嘿！不是盖的吧！让你看个几天几夜也无法看完的 bash 说明文件，可是很详尽的数据啊！ ^_^\n\n不过，在这个 bash 的 man page 当中，不知道你是否有察觉到，咦！ 怎么这个说明文件里面有其他的文件说明啊？举例来说，那个 cd 命令的说明就在这个 man page 内？ 然后我直接输入 man cd 时，怎么出现的画面中，最上方竟然出现一堆命令的介绍？这是怎么回事？ 为了方便 shell 的操作，其实 bash 已经『内建』了很多命令了，例如上面提到的 cd ， 还有例如 umask 等等的命令，都是内建在 bash 当中的呢！\n\n那我怎么知道这个命令是来自于外部命令(指的是其他非 bash 所提供的命令) 或是内建在 bash 当中的呢？ 嘿嘿！利用 type 这个命令来观察即可！举例来说：\n\n```\n[root@www ~]# type [-tpa] name\n选项与参数：\n    ：不加任何选项与参数时，type 会显示出 name 是外部命令还是 bash 内建命令\n-t  ：当加入 -t 参数时，type 会将 name 以底下这些字眼显示出他的意义：\n      file    ：表示为外部命令；\n      alias   ：表示该命令为命令别名所配置的名称；\n      builtin ：表示该命令为 bash 内建的命令功能；\n-p  ：如果后面接的 name 为外部命令时，才会显示完整文件名；\n-a  ：会由 PATH 变量定义的路径中，将所有含 name 的命令都列出来，包含 alias\n\n范例一：查询一下 ls 这个命令是否为 bash 内建？\n[root@www ~]# type ls\nls is aliased to `ls --color=tty' <==未加任何参数，列出 ls 的最主要使用情况\n[root@www ~]# type -t ls\nalias                             <==仅列出 ls 运行时的依据\n[root@www ~]# type -a ls\nls is aliased to `ls --color=tty' <==最先使用 aliase\nls is /bin/ls                     <==还有找到外部命令在 /bin/ls\n\n范例二：那么 cd 呢？\n[root@www ~]# type cd\ncd is a shell builtin             <==看到了吗？ cd 是 shell 内建命令\n```\n\n透过 type 这个命令我们可以知道每个命令是否为 bash 的内建命令。 此外，由于利用 type 搜寻后面的名称时，如果后面接的名称并不能以运行档的状态被找到， 那么该名称是不会被显示出来的。也就是说， type 主要在找出『运行档』而不是一般文件档名喔！ 呵呵！所以，这个 type 也可以用来作为类似 [which](http://cn.linux.vbird.org/linux_basic/0220filemanager.php#which) 命令的用途啦！找命令用的！\n\n------\n\n## ![小标题的图示](http://cn.linux.vbird.org/image/logo.png)**命令的下达**\n\n我们在[第五章的开始下达命令小节](http://cn.linux.vbird.org/linux_basic/0160startlinux.php#cmd_cmd)已经提到过在 shell 环境下的命令下达方法，如果你忘记了请回到第五章再去回忆一下！这里不重复说明了。 鸟哥这里仅就反斜杠 (\\) 来说明一下命令下达的方式啰！\n\n```\n范例：如果命令串太长的话，如何使用两行来输出？ [vbird@www ~]# cp /var/spool/mail/root /etc/crontab \\ > /etc/fstab /root \n```\n\n上面这个命令用途是将三个文件复制到 /root 这个目录下而已。不过，因为命令太长， 于是鸟哥就利用『 \\[Enter] 』来将 [Enter] 这个按键『跳脱！』开来，让 [Enter] 按键不再具有『开始运行』的功能！好让命令可以继续在下一行输入。 需要特别留意， [Enter] 按键是紧接着反斜杠 (\\) 的，两者中间没有其他字符。 因为 \\ 仅跳脱『紧接着的下一个字符』而已！所以，万一我写成： 『 \\ [Enter] 』，亦即 [Enter] 与反斜杠中间有一个空格时，则 \\ 跳脱的是『空格键』而不是 [Enter] 按键！这个地方请再仔细的看一遍！很重要！\n\n如果顺利跳脱 [Enter] 后，下一行最前面就会主动出现 > 的符号， 你可以继续输入命令啰！也就是说，那个 > 是系统自动出现的，你不需要输入。\n\n总之，当我们顺利的在终端机 (tty) 上面登陆后， Linux 就会依据 /etc/passwd 文件的配置给我们一个 shell (默认是 bash)，然后我们就可以依据上面的命令下达方式来操作 shell， 之后，我们就可以透过 man 这个在线查询来查询命令的使用方式与参数说明， 很不错吧！那么我们就赶紧更进一步来操作 bash 这个好玩的东西啰！"
  },
  {
    "path": "QT/QT迁移项目后显示修改时间大于当前时间.md",
    "content": "# QT迁移项目后显示修改时间大于当前时间\n\n打开终端输入\n\n```shell\nfind /项目路径 -type f -exec touch {} +\n```\n\n\n"
  },
  {
    "path": "QT/Qt点击按钮进行页面的切换.md",
    "content": "# Qt点击按钮进行页面的切换\n\n## **widget.h**\n\n```c++\n#ifndef WIDGET_H\n#define WIDGET_H\n\n#include <QWidget>\n\nclass Widget : public QWidget\n{\n\tQ_OBJECT\n\npublic:\n\tWidget(QWidget *parent = 0);\n\t~Widget();\n\n\tpublic slots:\n};\n\n#endif // WIDGET_H\n```\n\n\n\n## widget.cpp\n\n```c++\n#include \"widget.h\"\n#include \"subwidget.h\"\n\n#include <QPushButton>\n\nWidget::Widget(QWidget *parent) : QWidget(parent)\n\n{\n\n\tthis->resize(800,600);\n\n\tthis->setWindowTitle(\"登录\");\n\n\t//定义一个查询窗口\n\tsubwidget *s = new subwidget();\n\n\t//创建一个下一页的按钮\n\tQPushButton *btn = new QPushButton(\"下一页\",this);\n\n\tconnect(btn,&QPushButton::clicked,[=](){\n\n\t//当前窗口隐藏\n\tthis->hide();\n\n\t//查询窗口显示\n\ts->show();\n\n\t});\n\n\t//监测查询窗口s的回退信号\n\tconnect(s,&subwidget::back,[=](){\n\n\t//隐藏查询窗口\n\ts->hide();\n\n\t//显示当前窗口\n\tthis->show();\n\n\t});\n\n}\n\nWidget::~Widget()\n{\n\n}\n```\n\n\n\n## **nextwidget.h**\n\n```c++\n#ifndef SUBWIDGET_H\n#define SUBWIDGET_H\n#include <QWidget>\n\nclass subwidget : public QWidget\n{\n\tQ_OBJECT\n\npublic:\n\n\texplicit subwidget(QWidget \\*parent = nullptr);\n\n\tsignals:\n\n\tvoid back();\n\n\tpublic slots:\n\n};\n\n#endif // SUBWIDGET_H\n\n\n```\n\n\n\n## **nextwidget.cpp**\n\n```c++\n#include \"subwidget.h\"\n#include <QPushButton>\n\nsubwidget::subwidget(QWidget *parent) : QWidget(parent)\n{\n\tthis->resize(800,600);\n\n\tthis->setWindowTitle(\"查询\");\n\n\t//定义一个回退按钮\n\tQPushButton *btn = new QPushButton(\"back\",this);\n\n\t//当按下back 就发出一个back信号\n\tconnect(btn,&QPushButton::clicked,[=](){\n\n\temit this->back();\n\n\t});\n\n}\n```\n\n\n"
  },
  {
    "path": "QT/基于arm架构的NVIDIA_Xavier安装Qt.md",
    "content": "# 基于arm架构的NVIDIA Xavier安装Qt\n\n## **Part1：安装Qt**\n\n#### 1.安装Qt Creator\n\n```shell\nsudo apt-get install qt5-default qtcreator -y\n```\n\n#### 2.安装Qt示例和文档\n\n```sh\nsudo apt-get install qt5-doc qt5-doc-html qtbase5-doc-html qtbase5-examples -y\n```\n\n\n\n## **Part2：配置Qt**\n\n#### 1.搜索Qt并打开应用程序，当然也可以用命令行直接打开：\n\n![](media/1f6646aa0ab8a10bff97905f3abc2bd0.png)\n\n\n\n#### 2.Tools-\\>Options-\\>Build & Run-\\>Compilers，单击add选择添加GCC编译器，GCC编译器默认路径为/usr/bin/gcc，添加完路径之后还要修改开发平台，如图所示：\n\n![](media/58a8c77bc1b373fbe5c744399c14d865.png)\n\n\n\n#### 3.切换到Kit下，添加开发套件。名称可以随便写，需要注意的是必须先配置上一步的GCC，这一步才能直接添加GCC，否则就会像Desktop套件一样报错：\n\n![](media/fda7277fe1a8ca54433d8f2a47a26758.png)\n"
  },
  {
    "path": "QT/项目默认文件介绍.md",
    "content": "# 项目默认文件介绍\n\n## **main.cpp**\n\n```c++\n#include \"mainwindow.h\"\n#include <QApplication> //应用程序类\n\n//argc 命令行变量数量 argv 命令行变量数组\n\nint main(int argc, char *argv[])\n{\n\n\t//应用程序对象 在Qt中应用程序对象有且仅有一个\n\tQApplication a(argc, argv);\n\n\t//通过 窗口类实例化对象\n\tMainWindow w;\n\n\t//窗口不会默认弹出，需要调用show方法显示\n\tw.show();\n\n\t//a.exc();加入消息循环机制 阻塞功能\n\treturn a.exec();\n\n}\n```\n\n\n\n## **.pro文件**\n\n```c++\nQT += core gui //Qt包含的模块\n\ngreaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于4版本 加入 widgets 模块\n\nTARGET = 01_QtFirst //生成.exe程序的名称\n\nTEMPLATE = app //模板 应用程序模板\n\nSOURCES += main.cpp\\\\ //源文件\n\nmywidget.cpp\n\nHEADERS += mywidget.h //头文件\n```\n\n\n"
  },
  {
    "path": "README.md",
    "content": "# Study-note from HanLin\n\n本仓库包含以下内容：\n\n1. 一些学习的[心得笔记](#心的笔记)\n2. \n3. 一些可能有用的[电子书籍和学习资源](#Resource)\n\n4. 一些[学习软件](#Software)的安装（仅供自身学习使用，亲测无病毒，放心使用！）\n\n5. 一些[杂项](#Other)\n\n6. TODO......\n\n*注：后续文档撰写使用obsidian打开*\n\n## 心得笔记\n### Algorithm\n  - **Math and Matrix**\n    - [多维高斯分布](./Algorithm/多维高斯分布.md)\n    - [正态分布](./Algorithm/正态分布.md)\n    - [雅可比矩阵和海塞矩阵](./Algorithm/雅克比矩阵和海塞矩阵.md)\n    - [高斯牛顿法](./Algorithm/高斯牛顿法.md)\n    - [归一化与标准化](./Algorithm/归一化与标准化.md)\n    - [多元函数的泰勒展开式](./Algorithm/多元函数的泰勒展开式.md)\n    - [矩阵的奇异值分解](./Algorithm/矩阵的奇异值分解.md)\n    - [矩阵微分](./Algorithm/矩阵微分-清华.pdf)\n    - [向量积(矢积)与数量积(标积)的区别](./Algorithm/向量积(矢积)与数量积(标积)的区别.md)\n    - [协方差矩阵](./Algorithm/协方差矩阵.md)\n    - [超定方程组的最小二乘解](./Algorithm/超定方程组的最小二乘解.md)\n  - **SLAM**\n    - [相机参数DKPR的解释](./Algorithm/相机参数DKPR的解释.md)\n    - [灰度质心法](./Algorithm/灰度质心法.md)\n    - [单目视觉的尺度等价性](./Algorithm/单目视觉的尺度等价性.md)\n    - [为什么使用齐次坐标](./Algorithm/为什么使用齐次坐标.md)\n    - [重投影误差](./Algorithm/重投影误差.md)\n    - [图优化g2o](./Algorithm/图优化g2o.pdf)\n    - [本质矩阵/基础矩阵/自由度及其解法](./Algorithm/本质矩阵基础矩阵的自由度及其解法.md)\n    - [欧拉角与坐标系旋转变换](./Algorithm/欧拉角与坐标系旋转变换.md)\n    - [SLAM中的位姿变换与轨迹评价指标APE、RPE、ATE、RTE](./Algorithm/SLAM中的位姿变换与轨迹评价指标.md)\n    - [二维空间中的点坐标旋转关系](./Algorithm/二维空间中的点坐标旋转关系.md)\n    - [双目立体视觉SAD匹配算法](./Algorithm/双目立体视觉SAD匹配算法.md)\n    - [SVD与非线性优化在最小二乘问题中的区别](./Algorithm/SVD与非线性优化在最小二乘问题中的区别)\n    - [ORBSLAM3学习](./Algorithm/ORBSLAM3学习.md)\n    - [IMU预积分](./Algorithm/IMU预积分.md)\n    - [cartographer相关参数解析](./Algorithm/cartographer相关参数解析.md)\n  - **Planning**\n    - [局部规划算法DWA](./Algorithm/局部规划算法DWA.md)\n    - [路径规划之A*算法](./Algorithm/路径规划之A-star算法.md)\n    - [路径规划之Theta*算法](./Algorithm/Theta_star-Any-Angle-Path-Planning-on-Grids.md)\n    - [占据栅格地图构建](./Algorithm/占据栅格地图构建.md)\n    - [ros2 cost function](./Algorithm/ros2_cost_function.md)\n  - **ROS**\n    - [ROS指令](./C++/ROS指令.md)\n    - [ROS激光雷达信息点云信息和PCL信息之间的转换](./Algorithm/ROS激光雷达信息、点云信息和PCL信息之间的转换.md)\n    - [ROS Nodehandle句柄的理解](./Algorithm/ROSNodehandle句柄的理解.md)\n    - [ROS param 的使用](./Algorithm/ROSparam的使用.md)\n    - [ROS中Remap(话题重映射)的两种使用方法](./Algorithm/Ros中Remap(话题重映射)的两种使用方法.md)\n    - [ROS2的Launch文件简介](./Algorithm/ROS2的Launch文件简介.md)\n    - [ROS2 Command](./Algorithm/ROS2_command.md)\n  - [匈牙利算法](./Algorithm/匈牙利算法.md)\n  - [2d激光雷达运动补偿方法(去畸变)](./Algorithm/2d激光雷达运动补偿方法(去畸变).md)\n  - [激光雷达性能指标](./Algorithm/激光雷达性能指标.md)\n  - [激光雷达与相机外参联合标定调研](./Algorithm/激光雷达与相机外参联合标定调研.md)\n  - [旋转下激光雷达数据与地图产生错位的问题](./Algorithm/旋转下激光雷达数据与地图产生错位的问题.md)\n  - 待上传\n- ### C++\n  - [常用函数](./C++/常用函数.md)\n  - [c++并发与多线程](./C++/c++并发与多线程.md)\n  - [STL容器使用时机](./C++/STL容器使用时机.md)\n  - [类型转换](./C++/转换.md)\n  - [Opencv_Mat](./C++/Opencv_Mat.md)\n  - [const成员函数](./C++/const成员函数.md)\n  - [cin与get()getline()输入问题](./C++/cin与get()getline()输入问题.md)\n  - [string和cstring头文件的区别](./C++/string和cstring头文件的区别.md)\n  - [常规函数与内联函数](./C++/常规函数与内联函数.md)\n  - [单例模式](./C++/单例模式.md)\n  - [二叉树遍历](./C++/二叉树遍历.md)\n  - [构造函数的调用时机](./C++/构造函数的调用时机.md)\n  - [函数指针的定义方式](./C++/函数指针的定义方式.md)\n  - [计算时间](./C++/计算时间.md)\n  - [类知识点](./C++/类知识点.md)\n  - [内联函数](./C++/内联函数.md)\n  - [数据类型字节数](./C++/数据类型字节数.md)\n  - [protobuf基本使用](./C++/Protocol_Buffers基本使用.md)\n  - [EigenGeometry](./C++/EigenGeometry.md)\n  - [Eigen几何模块的引入](./C++/EigenGeometry.md)\n  - [gflags使用](./C++/gflags使用.md)\n  - [左值与右值](./C++/左值与右值.md)\n  - [C++下const增强](./C++/C++下const增强.md)\n  - [C++11chrono库](./C++/C++11chrono库.md)\n  - [GoogleTest](./C++/GoogleTest.md)\n  - [c++ boost circular_buffer](./C++/c++_boost_circular_buffer.md)\n  - [boostcondition_variable](./C++/boostcondition_variable.md)\n  - [设计模式之生产者-消费者模型](./C++/设计模式之生产者-消费者模型.md)\n  - [resize和reserve](./C++/如何正确使用resize和reserve)\n  - **Cmake**\n    - [CMakelists基础指令](./C++/CMakelists基础指令.md)\n    - [CMakeLists简易模板](./C++/CMakeLists简易模板.md)\n    - [find_package指令](./C++/Find_package.md)\n- ### 配置文档\n  - [ubuntu18.04系统下安装turtlebot2](slam_config/ubuntu18.04系统下安装turtlebot2.md)\n  - [xavier装机文档](slam_config/xavier装机文档.md)\n  - [turbot建图导航算法](slam_config/turbot建图导航算法汇总.md)\n  - [Rosdep_update_falied](slam_config/Rosdep_update_failed.md)\n  - [轨迹评估介绍与evo工具使用](slam_config/轨迹评估介绍与evo工具使用.md)\n  - [基于ROS的opencv安装与卸载](slam_config/基于ROS的opencv安装与卸载.md)\n  - [激光+imu标定(lidar_align)](slam_config/激光+imu标定(lidar_align​).pdf)\n  - [激光+imu标定(lidar_imu_calib)](slam_config/激光雷达与IMU联合标定(lidar_IMU_calib).md)\n  - [相机+imu标定](slam_config/相机+imu标定.pdf)\n  - [激光雷达+相机标定](slam_config/激光雷达+相机标定.pdf)\n  - [ubuntu18.04环境配置](./slam_config/Ubuntu18.04环境配置.md)\n  - [ORB-SLAM3 and HF-NET安装(Windows)](./slam_config/windows下orb和hfnet安装.md)\n  - [VSCode使用Clangd](./slam_config/VSCode使用Clangd.md)\n- ### Linux\n  - 待上传\n- ### QT编程\n  - [项目默认文件介绍](./QT/项目默认文件介绍.md)\n  - [qt点击按钮进行页面的切换](./QT/Qt点击按钮进行页面的切换.md)\n  - [qt迁移项目后修改时间大于当前时间](./QT/QT迁移项目后显示修改时间大于当前时间.md)\n  - [基于arm架构的NVIDIA Xavier安装Qt](./QT/基于arm架构的NVIDIA_Xavier安装Qt.md)\n- ### command\n  - [Git_Command](./command/Git_Command.md)\n  - [Git中submodule的使用](./command/Git中submodule的使用.md)\n  - [Git cherry-pick的使用](./command/git_cherry-pick.md)\n  - [Git rebase的两种用法](./command/git_rebase的两种用法.md)\n  - [Docker简要教程](./command/Docker简要教程.md)\n  - [Ubuntu-xavier](./command/Ubuntu-xavier.md)\n  - [LIO-SAM运行](./command/LIO-SAM运行.md)\n  - [Orb-slam2运行](./command/Orb-slam2运行.md)\n  - [Xsens传感器调用](./command/Xsens传感器调用.md)\n  - [ROS查看ZED节点此效果](./command/ROS查看ZED节点效果.md)\n## Resource\n#### Online Learning\n- 文献检索：研究僧的好伴侣，[Sci-Hub](https://www.sci-hub.ren/)和[arXiv](https://arxiv.org/)，基本顶会论文都可以免费下载阅读。\n- [Paperswithcode](https://paperswithcode.com/)：作为AI工程师（cv工程师）中的一员，这个网站可以找到许多附带开源代码的高质量论文。\n- [*Z-Library*](https://zh.1lib.education/)：这个数字图书馆可以搜索下载到各种各样的电子书，十分强大，而且免费，不过需要科学上网才能访问。\n- EbookFoundation开源了一个仓库[free-programming-books](https://github.com/EbookFoundation/free-programming-books)，在这里你可以找到许多编程类电子书籍和开源课程。\n- [awesome-cs-books](https://github.com/imarvinle/awesome-cs-books)这个仓库包含了许多经典计算机书籍： 编程语言(Java、C++、C、Python等等)、操作系统、计算机网络、系统架构、程序员数学、测试、前端开发、后台开发、网络编程、Linux使用及内核、求职面试、算法与数据结构 安卓、IOS、数据库、Redis等主流的编程学习书籍。\n- [HelloGitHub](https://github.com/521xueweihan/HelloGitHub)：HelloGitHub 每个月定期分享 GitHub 上有趣、入门级的开源项目。包含多种编程语言，有助于编程语言的学习。\n- [基本素养](https://github.com/ahangchen/How-to-Be-A-Programmer-CN)：一个合格的程序员需要具备许多其他的基本素养。\n- [数据结构](https://github.com/youngyangyang04/leetcode-master)：这是一个[算法可视化平台](https://github.com/algorithm-visualizer/algorithm-visualizer)，极大地提高了我自己的算法学习理解效率。\n- [鸟哥的私房菜](http://cn.linux.vbird.org/linux_basic/linux_basic.php#part3)：linux开发者必读书籍。\n- [Linux命令大全](https://www.linuxcool.com/)：鸟哥的私房菜过于详细，平常的学习工作中我们可能只是想要简单快速查一下某一个命令的用法。 \n- [PPT模板](https://www.pptsupermarket.com/)：面向ppt编程。\n#### Electronic Book\n\n- [视觉SLAM](https://pan.baidu.com/s/1yFiZ_fqGnKi7ExvMyvChgQ)\t提取码：`1314`\n- [深度学习](https://pan.baidu.com/s/12Y30nfWqwDqeXz6sCvZgTw)\t提取码：`1314`\n- [C++](https://pan.baidu.com/s/1DsBbgs2GZlxJel5cXpIOYQ)\t提取码：`1314`\n- [Linux](https://pan.baidu.com/s/1f_jGoBzd1ZihH_OhGTC82w)\t提取码：`1314`\n- [Python](https://pan.baidu.com/s/1m7_FToasf8VPln4-8jilLw)\t提取码：`1314`\n- [操作系统](https://pan.baidu.com/s/17eCDh-8gxEpyBoNORodYaA)\t提取码：`1314`\n- [分布式系统](https://pan.baidu.com/s/1GaSVK03EPcnQdH4BhcxZZA)\t提取码：`1314`\n- [后端组件](https://pan.baidu.com/s/1drB61wzhg7NG5L3KhOmrXw)\t提取码：`1314`\n- [计算机网络](https://pan.baidu.com/s/1qBYrPLhRpF_dhPXOQBRNZQ)\t提取码：`1314`\n- [计算机系统知识](https://pan.baidu.com/s/1I54KS6usF89NhRgagSGjeQ)\t提取码：`1314`\n- [前端&全栈](https://pan.baidu.com/s/1pKy4BJKc7SpRGq0Js-0t_A)\t提取码：`1314`\n- [数据库](https://pan.baidu.com/s/1eWlvbY0MrqRF2fI6p7kb4g)\t提取码：`1314`\n- [算法和数据结构](https://pan.baidu.com/s/1Xl8U-exf7lb2b9ss593_2g)\t提取码：`1314`\n- [网络编程&服务器开发](https://pan.baidu.com/s/1diwvkJGb2CFkonj40yvtew)\t提取码：`1314`\n- [面经](https://pan.baidu.com/s/1WGa1TRnHh3m1wmV4F7EkGA)\t提取码：`1314`\n- [面试准备](https://pan.baidu.com/s/1FCYJ-TDRfKKkHlQWSgmL3g)\t提取码：`1314`\n## Software\n- ### Typora\n\n  ​\t强烈建议大家使用Markdown语法编写文档。它允许使用纯文本格式编写文档，由于 Markdown 的轻量化、易读易写特性，许多网站都广泛使用 Markdown 来撰写帮助文档， 如 GitHub等， Markdown格式同步github远程仓库十分方便，不用担心windows层出不穷的格式错误。这里推荐一款Markdown语法软件Typora，由于最近该软件开始收费了，本着学习（白嫖）的精神，因此保存了不收费的一个版本。\n\n  - [Windows版本](https://pan.baidu.com/s/14Fftz3ECigAh-abV-7VHrw)\t提取码：`1314`\n  - [Linux版本](https://pan.baidu.com/s/1rAC-yfhA9-UNVo0y0AIxyg)\t提取码：`1314`\n\n- ### XMind\n\n  ​最好的思维导图软件，没有之一，可惜高级功能要收费，这里分享一个破解版，可以无水印导出。下载安装直接使用，破解版软件不能登录不用我多说吧，亲测无病毒，放心使用。\n\n  - [Windows版本](https://pan.baidu.com/s/1oFZS5czuOF2hEbw1LfxgIw)\t提取码：`1314`\n  - [Linux版本](https://pan.baidu.com/s/1eiOgY8p2Ytlt8AaEUIHelQ)\t提取码：`1314`\n  - 流氓软件默认安装c盘，安装好后将破解包里的app.asar文件复制替换到Program Files/XMind/resources目录下即可。\t\n\n- ### MATLAB\n\n  ​\tMATLAB，工科生居家旅行必备。\n\n  - [MATLAB](https://pan.baidu.com/s/1aH7OmFjjGApE-v0Md8aB8w)\t提取码：`1314`\n  - 至于详细怎么安装，请自行百度。ps：安装镜像文件，选择密钥安装，最后将补丁文件复制到软件文件夹下全部替换就可以啦O(∩_∩)O\n- ### Adobe pdf\n\n  ​\t功能最全的pdf编辑器，一键安装。\n\n  - [Adobe pdf](https://pan.baidu.com/s/1Fz0iAbfkJAFFD0ye20nvVA)\t提取码：`1314`\n  - Adobe系列版本越高对电脑配置要求越高，所以全家桶都有点卡顿，但不影响正常使用。附[Adobe全家桶](https://pan.baidu.com/s/1SYvUb4AeAQ5R6Lq6xypQNw)\t提取码：`1314`\n- ### Pycharm\n\n  ​\tPython IDE推荐，我是JetBrains家一系列开发工具的忠实使用者，主要优点：与时俱进，界面优美，功能强大。Pycharm一键注册99年，从此告别Mobxterm。\n\n  - [Pycharm(windows版本)](https://pan.baidu.com/s/11syiJLEngQL3-8pzqshe7w)\t提取码：`1314`\n  - 将注册机拖到pycharm里一键完成注册即可。\n\n\n\n- ### Office全家桶\n\n  ​\toffice是目前最常用的一类办公软件，使用它可以解决日常生活和工作中遇到的很多问题。里面包含了常用的办公组件而其中就包含了Word、Excel、PowerPoint、Access等。熟练掌握offic的操作技巧是对计算机工作者的基本要求,也可以帮助你提高工作效率出色的完成企业办公需求!新版的Office与之前的老版本相比，不仅是界面上有所改进，同时在功能上也带来一些新特性!\n\n  - [Office全家桶](https://pan.baidu.com/s/1LJo45XDnsSltjNCaiWT0MQ) 提取码：`1314`\n  - [破解教程](./something_else/获取Office2021安装包及相关激活工具.md)\n\n## Other\n\n- [科学上网](https://github.com/shadowsocks/shadowsocks-windows)：科学上网，国内的程序员论坛实在是不敢恭维。这里推荐一个比较不错的^_^。\n\n## 维护者\n\n[@HanLin](https://github.com/hanlin-cheng)\n\n> *关山难越，谁悲失路之人。萍水相逢，尽是他乡之客。*\n\n"
  },
  {
    "path": "command/Docker简要教程.md",
    "content": "# Docker简要教程\n\n## 1.常用命令\n\n### 1.1镜像操作\n\n镜像是容器执行的前提条件，一般需要掌握命令注意有**搜索**、**下载**、**删除**、**创建**。\n\n```shell\ndocker images      # 镜像列表\ndocker search xxx  # 检索镜像, 从镜像仓库中检索\ndocker pull xxx    # 下载镜像\ndocker rmi xxx     # 删除镜像\n```\n\n### 1.2 容器操作\n\n容器的各种操作主要包括，启动、关闭、重启和日志查询。\n\n#### 1.2.1 容器创建 ：run\n\n加载镜像，创建容器run 后面可以跟很多的参数，比如容器暴露端口指定，存储映射，权限等等，由于参数过多，下面只给出几个不同的例子，来具体的演示参数可以怎么加\n\n```text\ndocker run\n         -i              # 打开 STDIN，用于控制台交互\n         -t              # 支持终端登录\n         -d              # 要求容器后台运行，默认前台 前三个标签可连写为itd\n         -v              # 挂载数据卷\n         --name=dc_nm    # 指定容器名\n         -p 8080:80      # 暴露容器端口 80，并与宿主机端口 8080 绑定  \n         centos:latest   # 镜像名:版本\n```\n\n```\ndocker run -idt --name container_nginx -p 8080:80  docker.io/nginx\n```\n\n启动一个使用镜像`docker.io/nginx`，名字`container_nginx`的容器，`-p 8080:80`表示将容器的80端口映射到主机的8080端口，这样我们只要访问主机的8080端口就可以访问到容器的服务了。\n\n**注意：**`name`前面是两个`-`， 端口前面有`-p`， `docker.io/nginx`是镜像名，`8080`是主机的端口，`80`是Nginx应用的端口\n\n> exit 退出容器\n>\n> docker ps 查看运行中的容器\n>\n> docker ps -a 查看运行中和非运行中的所有容器\n>\n> docker exec -it container_nginx /bin/bash 进入容器\n> 如果容器还未启动 执行 docker start container_nginx\n\n#### 1.2.2 基本操作:\n\n容器本操作主要包括启动、停止、重启、删除\n\n```bash\ndocker ps -a                       # 查看容器列表， 列出所有的容器\ndocker exec -it \"ct_id\" /bin/bash  # 进入容器,ct_id是容器id\ndocker start xxx                   # xxx可以是容器名，也可以是容器id\ndocker stop xxx                    # 关闭容器\ndocker restart xxx                 # 重启\ndocker rm xxx                      # 删除\n```\n\n从宿主机复制文件\n\n```bash\ndocker cp 宿主机文件路径 容器id:/home/your_path\n```\n\n##### 删除容器\n\n容器删除之前先将容器停止\n\n`docker stop container_nginx` 或者是容器的id\n\n`docker rm -f container_nginx` 容器删除\n\n## 2.**docker start 与 docker run 的区别**\n\n`docker start name` 启动一个已经创建的容器\n\n`docker run` 创建并启动一个容器\n\n`docker run` 命令其实是 `docker create` 和 `docker start` 的命令组合，先执行`docker create` 创建一个容器 再接着`docker start`启动\n\n## 3.**镜像的导入与导出**\n\n镜像压缩打包 (主机上进行操作)，有两种方式 `docker save` 与 `docker load` 和 `docker export 与 docker import`\n\n```text\ndocker save nginx | gzip > nginx_xin_image.tar.gz  将现有的镜像压缩打包\n\ndocker load -i nginx_xin_image.tar.gz  压缩的镜像解压\n\ndocker images 进行查看\ndocker save` 是直接将镜像进行打包 `docker save <镜像名>或<镜像id>\ndocker export container_nginx> nginx_image.tar\n\ncat nginx_image.tar | sudo docker import  - nginx_image:import\n```\n\n**`docker export` 是直接将容器进行打包 `docker export <容器名>或<容器id>`**\n\n**需要注意两种方法配套的，切不可混用。虽然导入导出时没问题，但是在创建容器时候会报错**\n\n如果使用import导入save产生的文件，虽然导入不提示错误，但是启动容器时会提示失败，\n\n会出现类似\"docker: Error response from daemon: Container command not found or does not exist\"的错误。\n\n类似，使用load载入export产生的文件，也会出现问题。\n\n### 参考链接\n\nhttps://zhuanlan.zhihu.com/p/640805236\n\nhttps://zhuanlan.zhihu.com/p/366666596?utm_id=0"
  },
  {
    "path": "command/Git_Command.md",
    "content": "# Git Command\n\n[参考教程]: https://www.liaoxuefeng.com/wiki/896043488029600\n\n> `git clone` 默认是克隆`Head`指向的`master`分支，如果是多分支，我们可以单个克隆分支项目。\n>\n> 1.只克隆单分支（非master）：\n>\n>  \tgit clone -b 分支名 https://xxx.git\n>\n> 2.克隆所有分支（多分支）\n>\n>  \tcd project  //切换到指定目录\n>  \tgit clone https://xxx.git //克隆项目（默认master分支）\n>\n> ​\tgit branch -a  //列出远程跟踪及本地分支\n\n## 1.安装并设置地址\n\n```shell\n$ git config --global user.name \"Your Name\"\n$ git config --global user.email \"email@example.com\"\n```\n\n\n\n## 2.创建版本库\n\n```shell\n$ mkdir learngit\n$ cd learngit\n$ pwd\n/Users/michael/learngit\n\n$ git init\n```\n\n\n\n## 3.版本管理\n\n- ### 添加文件\n\n\n```shell\n$ git add readme.txt\n$ git commit -m \"wrote a readme file\"\n```\n\n\n\n- ### 查看工作区状态\n\n\n```shell\n$ git status\n```\n\n\n\n- ### 查看提交日志\n\n\n```shell\n$ git log\n```\n\n\n\n- ### 查看历史命令\n\n\n```shell\n$ git reflog\n```\n\n\n\n- ### 版本间穿梭\n\n\n```shell\n$ git reset --hard commit_id\n```\n\nexpmple:\n\n​\tgit reset --hard HEAD^\n\n​\tgit reset --hard 1094a\n\n\n\n- ### 撤销修改\n\n\n场景1：当你改乱了工作区某个文件的内容，想直接丢弃工作区的修改时，或者删除了工作区某个文件，用命令\n\n```shell\n$ git checkout -- <file>\n```\n\n`git checkout`其实是用版本库里的版本替换工作区的版本，无论工作区是修改还是删除，都可以“一键还原”。\n\n场景2：当你不但改乱了工作区某个文件的内容，还添加到了暂存区时，想丢弃修改，分两步\n\n```shell\n$ git reset HEAD <file>\n$ git checkout -- <file>\n```\n\n`git reset`命令既可以回退版本，也可以把暂存区的修改回退到工作区。当我们用`HEAD`时，表示最新的版本。\n\n场景3：已经提交了不合适的修改到版本库时，想要撤销本次提交，参考[版本间穿梭](#版本间穿梭)一节，不过前提是没有推送到远程库。\n\n\n\n- ### 删除文件\n\n\n```shell\n$ git rm <file>\n$ git commit -m \"remove test.txt\"\n```\n\n\n\n## 4.远程仓库\n\n- #### 第1步：\n\n\n创建SSH Key。在用户主目录下，看看有没有.ssh目录，如果有，再看看这个目录下有没有`id_rsa`和`id_rsa.pub`这两个文件，如果已经有了，可直接跳到下一步。如果没有，打开Shell（Windows下打开Git Bash），创建SSH Key：\n\n```shell\n$ ssh-keygen -t rsa -C \"youremail@example.com\"\n```\n\n\n\n- #### 第2步：\n\n\n登陆GitHub，打开“Account settings”，“SSH Keys”页面。然后，点“Add SSH Key”，填上任意Title，在Key文本框里粘贴`id_rsa.pub`文件的内容\n\n\n\n- #### 第3步：\n\n\n登陆GitHub，然后，在右上角找到“Create a new repo”按钮，创建一个新的仓库\n\n\n\n- #### 第4步：\n\n\n根据GitHub的提示，在本地的`learngit`仓库下运行命令（请千万注意，把上面的`michaelliao`替换成你自己的GitHub账户名）：\n\n```shell\n$ git remote add origin git@github.com:michaelliao/learngit.git\n```\n\n\n\n### 上传远程库\n\n- #### 第5步：\n\n\n就可以把本地库的所有内容推送到远程库上（添加后，远程库的名字就是`origin`，这是Git默认的叫法，也可以改成别的，但是`origin`这个名字一看就知道是远程库）：\n\n```shell\n$ git push -u origin master\nCounting objects: 20, done.\nDelta compression using up to 4 threads.\nCompressing objects: 100% (15/15), done.\nWriting objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.\nTotal 20 (delta 5), reused 0 (delta 0)\nremote: Resolving deltas: 100% (5/5), done.\nTo github.com:michaelliao/learngit.git\n * [new branch]      master -> master\nBranch 'master' set up to track remote branch 'master' from 'origin'.\n```\n\n把本地库的内容推送到远程，用`git push`命令，实际上是把当前分支`master`推送到远程。\n\n由于远程库是空的，我们第一次推送`master`分支时，加上了`-u`参数，Git不但会把本地的`master`分支内容推送的远程新的`master`分支，还会把本地的`master`分支和远程的`master`分支关联起来，在以后的推送或者拉取时就可以简化命令：\n\n```shell\n$ git push origin master\n```\n\n\n\n### 删除远程库\n\n如果添加的时候地址写错了，或者就是想删除远程库，可以用`git remote rm <name>`命令。使用前，建议先用`git remote -v`查看远程库信息：\n\n```shell\n$ git remote -v\norigin  git@github.com:michaelliao/learn-git.git (fetch)\norigin  git@github.com:michaelliao/learn-git.git (push)\n```\n\n然后，根据名字删除，比如删除`origin`：\n\n```shell\n$ git remote rm origin\n```\n\n此处的“删除”其实是解除了本地和远程的绑定关系，并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库，需要登录到GitHub，在后台页面找到删除按钮再删除。\n\n\n\n## 5.分支管理\n\n### 查看分支\n\n```shell\ngit branch\n```\n\n### 创建分支\n\n```shell\ngit branch <name>\n```\n\n### 切换分支\n\n```shell\ngit checkout <name> \nor\ngit switch <name>\n```\n\n### 创建+切换分支\n\n```shell\ngit checkout -b <name>\nor\ngit switch -c <name>\n```\n\n### 合并某分支到当前分支\n\n```shell\ngit merge <name>\n```\n\n### 删除分支\n\n```shell\ngit branch -d <name>\n```\n\n可以通过`git branch -D <name>`强行删除\n\n### 用带参数的`git log`也可以看到分支的合并情况\n\n```shell\ngit log --graph --pretty=oneline --abbrev-commit\n```\n\n\n\n## 6.多人协作\n\n### 查看远程库信息\n\n```shell\ngit remote -v\n```\n\n本地新建的分支如果不推送到远程，对其他人就是不可见的；\n\n### 从本地推送分支\n\n```shell\ngit push origin branch-name\n```\n\n如果推送失败,先用`git pull`抓取远程的新提交\n\n### 在本地创建和远程分支对应的分支\n\n```shell\ngit checkout -b branch-name origin/branch-name\n```\n\n本地和远程分支的名称最好一致\n\n### 建立本地分支和远程分支的关联\n\n```shell\ngit branch --set-upstream-to <branch-name> origin/<branch-name>\n```\n\n### 多人协作的工作模式\n\n1. 首先，可以试图用`git push origin <branch-name>`推送自己的修改；\n2. 如果推送失败，则因为远程分支比你的本地更新，需要先用`git pull`试图合并；\n3. 如果合并有冲突，则解决冲突，并在本地提交；\n4. 没有冲突或者解决掉冲突后，再用`git push origin <branch-name>`推送就能成功！\n\n如果`git pull`提示`no tracking information`，则说明本地分支和远程分支的链接关系没有创建，用命令`git branch --set-upstream-to <branch-name> origin/<branch-name>`\n\n\n\n## 7.标签管理\n\n### 创建标签\n\n```shell\n$ git tag <tagname>\n```\n\n默认标签是打在最新提交的commit上的,也可以指定一个commit id\n\n```shell\n$ git tag v0.9 f52c633\n```\n\n### 创建带有说明的标签\n\n用`-a`指定标签名，`-m`指定说明文字\n\n```shell\n$ git tag -a v0.1 -m \"version 0.1 released\" 1094adb\n```\n\n### 查看所有标签\n\n```shell\n$ git tag\nv1.0\n```\n\n### 查看标签信息\n\n标签不是按时间顺序列出，而是按字母排序的。`git show <tagname>`\n\n```shell\n$ git show v0.9\ncommit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9)\nAuthor: Michael Liao <askxuefeng@gmail.com>\nDate:   Fri May 18 21:56:54 2018 +0800\n\n    add merge\n\ndiff --git a/readme.txt b/readme.txt\n...\n```\n\n### 删除标签\n\n```shell\n$ git tag -d <tagname>\n```\n\n### 推送标签到远程\n\n```shell\n$ git push origin <tagname>\n```\n\n一次性推送全部尚未推送到远程的本地标签\n\n```shell\n$ git push origin --tags\n```\n\n### 删除远程标签\n\n```shell\n$ git tag -d <tagname>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t //删除一个本地标签\n$ git push origin :refs/tags/<tagname>\t\t\t\t\t\t\t//删除一个远程标签\n```\n\n## 8.配置代理\n\n### 查看全局配置\n\n```shell\n$ git config --global -l\n```\n\n### 配置代理\n\n```shell\n$ git config --global http.proxy 127.0.0.1:7890\n```\n\n### 取消代理\n\n```shell\n$ git config --global --unset http.proxy\n```\n\n## 8.其他命令\n\n### git stash\n\n#### （1）使用场景：\n\n当我们在某一条分支上开发新功能时，突然有个紧急的错误需要修复\n\n这时，我们不得不暂停手头上的工作，切换到另外的分支去修复错误\n\n但是，新功能做到一半，既不能提交，也不能删除，那该怎么办呢\n\n我们可以先把当前的更改保存起来，等处理完错误后再恢复出来，git stash 就是这样的一个用法\n\n它可以将工作区和缓存区的更改保存到一个栈结构中，等后面需要的时候再恢复\n\n#### （2）基本用法\n\n##### 保存：`git stash`\n\n```shell\n> # 将当前工作区和暂存区的更改保存到一个栈结构\n$ git stash\n> # 将当前工作区和暂存区的更改保存到一个栈结构，并附带一个信息\n$ git stash save \"message\"\n$ # 将当前工作区和暂存区的更改保存到一个栈结构，包括新增的文件\n$ git stash -u\n$ git stash --include-untracked\n> # 将当前工作区和暂存区的更改保存到一个栈结构，包括新增的文件以及忽略的文件\n$ git stash -a\n$ git stash --all\n```\n\n##### 查看栈中保存的更改：`git stash list`\n\n```shell\n> # 查看栈中保存的更改\n$ git stash list\n```\n\n##### 查看更改的具体内容：`git stash show`\n\n```shell\n> # 查看栈中第一个更改的具体内容\n$ git stash show\n> # 查看栈中指定的更改的具体内容\n$ git stash show <stash id>\n```\n\n##### 恢复：`git stash apply`\n\n```shell\n> # 将栈中的第一个更改恢复到当前工作区和暂存区\n$ git stash apply\n> # 将栈中的指定的更改恢复到当前工作区和暂存区\n$ git stash apply <stash id>\n```\n\n##### 删除：`git stash drop`\n\n```shell\n> # 删除栈中的第一个更改\n$ git stash drop\n> # 删除栈中的指定的更改\n$ git stash drop <stash id>\n```\n\n##### 恢复 & 删除：`git stash pop`\n\n```shell\n> # 将栈中的第一个更改恢复到当前工作区和暂存区，同时删除栈中的第一个更改\n$ git stash pop\n> # 将栈中的指定的更改恢复到当前工作区和暂存区，同时删除栈中的指定的更改\n$ git stash pop <stash id>\n```\n\n##### 清空：`git stash clear`\n\n```shell\n> # 清空栈中保存的更改\n$ git stash clear\n```\n\n### git fetch\n\n你可以通过 `git fetch origin` 来获取远程仓库（如 GitHub 或 GitLab）上的最新提交、分支和标签，但不会更改你的本地工作目录或分支。\n\n```\ngit fetch origin\n```\n\n这个命令会更新你本地的远程追踪分支（例如 `origin/main`），但不会合并任何更改到当前的本地分支。如果你查看 `git log`，你会看到本地分支的历史没有变化。\n\n**查看远程分支和提交**\n\n拉取更新后，你可以检查远程分支的更改，使用以下命令查看更新的远程分支：\n\n```\ngit log origin/main\n```\n\n或者查看所有远程分支：\n\n```\ngit branch -r\n```\n\n**同步本地分支和远程分支（比如 rebase 或 merge）**\n\n在执行 `git fetch origin` 后，你可以选择将远程分支的更新合并或 rebase 到你的本地分支：\n\n- **合并**：使用 `git merge` 将远程更新合并到当前本地分支。\n\n  ```\n  git merge origin/main\n  ```\n\n- **Rebase**：使用 `git rebase` 将本地提交移到远程分支的最新提交之后。\n\n  ```\n  git rebase origin/main\n  ```\n\n**检查远程的所有更新**\n\n如果你想查看所有远程的分支信息及更新，可以使用：\n\n```\ngit fetch origin\ngit branch -r\n```\n\n#### 为什么使用 `git fetch` 而不是 `git pull`？\n\n- **`git fetch`** 只会拉取远程更新，但不会自动修改你当前的工作分支。这样，你可以先检查远程更新后再决定是合并（`git merge`）还是其他操作。\n- **`git pull`** 则会在拉取更新的同时，自动将远程分支的更新合并到你的当前分支。`git pull` 实际上是 `git fetch` 和 `git merge`（或 `git rebase`）的组合。\n\n通过 `git fetch`，你有更多的控制权，可以先查看更新内容，再决定如何合并这些更新。"
  },
  {
    "path": "command/Git中submodule的使用.md",
    "content": "# Git中submodule的使用\n\n## 背景\n\n面对比较复杂的项目，我们有可能会将代码根据功能拆解成不同的子模块。主项目对子模块有依赖关系，却又并不关心子模块的内部开发流程细节。\n\n这种情况下，通常不会把所有源码都放在同一个 Git 仓库中。\n\n有一种比较简单的方式，是在当前工作目录下，将子模块文件夹加入到 `.gitignore` 文件内容中，这样主项目就能够无视子项目的存在。这样做有一个弊端就是，使用主项目的人需要有一个先验知识：需要在当前目录下放置一份某版本的子模块代码。\n\n还有另外一种方式可供借鉴，可以使用 Git 的 `submodule` 功能，也是这篇文章的主题。\n\n实际上 Git 工具的 `submodule` 功能就是建立了当前项目与子模块之间的依赖关系：`子模块路径`、`子模块的远程仓库`、`子模块的版本号`。\n\n## 使用流程\n\n假定我们有两个项目：`project-main` 和 `project-sub-1`，其中 `project-main` 表示主项目，而 `project-sub-1` 表示子模块项目。\n\n其中 `project-main` 的远程仓库地址为 `https://github.com/username/project-main.git`，而 `project-sub-1` 的远程仓库地址为 `https://github.com/username/project-sub-1.git`。\n\n接下来，我们希望在 `project-main` 中添加 `project-sub-1` ，而又保持 `project-sub-1` 自身独立的版本控制。\n\n\n\n### **1.创建 submodule**\n\n使用 `git submodule add <submodule_url>` 命令可以在项目中创建一个子模块。\n\n进入项目 `project-main` ，输入：\n\n> ➜ project-main git:(master) git submodule add [https://github.com/username/project-sub-1.git](https://link.zhihu.com/?target=https%3A//github.com/username/project-sub-1.git)\n> 正克隆到 '/path/to/project-main/project-sub-1'...\n> remote: Enumerating objects: 3, done.\n> remote: Counting objects: 100% (3/3), done.\n> remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0\n> 展开对象中: 100% (3/3), 完成.\n\n此时项目仓库中会多出两个文件：`.gitmodules` 和 `project-sub-1` 。\n\n前者的内容是这样的，事实上就是子模块的相关信息；而后者那个文件，实际上保存的是子模块当前版本的版本号信息。\n\n> [submodule \"project-sub-1\"]\n> path = project-sub-1\n> url = [https://github.com/username/project-sub-1.git](https://link.zhihu.com/?target=https%3A//github.com/username/project-sub-1.git)\n\n如果此前项目中已经存在 `.gitmodules` 文件，则会在文件内容中多出上述三行记录。\n\n事实上，此时在 `.git/config` 文件中也会多出一些信息，在 `.git/modules` 文件夹下也会多出一份内容。\n\n通常此时可以使用 `git commit -m \"add submodule xxx\"` 提交一次，表示引入了某个子模块。提交后，在主项目仓库中，会显示出子模块文件夹，并带上其所在仓库的版本号。\n\n![img](media/v2-8b77b08acc39bfc9cb569116ff6905e2_720w.webp)\n\n\n\n### **2.获取 submodule**\n\n上述步骤在创建子模块的过程中，会自动将相关代码克隆到对应路径，但对于后续使用者而言，对于主项目使用普通的 `clone` 操作并不会拉取到子模块中的实际代码。\n\n使用以下命令进行克隆，完成后 `project-main/project-sub-1` 文件夹是空的：\n\n> cd /path/to/temp\n> git clone [https://github.com/username/project-main.git](https://link.zhihu.com/?target=https%3A//github.com/username/project-main.git)\n\n\n\n如果希望子模块代码也获取到，一种方式是在克隆主项目的时候带上参数 `--recurse-submodules`，这样会递归地将项目中所有子模块的代码拉取。\n\n> cd /path/to/temp2\n> git clone [https://github.com/username/project-main.git](https://link.zhihu.com/?target=https%3A//github.com/username/project-main.git) --recurse-submodules\n\n此时 `project-main/project-sub-1` 文件夹是有内容的，并且固定在某个 Git 提交的版本上。\n\n另外一种可行的方式是，在当前主项目中执行：\n\n> git submodule init\n> git submodule update\n\n则会根据主项目的配置信息，拉取更新子模块中的代码。\n\n一般使用更多的是，递归得将子项目中目录拉去下来\n\n> git submodule update --init --recursive\n\n\n\n### **3.子模块内容的更新**\n\n对于子模块而言，并不需要知道引用自己的主项目的存在。对于自身来讲，子模块就是一个完整的 Git 仓库，按照正常的 Git 代码管理规范操作即可。\n\n对于主项目而言，子模块的内容发生变动时，通常有三种情况：\n\n1）当前项目下子模块文件夹内的内容发生了未跟踪的内容变动；\n\n2）当前项目下子模块文件夹内的内容发生了版本变化；\n\n3）当前项目下子模块文件夹内的内容没变，远程有更新；\n\n\n\n> \\> 情况1：子模块有未跟踪的内容变动\n\n对于第1种情况，通常是在开发环境中，直接修改子模块文件夹中的代码导致的。\n\n此时在主项目中使用 `git status` 能够看到关于子模块尚未暂存以备提交的变更，但是于主项目而言是无能为力的，使用 `git add/commit` 对其也不会产生影响。\n\n> ➜ project-main git:(master) git status\n> 位于分支 master\n> 您的分支与上游分支 'origin/master' 一致。\n> 尚未暂存以备提交的变更：\n> （使用 \"git add <文件>...\" 更新要提交的内容）\n> （使用 \"git checkout -- <文件>...\" 丢弃工作区的改动）\n> （提交或丢弃子模组中未跟踪或修改的内容）\n> 修改： project-sub-1 (未跟踪的内容)\n> 修改尚未加入提交（使用 \"git add\" 和/或 \"git commit -a\"）\n\n在此情景下，通常需要进入子模块文件夹，按照子模块内部的版本控制体系提交代码。\n\n当提交完成后，主项目的状态则进入了情况2，即当前项目下子模块文件夹内的内容发生了版本变化。\n\n\n\n> \\> 情况2：子模块有版本变化\n\n当子模块版本变化时，在主项目中使用 `git status` 查看仓库状态时，会显示子模块有新的提交：\n\n> ➜ project-main git:(master) ✗ git status\n> 位于分支 master\n> 您的分支与上游分支 'origin/master' 一致。\n> 尚未暂存以备提交的变更：\n> （使用 \"git add <文件>...\" 更新要提交的内容）\n> （使用 \"git checkout -- <文件>...\" 丢弃工作区的改动）\n> 修改： project-sub-1 (新提交)\n> 修改尚未加入提交（使用 \"git add\" 和/或 \"git commit -a\"）\n\n在这种情况下，可以使用 `git add/commit` 将其添加到主项目的代码提交中，实际的改动就是那个子模块 `文件` 所表示的版本信息：\n\n> git diff HEAD HEAD^\n> diff --git a/project-sub-1 b/project-sub-1\n> index ace9770..7097c48 160000\n> --- a/project-sub-1\n> +++ b/project-sub-1\n> @@ -1 +1 @@\n> -Subproject commit ace977071f94f4f88935f9bb9a33ac0f8b4ba935\n> +Subproject commit 7097c4887798b71cee360e99815f7dbd1aa17eb4\n\n通常当子项目更新后，主项目修改其所依赖的版本时，会产生类似这种情景的 commit 提交信息。\n\n\n\n> \\> 情况3：子模块远程有更新\n\n通常来讲，主项目与子模块的开发不会恰好是同时进行的。通常是子模块负责维护自己的版本升级后，推送到远程仓库，并告知主项目可以更新对子模块的版本依赖。\n\n在这种情况下，主项目是比较茫然的。\n\n之前曾经提到，主项目可以使用 `git submodule update` 更新子模块的代码，但那是指 `当前主项目文件夹下的子模块目录内容` 与 `当前主项目记录的子模块版本` 不一致时，会参考后者进行更新。\n\n但如今这种情况下，后者 `当前主项目记录的子模块版本` 还没有变化，在主项目看来当前情况一切正常。\n\n此时，需要让主项目主动进入子模块拉取新版代码，进行升级操作。\n\n通常流程是：\n\n> cd project-sub-1\n> git pull origin master\n\n子模块目录下的代码版本会发生变化，转到情况2的流程进行主项目的提交。\n\n当主项目的子项目特别多时，可能会不太方便，此时可以使用 `git submodule` 的一个命令 `foreach` 执行：\n\n> git submodule foreach 'git pull origin master'\n\n\n\n> \\> 情况汇总\n\n终上所述，可知在不同场景下子模块的更新方式如下：\n\n- 对于子模块，只需要管理好自己的版本，并推送到远程分支即可；\n- 对于父模块，若子模块版本信息未提交，需要更新子模块目录下的代码，并执行 `commit` 操作提交子模块版本信息；\n- 对于父模块，若子模块版本信息已提交，需要使用 `git submodule update` （git submodule update --init --recursive），Git 会自动根据子模块版本信息更新所有子模块目录的相关代码。\n\n\n\n> **4.删除子模块**\n\n网上流传了一些偏法，主要步骤是直接移除模块，并手动修改 `.gitmodules`、`.git/config` 和 `.git/modules` 内容。包含了一大堆类似`git rm --cached <sub-module>`、`rm -rf <sub-moduel>`、`rm .gitmodules` 和 `git rm --cached` 之类的代码。\n\n实际上这是一种比较野的做法，不建议使用。\n\n根据官方文档的说明，应该使用 `git submodule deinit` 命令卸载一个子模块。这个命令如果添加上参数 `--force`，则子模块工作区内即使有本地的修改，也会被移除。\n\n> git submodule deinit project-sub-1\n> git rm project-sub-1\n\n执行 `git submodule deinit project-sub-1` 命令的实际效果，是自动在 `.git/config` 中删除了以下内容：\n\n> [submodule \"project-sub-1\"]\n> url = [https://github.com/username/project-sub-1.git](https://link.zhihu.com/?target=https%3A//github.com/username/project-sub-1.git)\n\n执行 `git rm project-sub-1` 的效果，是移除了 `project-sub-1` 文件夹，并自动在 `.gitmodules` 中删除了以下内容：\n\n> [submodule \"project-sub-1\"]\n> path = project-sub-1\n> url = [https://github.com/username/project-sub-1.git](https://link.zhihu.com/?target=https%3A//github.com/username/project-sub-1.git)\n\n此时，主项目中关于子模块的信息基本已经删除（虽然貌似 `.git/modules` 目录下还有残余）：\n\n> ➜ project-main git:(master) ✗ gs\n> 位于分支 master\n> 您的分支与上游分支 'origin/master' 一致。\n> 要提交的变更：\n> （使用 \"git reset HEAD <文件>...\" 以取消暂存）\n> 修改： .gitmodules\n> 删除： project-sub-1\n\n可以提交代码：\n\n> git commit -m \"delete submodule project-sub-1\"\n\n至此完成对子模块的删除。\n\n\n\n## 总结\n\n当项目比较复杂，部分代码希望独立为子模块进行版本控制时，可以使用 `git submodule` 功能。\n\n使用 `git submodule` 功能时，主项目仓库并不会包含子模块的文件，只会保留一份子模块的配置信息及版本信息，作为主项目版本管理的一部分。\n\n本篇文章简单介绍了 `git submodule` 的添加和删除，以及项目开发过程中主项目与子模块不同状态时刻的操作方式。"
  },
  {
    "path": "command/LIO-SAM运行.md",
    "content": "# LIO-SAM运行\n\n## part1：数据集运行\n\n### 1.环境变量\n\n```shell\nsource devel/setup.bash\n```\n\n### 2.启动lio-sam功能包\n\n```shell\nroslaunch lio_sam run.launch\n```\n\n### 3.播放数据集\n\n```shell\nrosbag play outdoor.bag\n```\n\n\n\n## part2：实测运行\n\n### 1.打开config文件夹下的参数文件params，修改imu和点云话题\n\n![10 sam:  \\# Topics  pointCloudTopic: \"/points raw\"  \\# pointCloudTopic: \"/velodyne_points\"  imuTopic: \"/imu/data\"  \\# imuTopic: \"imu correct\"  \\# imuTopic: \"imu raw\"  odomTopic: \"odometry/imu\"  gpsTopic: \"odometry/gpsz\"  \\# Point cloud data  \\# IMIJ data  \\# IMIJ pre-preintegration odometry, same frequency as IMIJ  \\# GPS odometry topic from navsat, see module navsat.launch file ](media/e26b16e4dfa08f27a6be90000c53f58e.png)\n\n\n\n### 2.修改imu矫正参数\n\n![\\#IMU Settings  imuAccNoise: 1.9740799873834897e-02  imuGyrNoise: 2,3704854385698929+03  imuAccBiasN: 4.3015781912824339+04  imuGyrBiasN: 2.6685224155471368+05  imuGravity: 9.80511  imuRPYWeight: 0.01  imuAccNoise: 3,9939570888238808+03  imuGyrNoise: 1.5636343949698187e-03  imuAccBiasN: 6,4356659353532566+05  imuGyrBiasN: 3.5640318696367613e-05  imuGravity: 9.80511  imuRPYWeight: 0.01 ](media/d46f4d8198bf146ef7995d5708b2b454.png)\n\n\n\n### 3.修改激光雷达到imu标定参数\n\n![[png]](media/dbebbbdaf4c6e4278a0ac2e62db89a81.png)\n\n\n\n### 4.添加环境变量\n\n```shell\nsource devel/setup.bash\n```\n\n\n\n### 5.启动xsens\n\n```shell\nsudo chmod 777 /dev/ttyUSB\\*\nroslaunch xsens_mti_driver xsens_mti_node.launch\n```\n\n\n\n### 6.启动激光雷达\n\n```shell\nroslaunch velodyne_pointcloud velodyne_vlp16.launch\n```\n\n\n\n### 7.启动LIO-SAM\n\n```shell\nroslaunch lio_sam run.launch\n```\n\n\n"
  },
  {
    "path": "command/Orb-slam2运行.md",
    "content": "# Orb-slam2运行\n\n## **part1：运行数据集**\n\n### **1.Monocular**\n\n- #### Tum:\n\n\n```shell\n./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER\n```\n\n\n\n- #### KITTI:\n\n\n```shell\n./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER\n```\n\n\n\n- #### EURoc:\n\n\n```\n./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH_TO_SEQUENCE_FOLDER/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt\n```\n\n\n\n### **2.Stereo**\n\n- #### KITTI:\n\n\n```shell\n./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER\n```\n\n\n\n- #### EuRoc:\n\n\n```shell\n./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml PATH_TO_SEQUENCE/mav0/cam0/data PATH_TO_SEQUENCE/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/SEQUENCE.txt\n```\n\n\n\n### **3.RGBD**\n\n- #### TUM:\n\n\n```shell\n./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE\n```\n\n\n\n## **part2：zed实测**\n\n```shell\nroslaunch zed_wrapper zed.launch\n\nrosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false /camera/left/image_raw:=/zed2/zed_node/left/image_rect_color /camera/right/image_raw:=/zed2/zed_node/right/image_rect_color\n```\n\n#### **or**\n\n例如把/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src目录下的ros_stereo.cc建立一个新的文件，比如说叫ros_zed_stereo_rect.cc\n\n把代码复制过去，只需要更改\n\n```shell\nmessage_filters::Subscriber\\<sensor_msgs::Image\\> left_sub(nh, \"/zed2/zed_node/left/image_rect_color\", 1);\n\nmessage_filters::Subscriber\\<sensor_msgs::Image\\> right_sub(nh, \"/zed2/zed_node/right/image_rect_color\",1);\n```\n\n然后修改CmakeLists.txt，加入：\n\n#Node for ZED camera\n\n```shell\nrosbuild_add_executable(zed_Stereo_rect src/ros_zed_stereo_rect.cc)\n\ntarget_link_libraries(zed_Stereo_rect \\${LIBS})\n```\n\n重新编译\n\n```shell\n./build_ros.sh\n```\n\n编译成功后运行\n\n```shell\nroslaunch zed_wrapper zed.launch\n\nrosrun ORB_SLAM2 zed_Stereo_rect Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml\n```\n\n#yaml文件可以替换成标定之后的zed参数文件"
  },
  {
    "path": "command/ROS查看ZED节点效果.md",
    "content": "# ros查看ZED节点效果\n\n\n\n```shell\nroslaunch zed_wrapper zed2.launch\n\nrqt_image_view\n```\n\n\n"
  },
  {
    "path": "command/Ubuntu-xavier.md",
    "content": "# Ubuntu-xavier\n\n## 1.查看NVIDIA jetson相关参数\n\n```shell\nsudo jtop\n```\n\n\n\n## 2.更改xavier风扇转速\n\n```shell\nsudo gedit /sys/devices/pwm-fan/target_pwm\n```\n\n\n\n## 3.待更新"
  },
  {
    "path": "command/Xsens传感器调用.md",
    "content": "# Xsens传感器调用\n\n\n\n```shell\nsource devel/setup.bash\n\nsudo chmod 777 /dev/ttyUSB\\*\n\nroslaunch xsens_mti_driver display.launch\n```\n\n\n"
  },
  {
    "path": "command/git_cherry-pick.md",
    "content": "# git cherry-pick\n\n## 前言\n\n对于多分支的代码库，将代码从一个分支转移到另一个分支是常见需求。\n\n这时分两种情况。\n\n你需要另一个分支的所有代码变动，那么就采用合并（git merge）。\n你只需要部分代码变动（某几个提交），这时可以采用 Cherry pick。\nCherry pick直译为捡樱桃🍒，它的功能是把已经存在的commit进行挑选，然后重新提交。比较合适的一个场景是把A分支的某次或者多次的提交也提交到B分支上。\n\n## 图示\n\n比如此时分支情况如下：\n\n![](media/a7d7fe639765492abea6951ae25170c8.png)\n\n这幅图中，每个圆圈代表一次commit\n\n一条线是一个分支。\n\n比如c2，c3，这是两次提交，在同一个分支上。\n\n此时需求是：要把绿色分支的C3，蓝色分支的C5，紫色分支的C7合到一条新的分支上。\n\n此时就需要cherry-pick命令了。\n\n首先切到master分支，然后输入\n\ngit cherry-pick C3 C5 C7\n\n此时，分支图示就变成了：\n![](media/30f3d615cb354306a900383295ef8166.png)\n\n## 一、转移一个提交\n\n1. 先切换到 A 分支\n\n   ```git\n   $ git checkout A\n   ```\n\n2. 找到这次提交\n\n   ```\n      $ git log\n      commit f038d7ffb1685af7d4f870ad0b798670b6f760e8 (HEAD -> feature/0113_update)\n      Author: qxj <qxj@qq.com>\n      Date:   Thu Jan 14 15:24:54 2021 +0800\n      \n          feat: xxx\n   ```\n\n3. 再切换到B分支\n\n   ```\n   $ git checkout B\n   ```\n\n4. 把 A 分支下的这次commit 重新提交到 B 分支下\n\n   ```\n   $ git cherry-pick 'f038d7ffb1685af7d4f870ad0b798670b6f760e8'\n   ```\n\n当执行完 `git cherry-pick`以后，将会生成一个新的提交，这个新的提交的[hash](https://so.csdn.net/so/search?q=hash&spm=1001.2101.3001.7020)值和原来的不同，但标志名称一样。\n\n## 二、转移多个提交\n\nCherry pick 支持一次转移多个提交。\n\n```\n$ git cherry-pick <HashA> <HashB>\n```\n\n上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。\n\n如果想要转移一系列的连续提交，可以使用下面的简便语法。\n\n```\n$ git cherry-pick A..B \n```\n\n如果要包含提交 A，可以使用下面的语法。\n\n```\n$ git cherry-pick A^..B \n```\n\n## 三、配置项\n\ngit cherry-pick命令的常用配置项如下。\n\n##### （1）-e，--edit\n\n​\t打开外部编辑器，编辑提交信息。\n\n##### （2）-n，--no-commit\n\n​\t只更新工作区和暂存区，不产生新的提交。\n\n##### （3）-x\n\n​\t在提交信息的末尾追加一行(cherry picked from commit ...)，保留原提交者信息，方便以后查到这个提交是如何产生的。\n\n##### （4）-s，--signoff\n\n​\t在提交信息的末尾追加一行操作者的签名，表示是谁进行了这个操作。\n\n##### （5）-m parent-number，--mainline parent-number\n\n​\t如果原始提交是一个合并节点，来自于两个分支的合并，那么 Cherry pick 默认将失败，因为它不知道应该采用哪个分支的代码变动。\n\n​\t-m配置项告诉 Git，应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数，代表原始提交的父分支编号。\n\n```\n$ git cherry-pick -m 1 <commitHash>\n```\n\n上面命令表示，Cherry pick 采用提交commitHash来自编号1的父分支的变动。\n\n一般来说，1号父分支是接受变动的分支（the branch being merged into），2号父分支是作为变动来源的分支（the branch being merged from）。\n\n## 四、代码冲突\n\n如果操作过程中发生代码冲突，Cherry pick 会停下来，让用户决定如何继续操作。\n\n##### **（1）`--continue`**\n\n用户解决代码冲突后，第一步将修改的文件重新加入暂存区（`git add .`），第二步使用下面的命令，让 Cherry pick 过程继续执行。\n\n```\n$ git cherry-pick --continue\n```\n\n##### **（2）`--abort`**\n\n发生代码冲突后，放弃合并，回到操作前的样子。\n\n##### **（3）`--quit`**\n\n发生代码冲突后，退出 Cherry pick，但是不回到操作前的样子。\n\n#### 如果在真实的cherry-pick 的过程中出现了冲突\n\n```\n Automatic cherry-pick failed.\n After resolving the conflicts,mark the corrected paths with 'git add <paths>' or 'git rm <paths>'and commit the result with:\n git commit -c 15a2b6c61927e5aed6111de89ad9dafba939a90b\n // **或者:**\n error: could not apply f038d7f... dev\n hint: after resolving the conflicts, mark the corrected paths\n hint: with 'git add <paths>' or 'git rm <paths>'\n hint: and commit the result with 'git commit'\n```\n\n就跟普通的冲突一样，手工解决。\n\n```\n$ git status    # 看哪些文件出现冲突\n$ vim xxx.js  # 手动解决它。\n$ git add xxx.js\n\tor\n$ git add .\t\t\t# 添加到缓存区\n$ git commit -c <新的commit号码>\n```\n\n第二步使用下面的命令，让 Cherry pick 过程继续执行。\n\n```\ngit cherry-pick --continue\n```\n\n"
  },
  {
    "path": "command/git_rebase的两种用法.md",
    "content": "# git rebase的两种用法\n\n## 用法一: 合并当前分支的多个commit记录\n\n你可能出现过对同一处代码进行多次处理的场景。这会导致如下提交记录:\n\n```\n$ git log --pretty=format:'%h: %s'\nd2399da: feat: modify c\n0134695: feat: modify b\neb63848: feat: modify b\n51c0bca: feat: modify b\n4cb600e: feat: modify a\nd29f331: Initial commit\n```\n\n其实, 中间的对b的3次提交 完全可以合并成一次commit, 这个时候 rebase就很有用了。\n\n### 1. 找到想要合并的commit, 使用rebase -i\n\n```\n$ git rebase -i 4cb600e\n```\n\n**注意 git rebase -i [startPonit] [endPoint]**\n\n前开后闭 区间 这里的 [startPonit] 是指需要合并的commit的前一个commit (即当前示例中的 “4cb600e: feat: modify a”)。 因为, 三个commit肯定要基于上一个commit合并成了新的commit。\n谨慎使用[endPoint] 省略, 即默认表示从起始commit一直到最后一个，但是一旦你填写了, **则表示 [endPoint]后面的commit全部不要了!**\n\n### 2. 进入Interact交互界面\n\n终端会进入选择交互界面, 让你进行变基选择操作:\n\n![](media/47e2a05c214d49f7bbe30c7d58bcd331.png)\n\n- 最上面三行, 就是刚刚选中的三个commit, 按时间顺序依次往下排序（时间最老的在上面）(**和git log的展示顺序是反的, 大家查看的时候要注意**)\n- 前面的三个Pick 其实就是下面 **Commands展示的7种命令中的第一个p**, 也就是使用commit。\n\n### 3.使用s命令合并到上一个commit\n\n1. 按i 进入操作, 将**第二、三个commit的pick改成s**\n2. 按Esc 退出操作\n3. 输入:wq保存并退出\n\n![](media/c98f8577d9e440afacc1f33900f90835.png)\n\n| **命令** | **缩写** |                         **含义**                         |\n| :------: | :------: | :------------------------------------------------------: |\n|   pick   |    p     |                       保留该commit                       |\n|  reword  |    r     |          保留该commit，但需要修改该commit的注释          |\n|   edit   |    e     |   保留该commit, 但我要停下来修改该提交(不仅仅修改注释)   |\n|  squash  |    s     |               将该commit合并到前一个commit               |\n|  fixup   |    f     | 将该commit合并到前一个commit，但不要保留该提交的注释信息 |\n|   exec   |    x     |                      执行shell命令                       |\n|   drop   |    d     |                       丢弃该commit                       |\n\n### 4.修改commit记录\n\n![](media/ea41ef6e45a44d1780182e7f1f483c60.png)\n\n这里三个信息都是一样的, 我们选用第一个的提交信息, 将其余的全部注释掉,重复上述步骤, 保存退出即可\n\n![](media/474feca2a40949c0a9dc579122ef4ece.png)\n\n### 5.查看最新合并情况\n\n会发现原三个一样的提交现在合并成了一个新的commit。\n\n![](media/1303dcff987147d79a1340c6abe0233e.png)\n\n## 用法二: 避免出现分叉合并\n\n### 1.原理介绍\n\n首先通过简单的提交节点图解感受一下rebase在干什么\n\n构造两个分支master和feature，其中feature是在提交点B处从master上拉出的分支\n\nmaster上有一个新提交M，feature上有两个新提交C和D\n\n![](media/36efc2704d174acab598c4b9addd3694.png)\n\n此时我们切换到feature分支上，执行rebase命令，相当于是想要把master分支合并到feature分支（这一步的场景就可以类比为我们在自己的分支feature上开发了一段时间了，准备从主干master上拉一下最新改动。模拟了git pull --rebase的情形）\n\n```\n# 这两条命令等价于git rebase master feature\ngit checkout feature\ngit rebase master\n```\n\n下图为变基后的提交节点图，解释一下其工作原理：\n\n![](media/12b959efcc454da5a15b9fdec493d61b.png)\n\n- feature：待变基分支、当前分支\n- master：基分支、目标分支\n\n#### 官方原文解释：\n\n当执行rebase操作时，git会从两个分支的共同祖先开始提取待变基分支上的修改，然后将待变基分支指向基分支的最新提交，最后将刚才提取的修改应用到基分支的最新提交的后面。\n\n#### 结合例子解释：\n\n当在feature分支上执行git rebase master时，git会从master和featuer的共同祖先B开始提取feature分支上的修改，也就是C和D两个提交，先提取到。然后将feature分支指向master分支的最新提交上，也就是M。最后把提取的C和D接到M后面，注意这里的接法，官方没说清楚，实际是会依次拿M和C、D内容分别比较，处理冲突后生成新的C’和D’。一定注意，这里新C’、D’和之前的C、D已经不一样了，是我们处理冲突后的新内容，feature指针自然最后也是指向D’\n\n#### 通俗解释：\n\nrebase，变基，可以直接理解为改变基底。feature分支是基于master分支的B拉出来的分支，feature的基底是B。而master在B之后有新的提交，就相当于此时要用master上新的提交来作为feature分支的新基底。实际操作为把B之后feature的提交先暂存下来，然后删掉原来这些提交，再找到master的最新提交位置，把存下来的提交再接上去（接上去是逐个和新基底处理冲突的过程），如此feature分支的基底就相当于变成了M而不是原来的B了。（注意，如果master上在B以后没有新提交，那么就还是用原来的B作为基，rebase操作相当于无效，此时和git merge就基本没区别了，差异只在于git merge会多一条记录Merge操作的提交记录）\n\n### 2.冲突解决\n\n在 `rebase` 的过程中，也许会出现冲突 `conflict`。在这种情况，`git` 会停止 `rebase` 并会让你去解决冲突。在解决完冲突后，用 `git add` 命令去更新这些内容。\n\n注意，你无需执行 git-commit，只要执行 continue\n\n```\ngit rebase --continue\n```\n\n这样 `git` 会继续应用余下的 `patch` 补丁文件。\n\n在任何时候，我们都可以用 `--abort` 参数来终止 `rebase` 的行动，并且分支会回到 `rebase` 开始前的状态。\n\n```\ngit rebase —abort\n```\n\n### 3.实际git提交示例\n\n这里严格按照上面的图解，构造了实际的git提交示例（注意，这里重新贴了新图，之前的图逻辑上还是不够清晰）\n\n如下图所示，ABM是master分支线，ABCD是feature分支线。\n\n![](media/3c5b8613a9e440fdbee8274d463a6427.png)\n\n此时，在feature分支上执行git rebase master后，会提示有冲突，这里是关键，之前没有把这个细节说清楚。冲突其实也简单，因为我们要生成新的C’和D’嘛，那C’的内容如何得到呢？照搬C的？当然不是，C’的内容就是C和M两个节点的内容合并的结果，D’的内容就是D和M两个节点的内容合并的结果。我们手动处理冲突后，执行如下命令即可：\n\n```\n# 先处理完C，会继续报D的冲突，所以下面命令一共会执行两次\ngit add file\ngit rebase --continue\n```\n\n变基完成以后如下图所示，ABM还是没变化，ABMC’D’是rebase完成后的feature节点图，私以为讲到这里就还是比较清楚了\n\n![](media/19a206038ee44136a2713e8809b6a870.png)\n\n## other：git rebase 和 git pull --rebase\n\n#### 切分支开发与合并分支\n\n```\n#你在本地local分支（并没有远程对应,纯粹是本地开发使用），切回主分支，更新master\ngit checkout master \n#更新master代码\ngit pull\n#切回去\ngit checkout local\n\n#关键的来了，这个时候，把代码变基到最新的上面。\ngit rebase master  ---->解决冲突--->git rebase --continue\n# 搞完以后，切回主分支\ngit checkout master\n# 把local的改动，全部合并到master这边来\ngit merge local\n#提交\ngit push\n```\n\n> ##### 它完全遵循了git的标准规范来开发代码\n\n**我们就知道区别了**：\npull --rebase是为了直接将远程的代码与本地（因为你就在远程分支下开发的）整合；而rebase的一套操作是为了本地额外分支与远程分支的，整合。\n\n### 参考资料\n\n[git rebase的两种用法(最全)](https://blog.csdn.net/small_white_123/article/details/121563248?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-121563248-blog-119004977.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-121563248-blog-119004977.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=9)\n\n[git rebase详解（图解+最简单示例，一次就懂）](https://blog.csdn.net/weixin_42310154/article/details/119004977)\n\n[git rebase超详细解读](https://blog.csdn.net/m0_69424697/article/details/125106290)\n\n[git rebase和add -p和git pull --rebase记录](https://blog.csdn.net/jzlhll123/article/details/119776702)"
  },
  {
    "path": "slam_config/Matlab标定单目相机内参.md",
    "content": "# Matlab标定单目相机内参\n\n我使用的是Matlab 2024，使用不同版本大体流程都是一样的，可能界面显示会稍有不同\n\n## 1.  打开相机标定app\n\n![image-20250813181940461](media/image-20250813181940461.png)\n\n![image-20250813181953983](media/image-20250813181953983.png)\n\n## 2. 上传标定图片\n\n采集标定图片的过程这里不做详细介绍，需要注意的是要采集到不同角度不同距离的棋盘格图片，具体采集要求可以自行百度，差不多采集20幅不同角度，不同距离的图像即可。\n\n![image-20250813182250360](media/image-20250813182250360.png)\n\n选择标定用的图案类型，这里选择的是**棋盘格**（Checkerboard），还支持环形点阵、非对称圆点阵等。**Size of checkerboard square**设置为棋盘格中**单个方格的实际物理边长**，作用是告诉标定程序，棋盘格上相邻角点之间的距离是多少，用来把像素坐标转换成真实世界坐标。\n\n注意：一般指 **内角点间的距离**（不是整块棋盘的大小）。\n\n **Image distortion**表示让标定软件知道你的镜头畸变大不大。**Low**表示普通镜头，畸变不明显（比如手机、常规工业镜头）。**High**表示广角、鱼眼镜头，畸变很大，需要特殊检测算法来识别角点。\n\n![image-20250813182324252](media/image-20250813182324252.png)\n\n点击确定，matlab会自动剔除不合格的图像，并标出合格图像的角点\n\n![image-20250813182906791](media/image-20250813182906791.png)\n\n## 3. 设置相机参数\n\n设置标定相机是标准模型还是鱼眼模型\n\n![image-20250813183158392](media/image-20250813183158392.png)\n\n设置畸变和计算选项：\n\n### **Radial Distortion（径向畸变）**\n\n指镜头在成像时，由于透镜形状和折射原理，导致直线在图像边缘出现弯曲的现象。\n\n1. **2 Coefficients（两个系数）**（一般选择这个即可）\n   - 使用 **四阶多项式** 来估计径向畸变。\n   - 对应 OpenCV 里的 `k1, k2`（再加上有时会用 `k3=0`）。\n   - 适合大多数镜头，尤其是视场角不是特别大的普通相机。\n   - 优点：计算稳定、不过拟合。\n2. **3 Coefficients（三个系数）**\n   - 使用 **六阶多项式**（`k1, k2, k3`）。\n   - 推荐用于 **广角或超广角镜头**（Wide FOV），因为它们的畸变更复杂。\n   - 缺点：自由度多，可能在普通镜头下产生不必要的拟合误差。\n\n------\n\n### **Compute（计算相关的畸变/特性）**\n\n1. **Skew（轴不垂直）**\n   - 假设 X 轴和 Y 轴 **不是完全垂直**。\n   - 意味着像素不是正方形（像素长宽比 ≠ 1），或者成像平面有一定倾斜。\n   - 大部分现代相机像素是矩形且对齐的，所以通常不勾选。\n2. **Tangential Distortion（切向畸变）**（一般选择这个）\n   - 发生在 **镜头的光轴没有完全对准成像传感器中心** 时。\n   - 表现为图像被轻微拉扯或倾斜。\n   - 对应 OpenCV 的 `p1, p2` 参数。\n   - 勾选它会让标定额外估计这两个畸变系数。\n\n![image-20250813183218582](media/image-20250813183218582.png)\n\n## 4. 开始标定\n\n点击按钮开始标定\n\n![image-20250813183417171](media/image-20250813183417171.png)\n\n选中重投影较大的柱状，找到对应的图片，右击移除该图片，**该步骤不是必须的**\n\n![image-20250813183609989](media/image-20250813183609989.png)\n\n点击按钮可以查看矫正之后的图像效果\n\n![image-20250813183756400](media/image-20250813183756400.png)\n\n观察重投影误差，一般小于0.3个像素认为标定效果比较好，点击按钮导出标定结果\n\n![image-20250813183914802](media/image-20250813183914802.png)\n\n## 5. 结果分析\n\n点击相机内参\n\n![image-20250813184023914](media/image-20250813184023914.png)\n\n![image-20250813184045974](media/image-20250813184045974.png)\n\n我将结果含义标注在图片上，这里不做详细介绍了：\n\n![image-20250813184148285](media/image-20250813184148285.png)"
  },
  {
    "path": "slam_config/Rosdep_update_failed.md",
    "content": "# Rosdep update failed \n\n## Action1：\n\n```\nsudo pip install rosdepc \n```\n\n如果显示没有pip可以尝试pip3： \n\n```\nsudo pip3 install rosdepc \n```\n\nor \n\n```\nsudo apt-get install python3-pip  sudo pip install rosdepc \n```\n\n使用 \n\n```\nsudo rosdepc init  rosdepc update \n```\n\nfinished！！ \n\n\n\n## **Action2** \n\n### **1.首先将下面仓库的内容clone到本地** \n\n```\ngit clone https://github.com/ros/rosdistro.git \n```\n\n如果git clone 速度较慢，可以直接拷贝[https://github.com/ros/rosdistro.git](https://github.com/ros/rosdistro.git) 到网页下载，速度提高记录rosdistro存放地址，例如/home/gec/rosdistro \n\n如果是自己的改成/home/user/rosdistro，其中user表示用户名 \n\n \n\n### **2.修改/usr/lib/python2.7/dist-packages/rosdep2/rep3.py文件** \n\n```\ncd /usr/lib/python2.7/dist-packages/rosdep2 \nsudo gedit rep3.py \n```\n\n将REP3_TARGETS_URL = ‘https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml’ \n\n替换成 REP3_TARGETS_URL = 'file:///home/gec/rosdistro/releases/targets.yaml' \n\n替换后的/home/gec 即为第一步clone内容的存放地址 \n\n \n\n### **3.修改/usr/lib/python2.7/dist-packages/rosdistro/__init__.py文件** \n\n```\ncd /usr/lib/python2.7/dist-packages/rosdistro\nsudo gedit __init__.py \n```\n\n将原来文件中的 DEFAULT_INDEX_URL = ‘https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml’ \n\n替换成 DEFAULT_INDEX_URL =  'file:///home/gec/rosdistro/index-v4.yaml' \n\n替换后的/home/gec 即为第一步clone内容的存放地址 \n\n \n\n### **4.配置20-default.list文件** \n\n```\nsudo rosdep init \n```\n\n重新生成/etc/ros/rosdep/sources.list.d/20-default.list. \n\n没有则手动创建/etc/ros/rosdep/sources.list.d/20-default.list.步奏如下： \n\n如果sudo rosdep init成功，直接跳过以下创建文件步骤------- \n\n```\n# 进入到/etc/ros/目录下 \ncd /etc/ros   \n\n# 创建rosdep文件 \nsudo mkdir rosdep && cd rosdep \n\n# 创建sources.list.d文件 \nsudo mkdir sources.list.d && cd sources.list.d \n\n# 创建20-default.list文档 \nsudo gedit 20-default.list \n```\n\n如果sudo rosdep init成功，直接跳过以上创建文件步骤------ \n\n将20-default.list里面内容修改为下面的代码,注意内容/home/gec修改为自己的记录路径 \n\n```\n# os-specific listings first \nyaml file:///home/gec/rosdistro/rosdep/osx-homebrew.yaml osx \n\n# generic \nyaml file:///home/gec/rosdistro/rosdep/base.yaml\nyaml file:///home/gec/rosdistro/rosdep/python.yaml\nyaml file:///home/gec/rosdistro/rosdep/ruby.yaml \ngbpdistro file:///home/gec/rosdistro/releases/fuerte.yaml fuerte \n\n# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead  \n```\n\n注意的是yaml file:// 表示固定格式/home...表示文件目录，所以是yaml file:/// \n\n \n\n### 5.最后直接  \n\n```\nrosdep update \n```\n\n"
  },
  {
    "path": "slam_config/Ubuntu18.04环境配置.md",
    "content": "# Ubuntu18.04环境配置\n\n## 1.安装多版本gcc、g++可切换\n\n```\nsudo apt-get install gcc-4.8 gcc-4.8-multilib  \nsudo apt-get install g++-4.8 g++-4.8-multilib  \nsudo apt-get install gcc-5 gcc-5-multilib  \nsudo apt-get install g++-5 g++-5-multilib  \nsudo apt-get install gcc-6 gcc-6-multilib  \nsudo apt-get install g++-6 g++-6-multilib  \nsudo apt-get install gcc-7 gcc-7-multilib  \nsudo apt-get install g++-7 g++-7-multilib  \nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48  \nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50  \nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60  \nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70  \nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 48  \nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50  \nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 60  \nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70  \n```\n\n### 切换版本命令，可根据自己想要的环境选择（后面安装显卡驱动需要选择>=5的版本）：\n\n```\nsudo update-alternatives --config gcc  \nsudo update-alternatives --config g++\n```\n\n## 2.安装make：\n\n```\nsudo apt install make\n```\n\n## 3.安装cmake\n\n建议手动源码编译安装，选择高版本，后续很多库需要使用告版本cmake\n\n## 4.安装python和python3\n\n#### 安装依赖\n\n```\n$ sudo apt-get install -y nano curl\n# python3\n$ sudo apt-get install -y python3-pip python3-dev python3-setuptools\n# python2\n$ sudo apt-get install -y python-pip python-dev python-setuptools\n$ sudo apt-get install -y libcanberra-gtk0 libcanberra-gtk-module\n```\n\n#### 安装python-pip\n\n```\n# pip3\n$ pip3 install -U pip\n$ pip install -U pip\n# pip\n$ pip3 install setuptools wheel cython\n$ pip install setuptools wheel cython\n```\n\n#### 更改软链接\n\n```\n# python\n$ sudo rm -rf /usr/bin/python && sudo ln -s /usr/bin/python3 /usr/bin/python\n$ which python\n# pip\n$ sudo rm -rf /usr/bin/pip && sudo ln -s /usr/bin/pip3 /usr/bin/pip\n$ which pip\n```\n\n## 5.安装NVIDIA显卡驱动\n\n- #### 先把之前的nvidia卸载干净:\n\n```\nsudo apt-get remove --purge nvidia*\n```\n\n- #### 执行以下命令:\n\n```\nsudo apt-get update\n```\n\n- #### 查看本机显卡能够配置的驱动信息\n\n```\nubuntu-drivers devices\n```\n\n![](./media/41895494f7064942bc224d6b3783b77b.png)\n\n从上图可以看出，推荐安装的版本号是：**nvidia-driver-470 - distro non-free recommended**\n\n- #### 下载你想下载的nvidia驱动版本：\n\n```\nsudo apt install nvidia-driver-470\n```\n\n- #### 重启电脑(这一步很重要，不重启没有效果):\n\n```\nreboot\n```\n\n- #### 重启后，输入命令查看nvidia驱动是否安装好了，gpu是否可用。\n\n```\nnvidia-smi\n```\n\n![](media/4e18cfce966b47a599ab6ae87e7cd069.png)\n\n如上显示，安装成功\n\n## 6.安装CUDA10.2\n\n![](media/4e18cfce966b47a599ab6ae87e7cd069.png)\n\n**这个图说明，我们可以安装11.4及比11.4低的版本。具体需要安装什么版本可以根据情况自己选择。**\n\n- #### 这里我们安装CUDA最新的10.2版本。进入Nvidia cuda下载地址：\n\n[Nvidia 10.2下载地址](https://developer.nvidia.com/cuda-10.2-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal)\n\n然后依次执行下述官方提供的7条命令：\n\n![](media/6a677661b9aa46c8919bafb2aa6fce52.png)\n\n```\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin\nsudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600\nwget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb\nsudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb\nsudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub\nsudo apt-get update\nsudo apt-get -y install cuda\n```\n\n- #### 配置CUDA环境变量\n\n打开.bashrc\n\n```\ngedit ~/.bashrc\n```\n\n在.bashrc末尾添加两行环境变量\n\n```\nexport PATH=$PATH:/usr/local/cuda-10.2/bin\nexport LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}  #根据CUDA版本更换路径\n```\n\n最后，使环境变量生效\n\n```\nsource ~/.bashrc\n```\n\n- #### 测试是否安装成功\n\n```\nnvcc -V\n```\n\n> diyun@diyun:~$ nvcc -V\n> nvcc: NVIDIA ® Cuda compiler driver\n> Copyright © 2005-2019 NVIDIA Corporation\n> Built on Wed_Oct_23_19:24:38_PDT_2019\n> Cuda compilation tools, release 10.2, V10.2.89\n\n**出现如下字段则表示安装成功**\n\n## 7.cudnn8.2.2 安装\n\ncudnn下载地址：https://developer.nvidia.com/rdp/cudnn-archive\n\n- #### 需要提前注册，找到对应版本，下载cuDNN Library for Linux压缩包即可\n\n![](media/d4517e01d32c4567bd9327c728938916.png)\n\n- #### 解压压缩包，并终端进入文件夹，执行以下\n\n```\nsudo cp cuda/include/* -R /usr/local/cuda/include/ \nsudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/ \nsudo chmod a+r /usr/local/cuda/include/cudnn.h \nsudo chmod a+r /usr/local/cuda/lib64/libcudnn*\n```\n\n- #### 测试\n\n```\ncat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2\n```\n\n![](media/91923e61b62c4872ab222d9b86800dbb.png)\n\n安装成功！\n\n## 8.待更新。。\n"
  },
  {
    "path": "slam_config/VSCode使用Clangd.md",
    "content": "# VSCode使用Clangd\n\n## 1.前言\n\n![img](./media/11fd0716dfd4da9dcce36ddf315580bb.png)\n\n vscode c++开大家一般用 vscode 自家出品的c++插件\n\n网络大部分的vcscode c++ 环境搭建也都是讲这个插件的配置，用于提供悬浮提示，代码补全，错误提示，定义声明实现之间的项目跳转等等功能。\n\n先不说导航找实现找引用这种语义分析的基本功能有时候都没办法正确找到实现，速度也一般般,错误和警告也只是有提示，没有quick fix功能，这个功能是能极大提高编程手感的东西，非常好用。\n\n## 2.安装clangd\n\nlinux系统下可以先安装一下clang，不安装其实也没关系\n\n```\nsudo apt install clang\n```\n\n#### 禁用c++插件\n\n![img](./media/11fd0716dfd4da9dcce36ddf315580bb-1733653137231-3.png)\n\n如果不禁用可能会导致冲突\n\n#### 下载clangd插件\n\n![img](./media/e9b6edfe57347d0d747289e2808a29d5.png)\n\n除了编辑器插件以外，在系统下也要安装，这里以linux系统为例，建议下载12以上版本：\n\ngithub仓库: https://github.com/clangd/clangd/releases\n\n将bin文件夹下的clangd移动到 **/usr/bin** 目录下：\n\n```\ncd bin/\nsudo mv clangd /usr/bin/\n```\n\n将 lib 目录下，拷贝至 **/usr/local/lib** 目录下：\n\n```\ncd …/lib/\nsudo mv clang /usr/local/lib\n```\n\n也可以直接apt安装\n\n```\nsudo apt install clangd\n```\n\n![image-20241208182814334](./media/image-20241208182814334.png)\n\n可以看见已经安装成功\n\n## 3.配置clangd\n\n打开工作区settings.json或者用户settings.json，由于有些配置可能需要根据项目进行修改，因此推荐在代码工作区settings.json里面进行配置，配置文件在.vscode/settings.json，这个文件是专门针对当前工作区的设置文件，里面的设置项会取代全局的设置项，从而只在当前工作区生效。\n\nvscode的`clangd`插件有如下配置项：\n\n> clangd.fallbackFlags: 设置头文件搜索路径\n>\n> clangd.path: clangd的可执行文件路径，默认情况下是clangd，防止安装多版本或者windows情况下可能需要手动配置\n>\n> clangd.arguments: clangd服务运行时传递给可执行文件的参数\n>\n> clangd.detectExtensionConflicts: 设置clangd是否检测扩展的冲突\n>\n> clangd.serverCompletionRanking: 设置是否在键入时，对补全结果进行排序。\n>\n\nclangd的其他选项没有那么重要，这里就不一一列举， 可以通过clangd --help查看\n\n一个稍显完整的clangd配置如下：\n\n```\n\"C_Cpp.intelliSenseEngine\": \"disabled\",\n\"clangd.fallbackFlags\": [\n    \"-I${workspaceFolder}/include\"\n],\n\"clangd.path\": \"the/path/to/clangd/executable/on/windows\",\n\"clangd.detectExtensionConflicts\": true,\n\"clangd.arguments\": [\n    // 在后台自动分析文件（基于complie_commands)\n    \"--background-index\",\n    // 标记compelie_commands.json文件的目录位置\n    \"--compile-commands-dir=build\",\n    // 同时开启的任务数量\n    \"-j=12\",\n    // 告诉clangd用那个clang进行编译，路径参考which clang++的路径\n    // \"--query-driver=/usr/bin/clang++\",\n    // clang-tidy功能\n    \"--clang-tidy\",\n    \"--clang-tidy-checks=performance-*,bugprone-*\",\n    // 全局补全（会自动补充头文件）\n    \"--all-scopes-completion\",\n    // 更详细的补全内容\n    \"--completion-style=detailed\",\n    // 补充头文件的形式\n    \"--header-insertion=iwyu\",\n    // pch优化的位置\n    \"--pch-storage=disk\",\n    \"--log=verbose\"\n],\n\"clangd.serverCompletionRanking\": true,    \n```\n\n**以上`clangd`的配置做一下简单介绍：**\n\nC_Cpp.intelliSenseEngine不是clangd的配置参数，这里默认加上是为了关闭官方包的 intelligence，防止造成冲突；\n\nfallbackFlags数组中，每一项前面都需要加上-I;\n\narguments数组中，compile-commands-dir选项的值，一般为cmake的构建目录。cmake在构建时可以选择输出compile-commands.json，具体如何开启不在本文的范围内，可自行百度；\n\nclangd.path默认情况下是clangd，可以不做配置，防止安装多版本或者windows情况下可能需要手动配置；\n\n防止有第三方库或者系统库找不到的情况，可以在clangd.fallbackFlags里做手动指定，添加以下内容：\n\n```\n-xc //clangd默认检测的源文件为c++，手动设置为检测c\n-std=c++17 //c++标准\n-I/usr/lib/gcc/x86_64-linux-gnu/11/include\n```\n\n## 4.生成 compile_command.json\n\nclang工具是根据compile_commands.json文件中包含的项目中每个文件的编译命令来进行解析的。可以使用bear或者cmake生成，我习惯使用cmake\n\n```\nset(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n```\n*colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON*\n\n编译完成，查看build目录下生成compile_command.json文件，这时候就可以使用clangd跳转了，reload一下可以看见clangd的index文件在Workspace根目录下的.cache/clangd/index目录。在修改了.clangd文件之后你也可以把.cache目录删除然后再打开vscode重新生成index并检查clangd的log文件看看还有没有什么需要修改的。\n\n### 参考：\n\n[Getting started](https://clangd.llvm.org/installation)\n\n[vscode 安装clangd插件 替代 c++自带插件-CSDN博客](https://blog.csdn.net/fightingTony/article/details/128256093?ops_request_misc=%7B%22request%5Fid%22%3A%22c796e5efdb916066156e667968911a49%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=c796e5efdb916066156e667968911a49&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-128256093-null-null.142^v100^control&utm_term=clangd安装&spm=1018.2226.3001.4187)\n\n[vscode配置clangd和clang-format-CSDN博客](https://blog.csdn.net/GeomasterYi/article/details/131216841)\n\n[VSCode使用Clangd_vscode clangd-CSDN博客](https://blog.csdn.net/m0_47329175/article/details/128677511?ops_request_misc=&request_id=&biz_id=102&utm_term=vscode配置clangd&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-8-128677511.142^v100^control&spm=1018.2226.3001.4187)\n\n[VSCode使用clangd帮助进行代码跳转、补全和检查_vscode代码跳转插件-CSDN博客](https://blog.csdn.net/weixin_53139089/article/details/138351000)"
  },
  {
    "path": "slam_config/turbot建图导航算法汇总.md",
    "content": "# turbot建图，导航算法汇总 \n\n## **建图** \n\n1. gmapping： https://github.com/ros-perception/openslam_gmapping.git，可以跑，输入：scan，tf，输出：map（pgm格式），tf。 \n2. hector： https://github.com/tu-darmstadt-ros-pkg/hector_slam.git ，可以跑，初始画面非常抖动，输入：scan，initial_pose，tf，输出：tf，map（pgm格式）。 \n3. karto：跑不了，vlp雷达不支持，格式转化问题 \n4. Cartographer 2D： https://github.com/googlecartographer/cartographer.git，https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html可以跑，输入：odom，tf，imu，scan（为什么不是points数据，因为算法是2d建图，雷达只有点云数据输出，要获得scan数据必须通过一层转化），输出：tf，submap_list。 \n5. Cartographer 3D：3D不能直接保存地图，可以跑，需要离线跑。输入：odom，imu，velodyne_points，tf，输出：constraint_list，landmark_poses_list，scan_matched_points2，trajectory_node_list，submap_list，tf。坐标系走着走着会歪，机器人倾斜和地图角度不对，会把人建图进去，没有闭环检测，最后回来图对不上。 \n6. LOAM：也是3D建图，坐标系走着走着会歪，机器人倾斜和地图角度不对。官网的程序，输入感觉就是激光雷达点云数据，输出，输出是一些点云数据。只用了点云数据建图，还可以融合imu数据但是例子没有。 \n7. LeGO LOAM：也是3D建图，坐标系走着走着会歪，机器人倾斜和地图角度不对，走同样的路线生成了好几个不同的图。LeGO-LOAM在LOAM的基础上增加了回环检测。输入：激光点云，输出：轨迹，特征点云。 \n8. BLAM：输入：激光点云，输出：tf，初始坐标系是正确的，但是走了两圈之后整个场景就倾斜了。 \n9. Rtabmap建图（zed）：可用，建完图直接ctrl c退出会自动保存，建图的时候是3D的，但是保存是2D的。输入：scan（zed深度信息转化成），zed左矫正图，camera_info，tf，深度信息。输出：map，tf，cloud_map，map_data \n10. ORB_SLAMv2建图（zed）：单目基本用不了，特征点丢失严重，而且是非常慢的速度。Mono：输入为zed未矫正图像image_raw，输出没有用rviz方式展示，没有rqtgraph。整个效果很差。 \n11. LOAM离线建图：没什么区别。 \n12. Cartographer 3D离线建图：可以转化成pcd文件查看。 \n13. LeGO LOAM离线建图：建不了。 \n14. BLAM离线建图：从离线地图看出，在转角的时候里程坐标系和base坐标系分离了，导致整个地图歪了。 \n15. 双目建图gmapping建图（zed）：2D，效果还可以，输入：scan（转化的深度信息），tf，输出：tf，map（pgm，yaml） \n16. hector建图（zed）：2D，效果还可以，输入：scan，tf，initialpose，输出：tf，map，测试过程中压过了一根电线，小车轮胎离地剧烈摇晃，导致建图出现巨大误差，可见第一段视频，可能是没有回路检测的。 \n17. karto建图（zed）：效果还可以，输入：scan tf 输出map tf \n18. Cartographer建图（zed）：效果还可以，输入：scan odom imu tf 输出submap_list tf \n19. 实时三维建图并进行目标检测：可以，使用rtabmap和yolo v3 \n20. 离线三维建图：用的rtabmap，但是夹杂了yolo进去，导致离线包过大。 \n21. DSO建图(zed)：和orbslam很像，输入只为未矫正图像，输出没有在graph体现，测试的时候里程跑飞且经常出现丢失建图卡死。 \n\n## **导航** \n\n1. Cartographer 2D实时点云建图和导航：建图节点输入odom，tf，imu，激光点云，输出landmark_poses_list，scan_matched_points2，trajectory_node_list，submap_list，constraint_list，map。导航节点movebase输出：速度控制信号，move_base/action_topics，输入信号odom，tf，map，move_base_simple/goal，move_base/action_topics，scan（scan类型全都是单线？）。速度不是很连续都是急起急停，地面低矮障碍物导航会无视直接撞上，老板说目前主要检测都是跟传感器同一个平面的障碍物，比传感器高的可以检测到，低的就没法检测了。 \n2. Cartographer 3D实时点云建图和导航：建图节点输入odom，tf，imu，激光点云，输出landmark_poses_list，scan_matched_points2，trajectory_node_list，submap_list，constraint_list，map，tf。导航节点输入move_base/global_costmap/footprint，move_base/local_costmap/footprint，move_base/goal，move_base_simple/goal，scan，map，odom，tf，输出：速度控制信号，move_base/global_costmap/footprint，move_base/local_costmap/footprint，move_base/goal。问题：放一团电线在地上让他走过去，地图和小车的定位可能会跑飞，影响里程计，只能基于平地，里程计最好不要长时间运行会有累计误差。 \n3. movebase激光导航-定点导航：使用amcl定位+movebase激光导航（激光只检测传感器同一平面障碍物），地图要求已知，amcl输入：scan，initial_pose，tf，输出：tf，particalcloud，diagnostics，导航输入：odom，move_base_simple/goal，map，tf，scan，move_base/global_costmap/footprint，move_base/local_costmap/footprint，move_base/goal，输出：速度控制信号，输出：/move_base/NavfnROS/plan，/move_base/global_costmap/costmap，/move_base/global costmap/footprint，/move_base/global_costmap/costmap_updates，/move_base/ DWAPlannerROS/trajectory_cloud，move_base/DwAPlannerROS/global_plan，/move base/DwAPlannerROS/cost_cloud，/move_base/DWAPlannerROS/local_plan，/move base/local_costmap/footprint，/move_base/local_costmap/costmap_updates，/move base/local_costmap/cosmap，/move_base/goal。 \n4. rtabmap实现视觉定点导航：输入：scan，tf，左边矫正图像，左边相机参数，深度信息，输出：map，mapdata，tf，cloud_map。Movebase输入：map，scan，tf，odom，move_base_simple/goal，move_base/global_costmap/footprint，move_base/local_costmap/footprint，move_base/goal，输出：速度控制信号，/move_base/global_costmap/costmap，/move_base/global costmap/footprint，/move_base/global_costmap/costmap_updates，/move base/local_costmap/footprint，/move_base/local_costmap/costmap_updates，/move base/local_costmap/cosmap，/move_base/goal。低矮物品看不到，撞到垃圾桶等。 \n5. 三维建图-三维导航：是rtabmap的导航，直接用9或者19建图然后再直接导航。输入：odom，scan，tf，左边矫正图像，左边相机参数，深度信息，输出：map，mapdata，tf。Movebase输入：map，scan，tf，odom，move_base_simple/goal，move_base_simple/goal，move_base/global_costmap/footprint，move_base/local_costmap/footprint，/move_base/global，输出：/move_base/NavfnROS/plan，/move_base/global_costmap/costmap，/move_base/global costmap/footprint，/move_base/global_costmap/costmap_updates，move_base/DwAPlannerROS/global_plan，/move_base/DWAPlannerROS/local_plan，/move_base/global_costmap/costmap，/move_base/global costmap/footprint，/move_base/global_costmap/costmap_updates，/move_base/goal。 "
  },
  {
    "path": "slam_config/ubuntu18.04系统下安装turtlebot2.md",
    "content": "# ubuntu 18.04系统下安装turtlebot2 \n\n## 先完成ROS melodic安装 \n\n \n\n## 安装依赖： \n\n```\n$ sudo apt-get install ros-melodic-kobuki-* \n$ sudo apt-get install ros-melodic-ecl-streams \n$ sudo apt-get install libusb-dev \n$ sudo apt-get install libspnav-dev \n$ sudo apt-get install ros-melodic-joystick-drivers \n$ sudo apt-get install bluetooth \n$ sudo apt-get install libbluetooth-dev \n$ sudo apt-get install libcwiid-dev \n```\n\n \n\n## 新建工作空间，准备相关包 \n\n```\n$ mkdir -p ~/turtlebot_ws/src \n$ cd ~/turtlebot_ws/src \n$ git clone https://github.com/turtlebot/turtlebot_simulator \n$ git clone https://github.com/turtlebot/turtlebot.git \n$ git clone https://github.com/turtlebot/turtlebot_apps.git \n$ git clone https://github.com/udacity/robot_pose_ekf \n$ git clone https://github.com/ros-perception/depthimage_to_laserscan.git \n$ git clone https://github.com/yujinrobot/kobuki_msgs.git \n$ git clone https://github.com/yujinrobot/kobuki_desktop.git \n$ cd kobuki_desktop/ \n$ rm -r kobuki_qtestsuite \n$ git clone https://github.com/toeklk/orocos-bayesian-filtering.git \n$ git clone https://github.com/turtlebot/turtlebot_msgs.git \n$ git clone https://github.com/ros-drivers/joystick_drivers.git \n```\n\n \n\n## 复制kobuki和yujin_ocs依赖库到turtlebot_ws/src工作空间下 \n\n```\n$ mkdir -p ~/repos/ \n$ cd ~/repos/ \n$ git clone https://github.com/yujinrobot/kobuki.git \n$ cp -r kobuki/* ~/turtlebot_ws/src/ \n$ git clone https://github.com/yujinrobot/yujin_ocs.git \n$ cp -r yujin_ocs/yocs_cmd_vel_mux/ yujin_ocs/yocs_controllers ~/turtlebot_ws/src/ \n```\n\n \n\n## 编译工作空间 \n\n```\n$ cd ~/turtlebot_ws \n$ catkin_make \n```\n\n \n\n遇到问题： \n\n![](media/1GetImage.png)\n\n \n\n解决方法：orocos-bfl没有安装。\n\n```\nsudo apt-get install ros-melodic-bfl\n```\n\n注意自己ros版本的选择。安装后再catkin_make。 \n\n \n\n## 添加工作空间到bashrc文件 \n\n```\necho \"source ~/turtlebot_ws/devel/setup.bash\" >> ~/.bashrc \nsource ~/.bashrc \n```\n\n \n\n## 测试 \n\n```\nroslaunch turtlebot_bringup minimal.launch \n```\n\n问题：cannot launch node of type [laptop_battery_monitor/laptop_battery.py]: laptop_battery_monitor \n\n解决：\n\n```\nsudo apt-get install ros-melodic-laptop-battery-monitor \nroslaunch turtlebot_teleop keyboard_teleop.launch \n```\n\n"
  },
  {
    "path": "slam_config/windows下orb和hfnet安装.md",
    "content": "# ORB-SLAM3 and HF-NET安装(Windows)\n\n## 1.克隆代码和依赖库到本地\n\n#### orbslam3_opt:\n\n```\ngit clone https://stash.slamtec.com/scm/np/orbslam3_opt.git\n```\n\n#### Hfnet-slam opt：\n\n```\ngit clone https://stash.slamtec.com/scm/np/hfnet_slam_opt.git\n```\n\n\n#### datasets：\n\n- \\\\10.254.0.3\\Share\\temp\\csk\\datasets\\auroravision\n\n#### 3rdparty：\n\n- \\\\10.254.0.3\\Share\\temp\\csk\\datasets\\auroravision\\3rd libs\n\n![image-20231221170830065](media/image-20231221170830065.png)\n\n解压到本地目录\n\n- 手动下载Pangolin并切换hash\n\n```\ngit clone https://github.com/stevenlovegrove/Pangolin.git\ncd Pangolin\ngit reset --hard fe57db532ba2a48319f09a4f2106cc5625ee74a9\n```\n\n#### cmake：\n\nhttps://cmake.org/download/\n\n# 2.编译依赖库\n\n#### Boost：\n\ncmd下运行\n\n```\nbootstrap.bat\n```\n\n会在当前目录生成一个可执行文件 `b2.exe`，接着执行\n\n```\nb2 --build-dir=build/x64 runtime-link=shared address-model=64 threading=multi --build-type=complete --stagedir=./stage/x64\n```\n\n等待安装完毕提示生成库的头文件目录和库目录。\n\n![image-20231221173821485](media/image-20231221173821485.png)\n\n#### Eigen：\n\n![image-20231221173740474](media/image-20231221173740474.png)\n\n打开cmake选择源码目录和编译目录，点击Configure，设置环境。我使用的是vs2019，平台选x64，点击Finish。\n\n![image-20231221174119604](media/image-20231221174119604.png)\n\n没有问题的话，就会出现输出框中的“Configuring done”了\n\n把**CMAKE_INSTALL_PREFIX**变量的值设置为Eigen的安装目录，默认是安装在c盘\n\n![image-20231221174948586](media/image-20231221174948586.png)\n\n再次点击“Configure”，再次显示“Configuring done”\n\n点击“Geenerate”生成VS工程，输出“Generating done”\n\n再点击“Open Project”，会自动地以管理员方式打开Visual Studio。\n\n![image-20231221175822432](media/image-20231221175822432.png)\n\n确保VS当前是“Release”和“×64”模式，右键“ALL_BUILD”，点击“生成”。再右键“INSTALL”，点击“生成”。\n\nEigen安装完成。\n\n#### Glew：\n\n点击\"your_path\\glew-2.2.0\\build\\vc15\"下的glew.sln\n\n![image-20231221180457802](media/image-20231221180457802.png)\n\n点确定升级到需要的编译器版本。\n\n![image-20231221180643309](media/image-20231221180643309.png)\n\n切换模式，依次点击生成。\n\n#### Opencv：\n\ncmake编译，点击“Configure”\n\n![image-20231221181824028](media/image-20231221181824028.png)\n\n第一次生成会下载一些dll，比较慢可能会导致超时，可以多尝试几次或者手动下载，下载位置在build/3rdparty下。\n\n![image-20231221182227926](media/image-20231221182227926.png)\n\n修改cmake 变量：\n\ndisable **BUILD_WITH_STATIC_CRT**\n\nenable **BUILD_opencv_world**\n\nenable **OPENCV_ENABLE_NONFREE**\n\n![](media/image-20231221184743692.png)\n\n在**OPENCV_EXTRA_MODULES_PATH**中填入contrib模块的modules路径\n\n![image-20231221184958930](media/image-20231221184958930.png)\n\n如果系统没有找到Eigen路径，就需要手动设置一下\n\n![image-20231221194201573](media/image-20231221194201573.png)\n\n重新点击“Configure”进行配置，依旧会下载一些文件，位于build/downloads下，比较耗时。\n\n等待出现“Configuring done”，点击“Generate”按钮，生成vs工程文件。\n\nOpen Project，正确配置模式，选择ALL_BUILD，右键生成，生成库文件。\n\n![image-20231221191554462](media/image-20231221191554462.png)\n\n成功生成后，选择INSTALL，右键生成，生成头文件。\n\n#### Pangolin：\n\nCMakeLists中增加一句\n\n```cmake\ndiff --git a/CMakeLists.txt b/CMakeLists.txt\nindex 2f3092c5..f5c5e071 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -35,7 +35,7 @@ endif()\n if(_WIN_)\n     option( BUILD_SHARED_LIBS    \"Build Shared Library\" OFF)\n     option( MSVC_USE_STATIC_CRT  \"Use static C Runtime with MSVC, /MT instead of /MD\" ON)\n-\n+    add_definitions(-DGLEW_STATIC)\n     # Make sure there are no erroneous C Runtime flags\n     list(APPEND FLAG_VARS\n         CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO\n@@ -101,6 +101,7 @@ endif()\n #######################################################\n ## Add all pangolin components\n```\n\n点击“Configure”进行配置，会出现报错，找不到相关库路径。\n\n- set GLEW_INCLUDE_DIR to (glew-src)/include\n- set GLEW_LIBRARY to (glew-src/cmake_output)/lib/Release/glew32s.lib\n\n![](media/image-20231221195955247.png)\n\n修改头文件安装目录，默认在c盘\n\n![image-20231222100423798](media/image-20231222100423798.png)\n\n等待出现“Configuring done”，点击“Generate”按钮，生成vs工程文件。\n\n\"Open Project\"，正确配置模式，选择ALL_BUILD，右键生成，生成库文件。\n\n选择INSTALL，右键生成，生成头文件。\n\n## 3.编译ORB-SLAM3\n\n同样的操作\n\n![image-20231222101141084](media/image-20231222101141084.png)\n\n如果提示报错，根据报错信息手动填写依赖库的路径\n\n![image-20231222101500578](media/image-20231222101500578.png)\n\n多次“Configure”直到不报红为止，配置路径在自己电脑本地依赖库根目录的如下位置：\n\n![image-20231222102551761](media/image-20231222102551761.png)\n\n点击“Generate”按钮，生成vs工程文件。\n\n\"Open Project\"，正确配置模式，选择stereo_inertial_aurora，右键生成，生成可执行文件。或者根据需要跑的数据集生成对应可执行程序。\n\n![image-20231222112628682](media/image-20231222112628682.png)\n\n编译完成。\n\n## 4.编译HFNET-SLAM\n\n#### 深度网络预训练模型\n\n\\\\10.254.0.3\\Share\\temp\\csk\\datasets\\auroravision\\pretrained-model\\hfnet-exp-orig-041-doublew23-halfbatch-20230814-150000.7z\n\n#### 安装CUDA和CUDNN\n\n参考教程\n\nhttps://blog.csdn.net/SHdabai/article/details/131248257\n\n#### 安装TensorRT\n\n参考教程\n\nhttps://www.yii666.com/blog/489723.html\n\n#### 搭建python虚拟环境\n\n（我使用的anaconda，构建虚拟环境方便管理多版本python和依赖库）\n\n在python环境中运行\n\n```\npip install tensorflow-1.15.4+nv-cp38-cp38-win_amd64.whl\npip install numpy onnx==1.14.0 tf2onnx packaging\npip install onnx_graphsurgeon --index-url https://pypi.ngc.nvidia.com\n```\n\n#### 模型转换\n\n在python环境中运行\n\n```\npython -m tf2onnx.convert --saved-model <pretrained tf model dir> --output export/HF-Net.onnx --inputs image:0 --outputs scores_dense:0,local_descriptor_map:0,global_descriptor:\n```\n\n#### 编译HFNET-SLAM\n\ncmake流程与orb相同"
  },
  {
    "path": "slam_config/xavier装机文档.md",
    "content": "# xavier装机文档 \n\n## 1、刷机 \n\n刷 Jetpack 最新版本: \n\nhttps://www.ncnynl.com/category/Xavier-basic/ \n\n## 2、挂载固态硬盘 \n\nhttps://www.ncnynl.com/archives/201912/3486.html \n\n## 3、更新源列表及软件更新( 必须要先更新 ) \n\n## 4、进入 xavier 基础依赖 \n\nhttps://github.com/yqlbu/jetson-packages-family安装 \n\nDependencies Installation注意不要安装Set CUDA Path \n\n## 5、卸载 opencv \n\n刷机后系统自带 opencv,但是不支持 GPU,建议移除(一定要先安装Opencv,在安装ros,不然后面会出现想不到的错误) \n\n进入https://github.com/yqlbu/jetson-packages-family 找到Table of Content \n\n安装命令 \n\n```\nsudo apt-get update \nsudo apt-get upgrade \nsudo apt-get install -y nano curl \nsudo apt-get install -y python3-pip python3-dev \nsudo apt-get install -y python-pip \nsudo apt-get install -y python-setuptools \nsudo apt-get install -y python3-setuptools \nsudo apt-get install -y libcanberra-gtk0 libcanberra-gtk-module \npip3 install -U pip \npip install -U pip \npip3 install setuptools wheel \npip install setuptools wheel cython \n!!! You may modify the script to install custom version of OpenCV \n```\n\n修改 install_opencv4.1.1_jetson.sh 改成4.4.0 版本的opencv 成功后的日志 \n\n## 6、安装ros \n\nROS入门教程-安装并配置ROS环境（melodic版本） \n\nhttps://www.ncnynl.com/archives/201906/3147.html \n\n```\ncd ~ \nsudo apt-get purge libopencv* \nbash <(wget -qO- https://github.com/yqlbu/jetson-packages-family/raw/master/OpenCV/install_opencv4.1.1_jetson.sh) \n```\n\n> 需要下载 1,680 kB 的归档。 \n>\n> 解压缩后会消耗 3,678 kB 的额外空间。 \n>\n> 获取:1 http://ports.ubuntu.com/ubuntu-ports bionic-updates/universe arm64 \n>\n> libopencv-core3.2 arm64 3.2.0+dfsg-4ubuntu0.1 [631 kB] \n>\n> 获取:2 http://ports.ubuntu.com/ubuntu-ports bionic-updates/universe arm64 \n>\n> libopencv-core-dev arm64 3.2.0+dfsg-4ubuntu0.1 [1,049 kB] \n>\n> 已下载 1,680 kB，耗时 7秒 (256 kB/s)                                           \n>\n> debconf: 因为并未安装 apt-utils，所以软件包的设定过程将被推迟 \n>\n> (正在读取数据库 ... 系统当前共安装有 172732 个文件和目录。) \n>\n> 正在卸载 libopencv-dev (4.1.1-2-gd5a58aa75) ... \n>\n> 正在选中未选择的软件包 libopencv-core3.2:arm64。 \n>\n> (正在读取数据库 ... 系统当前共安装有 172397 个文件和目录。) \n>\n> 正准备解包 .../libopencv-core3.2_3.2.0+dfsg-4ubuntu0.1_arm64.deb ... \n>\n> 正在解包 libopencv-core3.2:arm64 (3.2.0+dfsg-4ubuntu0.1) ... \n>\n> 正在选中未选择的软件包 libopencv-core-dev:arm64。 \n>\n> 正准备解包 .../libopencv-core-dev_3.2.0+dfsg-4ubuntu0.1_arm64.deb ... \n>\n> 正在解包 libopencv-core-dev:arm64 (3.2.0+dfsg-4ubuntu0.1) ... \n>\n> 正在设置 libopencv-core3.2:arm64 (3.2.0+dfsg-4ubuntu0.1) ... \n>\n> 正在设置 libopencv-core-dev:arm64 (3.2.0+dfsg-4ubuntu0.1) ... \n>\n> 正在处理用于 libc-bin (2.27-3ubuntu1.4) 的触发器 ... \n>\n> [BASH]   Installation completed ... \n>\n> sudo sh -c '. /etc/lsb-release && echo \"deb \n>\n> http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main\" > \n>\n> /etc/apt/sources.list.d/ros-latest.list' \n>\n> sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key \n>\n> C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 \n\n```\nsudo apt-get update \nsudo apt-get install ros-melodic-desktop-full \nsudo apt install python-rosdep python-rosinstall python-rosinstall-generator \npython-wstool build-essential \nsudo rosdep init \nrosdep update \necho \"source /opt/ros/melodic/setup.bash\" >> ~/.bashrc \n```\n\n中途可能报错： \n\n打开hosts文件 sudo gedit /etc/hosts #在文件末尾添加 \n\n151.101.84.133  raw.githubusercontent.com \n\n保存后退出再尝试 \n\n## 7、ros中使用realsense \n\n### \ta) 安装 realsense sdk \n\n​\thttps://github.com/IntelRealSense/realsense-ros(官方给出的方式,多次编译失败) \n\n​\thttps://github.com/jetsonhacks/installRealSenseSDK(亲自实验,成功!) \n\n​\t安装 installRealSenseSDK \n\n### \tb) 安装 realsesense_ros \n\n​\t若报错: Project ‘cv_bridges’ specifics '/user/include/opencv' as an include dir, which is not found. \n\n​\t则:将报错路径中的cv_bridgeconfig.cmake文件中 include/opencv 改成 include/opencv4 \n\n```\nvi /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake(94/96行修改opencv4) \nsource ~/.bashrc \nroscore \ngit clone https://github.com/jetsonhacks/installRealSenseSDK.git \ncd installRealSenseSDK \n./installLibrealsense.sh \ncd ~ \nmkdir -p ~/catkin_ws/src \ncd ~/catkin_ws/src \ngit clone https://github.com/IntelRealSense/realsense-ros.git \ncd realsense-ros/ \ngit checkout `git tag | sort -V | grep -P \"^2.\\d+\\.\\d+\" | tail -1` \ncd .. \ngit clone https://github.com/pal-robotics/ddynamic_reconfigure.git \ncatkin_init_workspace \ncd .. \n```\n\n​\t出现以下日志表示成功啦！！！ \n\n## 8、python3 项目测试 \n\n将 CV_Bridge 下的 CMakeLists 中的 Python37 改成 Python3 \n\n## 9、其他 \n\n```\ngit clone https://github.com/JetBrains/pty4j.git \ncd pty4j/native \ngcc -fPIC -c *.c \ngcc -shared -o libpty.so *.o \n\n\\# 复制到 pycharm 下面, 注意下路径 \ncp libpty.so /home/yc/pycharm-community-2019.3.4/lib/pty4j-native/linux/x86 \nsudo apt-get install python-catkin-tools \nmkdir -p ~/project_ws/src \ncd ~/project_ws \ncatkin init \ncd src \ngit clone -b noetic https://github.com/ros-perception/vision_opencv.git \ncatkin config -DPYTHON_EXECUTABLE=/usr/bin/python3-DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so \nsudo pip install -U catkin_pkg \nsudo pip3 install -U catkin_pkg -i https://pypi.douban.com/simple \ncatkin build \nsource ~/project_ws/devel/setup.bash \nsource ~/.bashrc \npip install rospkg \nroslaunch realsense2_camera rs_camera.launch \n```\n\n输入法修复 \n\nubuntu 16.04 输入法候选框不显示: \n\n解决方案: \n\n网上查询到的方法,亲测可用. \n\n如果运行了下面这条命令输入法就正常了的话： \n\n```\nkillall fcitx-qimpanel \n```\n\n那么： \n\n```\nsudo apt-get remove fcitx-ui-qimpanel \n```\n\n问题解决. 亲测可用. "
  },
  {
    "path": "slam_config/基于ROS的opencv安装与卸载.md",
    "content": "# 基于ROS的opencv安装与卸载 \n\n## **Part1:下载安装包**  \n\n前往官网下载所需版本的opencv。 \n\n## **Part2：安装依赖包** \n\n```\nsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev \nsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev \n```\n\n## **Part3：编译opencv**  \n\n```\ncd opncv3.4.2  \n# 终端路径指向自己的opencv文件包，本文档以3.4.2为例\n\n mkdir build && cd build \ncmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. \n# 路径指向自己需要安装的位置，一般在/usr/local or /usr/local/opencv#.# or /usr \n\nmake -j8 \n# 这里是八线程，可以根据自己的电脑选择，一般直接使用命令make \n# 达到100%后继续执行 \n\nsudo make install \n```\n\n \n\n## **part4:配置环境** \n\n### 1.修改opencv.conf文件 \n\n```\nsudo gedit /etc/ld.so.conf.d/opencv.conf  \n\n# 写入 \n/usr/local/lib \n```\n\n \n\n### 2.更新系统共享链接库 \n\n```\nsudo ldconfig\n```\n\n \n\n### 3.修改bash.bashrc文件 \n\n```\nsudo gedit /etc/bash.bashrc \n\n# 文件末尾加入 \nPKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  （注意路径) \n\nexport PKG_CONFIG_PATH \n \n# 有些安装路径可能找不到pkgconfig，解决方法如下：\ncd/usr/local/lib \nsudo mkdir pkgconfig && cdpkgconfig \nsudo gedit opencv.pc \n\n# 添加 \nprefix=/usr/local \nexec_prefix=${prefix} \nincludedir=/usr/local/include \nlibdir=/usr/local/lib \n \nName: OpenCV \nDescription: Open Source Computer Vision Library \nVersion: 3.4.2 \nLibs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core \nLibs.private: -ldl -lm -lpthread -lrt \nCflags: -I${includedir} \n\n注：注意版本与路径 \n```\n\n \n\n### 4.保存退出并source \n\n```\nsource /etc/bash.bashrc \n```\n\n \n\n### 5.验证是否安装成功 \n\n```\npkg-config --modversion opencv \n```\n\n \n\n## **part5：将opencv配置到ROS中** \n\n \n\n```\nsudo gedit /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake \n```\n\n\\# 更改三个地方的路径地址 \n\n![](./media/GetImage1.png)\n\n至此opencv安装与配置完成！ \n\n \n\n## **part6**：opencv的完全卸载\n\n终端指向opencv下build文件夹 \n\n```\nsudo make uninstall \ncd .. \nsudo rm -r build \nsudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv* \n\n# 注意安装路径不同时卸载路径也不同 \nsudo apt-get –purge remove opencv-doc opencv-data python-opencv \n```\n\n卸载完成！ "
  },
  {
    "path": "slam_config/激光雷达与IMU联合标定(lidar_IMU_calib).md",
    "content": "# 激光雷达与IMU联合标定(lidar_IMU_calib）\n\n> 本文档主要介绍浙大开源标定算法lidar_IMU_calib \n>\n> Github地址： https://github.com/APRIL-ZJU/lidar_IMU_calib \n>\n> 论文地址： https://arxiv.org/pdf/2007.14759.pdf \n>\n> 参考资料：https://www.cnblogs.com/chenlinchong/p/14048969.html \n\n​\tlidar_IMU_calib是基于连续时间批量估计的LiDAR-IMU系统的无目标标定，用于校准 6DoF 刚性变换以及 3D LiDAR 和 IMU 之间的时间偏移。基于 IMU 的成本和 LiDAR 点到冲浪距离被联合最小化，这使得校准问题在一般情况下受到很好的约束。 \n\n标定主要需要：Lidar的外参、IMU内参、Lidar与IMU之间的变换。 \n\n## **依赖条件** \n\n### ROS(tested with Kinetic and Melodic) \n\n```\nsudo apt-get install ros-melodic-pcl-ros ros-melodic-velodyne-msgs \n```\n\n### Ceres(tested with version1.14.0) \n\nGithub地址：https://github.com/ceres-solver/ceres-solver/tree/e51e9b46f6ca88ab8b2266d0e362771db6d98067 \n\n### Kontiki\n\n（需要手动下在安装在文件夹内，地址见下文） \n\n### Pangolin\n\n（不需要手动下载） \n\n### Ndt_omp\n\n(不需要手动下载) \n\n## **环境编译** \n\n```\n# init ROS workspace \nmkdir -p ~/catkin_li_calib/src \ncd ~/catkin_li_calib/src \ncatkin_init_workspace \n\n# Clone the source code for the project and build it. \ngit clone https://github.com/APRIL-ZJU/lidar_IMU_calib \n\n# ndt_omp \nwstool init \nwstool merge lidar_IMU_calib/depend_pack.rosinstall \nwstool update \n  \n# Pangolin \n./build_submodules.sh \n```\n\n装完Pangolin后手动将Kontiki编译安装到./src/lidar_IMU_calib/thirdparty/Kontiki中 \n\nGithub地址：https://github.com/APRIL-ZJU/Kontiki \n\n由于xavier是arm架构的限制，需要改动几处编译指令： \n\n1. ndt_omp中的CMakeLists.txt: \n\n   ![](media/1GetImage.jpeg)\n\n   更改为：\n\n   ![](media/1GetImage(1).png)\n\n2. lidar_IMU_calib中的CMakeLists.txt: \n\n   更改为： \n\n   ![](media/GetImage(3).png)\n\n3. 改名： \n\n```\nsudo mv /usr/include/flann/ext/lz4.h /usr/include/flann/ext/lz4.h.bak \nsudo mv /usr/include/flann/ext/lz4hc.h /usr/include/flann/ext/lz4.h.bak \n\n 添加软链接： \nsudo ln -s /usr/include/lz4.h /usr/include/flann/ext/lz4.h \nsudo ln -s /usr/include/lz4hc.h /usr/include/flann/ext/lz4hc.h \n\n## build \ncd ../.. \ncatkin_make \nsource ./devel/setup.bash \n```\n\n## **数据录制** \n\n鉴于是基于NDT匹配算法的里程计计算， \n\n数据录制需要`注意`： \n\n1.需要在平面多的房间里录制； \n\n2.xyz轴方向都需要移动 \n\n3.不要旋转过/移动过猛 \n\n```\nrosbag -record -o out /velodyne_packets/你的IMU数据话题 \n# 注意话题名要匹配。 \n```\n\n## **运行** \n\n在licalib_gui.launch和calib.sh里面修改成你录制的话题 \n\n```\n./src/lidar_IMU_calib/calib.sh \n```\n\n![](media/GetImage5.jpeg)\n\n点击了初始化（Initialization）及下面的三个按钮，后续就一直是点击下面的按钮 \n\n## **结果** \n\n标定结果是四元数，将四元数转换为旋转矩阵。放入了LIOSAM的param.yaml文件里。再就行实际效果测试。 \n\n## **问题** \n\n迭代过程中并不知道自己的标定文件是否是对的，可能需要多录制几次进行测试。 "
  },
  {
    "path": "slam_config/轨迹评估介绍与evo工具使用.md",
    "content": "# 轨迹评估介绍与evo工具使用 \n\n## **介绍** \n\n本文介绍了轨迹评估的基本概念，包括轨迹对齐、尺度变换、绝对轨迹误差、相对轨迹误差以及计算方法、相关文献，以及evo轨迹评估工具的安装、使用举例、命令参数详解。 \n\n \n\n## **第一部分：evo 介绍** \n\n- evo是一款用于视觉里程计和SLAM问题的轨迹评估工具. 核心功能是能够绘制相机的轨迹, 或评估轨迹与真值之间的误差. \n- 它支持多种数据集的轨迹格式(TUM、KITTI、EuRoC MAV、ROS的bag)， 同时支持这些数据格式之间的相互转换。 \n- 灵活的输出/绘图和导出选项(例如LaTeX绘图或Excel表格) \n- 强大的可配置的CLI, 可以涵盖多种场景使用 \n- 用于自定义扩展的模块化 \n- github：[github.com/MichaelGrup…](https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2FMichaelGrupp%2Fevo.git) \n- wiki： [github.com/MichaelGrup…](https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2FMichaelGrupp%2Fevo%2Fwiki) \n\n \n\n## **第二部分：安装 evo 工具** \n\n#### **Step1： python 3.8虚拟环境搭建** \n\n`目的`：构筑一个纯净python 3.8环境（github上告知最新的evo版本支持Python 3.8+，若要支持Python2.7需使用 1.12.0及以下版本）。ubuntu18.04自带python 3.6和2.7，如果不使用python虚拟环境，还可以使用 update-alternatives 命令来切换OS所使用的Python版本，以下以使用Python虚拟环境为例（使用conda方式）： \n\n```\n# 下载 anaconda 或 miniconda， 以下以 miniconda 为例 \nwget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh \n或 \nwget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda2-py27_4.8.3-Linux-x86_64.sh \n \n# 安装 miniconda \nbash iniconda2-py27_4.8.3-Linux-x86_64.sh \nsource ~/.bashrc \n \n# 创建 python3.8 虚拟环境 \nconda create -n slam_env python=3.8 \n \n# 进入虚拟环境 \nconda activate slam_env \n \n# 查看python虚拟环境和其pip工具 （此时提示符已经切换为 slam_env ） \n(slam_env) hadoop@ubuntu:~$ pip --version \npip 21.2.4 from /home/hadoop/miniconda2/envs/slam_env/lib/python3.8/site-packages/pip (python 3.8) \n \n# 查看虚拟环境已安装的python模块 \n(slam_env) hadoop@ubuntu:~$ conda list \n# packages inenvironment at /home/hadoop/miniconda2/envs/slam_env:# \n# Name                    Version                   Build  Channel \n_libgcc_mutex             0.1                        main \n_openmp_mutex             4.5                       1_gnu \nca-certificates           2021.10.26           h06a4308_2 \ncertifi                   2021.10.8        py38h06a4308_2 \nld_impl_linux-64          2.35.1               h7274673_9 \nlibffi                    3.3                  he6710b0_2 \n(下略） \n \n# 升级 pip 到最新版本 \n(slam_env) hadoop@ubuntu:~$ pip install -U pip  \n \n# pip 使用国内 pypi 镜像站（清华） \npip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \n```\n\n至此，完成python虚拟环境搭建完毕，使用时使用 conda activate slam_env 即可进入python虚拟环境提示符。 \n\n\n\n#### **Step2： 使用pip安装 evo 到虚拟环境** \n\n```\n# 进入虚拟环境 \n(base) hadoop@ubuntu:~$ conda activate slam_env \n \n# 安装evo工具 \n(slam_env) hadoop@ubuntu:~$ pip install evo --upgrade --no-binary evo --user \n \n# 查看evo工具 \nls ~/.local/bin \n \n# 编辑 ~/.bashrc， 把 ~/.local/bin 目录加入到 PATH 环境变量 \necho 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc \nsource ~/.bashrc \n \n# 确认evo工具可用 \nevo_ape --help \n \n# 安装tkinter，防止运行 evo 时报错 tkinter 找不到 \nsudo apt install  python3-tk \n```\n\n**备注1: 安装过程会自动安装所依赖的科学计算库和绘图库如numpy、scipy、pandas、matplotlib、pillow等.** \n\n\n\n#### **Step3：工具位置介绍** \n\n- ##### **安装好的 evo 的命令行工具在目录 ~/.local/bin 下** \n\n```\n$ ls ~/.local/bin \n    activate-global-python-argcomplete  evo_traj    pygmentize \n    evo                                 f2py        python-argcomplete-check-easy-install-script \n    evo_ape                             f2py3       python-argcomplete-tcsh \n    evo_config                          f2py3.8     register-python-argcomplete \n    evo_fig                             fonttools   rosbags-convert \n    evo_ipython                         natsort     ttx \n    evo_res                             pyftmerge \n    evo_rpe                             pyftsubset \n```\n\n- **轨迹误差评估方面**：\n  - evo_ape : 计算绝对位姿误差(absolute pose error)，用于整体评估整条轨迹的`全局一致性`； \n  - evo_rpe : 计算相对位姿误差(relative pose error)，用于评价轨迹局部的`准确性`。 \n- **绘图方面**：\n  - evo_traj : 分析/绘图/导出一条或多条轨迹 \n- **评估结果比较方面**：\n  - evo_res : 比较一个或多个结果文件, 结果文件来自 evo_ape 或 evp_rpe的输出 \n- **其他**： \n  - evo_config : 对evo工具的全局设置\n- **需要注意, EUROC数据集、TUM数据集、KITTI数据集使用四元数的顺序是不一样的， 因此在使用 evo 命令时， 需要增加一个命令选项参数进行区分。** \n\n\n\n## **第三部分： 基本概念简介** \n\n在使用evo工具之前， 先介绍一些evo工具使用过程中会遇到的轨迹评估方面的基本概念，以便于更好的理解工具的输出信息和图表。 \n\n基本介绍信息如下所示。 \n\n### **1. 轨迹对齐** \n\n在定量轨迹评估过程时，如图所示，首先估计的轨迹（蓝色）要和真值（黑色）对齐，然后再利用特性的误差度量计算对气候的轨迹估计误差。 \n\n![](./media/GetImage6.png)\n\n下图左图是对齐前，右图是对齐后； 其中灰色线为对应的状态 \n\n![](/./media/GetImage7.png)\n\n### **2. 尺度变换** \n\n**尺度歧义性**？ \n\n根据单目相机相机测量模型可知其尺度歧义性，如图所示，相机将3D点（红色×）投影到成像平面上的2D点（黑色○）。对于单目相机，相同方向但不同距离的3D点（灰色x）投影到相同的2D点，从而导致尺度歧义性。 \n\n**尺度变换**： 相当于添加一个恒定的尺度变换 TsT_sTs到第二个相机，消除该歧义性；\n\n ![](./media/GetImage8.png)\n\n### **3. 绝对轨迹误差和相对轨迹误差** \n\n- 绝对轨迹误差计算的每一个点对（待评估轨迹的点与真值轨迹的点）的绝对值误差。 \n- 相对轨迹误差计算的是，针对两条轨迹，分别计算第 k时刻和 k+Δ时刻的误差，然后这两个误差间再计算绝对值误差。\n\n![](./media/GetImage9.png)\n\n### **4. 补充** \n\n可以在相关文献获取更加详细的信息: A Tutorial on Quantitative Trajectory Evaluation for Visual(-Inertial) Odometry。 \n\n \n\n## **第四部分：evo初体验**\n\n### **1.evo_traj 体验** \n\n- 介绍：evo_traj 可以分析、绘制、导出一个或多个轨迹；可以打开任意多个轨迹，查看统计信息， 还可以将轨迹转换为其他格式； \n\n- 体验\n\n  ```\n  # evo_traj 执行，以KITTI_00_gt为参考，绘制 KITTI_00_ORB  KITTI_00_SPTAMcd evo/test/data \n  evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz \n  ```\n\n- 出现如下的图示 \n\n  ![](./media/GetImage3.png)\n\n  注：虚线为参考值；由于参数设置了xz，因此只显示轨迹在xz平面上投影；坐标表示活动轨迹范围； \n\n  ![](./media/GetImage4.png)\n\n  注： 以起始点作为基准点，针对每个pose点（横），按x/y/z三个方向的分量，描述其距离原点距离（纵）\n\n- 本文后面章节会详细讲解 evo_traj 的每一个命令参数。\n\n### **2.evo_ape 体验 + 绝对轨迹误差计算方法** \n\n- 介绍：evo_ape 可以评估轨迹绝对位姿误差(absolute pose error) \n- 绝对位姿误差常被用作比较估计轨迹和参考估计并计算整个轨迹误差的统计数据， 适用于测试轨迹的全局一致性。 \n\n```\n# 创建存放结果的目录 \nmkdir results \nevo_ape kitti KITTI_00_gt.txt KITTI_00_SPTAM.txt -vas  --plot --plot_mode xz --save_results results/SPTAM_APE.zip \n```\n\n- 出现如下图示效果\n\n  - 绝对轨迹误差信息如下图：\n\n    ![](./media/GetImage10.png)\n\n    注：针对所有位姿点描述绝对误差大小，并与均方根误差、中位值、均值、标准差等直观比较；std覆盖区域为 [mean−std, mean+std], 反应组内个体间离散程度； \n\n    注：默认情况下计算的是ATE(absolute trajectory error)绝对轨迹误差。终端输出 Calculating APE for translation part pose relation... 表示计算的是平移误差；可以使用 -r full 同时计算平移+旋转误差； \n\n  - 轨迹直观误差信息如下图\n\n    ![](./media/GetImage11.png)\n\n    注： 针对整个轨迹，使用颜色显示偏差的大小，按蓝-绿-红渐变色偏差依次变大；放大后可更清楚的查看局部轨迹差； \n    本文后面章节会详细讲解 evo_ape 的每一个命令参数。 \n\n- Umeyama算法\n\n  Umeyama算法用于做点云匹配对齐，因为点集合之间的对应关系已知，它可以计算出两组点云数据间的旋转+平移变换矩阵和相似变换矩阵； \n  原理就是通过点对之间距离平方和的最小二乘误差计算出T，和ICP的损失函数是类似的。 \n\n  ![](./media/GetImage12.png)\n\n  最后计算得到:\n\n  ![](./media/GetImage13.png)\n\n  此外， Eigen 库也封装了函数 Eigen::umeyama（），可直接传入两个点云集合调用求解. \n\n  SE(3)与Sim(3)，对于双目SLAM和RGB-D SLAM，尺度统一，因此需要通过最小二乘计算估计位姿到真实位姿的转换矩阵 S∈SE(3); \n\n  对于单目相机，尺度不确定性，因此需要计算从估计位姿到真实位姿的相似变换矩阵 S∈Sim(3)。 默认为SE(3)，加 -s 参数使用 Sim(3); \n\n  补充说明：可以通过Umeyama的文献获取更进一步的信息： Least-Squares Estimation of Transformation Parameters Between Two Point Patterns \n注：终端输出表示的是用 Umeyama 计算得到的相似矩阵选装、平移和尺度变换的结果。\n  \n```\n   Rotation of alignment: \n    [[ 0.99972834 -0.01321112  0.01920198] \n   [ 0.01357949  0.99972379 -0.01918176] \n     [-0.01894327  0.0194373   0.9996316 ]] \n    Translation of alignment: \n    [1.18538132 2.10165699 2.31548455] \n    Scale correction: 1.0045265524039808 \n```\n\n- 绝对轨迹误差（ATE）计算公式 \n\n  为什要计算绝对轨迹误差？ 绝对轨迹误差实际上在计算什么？ \n  对于视觉SLAM系统， 估计轨迹的全局一致性是重要度量，如何评估全局一致性？ 就是通过比较被估计值和真值轨迹之间的绝对距离来得到。 \n  首先先将两条轨迹对齐。 记P1:n代表待估计的轨迹，Q1:n代表真值轨迹， 则时间戳 iii处的绝对估计误差为： \n\n  ![](./media/GetImage14.png)\n\n  可以这么理解公式：对 A=[R∣t]∈SE(3), 有A−1A=[I∣0]； 那么这里的 SPi 是估计的 Qi， 计算 Qi−1SPi可以直观得到两条轨迹的差值。 \n  则针对所有时刻定义平移分量的 均方根误差(RMSE)、和方差（SSE)：\n\n  ![](./media/GetImage15.png)\n\n  补充说明：可以通过文献获取更进一步的信息： A Benchmark for the Evaluation of RGB-D SLAM Systems \n\n### **3.evo_rpe 体验 + 相对轨迹误差计算方法** \n\n- 介绍： evo_rpe 可以用来计算相对轨迹误差（relative pose error） \n\n  ```\n  evo_rpe kitti KITTI_00_gt.txt KITTI_00_SPTAM.txt  -r full -va --plot --plot_mode xyz --save_results results/SPTAM_RPE.zip \n  ```\n\n  - -r full 指定对平移和旋转的误差均进行计算。 \n  - -as 采用SE(3) Umeyama对齐，处理平移和旋转和尺度 \n\n- 终端输出的轨迹对齐的旋转矩阵和平移矩阵， 以及统计信息\n\n  ```\n  -------------------------------------------------------------------------------- \n    Aligning using Umeyama's method... (with scale correction) \n    Rotation of alignment: \n    [[ 0.99972834 -0.01321112  0.01920198] \n     [ 0.01357949  0.99972379 -0.01918176] \n     [-0.01894327  0.0194373   0.9996316 ]] \n    Translation of alignment: \n    [1.18538132 2.10165699 2.31548455] \n    Scale correction: 1.0045265524039808 \n    -------------------------------------------------------------------------------- \n    Found 4540 pairs with delta 1 (frames) among 4541 poses using consecutive pairs. \n    Compared 4540 relative pose pairs, delta = 1 (frames) with consecutive pairs. \n    Calculating RPE for full transformation pose relation... \n    -------------------------------------------------------------------------------- \n    RPE w.r.t. full transformation (unit-less) \n    for delta = 1 (frames) using consecutive pairs \n    (with Sim(3) Umeyama alignment) \n   \n          max      1.136092 \n          mean      0.024773 \n          median      0.020434 \n          min      0.001043 \n          rmse      0.035773 \n          sse      5.809960 \n          std      0.025807 \n    -------------------------------------------------------------------------------- \n  ```\n\n- **相对位姿误差(RPE) 计算公式**\n\n  为什要计算相对轨迹误差？ 相对轨迹误差实际上在计算什么？ \n  相对位姿误差测量了轨迹在一个固定的时间区间 Δ\\DeltaΔ内的局部准确度。 因此，相对位姿误差对应轨迹的漂移。 \n  先定义时间步 iii处的相对位姿误差如下，可知相对位姿误差计算的是相隔固定时间差 Δ 两帧位姿差：\n\n  ![](./media/GetImage16.png)\n\n  根据上式，对于一个有n个相机位姿的序列中，我们获得 m=n−Δm=n-\\Deltam=n−Δ个独立的沿着序列的相对位姿误差。则可以定义平移分量的的所有时刻的均方根误差RMSE: \n\n  ![](./media/GetImage17.png)\n\n  可以这么理解公式：对 A=[R∣t]∈SE(3), 有 A−1A=[I∣0]. \n  上式中的 (Pi−1Pi+Δ)(P_i^{-1}P_{i+\\Delta}) (Pi−1Pi+Δ)是估计的 Qi−1Qi+ΔQ_i^{-1}Q_{i+\\Delta}Qi−1Qi+Δ，计算 (Qi−1Qi+Δ)−1(Pi−1Pi+Δ)(Q_i^{-1}Q_{i+\\Delta})^{-1} (P_i^{-1}P_{i+\\Delta})(Qi−1Qi+Δ)−1(Pi−1Pi+Δ)可以直观的得到两条轨迹的差值； \n  此处计算的是 EiE_iEi的平移分量，旋转误差也可以被估计，但一般平移误差就足够了（因为旋转误差会随着平移误差的上升而增加）。时间参数 Δ\\DeltaΔ对于帧速较快的相同，如30Hz的传感器，可选择 Δ=30\\Delta=30Δ=30以得到每秒的漂移。 \n  补充说明：可以通过文献获取更进一步的信息： A Benchmark for the Evaluation of RGB-D SLAM Systems \n\n### **4.evo_res 体验** \n\n- 介绍： evo_res 可以用来比较多个结果文件， 打印统计信息、绘图、保存结果到表格等。 \n\n  ```\n  evo_res results/*.zip -p --save_table results/table.csv \n  ```\n\n- 如下图示 \n\n  绝对轨迹误差对比：\n\n  ![](./media/GetImage18.png)\n\n## **第五部分： evo 命令参数详解** \n\n### **1.evo_ape 命令详解** \n\n- 用途：计算绝对位姿误差 \n\n- 绝对位姿误差常被用作比较估计轨迹和参考估计并计算整个轨迹误差的统计数据， 适用于测试轨迹的全局一致性。 \n\n- 命令语法： evo_ape 数据格式 参考轨迹 估计轨迹 可选项 \n\n  - 数据格式： euroc, tum, kitti 等 \n\n- 常用命令示例：\n\n  ```\n  evo_ape euroc MH_data3.csv pose_graphloop.txt -r full -va --plot --plot_mode xyz --save_plot ./VINSplot --save_results ./VINS.zip \n  ```\n\n  命令含义： 考虑平移和旋转部分误差的ape， 进行平移和旋转对齐，以详细模式显示，画图并保存计算结果。\n\n- 参数说明： \n\n  - -r : 即 -pose_relation， 此参数可选, 若不添加此参数，则默认为 trans_part。 有如下可选项： \n\n  | **可选项** | **含义**                                                |\n  | ---------- | ------------------------------------------------------- |\n  | full       | 表示同时考虑旋转和平移误差得到的ape,无单位（unit-less） |\n  | trans_part | 考虑平移部分得到的ape，单位为m                          |\n  | rot_part   | 考虑旋转部分得到的ape，无单位（unit-less）              |\n  | angle_deg  | 考虑旋转角得到的ape,单位°（deg）                        |\n  | angle_rad  | 考虑旋转角得到的ape,单位弧度（rad）                     |\n\n  - -v : 表示 verbose mode， 详细模式 \n\n  - -a ：即 -align, 表示采用 SE(3) Umeyama 对齐。 除了 -a 外，其他可选项如下 \n\n  | **命令**                   | **含义**                                       |\n  | -------------------------- | ---------------------------------------------- |\n  | -a/–align                  | 采用SE(3) Umeyama对齐，只处理平移和旋转        |\n  | -as/–align --correct_scale | 采用Sim(3) Umeyama对齐，同时处理平移旋转和尺度 |\n  | -s/–correct_scale          | 仅对齐尺度                                     |\n\n  - -plot ： 表示画图 \n    - --plot_mode : 选择画图模式， 二维图或三维图，默认为 xyz， 可选项有[xy, xz, yz, zx, zy, xyz]. \n    - --save_plot : 后跟保存图像的文件路径， 如 ./VINSplot. 保存文件的类型， 可以通过 evo_config 命令设置， 常见的可以保存为 png, pdf等  \n  - -save_results : 后跟存储结果的压缩文件路径， 如 ./VINS.zip， 是一个压缩文件。 \n\n  - --help: 显示帮助信息， 格式为： evo_ape 格式 --help , 如 evo_ape euroc --help \n\n### **2.evo_rpe 命令详解** \n\n- 用途：计算相对位子误差 \n\n- 相对位姿误差不进行绝对位姿的比较，相对位姿误差比较运动（姿态增量）。相对位姿误差可以给出局部精度，例如slam系统每米的平移或者旋转漂移量。 \n\n- 命令语法： evo_ape 数据格式 参考轨迹 估计轨迹 可选项 \n\n  - 数据格式： euroc, tum, kitti 等 \n\n- 常用命令示例： \n\n  ```\n  evo_rpe euroc MH_data3.csv pose_graphloop.txt -r angle_deg \\ \n    --delta 1 --delta_unit m -va --plot --plot_mode xyz \\ \n    --save_plot ./VINSplot --save_results ./VINS.zip \n  ```\n\n  命令含义： 求每米的旋转角的rpe，以详细模式显示，画图并保存计算结果。\n\n- 参数说明： \n  - -r : 即 -pose_relation， 此参数可选, 若不添加此参数，则默认为 trans_part。具体参数选项内容 同 evo_ape，具体项可参见前一章节说明.\n  - -d/--delta : 表示相对位姿之间的增量，后跟数值，默认为1， 然后通过 -u/--delta_unit 指定单位； \n  - -u/--delta_unit : 表示增量的单位，可选参数为 f, d, r, m 分别表示 frames, deg, rad, meters 。默认为f。 当此参数为 f 时，则 -d/--delta必须为整型， 其余情况可谓浮点型；-d/--delta 和 -u/--delta_unit 联合起来表示衡量局部精度的单位，如 每米、每弧度、每百米等。  \n  - -v --plot --plot_mode xyz --save_results results/VINS.zip --save_plot ： 这些参数同 evo_ape， 具体可参见前一章节说明。 \n\n### **3.evo_traj 命令详解** \n\n- 用途： 轨迹管理工具 \n\n- 可以打开任意多个轨迹，查看统计信息， 还可以将轨迹转换为其他格式 \n\n- 常用命令示例1： \n\n  ```\n  evo_traj euroc MH_data1.csv MH_data3.csv -v --full_check \n  ```\n\n- 参数说明： \n  - -v : 以详细模式显示 \n  - --full_check : 对轨迹进行检查 \n\n- 常用命令示例2：对轨迹进行对齐， 此时需要利用 --ref 指定参考轨迹 \n\n  ```\n  evo_traj bag ROS_example.bag ORB-SLAM S-PTAM --ref groundtruth -s \n  ```\n\n- 参数说明：  \n  \n- -a ：即 -align, 轨迹对齐的选项参数， 如 -a/--align, -s/--correct_scale, --n_to_align 等等，与evo_ape 相同，详情可参见前一章节 evo_ape 中轨迹说明中的参数解释。 \n  \n- 常用命令示例3： 转换格式 \n\n  ```\n  evo_traj euroc data.csv --save_as_tum  \n  ```\n\n- 参数说明： \n  \n- --save_as_tum : 指定目标数据集格式为 tum \n  \n- 数据集格式转换表如下： \n\n| **源数据集** | **ROS Bag**       | **KITTI**       | **TUM**           |\n| ------------ | ----------------- | --------------- | ----------------- |\n|              | --save_as_bag     | --save_as_kitti | --ave_as_tum      |\n| bag          | yes               | yes             | yes               |\n| euroc        | yes               | yes             | yes               |\n| kitti        | no(no timestamps) | yes             | no(no timestamps) |\n| tum          | yes               | yes             | yes               |\n\n### **4.轨迹的对齐和尺度缩放** \n\n单目相机会存在尺度的不确定性，evo_traj 支持使用-s（或 --correct_scale）参数进行Sim(3)上的对齐（旋转、平移与尺度缩放）。 \n例子1： 下图从左到右三幅图中两条曲线的结果分别是：未对齐、SE(3)对齐、尺度缩放 \n\n![](./media/GetImage19.png)\n\n例子2： 不同的对齐命令效果图，分别是未对齐、SE(3)对齐、Sim(3)对齐、尺度缩放 \n\n![](./media/GetImage20.png)\n\n### **5.evo_res 命令详解** \n\n- 用途：结果比较 \n\n- evo_ape/evo_rpe中将结果保存为.zip文件后，可以利用evo_res对不同的结果进行比较 \n\n- 常用命令示例1： evo_ape得到MH3_1.zip和MH3_2.zip两个文件后，对这两个结果进行比较 \n\n  ```\n  evo_res MH3.zip MH3_2.zip -v \n  ```\n\n- 参数说明： \n  \n  - -v : 详细模式展示信息 \n\n### **6.evo_config 命令详解** \n\n- 用途：全局设置和配置文件的操作 \n\n| **命令**                                   | **说明**                 |\n| ------------------------------------------ | ------------------------ |\n| evo_config show                            | 查看设计文件中的参数配置 |\n| evo_config set                             | 进行参数设置             |\n| evo_config generate                        | 导出配置到指定的json文件 |\n| evo_config reset                           | 将参数还原到默认值       |\n| evo_config show\\|set\\|generate\\|reset help | 将参数还原到默认值       |\n\n- evo_config set 命令最为常用，下面是几个常用的参数，其含义以及可选项 \n\n| **参数**                 | **含义**               | **可选项**                    |\n| ------------------------ | ---------------------- | ----------------------------- |\n| plot_export_format       | 输出图像时图像存储格式 | 常用png,pdf等                 |\n| plot_linewidth           | 作图时线的宽度         | matplotlib支持的宽度，默认1.5 |\n| plot_reference_color     | 图像中参考轨迹的颜色   | black,red,green等             |\n| plot_reference_linestyle | 参考轨迹的线型         | matplotlib支持的线型，默认–   |\n| plot_seaborn_style       | 图像背景和网格         | whitegrid,darkgrid,white,dark |\n| plot_split               | 是否分开显示/存储图像  | false/true                    |\n| plot_figsize             | 画图的图像大小         | 默认宽高均为6，可使用其他值   |\n| table_export_format      | 表格数据输出格式       | 常用 csv,excel,latex,json     |\n\n- 命令示例 \n\n  ```\n  # 将画图背景更改成白色网格 \n  evo_config set plot_seaborn_style whitegrid  \n   \n  # 将字体改为衬线型并调为1.2倍大小 \n  evo_config set plot_fontfamily serif plot_fontscale 1.2  \n   \n  # 将画图所使用的线型改为  \n  evo_config set plot_reference_linestyle -  \n   \n  # 将所画图的图像大小调整为10 9（宽 高） \n  evo_config set plot_figsize 10 9  \n   \n  # 将参数还原到默认值 \n  evo_config reset       \n   \n  # 导出配置 \n  evo_config generate --pose_relation angle_deg --delta 1 --delta_unit m --verbose --plot --out rpe_config.json \n   \n  # 导入配置 \n  evo_rpe euroc MH_data3.csv pose_graphloop.txt -c rpe_config.json\n  ```\n\n### **7.evo 其他常用命令** \n\n| **命令**              | **含义**                |\n| --------------------- | ----------------------- |\n| evo pkg   --version   | 查看evo版本             |\n| evo pkg   --info      | 查看evo的简要介绍和描述 |\n| evo pkg   --pyversion | 查看python版本          |\n| evo pkg   --license   | 查看许可证              |\n| evo pkg   --location  | 查看evo安装路径         |\n| evo pkg   --logfile   | 查看日志文件路径        |\n| evo pkg   --open_log  | 打开日志文件            |\n| evo pkg   --clear_log | 清除日志文件            |\n\n## **第六部分： 在程序中调用 evo 函数**\n\n除了在命令行中使用外， 还可以在程序中使用 evo 能力。 \n\n### **例子1：轨迹对齐** \n\n调用 evo 函数实现不同对齐方式的轨迹结果绘图并比较 \n\nalignment_demo.py: \n\n```\n#!/usr/bin/env python \n\n\"\"\" \ntrajectory alignment functions \n\"\"\" \n\nimport copy \nimport logging \nimport sys \n\nimport evo.core.lie_algebra as lie \nfrom evo.core import trajectory \nfrom evo.tools import plot, file_interface, log \n\nimport numpy as np \nimport matplotlib.pyplot as plt \n\nlogger = logging.getLogger(\"evo\") \nlog.configure_logging(verbose=True) \n\n# 读取参考轨迹数据和待评估轨迹数据 \ntraj_ref = file_interface.read_kitti_poses_file(\"./data/KITTI_00_gt.txt\") \ntraj_est = file_interface.read_kitti_poses_file( \"./data/KITTI_00_ORB.txt\") \n\n# add artificial Sim(3) transformation \ntraj_est.transform(lie.se3(np.eye(3), np.array([0, 0, 0]))) \n\n# 尺寸缩放 \ntraj_est.scale(0.5) \n\nlogger.info(\"\\nUmeyama alignment without scaling\") \ntraj_est_aligned = copy.deepcopy(traj_est) \n\n# 对齐轨迹（但不做尺寸缩放） \ntraj_est_aligned.align(traj_ref) \n\nlogger.info(\"\\nUmeyama alignment with scaling\") \ntraj_est_aligned_scaled = copy.deepcopy(traj_est) \n# 对齐轨迹（同时尺寸缩放） \ntraj_est_aligned_scaled.align(traj_ref, correct_scale=True) \n\nlogger.info(\"\\nUmeyama alignment with scaling only\") \ntraj_est_aligned_only_scaled = copy.deepcopy(traj_est) \n# 对齐轨迹（仅仅尺寸缩放） \ntraj_est_aligned_only_scaled.align(traj_ref, correct_only_scale=True) \n\n# 以下部分为绘图部分 \nfig = plt.figure(figsize=(8, 8)) \nplot_mode = plot.PlotMode.xz \n\nax = plot.prepare_axis(fig, plot_mode, subplot_arg=221) \nplot.traj(ax, plot_mode, traj_ref, '--', 'gray') \nplot.traj(ax, plot_mode, traj_est, '-', 'blue') \nfig.axes.append(ax) \nplt.title('not aligned') \n\nax = plot.prepare_axis(fig, plot_mode, subplot_arg=222) \nplot.traj(ax, plot_mode, traj_ref, '--', 'gray') \nplot.traj(ax, plot_mode, traj_est_aligned, '-', 'blue') \nfig.axes.append(ax) \nplt.title('$\\mathrm{SE}(3)$ alignment') \n\nax = plot.prepare_axis(fig, plot_mode, subplot_arg=223) \nplot.traj(ax, plot_mode, traj_ref, '--', 'gray') \nplot.traj(ax, plot_mode, traj_est_aligned_scaled, '-', 'blue') \nfig.axes.append(ax) \nplt.title('$\\mathrm{Sim}(3)$ alignment') \n\nax = plot.prepare_axis(fig, plot_mode, subplot_arg=224) \nplot.traj(ax, plot_mode, traj_ref, '--', 'gray') \nplot.traj(ax, plot_mode, traj_est_aligned_only_scaled, '-', 'blue') \nfig.axes.append(ax) \nplt.title('only scaled') \n\nfig.tight_layout() \nplt.show() \n```\n\n执行后如图所示：\n\n![](./media/GetImage21.png)\n\n### **例子2：计算APE** \n\n调用 evo 函数计算APE和统计值MEAN \n\ncalc_ape.py: \n\n```\n#!/usr/bin/env python \n\n\"\"\" \ncaculate ape of two trajectories \n\"\"\" \n\nprint(\"loading required evo modules\") \nfrom evo.core import trajectory, sync, metrics \nfrom evo.tools import file_interface \n\n# 读取参考轨迹数据和待评估轨迹数据 \nprint(\"loading trajectories\") \ntraj_ref = file_interface.read_tum_trajectory_file( \"./data/fr2_desk_groundtruth.txt\") \ntraj_est = file_interface.read_tum_trajectory_file( \"./data/fr2_desk_ORB.txt\") \n\n# 调用时间同步算法进行同步，主要是根据 timestamps进行同步 \n# 具体实现参考 evo/core/syn.py 源码 \nprint(\"registering and aligning trajectories\") \ntraj_ref, traj_est = sync.associate_trajectories(traj_ref, traj_est) \n\n# 对齐轨迹（不带尺度缩放） \ntraj_est.align(traj_ref, correct_scale=False) \n\n# 计算APE \nprint(\"calculating APE\") \ndata = (traj_ref, traj_est)     \n\n# 仅针对平移部分计算 \nape_metric = metrics.APE(metrics.PoseRelation.translation_part) \n\n# 对SE(3)的位姿点集合计算APE \n# 详细实现参见 evo/core/metrics.py 源码 \nape_metric.process_data(data) \n\n# 得到rmse，sse，mean，median,max,min,std等统计值 \nape_statistics = ape_metric.get_all_statistics() \nprint(\"mean:\", ape_statistics[\"mean\"]) \n\n# 以下为绘图部分 \nprint(\"loading plot modules\") \nfrom evo.tools import plot \nimport matplotlib.pyplot as plt  \n\nprint(\"plotting\") \nplot_collection = plot.PlotCollection(\"Example\") \n# metric values \nfig_1 = plt.figure(figsize=(8, 8)) \nplot.error_array(fig_1.gca(), ape_metric.error, statistics=ape_statistics, \n                                 name=\"APE\", title=str(ape_metric)) \nplot_collection.add_figure(\"raw\", fig_1) \n\n \n# trajectory colormapped with error \nfig_2 = plt.figure(figsize=(8, 8)) \nplot_mode = plot.PlotMode.xy \nax = plot.prepare_axis(fig_2, plot_mode) \nplot.traj(ax, plot_mode, traj_ref, '--', 'gray', 'reference') \nplot.traj_colormap(ax, traj_est, ape_metric.error, plot_mode, \n                                   min_map=ape_statistics[\"min\"], \n                                   max_map=ape_statistics[\"max\"], \n                                   title=\"APE mapped onto trajectory\") \nplot_collection.add_figure(\"traj (error)\", fig_2) \n\n# trajectory colormapped with speed \nfig_3 = plt.figure(figsize=(8, 8)) \nplot_mode = plot.PlotMode.xy \nax = plot.prepare_axis(fig_3, plot_mode) \nspeeds = [ \n        trajectory.calc_speed(traj_est.positions_xyz[i], \n                                traj_est.positions_xyz[i + 1], \n                                traj_est.timestamps[i], traj_est.timestamps[i + 1]) \n        for i in range(len(traj_est.positions_xyz) - 1) \n] \nspeeds.append(0) \nplot.traj(ax, plot_mode, traj_ref, '--', 'gray', 'reference') \nplot.traj_colormap(ax, traj_est, speeds, plot_mode, min_map=min(speeds), \n                        max_map=max(speeds), title=\"speed mapped onto trajectory\") \nfig_3.axes.append(ax) \nplot_collection.add_figure(\"traj (speed)\", fig_3) \n \nplot_collection.show()  \n```\n\n终端输出信息： \n\n```\nloading required evo modules \nloading trajectories \nregistering and aligning trajectories \ncalculating APE \nmean: 0.0074917768702161495 \n```\n\n计算并打印了MEAN信息 \n\n## **附录：数据集以及 evo 使用例子** \n\n### **TUM数据集** \n\n- 数据格式为 ： timestamp tx ty tz qx qy qz qw 每行8个元素， 结尾没有空格， 时间戳以秒为单位， 精确到小数点后9位 \n\n  ![](./media/GetImage22.png)\n\n- evo_ape 计算轨迹绝对误差的例子\n\n  ```\n    mkdir results \n  \n    # 计算轨迹绝对误差 evo_ape \n    evo_ape tum fr2_desk_groundtruth.txt  fr2_desk_ORB.txt -va --plot --plot_mode xz --save_results results/ORB_fr2_desk.zi \n  \n   # 分析多条曲线 evo_res \n   evo_res results/*.zip -p --save_table results/table.csv \n  \n   # 绘制多条轨迹 evo_traj\n   evo_traj tum freiburg1_xyz-ORB_kf_mono.txt freiburg1_xyz-rgbdslam.txt  --ref=freiburg1_xyz-groundtruth.txt -va --plot --plot_mode xy \n  ```\n\n### **KITTI数据集** \n\n- KITTI数据集格式： r11 r12 r13 tx r21 r22 r23 ty r31 r32 r33 tz 存储变换矩阵的前三行,每行12元素，空格隔开, 无时间戳 \n\n  ![](./media/GetImage23.png)\n\n- evo_ape 计算轨迹绝对误差, evo_traj 绘制多条曲线轨迹 \n\n  ```\n   mkdir results \n  \n   # 计算轨迹绝对误差 evo_ape \n   evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/KITTI_00_ORB.zip \n  \n   # 分析多条曲线 evo_res \n   evo_res results/*.zip -p --save_table results/table.csv \n  \n   # 绘制多条轨迹 \n   cd test/data \n   evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz  \n  ```\n\n### **EUROC数据集** \n\n- EUROC数据格式为：timestamp,px,py,pz,qw,qx,qy,qz,vx,vy,vz,bwx,bwy,bwz,bax,bay,baz 每行17个元素，逗号隔开，时间以纳秒为单位, 无小数\n\n  ![](./media/GetImage24.png)\n\n- evo_ape 计算轨迹绝对误差 \n\n  ```\n  mkdir results \n  \n   # 计算轨迹绝对误差 evo_ape \n   evo_ape euroc V102_groundtruth.csv V102.txt -va --plot --plot_mode xy --save_results results/EUROC.zip \n  ```\n\n## **附录：相关文献** \n\n- Z. Zhang, D. Scaramuzza. A Tutorial on Quantitative Trajectory Evaluation for Visual(-Inertial) Odometry. *IEEE/RSJ International Conference on Intelligent Robots and Systems*, 7244-7251, 2018. 基本概念介绍教程，包括尺度、对齐等等 \n- J. Sturm, N. Engelhard, F. Endres, W. Burgard, D. Cremers. A Benchmark for the Evaluation of RGB-D SLAM Systems. *IEEE International Conference on Robotics and Automation*, 573-580, 2012. 讲解绝对轨迹误差和相对轨迹误差的概念，以及计算 \n- Least-Squares Estimation of Transformation Parameters Between Two Point Patterns, 讲解Umeyama轨迹对齐算法原理和最小二乘过程 \n\n### [参考教程](https://juejin.cn/post/7063041669725159461)\n\n"
  },
  {
    "path": "something_else/stable-diffusion-webui手动安装详细步骤.md",
    "content": "# stable-diffusion-webui手动安装详细步骤\n\n## 环境\n\nOS：Windows10\n显卡类型：NVIDIA（英伟达）\n[Python版本](https://www.python.org/downloads/?login=from_csdn)：3.10.6（必须为该版本）\n[Git](https://git-scm.com/?login=from_csdn)：必须\n\n## 安装过程\n\n### 升级CUDA驱动\n\n**python3.10目前是不支持cuda10.2版本的torch包的,可以通过 [CUDA版本对应的torch](https://download.pytorch.org/whl/torch_stable.html?login=from_csdn)去查看，所以先要升级CUDA驱动，如果是更高版本的驱动可以跳过该步骤。**\n\n需要根据自己显卡类型去下载相应的驱动，win + x ->设备管理器 ->显示适配器\n\n![在这里插入图片描述](media/5ef388c5c9214b6c8fab73fbc87d0071.png)\n\n然后去 [CUDA驱动](https://www.nvidia.com/Download/Find.aspx?lang=en-us&login=from_csdn) 填写对应的显卡信息后搜索显卡驱动\n\n![在这里插入图片描述](media/f3bdcd5cb41b42a6bc70d01e7f62be57.png)\n\n这里选择第一个驱动进行下载，下载之后是一个exe文件，直接按照步骤安装即可，过程比较简单不再赘述\n\n![在这里插入图片描述](media/10e8e9317eca4b14b8682eb30fcbfd6c.png)\n\n使用命令`nvidia-smi`查看，可以看到CUDA版本是11.4，相应的驱动版本是472.84\n\n```shell\nPS C:\\Users\\samsung> nvidia-smi\nSat Apr  1 14:02:38 2023\n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 472.84       Driver Version: 472.84       CUDA Version: 11.4     |\n|-------------------------------+----------------------+----------------------+\n| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |\n| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |\n|                               |                      |               MIG M. |\n|===============================+======================+======================|\n|   0  NVIDIA GeForce ... WDDM  | 00000000:01:00.0 Off |                  N/A |\n| N/A    0C    P8    N/A /  N/A |     75MiB /  4096MiB |      0%      Default |\n|                               |                      |                  N/A |\n+-------------------------------+----------------------+----------------------+\n\n+-----------------------------------------------------------------------------+\n| Processes:                                                                  |\n|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |\n|        ID   ID                                                   Usage      |\n|=============================================================================|\n|    0   N/A  N/A     14052    C+G   ...IA GeForce Experience.exe    N/A      |\n+-----------------------------------------------------------------------------+\n\n```\n\n### 安装CUDAToolKit\n\n如果原来装过CUDA ToolKit请先卸载\n\n[CUDA ToolKit](https://developer.nvidia.cn/cuda-toolkit-archive?login=from_csdn)\n找到CUDA驱动版本对应的CUDA ToolKit版本下载，由于笔者这里的CUDA驱动版本是472.84，所以CUDA ToolKit版本选择11.4.4，[CUDA驱动版本与CUDA ToolKit对应关系](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#major-components?login=from_csdn)\n\n![在这里插入图片描述](media/aed0d72bbc3449959f6423e074167458.png)\n\n![在这里插入图片描述](media/46ce665f69594feeae6a97b5bd605acc.png)\n\n下载好之后是一个exe文件，`cuda_11.4.4_472.50_windows.exe`，可以看到名字中含有可以使用该CUDA ToolKit的最小CUDA驱动为472.50。安装很简单，这里不再赘述。\n\n最终查看CUDA的实际版本，`nvcc --version`\n\n```\nPS C:\\Users\\samsung> nvcc --version\nnvcc: NVIDIA (R) Cuda compiler driver\nCopyright (c) 2005-2021 NVIDIA Corporation\nBuilt on Mon_Oct_11_22:11:21_Pacific_Daylight_Time_2021\nCuda compilation tools, release 11.4, V11.4.152\nBuild cuda_11.4.r11.4/compiler.30521435_0\n```\n\n### 安装cuDNN\n\n[cuDNN版本](https://developer.nvidia.cn/rdp/cudnn-archive?login=from_csdn)\ncuDNN是一个神经网络学习的加速库，因为`stable-diffusion-webui`中根据一些模型进行文本生图时可以用该包加快渲染速度。找到与CUDA版本一直的cuDNN下载\n\n![在这里插入图片描述](media/c58d9bc86cac4a9f8b993aefaebe4151.png)\n\n下载后将该压缩包解压，将里面的全部文件复制到CUDA安装的目录下，路劲为：\nC:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.4\n![在这里插入图片描述](media/b871c543fa5142f08deee9b5fdb5bdf5.png)\n注：可以看到虽然有同名文件夹，但是没有同名文件，所以cuDNN的文件在复制到CUDA中时是不会提示要覆盖的情况，如果有，那么一定是哪里出错了\n\n### 克隆项目地址\n\n[stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui?login=from_csdn)\n![在这里插入图片描述](media/ad0e5659850d4708b89e93f9340c9e9e.png)\n\n### 安装Pytorch\n\n这里使用Anaconda安装了一个python3.10.6的虚拟环境，当然大家也可以不使用Anaconda，直接下载安装python3.10.6也是可以的\n\n[pytorch](https://pytorch.org/?login=from_csdn)\n需要安装CUDA版本对应的Pytorch版本，如果不是使用Annconda，请使用pip install指令下载pytorch\n![在这里插入图片描述](media/180ccb58ffd741a589b0b44079f2c589.png)\n笔者这里本应该安装CUDA11.4对应的pytorch，但是pytorch官网中目前并没有提供该版本，于是安装了CUDA11.3对应的pytorch版本，该版本可以在CUDA11.4中使用\n\n```shell\n# 创建一个python3.10.6的虚拟环境，并命名为 sdui\n(base) C:\\Users\\samsung>conda create -n sdui python==3.10.6\n\n...\n\n#激活创建的虚拟环境 sdui\n(base) C:\\Users\\samsung>conda activate sdui\n# 安装pytorch，等待时间取决于网速\n(sdui) C:\\Users\\samsung>conda install pytorch torchvision torchaudio pytorch-cuda=11.3 -c pytorch -c nvidia\n\n#测试torch是否安装成功\n(sdui) C:\\Users\\samsung>python\nPython 3.10.6 | packaged by conda-forge | (main, Oct 24 2022, 16:02:16) [MSC v.1916 64 bit (AMD64)] on win32\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n>>> import torch\n>>> torch.cuda.is_available()\n# true代表成功使用torch\nTrue\n```\n\n### 部署启动项目\n\n**注意：项目README中提示我们去使用`webui-user.bat`一键部署项目，但是双击 `webui-user.bat`运行后会在项目根目录下生成一个虚拟的python环境（其实是拷贝了系统已经安装的python版本到webui的指定目录），即`\\venv\\Scripts\\python.exe`，后续安装的python依赖包都是需要通过该虚拟python环境中的python命令去下载的，而不是部署在我们通过Anaconda安装的虚拟python环境中。并且为了虚拟环境管理的便捷性，这里我们选择在conda虚拟环境下进行部署。**\n\n**进入到根目录下的modules文件夹，然后编辑launch_utils.py**\n\n大多数安装时过程中会出现反复报错的情况，其实大多数的错误是由于在安装过程中会去github拉去依赖包时超时而导致的，本质原因是不能顺利的访问github，于是可以给在需要去github拉去依赖的代码处加上代理地址：**https://ghproxy.com/**\n\n![image-20230821183317880](media/image-20230821183317880.png)\n\n如果git不下来也可以手动下载git仓库添加到项目根目录下repositories`文件夹\n\n#### 添加模型—没有模型也没有办法使用\n\n项目模型地址:\n\n```\nD:\\项目文件夹\\models\\Stable-diffusion\\模型文件\n```\n\n这里默认使用官方给的默认模型\n\n[模型地址](https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt)\n\nsd-v1-4 .ckpt 这个模型大小接近 4G大小 如果您网速不好，那么请耐心等待。\n\n#### 接下来使用命令进行自动安装\n\n没有使用conda虚拟环境的可以使用`webui-user.bat`进行安装运行，使用conda虚拟环境的则直接运行launch文件\n\n```shell\npython launch.py\n```\n\n耐性等待项目安装结束即可。\n\n#### 启动项目\n\n为了使用gpu加速效果，我们使用下面的命令启动UI界面--xformers\n\n```\npython launch.py --share --xformers --enable-insecure-extension-access --theme dark\n```\n\n使用`webui-user.bat`进行启动的在打开启动文件修改`set COMMANDLINE_ARGS=`为`set COMMANDLINE_ARGS=--xformers`即可。\n\n当看到命令行中出现了\n\n```\nhttp://localhost:8075之类的路径则代表安装启动成功了，端口不一定时8075也有可能是别的  \n直接复制路径到浏览器中就可以了\n```\n\n![image-20230821184834825](media/image-20230821184834825.png)\n\n### 参考\n\nhttps://devpress.csdn.net/hangzhou/64c2430a9a15ac690d7c69c0.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDgzNzczLCJleHAiOjE2OTMwMzQ0MDEsImlhdCI6MTY5MjQyOTYwMSwidXNlcm5hbWUiOiJ3ZWl4aW5fNDM0MjkwNjYifQ.12-rJknE-9hDsR_MuDVKcLd_LptPsteUUBB2msHpWJ4"
  },
  {
    "path": "something_else/如何在Linux中使用Clash.md",
    "content": "# 如何在Linux中使用Clash\n\n## Step 1\n\n下载相应的[Clash](https://github.com/Dreamacro/clash/releases)文件，注意区分`amd`架构和`arm`架构，使用 `uname -m` 命令查询系统硬件型号。例如，本文使用系统是 `aarch64`，需要下载 `arm` 系列的Clash，选择下载 `clash-linux-arm64-v1.13.0.gz`\n\n![image-20230423204352633](media/image-20230423204352633.png)\n\n## Step 2\n\n将下载好的文件传输到Linux系统，解压文件夹或者在系统中解压缩都可以。在 `/etc` 目录下创建 `clash` 目录，使用 `cd /etc/clash` 命令切换到该目录。使用 `gzip -d clash-linux-amd64` 命令解压缩安装包到目标文件夹。使用 `wget -O config.yaml <url>` 命令下载订阅或者从windows版本订阅中打开编辑导出配置文件（这里的订阅文件必须命名为 `config.yaml`）。\n\n![image-20230423204921026](media/image-20230423204921026.png)\n\n## Step 3\n\n接着运行下面的命令修改运行文件名并运行：\n\n```\nmv clash-linux-amd64  clash\n\nchmod +x clash\n\n./clash\n```\n\n启动服务后，会自动下载 `Country.mmdb` 文件，需要等待一会儿，如果失败建议多尝试几次，如果网速不行也可以在[这里](https://pan.baidu.com/share/init?surl=0C7SvnoH3abTZF2j3aT4sw)下载，密码76kn\n\n## Step 4\n\n打开linux的网络链接，配置代理地址为Clash提供的地址，一般都是`127.0.0.1:7890`，如下图所示:\n\n![网络代理配置](media/240693210.png)\n\n浏览器打开地址：https://clash.razord.top/#/proxies，就可以看到Linux下基于WEB的ClashUI，选择对应的节点\n\n## Step 5\n\n设置开机自启动，创建 `/etc/systemd/system/clash.service` 文件，并更改内容如下：\n\n```\nsudo touch /etc/systemd/system/clash.service\n```\n\n```\n[Unit]\nDescription=Clash daemon, A rule-based proxy in Go.\nAfter=network.target\n\n[Service]\nType=simple\nRestart=always\nExecStart=/usr/local/bin/clash -d /etc/clash\n\n[Install]\nWantedBy=multi-user.target\n```\n\n使用 `systemctl enable clash` 命令设置Clash服务在系统启动时运行。\n\n使用 `systemctl start clash` 命令立即运行Clash服务。\n\n使用 `systemctl stop clash` 命令立即运行Clash服务。\n\n使用 `systemctl status clash` 命令查看Clash服务的运行状态。"
  },
  {
    "path": "something_else/获取Office2021安装包及相关激活工具.md",
    "content": "# 获取Office 2021安装包及相关激活工具🛠️\n\n### Office 2021 安装部署和激活方式💡\n\n> 概述\n\n废话不多说,这里我大致搜集了几种能够免费安装`Office 2021`的方法以及激活方式,并总结出保姆级教程 如下:\n\n- `通过Office 2021 RTM官方镜像下载与安装激活Office 2021`\n- `Office Tool Plus部署和安装 Office 2021 和 Office 365`\n- `通过Microsoft 365 订阅会员的方式白嫖Office 365`\n\n以上方式以`win10系统`为例, 任选一种都可以,简单通俗 无脑易懂, 现在就开始吧!\n\n#### 方式一 Office 2021 RTM官方镜像下载与安装激活🔥\n\n这是微软官方发布的`Office 2021 RTM专业增强零售版`\n\n由于微软目前发布的版本只有`Office 2021英文版`，因此如果想要切换为`Office 2021中文版`则需要再次手动安装中文语言包\n\n在后台回复关键字`【 office 】` 即可立即免费获取`Office 2021 RTM专业增强零售版+中文语言包+激活工具`\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGZ41pLibUGoYBAIMnTY5Quaw82Gp38sNNdZUibdHoZeu0hgDica9q0cV9A/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 安装 Office 2021 RTM 专业增强零售版\n\n下载好了之后会得到两个文件\n\n```\n如下图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG9uzBb5MptUdjiamgWFWFrFiablkXgoZAvNkQ9zFuyCE4LJ46tcYSmc2Q/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n然后解压缩`Office 2021 RTM 安装包`, 点击其中的`Setup`开始安装\n\n```\n如下图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGLyLr5Zq1s602oErsDWryLWB3u3KIDRdjIH2jaJF3RJYOOFQKhiaXOsw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n然后稍等片刻....\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGYsr79BjTfvaUl83r5uY6xt5MIrU7Uo8qXGrzXJA3CoMymbga43ajdQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n就开始自动安装了!\n\n```\n小提示: 由于零售版采用自动默认安装方式，因此安装时不会出现组件选择和安装位置选择的步骤。\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGgfpT8G8ibVp0SB7cFkF6gNeW4mOicKEJegnc5WcbSQ3Dz7ur2Xy3wPSw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n等待滚动条走动完毕之后，`Office 2021 RTM专业增强零售版`就算安装好了\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG9p3ApiaEKe6RGKEZo8g1lNaJqqlJS5ibGPo7X69T1gcCsRc6fEePI6zA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n然后接下来就是最后一步安装中文语言包,否则就是英文版的。同样我们直接运行`中文语言安装包`文件就可以了!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGXENdWAhbmAMbey2AfO5xCf9ib6iaeW1GXAuNrtM7HJQo3tqOW36PgqaQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n稍等片刻..\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGEWiaPHwstUDzQOgL91kPFtiaSapIrDj159K63AOR641hTibqIMjWnE2kw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n完成中文汉化安装\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGrZFzbwWnpdbsiaNOADGicpZSOcreZPBhtpbQcicldzN29IhxiaChudC3kg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 激活 Office 2021\n\n当安装好了`Office 2021`之后选择还不能使用，因为你还没有购买, 那么接下来就教大家如何免费的来激活`Office 2021`\n\n那么针对`Office`除了购买正版密钥永久激活外， 这里我个人推荐如下激活方式:\n\n- `HEU KMS Activator`\n\n###### HEU KMS Activator 介绍🧶\n\n这里简单的介绍一下\n\n`HEU KMS Activator` 是基于MDL论坛的KMS 服务端模拟环境`KMS Server Emulator`而制作的一款简洁高效的 KMS 激活工具, 可激活所有受支持的`WIndows和Office`，无需联网即可一键激活，离线全自动激活软件!\n\n总的来说它是我个人觉得目前国内开发者制作的一款最全能激活工具，`绿色、无毒，纯净，无广告`, 口碑也很好!\n\n无论是 `Windows` 还是 `Office` 都可轻易进行激活\n\n```\n使用方法\n```\n\n\n\n还有你的`Office`是不是动不动就提示`许可证有问题`呢`HEU KMS Activator`还可以帮助你完美解决`Office许可证`的问题, 真的是一劳永逸!\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGiaUCjc8tq9kMnCRknCXUGmsDLJrrLwltESBIRtGiaz7zGjKjbfAwDFibA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n哈哈哈哈 别怪我没提醒你 这工具真强大!😁\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGJ0UenuqIPEzSDpxY98cohOVAteyRAick2zC22tJqwdwreXEF6yxSyvg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 完成 Office 2021 RTM的安装\n\n现在我们就可以开心的使用`Office 2021`啦! 搞起来😄\n\n`Office 2021`打开界面如下图所示\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGSmGFrsgKr3RoUPiaJHNciamBaGzJmoKR7toqa9ZKa69YJNuK3NwQYJYQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n------\n\n#### 方式二 Office Tool Plus部署和安装 Office 2021🔥\n\n> 概述\n\n`Office Tool Plus`（简称OTP）是一款微软`Office`办公软件`下载、安装、管理`的部署工具。它可以快速自定义部署，在线下载安装 `Office` 产品的各个版本，也可以通过已有的离线安装文件来部署Office镜像，同时在安装过程中你可以自由选择安装哪些需要使用的组件， 在安装之后也可以单独来安装某个需要的组件。\n\n简单的说`Office Tool Plus`是基于 `Office` 的部署工具,可以很轻松地部署 `Office`。\n\n`Office Tool Plus` 支持多个 Office 许可版本的部署，用户只需几步配置即可开始`下载、安装`。同时为有需要的用户开设了多种安装选项，安装 `Office` 就是如此简单\n\n`Office Tool Plus` 可以为您安装密钥或者配置 KMS 服务。同时高级管理可以让您轻松管理 Office 的授权配置,同时它内部也包含激活方式!\n\n总的来说`Office Tool Plus`就是免费不要钱的`Office`安装工具!\n\nOffice Tool Plus 官方下载地址\n\nhttps://otp.landian.vip/zh-cn/\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGFfsTFqoG27ic3ZLzicqeGHy6hcW8fD3mAXib9ibtq0e8NdpsIB6WcZqNRA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 下载 Office Tool Plus\n\n1. 你可以到`Office Tool Plus官网`上去下载`Office Tool Plus部署工具`\n\n2. 也可以在`微信公众号`后台回复关键字`【 office 】` 直达传送门, 也可立即免费获取`Office Tool Plus`\n\n   `如图`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGto8PQcJK6DGOEGPrgfJrCwYAtgnFXo8j56NR4MlNeibZhxEEkzKSS0Q/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 使用 Office Tool Plus 部署Office 2021 LTSC专业增强版🔥\n\n###### 开始部署\n\n把下载的`Office Tool Plus 部署工具`压缩包解压后，会得到如下文件, 然后点击`Office Tool Plus`开始部署`Office`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGbibVIHQHX4WeVt1rUANK6YLzfqBfAp57Az8dxQGian2UIaU0311mwvDg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\n温馨提示: 如果你的电脑中有其他版本的Office,建议使用这里的工具箱 先卸载掉\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGuvuyqxPdmqlbhhibaPaKRz5pmumuKGcFSsTEPbNLfqw34IKAOttodSw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n选择移除,然后点击开始即可删除电脑中的`Office`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGn8XPsqjGNGNE3VPAVRuy4TQxBJzfLYEwoaxf0uM077ia6u4Cz9csrkw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\n清除许可证\n```\n\n这里你也必须使用`Office Tool Plus`部署工具清除一下之前所安装的`许可证`\n\n方法很简单在`Office Tool Plus`中打开`激活`选择里面的`许可证管理`然后再选择`清除激活状态`\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGKI5CuZONUxEqFOWFCMDazQ0vdmhBPfndn0qKCBdhB4cK1Qc9TfoGEA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n继续点击 `是`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGVUOdUbWbqUGJNic1KwkX4d6CMYjyazsTstxsQG81JEvL7116eWib2FgQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n这样才能完整的清除掉之前所安装的`许可证`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGkwUbaB4S6pIRQncvTSgAHwvS8rdX4tpmvlWs5XoYGfp8vEiaEyA9xeA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n所以在移除之前的`Office`版本后一定记住要做这一步!\n\n接下来确认电脑中没有任何其他版本的`Office`之后，我们就可以点击`部署`按钮开始部署了\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGDaIrsbOYCxjxl78A3j6KCv93SfnwybSaDml2F6Dv8k4xr4T3luUW9Q/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n###### Office Tool Plus部署安装 Office 2021 LTSC专业增强版\n\n在`部署设置`这一项你可以根据我的个人设置进行`基础设置、高级设置、部署设置`就可以了!\n\n```\n如下图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGmBmw4iaHohrzTv5jCb7ibKSOKQF5LHxy6arVANSbjcNyBdUkicYsc5bJw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n设置好了之后直接点击 `开始部署` 就可以下载相关文件和自动安装`Office 2021`了!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGuTE5gibx5nYkxV2P81lwhUDkOckQibucbBdeU1hCyCUcqMX4LIvpACCQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\n温馨提示: 推荐选择office 2021 LTSC 专业增强版本批量许可证, 其他版本可能安装出错或不容易激活,慎重考虑\n```\n\n这里科普一下 `office 2021 LTSC`是什么版\n\n`office 2021 LTSC`版是一种面向长期服务的永久版`Office`，并且不会有微软不断推送的更新，主要适用于限制联网的设备，生产车间设备或者没有条件联网的设备, 当然个人以及家用也是完全可以的!\n\n点击开始`部署按钮`之后,`Office Tool Plus`会自动安装软件, 在这个过程中会自动联网下载并完成`Office`的安装, 这个过程根据上网速度的不同所需要的时间也不同 ，所以稍等一下即可!\n\n\n\n```\n小提示: 由于零售版采用自动默认安装方式，因此安装时不会出现组件选择和安装位置选择的步骤。\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG4JTyC65hvfxeXr90lrNf7ZO5MGDlscI7Q2ISKCTbdibBm7Q2cxq3eicA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n完成安装!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGSP1ArK45ictW1OLWCVuezVNTYD1Muh1z0XasnAR2TW6s1ly6HLWibKtw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n###### Office Tool Plus 激活Office 2021 LTSC专业增强版\n\n安装完成之后，就可以返回到`Office Tool Plus`主界面,再点选`激活`按钮!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG1C4NCvJibTyPv2mKez68w6x9dVsMl3KwgCtYv76ictnew3JpLZ0NJibPw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\n激活配置\n```\n\n然后根据下图进行`激活配置`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGqjkNKxibX1hict8AVcrtOw7a5s4qBycP4xQAMb314Tfial2ibtBAAPmv1g/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n开始自动安装许可证!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGhgeliaIcIFqDPVYgicTEcicljEDcOYcqDm7j2HN0Y21e0AatDpibiaiaQ32Q/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\nKMS服务器配置\n```\n\n然后点击`KMS管理`, 在`KMS主机`一栏中填写 kms.loli.best, 然后点击保存设置，最后点击`激活`按钮!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGKzXlzictbWJ8blOpGlceLtpThM6zRREibcx7uZa4qRopRpcLBtbpFjicQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n最后你会看到` 产品激活成功`的字样!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGAC1wRawakXCqsyMuDCuazicPwia0x4fiaiabQicu7N5j7WCjaVnLZk21YNA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n###### 完成 Office 2021 LTSC专业增强版的安装\n\n现在我们又可以愉快的 开心的使用`Office 2021`啦! 搞起来😄\n\n完美激活`Office 2021最新版`之后打开界面如下图:![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGYUiat2ZMRK1P48BqIC8OxUIiaw3f2hEEBU2IfvyH4Uu0vGLhiaWSRRycg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 使用 Office Tool Plus 部署 Office 365🔥\n\n> 概述\n\n如果你喜欢`Office 365` 也可以使用`Office Tool Plus`来进行安装和部署\n\n在这里简单的科普一下什么是`Office 365`\n\n`Office 365`最大的特点就是`在线办公，协同办公，随时同步`，`onedrive空间大`。这些保证了无论你在任何一台设备修改文件，都可以立刻同步到任何一台联网的设备。\n\n`Office 365`还有一个特点是: 能够随时保持最新版本。\n\n`Office 365`功能最强大，并且一直在更新 也就是说，微软`Office` 新推出的功能，都会第一时间在`Office 365`上更新， 注意一下目前微软官方已经把`Office 365`已更名为`Microsoft 365` 你看到的这两个其实是一个东西！\n\n当然目前微软官方的定价也让很多学生党望而却步:\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG10UQJu9lHKwDcibic9XutUMKDibEudk9BElUgvdgDYiatbibibYicy116OiaUg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n所以这里我们也可以通过`Office Tool Plus` 的方式，来完成`Office 365`的安装与激活!\n\n那么废话不多说了 我们开始部署吧!😁\n\n###### Office Tool Plus部署与安装 Office 365\n\n```\n安装前的准备工作\n```\n\n之前我们就提醒过了 如果你的电脑中有其他版本的`Office`,建议使用`Office Tool Plus`的工具箱先卸载掉, 否则会出现安装失败和其他错误的情况，并且你也可以使用`Office Tool Plus`部署工具清除一下之前所安装的`许可证`\n\n方法很简单在`Office Tool Plus`中打开`激活`选择里面的`许可证管理`然后再选择`清除激活状态`\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGKI5CuZONUxEqFOWFCMDazQ0vdmhBPfndn0qKCBdhB4cK1Qc9TfoGEA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n继续点击 `是`\n\n\n\n这样才能完整的清除掉之前所安装的`许可证`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGkwUbaB4S6pIRQncvTSgAHwvS8rdX4tpmvlWs5XoYGfp8vEiaEyA9xeA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n所以在移除之前的`Office`版本后一定记住要做这一步!\n\n那么做完准备工作之后，我们就可以在`Office Tool Plus`主界面点击`部署`之后开始部署`Office 365`了\n\n在`部署设置`这一项你也可以根据我的`Office 365`个人配置进行`基础设置、高级设置、部署设置`就可以了!\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG9ruNzrTRftDWEfuzdLwqvZsjibdfTvkBdYXZMmnaPrH5RpmVBsnacYg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n然后`部署配置`之后就可以点击 `部署`按钮了\n\n```\n小提示:文件开始下载，如果弹出提示 【是否校验文件】就点击 (是) 就可以了\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGia9m8lYQdDObKXFk7QWa3Ktwvog0vHZL1VMfEqhWff3iceE4Xv4kPpcA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n这个时候`Office Tool Plus`工具会自动下载`Office 365`以及`自动安装`到本地电脑上!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG2gW5oqqF62ZDx0bic5HriagKpjHMaKVwOB9WYZ8mKgmzGIse81ibwa4Jg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n稍等一会!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGSZhcOraqre5RuXhlwvHPgrWYNgKrepicIZRH7oHIBicCw6hXibChAA5qg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n安装完成!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGcu9iaD0VV5bbib8hODlYCutgAaQ427ibdyQZZTf7qbTtUsMOdqO8JXG3A/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n###### Office Tool Plus 激活Office365\n\n```\n激活配置\n```\n\n最主要的正题来啦，`安装是小事 激活是大事!`\n\n我们回到`Office Tool Plus`主界面点击`激活`按钮\n\n然后来到`许可证管理` 选择`Office Mondo 2016 批量许可证版`\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGf1nJyI3vUphjXD4AT0XOIhnHYicDolDwibdAhAljbAgp0pmRC1vIcJzQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n`Office Mondo 2016 批量许可证版`这个版本的`Office`和`Office 365`功能上是差不多的,只是名称不同而已!\n\n最后点击`安装许可证` ，再次点击`是`按钮, 就可以开始安装了!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGfLeruP3VUg1pa5SGZhrDImrbuRgaYEpnZQBibkgFTVDVbWGD08ichiacA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n安装成功后如下图:\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGLFb27zUekvaWk3duqTqlyfVoRDDEHbUjUwpA7HpE0FMD72TStIPjMg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\nKMS服务器配置\n```\n\n然后点击`KMS管理`, 在`KMS主机`一栏中填写 kms.loli.beer, 然后点击保存设置，最后点击`激活`按钮!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGLibRicP96UZ71rhHEBmI17rvgqmIic5kgcicGaAMfl0iazEDpHVdAibNJUSA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n最后你会看到` 产品激活成功`的字样!\n\n###### 完成Office 365的安装\n\n此时已经完全安装好了最新的`Office 365`\n\n我们可以在激活信息里面查看到:`Microsoft Office Mondo 2016`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGTyx17Vt5RnVIXLwYib6ibzsA144Via6fhujicdbNqxL37EEn7Vq6wELUbg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGaq060BQZ6T4ia9YW37pfpiaxsTxzKGuNJcHzzAib0s4jhhqHCicibqjbepw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGGcuRic7iapATJAibOWibgw2O6kkqRDuXaUISysbvmOQURYWUIxJnkl7yng/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n到此所有`Office 365`的安装已完成!\n\n------\n\n#### 方式三 Microsoft 365 订阅会员的方式白嫖Office 365🔥\n\n> 概述\n\n这是`微软官方`让用户体验正版的`3个月`计划, 也就是说免费使用`Microsoft 365`的机会，其实说白了就是让你使用正版但是又有一定期限!\n\n这种方式需要你的`微软账户`申请并加入到`Microsoft 365 开发人员计划`中就可以了!\n\n```\n注意事项\n```\n\n1. 这种方式是微软官方的操作过程，中途可能会使用到`google人机验证` 就是需要你会`魔法`明白`魔法`吧 就是`哈利波特`的那种魔法`咻咻咻.....!`😁\n\n![图片](https://mmbiz.qpic.cn/mmbiz_gif/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGPLaKlahLZdQv1Ppguv1hxmweYLdUdFMK3wnoXUia4xx4iaQsqicoibgyqA/640?wx_fmt=gif&wxfrom=5&wx_lazy=1)\n\n1. 必须要准备一个`微软账户`,如果你还没有 就赶紧自行申请，申请地址如下:\n\n   https://signup.live.com/\n\n那么一切准备就绪之后就开始吧!  具体流程如下:\n\n##### 1.打开立即加入 Microsoft 365 开发人员计划 页面\n\n地址如下:\n\nhttps://developer.microsoft.com/zh-cn/microsoft-365/dev-program\n\n```\n如图\n```\n\n进入之后点击`立即加入` 接下来会叫你登录你的`微软账户`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG1wdpJ5xULxaFZibOBVsJ22iaOM0Z9rsOdIgA2ia9jZALia9hvFPw5wlW4w/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 2.填写开发人员基本信息资料\n\n按照我给出的方式填写就可以了!\n\n```\n图1\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGtdUrqPlmMyvdaBthlTTFrPaFALic6hib1HM63XrvSZkECphcicvbibRWHQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\n图2\n```\n\n\n\n```\n图3\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGNeSe927QcsFgEzGibI30ephrtd0KGe9W6lo2zEHu7w4G8bdomZLQabQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 3.填写E5订阅信息\n\n填写好开发者人员信息之后就可以开始 设置`E5`订阅。\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGOvPPjHCw3cAibibfickdOZ71JE7DI0iaZhAmv9PteCbTWJPrcTk16Zbvjw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n点击`设置E5订阅`之后会弹出 `E5 `沙盒设置对话框,  选择`可配置沙盒` 然后点击下一步!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGJUicicfqzUMchKFjtuYOBv9SpZLT0liclhP3anodKgp7VggWNIJjibUXSQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n接下来就填写`用户名`和`域` 你可以随便填，这里的用户名一定不要是使用过的名称\n\n密码需要`同时包含大小写字母`和`数字`。\n\n```\n注意:账户和密码一定要记牢 后面会使用到!\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGbzOib6HXUP0MRoAPxdEp3OKv8ziacOwMnJuV8YRKpibINS8oicYG8fdxibQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n填写好之后点击`继续`\n\n##### 4.手机短信验证\n\n接下来就是手机验证，输入你的手机号之后，点击`发送代码`\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGMEHXKPsBKlz8Iwe4lmrcqGMuRaJkialGTuWEvtA6dPzBjHlLYV8LeCQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n随后网页会自动加载出`验证码`输入框, 把你手机上接收到的`验证码`输入到 框中就可以点击`设置`了!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGQ4M6mQWN0ZtEibVtiaYLXQ5ztLprVqTDPtpaTF3ebRSbia6AdIcoCnA7A/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\n小提示\n```\n\n如果你手机没有接收到`验证码`或者说如果点击`发送代码`没有任何反应 说明你没有通过`魔法`来获取 ,`魔法`上面已经说过了!😁\n\n最后点击设置 稍等一会...\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGQgaoxz6NXI0y2A6FSic27GdZ01atfa2wWmYcGiap52SBR8b7zFa9yXfQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 5.配置Microsoft 365 admin center 管理者中心\n\n当`立即设置开发人员订阅`等待结束之后会跳转到`Microsoft 365 开发人员订阅`详情页面\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGEB3a7RibibxMiby25myiaqWQKNMHnpm4a8sCialHicr4ic76JOrfGcBKr0lUA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n然后我们要配置一下`Microsoft 365 admin center`管理者中心的账户权限\n\n`地址:` https://admin.microsoft.com/\n\n打开这个页面，这里又会叫你输入`微软账户`,这里的`微软账户`就是刚刚配置的`E5开发者账户`\n\n也就是格式为: 用户名@域.onmicrosoft.com的这个账户, 密码就是之前所设置的`密码`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGWAXJCQzTJBRGhbrAfvgBx2XDcWw2gvdBic3aPeibhJT8cjRsehbUu47w/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n进入到 `Microsoft 365`管理者中心界面, 这里按照我给出的步骤设置即可!\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG6z0yeEnjBUQicFEARI9riavbFJibymt6VPvvDG0CmKcA3EJkZ8Aj0T7vA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n点击更改之后，会提示更改成功!\n\n```\n如图\n```\n\n\n\n##### 6.微软官方下载Office 365\n\n最后一步就是前往`微软Office官方地址`下载安装`Microsoft 365`到电脑上就可以了\n\n`下载地址:` www.office.com\n\n如果提示`登录账户`那么就使用刚刚注册的`E5开发者账户`来登录, 登录之后会出现如下页面:\n\n选择`安装Office`， 再选择`Office 365应用` 就可以下载官方的`Office 365`安装程序了!\n\n```\n如图\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG2JKn7ay8bQmOiaBD5SGP9BrNyx0wyJB157v3jHvJAez0syB3DG1qgMA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n下载好了之后就直接运行`OfficeSetup.exe`执行程序开始安装了!\n\n```\n网速慢的朋友可能下载不了OfficeSetup.exe,我已经把安装包放到网盘 大家自行下载就可以了\n```\n\n在`微信公众号`后台回复关键字`【 office 】` 直达传送门, 也可立即获取到微软官方`OfficeSetup.exe`安装包\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGL395npnczLKvDlj0bfYbTsmR4PsJEYEpn6mAME9E6wpVI4Bh2ypPLA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n开始安装\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG3DNQlcDWFSwrLSbeoWhMICiaVApLZ2OC5BZ1v2fZ844CWwfbKFc3Cjw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n自动下载和安装`Office 365` 稍等一会...\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG96hL8Hy5aEbjyW7ib7NicIQQNjb3YPsp7TJOgknoSll86yrkZXBlmBIw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n完成安装!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpGgEe47X6JbUnFe8nB07j118tCa1MmibGLpjE2GXj2ayOCNbF1vYUp8ZA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n##### 7.使用你的E5开发者账户登录Office\n\n随便打开一个`Office`组件 并登录前面注册的`E5开发者账号`就可以成功激活并免费使用`Office 365`了\n\n输入`E5开发者账户`\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG4UqicsfCaxicklF5dadOhWJQYw4fcrDCwEg0mJvoIEDoic5NpYlavWicrg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n```\n输入密码\n```\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG5ZD5HvpkiaUelESZib54d70Q5frYJyfzjGj29IIBoA4qHDOO70BrL84g/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)\n\n然后你的`Office 365`就可以是完整的激活状态了!\n\n我们可以在`Office`的组件账户中可以查看到`Microsoft 365 Apps for enterprise(企业应用程序)`的字样!\n\n![图片](https://mmbiz.qpic.cn/mmbiz_png/TOQE8GPv82g4KcmGesVu5kjickWDqhXpG8MdrE1ugnySnrQafXvXvQfxFXYazQfKppPmCCHM1s7h6K8bKzWu9zw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)"
  }
]